aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-02-16 15:57:49 +0100
committerShauren <shauren.trinity@gmail.com>2020-02-17 23:58:08 +0100
commit462a10de17003631957b69e578e7e4c55ed1ef61 (patch)
tree7ac4887e5fecfab660c34f34dca0648a4b822e82 /src/server/game/Entities/Object
parent38cc011af04ebc7edff74f1ed4edfde9d1d77e0b (diff)
Core/PacketIO: Updated packets to 8.3.0
Diffstat (limited to 'src/server/game/Entities/Object')
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp130
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h77
2 files changed, 107 insertions, 100 deletions
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
index 3b78a448089..56bade88f2d 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -518,7 +518,7 @@ void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, AzeriteItem const* ow
void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const
{
- for (std::size_t i = 0; i < 3; ++i)
+ for (std::size_t i = 0; i < 4; ++i)
{
data << uint32(AzeriteEssenceID[i]);
}
@@ -529,7 +529,7 @@ void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, AzeriteItem const* o
void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const
{
- UpdateMask<7> const& changesMask = _changesMask;
+ UpdateMask<8> const& changesMask = _changesMask;
data.WriteBits(changesMask.GetBlocksMask(0), 1);
if (changesMask.GetBlock(0))
data.WriteBits(changesMask.GetBlock(0), 32);
@@ -548,7 +548,7 @@ void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, AzeriteItem const* o
}
if (changesMask[3])
{
- for (std::size_t i = 0; i < 3; ++i)
+ for (std::size_t i = 0; i < 4; ++i)
{
if (changesMask[4 + i])
{
@@ -938,6 +938,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
data << uint32(PassiveSpells.size());
data << uint32(WorldEffects.size());
data << uint32(ChannelObjects.size());
+ data << SkinningOwnerGUID;
for (std::size_t i = 0; i < PassiveSpells.size(); ++i)
{
PassiveSpells[i].WriteCreate(data, owner, receiver);
@@ -954,22 +955,22 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel
void UnitData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
{
- UpdateMask<191> allowedMaskForTarget({ 0xFFFFEFFFu, 0xFC3FBFFFu, 0x0001EFFFu, 0xFFDFFFF9u, 0x001FC003u, 0x00000000u });
+ UpdateMask<192> allowedMaskForTarget({ 0xFFFFEFFFu, 0xFC3FBFFFu, 0x0001EFFFu, 0xFFBFFFF9u, 0x003F8007u, 0x00000000u });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver);
}
-void UnitData::AppendAllowedFieldsMaskForFlag(UpdateMask<191>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
+void UnitData::AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const
{
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner))
- allowedMaskForTarget |= { 0x00001000u, 0x03C04000u, 0xFFFE1000u, 0x00200006u, 0xFFE03FFCu, 0x7FFFFFFFu };
+ allowedMaskForTarget |= { 0x00001000u, 0x03C04000u, 0xFFFE1000u, 0x00400006u, 0xFFC07FF8u, 0xFFFFFFFFu };
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll))
- allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x00200000u, 0x00003FFCu, 0x00000000u };
+ allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x00400000u, 0x00007FF8u, 0x00000000u };
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
- allowedMaskForTarget |= { 0x00000000u, 0x03C00000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000003FCu };
+ allowedMaskForTarget |= { 0x00000000u, 0x03C00000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000007F8u };
}
-void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
+void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<192> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const
{
data.WriteBits(changesMask.GetBlocksMask(0), 6);
for (std::size_t i = 0; i < 6; ++i)
@@ -1469,94 +1470,98 @@ void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask,
{
data << GuildGUID;
}
+ if (changesMask[114])
+ {
+ data << SkinningOwnerGUID;
+ }
}
- if (changesMask[114])
+ if (changesMask[115])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[115 + i])
+ if (changesMask[116 + i])
{
data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(NpcFlags[i], i, owner, receiver));
}
}
}
- if (changesMask[117])
+ if (changesMask[118])
{
for (std::size_t i = 0; i < 6; ++i)
{
- if (changesMask[118 + i])
+ if (changesMask[119 + i])
{
data << int32(Power[i]);
}
- if (changesMask[124 + i])
+ if (changesMask[125 + i])
{
data << int32(MaxPower[i]);
}
- if (changesMask[130 + i])
+ if (changesMask[131 + i])
{
data << float(PowerRegenFlatModifier[i]);
}
- if (changesMask[136 + i])
+ if (changesMask[137 + i])
{
data << float(PowerRegenInterruptedFlatModifier[i]);
}
}
}
- if (changesMask[142])
+ if (changesMask[143])
{
for (std::size_t i = 0; i < 3; ++i)
{
- if (changesMask[143 + i])
+ if (changesMask[144 + i])
{
VirtualItems[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[146])
+ if (changesMask[147])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[147 + i])
+ if (changesMask[148 + i])
{
data << uint32(AttackRoundBaseTime[i]);
}
}
}
- if (changesMask[149])
+ if (changesMask[150])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[150 + i])
+ if (changesMask[151 + i])
{
data << int32(Stats[i]);
}
- if (changesMask[154 + i])
+ if (changesMask[155 + i])
{
data << int32(StatPosBuff[i]);
}
- if (changesMask[158 + i])
+ if (changesMask[159 + i])
{
data << int32(StatNegBuff[i]);
}
}
}
- if (changesMask[162])
+ if (changesMask[163])
{
for (std::size_t i = 0; i < 7; ++i)
{
- if (changesMask[163 + i])
+ if (changesMask[164 + i])
{
data << int32(Resistances[i]);
}
- if (changesMask[170 + i])
+ if (changesMask[171 + i])
{
data << int32(BonusResistanceMods[i]);
}
- if (changesMask[177 + i])
+ if (changesMask[178 + i])
{
data << int32(PowerCostModifier[i]);
}
- if (changesMask[184 + i])
+ if (changesMask[185 + i])
{
data << float(PowerCostMultiplier[i]);
}
@@ -1676,6 +1681,7 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(LookAtControllerID);
Base::ClearChangesMask(TaxiNodesID);
Base::ClearChangesMask(GuildGUID);
+ Base::ClearChangesMask(SkinningOwnerGUID);
Base::ClearChangesMask(NpcFlags);
Base::ClearChangesMask(Power);
Base::ClearChangesMask(MaxPower);
@@ -2494,7 +2500,7 @@ void QuestSession::ClearChangesMask()
void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- for (std::size_t i = 0; i < 195; ++i)
+ for (std::size_t i = 0; i < 199; ++i)
{
data << InvSlots[i];
}
@@ -2737,7 +2743,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const
{
- UpdateMask<1490> const& changesMask = _changesMask;
+ UpdateMask<1494> const& changesMask = _changesMask;
for (std::size_t i = 0; i < 1; ++i)
data << uint32(changesMask.GetBlocksMask(i));
data.WriteBits(changesMask.GetBlocksMask(1), 15);
@@ -3363,7 +3369,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
}
if (changesMask[104])
{
- for (std::size_t i = 0; i < 195; ++i)
+ for (std::size_t i = 0; i < 199; ++i)
{
if (changesMask[105 + i])
{
@@ -3371,147 +3377,147 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl
}
}
}
- if (changesMask[300])
+ if (changesMask[304])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[301 + i])
+ if (changesMask[305 + i])
{
data << uint32(TrackResourceMask[i]);
}
}
}
- if (changesMask[303])
+ if (changesMask[307])
{
for (std::size_t i = 0; i < 192; ++i)
{
- if (changesMask[304 + i])
+ if (changesMask[308 + i])
{
data << uint64(ExploredZones[i]);
}
}
}
- if (changesMask[496])
+ if (changesMask[500])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[497 + i])
+ if (changesMask[501 + i])
{
RestInfo[i].WriteUpdate(data, owner, receiver);
}
}
}
- if (changesMask[499])
+ if (changesMask[503])
{
for (std::size_t i = 0; i < 7; ++i)
{
- if (changesMask[500 + i])
+ if (changesMask[504 + i])
{
data << int32(ModDamageDonePos[i]);
}
- if (changesMask[507 + i])
+ if (changesMask[511 + i])
{
data << int32(ModDamageDoneNeg[i]);
}
- if (changesMask[514 + i])
+ if (changesMask[518 + i])
{
data << float(ModDamageDonePercent[i]);
}
}
}
- if (changesMask[521])
+ if (changesMask[525])
{
for (std::size_t i = 0; i < 3; ++i)
{
- if (changesMask[522 + i])
+ if (changesMask[526 + i])
{
data << float(WeaponDmgMultipliers[i]);
}
- if (changesMask[525 + i])
+ if (changesMask[529 + i])
{
data << float(WeaponAtkSpeedMultipliers[i]);
}
}
}
- if (changesMask[528])
+ if (changesMask[532])
{
for (std::size_t i = 0; i < 12; ++i)
{
- if (changesMask[529 + i])
+ if (changesMask[533 + i])
{
data << uint32(BuybackPrice[i]);
}
- if (changesMask[541 + i])
+ if (changesMask[545 + i])
{
data << uint32(BuybackTimestamp[i]);
}
}
}
- if (changesMask[553])
+ if (changesMask[557])
{
for (std::size_t i = 0; i < 32; ++i)
{
- if (changesMask[554 + i])
+ if (changesMask[558 + i])
{
data << int32(CombatRatings[i]);
}
}
}
- if (changesMask[593])
+ if (changesMask[597])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[594 + i])
+ if (changesMask[598 + i])
{
data << uint32(NoReagentCostMask[i]);
}
}
}
- if (changesMask[598])
+ if (changesMask[602])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[599 + i])
+ if (changesMask[603 + i])
{
data << int32(ProfessionSkillLine[i]);
}
}
}
- if (changesMask[601])
+ if (changesMask[605])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[602 + i])
+ if (changesMask[606 + i])
{
data << uint32(BagSlotFlags[i]);
}
}
}
- if (changesMask[606])
+ if (changesMask[610])
{
for (std::size_t i = 0; i < 7; ++i)
{
- if (changesMask[607 + i])
+ if (changesMask[611 + i])
{
data << uint32(BankBagSlotFlags[i]);
}
}
}
- if (changesMask[614])
+ if (changesMask[618])
{
for (std::size_t i = 0; i < 875; ++i)
{
- if (changesMask[615 + i])
+ if (changesMask[619 + i])
{
data << uint64(QuestCompleted[i]);
}
}
}
- if (changesMask[586])
+ if (changesMask[590])
{
for (std::size_t i = 0; i < 6; ++i)
{
- if (changesMask[587 + i])
+ if (changesMask[591 + i])
{
PvpInfo[i].WriteUpdate(data, owner, receiver);
}
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index b31751eb061..0335b90b4ac 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -145,11 +145,11 @@ struct UnlockedAzeriteEssence : public IsUpdateFieldStructureTag
void WriteUpdate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const;
};
-struct SelectedAzeriteEssences : public IsUpdateFieldStructureTag, public HasChangesMask<7>
+struct SelectedAzeriteEssences : public IsUpdateFieldStructureTag, public HasChangesMask<8>
{
UpdateField<uint32, 0, 1> SpecializationID;
UpdateField<uint32, 0, 2> Enabled;
- UpdateFieldArray<uint32, 3, 3, 4> AzeriteEssenceID;
+ UpdateFieldArray<uint32, 4, 3, 4> AzeriteEssenceID;
void WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const;
@@ -203,7 +203,7 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag
void WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const;
};
-struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191>
+struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<192>
{
UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs;
DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells;
@@ -320,26 +320,27 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191>
UpdateField<int32, 96, 111> LookAtControllerID;
UpdateField<int32, 96, 112> TaxiNodesID;
UpdateField<ObjectGuid, 96, 113> GuildGUID;
- UpdateFieldArray<uint32, 2, 114, 115> NpcFlags;
+ UpdateField<ObjectGuid, 96, 114> SkinningOwnerGUID;
+ UpdateFieldArray<uint32, 2, 115, 116> NpcFlags;
struct NpcFlagsTag : ViewerDependentValueTag<uint32> {};
- UpdateFieldArray<int32, 6, 117, 118> Power;
- UpdateFieldArray<int32, 6, 117, 124> MaxPower;
- UpdateFieldArray<float, 6, 117, 130> PowerRegenFlatModifier;
- UpdateFieldArray<float, 6, 117, 136> PowerRegenInterruptedFlatModifier;
- UpdateFieldArray<UF::VisibleItem, 3, 142, 143> VirtualItems;
- UpdateFieldArray<uint32, 2, 146, 147> AttackRoundBaseTime;
- UpdateFieldArray<int32, 4, 149, 150> Stats;
- UpdateFieldArray<int32, 4, 149, 154> StatPosBuff;
- UpdateFieldArray<int32, 4, 149, 158> StatNegBuff;
- UpdateFieldArray<int32, 7, 162, 163> Resistances;
- UpdateFieldArray<int32, 7, 162, 170> BonusResistanceMods;
- UpdateFieldArray<int32, 7, 162, 177> PowerCostModifier;
- UpdateFieldArray<float, 7, 162, 184> PowerCostMultiplier;
+ UpdateFieldArray<int32, 6, 118, 119> Power;
+ UpdateFieldArray<int32, 6, 118, 125> MaxPower;
+ UpdateFieldArray<float, 6, 118, 131> PowerRegenFlatModifier;
+ UpdateFieldArray<float, 6, 118, 137> PowerRegenInterruptedFlatModifier;
+ UpdateFieldArray<UF::VisibleItem, 3, 143, 144> VirtualItems;
+ UpdateFieldArray<uint32, 2, 147, 148> AttackRoundBaseTime;
+ UpdateFieldArray<int32, 4, 150, 151> Stats;
+ UpdateFieldArray<int32, 4, 150, 155> StatPosBuff;
+ UpdateFieldArray<int32, 4, 150, 159> StatNegBuff;
+ UpdateFieldArray<int32, 7, 163, 164> Resistances;
+ UpdateFieldArray<int32, 7, 163, 171> BonusResistanceMods;
+ UpdateFieldArray<int32, 7, 163, 178> PowerCostModifier;
+ UpdateFieldArray<float, 7, 163, 185> PowerCostMultiplier;
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
- void AppendAllowedFieldsMaskForFlag(UpdateMask<191>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
- void WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
+ void AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const;
+ void WriteUpdate(ByteBuffer& data, UpdateMask<192> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const;
void ClearChangesMask();
};
@@ -523,7 +524,7 @@ struct QuestSession : public IsUpdateFieldStructureTag, public HasChangesMask<87
void ClearChangesMask();
};
-struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1490>
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1494>
{
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
UpdateField<bool, 0, 2> BankAutoSortDisabled;
@@ -624,24 +625,24 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
UpdateField<int32, 98, 101> PvpLastWeeksRewardClaimed;
UpdateField<uint8, 98, 102> NumBankSlots;
OptionalUpdateField<UF::QuestSession, 98, 103> QuestSession;
- UpdateFieldArray<ObjectGuid, 195, 104, 105> InvSlots;
- UpdateFieldArray<uint32, 2, 300, 301> TrackResourceMask;
- UpdateFieldArray<uint64, 192, 303, 304> ExploredZones;
- UpdateFieldArray<UF::RestInfo, 2, 496, 497> RestInfo;
- UpdateFieldArray<int32, 7, 499, 500> ModDamageDonePos;
- UpdateFieldArray<int32, 7, 499, 507> ModDamageDoneNeg;
- UpdateFieldArray<float, 7, 499, 514> ModDamageDonePercent;
- UpdateFieldArray<float, 3, 521, 522> WeaponDmgMultipliers;
- UpdateFieldArray<float, 3, 521, 525> WeaponAtkSpeedMultipliers;
- UpdateFieldArray<uint32, 12, 528, 529> BuybackPrice;
- UpdateFieldArray<uint32, 12, 528, 541> BuybackTimestamp;
- UpdateFieldArray<int32, 32, 553, 554> CombatRatings;
- UpdateFieldArray<UF::PVPInfo, 6, 586, 587> PvpInfo;
- UpdateFieldArray<uint32, 4, 593, 594> NoReagentCostMask;
- UpdateFieldArray<int32, 2, 598, 599> ProfessionSkillLine;
- UpdateFieldArray<uint32, 4, 601, 602> BagSlotFlags;
- UpdateFieldArray<uint32, 7, 606, 607> BankBagSlotFlags;
- UpdateFieldArray<uint64, 875, 614, 615> QuestCompleted;
+ UpdateFieldArray<ObjectGuid, 199, 104, 105> InvSlots;
+ UpdateFieldArray<uint32, 2, 304, 305> TrackResourceMask;
+ UpdateFieldArray<uint64, 192, 307, 308> ExploredZones;
+ UpdateFieldArray<UF::RestInfo, 2, 500, 501> RestInfo;
+ UpdateFieldArray<int32, 7, 503, 504> ModDamageDonePos;
+ UpdateFieldArray<int32, 7, 503, 511> ModDamageDoneNeg;
+ UpdateFieldArray<float, 7, 503, 518> ModDamageDonePercent;
+ UpdateFieldArray<float, 3, 525, 526> WeaponDmgMultipliers;
+ UpdateFieldArray<float, 3, 525, 529> WeaponAtkSpeedMultipliers;
+ UpdateFieldArray<uint32, 12, 532, 533> BuybackPrice;
+ UpdateFieldArray<uint32, 12, 532, 545> BuybackTimestamp;
+ UpdateFieldArray<int32, 32, 557, 558> CombatRatings;
+ UpdateFieldArray<UF::PVPInfo, 6, 590, 591> PvpInfo;
+ UpdateFieldArray<uint32, 4, 597, 598> NoReagentCostMask;
+ UpdateFieldArray<int32, 2, 602, 603> ProfessionSkillLine;
+ UpdateFieldArray<uint32, 4, 605, 606> BagSlotFlags;
+ UpdateFieldArray<uint32, 7, 610, 611> BankBagSlotFlags;
+ UpdateFieldArray<uint64, 875, 618, 619> QuestCompleted;
void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const;