diff options
Diffstat (limited to 'src/server/game/Handlers/MovementHandler.cpp')
| -rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index fafbb4d751e..7273b896c97 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -651,10 +651,6 @@ void WorldSession::HandleMoveSetModMovementForceMagnitudeAck(WorldPackets::Movem mover->SendMessageToSet(updateModMovementForceMagnitude.Write(), false); } -void WorldSession::HandleMoveTimeSkippedOpcode(WorldPackets::Movement::MoveTimeSkipped& /*moveTimeSkipped*/) -{ -} - void WorldSession::HandleMoveSplineDoneOpcode(WorldPackets::Movement::MoveSplineDone& moveSplineDone) { MovementInfo movementInfo = moveSplineDone.Status; @@ -696,3 +692,27 @@ void WorldSession::HandleMoveSplineDoneOpcode(WorldPackets::Movement::MoveSpline if (GetPlayer()->pvpInfo.IsHostile) GetPlayer()->CastSpell(GetPlayer(), 2479, true); } + +void WorldSession::HandleMoveTimeSkippedOpcode(WorldPackets::Movement::MoveTimeSkipped& moveTimeSkipped) +{ + Unit* mover = GetPlayer()->m_unitMovedByMe; + if (!mover) + { + TC_LOG_WARN("entities.player", "WorldSession::HandleMoveTimeSkippedOpcode wrong mover state from the unit moved by %s", GetPlayer()->GetGUID().ToString().c_str()); + return; + } + + // prevent tampered movement data + if (moveTimeSkipped.MoverGUID != mover->GetGUID()) + { + TC_LOG_WARN("entities.player", "WorldSession::HandleMoveTimeSkippedOpcode wrong guid from the unit moved by %s", GetPlayer()->GetGUID().ToString().c_str()); + return; + } + + mover->m_movementInfo.time += moveTimeSkipped.TimeSkipped; + + WorldPackets::Movement::MoveSkipTime moveSkipTime; + moveSkipTime.MoverGUID = moveTimeSkipped.MoverGUID; + moveSkipTime.TimeSkipped = moveTimeSkipped.TimeSkipped; + mover->SendMessageToSet(moveSkipTime.Write(), _player); +} |
