aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/MovementHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/MovementHandler.cpp')
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp28
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);
+}