• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.
  • The Hive's 22nd Icon Contest: Creep Abilities is now concluded, time to vote for your favourite set of icons! Click here to vote!
  • ✅ The POLL for Hive's Texturing Contest #34 is OPEN! Vote for the TOP 3 SKINS! 🔗Click here to cast your vote!
  • ✅ The POLL for Hive's Techtree Contest #20 is OPEN! Vote for the TOP 3 FACTIONS! 🔗Click here to cast your vote!

TasQuestBox

This bundle is marked as pending. It has not been reviewed by a staff member yet.

Introduction


TasQuestBox is a custom UI system for Warcraft 3 V1.31 or higher.
It displays text in multiple pages, for a slow paced read, kinda like quests.

Details


inser the fdf, toc and libs into your map.
Add entries/pages to the system.
Make sure the UI is created at 0s by calling TasQuestBox.Init() or enable autorun in the systems settings at top of code.

TasQuestBox creates an custom Button over the questbutton when the setting ReplaceQuestButton is true, The button opens this ui.

Lua

Light Lua

Light VJass


When the setting HookQuest is enabled creating quests will add entries with the quest texts & icon.
or one can use the function TasQuestBox.Add(name, text, icon). Each call will add one more page, you can use this function inside the Lua root or later on.
The top of the system code shows req libs api and setup.
Lua:
--[[ TasQuestBoxV1.3 by Tasyen
A UI to display Text to players, can use quests and search in the content. suited more for slower pace.
It shows possible pages in a list clicking anything in the list will show the text for that page.

TasQuestBox.Add(name, text, icon)
 add a new entry
 name is displayed in the list
 text a big text when this is selected
 icon is shown next to the title in the pageList, "" or nil show no icon.

TasQuestBox.Remove(obj)
   remove an entry, obj can be a table, number or quest

TasQuestBox.ForceUpdate()
 uses this when you are done adding data

requires
TasFrameAction
TasWindow 
TasButtonList16
TasButtonList.fdf
optional Total Initialization
]]
TasQuestBox = {
   AutoRun = true --(true) will create Itself at 0s, (false) you need to TasQuestBox.Init()
   ,Title = "TasQuestBox"
   ,HookQuest = true -- (true) auto add all made quests into this
   ,NoQuest = true -- (true) do not set text for real quests
   ,ReplaceQuestButton = true -- hide default questbutton and place a custom one to open this
   ,PosOpen = function(frame) -- where to place the open button
      local questbutton = BlzGetFrameByName("UpperButtonBarQuestsButton", 0)
      if TasQuestBox.ReplaceQuestButton then
         BlzFrameSetAllPoints(frame, questbutton)
         BlzFrameSetVisible(questbutton, false)
      else
         BlzFrameSetSize(frame, BlzFrameGetWidth(questbutton), BlzFrameGetHeight(questbutton))
         BlzFrameSetPoint(frame, FRAMEPOINT_TOPLEFT, questbutton, FRAMEPOINT_BOTTOMLEFT, 0, 0)
      end
      --BlzFrameSetAbsPoint(frame, FRAMEPOINT_TOPLEFT, 0.1, 0.55)
   end
   ,Show = false -- show with creation
   ,TocPath = "war3mapImported/TasQuestBox2.toc"
   ,ParentFunc = function() -- who is the parent of this ui
       return BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
   end
   ,Pos = function(frame) -- where to place the ui with the list and text
      --BlzFrameSetPoint(frame, FRAMEPOINT_TOPRIGHT, BlzGetFrameByName("ResourceBarSupplyText", 0), FRAMEPOINT_TOPRIGHT, 0, 0)
      BlzFrameSetAbsPoint(frame, FRAMEPOINT_TOPLEFT, 0.1, 0.55)
   end
   ,Sound = "Sound/Interface/QuestActivateWhat1.wav" -- is played when the open button is clicked make it nil to have no sound
   ,SizeX = 0.5 -- total size
   ,SizeY = 0.25
   ,ButtonCount = 8
   ,TextAreaFdf = "EscMenuTextAreaTemplate" -- frame blueprint used for the textarea it works even with "" or invalid
   ,BoxFdf = "EscMenuControlBackdropTemplate" -- frame blueprint for the window box, "" or nil make no box

How to install


Requiers Warcraft 3 1.31+ or higher
Map needs to be set to Lua in Scenario options
  • Copy ReqLibs Map Script (trigger Editor)
  • Copy TasQuestBox Map Script (trigger Editor) (its content is enough).
  • export
    • war3mapImported\TasButtonList.fdf
    • war3mapImported\TasQuestBox2.toc
    • WHEN USING THE EXPORT ALL BUTTON, IT CAN HAPPEN THAT THE CONTENT OF THIS FILES SWAP
    • import them into your map
  • Installed

The Light Version does not have a search by text and is more hardcoded, but requires only a fdf & toc no code reqs.

When the setting HookQuest is enabled creating quests will add entries with the quest texts & icon.
or one can use the function TasQuestBox.Add(name, text, icon). Each call will add one more page, you can use this function inside the Lua root or later on.
The top of the system code shows req libs api and setup.
Lua:
--[[ TasQuestBoxV1.3 Light by Tasyen
A UI to display Text to players, can use quests and search in the content. suited more for slower pace.
It shows possible pages in a list clicking anything in the list will show the text for that page.

TasQuestBox.Add(name, text, icon)
 this.Add a new entry
 name is displayed in the list
 text a big text when this is selected
 icon is shown next to the this.Title in the pageList, "" or nil show no icon.

 TasQuestBox.Remove(obj)
   remove an entry, obj can be a table, number or quest

TasQuestBox.ForceUpdate()
 uses this when you are done adding data

requires
war3mapImported/TasQuestBox.toc
war3mapImported/TasQuestBox.fdf
optional Total Initialization
--]]
do
    local this = {}    
    this.TocPath = "war3mapImported/TasQuestBox.toc"
    this.AutoRun = false  --(true) will create Itself at 0s, (false) you need to TasQuestBox.Init()
    this.HookQuest = true -- (true) auto add all made quests into this
    this.NoQuest = true -- (true) do not set text for real quests
    this.ReplaceQuestButton = true -- hide default questbutton and place a custom one to open this
    this.SoundFile = "Sound/Interface/QuestActivateWhat1.wav" -- is played when the open button is clicked make it nil to have no sound    
    this.Title = "TasQuestBox"
    this.ButtonCount = 8

    function this.ParentFunc() -- who is the parent of this ui
        return BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
    end
    function this.PosBox(frame)-- where to place this
        BlzFrameSetAbsPoint(frame, FRAMEPOINT_TOPLEFT, 0.1, 0.55)
    end
    function this.PosOpen(frame) -- where to place the openbutton
        local questbutton = BlzGetFrameByName("UpperButtonBarQuestsButton", 0)
        if this.ReplaceQuestButton then
            BlzFrameSetAllPoints(frame, questbutton)
            BlzFrameSetVisible(questbutton, false)
        else
            BlzFrameSetSize(frame, BlzFrameGetWidth(questbutton), BlzFrameGetHeight(questbutton))
            BlzFrameSetPoint(frame, FRAMEPOINT_TOPLEFT, questbutton, FRAMEPOINT_BOTTOMLEFT, 0, 0)
        end
    end

How to install


Requiers Warcraft 3 1.31+ or higher
Map needs to be set to Lua in Scenario options
  • Copy TasQuestBoxLightLua (trigger Editor)
  • export
    • war3mapImported\TasQuestBox.fdf
    • war3mapImported\TasQuestBox.toc
    • WHEN USING THE EXPORT ALL BUTTON, IT CAN HAPPEN THAT THE CONTENT OF THIS FILES SWAP
    • import them into your map
  • Installed

in the jass version add pages with TasQuestBox_Add(string name, string text, string icon).
the jass version can not autoload quests.
JASS:
/**
 TasQuestBox V1.3 by Tasyen
A UI to display Text to players, can use quests and search in the content. suited more for slower pace.
It shows possible pages in a list clicking anything in the list will show the text for that page.

TasQuestBox_Add(string name, string text, string icon)
 add a new entry
 name is displayed in the list
 text a big text when this is selected
 icon is shown next to the title in the pageList, "" or nil show no icon.

TasQuestBox_Remove(integer index)
 start with index 1

TasQuestBox_ForceUpdate()
 */
globals
    // Where is the TOCFile in your map?
    public string TocPath = "war3mapImported/TasQuestBox.toc"
    public boolean AutoRun = true //(true) will create Itself at 0s, (false) you need to TasQuestBox_Init()
    public boolean ReplaceQuestButton = true // hide default questbutton and place a custom one to open this
    public string SoundFile = "Sound/Interface/QuestActivateWhat1.wav" // is played when the open button is clicked make it nil to have no sound
    public sound Sound = null 
    public string Title = "TasQuestBox"
    public integer ButtonCount = 8 //amout of buttons in one Row

...
...
//Happens once at creation, where to pos the whole ui
public function PosBox takes framehandle frame returns nothing
    call BlzFrameSetAbsPoint(frame, FRAMEPOINT_TOPLEFT, 0.1, 0.55)
endfunction
//Happens once at creation, decides where Open Button is posed
public function PosOpen takes framehandle frame returns nothing
    local framehandle questbutton = BlzGetFrameByName("UpperButtonBarQuestsButton", 0)
      if ReplaceQuestButton then
         call BlzFrameSetAllPoints(frame, questbutton)
         call BlzFrameSetVisible(questbutton, false)
      else
         call BlzFrameSetSize(frame, BlzFrameGetWidth(questbutton), BlzFrameGetHeight(questbutton))
         call BlzFrameSetPoint(frame, FRAMEPOINT_TOPLEFT, questbutton, FRAMEPOINT_BOTTOMLEFT, 0, 0)
      endif
endfunction

// ParentFunc who you want as parent, this runs at InitBlizzard, if you need more control you need to modify the part that calls local function Init()
    public function ParentFunc takes nothing returns framehandle
        return BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0)
    endfunction

How to install


Requiers Warcraft 3 1.31+ or higher
Map needs to be set to jass in Scenario options
Enable vjass in trigger editor Menu jasshelper
  • Copy TasQuestBoxLight (trigger Editor)
  • export
    • war3mapImported\TasQuestBox.fdf
    • war3mapImported\TasQuestBox.toc
    • WHEN USING THE EXPORT ALL BUTTON, IT CAN HAPPEN THAT THE CONTENT OF THIS FILES SWAP
    • import them into your map
  • Installed



ChangeLog


V1.4) vjass hotkkey F9, Lua can use (not)discovered quests
V1.3 can remove entries
V1.2 Lua new toc that loads ButtonList & templates.
V1.1 Added Jass version and Light Version

Tags: Quest, UI, Book, Info, Text, ChangeLog​
Previews
Contents

TasQuestBox (Map)

TasQuestBoxLight (Map)

The Lua demo also loads the blizzard fdf templates and uses 2 frame blueprints from them. Either load that addional toc becore making the questbox or change the frame blueprints.
This 2 blueprints choose how the box/background looks and the textarea.
in the systems "config".
Lua:
,TextAreaFdf = "EscMenuTextAreaTemplate" -- frame blueprint used for the textarea it works even with "" or invalid
,BoxFdf = "EscMenuControlBackdropTemplate" -- frame blueprint for the window box, "" or nil make no box

one could use ,BoxFdf = "EscMenuBackdrop" that works just like that.


I am thinking about adding a Lua version into the current jass file and rename into Light.
Edit: It was done. The Lua Light version can still use quests but has no search and no code reqs.

Edit: Updated Lua version to V1.2) There is now only 1 toc that loads ButtonList and the blizzard templates, TasQuestBox2.toc
Edit: Updated to 1.3) As it was requested can now remove entries with TasQuestBox.Remove(obj) / call TasQuestBox_Remove(integer index)
 
Last edited:
Hello, Tasyen!

Is it possible and is it something you'd consider adding, to have a boolean parameter which has this system function independently from the default wc3 Quest Log? Where there would be a separate button that offers the same functionality, but without overriding the default Quest Log? This would allow users to have (for example) a Quest Log and a Journal of sorts. Or whatever one can come up with.

I'd assume if the system functions independently, then you wouldn't be able to add entries via the "Quest" actions, but that should be fine assuming you can still create an entry with TasQuestBox_Add().
 
Ty, for your interest.
it can work without touching the default quest system.
There already is a setup to replace the questbutton with a custom button or not. Check out the top of the system. On default it replaces it.
public boolean ReplaceQuestButton = false
this.ReplaceQuestButton = false
in this case one also should check out function this.PosOpen(frame) or public function PosOpen to choose the position of the open button

In the Lua version one can disable the quest copy feature. The vjass version does not copy any quest content, the demo just uses the same wts strings.
this.HookQuest = false
 
Tell me how to make it possible to launch it by pressing F9 on ESC or by using the -board command instead of the standard one.
I'm also interested in how to increase the window size. I noticed in the standard quest window from Blizzard, there's a small gap in their board, and it actually limits the text greatly, which is inconvenient for reading. There's also no output via command in the chat, which is sad.

The version that I will use is JASS and GUI, since I have not yet reached the level to upgrade to LUA.

It's just awful, she practically did nothing, I pressed F9, she didn't respond, and it was impossible to turn her on using the chat command. She practically didn't do any of the tasks I assigned her.

What's the point of At 0s if the tasks don't work in it, and they're actually saved in DemoJass? Moreover, it won't be possible to control which player receives them, for example, by language, so the message will only appear in one language. Therefore, it was necessary for tasks to be displayed using the At 0s graphical trigger. This was generally incorrect, but fortunately, I managed to find a way to change the task title name in the game interface. However, I still can't launch it via chat or hotkey. If that were the case, I would agree with you, but for now, it's very difficult.

Not only did Blizzard screw up the ability to call box with the if (GetLocalPlayer() == GetTriggerPlayer()) then command
call ForceUICancel() //
call QuestMessageBJ(GetPlayersAll(), bj_QUESTMESSAGE_UPDATED, "!")
endif

But your system also refuses to work correctly. Of course, if we were to use this through DemoJass, it would be impossible to split it into languages. This would effectively negate all your work.

Unfortunately, I was forced to remove TasQuestBox until better times, I hope they will bring it to mind.
 
The 0s trigger is an example i used it to insert the strings. They are fixed/hardcoded text therefore they will be externalized into war3map.wts by world editor. in jass demo i use the string numbers. The vjass version was made from the Lua version in which one can feed data to TasQuestBox by quest api.

with the oskey event api, one could create a trigger and make OSKEY_F9, F9 open it then. I'll add it
 
The 0s trigger is an example i used it to insert the strings. They are fixed/hardcoded text therefore they will be externalized into war3map.wts by world editor. in jass demo i use the string numbers. The vjass version was made from the Lua version in which one can feed data to TasQuestBox by quest api.

with the oskey event api, one could create a trigger and make OSKEY_F9, F9 open it then. I'll add it
I noticed that they fixed the bug with the standard box.
Please send me the full version, because using a mistake made by Blizzard is comparable to suicide.
 

Attachments

  • bandicam 2026-04-28 22-51-19-847.mp4
    7.3 MB
Last edited:
Updated to V1.4)
(vjass) Hotkey F9 added to open/close the custom ui

Lua-Light fixed a error with the ESC event for players higher than red.

both Lua versions, if a page uses a quest and the quest is not discovered it will not display the big text in the textarea.


I noticed that they fixed the bug with the standard box.
Please send me the full version, because using a mistake made by Blizzard is comparable to suicide.

Expand Quest-Description's space by taking Quest-Defeat-Condition reserved space.
JASS:
function QuestCheck takes nothing returns nothing
    call BlzFrameClick(BlzGetFrameByName("UpperButtonBarQuestsButton", 0))
    call BlzFrameClick(BlzGetFrameByName("QuestAcceptButton", 0))
    call BlzFrameSetSize(BlzGetFrameByName("QuestItemListContainer", 0), 0.01, 0.01)
    call BlzFrameSetSize(BlzGetFrameByName("QuestItemListScrollBar", 0), 0.001, 0.001)
endfunction
you first create a quest then call the function afterwards.
 
Back
Top