diff options
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); +} |