diff options
author | Shauren <shauren.trinity@gmail.com> | 2017-02-25 22:13:00 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-02-25 22:13:00 +0100 |
commit | 047c6f072ba08e0a939cd29d268bb687a7ea7a85 (patch) | |
tree | fd60fc6bb7be17f9386d0fb9307f3ea996fd166c /src | |
parent | 47b73fefc5fc1ea657eb6325d4095992ce98687b (diff) |
Core/Movement: Handle move stop embedded in spell cast requests
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Handlers/SpellHandler.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 1 |
3 files changed, 9 insertions, 4 deletions
diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 14b60e99d72..9bd0907a246 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -289,8 +289,11 @@ void WorldSession::HandleMoveTeleportAck(WorldPackets::Movement::MoveTeleportAck void WorldSession::HandleMovementOpcodes(WorldPackets::Movement::ClientPlayerMovement& packet) { - OpcodeClient opcode = packet.GetOpcode(); + HandleMovementOpcode(packet.GetOpcode(), packet.movementInfo); +} +void WorldSession::HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movementInfo) +{ Unit* mover = _player->m_unitMovedByMe; ASSERT(mover != nullptr); // there must always be a mover @@ -301,9 +304,7 @@ void WorldSession::HandleMovementOpcodes(WorldPackets::Movement::ClientPlayerMov if (plrMover && plrMover->IsBeingTeleported()) return; - GetPlayer()->ValidateMovementInfo(&packet.movementInfo); - - MovementInfo& movementInfo = packet.movementInfo; + GetPlayer()->ValidateMovementInfo(&movementInfo); // prevent tampered movement data if (movementInfo.guid != mover->GetGUID()) diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index d4ed883e680..94e4e561566 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -301,6 +301,9 @@ void WorldSession::HandleCastSpellOpcode(WorldPackets::Spells::CastSpell& cast) spellInfo = actualSpellInfo; } + if (cast.Cast.MoveUpdate) + HandleMovementOpcode(CMSG_MOVE_STOP, *cast.Cast.MoveUpdate); + Spell* spell = new Spell(caster, spellInfo, TRIGGERED_NONE, ObjectGuid::Empty, false); WorldPackets::Spells::SpellPrepare spellPrepare; diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 1469a1f1d4f..1f15006a0cb 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -1262,6 +1262,7 @@ class TC_GAME_API WorldSession void HandleSuspendTokenResponse(WorldPackets::Movement::SuspendTokenResponse& suspendTokenResponse); void HandleMovementOpcodes(WorldPackets::Movement::ClientPlayerMovement& packet); + void HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movementInfo); void HandleSetActiveMoverOpcode(WorldPackets::Movement::SetActiveMover& packet); void HandleMoveDismissVehicle(WorldPackets::Vehicle::MoveDismissVehicle& moveDismissVehicle); void HandleRequestVehiclePrevSeat(WorldPackets::Vehicle::RequestVehiclePrevSeat& requestVehiclePrevSeat); |