Core/Movement: Fix an edge case crash in HomeMovementGenerator.

(cherry picked from commit f2067d3557)
This commit is contained in:
treeston
2016-09-11 12:41:22 +02:00
committed by joschiwald
parent 0be57d6dcf
commit e39c582532
2 changed files with 6 additions and 4 deletions

View File

@@ -44,8 +44,8 @@ void HomeMovementGenerator<Creature>::DoReset(Creature*) { }
void HomeMovementGenerator<Creature>::_setTargetLocation(Creature* owner)
{
if (owner->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED))
{ // if we are ROOT/STUNNED/DISTRACTED even after aura clear, immediately finalize - otherwise we would get stuck in evade
arrived = true;
{ // if we are ROOT/STUNNED/DISTRACTED even after aura clear, finalize on next update - otherwise we would get stuck in evade
skipToHome = true;
return;
}
@@ -61,6 +61,7 @@ void HomeMovementGenerator<Creature>::_setTargetLocation(Creature* owner)
init.SetWalk(false);
init.Launch();
skipToHome = false;
arrived = false;
owner->ClearUnitState(uint32(UNIT_STATE_ALL_STATE & ~(UNIT_STATE_EVADE | UNIT_STATE_IGNORE_PATHFINDING)));
@@ -68,6 +69,6 @@ void HomeMovementGenerator<Creature>::_setTargetLocation(Creature* owner)
bool HomeMovementGenerator<Creature>::DoUpdate(Creature* owner, const uint32 /*time_diff*/)
{
arrived = arrived || owner->movespline->Finalized();
arrived = skipToHome || owner->movespline->Finalized();
return !arrived;
}

View File

@@ -31,7 +31,7 @@ class HomeMovementGenerator<Creature> : public MovementGeneratorMedium< Creature
{
public:
HomeMovementGenerator() : arrived(false) { }
HomeMovementGenerator() : arrived(false), skipToHome(false) { }
~HomeMovementGenerator() { }
void DoInitialize(Creature*);
@@ -43,5 +43,6 @@ class HomeMovementGenerator<Creature> : public MovementGeneratorMedium< Creature
private:
void _setTargetLocation(Creature*);
bool arrived;
bool skipToHome;
};
#endif