diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 8a3ef614f6f..93852d53cba 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -574,6 +574,15 @@ void WorldSession::HandleMoveKnockBackAck(WorldPacket& recvData) _player->SendMessageToSet(&data, false); } +void WorldSession::HandleGravityAckMessage(WorldPacket& recvData) +{ + MovementInfo movementInfo; + GetPlayer()->ReadMovementInfo(recvData, &movementInfo); + if (movementInfo.guid != _player->m_mover->GetGUID()) + TC_LOG_ERROR("network", "HandleGravityAckMessage: incorrect mover guid: mover is " UI64FMTD " (%s - Entry: %u) and should be " UI64FMTD, uint64(movementInfo.guid), GetLogNameForGuid(movementInfo.guid), GUID_ENPART(movementInfo.guid), _player->m_mover->GetGUID()); + +} + void WorldSession::HandleMoveHoverAck(WorldPacket& recvData) { TC_LOG_DEBUG("network", "CMSG_MOVE_HOVER_ACK"); diff --git a/src/server/game/Movement/MovementStructures.cpp b/src/server/game/Movement/MovementStructures.cpp index ef1560db55e..4c1f4c75a28 100644 --- a/src/server/game/Movement/MovementStructures.cpp +++ b/src/server/game/Movement/MovementStructures.cpp @@ -5360,6 +5360,50 @@ MovementStatusElements const CastSpellEmbeddedMovement[] = MSEEnd, }; +MovementStatusElements const MoveGravityDisable[] = +{ + MSEHasGuidByte0, + MSEHasGuidByte1, + MSEHasGuidByte5, + MSEHasGuidByte7, + MSEHasGuidByte6, + MSEHasGuidByte4, + MSEHasGuidByte3, + MSEHasGuidByte2, + MSEGuidByte7, + MSEGuidByte2, + MSEGuidByte0, + MSECounter, + MSEGuidByte5, + MSEGuidByte1, + MSEGuidByte3, + MSEGuidByte4, + MSEGuidByte6, + MSEEnd, +}; + +MovementStatusElements const MoveGravityEnable[] = +{ + MSEHasGuidByte1, + MSEHasGuidByte4, + MSEHasGuidByte7, + MSEHasGuidByte5, + MSEHasGuidByte2, + MSEHasGuidByte0, + MSEHasGuidByte3, + MSEHasGuidByte6, + MSEGuidByte3, + MSECounter, + MSEGuidByte7, + MSEGuidByte6, + MSEGuidByte4, + MSEGuidByte0, + MSEGuidByte1, + MSEGuidByte5, + MSEGuidByte2, + MSEEnd, +}; + void Movement::ExtraMovementStatusElement::ReadNextElement(ByteBuffer& packet) { MovementStatusElements const element = _elements[_index++]; @@ -5699,6 +5743,10 @@ MovementStatusElements const* GetMovementStatusElementsSequence(Opcodes opcode) case CMSG_PET_CAST_SPELL: case CMSG_USE_ITEM: return CastSpellEmbeddedMovement; + case SMSG_MOVE_GRAVITY_DISABLE: + return MoveGravityDisable; + case SMSG_MOVE_GRAVITY_ENABLE: + return MoveGravityEnable; default: break; } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 6edf549627a..463b4dd352e 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -369,8 +369,8 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_SWIM_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_TURN_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_FORCE_WALK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_GRAVITY_DISABLE_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - DEFINE_OPCODE_HANDLER(CMSG_MOVE_GRAVITY_ENABLE_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_GRAVITY_DISABLE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleGravityAckMessage ); + DEFINE_OPCODE_HANDLER(CMSG_MOVE_GRAVITY_ENABLE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleGravityAckMessage ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveHoverAck ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_KNOCK_BACK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveKnockBackAck ); DEFINE_OPCODE_HANDLER(CMSG_MOVE_NOT_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveNotActiveMover ); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 480f20d8d1f..252781584d2 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -506,7 +506,7 @@ class TC_GAME_API WorldSession // Knockback void HandleMoveKnockBackAck(WorldPacket& recvPacket); - + void HandleGravityAckMessage(WorldPacket & recvData); void HandleMoveTeleportAck(WorldPacket& recvPacket); void HandleForceSpeedChangeAck(WorldPacket& recvData); void HandleSetCollisionHeightAck(WorldPacket& recvPacket);