From af905468355877dd135cd6d1a793765bc2ef9eda Mon Sep 17 00:00:00 2001 From: Chaplain Date: Fri, 17 Feb 2012 00:19:14 +0300 Subject: [PATCH] Core/Movement: Fix MoveJump handling. *Closes #5238 issue *Fix possible crash in MotionMaster --- src/server/game/Movement/MotionMaster.cpp | 5 +---- src/server/game/Movement/MotionMaster.h | 7 ++++++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 954a193c498..27816753ca7 100755 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -365,10 +365,7 @@ void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float spee init.SetParabolic(max_height,0); init.SetVelocity(speedXY); init.Launch(); - if (_owner->GetTypeId() == TYPEID_PLAYER) - Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED); - else - Mutate(new EffectMovementGenerator(id), MOTION_SLOT_ACTIVE); + Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED); } void MotionMaster::MoveFall(uint32 id/*=0*/) diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 9910f8ad40a..d6144bfcc3a 100755 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -84,7 +84,12 @@ class MotionMaster //: private std::stack //typedef std::stack Impl; typedef MovementGenerator* _Ty; - void pop() { Impl[_top] = NULL; --_top; } + void pop() + { + Impl[_top] = NULL; + while (!top()) + --_top; + } void push(_Ty _Val) { ++_top; Impl[_top] = _Val; } bool needInitTop() const { return _needInit[_top]; }