diff --git a/Source/Game/Entities/Object/Update/UpdateFields.cs b/Source/Game/Entities/Object/Update/UpdateFields.cs index ba32f4324..65240bfe0 100644 --- a/Source/Game/Entities/Object/Update/UpdateFields.cs +++ b/Source/Game/Entities/Object/Update/UpdateFields.cs @@ -3471,6 +3471,8 @@ namespace Game.Entities { public static int ExploredZonesSize; public static int ExploredZonesBits; + public static int QuestCompletedBitsSize; + public static int QuestCompletedBitsPerBlock; public UpdateField BackpackAutoSortDisabled = new(0, 1); public UpdateField BankAutoSortDisabled = new(0, 2); @@ -3602,6 +3604,9 @@ namespace Game.Entities { ExploredZonesSize = ExploredZones.GetSize(); ExploredZonesBits = sizeof(ulong) * 8; + + QuestCompletedBitsSize = QuestCompleted.GetSize(); + QuestCompletedBitsPerBlock = sizeof(ulong) * 8; } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index 648dc9797..20948d6cb 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -2218,11 +2218,11 @@ namespace Game.Entities if (questBit == 0) return; - uint fieldOffset = (questBit - 1) >> 6; + uint fieldOffset = (questBit - 1) >> ActivePlayerData.QuestCompletedBitsPerBlock; if (fieldOffset >= PlayerConst.QuestsCompletedBitsSize) return; - ulong flag = 1ul << (((int)questBit - 1) & 63); + ulong flag = 1ul << (((int)questBit - 1) % ActivePlayerData.QuestCompletedBitsPerBlock); if (completed) SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.QuestCompleted, (int)fieldOffset), flag); else