diff --git a/src/strategy/actions/MovementActions.cpp b/src/strategy/actions/MovementActions.cpp index 6a67e01b..0dfea873 100644 --- a/src/strategy/actions/MovementActions.cpp +++ b/src/strategy/actions/MovementActions.cpp @@ -1535,6 +1535,9 @@ bool AvoidAoeAction::AvoidAuraWithDynamicObj() if (!aura || aura->IsRemoved() || aura->IsExpired()) { return false; } + if (!aura->GetOwner() || !aura->GetOwner()->IsInWorld()) { + return false; + } // Crash fix: maybe change owner due to check interval if (aura->GetType() != DYNOBJ_AURA_TYPE) { return false; diff --git a/src/strategy/actions/StayActions.cpp b/src/strategy/actions/StayActions.cpp index 1b810dd4..ca8a83b1 100644 --- a/src/strategy/actions/StayActions.cpp +++ b/src/strategy/actions/StayActions.cpp @@ -13,7 +13,6 @@ bool StayActionBase::Stay() //if (!urand(0, 10)) //botAI->PlaySound(TEXT_EMOTE_YAWN); - if (bot->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE) return false; @@ -26,12 +25,13 @@ bool StayActionBase::Stay() context->GetValue("stay time")->Set(stayTime); } - if (!bot->isMoving()) - return false; - - bot->StopMoving(); - bot->ClearUnitState(UNIT_STATE_CHASE); - bot->ClearUnitState(UNIT_STATE_FOLLOW); + // Stop the bot from moving immediately when action is called + if (bot->isMoving()) + { + bot->StopMoving(); + bot->ClearUnitState(UNIT_STATE_CHASE); + bot->ClearUnitState(UNIT_STATE_FOLLOW); + } return true; } @@ -43,7 +43,8 @@ bool StayAction::Execute(Event event) bool StayAction::isUseful() { - return !AI_VALUE2(bool, "moving", "self target"); + // Only useful if the bot is currently moving + return AI_VALUE2(bool, "moving", "self target"); } bool SitAction::Execute(Event event)