From 5321cc20907e46510dd4c68ead6ef7081518fd4d Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 27 Dec 2021 15:45:44 -0500 Subject: [PATCH] Core/Movement: handle Resume/Pause on RandomMovementGenerator Port From (https://github.com/TrinityCore/TrinityCore/commit/f21599dc5dab71cc0775d6ed5d2b2f6f2f4c6780) --- .../Movement/Generators/RandomMovement.cs | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/Source/Game/Movement/Generators/RandomMovement.cs b/Source/Game/Movement/Generators/RandomMovement.cs index d52820649..6202fb451 100644 --- a/Source/Game/Movement/Generators/RandomMovement.cs +++ b/Source/Game/Movement/Generators/RandomMovement.cs @@ -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;