diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-12-28 12:14:58 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-12-28 12:14:58 +0100 |
| commit | d78c3bb33afeb319ef0cf09171aabd8952a928fa (patch) | |
| tree | f29f6a767463b85cdd32790b87e0a4d5ec30d449 /src/server/game/Entities | |
| parent | 28d3c1bc2366d5b19c065c6203e2c9b2504a4b38 (diff) | |
Core/Players: Added helper function to check quest completion using QuestV2 bits
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 14 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 373b4b42ed5..5e264b49a8e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -16548,6 +16548,20 @@ void Player::RemoveQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex) .ModifyValue(&UF::QuestLog::ObjectiveFlags), 1 << objectiveIndex); } +bool Player::IsQuestCompletedBitSet(uint32 questId) const +{ + uint32 questBit = sDB2Manager.GetQuestUniqueBitFlag(questId); + if (!questBit) + return false; + + uint32 fieldOffset = (questBit - 1) / QUESTS_COMPLETED_BITS_PER_BLOCK; + if (fieldOffset >= m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_CHARACTER_QUEST_COMPLETED_INDEX].Values.size()) + return false; + + uint64 flag = UI64LIT(1) << ((questBit - 1) % QUESTS_COMPLETED_BITS_PER_BLOCK); + return (m_activePlayerData->BitVectors->Values[PLAYER_DATA_FLAG_CHARACTER_QUEST_COMPLETED_INDEX].Values[fieldOffset] & flag) != 0; +} + void Player::SetQuestCompletedBit(uint32 questBit, bool completed) { if (!questBit) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index e19b492d2f1..246da1c4310 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1709,6 +1709,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player> void SetQuestSlotEndTime(uint16 slot, time_t endTime); void SetQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex); void RemoveQuestSlotObjectiveFlag(uint16 slot, int8 objectiveIndex); + bool IsQuestCompletedBitSet(uint32 questId) const; void SetQuestCompletedBit(uint32 questBit, bool completed); uint16 GetReqKillOrCastCurrentCount(uint32 quest_id, int32 entry) const; |
