diff options
author | Machiavelli <machiavelli.trinity@gmail.com> | 2012-03-16 18:15:08 +0100 |
---|---|---|
committer | Machiavelli <machiavelli.trinity@gmail.com> | 2012-03-16 18:15:08 +0100 |
commit | 65453620e8b9775507d9d4c895f485e639f16b07 (patch) | |
tree | bddf0d8bde0d6725723c76617c7560431ec683fe /src/server/game/Handlers/MovementHandler.cpp | |
parent | cca93c7a22b13bbfb6da5c895f6aa94091bcbfdc (diff) |
Core/Movement: Do not process server side relocation if reading movementinfo from client resulted in violations (= hacking).
Diffstat (limited to 'src/server/game/Handlers/MovementHandler.cpp')
-rwxr-xr-x | src/server/game/Handlers/MovementHandler.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 7d1233c8f70..55c55ffb246 100755 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -278,6 +278,14 @@ void WorldSession::HandleMovementOpcodes(WorldPacket & recv_data) return; } + //! If some anti-cheat checks in WorldSession::ReadMovementInfo failed, do not process + //! the change of movement server-sided. + if (movementInfo.Violated) + { + recv_data.rfinish(); + return; + } + /* handle special cases */ if (movementInfo.flags & MOVEMENTFLAG_ONTRANSPORT) { @@ -485,9 +493,16 @@ void WorldSession::HandleMoveNotActiveMover(WorldPacket &recv_data) recv_data.readPackGUID(old_mover_guid); MovementInfo mi; - mi.guid = old_mover_guid; ReadMovementInfo(recv_data, &mi); + if (mi.Violated) + { + recv_data.rfinish(); + return; + } + + mi.guid = old_mover_guid; + _player->m_movementInfo = mi; } @@ -513,6 +528,13 @@ void WorldSession::HandleMoveKnockBackAck(WorldPacket & recv_data) MovementInfo movementInfo; ReadMovementInfo(recv_data, &movementInfo); + + if (movementInfo.Violated) + { + recv_data.rfinish(); + return; + } + _player->m_movementInfo = movementInfo; WorldPacket data(MSG_MOVE_KNOCK_BACK, 66); @@ -571,3 +593,4 @@ void WorldSession::HandleSummonResponseOpcode(WorldPacket& recv_data) _player->SummonIfPossible(agree); } +#undef IF_VIOLATED_RETURN
\ No newline at end of file |