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)
|
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);
|
AddFlag(MovementGeneratorFlags.Initialized);
|
||||||
|
|
||||||
if (owner == null || !owner.IsAlive())
|
if (owner == null || !owner.IsAlive())
|
||||||
@@ -64,6 +64,9 @@ namespace Game.Movement
|
|||||||
if (!owner || !owner.IsAlive())
|
if (!owner || !owner.IsAlive())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (HasFlag(MovementGeneratorFlags.Finalized | MovementGeneratorFlags.Paused))
|
||||||
|
return true;
|
||||||
|
|
||||||
if (owner.HasUnitState(UnitState.NotMove) || owner.IsMovementPreventedByCasting())
|
if (owner.HasUnitState(UnitState.NotMove) || owner.IsMovementPreventedByCasting())
|
||||||
{
|
{
|
||||||
AddFlag(MovementGeneratorFlags.Interrupted);
|
AddFlag(MovementGeneratorFlags.Interrupted);
|
||||||
@@ -76,10 +79,7 @@ namespace Game.Movement
|
|||||||
|
|
||||||
_timer.Update(diff);
|
_timer.Update(diff);
|
||||||
if ((HasFlag(MovementGeneratorFlags.SpeedUpdatePending) && !owner.MoveSpline.Finalized()) || (_timer.Passed() && owner.MoveSpline.Finalized()))
|
if ((HasFlag(MovementGeneratorFlags.SpeedUpdatePending) && !owner.MoveSpline.Finalized()) || (_timer.Passed() && owner.MoveSpline.Finalized()))
|
||||||
{
|
|
||||||
RemoveFlag(MovementGeneratorFlags.Transitory);
|
|
||||||
SetRandomLocation(owner);
|
SetRandomLocation(owner);
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
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)
|
void SetRandomLocation(Creature owner)
|
||||||
{
|
{
|
||||||
if (owner == null)
|
if (owner == null)
|
||||||
@@ -136,6 +159,8 @@ namespace Game.Movement
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RemoveFlag(MovementGeneratorFlags.Transitory | MovementGeneratorFlags.TimedPaused);
|
||||||
|
|
||||||
owner.AddUnitState(UnitState.RoamingMove);
|
owner.AddUnitState(UnitState.RoamingMove);
|
||||||
|
|
||||||
bool walk = true;
|
bool walk = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user