Core/Movement: handle Resume/Pause on RandomMovementGenerator
Port From (https://github.com/TrinityCore/TrinityCore/commit/f21599dc5dab71cc0775d6ed5d2b2f6f2f4c6780)
This commit is contained in:
@@ -37,7 +37,7 @@ namespace Game.Movement
|
||||
|
||||
public override void DoInitialize(Creature owner)
|
||||
{
|
||||
RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Transitory | MovementGeneratorFlags.Deactivated);
|
||||
RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Transitory | MovementGeneratorFlags.Deactivated | MovementGeneratorFlags.Paused);
|
||||
AddFlag(MovementGeneratorFlags.Initialized);
|
||||
|
||||
if (owner == null || !owner.IsAlive())
|
||||
@@ -64,6 +64,9 @@ namespace Game.Movement
|
||||
if (!owner || !owner.IsAlive())
|
||||
return true;
|
||||
|
||||
if (HasFlag(MovementGeneratorFlags.Finalized | MovementGeneratorFlags.Paused))
|
||||
return true;
|
||||
|
||||
if (owner.HasUnitState(UnitState.NotMove) || owner.IsMovementPreventedByCasting())
|
||||
{
|
||||
AddFlag(MovementGeneratorFlags.Interrupted);
|
||||
@@ -76,10 +79,7 @@ namespace Game.Movement
|
||||
|
||||
_timer.Update(diff);
|
||||
if ((HasFlag(MovementGeneratorFlags.SpeedUpdatePending) && !owner.MoveSpline.Finalized()) || (_timer.Passed() && owner.MoveSpline.Finalized()))
|
||||
{
|
||||
RemoveFlag(MovementGeneratorFlags.Transitory);
|
||||
SetRandomLocation(owner);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -103,6 +103,29 @@ namespace Game.Movement
|
||||
}
|
||||
}
|
||||
|
||||
public override void Pause(uint timer = 0)
|
||||
{
|
||||
if (timer != 0)
|
||||
{
|
||||
AddFlag(MovementGeneratorFlags.TimedPaused);
|
||||
_timer.Reset(timer);
|
||||
RemoveFlag(MovementGeneratorFlags.Paused);
|
||||
}
|
||||
else
|
||||
{
|
||||
AddFlag(MovementGeneratorFlags.Paused);
|
||||
RemoveFlag(MovementGeneratorFlags.TimedPaused);
|
||||
}
|
||||
}
|
||||
|
||||
public override void Resume(uint overrideTimer = 0)
|
||||
{
|
||||
if (overrideTimer != 0)
|
||||
_timer.Reset(overrideTimer);
|
||||
|
||||
RemoveFlag(MovementGeneratorFlags.Paused);
|
||||
}
|
||||
|
||||
void SetRandomLocation(Creature owner)
|
||||
{
|
||||
if (owner == null)
|
||||
@@ -136,6 +159,8 @@ namespace Game.Movement
|
||||
return;
|
||||
}
|
||||
|
||||
RemoveFlag(MovementGeneratorFlags.Transitory | MovementGeneratorFlags.TimedPaused);
|
||||
|
||||
owner.AddUnitState(UnitState.RoamingMove);
|
||||
|
||||
bool walk = true;
|
||||
|
||||
Reference in New Issue
Block a user