diff options
author | Chaouki Dhib <chaodhib@gmail.com> | 2019-02-02 21:15:19 +0100 |
---|---|---|
committer | Giacomo Pozzoni <giacomopoz@gmail.com> | 2019-02-02 21:15:19 +0100 |
commit | f9ed72e351ecdafe77da2036d9fd68e46da2f3ab (patch) | |
tree | e508494199f5263bd18e911f086dbaef7d23e066 | |
parent | 46c7446bd4ef606b1091c1582df50e027fab28b6 (diff) |
Core/Movement: Implement move time skipped handler (#22994)
* Implement CMSG_MOVE_TIME_SKIPPED handler and move it to MovementHandler.cpp
* Add better error handling
* Update MovementHandler.cpp
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 23 | ||||
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 32 |
2 files changed, 32 insertions, 23 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index e4db1de2edd..ea24317911c 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -871,29 +871,6 @@ void WorldSession::HandleNextCinematicCamera(WorldPacket& /*recvData*/) GetPlayer()->GetCinematicMgr()->BeginCinematic(); } -void WorldSession::HandleMoveTimeSkippedOpcode(WorldPacket& recvData) -{ - /* WorldSession::Update(getMSTime());*/ - TC_LOG_DEBUG("network", "WORLD: Received CMSG_MOVE_TIME_SKIPPED"); - - ObjectGuid guid; - recvData >> guid.ReadAsPacked(); - recvData.read_skip<uint32>(); - /* - uint64 guid; - uint32 time_skipped; - recvData >> guid; - recvData >> time_skipped; - TC_LOG_DEBUG("network", "WORLD: CMSG_MOVE_TIME_SKIPPED"); - - //// @todo - must be need use in Trinity - We substract server Lags to move time (AntiLags) - for exmaple - GetPlayer()->ModifyLastMoveTime(-int32(time_skipped)); - */ -} - void WorldSession::HandleFeatherFallAck(WorldPacket& recvData) { TC_LOG_DEBUG("network", "WORLD: CMSG_MOVE_FEATHER_FALL_ACK"); diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index f8528577147..c12841d7e0f 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -608,3 +608,35 @@ void WorldSession::HandleSummonResponseOpcode(WorldPacket& recvData) _player->SummonIfPossible(agree); } + +void WorldSession::HandleMoveTimeSkippedOpcode(WorldPacket& recvData) +{ + TC_LOG_DEBUG("network", "WORLD: Received CMSG_MOVE_TIME_SKIPPED"); + + ObjectGuid guid; + uint32 timeSkipped; + recvData >> guid.ReadAsPacked(); + recvData >> timeSkipped; + + Unit* mover = GetPlayer()->m_unitMovedByMe; + + if (!mover) + { + TC_LOG_WARN("entities.player", "WorldSession::HandleMoveTimeSkippedOpcode wrong mover state from the unit moved by the player %s", GetPlayer()->GetGUID().ToString().c_str()); + return; + } + + // prevent tampered movement data + if (guid != mover->GetGUID()) + { + TC_LOG_WARN("entities.player", "WorldSession::HandleMoveTimeSkippedOpcode wrong guid from the unit moved by the player %s", GetPlayer()->GetGUID().ToString().c_str()); + return; + } + + mover->m_movementInfo.time += timeSkipped; + + WorldPacket data(MSG_MOVE_TIME_SKIPPED, recvData.size()); + data << guid.WriteAsPacked(); + data << timeSkipped; + GetPlayer()->SendMessageToSet(&data, false); +} |