fix(quest/learner): draw turn-in '?' for in-log quests; learn turn-in NPC

Reverts the previous approach of stripping char.complete (which mutated
completed-quest data). Correct rule: a quest in the player's log is active
and should show its turn-in location regardless of the completed flag.

- AddFinisher now trusts the live quest log: if the quest is in
  currentQuestlog and not failed, the '?' finisher draws regardless of the
  (possibly stale, e.g. prior-prestige) char.complete flag. No completion
  data is modified. Reverts the AcceptQuest and QUEST_QUERY_COMPLETE strips.

- Learner: OnTargetChanged now learns quest-giver/turn-in NPC spawns
  (it previously only cached the GUID), so targeting a turn-in NPC records
  its location. OnQuestComplete/OnQuestTurnedIn fall back to the 'target'
  unit when the 'npc' gossip unit is already cleared, so the finisher NPC
  is reliably learned on turn-in.

selene 0 errors; busted 145 successes / same 7 pre-existing failures.
This commit is contained in:
Xurkon
2026-06-10 05:05:28 -05:00
parent f9ff77c088
commit dfdad2cbc3
4 changed files with 44 additions and 29 deletions
+1 -7
View File
@@ -734,15 +734,9 @@ 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
-- 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
if QuestieDB.IsRepeatable(questId) then
Questie.db.char.complete[questId] = nil
end
questId = next(Questie.db.char.complete, questId)