Core/SpawnTracking: Check if the objective is completable to get correct spawn tracking state

Port From (https://github.com/TrinityCore/TrinityCore/commit/553ce72707c39d1ab7127c42f233ef27f1a7fa4d)
This commit is contained in:
Hondacrx
2025-08-14 20:55:44 -04:00
parent 4f77328c2d
commit 4f2a1e7d92
+18 -1
View File
@@ -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)