From 4f2a1e7d9263cf2a53b692f88a4cc045f4fb30b3 Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Thu, 14 Aug 2025 20:55:44 -0400 Subject: [PATCH] Core/SpawnTracking: Check if the objective is completable to get correct spawn tracking state Port From (https://github.com/TrinityCore/TrinityCore/commit/553ce72707c39d1ab7127c42f233ef27f1a7fa4d) --- Source/Game/Entities/Player/Player.Quest.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index 7d0144d8d..1b4771014 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -3136,6 +3136,23 @@ namespace Game.Entities return true; } + bool IsQuestObjectiveCompletable(uint questId, uint objectiveId) + { + Quest quest = Global.ObjectMgr.GetQuestTemplate(questId); + if (quest == null) + return false; + + ushort slot = FindQuestSlot(questId); + if (slot >= SharedConst.MaxQuestLogSize) + return false; + + QuestObjective obj = Global.ObjectMgr.GetQuestObjective(objectiveId); + if (obj == null) + return false; + + return IsQuestObjectiveCompletable(slot, quest, obj); + } + bool IsQuestObjectiveComplete(uint questId, uint objectiveId) { Quest quest = Global.ObjectMgr.GetQuestTemplate(questId); @@ -3438,7 +3455,7 @@ namespace Game.Entities { if (IsQuestRewarded(questObjective.QuestID) || IsQuestObjectiveComplete(questObjective.QuestID, questObjective.Id)) return SpawnTrackingState.Complete; - else if (GetQuestStatus(questObjective.QuestID) != QuestStatus.None) + else if (GetQuestStatus(questObjective.QuestID) != QuestStatus.None && IsQuestObjectiveCompletable(questObjective.QuestID, questObjective.Id)) { var itr = m_QuestStatus.LookupByKey(questObjective.QuestID); if (itr != null && itr.Slot < SharedConst.MaxQuestLogSize)