diff options
author | ModoX <moardox@gmail.com> | 2023-12-12 08:18:42 +0100 |
---|---|---|
committer | funjoker <funjoker109@gmail.com> | 2023-12-12 08:46:41 +0100 |
commit | 26cb12c35acc1997bdbbba7876b1885ea1f9c561 (patch) | |
tree | 13887f22dad5af971e53f97196649749dee5d6f0 /src | |
parent | a18e3ef20a5dc3af4438bb0ec1973f1c19fd071c (diff) |
Core/Player: Added helpers to check quest objective status
(cherry picked from commit 9dd8647125a020ca2dccdf26d6839f4665ff9870)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 30 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 119c0395468..cdb3285272a 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15895,6 +15895,19 @@ int32 Player::GetQuestSlotObjectiveData(uint16 slot, QuestObjective const& objec return uint8((GetQuestSlotState(slot) & objective.StorageIndex) != 0); } +int32 Player::GetQuestSlotObjectiveData(uint32 questId, uint32 objectiveId) const +{ + uint16 slot = FindQuestSlot(questId); + if (slot >= MAX_QUEST_LOG_SIZE) + return 0; + + QuestObjective const* obj = sObjectMgr->GetQuestObjective(objectiveId); + if (!obj) + return 0; + + return GetQuestSlotObjectiveData(slot, *obj); +} + void Player::SetQuestSlot(uint16 slot, uint32 quest_id) { auto questLogField = m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::QuestLog, slot); @@ -16466,6 +16479,23 @@ bool Player::IsQuestObjectiveComplete(uint16 slot, Quest const* quest, QuestObje return true; } +bool Player::IsQuestObjectiveComplete(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 IsQuestObjectiveComplete(slot, quest, *obj); +} + bool Player::IsQuestObjectiveProgressBarComplete(uint16 slot, Quest const* quest) const { float progress = 0.0f; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c360ac85d5c..66b4f913fcd 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1567,6 +1567,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> uint16 GetQuestSlotCounter(uint16 slot, uint8 counter) const; int64 GetQuestSlotEndTime(uint16 slot) const; int32 GetQuestSlotObjectiveData(uint16 slot, QuestObjective const& objective) const; + int32 GetQuestSlotObjectiveData(uint32 questId, uint32 objectiveId) const; void SetQuestSlot(uint16 slot, uint32 quest_id); void SetQuestSlotCounter(uint16 slot, uint8 counter, uint16 count); void SetQuestSlotState(uint16 slot, uint32 state); @@ -1598,6 +1599,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SetQuestObjectiveData(QuestObjective const& objective, int32 data); bool IsQuestObjectiveCompletable(uint16 slot, Quest const* quest, QuestObjective const& objective) 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; void SendQuestComplete(uint32 questId) const; void SendQuestReward(Quest const* quest, Creature const* questGiver, uint32 xp, bool hideChatMessage) const; |