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:
2026-07-15 17:20:42 +02:00
parent 75bebafaa9
commit 8089b5f08c
3 changed files with 46 additions and 7 deletions
+20 -6
View File
@@ -1030,6 +1030,13 @@ function QuestieTracker:Update()
questName = questName .. " (" .. quest.Id .. ")"
end
coloredQuestName = "|cFFFFFF00" .. questName .. "|r"
-- Fallback quests (e.g. custom server quests not in QuestieDB) skip
-- GetColoredQuestName entirely since it needs a DB name lookup, so they
-- never got the (Complete) suffix DB quests get under the same setting.
if Questie.db.profile.collapseCompletedQuests and isMinimizable then
coloredQuestName = coloredQuestName .. " " ..
Questie:Colorize("(" .. l10n("Complete") .. ")", "green")
end
elseif timedQuest then
coloredQuestName = QuestieLib:GetColoredQuestName(quest.Id,
Questie.db.profile.trackerShowQuestLevel, false, false)
@@ -1044,18 +1051,25 @@ function QuestieTracker:Update()
-- server quest not yet in the static DB), so GetColoredQuestName
-- returned nil -- fall back instead of SetText(nil) blanking the
-- title line while its objectives still render normally below it.
-- Level/tag lookups don't require a DB "name" entry, so reuse the
-- same formatting helper as the normal path to keep the "[level]"
-- prefix consistent with quests that do have a DB name.
-- Use the live quest object's own level (kept in sync by
-- QuestieQuest:PopulateQuestLogInfo) instead of QuestieLib.GetTbcLevel,
-- which queries the static DB only: for a quest with no DB entry it
-- silently defaults to level 1, and Ascension's scaling then scales
-- that wrong base instead of the quest's real level.
local fallbackName = quest.name or tostring(quest.Id)
if Questie.db.profile.trackerShowQuestLevel then
local level = QuestieLib.GetTbcLevel(quest.Id)
fallbackName = QuestieLib:GetQuestString(quest.Id, fallbackName, level, false)
if Questie.db.profile.trackerShowQuestLevel and quest.level and quest.level > 0 then
fallbackName = QuestieLib:GetQuestString(quest.Id, fallbackName, quest.level, false)
end
if Questie.db.profile.enableTooltipsQuestID then
fallbackName = fallbackName .. " (" .. quest.Id .. ")"
end
coloredQuestName = "|cFFFFFF00" .. fallbackName .. "|r"
-- Same suffix rule as the normal (DB) branch -- GetColoredQuestName
-- never got a chance to run since it bailed out on the missing name.
if Questie.db.profile.collapseCompletedQuests and isMinimizable then
coloredQuestName = coloredQuestName .. " " ..
Questie:Colorize("(" .. l10n("Complete") .. ")", "green")
end
end
line.label:SetText(coloredQuestName)