fix(tracker): show (Complete) and correct level for DB-less custom quests
Quests with no static DB entry (e.g. Ascension custom quest 175206) made GetColoredQuestName bail out early on a nil name lookup, before it ever reached the (Complete)/(Failed) suffix logic. The tracker's existing fallback for that case never added the suffix either, and it computed level via QuestieLib.GetTbcLevel (static-DB-only), which silently defaults to level 1 and then gets scaled from that wrong base by Ascension's level scaling. Since these quests also auto-collapse once complete (hiding the tracker's other "Quest Complete!" indicator line), the title was the only place that could show completion status, and it was silently swallowing it. - QuestieTracker.lua: the "no DB name" fallback branch now appends (Complete) under the same collapseCompletedQuests/isMinimizable rule as the normal path, and uses the live quest object's own level instead of the static-only lookup. - QuestieQuest.lua (PopulateQuestLogInfo): re-syncs quest.level from a live GetQuestLogTitle scan every update, since QuestieDB.GetQuest caches quest objects permanently and QuestLogCache never tracked level at all. - TrackerUtils.lua (GetCompletionText): guards the Description[1] fallback against quests that have no top-level Description array, which was throwing and aborting that quest's tracker render entirely.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
--- COMPATIBILITY ---
|
||||
local IsQuestFlaggedCompleted = QuestieCompat.IsQuestFlaggedCompleted or C_QuestLog.IsQuestFlaggedCompleted
|
||||
local GetQuestLogTitle = QuestieCompat.GetQuestLogTitle
|
||||
|
||||
---@class QuestieQuest
|
||||
local QuestieQuest = QuestieLoader:CreateModule("QuestieQuest")
|
||||
@@ -2305,6 +2306,24 @@ function QuestieQuest:PopulateQuestLogInfo(quest)
|
||||
end
|
||||
end
|
||||
|
||||
-- Sync level with the live quest log. QuestieDB.GetQuest permanently caches quest
|
||||
-- objects (Database/QuestieDB.lua:1752 `if _QuestieDB.questCache[questId] then return
|
||||
-- ... end`), so quest.level is otherwise frozen at whatever value was computed the
|
||||
-- first time this quest was cached. QuestLogCache.questLog_DO_NOT_MODIFY doesn't carry
|
||||
-- a level field at all, so read it straight from GetQuestLogTitle. On servers with
|
||||
-- dynamic quest level scaling (e.g. Ascension), the effective level can change after
|
||||
-- caching (player level-up, scaling option toggled), so re-sync it here every time.
|
||||
if GetQuestLogTitle then
|
||||
local questIndex = GetQuestLogIndexByID and GetQuestLogIndexByID(quest.Id)
|
||||
if questIndex and questIndex > 0 then
|
||||
local _, liveLevel = GetQuestLogTitle(questIndex)
|
||||
if liveLevel and liveLevel > 0 and liveLevel ~= quest.level then
|
||||
quest.level = liveLevel
|
||||
quest.questLevel = liveLevel
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Live fallback quests (no static DB entry) manage their own Objectives.
|
||||
-- Their per-objective Update() functions read directly from QuestLogCache.
|
||||
if quest._isLogFallback then
|
||||
|
||||
Reference in New Issue
Block a user