diff --git a/Modules/Tracker/QuestieTracker.lua b/Modules/Tracker/QuestieTracker.lua index f9adc69..318feb1 100644 --- a/Modules/Tracker/QuestieTracker.lua +++ b/Modules/Tracker/QuestieTracker.lua @@ -46,6 +46,7 @@ local QuestieDebugOffer = QuestieLoader:ImportModule("QuestieDebugOffer") local C_Timer = QuestieCompat.C_Timer local GetQuestLogTitle = QuestieCompat.GetQuestLogTitle local GetQuestLogIndexByID = QuestieCompat.GetQuestLogIndexByID +local GetQuestLogSpecialItemInfo = QuestieCompat.GetQuestLogSpecialItemInfo local GetItemInfo = QuestieCompat.GetItemInfo local function GetNumLines(label) if label.GetNumLines then @@ -1094,6 +1095,26 @@ function QuestieTracker:Update() local usableQIB = false local sourceItemId = QuestieDB.QueryQuestSingle(quest.Id, "sourceItemId") + local isLiveSourceItem = false + + if not sourceItemId or sourceItemId == 0 then + -- QuestieDB has no data for this quest (e.g. a custom server quest). + -- Ask the client directly which item, if any, it considers this quest's + -- usable "special item" instead of relying on static DB data that + -- simply doesn't exist for quests Questie doesn't know about. + local questLogIndex = GetQuestLogIndexByID and GetQuestLogIndexByID(quest.Id) + if questLogIndex and questLogIndex > 0 and GetQuestLogSpecialItemInfo then + local link = GetQuestLogSpecialItemInfo(questLogIndex) + local liveItemId = link and tonumber(link:match("item:(%d+)")) + if liveItemId then + sourceItemId = liveItemId + isLiveSourceItem = true + quest.sourceItemId = liveItemId + end + end + end + + quest._liveSourceItem = isLiveSourceItem local sourceItem = sourceItemId and TrackerUtils:IsQuestItemUsable(sourceItemId) local requiredItems = quest.requiredSourceItems local requiredItem = requiredItems and TrackerUtils:IsQuestItemUsable(requiredItems[1]) diff --git a/Modules/Tracker/TrackerLinePool.lua b/Modules/Tracker/TrackerLinePool.lua index afcb596..15ad8cf 100644 --- a/Modules/Tracker/TrackerLinePool.lua +++ b/Modules/Tracker/TrackerLinePool.lua @@ -504,7 +504,11 @@ function TrackerLinePool.Initialize(questFrame) -- Check primary source item if quest.sourceItemId and quest.sourceItemId ~= 0 and buttonType == "primary" then - if QuestieDB.QueryItemSingle(quest.sourceItemId, "class") == 12 and GetItemCount(quest.sourceItemId, false, false) > 0 then + -- For quests QuestieDB has no data on, sourceItemId was resolved live via + -- GetQuestLogSpecialItemInfo -- the client already vetted it as the quest's + -- special item, so the static-DB item class isn't known/needed here. + local isQuestItem = quest._liveSourceItem or QuestieDB.QueryItemSingle(quest.sourceItemId, "class") == 12 + if isQuestItem and GetItemCount(quest.sourceItemId, false, false) > 0 then foundItemId = quest.sourceItemId end end diff --git a/README.md b/README.md index d2418fa..ab0caf4 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,15 @@ # Questie-X -Fork of [aron-w/Questie-X](https://github.com/aron-w/Questie-X) with bug fixes. +Fork of [aron-w/Questie-X](https://github.com/aron-w/Questie-X) with bug fixes for CoA. ## Changes in this fork - fixed world map icons offset due to CoA's objective frame and zoom addons like Magnify. - fixed tracker objectives not updating correctly. - fixed tracker handle not moving the frame. -- fixed custom quests having no name. +- fixed custom quests having no name in the tracker. +- fixed custom quests not showing (complete) in the tracker. +- fixed custom quest items not showing. ## Credits