aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-06-18 11:37:07 +0200
committerShauren <shauren.trinity@gmail.com>2025-06-18 11:37:07 +0200
commitceb8d561b44579118b109a9ff71ba415df53bbdc (patch)
treeb2a6b87afa6a2b83b8040b8632a87cb9a8308775 /src/server/game/Entities
parente02e8a474244c229cc34c4efb987e24b6dd417f5 (diff)
Core: Updated to 11.1.7
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Object/Object.cpp5
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp423
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h289
-rw-r--r--src/server/game/Entities/Player/Player.h1
4 files changed, 372 insertions, 346 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 058b59a3dff..9da68100476 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -404,10 +404,11 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
if (HasDriveStatus)
{
- data->WriteBit(unit->m_movementInfo.driveStatus->accelerating);
- data->WriteBit(unit->m_movementInfo.driveStatus->drifting);
*data << float(unit->m_movementInfo.driveStatus->speed);
*data << float(unit->m_movementInfo.driveStatus->movementAngle);
+ data->WriteBit(unit->m_movementInfo.driveStatus->accelerating);
+ data->WriteBit(unit->m_movementInfo.driveStatus->drifting);
+ data->FlushBits();
}
*data << float(unit->GetSpeed(MOVE_WALK));
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
index 49d9c52170b..7986d550120 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -4829,6 +4829,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
}
}
data << uint32(DailyQuestsCompleted.size());
+ data << uint32(Field_1328.size());
data << uint32(AvailableQuestLineXQuestIDs.size());
data << uint32(Heirlooms.size());
data << uint32(HeirloomFlags.size());
@@ -4889,6 +4890,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
{
data << int32(DailyQuestsCompleted[i]);
}
+ for (uint32 i = 0; i < Field_1328.size(); ++i)
+ {
+ data << int32(Field_1328[i]);
+ }
for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
{
data << int32(AvailableQuestLineXQuestIDs[i]);
@@ -5108,11 +5113,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data);
}
}
- if (changesMask[41])
+ if (changesMask[42])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[42])
+ if (changesMask[43])
{
if (!ignoreNestedChangesMask)
ResearchSites[i].WriteUpdateMask(data);
@@ -5121,11 +5126,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[43])
+ if (changesMask[44])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[44])
+ if (changesMask[45])
{
if (!ignoreNestedChangesMask)
ResearchSiteProgress[i].WriteUpdateMask(data);
@@ -5134,11 +5139,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[45])
+ if (changesMask[46])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[46])
+ if (changesMask[47])
{
if (!ignoreNestedChangesMask)
Research[i].WriteUpdateMask(data);
@@ -5147,11 +5152,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[41])
+ if (changesMask[42])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[42])
+ if (changesMask[43])
{
for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
{
@@ -5163,11 +5168,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[43])
+ if (changesMask[44])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[44])
+ if (changesMask[45])
{
for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
{
@@ -5179,11 +5184,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[45])
+ if (changesMask[46])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[46])
+ if (changesMask[47])
{
for (uint32 j = 0; j < Research[i].size(); ++j)
{
@@ -5208,189 +5213,196 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
if (changesMask[12])
{
if (!ignoreNestedChangesMask)
+ Field_1328.WriteUpdateMask(data);
+ else
+ WriteCompleteDynamicFieldUpdateMask(Field_1328.size(), data);
+ }
+ if (changesMask[13])
+ {
+ if (!ignoreNestedChangesMask)
AvailableQuestLineXQuestIDs.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.size(), data);
}
- if (changesMask[13])
+ if (changesMask[14])
{
if (!ignoreNestedChangesMask)
Heirlooms.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Heirlooms.size(), data);
}
- if (changesMask[14])
+ if (changesMask[15])
{
if (!ignoreNestedChangesMask)
HeirloomFlags.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.size(), data);
}
- if (changesMask[15])
+ if (changesMask[16])
{
if (!ignoreNestedChangesMask)
Toys.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Toys.size(), data);
}
- if (changesMask[16])
+ if (changesMask[17])
{
if (!ignoreNestedChangesMask)
ToyFlags.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ToyFlags.size(), data);
}
- if (changesMask[17])
+ if (changesMask[18])
{
if (!ignoreNestedChangesMask)
Transmog.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Transmog.size(), data);
}
- if (changesMask[18])
+ if (changesMask[19])
{
if (!ignoreNestedChangesMask)
ConditionalTransmog.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.size(), data);
}
- if (changesMask[19])
+ if (changesMask[20])
{
if (!ignoreNestedChangesMask)
SelfResSpells.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SelfResSpells.size(), data);
}
- if (changesMask[20])
+ if (changesMask[21])
{
if (!ignoreNestedChangesMask)
RuneforgePowers.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.size(), data);
}
- if (changesMask[21])
+ if (changesMask[22])
{
if (!ignoreNestedChangesMask)
TransmogIllusions.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.size(), data);
}
- if (changesMask[22])
+ if (changesMask[23])
{
if (!ignoreNestedChangesMask)
WarbandScenes.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(WarbandScenes.size(), data);
}
- if (changesMask[23])
+ if (changesMask[24])
{
if (!ignoreNestedChangesMask)
CharacterRestrictions.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.size(), data);
}
- if (changesMask[24])
+ if (changesMask[25])
{
if (!ignoreNestedChangesMask)
SpellPctModByLabel.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.size(), data);
}
- if (changesMask[25])
+ if (changesMask[26])
{
if (!ignoreNestedChangesMask)
SpellFlatModByLabel.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data);
}
- if (changesMask[26])
+ if (changesMask[27])
{
if (!ignoreNestedChangesMask)
MawPowers.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(MawPowers.size(), data);
}
- if (changesMask[27])
+ if (changesMask[28])
{
if (!ignoreNestedChangesMask)
MultiFloorExploration.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.size(), data);
}
- if (changesMask[28])
+ if (changesMask[29])
{
if (!ignoreNestedChangesMask)
RecipeProgression.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(RecipeProgression.size(), data);
}
- if (changesMask[29])
+ if (changesMask[30])
{
if (!ignoreNestedChangesMask)
ReplayedQuests.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.size(), data);
}
- if (changesMask[30])
+ if (changesMask[31])
{
if (!ignoreNestedChangesMask)
TaskQuests.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(TaskQuests.size(), data);
}
- if (changesMask[31])
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
{
if (!ignoreNestedChangesMask)
DisabledSpells.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(DisabledSpells.size(), data);
}
- }
- if (changesMask[32])
- {
- if (changesMask[33])
+ if (changesMask[34])
{
if (!ignoreNestedChangesMask)
TraitConfigs.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(TraitConfigs.size(), data);
}
- if (changesMask[34])
+ if (changesMask[35])
{
if (!ignoreNestedChangesMask)
CraftingOrders.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(CraftingOrders.size(), data);
}
- if (changesMask[35])
+ if (changesMask[36])
{
if (!ignoreNestedChangesMask)
PersonalCraftingOrderCounts.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data);
}
- if (changesMask[36])
+ if (changesMask[37])
{
if (!ignoreNestedChangesMask)
NpcCraftingOrders.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(NpcCraftingOrders.size(), data);
}
- if (changesMask[37])
+ if (changesMask[38])
{
if (!ignoreNestedChangesMask)
CategoryCooldownMods.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.size(), data);
}
- if (changesMask[38])
+ if (changesMask[39])
{
if (!ignoreNestedChangesMask)
WeeklySpellUses.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.size(), data);
}
- if (changesMask[39])
+ if (changesMask[40])
{
if (!ignoreNestedChangesMask)
TrackedCollectableSources.WriteUpdateMask(data);
@@ -5443,6 +5455,16 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
if (changesMask[12])
{
+ for (uint32 i = 0; i < Field_1328.size(); ++i)
+ {
+ if (Field_1328.HasChanged(i) || ignoreNestedChangesMask)
+ {
+ data << int32(Field_1328[i]);
+ }
+ }
+ }
+ if (changesMask[13])
+ {
for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
{
if (AvailableQuestLineXQuestIDs.HasChanged(i) || ignoreNestedChangesMask)
@@ -5451,7 +5473,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[13])
+ if (changesMask[14])
{
for (uint32 i = 0; i < Heirlooms.size(); ++i)
{
@@ -5461,7 +5483,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[14])
+ if (changesMask[15])
{
for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
{
@@ -5471,7 +5493,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[15])
+ if (changesMask[16])
{
for (uint32 i = 0; i < Toys.size(); ++i)
{
@@ -5481,7 +5503,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[16])
+ if (changesMask[17])
{
for (uint32 i = 0; i < ToyFlags.size(); ++i)
{
@@ -5491,7 +5513,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[17])
+ if (changesMask[18])
{
for (uint32 i = 0; i < Transmog.size(); ++i)
{
@@ -5501,7 +5523,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[18])
+ if (changesMask[19])
{
for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
{
@@ -5511,7 +5533,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[19])
+ if (changesMask[20])
{
for (uint32 i = 0; i < SelfResSpells.size(); ++i)
{
@@ -5521,7 +5543,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[20])
+ if (changesMask[21])
{
for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
{
@@ -5531,7 +5553,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[21])
+ if (changesMask[22])
{
for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
{
@@ -5541,7 +5563,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[22])
+ if (changesMask[23])
{
for (uint32 i = 0; i < WarbandScenes.size(); ++i)
{
@@ -5551,7 +5573,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[24])
+ if (changesMask[25])
{
for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
{
@@ -5561,7 +5583,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[25])
+ if (changesMask[26])
{
for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
{
@@ -5571,7 +5593,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[26])
+ if (changesMask[27])
{
for (uint32 i = 0; i < MawPowers.size(); ++i)
{
@@ -5581,7 +5603,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[27])
+ if (changesMask[28])
{
for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
{
@@ -5591,7 +5613,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[28])
+ if (changesMask[29])
{
for (uint32 i = 0; i < RecipeProgression.size(); ++i)
{
@@ -5601,7 +5623,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[29])
+ if (changesMask[30])
{
for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
{
@@ -5611,7 +5633,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[30])
+ if (changesMask[31])
{
for (uint32 i = 0; i < TaskQuests.size(); ++i)
{
@@ -5621,7 +5643,10 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[31])
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
{
for (uint32 i = 0; i < DisabledSpells.size(); ++i)
{
@@ -5631,10 +5656,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- }
- if (changesMask[32])
- {
- if (changesMask[35])
+ if (changesMask[36])
{
for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
{
@@ -5644,7 +5666,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[36])
+ if (changesMask[37])
{
for (uint32 i = 0; i < NpcCraftingOrders.size(); ++i)
{
@@ -5654,7 +5676,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[37])
+ if (changesMask[38])
{
for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
{
@@ -5664,7 +5686,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[38])
+ if (changesMask[39])
{
for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
{
@@ -5674,7 +5696,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[39])
+ if (changesMask[40])
{
for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
{
@@ -5684,7 +5706,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[40])
+ if (changesMask[41])
{
if (!ignoreNestedChangesMask)
AccountBankTabSettings.WriteUpdateMask(data, 3);
@@ -5704,7 +5726,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[23])
+ if (changesMask[24])
{
for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
{
@@ -5717,7 +5739,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
if (changesMask[32])
{
- if (changesMask[33])
+ if (changesMask[34])
{
for (uint32 i = 0; i < TraitConfigs.size(); ++i)
{
@@ -5727,7 +5749,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[34])
+ if (changesMask[35])
{
for (uint32 i = 0; i < CraftingOrders.size(); ++i)
{
@@ -5737,7 +5759,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[40])
+ if (changesMask[41])
{
for (uint32 i = 0; i < AccountBankTabSettings.size(); ++i)
{
@@ -5747,364 +5769,364 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[47])
- {
- data << *FarsightObject;
- }
if (changesMask[48])
{
- data << *SummonedBattlePetGUID;
+ data << *FarsightObject;
}
if (changesMask[49])
{
- data << uint64(Coinage);
+ data << *SummonedBattlePetGUID;
}
if (changesMask[50])
{
- data << uint64(AccountBankCoinage);
+ data << uint64(Coinage);
}
if (changesMask[51])
{
- data << int32(XP);
+ data << uint64(AccountBankCoinage);
}
if (changesMask[52])
{
- data << int32(NextLevelXP);
+ data << int32(XP);
}
if (changesMask[53])
{
- data << int32(TrialXP);
+ data << int32(NextLevelXP);
}
if (changesMask[54])
{
- Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << int32(TrialXP);
}
if (changesMask[55])
{
- data << int32(CharacterPoints);
+ Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
if (changesMask[56])
{
- data << int32(MaxTalentTiers);
+ data << int32(CharacterPoints);
}
if (changesMask[57])
{
- data << uint32(TrackCreatureMask);
+ data << int32(MaxTalentTiers);
}
if (changesMask[58])
{
- data << float(MainhandExpertise);
+ data << uint32(TrackCreatureMask);
}
if (changesMask[59])
{
- data << float(OffhandExpertise);
+ data << float(MainhandExpertise);
}
if (changesMask[60])
{
- data << float(RangedExpertise);
+ data << float(OffhandExpertise);
}
if (changesMask[61])
{
- data << float(CombatRatingExpertise);
+ data << float(RangedExpertise);
}
if (changesMask[62])
{
- data << float(BlockPercentage);
+ data << float(CombatRatingExpertise);
}
if (changesMask[63])
{
- data << float(DodgePercentage);
+ data << float(BlockPercentage);
}
if (changesMask[64])
{
- data << float(DodgePercentageFromAttribute);
+ data << float(DodgePercentage);
}
if (changesMask[65])
{
- data << float(ParryPercentage);
+ data << float(DodgePercentageFromAttribute);
}
if (changesMask[66])
{
- data << float(ParryPercentageFromAttribute);
+ data << float(ParryPercentage);
}
if (changesMask[67])
{
- data << float(CritPercentage);
+ data << float(ParryPercentageFromAttribute);
}
if (changesMask[68])
{
- data << float(RangedCritPercentage);
+ data << float(CritPercentage);
}
if (changesMask[69])
{
- data << float(OffhandCritPercentage);
+ data << float(RangedCritPercentage);
}
}
if (changesMask[70])
{
if (changesMask[71])
{
- data << float(SpellCritPercentage);
+ data << float(OffhandCritPercentage);
}
if (changesMask[72])
{
- data << int32(ShieldBlock);
+ data << float(SpellCritPercentage);
}
if (changesMask[73])
{
- data << float(ShieldBlockCritPercentage);
+ data << int32(ShieldBlock);
}
if (changesMask[74])
{
- data << float(Mastery);
+ data << float(ShieldBlockCritPercentage);
}
if (changesMask[75])
{
- data << float(Speed);
+ data << float(Mastery);
}
if (changesMask[76])
{
- data << float(Avoidance);
+ data << float(Speed);
}
if (changesMask[77])
{
- data << float(Sturdiness);
+ data << float(Avoidance);
}
if (changesMask[78])
{
- data << int32(Versatility);
+ data << float(Sturdiness);
}
if (changesMask[79])
{
- data << float(VersatilityBonus);
+ data << int32(Versatility);
}
if (changesMask[80])
{
- data << float(PvpPowerDamage);
+ data << float(VersatilityBonus);
}
if (changesMask[81])
{
- data << float(PvpPowerHealing);
+ data << float(PvpPowerDamage);
}
if (changesMask[82])
{
- BitVectors->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << float(PvpPowerHealing);
}
if (changesMask[83])
{
- data << int32(ModHealingDonePos);
+ BitVectors->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
if (changesMask[84])
{
- data << float(ModHealingPercent);
+ data << int32(ModHealingDonePos);
}
if (changesMask[85])
{
- data << float(ModPeriodicHealingDonePercent);
+ data << float(ModHealingPercent);
}
if (changesMask[86])
{
- data << float(ModSpellPowerPercent);
+ data << float(ModPeriodicHealingDonePercent);
}
if (changesMask[87])
{
- data << float(ModResiliencePercent);
+ data << float(ModSpellPowerPercent);
}
if (changesMask[88])
{
- data << float(OverrideSpellPowerByAPPercent);
+ data << float(ModResiliencePercent);
}
if (changesMask[89])
{
- data << float(OverrideAPBySpellPowerPercent);
+ data << float(OverrideSpellPowerByAPPercent);
}
if (changesMask[90])
{
- data << int32(ModTargetResistance);
+ data << float(OverrideAPBySpellPowerPercent);
}
if (changesMask[91])
{
- data << int32(ModTargetPhysicalResistance);
+ data << int32(ModTargetResistance);
}
if (changesMask[92])
{
- data << uint32(LocalFlags);
+ data << int32(ModTargetPhysicalResistance);
}
if (changesMask[93])
{
- data << uint8(GrantableLevels);
+ data << uint32(LocalFlags);
}
if (changesMask[94])
{
- data << uint8(MultiActionBars);
+ data << uint8(GrantableLevels);
}
if (changesMask[95])
{
- data << uint8(LifetimeMaxRank);
+ data << uint8(MultiActionBars);
}
if (changesMask[96])
{
- data << uint8(NumRespecs);
+ data << uint8(LifetimeMaxRank);
}
if (changesMask[97])
{
- data << uint32(PvpMedals);
+ data << uint8(NumRespecs);
}
if (changesMask[98])
{
- data << uint16(TodayHonorableKills);
+ data << uint32(PvpMedals);
}
if (changesMask[99])
{
- data << uint16(YesterdayHonorableKills);
+ data << uint16(TodayHonorableKills);
}
if (changesMask[100])
{
- data << uint32(LifetimeHonorableKills);
+ data << uint16(YesterdayHonorableKills);
}
if (changesMask[101])
{
- data << int32(WatchedFactionIndex);
+ data << uint32(LifetimeHonorableKills);
}
}
if (changesMask[102])
{
if (changesMask[103])
{
- data << int32(MaxLevel);
+ data << int32(WatchedFactionIndex);
}
if (changesMask[104])
{
- data << int32(ScalingPlayerLevelDelta);
+ data << int32(MaxLevel);
}
if (changesMask[105])
{
- data << int32(MaxCreatureScalingLevel);
+ data << int32(ScalingPlayerLevelDelta);
}
if (changesMask[106])
{
- data << int32(PetSpellPower);
+ data << int32(MaxCreatureScalingLevel);
}
if (changesMask[107])
{
- data << float(UiHitModifier);
+ data << int32(PetSpellPower);
}
if (changesMask[108])
{
- data << float(UiSpellHitModifier);
+ data << float(UiHitModifier);
}
if (changesMask[109])
{
- data << int32(HomeRealmTimeOffset);
+ data << float(UiSpellHitModifier);
}
if (changesMask[110])
{
- data << float(ModPetHaste);
+ data << int32(HomeRealmTimeOffset);
}
if (changesMask[111])
{
- data << int8(JailersTowerLevelMax);
+ data << float(ModPetHaste);
}
if (changesMask[112])
{
- data << int8(JailersTowerLevel);
+ data << int8(JailersTowerLevelMax);
}
if (changesMask[113])
{
- data << uint8(LocalRegenFlags);
+ data << int8(JailersTowerLevel);
}
if (changesMask[114])
{
- data << uint8(AuraVision);
+ data << uint8(LocalRegenFlags);
}
if (changesMask[115])
{
- data << uint8(NumBackpackSlots);
+ data << uint8(AuraVision);
}
if (changesMask[116])
{
- data << int32(OverrideSpellsID);
+ data << uint8(NumBackpackSlots);
}
if (changesMask[117])
{
- data << uint16(LootSpecID);
+ data << int32(OverrideSpellsID);
}
if (changesMask[118])
{
- data << uint32(OverrideZonePVPType);
+ data << uint16(LootSpecID);
}
if (changesMask[119])
{
- data << int32(Honor);
+ data << uint32(OverrideZonePVPType);
}
if (changesMask[120])
{
- data << int32(HonorNextLevel);
+ data << int32(Honor);
}
if (changesMask[121])
{
- data << int32(PerksProgramCurrency);
+ data << int32(HonorNextLevel);
}
if (changesMask[122])
{
- data << uint8(NumBankSlots);
+ data << int32(PerksProgramCurrency);
}
if (changesMask[123])
{
+ data << uint8(NumBankSlots);
+ }
+ if (changesMask[124])
+ {
data << uint8(NumAccountBankTabs);
}
- if (changesMask[128])
+ if (changesMask[129])
{
data << int32(UiChromieTimeExpansionID);
}
- if (changesMask[129])
+ if (changesMask[130])
{
data << int32(TimerunningSeasonID);
}
- if (changesMask[130])
+ if (changesMask[131])
{
data << int32(TransportServerTime);
}
- if (changesMask[131])
+ if (changesMask[132])
{
data << uint32(WeeklyRewardsPeriodSinceOrigin);
}
- if (changesMask[132])
+ if (changesMask[133])
{
data << int16(DEBUGSoulbindConduitRank);
}
}
if (changesMask[134])
{
- if (changesMask[135])
+ if (changesMask[136])
{
data << uint32(ActiveCombatTraitConfigID);
}
- if (changesMask[136])
+ if (changesMask[137])
{
data << int32(ItemUpgradeHighOnehandWeaponItemID);
}
- if (changesMask[137])
+ if (changesMask[138])
{
data << int32(ItemUpgradeHighFingerItemID);
}
- if (changesMask[138])
+ if (changesMask[139])
{
data << float(ItemUpgradeHighFingerWatermark);
}
- if (changesMask[139])
+ if (changesMask[140])
{
data << int32(ItemUpgradeHighTrinketItemID);
}
- if (changesMask[140])
+ if (changesMask[141])
{
data << float(ItemUpgradeHighTrinketWatermark);
}
- if (changesMask[141])
+ if (changesMask[142])
{
data << uint64(LootHistoryInstanceID);
}
- if (changesMask[143])
+ if (changesMask[144])
{
data << uint8(RequiredMountCapabilityFlags);
}
@@ -6122,47 +6144,47 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
data.FlushBits();
if (changesMask[102])
{
- if (changesMask[124])
+ if (changesMask[125])
{
ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[126])
+ if (changesMask[127])
{
if (QuestSession.has_value())
{
QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- if (changesMask[125])
+ if (changesMask[126])
{
data << *FrozenPerksVendorItem;
}
- if (changesMask[127])
+ if (changesMask[128])
{
Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[133])
- {
- data << *DungeonScore;
- }
}
if (changesMask[134])
{
- if (changesMask[142])
+ if (changesMask[135])
+ {
+ data << *DungeonScore;
+ }
+ if (changesMask[143])
{
if (PetStable.has_value())
{
PetStable->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- if (changesMask[144])
+ if (changesMask[145])
{
if (WalkInData.has_value())
{
WalkInData->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- if (changesMask[145])
+ if (changesMask[146])
{
if (DelveData.has_value())
{
@@ -6170,131 +6192,131 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[146])
+ if (changesMask[147])
{
for (uint32 i = 0; i < 232; ++i)
{
- if (changesMask[147 + i])
+ if (changesMask[148 + i])
{
data << InvSlots[i];
}
}
}
- if (changesMask[379])
+ if (changesMask[380])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[380 + i])
+ if (changesMask[381 + i])
{
RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[382])
+ if (changesMask[383])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[383 + i])
+ if (changesMask[384 + i])
{
data << int32(ModDamageDonePos[i]);
}
- if (changesMask[390 + i])
+ if (changesMask[391 + i])
{
data << int32(ModDamageDoneNeg[i]);
}
- if (changesMask[397 + i])
+ if (changesMask[398 + i])
{
data << float(ModDamageDonePercent[i]);
}
- if (changesMask[404 + i])
+ if (changesMask[405 + i])
{
data << float(ModHealingDonePercent[i]);
}
}
}
- if (changesMask[411])
+ if (changesMask[412])
{
for (uint32 i = 0; i < 3; ++i)
{
- if (changesMask[412 + i])
+ if (changesMask[413 + i])
{
data << float(WeaponDmgMultipliers[i]);
}
- if (changesMask[415 + i])
+ if (changesMask[416 + i])
{
data << float(WeaponAtkSpeedMultipliers[i]);
}
}
}
- if (changesMask[418])
+ if (changesMask[419])
{
for (uint32 i = 0; i < 12; ++i)
{
- if (changesMask[419 + i])
+ if (changesMask[420 + i])
{
data << uint32(BuybackPrice[i]);
}
- if (changesMask[431 + i])
+ if (changesMask[432 + i])
{
data << int64(BuybackTimestamp[i]);
}
}
}
- if (changesMask[443])
+ if (changesMask[444])
{
for (uint32 i = 0; i < 32; ++i)
{
- if (changesMask[444 + i])
+ if (changesMask[445 + i])
{
data << int32(CombatRatings[i]);
}
}
}
- if (changesMask[476])
+ if (changesMask[477])
{
for (uint32 i = 0; i < 4; ++i)
{
- if (changesMask[477 + i])
+ if (changesMask[478 + i])
{
data << uint32(NoReagentCostMask[i]);
}
}
}
- if (changesMask[481])
+ if (changesMask[482])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[482 + i])
+ if (changesMask[483 + i])
{
data << int32(ProfessionSkillLine[i]);
}
}
}
- if (changesMask[484])
+ if (changesMask[485])
{
for (uint32 i = 0; i < 5; ++i)
{
- if (changesMask[485 + i])
+ if (changesMask[486 + i])
{
data << uint32(BagSlotFlags[i]);
}
}
}
- if (changesMask[490])
+ if (changesMask[491])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[491 + i])
+ if (changesMask[492 + i])
{
data << uint32(BankBagSlotFlags[i]);
}
}
}
- if (changesMask[498])
+ if (changesMask[499])
{
for (uint32 i = 0; i < 17; ++i)
{
- if (changesMask[499 + i])
+ if (changesMask[500 + i])
{
data << float(ItemUpgradeHighWatermark[i]);
}
@@ -6318,6 +6340,7 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(CharacterDataElements);
Base::ClearChangesMask(AccountDataElements);
Base::ClearChangesMask(DailyQuestsCompleted);
+ Base::ClearChangesMask(Field_1328);
Base::ClearChangesMask(AvailableQuestLineXQuestIDs);
Base::ClearChangesMask(Heirlooms);
Base::ClearChangesMask(HeirloomFlags);
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index d394afda2d9..853fc374f76 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -1034,7 +1034,7 @@ struct Research : public IsUpdateFieldStructureTag
bool operator!=(Research const& right) const { return !(*this == right); }
};
-struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<516>
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<517>
{
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
UpdateField<bool, 0, 2> BackpackSellJunkDisabled;
@@ -1042,154 +1042,155 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
UpdateField<bool, 0, 4> SortBagsRightToLeft;
UpdateField<bool, 0, 5> InsertItemsLeftToRight;
UpdateField<bool, 0, 6> HasPerksProgramPendingReward;
- UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 41, 42> ResearchSites;
- UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 43, 44> ResearchSiteProgress;
- UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 45, 46> Research;
+ UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 42, 43> ResearchSites;
+ UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 44, 45> ResearchSiteProgress;
+ UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 46, 47> Research;
DynamicUpdateField<uint64, 0, 7> KnownTitles;
DynamicUpdateField<UF::PlayerDataElement, 0, 8> CharacterDataElements;
DynamicUpdateField<UF::PlayerDataElement, 0, 9> AccountDataElements;
DynamicUpdateField<int32, 0, 11> DailyQuestsCompleted;
- DynamicUpdateField<int32, 0, 12> AvailableQuestLineXQuestIDs;
- DynamicUpdateField<int32, 0, 13> Heirlooms;
- DynamicUpdateField<uint32, 0, 14> HeirloomFlags;
- DynamicUpdateField<int32, 0, 15> Toys;
- DynamicUpdateField<uint32, 0, 16> ToyFlags;
- DynamicUpdateField<uint32, 0, 17> Transmog;
- DynamicUpdateField<int32, 0, 18> ConditionalTransmog;
- DynamicUpdateField<int32, 0, 19> SelfResSpells;
- DynamicUpdateField<uint32, 0, 20> RuneforgePowers;
- DynamicUpdateField<uint32, 0, 21> TransmogIllusions;
- DynamicUpdateField<uint32, 0, 22> WarbandScenes;
- DynamicUpdateField<UF::SpellPctModByLabel, 0, 24> SpellPctModByLabel;
- DynamicUpdateField<UF::SpellFlatModByLabel, 0, 25> SpellFlatModByLabel;
- DynamicUpdateField<UF::MawPower, 0, 26> MawPowers;
- DynamicUpdateField<UF::MultiFloorExplore, 0, 27> MultiFloorExploration;
- DynamicUpdateField<UF::RecipeProgressionInfo, 0, 28> RecipeProgression;
- DynamicUpdateField<UF::ReplayedQuest, 0, 29> ReplayedQuests;
- DynamicUpdateField<UF::QuestLog, 0, 30> TaskQuests;
- DynamicUpdateField<int32, 0, 31> DisabledSpells;
- DynamicUpdateField<UF::PersonalCraftingOrderCount, 32, 35> PersonalCraftingOrderCounts;
- DynamicUpdateField<UF::NPCCraftingOrderInfo, 32, 36> NpcCraftingOrders;
- DynamicUpdateField<UF::CategoryCooldownMod, 32, 37> CategoryCooldownMods;
- DynamicUpdateField<UF::WeeklySpellUse, 32, 38> WeeklySpellUses;
- DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 39> TrackedCollectableSources;
+ DynamicUpdateField<int32, 0, 12> Field_1328;
+ DynamicUpdateField<int32, 0, 13> AvailableQuestLineXQuestIDs;
+ DynamicUpdateField<int32, 0, 14> Heirlooms;
+ DynamicUpdateField<uint32, 0, 15> HeirloomFlags;
+ DynamicUpdateField<int32, 0, 16> Toys;
+ DynamicUpdateField<uint32, 0, 17> ToyFlags;
+ DynamicUpdateField<uint32, 0, 18> Transmog;
+ DynamicUpdateField<int32, 0, 19> ConditionalTransmog;
+ DynamicUpdateField<int32, 0, 20> SelfResSpells;
+ DynamicUpdateField<uint32, 0, 21> RuneforgePowers;
+ DynamicUpdateField<uint32, 0, 22> TransmogIllusions;
+ DynamicUpdateField<uint32, 0, 23> WarbandScenes;
+ DynamicUpdateField<UF::SpellPctModByLabel, 0, 25> SpellPctModByLabel;
+ DynamicUpdateField<UF::SpellFlatModByLabel, 0, 26> SpellFlatModByLabel;
+ DynamicUpdateField<UF::MawPower, 0, 27> MawPowers;
+ DynamicUpdateField<UF::MultiFloorExplore, 0, 28> MultiFloorExploration;
+ DynamicUpdateField<UF::RecipeProgressionInfo, 0, 29> RecipeProgression;
+ DynamicUpdateField<UF::ReplayedQuest, 0, 30> ReplayedQuests;
+ DynamicUpdateField<UF::QuestLog, 0, 31> TaskQuests;
+ DynamicUpdateField<int32, 32, 33> DisabledSpells;
+ DynamicUpdateField<UF::PersonalCraftingOrderCount, 32, 36> PersonalCraftingOrderCounts;
+ DynamicUpdateField<UF::NPCCraftingOrderInfo, 32, 37> NpcCraftingOrders;
+ DynamicUpdateField<UF::CategoryCooldownMod, 32, 38> CategoryCooldownMods;
+ DynamicUpdateField<UF::WeeklySpellUse, 32, 39> WeeklySpellUses;
+ DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 40> TrackedCollectableSources;
DynamicUpdateField<UF::PVPInfo, 0, 10> PvpInfo;
- DynamicUpdateField<UF::CharacterRestriction, 0, 23> CharacterRestrictions;
- DynamicUpdateField<UF::TraitConfig, 32, 33> TraitConfigs;
- DynamicUpdateField<UF::CraftingOrder, 32, 34> CraftingOrders;
- DynamicUpdateField<UF::BankTabSettings, 32, 40> AccountBankTabSettings;
- UpdateField<ObjectGuid, 32, 47> FarsightObject;
- UpdateField<ObjectGuid, 32, 48> SummonedBattlePetGUID;
- UpdateField<uint64, 32, 49> Coinage;
- UpdateField<uint64, 32, 50> AccountBankCoinage;
- UpdateField<int32, 32, 51> XP;
- UpdateField<int32, 32, 52> NextLevelXP;
- UpdateField<int32, 32, 53> TrialXP;
- UpdateField<UF::SkillInfo, 32, 54> Skill;
- UpdateField<int32, 32, 55> CharacterPoints;
- UpdateField<int32, 32, 56> MaxTalentTiers;
- UpdateField<uint32, 32, 57> TrackCreatureMask;
- UpdateField<float, 32, 58> MainhandExpertise;
- UpdateField<float, 32, 59> OffhandExpertise;
- UpdateField<float, 32, 60> RangedExpertise;
- UpdateField<float, 32, 61> CombatRatingExpertise;
- UpdateField<float, 32, 62> BlockPercentage;
- UpdateField<float, 32, 63> DodgePercentage;
- UpdateField<float, 32, 64> DodgePercentageFromAttribute;
- UpdateField<float, 32, 65> ParryPercentage;
- UpdateField<float, 32, 66> ParryPercentageFromAttribute;
- UpdateField<float, 32, 67> CritPercentage;
- UpdateField<float, 32, 68> RangedCritPercentage;
- UpdateField<float, 32, 69> OffhandCritPercentage;
- UpdateField<float, 70, 71> SpellCritPercentage;
- UpdateField<int32, 70, 72> ShieldBlock;
- UpdateField<float, 70, 73> ShieldBlockCritPercentage;
- UpdateField<float, 70, 74> Mastery;
- UpdateField<float, 70, 75> Speed;
- UpdateField<float, 70, 76> Avoidance;
- UpdateField<float, 70, 77> Sturdiness;
- UpdateField<int32, 70, 78> Versatility;
- UpdateField<float, 70, 79> VersatilityBonus;
- UpdateField<float, 70, 80> PvpPowerDamage;
- UpdateField<float, 70, 81> PvpPowerHealing;
- UpdateField<UF::BitVectors, 70, 82> BitVectors;
- UpdateField<int32, 70, 83> ModHealingDonePos;
- UpdateField<float, 70, 84> ModHealingPercent;
- UpdateField<float, 70, 85> ModPeriodicHealingDonePercent;
- UpdateField<float, 70, 86> ModSpellPowerPercent;
- UpdateField<float, 70, 87> ModResiliencePercent;
- UpdateField<float, 70, 88> OverrideSpellPowerByAPPercent;
- UpdateField<float, 70, 89> OverrideAPBySpellPowerPercent;
- UpdateField<int32, 70, 90> ModTargetResistance;
- UpdateField<int32, 70, 91> ModTargetPhysicalResistance;
- UpdateField<uint32, 70, 92> LocalFlags;
- UpdateField<uint8, 70, 93> GrantableLevels;
- UpdateField<uint8, 70, 94> MultiActionBars;
- UpdateField<uint8, 70, 95> LifetimeMaxRank;
- UpdateField<uint8, 70, 96> NumRespecs;
- UpdateField<uint32, 70, 97> PvpMedals;
- UpdateField<uint16, 70, 98> TodayHonorableKills;
- UpdateField<uint16, 70, 99> YesterdayHonorableKills;
- UpdateField<uint32, 70, 100> LifetimeHonorableKills;
- UpdateField<int32, 70, 101> WatchedFactionIndex;
- UpdateField<int32, 102, 103> MaxLevel;
- UpdateField<int32, 102, 104> ScalingPlayerLevelDelta;
- UpdateField<int32, 102, 105> MaxCreatureScalingLevel;
- UpdateField<int32, 102, 106> PetSpellPower;
- UpdateField<float, 102, 107> UiHitModifier;
- UpdateField<float, 102, 108> UiSpellHitModifier;
- UpdateField<int32, 102, 109> HomeRealmTimeOffset;
- UpdateField<float, 102, 110> ModPetHaste;
- UpdateField<int8, 102, 111> JailersTowerLevelMax;
- UpdateField<int8, 102, 112> JailersTowerLevel;
- UpdateField<uint8, 102, 113> LocalRegenFlags;
- UpdateField<uint8, 102, 114> AuraVision;
- UpdateField<uint8, 102, 115> NumBackpackSlots;
- UpdateField<int32, 102, 116> OverrideSpellsID;
- UpdateField<uint16, 102, 117> LootSpecID;
- UpdateField<uint32, 102, 118> OverrideZonePVPType;
- UpdateField<int32, 102, 119> Honor;
- UpdateField<int32, 102, 120> HonorNextLevel;
- UpdateField<int32, 102, 121> PerksProgramCurrency;
- UpdateField<uint8, 102, 122> NumBankSlots;
- UpdateField<uint8, 102, 123> NumAccountBankTabs;
- UpdateField<UF::ResearchHistory, 102, 124> ResearchHistory;
- UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 125> FrozenPerksVendorItem;
- UpdateField<UF::ActivePlayerUnk901, 102, 127> Field_1410;
- OptionalUpdateField<UF::QuestSession, 102, 126> QuestSession;
- UpdateField<int32, 102, 128> UiChromieTimeExpansionID;
- UpdateField<int32, 102, 129> TimerunningSeasonID;
- UpdateField<int32, 102, 130> TransportServerTime;
- UpdateField<uint32, 102, 131> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
- UpdateField<int16, 102, 132> DEBUGSoulbindConduitRank;
- UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 133> DungeonScore;
- UpdateField<uint32, 134, 135> ActiveCombatTraitConfigID;
- UpdateField<int32, 134, 136> ItemUpgradeHighOnehandWeaponItemID;
- UpdateField<int32, 134, 137> ItemUpgradeHighFingerItemID;
- UpdateField<float, 134, 138> ItemUpgradeHighFingerWatermark;
- UpdateField<int32, 134, 139> ItemUpgradeHighTrinketItemID;
- UpdateField<float, 134, 140> ItemUpgradeHighTrinketWatermark;
- UpdateField<uint64, 134, 141> LootHistoryInstanceID;
- OptionalUpdateField<UF::StableInfo, 134, 142> PetStable;
- UpdateField<uint8, 134, 143> RequiredMountCapabilityFlags;
- OptionalUpdateField<UF::WalkInData, 134, 144> WalkInData;
- OptionalUpdateField<UF::DelveData, 134, 145> DelveData;
- UpdateFieldArray<ObjectGuid, 232, 146, 147> InvSlots;
- UpdateFieldArray<UF::RestInfo, 2, 379, 380> RestInfo;
- UpdateFieldArray<int32, 7, 382, 383> ModDamageDonePos;
- UpdateFieldArray<int32, 7, 382, 390> ModDamageDoneNeg;
- UpdateFieldArray<float, 7, 382, 397> ModDamageDonePercent;
- UpdateFieldArray<float, 7, 382, 404> ModHealingDonePercent;
- UpdateFieldArray<float, 3, 411, 412> WeaponDmgMultipliers;
- UpdateFieldArray<float, 3, 411, 415> WeaponAtkSpeedMultipliers;
- UpdateFieldArray<uint32, 12, 418, 419> BuybackPrice;
- UpdateFieldArray<int64, 12, 418, 431> BuybackTimestamp;
- UpdateFieldArray<int32, 32, 443, 444> CombatRatings;
- UpdateFieldArray<uint32, 4, 476, 477> NoReagentCostMask;
- UpdateFieldArray<int32, 2, 481, 482> ProfessionSkillLine;
- UpdateFieldArray<uint32, 5, 484, 485> BagSlotFlags;
- UpdateFieldArray<uint32, 7, 490, 491> BankBagSlotFlags;
- UpdateFieldArray<float, 17, 498, 499> ItemUpgradeHighWatermark;
+ DynamicUpdateField<UF::CharacterRestriction, 0, 24> CharacterRestrictions;
+ DynamicUpdateField<UF::TraitConfig, 32, 34> TraitConfigs;
+ DynamicUpdateField<UF::CraftingOrder, 32, 35> CraftingOrders;
+ DynamicUpdateField<UF::BankTabSettings, 32, 41> AccountBankTabSettings;
+ UpdateField<ObjectGuid, 32, 48> FarsightObject;
+ UpdateField<ObjectGuid, 32, 49> SummonedBattlePetGUID;
+ UpdateField<uint64, 32, 50> Coinage;
+ UpdateField<uint64, 32, 51> AccountBankCoinage;
+ UpdateField<int32, 32, 52> XP;
+ UpdateField<int32, 32, 53> NextLevelXP;
+ UpdateField<int32, 32, 54> TrialXP;
+ UpdateField<UF::SkillInfo, 32, 55> Skill;
+ UpdateField<int32, 32, 56> CharacterPoints;
+ UpdateField<int32, 32, 57> MaxTalentTiers;
+ UpdateField<uint32, 32, 58> TrackCreatureMask;
+ UpdateField<float, 32, 59> MainhandExpertise;
+ UpdateField<float, 32, 60> OffhandExpertise;
+ UpdateField<float, 32, 61> RangedExpertise;
+ UpdateField<float, 32, 62> CombatRatingExpertise;
+ UpdateField<float, 32, 63> BlockPercentage;
+ UpdateField<float, 32, 64> DodgePercentage;
+ UpdateField<float, 32, 65> DodgePercentageFromAttribute;
+ UpdateField<float, 32, 66> ParryPercentage;
+ UpdateField<float, 32, 67> ParryPercentageFromAttribute;
+ UpdateField<float, 32, 68> CritPercentage;
+ UpdateField<float, 32, 69> RangedCritPercentage;
+ UpdateField<float, 70, 71> OffhandCritPercentage;
+ UpdateField<float, 70, 72> SpellCritPercentage;
+ UpdateField<int32, 70, 73> ShieldBlock;
+ UpdateField<float, 70, 74> ShieldBlockCritPercentage;
+ UpdateField<float, 70, 75> Mastery;
+ UpdateField<float, 70, 76> Speed;
+ UpdateField<float, 70, 77> Avoidance;
+ UpdateField<float, 70, 78> Sturdiness;
+ UpdateField<int32, 70, 79> Versatility;
+ UpdateField<float, 70, 80> VersatilityBonus;
+ UpdateField<float, 70, 81> PvpPowerDamage;
+ UpdateField<float, 70, 82> PvpPowerHealing;
+ UpdateField<UF::BitVectors, 70, 83> BitVectors;
+ UpdateField<int32, 70, 84> ModHealingDonePos;
+ UpdateField<float, 70, 85> ModHealingPercent;
+ UpdateField<float, 70, 86> ModPeriodicHealingDonePercent;
+ UpdateField<float, 70, 87> ModSpellPowerPercent;
+ UpdateField<float, 70, 88> ModResiliencePercent;
+ UpdateField<float, 70, 89> OverrideSpellPowerByAPPercent;
+ UpdateField<float, 70, 90> OverrideAPBySpellPowerPercent;
+ UpdateField<int32, 70, 91> ModTargetResistance;
+ UpdateField<int32, 70, 92> ModTargetPhysicalResistance;
+ UpdateField<uint32, 70, 93> LocalFlags;
+ UpdateField<uint8, 70, 94> GrantableLevels;
+ UpdateField<uint8, 70, 95> MultiActionBars;
+ UpdateField<uint8, 70, 96> LifetimeMaxRank;
+ UpdateField<uint8, 70, 97> NumRespecs;
+ UpdateField<uint32, 70, 98> PvpMedals;
+ UpdateField<uint16, 70, 99> TodayHonorableKills;
+ UpdateField<uint16, 70, 100> YesterdayHonorableKills;
+ UpdateField<uint32, 70, 101> LifetimeHonorableKills;
+ UpdateField<int32, 102, 103> WatchedFactionIndex;
+ UpdateField<int32, 102, 104> MaxLevel;
+ UpdateField<int32, 102, 105> ScalingPlayerLevelDelta;
+ UpdateField<int32, 102, 106> MaxCreatureScalingLevel;
+ UpdateField<int32, 102, 107> PetSpellPower;
+ UpdateField<float, 102, 108> UiHitModifier;
+ UpdateField<float, 102, 109> UiSpellHitModifier;
+ UpdateField<int32, 102, 110> HomeRealmTimeOffset;
+ UpdateField<float, 102, 111> ModPetHaste;
+ UpdateField<int8, 102, 112> JailersTowerLevelMax;
+ UpdateField<int8, 102, 113> JailersTowerLevel;
+ UpdateField<uint8, 102, 114> LocalRegenFlags;
+ UpdateField<uint8, 102, 115> AuraVision;
+ UpdateField<uint8, 102, 116> NumBackpackSlots;
+ UpdateField<int32, 102, 117> OverrideSpellsID;
+ UpdateField<uint16, 102, 118> LootSpecID;
+ UpdateField<uint32, 102, 119> OverrideZonePVPType;
+ UpdateField<int32, 102, 120> Honor;
+ UpdateField<int32, 102, 121> HonorNextLevel;
+ UpdateField<int32, 102, 122> PerksProgramCurrency;
+ UpdateField<uint8, 102, 123> NumBankSlots;
+ UpdateField<uint8, 102, 124> NumAccountBankTabs;
+ UpdateField<UF::ResearchHistory, 102, 125> ResearchHistory;
+ UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 126> FrozenPerksVendorItem;
+ UpdateField<UF::ActivePlayerUnk901, 102, 128> Field_1410;
+ OptionalUpdateField<UF::QuestSession, 102, 127> QuestSession;
+ UpdateField<int32, 102, 129> UiChromieTimeExpansionID;
+ UpdateField<int32, 102, 130> TimerunningSeasonID;
+ UpdateField<int32, 102, 131> TransportServerTime;
+ UpdateField<uint32, 102, 132> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
+ UpdateField<int16, 102, 133> DEBUGSoulbindConduitRank;
+ UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 134, 135> DungeonScore;
+ UpdateField<uint32, 134, 136> ActiveCombatTraitConfigID;
+ UpdateField<int32, 134, 137> ItemUpgradeHighOnehandWeaponItemID;
+ UpdateField<int32, 134, 138> ItemUpgradeHighFingerItemID;
+ UpdateField<float, 134, 139> ItemUpgradeHighFingerWatermark;
+ UpdateField<int32, 134, 140> ItemUpgradeHighTrinketItemID;
+ UpdateField<float, 134, 141> ItemUpgradeHighTrinketWatermark;
+ UpdateField<uint64, 134, 142> LootHistoryInstanceID;
+ OptionalUpdateField<UF::StableInfo, 134, 143> PetStable;
+ UpdateField<uint8, 134, 144> RequiredMountCapabilityFlags;
+ OptionalUpdateField<UF::WalkInData, 134, 145> WalkInData;
+ OptionalUpdateField<UF::DelveData, 134, 146> DelveData;
+ UpdateFieldArray<ObjectGuid, 232, 147, 148> InvSlots;
+ UpdateFieldArray<UF::RestInfo, 2, 380, 381> RestInfo;
+ UpdateFieldArray<int32, 7, 383, 384> ModDamageDonePos;
+ UpdateFieldArray<int32, 7, 383, 391> ModDamageDoneNeg;
+ UpdateFieldArray<float, 7, 383, 398> ModDamageDonePercent;
+ UpdateFieldArray<float, 7, 383, 405> ModHealingDonePercent;
+ UpdateFieldArray<float, 3, 412, 413> WeaponDmgMultipliers;
+ UpdateFieldArray<float, 3, 412, 416> WeaponAtkSpeedMultipliers;
+ UpdateFieldArray<uint32, 12, 419, 420> BuybackPrice;
+ UpdateFieldArray<int64, 12, 419, 432> BuybackTimestamp;
+ UpdateFieldArray<int32, 32, 444, 445> CombatRatings;
+ UpdateFieldArray<uint32, 4, 477, 478> NoReagentCostMask;
+ UpdateFieldArray<int32, 2, 482, 483> ProfessionSkillLine;
+ UpdateFieldArray<uint32, 5, 485, 486> BagSlotFlags;
+ UpdateFieldArray<uint32, 7, 491, 492> BankBagSlotFlags;
+ UpdateFieldArray<float, 17, 499, 500> ItemUpgradeHighWatermark;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index bdce5bc9b76..77c1e44f7dc 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -792,6 +792,7 @@ enum class ItemSearchLocation
Inventory = 0x02,
Bank = 0x04,
ReagentBank = 0x08,
+ AccountBank = 0x10, // NYI
Default = Equipment | Inventory,
Everywhere = Equipment | Inventory | Bank | ReagentBank