fix(quest): clear stale char.complete for re-accepted (prestige) quests

A quest completed in a prior Ascension prestige stays in char.complete.
On re-accept it is active in the log again, but the stale completion flag
was never cleared — and AddFinisher only draws the turn-in '?' when
not char.complete[questId]. So the finisher was suppressed and the quest
showed '(Complete)' with stale objective text while standing at the
turn-in NPC (e.g. Aggression 8334 at Lanthan Perilon 15281).

An active in-log quest is now kept out of char.complete:
- QuestieQuest:AcceptQuest clears char.complete[questId] on accept.
- The async QUEST_QUERY_COMPLETE handler also strips any quest currently
  in QuestiePlayer.currentQuestlog, so the server's completed list can't
  re-flag a re-accepted quest.

Restores the turn-in '?' and normal objective tracking. selene 0 errors;
busted 145 successes / same 7 pre-existing failures.
This commit is contained in:
Xurkon
2026-06-10 04:58:44 -05:00
parent ab560d5711
commit f9ff77c088
3 changed files with 17 additions and 1 deletions
+7 -1
View File
@@ -734,9 +734,15 @@ end
function QuestieCompat:QUEST_QUERY_COMPLETE(event)
GetQuestsCompleted(Questie.db.char.complete)
local currentQuestlog = QuestiePlayer and QuestiePlayer.currentQuestlog
local questId = next(Questie.db.char.complete)
while questId do
if QuestieDB.IsRepeatable(questId) then
-- Repeatable quests are never "complete" for availability purposes.
-- Also: a quest currently in the player's log is active, not turned in — the server's
-- completed list can still report a quest re-accepted after an Ascension prestige, and
-- that stale flag suppresses the turn-in '?' finisher and mislabels it "(Complete)".
-- Keep char.complete and the live quest log mutually exclusive.
if QuestieDB.IsRepeatable(questId) or (currentQuestlog and currentQuestlog[questId]) then
Questie.db.char.complete[questId] = nil
end
questId = next(Questie.db.char.complete, questId)