aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-12-28 12:14:58 +0100
committerShauren <shauren.trinity@gmail.com>2024-12-28 12:14:58 +0100
commitd78c3bb33afeb319ef0cf09171aabd8952a928fa (patch)
treef29f6a767463b85cdd32790b87e0a4d5ec30d449 /src/server/game/Entities
parent28d3c1bc2366d5b19c065c6203e2c9b2504a4b38 (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.cpp14
-rw-r--r--src/server/game/Entities/Player/Player.h1
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;