Core/Players: Added helper function to check quest completion using QuestV2 bits

Port From (https://github.com/TrinityCore/TrinityCore/commit/d78c3bb33afeb319ef0cf09171aabd8952a928fa)
This commit is contained in:
Hondacrx
2025-05-19 15:26:49 -04:00
parent 4a29928f13
commit 4f63e81373
3 changed files with 18 additions and 10 deletions
+15 -1
View File
@@ -2415,6 +2415,20 @@ namespace Game.Entities
RemoveUpdateFieldFlagValue(questLog.ModifyValue(questLog.ObjectiveFlags), 1u << objectiveIndex);
}
public bool IsQuestCompletedBitSet(uint questId)
{
uint questBit = Global.DB2Mgr.GetQuestUniqueBitFlag(questId);
if (questBit == 0)
return false;
int fieldOffset = (int)(questBit - 1) / ActivePlayerData.QuestCompletedBitsPerBlock;
if (fieldOffset >= m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.CharacterQuestCompletedIndex].Values.Size())
return false;
ulong flag = 1ul << (((int)questBit - 1) % ActivePlayerData.QuestCompletedBitsPerBlock);
return (m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.CharacterQuestCompletedIndex].Values[fieldOffset] & flag) != 0;
}
void SetQuestCompletedBit(uint questBit, bool completed)
{
if (questBit == 0)
@@ -2425,7 +2439,7 @@ namespace Game.Entities
if (fieldOffset < ActivePlayerData.QuestCompletedBitsSize)
{
if (completed)
SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.QuestCompleted,fieldOffset), flag);
SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.QuestCompleted, fieldOffset), flag);
else
RemoveUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.QuestCompleted, fieldOffset), flag);
}