From 550f66658d72e69054cc8bf90218366ba9d10ae3 Mon Sep 17 00:00:00 2001 From: Meji Date: Sat, 17 May 2025 13:31:03 +0200 Subject: Core/SpawnTracking: Check if the objective is completable to get correct spawn tracking state (#30923) (cherry picked from commit 553ce72707c39d1ab7127c42f233ef27f1a7fa4d) # Conflicts: # src/server/game/Entities/Player/Player.cpp --- src/server/game/Entities/Player/Player.cpp | 17 +++++++++++++++++ src/server/game/Entities/Player/Player.h | 1 + 2 files changed, 18 insertions(+) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4aa7b90385c..33c6bb16b5e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -16232,6 +16232,23 @@ bool Player::IsQuestObjectiveCompletable(uint16 slot, Quest const* quest, QuestO return true; } +bool Player::IsQuestObjectiveCompletable(uint32 questId, uint32 objectiveId) const +{ + Quest const* quest = sObjectMgr->GetQuestTemplate(questId); + if (!quest) + return false; + + uint16 slot = FindQuestSlot(questId); + if (slot >= MAX_QUEST_LOG_SIZE) + return false; + + QuestObjective const* obj = sObjectMgr->GetQuestObjective(objectiveId); + if (!obj) + return false; + + return IsQuestObjectiveCompletable(slot, quest, *obj); +} + bool Player::IsQuestObjectiveComplete(uint16 slot, Quest const* quest, QuestObjective const& objective) const { switch (objective.Type) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 5bb8e082a42..0aeb4e61aff 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1647,6 +1647,7 @@ class TC_GAME_API Player final : public Unit, public GridObject int32 GetQuestObjectiveData(QuestObjective const& objective) const; void SetQuestObjectiveData(QuestObjective const& objective, int32 data); bool IsQuestObjectiveCompletable(uint16 slot, Quest const* quest, QuestObjective const& objective) const; + bool IsQuestObjectiveCompletable(uint32 questId, uint32 objectiveId) const; bool IsQuestObjectiveComplete(uint16 slot, Quest const* quest, QuestObjective const& objective) const; bool IsQuestObjectiveComplete(uint32 questId, uint32 objectiveId) const; bool IsQuestObjectiveProgressBarComplete(uint16 slot, Quest const* quest) const; -- cgit v1.2.3