aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-08-16 00:03:22 +0200
committerShauren <shauren.trinity@gmail.com>2024-08-16 00:03:22 +0200
commitdf1ec76d54db3a91759fc93f4d6b6828d4ec0f59 (patch)
tree824cd4bc52735c0e23996d9852b9f608b0ab4cfc /src/server/game/Entities/Object
parent3429871a07c1c1ebe2bd94cb771ef187cb46fd46 (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.cpp92
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h25
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateMask.h2
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