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 /src/server/game/Handlers/MovementHandler.cpp | |
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
Diffstat (limited to 'src/server/game/Handlers/MovementHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
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); +} |