From d8ec67df50fa49a760a94db6a8a2cbc1f0987901 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sun, 10 May 2020 19:21:33 +0200 Subject: [PATCH] Core/Movement: converted collision height and move update opcodes back to movement structures and implement new movement status elements for future use --- src/server/game/Entities/Player/Player.cpp | 3 + src/server/game/Entities/Unit/Unit.cpp | 368 +++++++++--------- src/server/game/Handlers/MovementHandler.cpp | 53 ++- .../game/Movement/MovementStructures.cpp | 271 +++++++++++-- src/server/game/Movement/MovementStructures.h | 2 + .../game/Server/Packets/MovementPackets.cpp | 358 ----------------- .../game/Server/Packets/MovementPackets.h | 35 -- src/server/game/Server/WorldSession.h | 4 +- 8 files changed, 459 insertions(+), 635 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index d816e64bcc7..79e7fe23bb7 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -27974,6 +27974,9 @@ void Player::ReadMovementInfo(WorldPacket& data, MovementInfo* mi, Movement::Ext case MSEHasSpline: data.ReadBit(); break; + case MSEHasHeightChangeFailed: + data.ReadBit(); + break; case MSEMovementFlags: if (hasMovementFlags) mi->flags = data.ReadBits(30); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 72ddf5821d6..1d060b651ef 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13732,187 +13732,193 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle switch (element) { - case MSEHasGuidByte0: - case MSEHasGuidByte1: - case MSEHasGuidByte2: - case MSEHasGuidByte3: - case MSEHasGuidByte4: - case MSEHasGuidByte5: - case MSEHasGuidByte6: - case MSEHasGuidByte7: - data.WriteBit(guid[element - MSEHasGuidByte0]); - break; - case MSEHasTransportGuidByte0: - case MSEHasTransportGuidByte1: - case MSEHasTransportGuidByte2: - case MSEHasTransportGuidByte3: - case MSEHasTransportGuidByte4: - case MSEHasTransportGuidByte5: - case MSEHasTransportGuidByte6: - case MSEHasTransportGuidByte7: - if (hasTransportData) - data.WriteBit(tguid[element - MSEHasTransportGuidByte0]); - break; - case MSEGuidByte0: - case MSEGuidByte1: - case MSEGuidByte2: - case MSEGuidByte3: - case MSEGuidByte4: - case MSEGuidByte5: - case MSEGuidByte6: - case MSEGuidByte7: - data.WriteByteSeq(guid[element - MSEGuidByte0]); - break; - case MSETransportGuidByte0: - case MSETransportGuidByte1: - case MSETransportGuidByte2: - case MSETransportGuidByte3: - case MSETransportGuidByte4: - case MSETransportGuidByte5: - case MSETransportGuidByte6: - case MSETransportGuidByte7: - if (hasTransportData) - data.WriteByteSeq(tguid[element - MSETransportGuidByte0]); - break; - case MSEHasMovementFlags: - data.WriteBit(!hasMovementFlags); - break; - case MSEHasMovementFlags2: - data.WriteBit(!hasMovementFlags2); - break; - case MSEHasTimestamp: - data.WriteBit(!hasTimestamp); - break; - case MSEHasOrientation: - data.WriteBit(!hasOrientation); - break; - case MSEHasTransportData: - data.WriteBit(hasTransportData); - break; - case MSEHasTransportTime2: - if (hasTransportData) - data.WriteBit(hasTransportTime2); - break; - case MSEHasVehicleId: - if (hasTransportData) - data.WriteBit(hasTransportVehicleId); - break; - case MSEHasPitch: - data.WriteBit(!hasPitch); - break; - case MSEHasFallData: - data.WriteBit(hasFallData); - break; - case MSEHasFallDirection: - if (hasFallData) - data.WriteBit(hasFallDirection); - break; - case MSEHasSplineElevation: - data.WriteBit(!hasSplineElevation); - break; - case MSEHasSpline: - data.WriteBit(hasSpline); - break; - case MSEMovementFlags: - if (hasMovementFlags) - data.WriteBits(GetUnitMovementFlags(), 30); - break; - case MSEMovementFlags2: - if (hasMovementFlags2) - data.WriteBits(GetExtraUnitMovementFlags(), 12); - break; - case MSETimestamp: - if (hasTimestamp) - data << mi.time; - break; - case MSEPositionX: - data << GetPositionX(); - break; - case MSEPositionY: - data << GetPositionY(); - break; - case MSEPositionZ: - data << GetPositionZ(); - break; - case MSEOrientation: - if (hasOrientation) - data << GetOrientation(); - break; - case MSETransportPositionX: - if (hasTransportData) - data << GetTransOffsetX(); - break; - case MSETransportPositionY: - if (hasTransportData) - data << GetTransOffsetY(); - break; - case MSETransportPositionZ: - if (hasTransportData) - data << GetTransOffsetZ(); - break; - case MSETransportOrientation: - if (hasTransportData) - data << GetTransOffsetO(); - break; - case MSETransportSeat: - if (hasTransportData) - data << GetTransSeat(); - break; - case MSETransportTime: - if (hasTransportData) - data << GetTransTime(); - break; - case MSETransportTime2: - if (hasTransportData && hasTransportTime2) - data << mi.transport.time2; - break; - case MSETransportVehicleId: - if (hasTransportData && hasTransportVehicleId) - data << mi.transport.vehicleId; - break; - case MSEPitch: - if (hasPitch) - data << mi.pitch; - break; - case MSEFallTime: - if (hasFallData) - data << mi.jump.fallTime; - break; - case MSEFallVerticalSpeed: - if (hasFallData) - data << mi.jump.zspeed; - break; - case MSEFallCosAngle: - if (hasFallData && hasFallDirection) - data << mi.jump.cosAngle; - break; - case MSEFallSinAngle: - if (hasFallData && hasFallDirection) - data << mi.jump.sinAngle; - break; - case MSEFallHorizontalSpeed: - if (hasFallData && hasFallDirection) - data << mi.jump.xyspeed; - break; - case MSESplineElevation: - if (hasSplineElevation) - data << mi.splineElevation; - break; - case MSECounter: - data << m_movementCounter++; - break; - case MSEZeroBit: - data.WriteBit(0); - break; - case MSEOneBit: - data.WriteBit(1); - break; - case MSEExtraElement: - extras->WriteNextElement(data); - break; - default: - ASSERT(Movement::PrintInvalidSequenceElement(element, __FUNCTION__)); - break; + case MSEHasGuidByte0: + case MSEHasGuidByte1: + case MSEHasGuidByte2: + case MSEHasGuidByte3: + case MSEHasGuidByte4: + case MSEHasGuidByte5: + case MSEHasGuidByte6: + case MSEHasGuidByte7: + data.WriteBit(guid[element - MSEHasGuidByte0]); + break; + case MSEHasTransportGuidByte0: + case MSEHasTransportGuidByte1: + case MSEHasTransportGuidByte2: + case MSEHasTransportGuidByte3: + case MSEHasTransportGuidByte4: + case MSEHasTransportGuidByte5: + case MSEHasTransportGuidByte6: + case MSEHasTransportGuidByte7: + if (hasTransportData) + data.WriteBit(tguid[element - MSEHasTransportGuidByte0]); + break; + case MSEGuidByte0: + case MSEGuidByte1: + case MSEGuidByte2: + case MSEGuidByte3: + case MSEGuidByte4: + case MSEGuidByte5: + case MSEGuidByte6: + case MSEGuidByte7: + data.WriteByteSeq(guid[element - MSEGuidByte0]); + break; + case MSETransportGuidByte0: + case MSETransportGuidByte1: + case MSETransportGuidByte2: + case MSETransportGuidByte3: + case MSETransportGuidByte4: + case MSETransportGuidByte5: + case MSETransportGuidByte6: + case MSETransportGuidByte7: + if (hasTransportData) + data.WriteByteSeq(tguid[element - MSETransportGuidByte0]); + break; + case MSEHasMovementFlags: + data.WriteBit(!hasMovementFlags); + break; + case MSEHasMovementFlags2: + data.WriteBit(!hasMovementFlags2); + break; + case MSEHasTimestamp: + data.WriteBit(!hasTimestamp); + break; + case MSEHasOrientation: + data.WriteBit(!hasOrientation); + break; + case MSEHasTransportData: + data.WriteBit(hasTransportData); + break; + case MSEHasTransportTime2: + if (hasTransportData) + data.WriteBit(hasTransportTime2); + break; + case MSEHasVehicleId: + if (hasTransportData) + data.WriteBit(hasTransportVehicleId); + break; + case MSEHasPitch: + data.WriteBit(!hasPitch); + break; + case MSEHasFallData: + data.WriteBit(hasFallData); + break; + case MSEHasFallDirection: + if (hasFallData) + data.WriteBit(hasFallDirection); + break; + case MSEHasSplineElevation: + data.WriteBit(!hasSplineElevation); + break; + case MSEHasSpline: + data.WriteBit(hasSpline); + break; + case MSEHasHeightChangeFailed: + data.WriteBit(mi.HasHeightChangeFailed()); + break; + case MSEMovementFlags: + if (hasMovementFlags) + data.WriteBits(GetUnitMovementFlags(), 30); + break; + case MSEMovementFlags2: + if (hasMovementFlags2) + data.WriteBits(GetExtraUnitMovementFlags(), 12); + break; + case MSETimestamp: + if (hasTimestamp) + data << mi.time; + break; + case MSEPositionX: + data << GetPositionX(); + break; + case MSEPositionY: + data << GetPositionY(); + break; + case MSEPositionZ: + data << GetPositionZ(); + break; + case MSEOrientation: + if (hasOrientation) + data << GetOrientation(); + break; + case MSETransportPositionX: + if (hasTransportData) + data << GetTransOffsetX(); + break; + case MSETransportPositionY: + if (hasTransportData) + data << GetTransOffsetY(); + break; + case MSETransportPositionZ: + if (hasTransportData) + data << GetTransOffsetZ(); + break; + case MSETransportOrientation: + if (hasTransportData) + data << GetTransOffsetO(); + break; + case MSETransportSeat: + if (hasTransportData) + data << GetTransSeat(); + break; + case MSETransportTime: + if (hasTransportData) + data << GetTransTime(); + break; + case MSETransportTime2: + if (hasTransportData && hasTransportTime2) + data << mi.transport.time2; + break; + case MSETransportVehicleId: + if (hasTransportData && hasTransportVehicleId) + data << mi.transport.vehicleId; + break; + case MSEPitch: + if (hasPitch) + data << mi.pitch; + break; + case MSEFallTime: + if (hasFallData) + data << mi.jump.fallTime; + break; + case MSEFallVerticalSpeed: + if (hasFallData) + data << mi.jump.zspeed; + break; + case MSEFallCosAngle: + if (hasFallData && hasFallDirection) + data << mi.jump.cosAngle; + break; + case MSEFallSinAngle: + if (hasFallData && hasFallDirection) + data << mi.jump.sinAngle; + break; + case MSEFallHorizontalSpeed: + if (hasFallData && hasFallDirection) + data << mi.jump.xyspeed; + break; + case MSESplineElevation: + if (hasSplineElevation) + data << mi.splineElevation; + break; + case MSECounter: + data << m_movementCounter++; + break; + case MSEZeroBit: + data.WriteBit(0); + break; + case MSEOneBit: + data.WriteBit(1); + break; + case MSEFlushBits: + data.FlushBits(); + break; + case MSEExtraElement: + extras->WriteNextElement(data); + break; + default: + ASSERT(Movement::PrintInvalidSequenceElement(element, __FUNCTION__)); + break; } } } diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 3b162c717ab..994da0b2fb7 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -303,8 +303,16 @@ void WorldSession::HandleMoveTeleportAck(WorldPacket& recvPacket) void WorldSession::HandleMovementOpcodes(WorldPacket& recvPacket) { + /* extract packet */ + MovementInfo movementInfo; + GetPlayer()->ReadMovementInfo(recvPacket, &movementInfo); uint16 opcode = recvPacket.GetOpcode(); + HandleMovementOpcode(opcode, movementInfo); +} + +void WorldSession::HandleMovementOpcode(uint16 opcode, MovementInfo& movementInfo) +{ Unit* mover = _player->m_unitMovedByMe; // there must always be a mover @@ -315,14 +323,9 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvPacket) // ignore, waiting processing in WorldSession::HandleMoveWorldportAckOpcode and WorldSession::HandleMoveTeleportAck if (plrMover && plrMover->IsBeingTeleported()) - { - recvPacket.rfinish(); // prevent warnings spam return; - } - /* extract packet */ - MovementInfo movementInfo; - GetPlayer()->ReadMovementInfo(recvPacket, &movementInfo); + GetPlayer()->ValidateMovementInfo(&movementInfo); // prevent tampered movement data if (movementInfo.guid != mover->GetGUID()) @@ -340,33 +343,21 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvPacket) if (plrMover && (plrMover->GetUInt32Value(UNIT_NPC_EMOTESTATE) != 0)) plrMover->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - if (plrMover && opcode == MSG_MOVE_JUMP) - plrMover->ProcSkillsAndAuras(nullptr, PROC_FLAG_JUMP, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, nullptr, nullptr, nullptr); - /* handle special cases */ - if (movementInfo.transport.guid) + if (!movementInfo.transport.guid.IsEmpty()) { // We were teleported, skip packets that were broadcast before teleport if (movementInfo.pos.GetExactDist2d(mover) > SIZE_OF_GRIDS) - { - recvPacket.rfinish(); // prevent warnings spam return; - } // transports size limited // (also received at zeppelin leave by some reason with t_* as absolute in continent coordinates, can be safely skipped) if (fabs(movementInfo.transport.pos.GetPositionX()) > 75.0f || fabs(movementInfo.transport.pos.GetPositionY()) > 75.0f || fabs(movementInfo.transport.pos.GetPositionZ()) > 75.0f) - { - recvPacket.rfinish(); // prevent warnings spam return; - } if (!Trinity::IsValidMapCoord(movementInfo.pos.GetPositionX() + movementInfo.transport.pos.GetPositionX(), movementInfo.pos.GetPositionY() + movementInfo.transport.pos.GetPositionY(), movementInfo.pos.GetPositionZ() + movementInfo.transport.pos.GetPositionZ(), movementInfo.pos.GetOrientation() + movementInfo.transport.pos.GetOrientation())) - { - recvPacket.rfinish(); // prevent warnings spam return; - } // if we boarded a transport, add us to it if (plrMover) @@ -440,9 +431,9 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvPacket) mover->UpdatePosition(movementInfo.pos); - WorldPackets::Movement::MoveUpdate moveUpdate; - moveUpdate.Status = &mover->m_movementInfo; - mover->SendMessageToSet(moveUpdate.Write(), _player); + WorldPacket data(SMSG_MOVE_UPDATE); + mover->WriteMovementInfo(data); + mover->SendMessageToSet(&data, _player); if (plrMover) // nothing is charmed, or player charmed { @@ -470,6 +461,12 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvPacket) } } } + + if (opcode == MSG_MOVE_JUMP) + { + plrMover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_JUMP, 605); // Mind Control + plrMover->ProcSkillsAndAuras(nullptr, PROC_FLAG_JUMP, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, nullptr, nullptr, nullptr); + } } } @@ -682,14 +679,14 @@ void WorldSession::HandleSummonResponseOpcode(WorldPacket& recvData) _player->SummonIfPossible(agree); } -void WorldSession::HandleSetCollisionHeightAck(WorldPackets::Movement::MoveSetCollisionHeightAck& packet) +void WorldSession::HandleSetCollisionHeightAck(WorldPacket& recvData) { - _player->ValidateMovementInfo(&packet.Data.Status); + MovementInfo movementInfo; + static MovementStatusElements const heightElement = MSEExtraFloat; + Movement::ExtraMovementStatusElement extras(&heightElement); + GetPlayer()->ReadMovementInfo(recvData, &movementInfo, &extras); - WorldPackets::Movement::MoveUpdateCollisionHeight updateCollisionHeight; - updateCollisionHeight.Height = packet.Height; - updateCollisionHeight.Status = &_player->m_movementInfo; - _player->SendMessageToSet(updateCollisionHeight.Write(), false); + Movement::PacketSender(_player, NULL_OPCODE, NULL_OPCODE, SMSG_MOVE_UPDATE_COLLISION_HEIGHT, &extras).Send(); } void WorldSession::HandleMoveTimeSkippedOpcode(WorldPacket& recvData) diff --git a/src/server/game/Movement/MovementStructures.cpp b/src/server/game/Movement/MovementStructures.cpp index 770a437f0f4..e78fecfa55b 100644 --- a/src/server/game/Movement/MovementStructures.cpp +++ b/src/server/game/Movement/MovementStructures.cpp @@ -15,11 +15,83 @@ * with this program. If not, see . */ -#include "MovementPackets.h" #include "MovementStructures.h" #include "Log.h" #include "Player.h" +MovementStatusElements const MovementUpdate[] = +{ + MSEHasFallData, + MSEHasGuidByte3, + MSEHasGuidByte6, + MSEHasMovementFlags2, + MSEHasSpline, + MSEHasTimestamp, + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEMovementFlags2, + MSEHasGuidByte7, + MSEHasMovementFlags, + MSEHasOrientation, + MSEHasGuidByte2, + MSEHasSplineElevation, + MSEHasHeightChangeFailed, + MSEHasGuidByte4, + MSEHasFallDirection, + MSEHasGuidByte5, + MSEHasTransportData, + MSEMovementFlags, + MSEHasTransportGuidByte3, + MSEHasVehicleId, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte4, + MSEHasTransportTime2, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte2, + MSEHasPitch, + MSEFlushBits, + MSEGuidByte5, + MSEFallHorizontalSpeed, + MSEFallSinAngle, + MSEFallCosAngle, + MSEFallVerticalSpeed, + MSEFallTime, + MSESplineElevation, + MSEGuidByte7, + MSEPositionY, + MSEGuidByte3, + MSETransportVehicleId, + MSETransportGuidByte6, + MSETransportSeat, + MSETransportGuidByte5, + MSETransportPositionX, + MSETransportGuidByte1, + MSETransportOrientation, + MSETransportGuidByte2, + MSETransportTime2, + MSETransportGuidByte0, + MSETransportPositionZ, + MSETransportGuidByte7, + MSETransportGuidByte4, + MSETransportGuidByte3, + MSETransportPositionY, + MSETransportTime, + MSEGuidByte4, + MSEPositionX, + MSEGuidByte6, + MSEPositionZ, + MSETimestamp, + MSEGuidByte2, + MSEPitch, + MSEGuidByte0, + MSEOrientation, + MSEGuidByte1, + MSEEnd +}; + MovementStatusElements const MovementFallLand[] = { MSEPositionX, @@ -1919,7 +1991,6 @@ MovementStatusElements const MoveUpdateTeleport[] = MSEPositionY, MSEPositionX, MSEHasOrientation, - MSEHasSpline, MSEHasMovementFlags, MSEHasGuidByte2, @@ -1929,7 +2000,6 @@ MovementStatusElements const MoveUpdateTeleport[] = MSEHasGuidByte0, MSEHasTransportData, MSEHasGuidByte5, - MSEHasTransportGuidByte1, MSEHasTransportGuidByte4, MSEHasTransportGuidByte5, @@ -1940,21 +2010,18 @@ MovementStatusElements const MoveUpdateTeleport[] = MSEHasTransportGuidByte6, MSEHasVehicleId, MSEHasTransportGuidByte2, - MSEZeroBit, - MSEHasGuidByte7, MSEHasGuidByte3, MSEHasPitch, MSEHasMovementFlags2, MSEHasTimestamp, - MSEHasFallDirection, MSEMovementFlags2, MSEHasSplineElevation, MSEMovementFlags, MSEHasGuidByte1, - + MSEFlushBits, MSEGuidByte7, MSETransportGuidByte3, MSETransportGuidByte4, @@ -1972,7 +2039,6 @@ MovementStatusElements const MoveUpdateTeleport[] = MSETransportTime, MSETransportPositionY, MSETransportPositionX, - MSEGuidByte6, MSEPitch, MSESplineElevation, @@ -1980,19 +2046,16 @@ MovementStatusElements const MoveUpdateTeleport[] = MSEGuidByte2, MSEGuidByte3, MSEGuidByte1, - MSEFallTime, MSEFallHorizontalSpeed, MSEFallCosAngle, MSEFallSinAngle, MSEFallVerticalSpeed, - MSEGuidByte5, MSEGuidByte4, MSETimestamp, MSEGuidByte0, - - MSEEnd, + MSEEnd }; MovementStatusElements const MovementSetRunMode[] = @@ -2317,6 +2380,7 @@ MovementStatusElements const MovementUpdateSwimSpeed[] = MSEHasPitch, MSEMovementFlags2, MSEHasGuidByte1, + MSEFlushBits, MSETransportGuidByte2, MSETransportPositionX, MSETransportVehicleId, @@ -2394,6 +2458,7 @@ MovementStatusElements const MovementUpdateRunSpeed[] = MSEHasFallDirection, MSEHasGuidByte4, MSEZeroBit, + MSEFlushBits, MSETransportGuidByte4, MSETransportGuidByte5, MSETransportPositionX, @@ -2467,6 +2532,7 @@ MovementStatusElements const MovementUpdateFlightSpeed[] = MSEMovementFlags2, MSEHasFallDirection, MSEHasGuidByte0, + MSEFlushBits, MSESplineElevation, MSEPitch, MSEGuidByte0, @@ -2503,6 +2569,80 @@ MovementStatusElements const MovementUpdateFlightSpeed[] = MSEEnd }; +MovementStatusElements const MovementUpdateCollisionHeight[] = +{ + MSEPositionZ, + MSEExtraElement, + MSEPositionX, + MSEPositionY, + MSEHasGuidByte6, + MSEHasGuidByte7, + MSEHasSplineElevation, + MSEHasTransportData, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte3, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte5, + MSEHasVehicleId, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte0, + MSEHasTransportGuidByte2, + MSEHasTransportTime2, + MSEHasGuidByte3, + MSEHasOrientation, + MSEHasGuidByte4, + MSEHasGuidByte5, + MSEHasTimestamp, + MSEHasFallData, + MSEHasGuidByte0, + MSEHasPitch, + MSEHasHeightChangeFailed, + MSEHasGuidByte2, + MSEHasMovementFlags, + MSEHasFallDirection, + MSEHasGuidByte1, + MSEHasMovementFlags2, + MSEHasSpline, + MSEMovementFlags2, + MSEMovementFlags, + MSEFlushBits, + MSEGuidByte3, + MSETransportGuidByte7, + MSETransportTime, + MSETransportGuidByte4, + MSETransportVehicleId, + MSETransportTime2, + MSETransportGuidByte5, + MSETransportOrientation, + MSETransportPositionX, + MSETransportGuidByte6, + MSETransportGuidByte0, + MSETransportPositionY, + MSETransportGuidByte2, + MSETransportPositionZ, + MSETransportGuidByte3, + MSETransportGuidByte1, + MSETransportSeat, + MSEPitch, + MSEGuidByte6, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSEFallVerticalSpeed, + MSEFallTime, + MSEGuidByte7, + MSEOrientation, + MSEGuidByte0, + MSEGuidByte5, + MSEGuidByte4, + MSESplineElevation, + MSETimestamp, + MSEGuidByte2, + MSEGuidByte1, + MSEEnd, +}; + MovementStatusElements const MovementForceRunSpeedChangeAck[] = { MSECounter, @@ -2577,6 +2717,82 @@ MovementStatusElements const MovementForceRunSpeedChangeAck[] = MSEEnd, }; +MovementStatusElements const MovementSetCollisionHeightAck[] = +{ + MSEExtraElement, + MSEPositionX, + MSEPositionZ, + MSECounter, + MSEPositionY, + MSEHasGuidByte6, + MSEHasGuidByte4, + MSEZeroBit, // Reason bit 1 + MSEZeroBit, // Reason bit 2 + MSEHasPitch, + MSEHasGuidByte5, + MSEHasHeightChangeFailed, + MSEHasGuidByte2, + MSEHasGuidByte1, + MSEHasFallData, + MSEHasGuidByte3, + MSEHasSpline, + MSEHasGuidByte7, + MSEHasMovementFlags, + MSEHasTransportData, + MSEHasTimestamp, + MSEHasSplineElevation, + MSEHasMovementFlags2, + MSEHasOrientation, + MSEHasGuidByte0, + MSEHasTransportGuidByte4, + MSEHasTransportGuidByte3, + MSEHasTransportTime2, + MSEHasVehicleId, + MSEHasTransportGuidByte5, + MSEHasTransportGuidByte1, + MSEHasTransportGuidByte7, + MSEHasTransportGuidByte2, + MSEHasTransportGuidByte6, + MSEHasTransportGuidByte0, + MSEMovementFlags2, + MSEMovementFlags, + MSEHasFallDirection, + MSEGuidByte0, + MSEGuidByte3, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte7, + MSEGuidByte6, + MSEGuidByte2, + MSEGuidByte4, + MSETransportPositionX, + MSETransportGuidByte4, + MSETransportTime2, + MSETransportGuidByte0, + MSETransportOrientation, + MSETransportPositionY, + MSETransportGuidByte7, + MSETransportSeat, + MSETransportGuidByte5, + MSETransportGuidByte2, + MSETransportTime, + MSETransportGuidByte6, + MSETransportGuidByte3, + MSETransportGuidByte1, + MSETransportVehicleId, + MSETransportPositionZ, + MSEFallVerticalSpeed, + MSEFallTime, + MSEFallCosAngle, + MSEFallSinAngle, + MSEFallHorizontalSpeed, + MSETimestamp, + MSESplineElevation, + MSEOrientation, + MSEPitch, + MSEEnd, +}; + MovementStatusElements const MovementForceFlightSpeedChangeAck[] = { MSECounter, @@ -3135,6 +3351,7 @@ MovementStatusElements const MovementUpdateRunBackSpeed[] = MSEHasTransportGuidByte4, MSEHasTransportGuidByte0, MSEHasGuidByte7, + MSEFlushBits, MSETransportPositionX, MSETransportGuidByte2, MSETransportGuidByte5, @@ -3195,6 +3412,7 @@ MovementStatusElements const MovementUpdateWalkSpeed[] = MSEHasFallDirection, MSEMovementFlags, MSEHasGuidByte4, + MSEFlushBits, MSEPitch, MSETransportGuidByte6, MSETransportGuidByte0, @@ -3385,7 +3603,6 @@ MovementStatusElements MoveUpdateSwimBackSpeed[] = MSEHasGuidByte2, MSEHasTransportData, MSEHasGuidByte1, - MSEHasTransportGuidByte2, MSEHasTransportGuidByte1, MSEHasTransportGuidByte0, @@ -3396,7 +3613,6 @@ MovementStatusElements MoveUpdateSwimBackSpeed[] = MSEHasTransportTime2, MSEHasTransportGuidByte5, MSEHasVehicleId, - MSEHasPitch, MSEHasOrientation, MSEZeroBit, @@ -3408,21 +3624,16 @@ MovementStatusElements MoveUpdateSwimBackSpeed[] = MSEHasMovementFlags, MSEHasGuidByte0, MSEHasFallData, - MSEHasFallDirection, - MSEMovementFlags, - MSEHasTimestamp, MSEHasSplineElevation, MSEHasMovementFlags2, - MSEMovementFlags2, - + MSEFlushBits, MSEGuidByte0, MSEGuidByte4, MSEPositionY, - MSETransportGuidByte7, MSETransportVehicleId, MSETransportGuidByte6, @@ -3439,13 +3650,11 @@ MovementStatusElements MoveUpdateSwimBackSpeed[] = MSETransportTime2, MSETransportPositionY, MSETransportSeat, - MSEFallSinAngle, MSEFallCosAngle, MSEFallHorizontalSpeed, MSEFallVerticalSpeed, MSEFallTime, - MSEPitch, MSEGuidByte2, MSEGuidByte7, @@ -3459,7 +3668,7 @@ MovementStatusElements MoveUpdateSwimBackSpeed[] = MSEOrientation, MSEGuidByte6, MSEGuidByte1, - MSEEnd, + MSEEnd }; MovementStatusElements const MovementFallReset[] = @@ -3995,6 +4204,7 @@ MovementStatusElements const MovementUpdateKnockBack[] = MSEMovementFlags, MSEHasFallDirection, MSEHasOrientation, + MSEFlushBits, MSEOrientation, MSEFallSinAngle, MSEFallHorizontalSpeed, @@ -5234,6 +5444,7 @@ MovementStatusElements const MoveUpdateFlightBackSpeed[] = MSEHasFallData, MSEHasOrientation, MSEHasFallDirection, + MSEFlushBits, MSEFallCosAngle, MSEFallSinAngle, MSEFallVerticalSpeed, @@ -5425,14 +5636,6 @@ void Movement::PacketSender::Send() const if (_broadcast != NULL_OPCODE) { - if (_broadcast == SMSG_MOVE_UPDATE) - { - WorldPackets::Movement::MoveUpdate moveUpdate; - moveUpdate.Status = &_unit->m_movementInfo; - _unit->SendMessageToSet(moveUpdate.Write(), !isPlayerMovement); - return; - } - ///! Need to reset current extra element index before writing another packet if (_extraElements) _extraElements->ResetIndex(); @@ -5537,12 +5740,18 @@ MovementStatusElements const* GetMovementStatusElementsSequence(uint32 opcode) return MovementSetCanFlyAck; case CMSG_MOVE_SET_CAN_TRANSITION_BETWEEN_SWIM_AND_FLY_ACK: return MovementSetCanTransitionBetweenSwimAndFlyAck; + case CMSG_MOVE_SET_COLLISION_HEIGHT_ACK: + return MovementSetCollisionHeightAck; + case SMSG_MOVE_UPDATE_COLLISION_HEIGHT: + return MovementUpdateCollisionHeight; case CMSG_MOVE_WATER_WALK_ACK: return MovementWaterWalkAck; case MSG_MOVE_SET_RUN_MODE: return MovementSetRunMode; case MSG_MOVE_SET_WALK_MODE: return MovementSetWalkMode; + case SMSG_MOVE_UPDATE: + return MovementUpdate; case SMSG_MOVE_UPDATE_FLIGHT_SPEED: return MovementUpdateFlightSpeed; case SMSG_MOVE_UPDATE_RUN_SPEED: diff --git a/src/server/game/Movement/MovementStructures.h b/src/server/game/Movement/MovementStructures.h index e90c3279f46..703164c4950 100644 --- a/src/server/game/Movement/MovementStructures.h +++ b/src/server/game/Movement/MovementStructures.h @@ -54,6 +54,7 @@ enum MovementStatusElements MSEHasFallDirection, MSEHasSplineElevation, MSEHasSpline, + MSEHasHeightChangeFailed, MSEGuidByte0, MSEGuidByte1, @@ -99,6 +100,7 @@ enum MovementStatusElements // Special MSEZeroBit, // writes bit value 1 or skips read bit MSEOneBit, // writes bit value 0 or skips read bit + MSEFlushBits, // flushes bits MSEEnd, // marks end of parsing MSEExtraElement, // Used to signalize reading into ExtraMovementStatusElement, element sequence inside it is declared as separate array // Allowed internal elements are: GUID markers (not transport), MSEExtraFloat, MSEExtraInt8 diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 20c8f0485d2..9b32ad93e8f 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -22,245 +22,6 @@ #include "PacketUtilities.h" #include "Unit.h" -WorldPacket const* WorldPackets::Movement::MoveUpdate::Write() -{ - ObjectGuid guid = Status->guid; - ObjectGuid transportGuid = Status->transport.guid; - - _worldPacket.WriteBit(Status->HasFallData()); - _worldPacket.WriteBit(guid[3]); - _worldPacket.WriteBit(guid[6]); - _worldPacket.WriteBit(!Status->HasExtraMovementFlags()); - _worldPacket.WriteBit(Status->HasSpline()); - _worldPacket.WriteBit(!Status->HasTime()); - _worldPacket.WriteBit(guid[0]); - _worldPacket.WriteBit(guid[1]); - - if (Status->HasExtraMovementFlags()) - _worldPacket.WriteBits(Status->GetExtraMovementFlags(), 12); - - _worldPacket.WriteBit(guid[7]); - _worldPacket.WriteBit(!Status->HasMovementFlags()); - _worldPacket.WriteBit(!Status->HasOrientation()); - _worldPacket.WriteBit(guid[2]); - _worldPacket.WriteBit(!Status->HasSplineElevation()); - _worldPacket.WriteBit(Status->HasHeightChangeFailed()); - _worldPacket.WriteBit(guid[4]); - - if (Status->HasFallData()) - _worldPacket.WriteBit(Status->HasFallDirection()); - - _worldPacket.WriteBit(guid[5]); - _worldPacket.WriteBit(Status->HasTransportData()); - if (Status->HasMovementFlags()) - _worldPacket.WriteBits(Status->GetMovementFlags(), 30); - - if (Status->HasTransportData()) - { - _worldPacket.WriteBit(transportGuid[3]); - _worldPacket.WriteBit(Status->HasTransportVehicleId()); - _worldPacket.WriteBit(transportGuid[6]); - _worldPacket.WriteBit(transportGuid[1]); - _worldPacket.WriteBit(transportGuid[7]); - _worldPacket.WriteBit(transportGuid[0]); - _worldPacket.WriteBit(transportGuid[4]); - _worldPacket.WriteBit(Status->HasTransportTime2()); - _worldPacket.WriteBit(transportGuid[5]); - _worldPacket.WriteBit(transportGuid[2]); - } - - _worldPacket.WriteBit(!Status->HasPitch()); - _worldPacket.FlushBits(); - - _worldPacket.WriteByteSeq(guid[5]); - - if (Status->HasFallData()) - { - if (Status->HasFallDirection()) - { - _worldPacket << float(Status->jump.xyspeed); - _worldPacket << float(Status->jump.sinAngle); - _worldPacket << float(Status->jump.cosAngle); - } - - _worldPacket << float(Status->jump.zspeed); - _worldPacket << uint32(Status->jump.fallTime); - } - - if (Status->HasSplineElevation()) - _worldPacket << float(Status->splineElevation); - - _worldPacket.WriteByteSeq(guid[7]); - _worldPacket << float(Status->pos.GetPositionY()); - _worldPacket.WriteByteSeq(guid[3]); - - if (Status->HasTransportData()) - { - if (Status->HasTransportVehicleId()) - _worldPacket << uint32(Status->transport.vehicleId); - - _worldPacket.WriteByteSeq(transportGuid[6]); - _worldPacket << int8(Status->transport.seat); - _worldPacket.WriteByteSeq(transportGuid[5]); - _worldPacket << float(Status->transport.pos.GetPositionX()); - _worldPacket.WriteByteSeq(transportGuid[1]); - _worldPacket << float(Status->transport.pos.GetOrientation()); - _worldPacket.WriteByteSeq(transportGuid[2]); - - if (Status->HasTransportTime2()) - _worldPacket << uint32(Status->transport.time2); - - _worldPacket.WriteByteSeq(transportGuid[0]); - _worldPacket << float(Status->transport.pos.GetPositionZ()); - _worldPacket.WriteByteSeq(transportGuid[7]); - _worldPacket.WriteByteSeq(transportGuid[4]); - _worldPacket.WriteByteSeq(transportGuid[3]); - _worldPacket << float(Status->transport.pos.GetPositionY()); - _worldPacket << uint32(Status->transport.time); - } - - _worldPacket.WriteByteSeq(guid[4]); - _worldPacket << float(Status->pos.GetPositionX()); - _worldPacket.WriteByteSeq(guid[6]); - _worldPacket << float(Status->pos.GetPositionZ()); - - if (Status->HasTime()) - _worldPacket << uint32(Status->time); - - _worldPacket.WriteByteSeq(guid[2]); - - if (Status->HasPitch()) - _worldPacket << float(Status->pitch); - - _worldPacket.WriteByteSeq(guid[0]); - if (Status->HasOrientation()) - _worldPacket << float(Status->pos.GetOrientation()); - - _worldPacket.WriteByteSeq(guid[1]); - - return &_worldPacket; -} - -void WorldPackets::Movement::MoveSetCollisionHeightAck::Read() -{ - _worldPacket >> Height; - _worldPacket >> Data.Status.pos.m_positionX; - _worldPacket >> Data.Status.pos.m_positionZ; - _worldPacket >> Data.AckIndex; - _worldPacket >> Data.Status.pos.m_positionY; - Data.Status.guid[6] = _worldPacket.ReadBit(); - Data.Status.guid[4] = _worldPacket.ReadBit(); - - Reason = UpdateCollisionHeightReason(_worldPacket.ReadBits(2)); - - bool hasPitch = !_worldPacket.ReadBit(); - Data.Status.guid[5] = _worldPacket.ReadBit(); - _worldPacket.ReadBit(); // HeightChangeFailed - Data.Status.guid[2] = _worldPacket.ReadBit(); - Data.Status.guid[1] = _worldPacket.ReadBit(); - bool hasFallData = _worldPacket.ReadBit(); - Data.Status.guid[3] = _worldPacket.ReadBit(); - _worldPacket.ReadBit(); // HasSpline - Data.Status.guid[7] = _worldPacket.ReadBit(); - bool hasMovementFlags = !_worldPacket.ReadBit(); - bool hasTransportData = _worldPacket.ReadBit(); - bool hasTime = !_worldPacket.ReadBit(); - bool hasSplineElevation = !_worldPacket.ReadBit(); - bool hasExtraMovementFlags = !_worldPacket.ReadBit(); - bool hasOrientation = !_worldPacket.ReadBit(); - - Data.Status.guid[0] = _worldPacket.ReadBit(); - - bool hasTransportTime2 = false; - bool hasVehicleId = false; - if (hasTransportData) - { - Data.Status.transport.guid[4] = _worldPacket.ReadBit(); - Data.Status.transport.guid[3] = _worldPacket.ReadBit(); - hasTransportTime2 = _worldPacket.ReadBit(); - hasVehicleId = _worldPacket.ReadBit(); - Data.Status.transport.guid[5] = _worldPacket.ReadBit(); - Data.Status.transport.guid[1] = _worldPacket.ReadBit(); - Data.Status.transport.guid[7] = _worldPacket.ReadBit(); - Data.Status.transport.guid[2] = _worldPacket.ReadBit(); - Data.Status.transport.guid[6] = _worldPacket.ReadBit(); - Data.Status.transport.guid[0] = _worldPacket.ReadBit(); - } - - if (hasExtraMovementFlags) - Data.Status.flags2 = _worldPacket.ReadBits(12); - - if (hasMovementFlags) - Data.Status.flags = _worldPacket.ReadBits(30); - - bool hasFallDirection = false; - if (hasFallData) - hasFallDirection = _worldPacket.ReadBit(); - - _worldPacket.ReadByteSeq(Data.Status.guid[0]); - _worldPacket.ReadByteSeq(Data.Status.guid[3]); - _worldPacket.ReadByteSeq(Data.Status.guid[1]); - _worldPacket.ReadByteSeq(Data.Status.guid[5]); - _worldPacket.ReadByteSeq(Data.Status.guid[7]); - _worldPacket.ReadByteSeq(Data.Status.guid[6]); - _worldPacket.ReadByteSeq(Data.Status.guid[2]); - _worldPacket.ReadByteSeq(Data.Status.guid[4]); - - if (hasTransportData) - { - _worldPacket >> Data.Status.transport.pos.m_positionX; - _worldPacket.ReadByteSeq(Data.Status.transport.guid[4]); - - if (hasTransportTime2) - _worldPacket >> Data.Status.transport.time2; - - _worldPacket.ReadByteSeq(Data.Status.transport.guid[0]); - float o = 0.f; - _worldPacket >> o; - Data.Status.transport.pos.SetOrientation(o); - _worldPacket >> Data.Status.transport.pos.m_positionY; - _worldPacket.ReadByteSeq(Data.Status.transport.guid[7]); - _worldPacket >> Data.Status.transport.seat; - _worldPacket.ReadByteSeq(Data.Status.transport.guid[5]); - _worldPacket.ReadByteSeq(Data.Status.transport.guid[2]); - _worldPacket >> Data.Status.transport.time; - _worldPacket.ReadByteSeq(Data.Status.transport.guid[6]); - _worldPacket.ReadByteSeq(Data.Status.transport.guid[3]); - _worldPacket.ReadByteSeq(Data.Status.transport.guid[1]); - - if (hasVehicleId) - _worldPacket >> Data.Status.transport.vehicleId; - - _worldPacket >> Data.Status.transport.pos.m_positionZ; - } - - if (hasFallData) - { - _worldPacket >> Data.Status.jump.zspeed; - _worldPacket >> Data.Status.jump.fallTime; - - if (hasFallDirection) - { - _worldPacket >> Data.Status.jump.cosAngle; - _worldPacket >> Data.Status.jump.sinAngle; - _worldPacket >> Data.Status.jump.xyspeed; - } - } - - if (hasTime) - _worldPacket >> Data.Status.time; - if (hasSplineElevation) - _worldPacket >> Data.Status.splineElevation; - if (hasOrientation) - { - float o = 0.f; - _worldPacket >> o; - Data.Status.pos.SetOrientation(o); - } - if (hasPitch) - _worldPacket >> Data.Status.pitch; -} - WorldPacket const* WorldPackets::Movement::TransferPending::Write() { _worldPacket.WriteBit(TransferSpellID.is_initialized()); @@ -335,125 +96,6 @@ WorldPacket const* WorldPackets::Movement::MoveSetCollisionHeight::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Movement::MoveUpdateCollisionHeight::Write() -{ - _worldPacket << float(Status->pos.GetPositionZ()); - _worldPacket << float(Height); - _worldPacket << float(Status->pos.GetPositionX()); - _worldPacket << float(Status->pos.GetPositionY()); - - _worldPacket.WriteBit(Status->guid[6]); - _worldPacket.WriteBit(Status->guid[7]); - _worldPacket.WriteBit(!Status->HasSplineElevation()); - _worldPacket.WriteBit(Status->HasTransportData()); - - if (Status->HasTransportData()) - { - _worldPacket.WriteBit(Status->transport.guid[6]); - _worldPacket.WriteBit(Status->transport.guid[4]); - _worldPacket.WriteBit(Status->transport.guid[3]); - _worldPacket.WriteBit(Status->transport.guid[7]); - _worldPacket.WriteBit(Status->transport.guid[5]); - _worldPacket.WriteBit(Status->HasTransportVehicleId()); - _worldPacket.WriteBit(Status->transport.guid[1]); - _worldPacket.WriteBit(Status->transport.guid[0]); - _worldPacket.WriteBit(Status->transport.guid[2]); - _worldPacket.WriteBit(Status->HasTransportTime2()); - } - - _worldPacket.WriteBit(Status->guid[3]); - _worldPacket.WriteBit(!Status->HasOrientation()); - _worldPacket.WriteBit(Status->guid[4]); - _worldPacket.WriteBit(Status->guid[5]); - _worldPacket.WriteBit(!Status->HasTime()); - _worldPacket.WriteBit(Status->HasFallData()); - _worldPacket.WriteBit(Status->guid[0]); - _worldPacket.WriteBit(!Status->HasPitch()); - _worldPacket.WriteBit(Status->HasHeightChangeFailed()); - _worldPacket.WriteBit(Status->guid[2]); - _worldPacket.WriteBit(!Status->HasMovementFlags()); - - if (Status->HasFallData()) - _worldPacket.WriteBit(Status->HasFallDirection()); - - _worldPacket.WriteBit(Status->guid[1]); - _worldPacket.WriteBit(!Status->HasExtraMovementFlags()); - _worldPacket.WriteBit(Status->HasSpline()); - - if (Status->HasExtraMovementFlags()) - _worldPacket.WriteBits(Status->GetExtraMovementFlags(), 12); - - if (Status->HasMovementFlags()) - _worldPacket.WriteBits(Status->GetMovementFlags(), 30); - - _worldPacket.FlushBits(); - - _worldPacket.WriteByteSeq(Status->guid[3]); - - if (Status->HasTransportData()) - { - _worldPacket.WriteByteSeq(Status->transport.guid[7]); - _worldPacket << uint32(Status->transport.time); - _worldPacket.WriteByteSeq(Status->transport.guid[4]); - - if (Status->HasTransportVehicleId()) - _worldPacket << uint32(Status->transport.vehicleId); - - if (Status->HasTransportTime2()) - _worldPacket << uint32(Status->transport.time2); - - _worldPacket.WriteByteSeq(Status->transport.guid[5]); - _worldPacket << float(Status->transport.pos.GetOrientation()); - _worldPacket << float(Status->transport.pos.GetPositionX()); - _worldPacket.WriteByteSeq(Status->transport.guid[6]); - _worldPacket.WriteByteSeq(Status->transport.guid[0]); - _worldPacket << float(Status->transport.pos.GetPositionY()); - _worldPacket.WriteByteSeq(Status->transport.guid[2]); - _worldPacket << float(Status->transport.pos.GetPositionZ()); - _worldPacket.WriteByteSeq(Status->transport.guid[3]); - _worldPacket.WriteByteSeq(Status->transport.guid[1]); - _worldPacket << int8(Status->transport.seat); - } - - if (Status->HasPitch()) - _worldPacket << float(Status->pitch); - - _worldPacket.WriteByteSeq(Status->guid[6]); - - if (Status->HasFallData()) - { - if (Status->HasFallDirection()) - { - _worldPacket << float(Status->jump.cosAngle); - _worldPacket << float(Status->jump.sinAngle); - _worldPacket << float(Status->jump.xyspeed); - } - - _worldPacket << float(Status->jump.zspeed); - _worldPacket << uint32(Status->jump.fallTime); - } - - _worldPacket.WriteByteSeq(Status->guid[7]); - - if (Status->HasOrientation()) - _worldPacket << float(Status->pos.GetOrientation()); - - _worldPacket.WriteByteSeq(Status->guid[0]); - _worldPacket.WriteByteSeq(Status->guid[5]); - _worldPacket.WriteByteSeq(Status->guid[4]); - - if (Status->HasSplineElevation()) - _worldPacket << float(Status->splineElevation); - - if (Status->HasTime()) - _worldPacket << uint32(Status->time); - - _worldPacket.WriteByteSeq(Status->guid[2]); - _worldPacket.WriteByteSeq(Status->guid[1]); - - return &_worldPacket; -} - WorldPacket const* WorldPackets::Movement::MoveKnockBack::Write() { _worldPacket.WriteBit(MoverGUID[0]); diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index fad25dbeef5..57f27d89b91 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -32,30 +32,6 @@ namespace WorldPackets int32 AckIndex = 0; }; - class TC_GAME_API MoveUpdate final : public ServerPacket - { - public: - MoveUpdate() : ServerPacket(SMSG_MOVE_UPDATE) { } - - WorldPacket const* Write() override; - - MovementInfo* Status = nullptr; - }; - - class MoveSetCollisionHeightAck final : public ClientPacket - { - public: - MoveSetCollisionHeightAck(WorldPacket&& packet) : ClientPacket(CMSG_MOVE_SET_COLLISION_HEIGHT_ACK, std::move(packet)) { } - - void Read() override; - - MovementAck Data; - UpdateCollisionHeightReason Reason = UPDATE_COLLISION_HEIGHT_MOUNT; - float Height = 1.0f; - }; - - - class TransferPending final : public ServerPacket { struct ShipTransferPending @@ -119,17 +95,6 @@ namespace WorldPackets UpdateCollisionHeightReason Reason = UPDATE_COLLISION_HEIGHT_MOUNT; }; - class MoveUpdateCollisionHeight final : public ServerPacket - { - public: - MoveUpdateCollisionHeight() : ServerPacket(SMSG_MOVE_UPDATE_COLLISION_HEIGHT) { } - - WorldPacket const* Write() override; - - MovementInfo* Status = nullptr; - float Height = 1.0f; - }; - struct MoveKnockBackSpeeds { float HorzSpeed = 0.0f; diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 117d1b42b0f..c2068a43f99 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -143,7 +143,6 @@ namespace WorldPackets namespace Movement { - class MoveSetCollisionHeightAck; class SuspendTokenResponse; } @@ -652,7 +651,7 @@ class TC_GAME_API WorldSession void HandleGravityAckMessage(WorldPacket & recvData); void HandleMoveTeleportAck(WorldPacket& recvPacket); void HandleForceSpeedChangeAck(WorldPacket& recvData); - void HandleSetCollisionHeightAck(WorldPackets::Movement::MoveSetCollisionHeightAck& packet); + void HandleSetCollisionHeightAck(WorldPacket& recvData); void HandlePingOpcode(WorldPacket& recvPacket); void HandleRepopRequestOpcode(WorldPacket& recvPacket); @@ -721,6 +720,7 @@ class TC_GAME_API WorldSession void HandleSuspendTokenResponse(WorldPackets::Movement::SuspendTokenResponse& suspendTokenResponse); void HandleMovementOpcodes(WorldPacket& recvPacket); + void HandleMovementOpcode(uint16 opcode, MovementInfo& movementInfo); void HandleSetActiveMoverOpcode(WorldPacket& recvData); void HandleMoveNotActiveMover(WorldPacket& recvData); void HandleDismissControlledVehicle(WorldPacket& recvData);