aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2025-05-17 13:31:03 +0200
committerOvahlord <dreadkiller@gmx.de>2025-05-26 20:49:47 +0200
commit550f66658d72e69054cc8bf90218366ba9d10ae3 (patch)
tree45c58966d2a8afa1b5709522c03a015416fd2fbf
parentbc930a9ca354fd46a9ac00d6ebb0a0e209c7ede5 (diff)
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
-rw-r--r--src/server/game/Entities/Player/Player.cpp17
-rw-r--r--src/server/game/Entities/Player/Player.h1
2 files changed, 18 insertions, 0 deletions
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<Player>
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;