diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-08-16 00:03:22 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-08-16 00:03:22 +0200 |
| commit | df1ec76d54db3a91759fc93f4d6b6828d4ec0f59 (patch) | |
| tree | 824cd4bc52735c0e23996d9852b9f608b0ab4cfc /src/server/game/Entities/Object | |
| parent | 3429871a07c1c1ebe2bd94cb771ef187cb46fd46 (diff) | |
Core: Updated to 11.0.2
Diffstat (limited to 'src/server/game/Entities/Object')
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.cpp | 92 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.h | 25 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateMask.h | 2 |
3 files changed, 90 insertions, 29 deletions
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 8b54351c6c3..074ae923b02 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -2124,6 +2124,41 @@ void ArenaCooldown::ClearChangesMask() _changesMask.ResetAll(); } +void ZonePlayerForcedReaction::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int32(FactionID); + data << int32(Reaction); +} + +void ZonePlayerForcedReaction::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + Mask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 3); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(FactionID); + } + if (changesMask[2]) + { + data << int32(Reaction); + } + } +} + +void ZonePlayerForcedReaction::ClearChangesMask() +{ + Base::ClearChangesMask(FactionID); + Base::ClearChangesMask(Reaction); + _changesMask.ResetAll(); +} + void PetCreatureName::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << uint32(CreatureID); @@ -2341,6 +2376,10 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data << int32(HonorLevel); data << int64(LogoutTime); data << uint32(ArenaCooldowns.size()); + for (uint32 i = 0; i < 32; ++i) + { + ForcedReactions[i].WriteCreate(data, owner, receiver); + } data << int32(Field_1AC); data << int32(Field_1B0); data << int32(CurrentBattlePetSpeciesID); @@ -2406,7 +2445,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({ 0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0x00000001u }); + Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000003u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2414,20 +2453,20 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - allowedMaskForTarget |= std::array<uint32, 10>{ 0x00000022u, 0xFFFE0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000001u, 0x00000000u, 0x00000000u }; + allowedMaskForTarget |= std::array<uint32, 11>{ 0x00000022u, 0xFFFE0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u }; } void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0x00000001u }); + Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000003u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlocksMask(0), 10); - for (uint32 i = 0; i < 10; ++i) + data.WriteBits(changesMask.GetBlocksMask(0), 11); + for (uint32 i = 0; i < 11; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -2751,21 +2790,31 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[269]) + if (changesMask[252]) + { + for (uint32 i = 0; i < 32; ++i) + { + if (changesMask[253 + i]) + { + ForcedReactions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[302]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[270 + i]) + if (changesMask[303 + i]) { data << uint32(Field_3120[i]); } } } - if (changesMask[252]) + if (changesMask[285]) { for (uint32 i = 0; i < 16; ++i) { - if (changesMask[253 + i]) + if (changesMask[286 + i]) { data << VisibleEquipableSpells[i]; } @@ -2824,6 +2873,7 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(QuestLog); Base::ClearChangesMask(VisibleItems); Base::ClearChangesMask(AvgItemLevel); + Base::ClearChangesMask(ForcedReactions); Base::ClearChangesMask(VisibleEquipableSpells); Base::ClearChangesMask(Field_3120); _changesMask.ResetAll(); @@ -4204,10 +4254,10 @@ void PersonalCraftingOrderCount::ClearChangesMask() void NPCCraftingOrderInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { - data << uint64(Field_0); - data << int32(Field_8); - data << int32(Field_C); - data << int32(Field_10); + data << uint64(OrderID); + data << int32(NpcCraftingOrderSetID); + data << int32(NpcTreasureID); + data << int32(NpcCraftingOrderCustomerID); } void NPCCraftingOrderInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const @@ -4221,28 +4271,28 @@ void NPCCraftingOrderInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, data.FlushBits(); if (changesMask[0]) { - data << uint64(Field_0); + data << uint64(OrderID); } if (changesMask[1]) { - data << int32(Field_8); + data << int32(NpcCraftingOrderSetID); } if (changesMask[2]) { - data << int32(Field_C); + data << int32(NpcTreasureID); } if (changesMask[3]) { - data << int32(Field_10); + data << int32(NpcCraftingOrderCustomerID); } } void NPCCraftingOrderInfo::ClearChangesMask() { - Base::ClearChangesMask(Field_0); - Base::ClearChangesMask(Field_8); - Base::ClearChangesMask(Field_C); - Base::ClearChangesMask(Field_10); + Base::ClearChangesMask(OrderID); + Base::ClearChangesMask(NpcCraftingOrderSetID); + Base::ClearChangesMask(NpcTreasureID); + Base::ClearChangesMask(NpcCraftingOrderCustomerID); _changesMask.ResetAll(); } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 43b1c60d9a9..cf5a167706b 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -458,6 +458,16 @@ struct ArenaCooldown : public IsUpdateFieldStructureTag, public HasChangesMask<8 void ClearChangesMask(); }; +struct ZonePlayerForcedReaction : public IsUpdateFieldStructureTag, public HasChangesMask<3> +{ + UpdateField<int32, 0, 1> FactionID; + UpdateField<int32, 0, 2> Reaction; + + 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 PetCreatureName : public IsUpdateFieldStructureTag, public HasChangesMask<3> { UpdateField<uint32, 0, 1> CreatureID; @@ -502,7 +512,7 @@ struct CustomTabardInfo : public IsUpdateFieldStructureTag, public HasChangesMas void ClearChangesMask(); }; -struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<289> +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<322> { UpdateField<bool, 0, 1> HasQuestSession; UpdateField<bool, 0, 2> HasLevelLink; @@ -552,8 +562,9 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<289> UpdateFieldArray<UF::QuestLog, 175, 49, 50> QuestLog; UpdateFieldArray<UF::VisibleItem, 19, 225, 226> VisibleItems; UpdateFieldArray<float, 6, 245, 246> AvgItemLevel; - UpdateFieldArray<WorldPackets::Item::ItemInstance, 16, 252, 253> VisibleEquipableSpells; - UpdateFieldArray<uint32, 19, 269, 270> Field_3120; + UpdateFieldArray<UF::ZonePlayerForcedReaction, 32, 252, 253> ForcedReactions; + UpdateFieldArray<WorldPackets::Item::ItemInstance, 16, 285, 286> VisibleEquipableSpells; + UpdateFieldArray<uint32, 19, 302, 303> 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; @@ -887,10 +898,10 @@ struct PersonalCraftingOrderCount : public IsUpdateFieldStructureTag, public Has struct NPCCraftingOrderInfo : public IsUpdateFieldStructureTag, public HasChangesMask<4> { - UpdateField<uint64, -1, 0> Field_0; - UpdateField<int32, -1, 1> Field_8; - UpdateField<int32, -1, 2> Field_C; - UpdateField<int32, -1, 3> Field_10; + UpdateField<uint64, -1, 0> OrderID; + UpdateField<int32, -1, 1> NpcCraftingOrderSetID; + UpdateField<int32, -1, 2> NpcTreasureID; + UpdateField<int32, -1, 3> NpcCraftingOrderCustomerID; void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; diff --git a/src/server/game/Entities/Object/Updates/UpdateMask.h b/src/server/game/Entities/Object/Updates/UpdateMask.h index b8262387907..a79b5c038ab 100644 --- a/src/server/game/Entities/Object/Updates/UpdateMask.h +++ b/src/server/game/Entities/Object/Updates/UpdateMask.h @@ -63,7 +63,7 @@ public: constexpr bool operator[](uint32 index) const { - return (_blocks[index / 32] & (1 << (index % 32))) != 0; + return (_blocks[UpdateMaskHelpers::GetBlockIndex(index)] & UpdateMaskHelpers::GetBlockFlag(index)) != 0; } constexpr bool IsAnySet() const |
