Hi! Sorry if this is a stupid question. I’m wondering if there is a macro, weak aura, or add-on (updated/current) where I can see the number of quests a character has in their log. I think the limit is 35? So something like x/35.
The few things I’ve found don’t work, I assume because their last update was prior to TWW S3.
I’ve had characters hit the max number of quests before, so it would be really helpful to know how much free space I have left.
Thanks for reading!
You could try copy/pasting the following to the website addon.bool.no to create/download as a small addon to place the total on the ObjectiveTrackerFrame Header:
local questTotal = ObjectiveTrackerFrame.Header:CreateFontString()
questTotal:SetFontObject(GameFontNormalSmall)
questTotal:SetPoint("TOPLEFT", ObjectiveTrackerFrame.Header, "TOP", -5, -12)
hooksecurefunc("UIParent_OnEvent", function(self, event)
if event == "QUEST_LOG_UPDATE" or event == "UNIT_QUEST_LOG_CHANGED" then
questTotal:SetText(format("Total Quests: %s/%s", select(2, C_QuestLog.GetNumQuestLogEntries()), C_QuestLog.GetMaxNumQuestsCanAccept()))
end
end)
UIParent_OnEvent(UIParent, "QUEST_LOG_UPDATE")
1 Like
This is so cool!
The only problem is it shows Total Quests: 41/175. I’m not sure what it’s pulling data from. Warband? Server?
Other than that, this is exactly what I was looking for.
What do I need to change to get an accurate count per character?
It’s using the game APIs
C_QuestLog.GetNumQuestLogEntries
See:
https://warcraft.wiki.gg/wiki/API_C_QuestLog.GetNumQuestLogEntries
and
C_QuestLog.GetMaxNumQuests
See:
https://warcraft.wiki.gg/wiki/API_C_QuestLog.GetMaxNumQuestsv
You could replace C_QuestLog.GetMaxNumQuests with C_QuestLog.GetMaxNumQuestsCanAccept
Edit: (changed to this in original code)
See:
https://warcraft.wiki.gg/wiki/API_C_QuestLog.GetMaxNumQuestsCanAccept
1 Like
Ooh ok I will try this - thank you so very much for your help!!
Ok, The quests count went to 41/35, so I looked through all the QuestLog APIs on the WoW Wiki you linked, and I’m stumped. GetNumQuestLogEntries should work, I can’t find anything else that makes sense.
I was really hoping I could figure this out so I wouldn’t have to bother you again, but I’m not having any success. Do you have any idea what’s happening?
You can try iterating through the quest log and filtering out any that are hidden or flagged as a header. This is what I used as proof of concept.
/run local count=0 for i=1,C_QuestLog.GetNumQuestLogEntries() do if C_QuestLog.GetInfo(i).isHeader==false and C_QuestLog.GetInfo(i).isHidden==false then count=count+1 print(C_QuestLog.GetInfo(i).title .." : " .. count) end end
2 Likes
My bad, C_QuestLog.GetNumQuestLogEntries() has 2 returns and the second one is the one without headers. I’ve updated the code (again
) in my OP to use this. You can copy/paste/recreate/replace the addon or just change the SetText line.
You could check against the macro Battlecruisr supplied.
1 Like
There are hidden quests for special assignments and random tracking quests that throw a wrench into things. I have 24 actual quests in my quest log, NumQuestLogEntries dumps 32 for numQuests, and iterating through the quest log and only filtering out headers and not hidden quest returns 37. Not sure if special assignments or other hidden quests actually count against the max amount of quests you can pick up
https://i.imgur.com/eMOaaZo.png
Edit to that, I believe special assignments are not counting against the limit since I went to the command board and picked up 14 quests before my log got full, putting me to… 38? (C_QuestLog.GetNumQuestLogEntries() dumps 44 for numQuests)
Nothing makes sense.

1 Like
This would be the code using extra filtering from Battlecruisr.
local questTotal = ObjectiveTrackerFrame.Header:CreateFontString()
questTotal:SetFontObject(GameFontNormalSmall)
questTotal:SetPoint("TOPLEFT", ObjectiveTrackerFrame.Header, "TOP", -5, -12)
local function UpdateQuestCount(self, event)
if event == "QUEST_LOG_UPDATE" or event == "UNIT_QUEST_LOG_CHANGED" then
local count=0
for i=1, C_QuestLog.GetNumQuestLogEntries() do
local info = C_QuestLog.GetInfo(i)
if not info.isHeader and not info.isHidden then
count = count + 1
end
end
questTotal:SetText(format("Total Quests: %s/%s", count, C_QuestLog.GetMaxNumQuestsCanAccept()))
end
end
hooksecurefunc("UIParent_OnEvent", UpdateQuestCount)
local owner = {}
EventRegistry:RegisterFrameEvent("QUEST_DATA_LOAD_RESULT")
EventRegistry:RegisterCallback("QUEST_DATA_LOAD_RESULT", function()
UpdateQuestCount(UIParent, "QUEST_LOG_UPDATE")
EventRegistry:UnregisterCallback("QUEST_DATA_LOAD_RESULT", owner)
end, owner)
There are various options in the GetInfo return that might be indicators of a “non quest log” entry like .isTask or .isStory. I don’t have time to test.
https://warcraft.wiki.gg/wiki/API_C_QuestLog.GetInfo
3 Likes
The elements in the GetInfo return table are nilable so something .isHidden etc. are possibly true, nil or false rather than explicitly true/false.
oh, I was doing that set without filtering hidden to see if I could match what numQuests returned to try and see what it was counting. When I filtered out hidden it matched my manual quest log count each time. My fault for not mentioning that.
1 Like
There is an addon i use, Simple quest counter i think, edit —yah thats it!
2 Likes