aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2017-02-25 22:13:00 +0100
committerShauren <shauren.trinity@gmail.com>2017-02-25 22:13:00 +0100
commit047c6f072ba08e0a939cd29d268bb687a7ea7a85 (patch)
treefd60fc6bb7be17f9386d0fb9307f3ea996fd166c /src
parent47b73fefc5fc1ea657eb6325d4095992ce98687b (diff)
Core/Movement: Handle move stop embedded in spell cast requests
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp9
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp3
-rw-r--r--src/server/game/Server/WorldSession.h1
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);