From f182d82d341be31ceadda7c698bdd70fc17bfa81 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 27 Aug 2026 20:24:01 +0200 Subject: [PATCH] Core/PacketIO: Fix more packet structures for 12.1.0 --- .../game/Entities/AreaTrigger/AreaTrigger.cpp | 10 +++--- .../Entities/Object/Updates/UpdateFields.cpp | 34 +++++++++++++------ .../Entities/Object/Updates/UpdateFields.h | 8 +++-- .../Server/Packets/CraftingPacketsCommon.cpp | 2 +- .../Server/Packets/CraftingPacketsCommon.h | 1 - src/server/game/Server/Packets/LFGPackets.cpp | 2 +- 6 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index 341bea55a0..653be74f5f 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -837,8 +837,8 @@ void AreaTrigger::SearchUnitInBoundedPlane(UF::AreaTriggerBoundedPlane const& bo progress = sDB2Manager.GetCurveValueAt(m_areaTriggerData->MorphCurveId, progress); float scale = CalcCurrentScale(); - float extentsX = G3D::lerp(boundedPlane.Extents->Pos.GetPositionX(), boundedPlane.ExtentsTarget->Pos.GetPositionX(), progress) * scale; - float extentsY = G3D::lerp(boundedPlane.Extents->Pos.GetPositionY(), boundedPlane.ExtentsTarget->Pos.GetPositionY(), progress) * scale; + float extentsX = G3D::lerp(boundedPlane.ExtentsX, boundedPlane.ExtentsTargetX, progress) * scale; + float extentsY = G3D::lerp(boundedPlane.ExtentsY, boundedPlane.ExtentsTargetY, progress) * scale; float radius = std::sqrt(extentsX * extentsX + extentsY * extentsY); SearchUnits(targetList, radius, false); @@ -1039,8 +1039,10 @@ void AreaTrigger::SetShape(AreaTriggerShapeInfo const& shape) { SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 8); auto boundedPlane = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase); - SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::Extents), shapeData.Extents); - SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::ExtentsTarget), shapeData.ExtentsTarget); + SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::ExtentsX), shapeData.Extents.Pos.GetPositionX()); + SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::ExtentsY), shapeData.Extents.Pos.GetPositionY()); + SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::ExtentsTargetX), shapeData.ExtentsTarget.Pos.GetPositionX()); + SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::ExtentsTargetY), shapeData.ExtentsTarget.Pos.GetPositionY()); } else static_assert(Trinity::dependant_false_v, "Unsupported shape type"); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 2cdda99372..c904cf59c2 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -7713,10 +7713,6 @@ void VisualAnim::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player co { data.WriteBit(IsDecay); } - } - data.FlushBits(); - if (changesMask[0]) - { data.WriteBit(AnimationDataID.has_value()); } data.FlushBits(); @@ -7730,6 +7726,10 @@ void VisualAnim::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player co { data << uint32(AnimProgress); } + } + data.FlushBits(); + if (changesMask[0]) + { if (changesMask[2]) { if (AnimationDataID.has_value()) @@ -8248,8 +8248,10 @@ void AreaTriggerDisk::ClearChangesMask() void AreaTriggerBoundedPlane::WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const { - data << *Extents; - data << *ExtentsTarget; + data << float(ExtentsX); + data << float(ExtentsY); + data << float(ExtentsTargetX); + data << float(ExtentsTargetY); } void AreaTriggerBoundedPlane::WriteUpdate(bool ignoreChangesMask, ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const @@ -8258,26 +8260,36 @@ void AreaTriggerBoundedPlane::WriteUpdate(bool ignoreChangesMask, ByteBuffer& da if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 3); + data.WriteBits(changesMask.GetBlock(0), 5); data.FlushBits(); if (changesMask[0]) { if (changesMask[1]) { - data << *Extents; + data << float(ExtentsX); } if (changesMask[2]) { - data << *ExtentsTarget; + data << float(ExtentsY); + } + if (changesMask[3]) + { + data << float(ExtentsTargetX); + } + if (changesMask[4]) + { + data << float(ExtentsTargetY); } } } void AreaTriggerBoundedPlane::ClearChangesMask() { - Base::ClearChangesMask(Extents); - Base::ClearChangesMask(ExtentsTarget); + Base::ClearChangesMask(ExtentsX); + Base::ClearChangesMask(ExtentsY); + Base::ClearChangesMask(ExtentsTargetX); + Base::ClearChangesMask(ExtentsTargetY); _changesMask.ResetAll(); } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 05b3eb4c92..a30140fe4b 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -1749,10 +1749,12 @@ struct AreaTriggerDisk : public IsUpdateFieldStructureTag, public HasChangesMask void ClearChangesMask(); }; -struct AreaTriggerBoundedPlane : public IsUpdateFieldStructureTag, public HasChangesMask<3> +struct AreaTriggerBoundedPlane : public IsUpdateFieldStructureTag, public HasChangesMask<5> { - UpdateField, 0, 1> Extents; - UpdateField, 0, 2> ExtentsTarget; + UpdateField ExtentsX; + UpdateField ExtentsY; + UpdateField ExtentsTargetX; + UpdateField ExtentsTargetY; using OwnerObject = AreaTrigger; void WriteCreate(ByteBuffer& data, Player const* receiver, AreaTrigger const* owner) const; diff --git a/src/server/game/Server/Packets/CraftingPacketsCommon.cpp b/src/server/game/Server/Packets/CraftingPacketsCommon.cpp index b6ac4f7e19..96ee73169e 100644 --- a/src/server/game/Server/Packets/CraftingPacketsCommon.cpp +++ b/src/server/game/Server/Packets/CraftingPacketsCommon.cpp @@ -52,8 +52,8 @@ ByteBuffer& operator<<(ByteBuffer& data, CraftingReagentBase const& reagent) ByteBuffer& operator<<(ByteBuffer& data, SpellReducedReagent const& spellReducedReagent) { - data << int32(spellReducedReagent.Quantity); data << spellReducedReagent.Reagent; + data << int32(spellReducedReagent.Quantity); return data; } diff --git a/src/server/game/Server/Packets/CraftingPacketsCommon.h b/src/server/game/Server/Packets/CraftingPacketsCommon.h index 12998abc77..737a8b29ff 100644 --- a/src/server/game/Server/Packets/CraftingPacketsCommon.h +++ b/src/server/game/Server/Packets/CraftingPacketsCommon.h @@ -67,7 +67,6 @@ struct CraftingData ByteBuffer& operator>>(ByteBuffer& data, CraftingReagentBase& reagent); ByteBuffer& operator<<(ByteBuffer& data, CraftingReagentBase const& reagent); -ByteBuffer& operator<<(ByteBuffer& data, SpellReducedReagent const& spellReducedReagent); ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData); } #endif // TRINITYCORE_CRAFTING_PACKETS_COMMON_H diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp index 7f76fa5cef..724e9611c8 100644 --- a/src/server/game/Server/Packets/LFGPackets.cpp +++ b/src/server/game/Server/Packets/LFGPackets.cpp @@ -217,8 +217,8 @@ WorldPacket const* LFGUpdateStatus::Write() for (ObjectGuid const& suspendedPlayer : SuspendedPlayers) _worldPacket << suspendedPlayer; - _worldPacket << Bits<1>(IsParty); _worldPacket << Bits<1>(NotifyUI); + _worldPacket << Bits<1>(IsParty); _worldPacket << Bits<1>(Joined); _worldPacket << Bits<1>(LfgJoined); _worldPacket << Bits<1>(Queued);