From fe4ff01e30df59e97261bca045a7b3572e14fe07 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sun, 29 Mar 2020 19:12:32 +0200 Subject: [PATCH] Core/Movement: converted SMSG_MOVE_KNOCK_BACK to packet class --- src/server/game/Entities/Unit/Unit.cpp | 40 ++++--------------- .../game/Server/Packets/MovementPackets.cpp | 34 ++++++++++++++++ .../game/Server/Packets/MovementPackets.h | 19 +++++++++ 3 files changed, 61 insertions(+), 32 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a2dd3c07cb2..461e0b77233 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -41,6 +41,7 @@ #include "LootMgr.h" #include "MotionMaster.h" #include "MovementGenerator.h" +#include "MovementPackets.h" #include "MovementPacketBuilder.h" #include "MovementStructures.h" #include "MoveSpline.h" @@ -12739,38 +12740,13 @@ void Unit::UpdateObjectVisibility(bool forced) void Unit::SendMoveKnockBack(Player* player, float speedXY, float speedZ, float vcos, float vsin) { - ObjectGuid guid = GetGUID(); - WorldPacket data(SMSG_MOVE_KNOCK_BACK, (1+8+4+4+4+4+4)); - data.WriteBit(guid[0]); - data.WriteBit(guid[3]); - data.WriteBit(guid[6]); - data.WriteBit(guid[7]); - data.WriteBit(guid[2]); - data.WriteBit(guid[5]); - data.WriteBit(guid[1]); - data.WriteBit(guid[4]); - - data.WriteByteSeq(guid[1]); - - data << float(vsin); - data << uint32(0); - - data.WriteByteSeq(guid[6]); - data.WriteByteSeq(guid[7]); - - data << float(speedXY); - - data.WriteByteSeq(guid[4]); - data.WriteByteSeq(guid[5]); - data.WriteByteSeq(guid[3]); - - data << float(speedZ); - data << float(vcos); - - data.WriteByteSeq(guid[2]); - data.WriteByteSeq(guid[0]); - - player->SendDirectMessage(&data); + WorldPackets::Movement::MoveKnockBack moveKnockBack; + moveKnockBack.MoverGUID = GetGUID(); + moveKnockBack.SequenceIndex = m_movementCounter++; + moveKnockBack.Speeds.HorzSpeed = speedXY; + moveKnockBack.Speeds.VertSpeed = speedZ; + moveKnockBack.Direction = Position(vcos, vsin); + player->SendDirectMessage(moveKnockBack.Write()); } void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ) diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 2d305c7a23a..9b32ad93e8f 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -95,3 +95,37 @@ WorldPacket const* WorldPackets::Movement::MoveSetCollisionHeight::Write() return &_worldPacket; } + +WorldPacket const* WorldPackets::Movement::MoveKnockBack::Write() +{ + _worldPacket.WriteBit(MoverGUID[0]); + _worldPacket.WriteBit(MoverGUID[3]); + _worldPacket.WriteBit(MoverGUID[6]); + _worldPacket.WriteBit(MoverGUID[7]); + _worldPacket.WriteBit(MoverGUID[2]); + _worldPacket.WriteBit(MoverGUID[5]); + _worldPacket.WriteBit(MoverGUID[1]); + _worldPacket.WriteBit(MoverGUID[4]); + + _worldPacket.WriteByteSeq(MoverGUID[1]); + + _worldPacket << float(Direction.Pos.GetPositionY()); + _worldPacket << int32(SequenceIndex); + + _worldPacket.WriteByteSeq(MoverGUID[6]); + _worldPacket.WriteByteSeq(MoverGUID[7]); + + _worldPacket << float(Speeds.HorzSpeed); + + _worldPacket.WriteByteSeq(MoverGUID[4]); + _worldPacket.WriteByteSeq(MoverGUID[5]); + _worldPacket.WriteByteSeq(MoverGUID[3]); + + _worldPacket << float(Speeds.VertSpeed); + _worldPacket << float(Direction.Pos.GetPositionX()); + + _worldPacket.WriteByteSeq(MoverGUID[2]); + _worldPacket.WriteByteSeq(MoverGUID[0]); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index de8488f7325..43ef03aba42 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -88,6 +88,25 @@ namespace WorldPackets float Height = 1.0f; UpdateCollisionHeightReason Reason = UPDATE_COLLISION_HEIGHT_MOUNT; }; + + struct MoveKnockBackSpeeds + { + float HorzSpeed = 0.0f; + float VertSpeed = 0.0f; + }; + + class MoveKnockBack final : public ServerPacket + { + public: + MoveKnockBack() : ServerPacket(SMSG_MOVE_KNOCK_BACK, 1 + 8 + 4 + 4 + 4 + 4 + 4) { } + + WorldPacket const* Write() override; + + ObjectGuid MoverGUID; + TaggedPosition Direction; + MoveKnockBackSpeeds Speeds; + uint32 SequenceIndex = 0; + }; } }