From 43d12d1303078e37e3e40ca1b1cbd343087cd32b Mon Sep 17 00:00:00 2001 From: megamage Date: Sun, 31 May 2009 23:15:06 -0500 Subject: *Fix a crash caused by possessed creatures. Thanks to Amit86 --HG-- branch : trunk --- src/game/MovementHandler.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp index 2fa6adf5a13..072236af931 100644 --- a/src/game/MovementHandler.cpp +++ b/src/game/MovementHandler.cpp @@ -278,16 +278,6 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data ) movementInfo.t_seat = -1; } - // fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map). - if (opcode == MSG_MOVE_FALL_LAND && plMover && !plMover->isInFlight()) - plMover->HandleFall(movementInfo); - - if (plMover && ((movementInfo.flags & MOVEMENTFLAG_SWIMMING) != 0) != plMover->IsInWater()) - { - // now client not include swimming flag in case jumping under water - plMover->SetInWater( !plMover->IsInWater() || plMover->GetBaseMap()->IsUnderWater(movementInfo.x, movementInfo.y, movementInfo.z) ); - } - /*----------------------*/ /* process position-change */ @@ -341,11 +331,18 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data ) } else // creature charmed { - if(Map *map = mover->GetMap()) - { - map->CreatureRelocation((Creature*)mover, movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o); - } - mover->SetUnitMovementFlags(movementInfo.flags); + mover->GetMap()->CreatureRelocation((Creature*)mover, movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o); + } + + // Aura removal may remove mover + // fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map). + if (opcode == MSG_MOVE_FALL_LAND && plMover && !plMover->isInFlight()) + plMover->HandleFall(movementInfo); + + if (plMover && ((movementInfo.flags & MOVEMENTFLAG_SWIMMING) != 0) != plMover->IsInWater()) + { + // now client not include swimming flag in case jumping under water + plMover->SetInWater( !plMover->IsInWater() || plMover->GetBaseMap()->IsUnderWater(movementInfo.x, movementInfo.y, movementInfo.z) ); } } -- cgit v1.2.3