aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-09-07 01:10:07 +0200
committerShauren <shauren.trinity@gmail.com>2023-09-07 01:10:07 +0200
commit8efeb202a500bda46283127f66fb85f6b91f9e76 (patch)
treec6c12b633d144d26927f615af4d3d64b07e62dcc /src/server/game/Entities/Object
parent0bf5cf33c7dd909202ef492b69e317652e923f96 (diff)
Core: Update to 10.1.7
Diffstat (limited to 'src/server/game/Entities/Object')
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp541
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h351
2 files changed, 488 insertions, 404 deletions
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
index 93ac9f8c967..dd13e001442 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -2130,7 +2130,10 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
data << uint32(GuildDeleteDate);
data << int32(GuildLevel);
data << uint32(Customizations.size());
- data << uint8(PartyType);
+ for (uint32 i = 0; i < 2; ++i)
+ {
+ data << uint8(PartyType[i]);
+ }
data << uint8(NativeSex);
data << uint8(Inebriation);
data << uint8(PvpTitle);
@@ -2165,6 +2168,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
data << int32(Field_B0);
data << int32(Field_B4);
data << int32(CurrentBattlePetSpeciesID);
+ data << field_138;
CtrOptions->WriteCreate(data, owner, receiver);
data << int32(CovenantID);
data << int32(SoulbindID);
@@ -2203,7 +2207,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x0000003Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFC00000u, 0xFFFFFFFFu, 0x0000001Fu });
+ Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFE000000u, 0xFFFFFFFFu, 0x000000FFu });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -2211,12 +2215,12 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi
void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember))
- allowedMaskForTarget |= { 0x00000012u, 0xFFFFFFC0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x003FFFFFu, 0x00000000u, 0x00000000u };
+ allowedMaskForTarget |= { 0x00000012u, 0xFFFFFE00u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x01FFFFFFu, 0x00000000u, 0x00000000u };
}
void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags)
{
- Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x0000003Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFC00000u, 0xFFFFFFFFu, 0x0000001Fu });
+ Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFE000000u, 0xFFFFFFFFu, 0x000000FFu });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask &= allowedMaskForTarget;
}
@@ -2348,78 +2352,78 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
if (changesMask[15])
{
- data << uint8(PartyType);
+ data << uint8(NativeSex);
}
if (changesMask[16])
{
- data << uint8(NativeSex);
+ data << uint8(Inebriation);
}
if (changesMask[17])
{
- data << uint8(Inebriation);
+ data << uint8(PvpTitle);
}
if (changesMask[18])
{
- data << uint8(PvpTitle);
+ data << uint8(ArenaFaction);
}
if (changesMask[19])
{
- data << uint8(ArenaFaction);
+ data << uint32(DuelTeam);
}
if (changesMask[20])
{
- data << uint32(DuelTeam);
+ data << int32(GuildTimeStamp);
}
if (changesMask[21])
{
- data << int32(GuildTimeStamp);
+ data << int32(PlayerTitle);
}
if (changesMask[22])
{
- data << int32(PlayerTitle);
+ data << int32(FakeInebriation);
}
if (changesMask[23])
{
- data << int32(FakeInebriation);
+ data << uint32(VirtualPlayerRealm);
}
if (changesMask[24])
{
- data << uint32(VirtualPlayerRealm);
+ data << uint32(CurrentSpecID);
}
if (changesMask[25])
{
- data << uint32(CurrentSpecID);
+ data << int32(TaxiMountAnimKitID);
}
if (changesMask[26])
{
- data << int32(TaxiMountAnimKitID);
+ data << uint8(CurrentBattlePetBreedQuality);
}
if (changesMask[27])
{
- data << uint8(CurrentBattlePetBreedQuality);
+ data << int32(HonorLevel);
}
if (changesMask[28])
{
- data << int32(HonorLevel);
+ data << int64(LogoutTime);
}
if (changesMask[29])
{
- data << int64(LogoutTime);
+ data << int32(Field_B0);
}
if (changesMask[30])
{
- data << int32(Field_B0);
+ data << int32(Field_B4);
}
if (changesMask[31])
{
- data << int32(Field_B4);
+ data << int32(CurrentBattlePetSpeciesID);
}
}
if (changesMask[32])
{
if (changesMask[33])
{
- data << int32(CurrentBattlePetSpeciesID);
+ data << field_138;
}
if (changesMask[34])
{
@@ -2440,10 +2444,20 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
if (changesMask[38])
{
- for (uint32 i = 0; i < 175; ++i)
+ for (uint32 i = 0; i < 2; ++i)
{
if (changesMask[39 + i])
{
+ data << uint8(PartyType[i]);
+ }
+ }
+ }
+ if (changesMask[41])
+ {
+ for (uint32 i = 0; i < 175; ++i)
+ {
+ if (changesMask[42 + i])
+ {
if (noQuestLogChangesMask)
QuestLog[i].WriteCreate(data, owner, receiver);
else
@@ -2451,31 +2465,31 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign
}
}
}
- if (changesMask[214])
+ if (changesMask[217])
{
for (uint32 i = 0; i < 19; ++i)
{
- if (changesMask[215 + i])
+ if (changesMask[218 + i])
{
VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[234])
+ if (changesMask[237])
{
for (uint32 i = 0; i < 6; ++i)
{
- if (changesMask[235 + i])
+ if (changesMask[238 + i])
{
data << float(AvgItemLevel[i]);
}
}
}
- if (changesMask[241])
+ if (changesMask[244])
{
for (uint32 i = 0; i < 19; ++i)
{
- if (changesMask[242 + i])
+ if (changesMask[245 + i])
{
data << uint32(Field_3120[i]);
}
@@ -2500,7 +2514,6 @@ void PlayerData::ClearChangesMask()
Base::ClearChangesMask(GuildRankID);
Base::ClearChangesMask(GuildDeleteDate);
Base::ClearChangesMask(GuildLevel);
- Base::ClearChangesMask(PartyType);
Base::ClearChangesMask(NativeSex);
Base::ClearChangesMask(Inebriation);
Base::ClearChangesMask(PvpTitle);
@@ -2518,10 +2531,12 @@ void PlayerData::ClearChangesMask()
Base::ClearChangesMask(Field_B0);
Base::ClearChangesMask(Field_B4);
Base::ClearChangesMask(CurrentBattlePetSpeciesID);
+ Base::ClearChangesMask(field_138);
Base::ClearChangesMask(CtrOptions);
Base::ClearChangesMask(CovenantID);
Base::ClearChangesMask(SoulbindID);
Base::ClearChangesMask(DungeonScore);
+ Base::ClearChangesMask(PartyType);
Base::ClearChangesMask(QuestLog);
Base::ClearChangesMask(VisibleItems);
Base::ClearChangesMask(AvgItemLevel);
@@ -3803,6 +3818,47 @@ void StableInfo::ClearChangesMask()
_changesMask.ResetAll();
}
+void CollectableSourceTrackedData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
+{
+ data << int32(TargetType);
+ data << int32(TargetID);
+ data << int32(CollectableSourceInfoID);
+}
+
+void CollectableSourceTrackedData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 4);
+
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data << int32(TargetType);
+ }
+ if (changesMask[2])
+ {
+ data << int32(TargetID);
+ }
+ if (changesMask[3])
+ {
+ data << int32(CollectableSourceInfoID);
+ }
+ }
+}
+
+void CollectableSourceTrackedData::ClearChangesMask()
+{
+ Base::ClearChangesMask(TargetType);
+ Base::ClearChangesMask(TargetID);
+ Base::ClearChangesMask(CollectableSourceInfoID);
+ _changesMask.ResetAll();
+}
+
void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const
{
data << int16(ResearchProjectID);
@@ -4103,10 +4159,11 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
}
for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
{
- data << int64(TrackedCollectableSources[i]);
+ TrackedCollectableSources[i].WriteCreate(data, owner, receiver);
}
data.FlushBits();
data.WriteBit(BackpackAutoSortDisabled);
+ data.WriteBit(BackpackSellJunkDisabled);
data.WriteBit(BankAutoSortDisabled);
data.WriteBit(SortBagsRightToLeft);
data.WriteBit(InsertItemsLeftToRight);
@@ -4167,28 +4224,32 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
if (changesMask[2])
{
- data.WriteBit(BankAutoSortDisabled);
+ data.WriteBit(BackpackSellJunkDisabled);
}
if (changesMask[3])
{
- data.WriteBit(SortBagsRightToLeft);
+ data.WriteBit(BankAutoSortDisabled);
}
if (changesMask[4])
{
- data.WriteBit(InsertItemsLeftToRight);
+ data.WriteBit(SortBagsRightToLeft);
}
if (changesMask[5])
{
- data.WriteBit(HasPerksProgramPendingReward);
+ data.WriteBit(InsertItemsLeftToRight);
}
if (changesMask[6])
{
+ data.WriteBit(HasPerksProgramPendingReward);
+ }
+ if (changesMask[7])
+ {
if (!ignoreNestedChangesMask)
KnownTitles.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(KnownTitles.size(), data);
}
- if (changesMask[7])
+ if (changesMask[8])
{
if (!ignoreNestedChangesMask)
PvpInfo.WriteUpdateMask(data);
@@ -4196,11 +4257,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data);
}
}
- if (changesMask[35])
+ if (changesMask[36])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[36 + i])
+ if (changesMask[37 + i])
{
if (!ignoreNestedChangesMask)
ResearchSites[i].WriteUpdateMask(data);
@@ -4209,11 +4270,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[37])
+ if (changesMask[38])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[38 + i])
+ if (changesMask[39 + i])
{
if (!ignoreNestedChangesMask)
ResearchSiteProgress[i].WriteUpdateMask(data);
@@ -4222,11 +4283,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[39])
+ if (changesMask[40])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[40 + i])
+ if (changesMask[41 + i])
{
if (!ignoreNestedChangesMask)
Research[i].WriteUpdateMask(data);
@@ -4235,11 +4296,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[35])
+ if (changesMask[36])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[36 + i])
+ if (changesMask[37 + i])
{
for (uint32 j = 0; j < ResearchSites[i].size(); ++j)
{
@@ -4251,11 +4312,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[37])
+ if (changesMask[38])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[38 + i])
+ if (changesMask[39 + i])
{
for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j)
{
@@ -4267,11 +4328,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[39])
+ if (changesMask[40])
{
for (uint32 i = 0; i < 1; ++i)
{
- if (changesMask[40 + i])
+ if (changesMask[41 + i])
{
for (uint32 j = 0; j < Research[i].size(); ++j)
{
@@ -4286,185 +4347,185 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[8])
+ if (changesMask[9])
{
if (!ignoreNestedChangesMask)
DailyQuestsCompleted.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(DailyQuestsCompleted.size(), data);
}
- if (changesMask[9])
+ if (changesMask[10])
{
if (!ignoreNestedChangesMask)
AvailableQuestLineXQuestIDs.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.size(), data);
}
- if (changesMask[10])
+ if (changesMask[11])
{
if (!ignoreNestedChangesMask)
Heirlooms.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Heirlooms.size(), data);
}
- if (changesMask[11])
+ if (changesMask[12])
{
if (!ignoreNestedChangesMask)
HeirloomFlags.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.size(), data);
}
- if (changesMask[12])
+ if (changesMask[13])
{
if (!ignoreNestedChangesMask)
Toys.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Toys.size(), data);
}
- if (changesMask[13])
+ if (changesMask[14])
{
if (!ignoreNestedChangesMask)
ToyFlags.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ToyFlags.size(), data);
}
- if (changesMask[14])
+ if (changesMask[15])
{
if (!ignoreNestedChangesMask)
Transmog.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(Transmog.size(), data);
}
- if (changesMask[15])
+ if (changesMask[16])
{
if (!ignoreNestedChangesMask)
ConditionalTransmog.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.size(), data);
}
- if (changesMask[16])
+ if (changesMask[17])
{
if (!ignoreNestedChangesMask)
SelfResSpells.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SelfResSpells.size(), data);
}
- if (changesMask[17])
+ if (changesMask[18])
{
if (!ignoreNestedChangesMask)
RuneforgePowers.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.size(), data);
}
- if (changesMask[18])
+ if (changesMask[19])
{
if (!ignoreNestedChangesMask)
TransmogIllusions.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.size(), data);
}
- if (changesMask[19])
+ if (changesMask[20])
{
if (!ignoreNestedChangesMask)
CharacterRestrictions.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.size(), data);
}
- if (changesMask[20])
+ if (changesMask[21])
{
if (!ignoreNestedChangesMask)
SpellPctModByLabel.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.size(), data);
}
- if (changesMask[21])
+ if (changesMask[22])
{
if (!ignoreNestedChangesMask)
SpellFlatModByLabel.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data);
}
- if (changesMask[22])
+ if (changesMask[23])
{
if (!ignoreNestedChangesMask)
MawPowers.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(MawPowers.size(), data);
}
- if (changesMask[23])
+ if (changesMask[24])
{
if (!ignoreNestedChangesMask)
MultiFloorExploration.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.size(), data);
}
- if (changesMask[24])
+ if (changesMask[25])
{
if (!ignoreNestedChangesMask)
RecipeProgression.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(RecipeProgression.size(), data);
}
- if (changesMask[25])
+ if (changesMask[26])
{
if (!ignoreNestedChangesMask)
ReplayedQuests.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.size(), data);
}
- if (changesMask[26])
+ if (changesMask[27])
{
if (!ignoreNestedChangesMask)
TaskQuests.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(TaskQuests.size(), data);
}
- if (changesMask[27])
+ if (changesMask[28])
{
if (!ignoreNestedChangesMask)
DisabledSpells.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(DisabledSpells.size(), data);
}
- if (changesMask[28])
+ if (changesMask[29])
{
if (!ignoreNestedChangesMask)
TraitConfigs.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(TraitConfigs.size(), data);
}
- if (changesMask[29])
+ if (changesMask[30])
{
if (!ignoreNestedChangesMask)
CraftingOrders.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(CraftingOrders.size(), data);
}
- if (changesMask[30])
+ if (changesMask[31])
{
if (!ignoreNestedChangesMask)
PersonalCraftingOrderCounts.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data);
}
- if (changesMask[31])
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
{
if (!ignoreNestedChangesMask)
CategoryCooldownMods.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.size(), data);
}
- }
- if (changesMask[32])
- {
- if (changesMask[33])
+ if (changesMask[34])
{
if (!ignoreNestedChangesMask)
WeeklySpellUses.WriteUpdateMask(data);
else
WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.size(), data);
}
- if (changesMask[34])
+ if (changesMask[35])
{
if (!ignoreNestedChangesMask)
TrackedCollectableSources.WriteUpdateMask(data);
@@ -4475,7 +4536,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
data.FlushBits();
if (changesMask[0])
{
- if (changesMask[6])
+ if (changesMask[7])
{
for (uint32 i = 0; i < KnownTitles.size(); ++i)
{
@@ -4485,7 +4546,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[8])
+ if (changesMask[9])
{
for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i)
{
@@ -4495,7 +4556,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[9])
+ if (changesMask[10])
{
for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i)
{
@@ -4505,7 +4566,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[10])
+ if (changesMask[11])
{
for (uint32 i = 0; i < Heirlooms.size(); ++i)
{
@@ -4515,7 +4576,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[11])
+ if (changesMask[12])
{
for (uint32 i = 0; i < HeirloomFlags.size(); ++i)
{
@@ -4525,7 +4586,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[12])
+ if (changesMask[13])
{
for (uint32 i = 0; i < Toys.size(); ++i)
{
@@ -4535,7 +4596,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[13])
+ if (changesMask[14])
{
for (uint32 i = 0; i < ToyFlags.size(); ++i)
{
@@ -4545,7 +4606,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[14])
+ if (changesMask[15])
{
for (uint32 i = 0; i < Transmog.size(); ++i)
{
@@ -4555,7 +4616,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[15])
+ if (changesMask[16])
{
for (uint32 i = 0; i < ConditionalTransmog.size(); ++i)
{
@@ -4565,7 +4626,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[16])
+ if (changesMask[17])
{
for (uint32 i = 0; i < SelfResSpells.size(); ++i)
{
@@ -4575,7 +4636,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[17])
+ if (changesMask[18])
{
for (uint32 i = 0; i < RuneforgePowers.size(); ++i)
{
@@ -4585,7 +4646,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[18])
+ if (changesMask[19])
{
for (uint32 i = 0; i < TransmogIllusions.size(); ++i)
{
@@ -4595,7 +4656,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[20])
+ if (changesMask[21])
{
for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i)
{
@@ -4605,7 +4666,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[21])
+ if (changesMask[22])
{
for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i)
{
@@ -4615,7 +4676,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[22])
+ if (changesMask[23])
{
for (uint32 i = 0; i < MawPowers.size(); ++i)
{
@@ -4625,7 +4686,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[23])
+ if (changesMask[24])
{
for (uint32 i = 0; i < MultiFloorExploration.size(); ++i)
{
@@ -4635,7 +4696,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[24])
+ if (changesMask[25])
{
for (uint32 i = 0; i < RecipeProgression.size(); ++i)
{
@@ -4645,7 +4706,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[25])
+ if (changesMask[26])
{
for (uint32 i = 0; i < ReplayedQuests.size(); ++i)
{
@@ -4655,7 +4716,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[26])
+ if (changesMask[27])
{
for (uint32 i = 0; i < TaskQuests.size(); ++i)
{
@@ -4665,7 +4726,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[27])
+ if (changesMask[28])
{
for (uint32 i = 0; i < DisabledSpells.size(); ++i)
{
@@ -4675,7 +4736,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[30])
+ if (changesMask[31])
{
for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i)
{
@@ -4685,7 +4746,10 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[31])
+ }
+ if (changesMask[32])
+ {
+ if (changesMask[33])
{
for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i)
{
@@ -4695,10 +4759,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- }
- if (changesMask[32])
- {
- if (changesMask[33])
+ if (changesMask[34])
{
for (uint32 i = 0; i < WeeklySpellUses.size(); ++i)
{
@@ -4708,20 +4769,20 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[34])
+ if (changesMask[35])
{
for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i)
{
if (TrackedCollectableSources.HasChanged(i) || ignoreNestedChangesMask)
{
- data << int64(TrackedCollectableSources[i]);
+ TrackedCollectableSources[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
}
if (changesMask[0])
{
- if (changesMask[7])
+ if (changesMask[8])
{
for (uint32 i = 0; i < PvpInfo.size(); ++i)
{
@@ -4731,7 +4792,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[19])
+ if (changesMask[20])
{
for (uint32 i = 0; i < CharacterRestrictions.size(); ++i)
{
@@ -4741,7 +4802,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[28])
+ if (changesMask[29])
{
for (uint32 i = 0; i < TraitConfigs.size(); ++i)
{
@@ -4751,7 +4812,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[29])
+ if (changesMask[30])
{
for (uint32 i = 0; i < CraftingOrders.size(); ++i)
{
@@ -4764,356 +4825,356 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
if (changesMask[32])
{
- if (changesMask[41])
- {
- data << FarsightObject;
- }
if (changesMask[42])
{
- data << SummonedBattlePetGUID;
+ data << FarsightObject;
}
if (changesMask[43])
{
- data << uint64(Coinage);
+ data << SummonedBattlePetGUID;
}
if (changesMask[44])
{
- data << int32(XP);
+ data << uint64(Coinage);
}
if (changesMask[45])
{
- data << int32(NextLevelXP);
+ data << int32(XP);
}
if (changesMask[46])
{
- data << int32(TrialXP);
+ data << int32(NextLevelXP);
}
if (changesMask[47])
{
- Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ data << int32(TrialXP);
}
if (changesMask[48])
{
- data << int32(CharacterPoints);
+ Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
if (changesMask[49])
{
- data << int32(MaxTalentTiers);
+ data << int32(CharacterPoints);
}
if (changesMask[50])
{
- data << uint32(TrackCreatureMask);
+ data << int32(MaxTalentTiers);
}
if (changesMask[51])
{
- data << float(MainhandExpertise);
+ data << uint32(TrackCreatureMask);
}
if (changesMask[52])
{
- data << float(OffhandExpertise);
+ data << float(MainhandExpertise);
}
if (changesMask[53])
{
- data << float(RangedExpertise);
+ data << float(OffhandExpertise);
}
if (changesMask[54])
{
- data << float(CombatRatingExpertise);
+ data << float(RangedExpertise);
}
if (changesMask[55])
{
- data << float(BlockPercentage);
+ data << float(CombatRatingExpertise);
}
if (changesMask[56])
{
- data << float(DodgePercentage);
+ data << float(BlockPercentage);
}
if (changesMask[57])
{
- data << float(DodgePercentageFromAttribute);
+ data << float(DodgePercentage);
}
if (changesMask[58])
{
- data << float(ParryPercentage);
+ data << float(DodgePercentageFromAttribute);
}
if (changesMask[59])
{
- data << float(ParryPercentageFromAttribute);
+ data << float(ParryPercentage);
}
if (changesMask[60])
{
- data << float(CritPercentage);
+ data << float(ParryPercentageFromAttribute);
}
if (changesMask[61])
{
- data << float(RangedCritPercentage);
+ data << float(CritPercentage);
}
if (changesMask[62])
{
- data << float(OffhandCritPercentage);
+ data << float(RangedCritPercentage);
}
if (changesMask[63])
{
- data << float(SpellCritPercentage);
+ data << float(OffhandCritPercentage);
}
if (changesMask[64])
{
- data << int32(ShieldBlock);
+ data << float(SpellCritPercentage);
}
if (changesMask[65])
{
- data << float(ShieldBlockCritPercentage);
+ data << int32(ShieldBlock);
}
if (changesMask[66])
{
- data << float(Mastery);
+ data << float(ShieldBlockCritPercentage);
}
if (changesMask[67])
{
- data << float(Speed);
+ data << float(Mastery);
}
if (changesMask[68])
{
- data << float(Avoidance);
+ data << float(Speed);
}
if (changesMask[69])
{
- data << float(Sturdiness);
+ data << float(Avoidance);
}
}
if (changesMask[70])
{
if (changesMask[71])
{
- data << int32(Versatility);
+ data << float(Sturdiness);
}
if (changesMask[72])
{
- data << float(VersatilityBonus);
+ data << int32(Versatility);
}
if (changesMask[73])
{
- data << float(PvpPowerDamage);
+ data << float(VersatilityBonus);
}
if (changesMask[74])
{
- data << float(PvpPowerHealing);
+ data << float(PvpPowerDamage);
}
if (changesMask[75])
{
- data << int32(ModHealingDonePos);
+ data << float(PvpPowerHealing);
}
if (changesMask[76])
{
- data << float(ModHealingPercent);
+ data << int32(ModHealingDonePos);
}
if (changesMask[77])
{
- data << float(ModPeriodicHealingDonePercent);
+ data << float(ModHealingPercent);
}
if (changesMask[78])
{
- data << float(ModSpellPowerPercent);
+ data << float(ModPeriodicHealingDonePercent);
}
if (changesMask[79])
{
- data << float(ModResiliencePercent);
+ data << float(ModSpellPowerPercent);
}
if (changesMask[80])
{
- data << float(OverrideSpellPowerByAPPercent);
+ data << float(ModResiliencePercent);
}
if (changesMask[81])
{
- data << float(OverrideAPBySpellPowerPercent);
+ data << float(OverrideSpellPowerByAPPercent);
}
if (changesMask[82])
{
- data << int32(ModTargetResistance);
+ data << float(OverrideAPBySpellPowerPercent);
}
if (changesMask[83])
{
- data << int32(ModTargetPhysicalResistance);
+ data << int32(ModTargetResistance);
}
if (changesMask[84])
{
- data << uint32(LocalFlags);
+ data << int32(ModTargetPhysicalResistance);
}
if (changesMask[85])
{
- data << uint8(GrantableLevels);
+ data << uint32(LocalFlags);
}
if (changesMask[86])
{
- data << uint8(MultiActionBars);
+ data << uint8(GrantableLevels);
}
if (changesMask[87])
{
- data << uint8(LifetimeMaxRank);
+ data << uint8(MultiActionBars);
}
if (changesMask[88])
{
- data << uint8(NumRespecs);
+ data << uint8(LifetimeMaxRank);
}
if (changesMask[89])
{
- data << uint32(PvpMedals);
+ data << uint8(NumRespecs);
}
if (changesMask[90])
{
- data << uint16(TodayHonorableKills);
+ data << uint32(PvpMedals);
}
if (changesMask[91])
{
- data << uint16(YesterdayHonorableKills);
+ data << uint16(TodayHonorableKills);
}
if (changesMask[92])
{
- data << uint32(LifetimeHonorableKills);
+ data << uint16(YesterdayHonorableKills);
}
if (changesMask[93])
{
- data << int32(WatchedFactionIndex);
+ data << uint32(LifetimeHonorableKills);
}
if (changesMask[94])
{
- data << int32(MaxLevel);
+ data << int32(WatchedFactionIndex);
}
if (changesMask[95])
{
- data << int32(ScalingPlayerLevelDelta);
+ data << int32(MaxLevel);
}
if (changesMask[96])
{
- data << int32(MaxCreatureScalingLevel);
+ data << int32(ScalingPlayerLevelDelta);
}
if (changesMask[97])
{
- data << int32(PetSpellPower);
+ data << int32(MaxCreatureScalingLevel);
}
if (changesMask[98])
{
- data << float(UiHitModifier);
+ data << int32(PetSpellPower);
}
if (changesMask[99])
{
- data << float(UiSpellHitModifier);
+ data << float(UiHitModifier);
}
if (changesMask[100])
{
- data << int32(HomeRealmTimeOffset);
+ data << float(UiSpellHitModifier);
}
if (changesMask[101])
{
- data << float(ModPetHaste);
+ data << int32(HomeRealmTimeOffset);
}
}
if (changesMask[102])
{
if (changesMask[103])
{
- data << int8(JailersTowerLevelMax);
+ data << float(ModPetHaste);
}
if (changesMask[104])
{
- data << int8(JailersTowerLevel);
+ data << int8(JailersTowerLevelMax);
}
if (changesMask[105])
{
- data << uint8(LocalRegenFlags);
+ data << int8(JailersTowerLevel);
}
if (changesMask[106])
{
- data << uint8(AuraVision);
+ data << uint8(LocalRegenFlags);
}
if (changesMask[107])
{
- data << uint8(NumBackpackSlots);
+ data << uint8(AuraVision);
}
if (changesMask[108])
{
- data << int32(OverrideSpellsID);
+ data << uint8(NumBackpackSlots);
}
if (changesMask[109])
{
- data << uint16(LootSpecID);
+ data << int32(OverrideSpellsID);
}
if (changesMask[110])
{
- data << uint32(OverrideZonePVPType);
+ data << uint16(LootSpecID);
}
if (changesMask[111])
{
- data << BnetAccount;
+ data << uint32(OverrideZonePVPType);
}
if (changesMask[112])
{
- data << uint64(GuildClubMemberID);
+ data << BnetAccount;
}
if (changesMask[113])
{
- data << int32(Honor);
+ data << uint64(GuildClubMemberID);
}
if (changesMask[114])
{
- data << int32(HonorNextLevel);
+ data << int32(Honor);
}
if (changesMask[115])
{
- data << int32(PerksProgramCurrency);
+ data << int32(HonorNextLevel);
}
if (changesMask[116])
{
+ data << int32(PerksProgramCurrency);
+ }
+ if (changesMask[117])
+ {
data << uint8(NumBankSlots);
}
- if (changesMask[121])
+ if (changesMask[122])
{
data << int32(UiChromieTimeExpansionID);
}
- if (changesMask[122])
+ if (changesMask[123])
{
data << int32(TransportServerTime);
}
- if (changesMask[123])
+ if (changesMask[124])
{
data << uint32(WeeklyRewardsPeriodSinceOrigin);
}
- if (changesMask[124])
+ if (changesMask[125])
{
data << int16(DEBUGSoulbindConduitRank);
}
- if (changesMask[126])
+ if (changesMask[127])
{
data << uint32(ActiveCombatTraitConfigID);
}
- if (changesMask[127])
+ if (changesMask[128])
{
data << int32(ItemUpgradeHighOnehandWeaponItemID);
}
- if (changesMask[128])
+ if (changesMask[129])
{
data << int32(ItemUpgradeHighFingerItemID);
}
- if (changesMask[129])
+ if (changesMask[130])
{
data << float(ItemUpgradeHighFingerWatermark);
}
- if (changesMask[130])
+ if (changesMask[131])
{
data << int32(ItemUpgradeHighTrinketItemID);
}
- if (changesMask[131])
+ if (changesMask[132])
{
data << float(ItemUpgradeHighTrinketWatermark);
}
- if (changesMask[132])
+ if (changesMask[133])
{
data << uint64(LootHistoryInstanceID);
}
}
if (changesMask[134])
{
- if (changesMask[135])
+ if (changesMask[136])
{
data << uint8(RequiredMountCapabilityFlags);
}
@@ -5121,32 +5182,41 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
if (changesMask[102])
{
data.WriteBits(QuestSession.has_value(), 1);
+ }
+ if (changesMask[134])
+ {
data.WriteBits(PetStable.has_value(), 1);
- data.FlushBits();
- if (changesMask[117])
+ }
+ data.FlushBits();
+ if (changesMask[102])
+ {
+ if (changesMask[118])
{
ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[119])
+ if (changesMask[120])
{
if (QuestSession.has_value())
{
QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
- if (changesMask[118])
+ if (changesMask[119])
{
data << FrozenPerksVendorItem;
}
- if (changesMask[120])
+ if (changesMask[121])
{
Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
- if (changesMask[125])
+ if (changesMask[126])
{
data << DungeonScore;
}
- if (changesMask[133])
+ }
+ if (changesMask[134])
+ {
+ if (changesMask[135])
{
if (PetStable.has_value())
{
@@ -5154,151 +5224,151 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
}
}
- if (changesMask[136])
+ if (changesMask[137])
{
for (uint32 i = 0; i < 227; ++i)
{
- if (changesMask[137 + i])
+ if (changesMask[138 + i])
{
data << InvSlots[i];
}
}
}
- if (changesMask[364])
+ if (changesMask[365])
{
for (uint32 i = 0; i < 240; ++i)
{
- if (changesMask[365 + i])
+ if (changesMask[366 + i])
{
data << uint64(ExploredZones[i]);
}
}
}
- if (changesMask[605])
+ if (changesMask[606])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[606 + i])
+ if (changesMask[607 + i])
{
RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[608])
+ if (changesMask[609])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[609 + i])
+ if (changesMask[610 + i])
{
data << int32(ModDamageDonePos[i]);
}
- if (changesMask[616 + i])
+ if (changesMask[617 + i])
{
data << int32(ModDamageDoneNeg[i]);
}
- if (changesMask[623 + i])
+ if (changesMask[624 + i])
{
data << float(ModDamageDonePercent[i]);
}
- if (changesMask[630 + i])
+ if (changesMask[631 + i])
{
data << float(ModHealingDonePercent[i]);
}
}
}
- if (changesMask[637])
+ if (changesMask[638])
{
for (uint32 i = 0; i < 3; ++i)
{
- if (changesMask[638 + i])
+ if (changesMask[639 + i])
{
data << float(WeaponDmgMultipliers[i]);
}
- if (changesMask[641 + i])
+ if (changesMask[642 + i])
{
data << float(WeaponAtkSpeedMultipliers[i]);
}
}
}
- if (changesMask[644])
+ if (changesMask[645])
{
for (uint32 i = 0; i < 12; ++i)
{
- if (changesMask[645 + i])
+ if (changesMask[646 + i])
{
data << uint32(BuybackPrice[i]);
}
- if (changesMask[657 + i])
+ if (changesMask[658 + i])
{
data << int64(BuybackTimestamp[i]);
}
}
}
- if (changesMask[669])
+ if (changesMask[670])
{
for (uint32 i = 0; i < 32; ++i)
{
- if (changesMask[670 + i])
+ if (changesMask[671 + i])
{
data << int32(CombatRatings[i]);
}
}
}
- if (changesMask[702])
+ if (changesMask[703])
{
for (uint32 i = 0; i < 4; ++i)
{
- if (changesMask[703 + i])
+ if (changesMask[704 + i])
{
data << uint32(NoReagentCostMask[i]);
}
}
}
- if (changesMask[707])
+ if (changesMask[708])
{
for (uint32 i = 0; i < 2; ++i)
{
- if (changesMask[708 + i])
+ if (changesMask[709 + i])
{
data << int32(ProfessionSkillLine[i]);
}
}
}
- if (changesMask[710])
+ if (changesMask[711])
{
for (uint32 i = 0; i < 5; ++i)
{
- if (changesMask[711 + i])
+ if (changesMask[712 + i])
{
data << uint32(BagSlotFlags[i]);
}
}
}
- if (changesMask[716])
+ if (changesMask[717])
{
for (uint32 i = 0; i < 7; ++i)
{
- if (changesMask[717 + i])
+ if (changesMask[718 + i])
{
data << uint32(BankBagSlotFlags[i]);
}
}
}
- if (changesMask[724])
+ if (changesMask[725])
{
for (uint32 i = 0; i < 875; ++i)
{
- if (changesMask[725 + i])
+ if (changesMask[726 + i])
{
data << uint64(QuestCompleted[i]);
}
}
}
- if (changesMask[1600])
+ if (changesMask[1601])
{
for (uint32 i = 0; i < 17; ++i)
{
- if (changesMask[1601 + i])
+ if (changesMask[1602 + i])
{
data << float(ItemUpgradeHighWatermark[i]);
}
@@ -5310,6 +5380,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
void ActivePlayerData::ClearChangesMask()
{
Base::ClearChangesMask(BackpackAutoSortDisabled);
+ Base::ClearChangesMask(BackpackSellJunkDisabled);
Base::ClearChangesMask(BankAutoSortDisabled);
Base::ClearChangesMask(SortBagsRightToLeft);
Base::ClearChangesMask(InsertItemsLeftToRight);
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index 9d9c3df590f..1b5fe5782ce 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -462,7 +462,7 @@ struct CTROptions : public IsUpdateFieldStructureTag
bool operator!=(CTROptions const& right) const { return !(*this == right); }
};
-struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<261>
+struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<264>
{
UpdateField<bool, 0, 1> HasQuestSession;
UpdateField<bool, 0, 2> HasLevelLink;
@@ -478,32 +478,33 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<261>
UpdateField<uint32, 0, 12> GuildRankID;
UpdateField<uint32, 0, 13> GuildDeleteDate;
UpdateField<int32, 0, 14> GuildLevel;
- UpdateField<uint8, 0, 15> PartyType;
- UpdateField<uint8, 0, 16> NativeSex;
- UpdateField<uint8, 0, 17> Inebriation;
- UpdateField<uint8, 0, 18> PvpTitle;
- UpdateField<uint8, 0, 19> ArenaFaction;
- UpdateField<uint32, 0, 20> DuelTeam;
- UpdateField<int32, 0, 21> GuildTimeStamp;
- UpdateField<int32, 0, 22> PlayerTitle;
- UpdateField<int32, 0, 23> FakeInebriation;
- UpdateField<uint32, 0, 24> VirtualPlayerRealm;
- UpdateField<uint32, 0, 25> CurrentSpecID;
- UpdateField<int32, 0, 26> TaxiMountAnimKitID;
- UpdateField<uint8, 0, 27> CurrentBattlePetBreedQuality;
- UpdateField<int32, 0, 28> HonorLevel;
- UpdateField<int64, 0, 29> LogoutTime;
- UpdateField<int32, 0, 30> Field_B0;
- UpdateField<int32, 0, 31> Field_B4;
- UpdateField<int32, 32, 33> CurrentBattlePetSpeciesID;
+ UpdateField<uint8, 0, 15> NativeSex;
+ UpdateField<uint8, 0, 16> Inebriation;
+ UpdateField<uint8, 0, 17> PvpTitle;
+ UpdateField<uint8, 0, 18> ArenaFaction;
+ UpdateField<uint32, 0, 19> DuelTeam;
+ UpdateField<int32, 0, 20> GuildTimeStamp;
+ UpdateField<int32, 0, 21> PlayerTitle;
+ UpdateField<int32, 0, 22> FakeInebriation;
+ UpdateField<uint32, 0, 23> VirtualPlayerRealm;
+ UpdateField<uint32, 0, 24> CurrentSpecID;
+ UpdateField<int32, 0, 25> TaxiMountAnimKitID;
+ UpdateField<uint8, 0, 26> CurrentBattlePetBreedQuality;
+ UpdateField<int32, 0, 27> HonorLevel;
+ UpdateField<int64, 0, 28> LogoutTime;
+ UpdateField<int32, 0, 29> Field_B0;
+ UpdateField<int32, 0, 30> Field_B4;
+ UpdateField<int32, 0, 31> CurrentBattlePetSpeciesID;
+ UpdateField<ObjectGuid, 32, 33> field_138;
UpdateField<UF::CTROptions, 32, 34> CtrOptions;
UpdateField<int32, 32, 35> CovenantID;
UpdateField<int32, 32, 36> SoulbindID;
UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 37> DungeonScore;
- UpdateFieldArray<UF::QuestLog, 175, 38, 39> QuestLog;
- UpdateFieldArray<UF::VisibleItem, 19, 214, 215> VisibleItems;
- UpdateFieldArray<float, 6, 234, 235> AvgItemLevel;
- UpdateFieldArray<uint32, 19, 241, 242> Field_3120;
+ UpdateFieldArray<uint8, 2, 38, 39> PartyType;
+ UpdateFieldArray<UF::QuestLog, 175, 41, 42> QuestLog;
+ UpdateFieldArray<UF::VisibleItem, 19, 217, 218> VisibleItems;
+ UpdateFieldArray<float, 6, 237, 238> AvgItemLevel;
+ UpdateFieldArray<uint32, 19, 244, 245> Field_3120;
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;
@@ -827,6 +828,17 @@ struct StableInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3>
void ClearChangesMask();
};
+struct CollectableSourceTrackedData : public IsUpdateFieldStructureTag, public HasChangesMask<4>
+{
+ UpdateField<int32, 0, 1> TargetType;
+ UpdateField<int32, 0, 2> TargetID;
+ UpdateField<int32, 0, 3> CollectableSourceInfoID;
+
+ void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
struct Research : public IsUpdateFieldStructureTag
{
int16 ResearchProjectID;
@@ -837,154 +849,155 @@ struct Research : public IsUpdateFieldStructureTag
bool operator!=(Research const& right) const { return !(*this == right); }
};
-struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1618>
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1619>
{
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
- UpdateField<bool, 0, 2> BankAutoSortDisabled;
- UpdateField<bool, 0, 3> SortBagsRightToLeft;
- UpdateField<bool, 0, 4> InsertItemsLeftToRight;
- UpdateField<bool, 0, 5> HasPerksProgramPendingReward;
- UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 35, 36> ResearchSites;
- UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 37, 38> ResearchSiteProgress;
- UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 39, 40> Research;
- DynamicUpdateField<uint64, 0, 6> KnownTitles;
- DynamicUpdateField<int32, 0, 8> DailyQuestsCompleted;
- DynamicUpdateField<int32, 0, 9> AvailableQuestLineXQuestIDs;
- DynamicUpdateField<int32, 0, 10> Heirlooms;
- DynamicUpdateField<uint32, 0, 11> HeirloomFlags;
- DynamicUpdateField<int32, 0, 12> Toys;
- DynamicUpdateField<uint32, 0, 13> ToyFlags;
- DynamicUpdateField<uint32, 0, 14> Transmog;
- DynamicUpdateField<int32, 0, 15> ConditionalTransmog;
- DynamicUpdateField<int32, 0, 16> SelfResSpells;
- DynamicUpdateField<uint32, 0, 17> RuneforgePowers;
- DynamicUpdateField<uint32, 0, 18> TransmogIllusions;
- DynamicUpdateField<UF::SpellPctModByLabel, 0, 20> SpellPctModByLabel;
- DynamicUpdateField<UF::SpellFlatModByLabel, 0, 21> SpellFlatModByLabel;
- DynamicUpdateField<UF::MawPower, 0, 22> MawPowers;
- DynamicUpdateField<UF::MultiFloorExplore, 0, 23> MultiFloorExploration;
- DynamicUpdateField<UF::RecipeProgressionInfo, 0, 24> RecipeProgression;
- DynamicUpdateField<UF::ReplayedQuest, 0, 25> ReplayedQuests;
- DynamicUpdateField<UF::QuestLog, 0, 26> TaskQuests;
- DynamicUpdateField<int32, 0, 27> DisabledSpells;
- DynamicUpdateField<UF::PersonalCraftingOrderCount, 0, 30> PersonalCraftingOrderCounts;
- DynamicUpdateField<UF::CategoryCooldownMod, 0, 31> CategoryCooldownMods;
- DynamicUpdateField<UF::WeeklySpellUse, 32, 33> WeeklySpellUses;
- DynamicUpdateField<int64, 32, 34> TrackedCollectableSources;
- DynamicUpdateField<UF::PVPInfo, 0, 7> PvpInfo;
- DynamicUpdateField<UF::CharacterRestriction, 0, 19> CharacterRestrictions;
- DynamicUpdateField<UF::TraitConfig, 0, 28> TraitConfigs;
- DynamicUpdateField<UF::CraftingOrder, 0, 29> CraftingOrders;
- UpdateField<ObjectGuid, 32, 41> FarsightObject;
- UpdateField<ObjectGuid, 32, 42> SummonedBattlePetGUID;
- UpdateField<uint64, 32, 43> Coinage;
- UpdateField<int32, 32, 44> XP;
- UpdateField<int32, 32, 45> NextLevelXP;
- UpdateField<int32, 32, 46> TrialXP;
- UpdateField<UF::SkillInfo, 32, 47> Skill;
- UpdateField<int32, 32, 48> CharacterPoints;
- UpdateField<int32, 32, 49> MaxTalentTiers;
- UpdateField<uint32, 32, 50> TrackCreatureMask;
- UpdateField<float, 32, 51> MainhandExpertise;
- UpdateField<float, 32, 52> OffhandExpertise;
- UpdateField<float, 32, 53> RangedExpertise;
- UpdateField<float, 32, 54> CombatRatingExpertise;
- UpdateField<float, 32, 55> BlockPercentage;
- UpdateField<float, 32, 56> DodgePercentage;
- UpdateField<float, 32, 57> DodgePercentageFromAttribute;
- UpdateField<float, 32, 58> ParryPercentage;
- UpdateField<float, 32, 59> ParryPercentageFromAttribute;
- UpdateField<float, 32, 60> CritPercentage;
- UpdateField<float, 32, 61> RangedCritPercentage;
- UpdateField<float, 32, 62> OffhandCritPercentage;
- UpdateField<float, 32, 63> SpellCritPercentage;
- UpdateField<int32, 32, 64> ShieldBlock;
- UpdateField<float, 32, 65> ShieldBlockCritPercentage;
- UpdateField<float, 32, 66> Mastery;
- UpdateField<float, 32, 67> Speed;
- UpdateField<float, 32, 68> Avoidance;
- UpdateField<float, 32, 69> Sturdiness;
- UpdateField<int32, 70, 71> Versatility;
- UpdateField<float, 70, 72> VersatilityBonus;
- UpdateField<float, 70, 73> PvpPowerDamage;
- UpdateField<float, 70, 74> PvpPowerHealing;
- UpdateField<int32, 70, 75> ModHealingDonePos;
- UpdateField<float, 70, 76> ModHealingPercent;
- UpdateField<float, 70, 77> ModPeriodicHealingDonePercent;
- UpdateField<float, 70, 78> ModSpellPowerPercent;
- UpdateField<float, 70, 79> ModResiliencePercent;
- UpdateField<float, 70, 80> OverrideSpellPowerByAPPercent;
- UpdateField<float, 70, 81> OverrideAPBySpellPowerPercent;
- UpdateField<int32, 70, 82> ModTargetResistance;
- UpdateField<int32, 70, 83> ModTargetPhysicalResistance;
- UpdateField<uint32, 70, 84> LocalFlags;
- UpdateField<uint8, 70, 85> GrantableLevels;
- UpdateField<uint8, 70, 86> MultiActionBars;
- UpdateField<uint8, 70, 87> LifetimeMaxRank;
- UpdateField<uint8, 70, 88> NumRespecs;
- UpdateField<uint32, 70, 89> PvpMedals;
- UpdateField<uint16, 70, 90> TodayHonorableKills;
- UpdateField<uint16, 70, 91> YesterdayHonorableKills;
- UpdateField<uint32, 70, 92> LifetimeHonorableKills;
- UpdateField<int32, 70, 93> WatchedFactionIndex;
- UpdateField<int32, 70, 94> MaxLevel;
- UpdateField<int32, 70, 95> ScalingPlayerLevelDelta;
- UpdateField<int32, 70, 96> MaxCreatureScalingLevel;
- UpdateField<int32, 70, 97> PetSpellPower;
- UpdateField<float, 70, 98> UiHitModifier;
- UpdateField<float, 70, 99> UiSpellHitModifier;
- UpdateField<int32, 70, 100> HomeRealmTimeOffset;
- UpdateField<float, 70, 101> ModPetHaste;
- UpdateField<int8, 102, 103> JailersTowerLevelMax;
- UpdateField<int8, 102, 104> JailersTowerLevel;
- UpdateField<uint8, 102, 105> LocalRegenFlags;
- UpdateField<uint8, 102, 106> AuraVision;
- UpdateField<uint8, 102, 107> NumBackpackSlots;
- UpdateField<int32, 102, 108> OverrideSpellsID;
- UpdateField<uint16, 102, 109> LootSpecID;
- UpdateField<uint32, 102, 110> OverrideZonePVPType;
- UpdateField<ObjectGuid, 102, 111> BnetAccount;
- UpdateField<uint64, 102, 112> GuildClubMemberID;
- UpdateField<int32, 102, 113> Honor;
- UpdateField<int32, 102, 114> HonorNextLevel;
- UpdateField<int32, 102, 115> PerksProgramCurrency;
- UpdateField<uint8, 102, 116> NumBankSlots;
- UpdateField<UF::ResearchHistory, 102, 117> ResearchHistory;
- UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 118> FrozenPerksVendorItem;
- UpdateField<UF::ActivePlayerUnk901, 102, 120> Field_1410;
- OptionalUpdateField<UF::QuestSession, 102, 119> QuestSession;
- UpdateField<int32, 102, 121> UiChromieTimeExpansionID;
- UpdateField<int32, 102, 122> TransportServerTime;
- UpdateField<uint32, 102, 123> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
- UpdateField<int16, 102, 124> DEBUGSoulbindConduitRank;
- UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 125> DungeonScore;
- UpdateField<uint32, 102, 126> ActiveCombatTraitConfigID;
- UpdateField<int32, 102, 127> ItemUpgradeHighOnehandWeaponItemID;
- UpdateField<int32, 102, 128> ItemUpgradeHighFingerItemID;
- UpdateField<float, 102, 129> ItemUpgradeHighFingerWatermark;
- UpdateField<int32, 102, 130> ItemUpgradeHighTrinketItemID;
- UpdateField<float, 102, 131> ItemUpgradeHighTrinketWatermark;
- UpdateField<uint64, 102, 132> LootHistoryInstanceID;
- OptionalUpdateField<UF::StableInfo, 102, 133> PetStable;
- UpdateField<uint8, 134, 135> RequiredMountCapabilityFlags;
- UpdateFieldArray<ObjectGuid, 227, 136, 137> InvSlots;
- UpdateFieldArray<uint64, 240, 364, 365> ExploredZones;
- UpdateFieldArray<UF::RestInfo, 2, 605, 606> RestInfo;
- UpdateFieldArray<int32, 7, 608, 609> ModDamageDonePos;
- UpdateFieldArray<int32, 7, 608, 616> ModDamageDoneNeg;
- UpdateFieldArray<float, 7, 608, 623> ModDamageDonePercent;
- UpdateFieldArray<float, 7, 608, 630> ModHealingDonePercent;
- UpdateFieldArray<float, 3, 637, 638> WeaponDmgMultipliers;
- UpdateFieldArray<float, 3, 637, 641> WeaponAtkSpeedMultipliers;
- UpdateFieldArray<uint32, 12, 644, 645> BuybackPrice;
- UpdateFieldArray<int64, 12, 644, 657> BuybackTimestamp;
- UpdateFieldArray<int32, 32, 669, 670> CombatRatings;
- UpdateFieldArray<uint32, 4, 702, 703> NoReagentCostMask;
- UpdateFieldArray<int32, 2, 707, 708> ProfessionSkillLine;
- UpdateFieldArray<uint32, 5, 710, 711> BagSlotFlags;
- UpdateFieldArray<uint32, 7, 716, 717> BankBagSlotFlags;
- UpdateFieldArray<uint64, 875, 724, 725> QuestCompleted;
- UpdateFieldArray<float, 17, 1600, 1601> ItemUpgradeHighWatermark;
+ UpdateField<bool, 0, 2> BackpackSellJunkDisabled;
+ UpdateField<bool, 0, 3> BankAutoSortDisabled;
+ UpdateField<bool, 0, 4> SortBagsRightToLeft;
+ UpdateField<bool, 0, 5> InsertItemsLeftToRight;
+ UpdateField<bool, 0, 6> HasPerksProgramPendingReward;
+ UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 36, 37> ResearchSites;
+ UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 38, 39> ResearchSiteProgress;
+ UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 40, 41> Research;
+ DynamicUpdateField<uint64, 0, 7> KnownTitles;
+ DynamicUpdateField<int32, 0, 9> DailyQuestsCompleted;
+ DynamicUpdateField<int32, 0, 10> AvailableQuestLineXQuestIDs;
+ DynamicUpdateField<int32, 0, 11> Heirlooms;
+ DynamicUpdateField<uint32, 0, 12> HeirloomFlags;
+ DynamicUpdateField<int32, 0, 13> Toys;
+ DynamicUpdateField<uint32, 0, 14> ToyFlags;
+ DynamicUpdateField<uint32, 0, 15> Transmog;
+ DynamicUpdateField<int32, 0, 16> ConditionalTransmog;
+ DynamicUpdateField<int32, 0, 17> SelfResSpells;
+ DynamicUpdateField<uint32, 0, 18> RuneforgePowers;
+ DynamicUpdateField<uint32, 0, 19> TransmogIllusions;
+ DynamicUpdateField<UF::SpellPctModByLabel, 0, 21> SpellPctModByLabel;
+ DynamicUpdateField<UF::SpellFlatModByLabel, 0, 22> SpellFlatModByLabel;
+ DynamicUpdateField<UF::MawPower, 0, 23> MawPowers;
+ DynamicUpdateField<UF::MultiFloorExplore, 0, 24> MultiFloorExploration;
+ DynamicUpdateField<UF::RecipeProgressionInfo, 0, 25> RecipeProgression;
+ DynamicUpdateField<UF::ReplayedQuest, 0, 26> ReplayedQuests;
+ DynamicUpdateField<UF::QuestLog, 0, 27> TaskQuests;
+ DynamicUpdateField<int32, 0, 28> DisabledSpells;
+ DynamicUpdateField<UF::PersonalCraftingOrderCount, 0, 31> PersonalCraftingOrderCounts;
+ DynamicUpdateField<UF::CategoryCooldownMod, 32, 33> CategoryCooldownMods;
+ DynamicUpdateField<UF::WeeklySpellUse, 32, 34> WeeklySpellUses;
+ DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 35> TrackedCollectableSources;
+ DynamicUpdateField<UF::PVPInfo, 0, 8> PvpInfo;
+ DynamicUpdateField<UF::CharacterRestriction, 0, 20> CharacterRestrictions;
+ DynamicUpdateField<UF::TraitConfig, 0, 29> TraitConfigs;
+ DynamicUpdateField<UF::CraftingOrder, 0, 30> CraftingOrders;
+ UpdateField<ObjectGuid, 32, 42> FarsightObject;
+ UpdateField<ObjectGuid, 32, 43> SummonedBattlePetGUID;
+ UpdateField<uint64, 32, 44> Coinage;
+ UpdateField<int32, 32, 45> XP;
+ UpdateField<int32, 32, 46> NextLevelXP;
+ UpdateField<int32, 32, 47> TrialXP;
+ UpdateField<UF::SkillInfo, 32, 48> Skill;
+ UpdateField<int32, 32, 49> CharacterPoints;
+ UpdateField<int32, 32, 50> MaxTalentTiers;
+ UpdateField<uint32, 32, 51> TrackCreatureMask;
+ UpdateField<float, 32, 52> MainhandExpertise;
+ UpdateField<float, 32, 53> OffhandExpertise;
+ UpdateField<float, 32, 54> RangedExpertise;
+ UpdateField<float, 32, 55> CombatRatingExpertise;
+ UpdateField<float, 32, 56> BlockPercentage;
+ UpdateField<float, 32, 57> DodgePercentage;
+ UpdateField<float, 32, 58> DodgePercentageFromAttribute;
+ UpdateField<float, 32, 59> ParryPercentage;
+ UpdateField<float, 32, 60> ParryPercentageFromAttribute;
+ UpdateField<float, 32, 61> CritPercentage;
+ UpdateField<float, 32, 62> RangedCritPercentage;
+ UpdateField<float, 32, 63> OffhandCritPercentage;
+ UpdateField<float, 32, 64> SpellCritPercentage;
+ UpdateField<int32, 32, 65> ShieldBlock;
+ UpdateField<float, 32, 66> ShieldBlockCritPercentage;
+ UpdateField<float, 32, 67> Mastery;
+ UpdateField<float, 32, 68> Speed;
+ UpdateField<float, 32, 69> Avoidance;
+ UpdateField<float, 70, 71> Sturdiness;
+ UpdateField<int32, 70, 72> Versatility;
+ UpdateField<float, 70, 73> VersatilityBonus;
+ UpdateField<float, 70, 74> PvpPowerDamage;
+ UpdateField<float, 70, 75> PvpPowerHealing;
+ UpdateField<int32, 70, 76> ModHealingDonePos;
+ UpdateField<float, 70, 77> ModHealingPercent;
+ UpdateField<float, 70, 78> ModPeriodicHealingDonePercent;
+ UpdateField<float, 70, 79> ModSpellPowerPercent;
+ UpdateField<float, 70, 80> ModResiliencePercent;
+ UpdateField<float, 70, 81> OverrideSpellPowerByAPPercent;
+ UpdateField<float, 70, 82> OverrideAPBySpellPowerPercent;
+ UpdateField<int32, 70, 83> ModTargetResistance;
+ UpdateField<int32, 70, 84> ModTargetPhysicalResistance;
+ UpdateField<uint32, 70, 85> LocalFlags;
+ UpdateField<uint8, 70, 86> GrantableLevels;
+ UpdateField<uint8, 70, 87> MultiActionBars;
+ UpdateField<uint8, 70, 88> LifetimeMaxRank;
+ UpdateField<uint8, 70, 89> NumRespecs;
+ UpdateField<uint32, 70, 90> PvpMedals;
+ UpdateField<uint16, 70, 91> TodayHonorableKills;
+ UpdateField<uint16, 70, 92> YesterdayHonorableKills;
+ UpdateField<uint32, 70, 93> LifetimeHonorableKills;
+ UpdateField<int32, 70, 94> WatchedFactionIndex;
+ UpdateField<int32, 70, 95> MaxLevel;
+ UpdateField<int32, 70, 96> ScalingPlayerLevelDelta;
+ UpdateField<int32, 70, 97> MaxCreatureScalingLevel;
+ UpdateField<int32, 70, 98> PetSpellPower;
+ UpdateField<float, 70, 99> UiHitModifier;
+ UpdateField<float, 70, 100> UiSpellHitModifier;
+ UpdateField<int32, 70, 101> HomeRealmTimeOffset;
+ UpdateField<float, 102, 103> ModPetHaste;
+ UpdateField<int8, 102, 104> JailersTowerLevelMax;
+ UpdateField<int8, 102, 105> JailersTowerLevel;
+ UpdateField<uint8, 102, 106> LocalRegenFlags;
+ UpdateField<uint8, 102, 107> AuraVision;
+ UpdateField<uint8, 102, 108> NumBackpackSlots;
+ UpdateField<int32, 102, 109> OverrideSpellsID;
+ UpdateField<uint16, 102, 110> LootSpecID;
+ UpdateField<uint32, 102, 111> OverrideZonePVPType;
+ UpdateField<ObjectGuid, 102, 112> BnetAccount;
+ UpdateField<uint64, 102, 113> GuildClubMemberID;
+ UpdateField<int32, 102, 114> Honor;
+ UpdateField<int32, 102, 115> HonorNextLevel;
+ UpdateField<int32, 102, 116> PerksProgramCurrency;
+ UpdateField<uint8, 102, 117> NumBankSlots;
+ UpdateField<UF::ResearchHistory, 102, 118> ResearchHistory;
+ UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 119> FrozenPerksVendorItem;
+ UpdateField<UF::ActivePlayerUnk901, 102, 121> Field_1410;
+ OptionalUpdateField<UF::QuestSession, 102, 120> QuestSession;
+ UpdateField<int32, 102, 122> UiChromieTimeExpansionID;
+ UpdateField<int32, 102, 123> TransportServerTime;
+ UpdateField<uint32, 102, 124> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin
+ UpdateField<int16, 102, 125> DEBUGSoulbindConduitRank;
+ UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 126> DungeonScore;
+ UpdateField<uint32, 102, 127> ActiveCombatTraitConfigID;
+ UpdateField<int32, 102, 128> ItemUpgradeHighOnehandWeaponItemID;
+ UpdateField<int32, 102, 129> ItemUpgradeHighFingerItemID;
+ UpdateField<float, 102, 130> ItemUpgradeHighFingerWatermark;
+ UpdateField<int32, 102, 131> ItemUpgradeHighTrinketItemID;
+ UpdateField<float, 102, 132> ItemUpgradeHighTrinketWatermark;
+ UpdateField<uint64, 102, 133> LootHistoryInstanceID;
+ OptionalUpdateField<UF::StableInfo, 134, 135> PetStable;
+ UpdateField<uint8, 134, 136> RequiredMountCapabilityFlags;
+ UpdateFieldArray<ObjectGuid, 227, 137, 138> InvSlots;
+ UpdateFieldArray<uint64, 240, 365, 366> ExploredZones;
+ UpdateFieldArray<UF::RestInfo, 2, 606, 607> RestInfo;
+ UpdateFieldArray<int32, 7, 609, 610> ModDamageDonePos;
+ UpdateFieldArray<int32, 7, 609, 617> ModDamageDoneNeg;
+ UpdateFieldArray<float, 7, 609, 624> ModDamageDonePercent;
+ UpdateFieldArray<float, 7, 609, 631> ModHealingDonePercent;
+ UpdateFieldArray<float, 3, 638, 639> WeaponDmgMultipliers;
+ UpdateFieldArray<float, 3, 638, 642> WeaponAtkSpeedMultipliers;
+ UpdateFieldArray<uint32, 12, 645, 646> BuybackPrice;
+ UpdateFieldArray<int64, 12, 645, 658> BuybackTimestamp;
+ UpdateFieldArray<int32, 32, 670, 671> CombatRatings;
+ UpdateFieldArray<uint32, 4, 703, 704> NoReagentCostMask;
+ UpdateFieldArray<int32, 2, 708, 709> ProfessionSkillLine;
+ UpdateFieldArray<uint32, 5, 711, 712> BagSlotFlags;
+ UpdateFieldArray<uint32, 7, 717, 718> BankBagSlotFlags;
+ UpdateFieldArray<uint64, 875, 725, 726> QuestCompleted;
+ UpdateFieldArray<float, 17, 1601, 1602> 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;