From 5ace2d2c55d3536cc1a08efff436fac1f6d2661b Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 29 Sep 2021 18:35:14 -0400 Subject: [PATCH] Core/Movement: prevent double initialization calls if the generator was deactivated before being initialized Port From (https://github.com/TrinityCore/TrinityCore/commit/30583be0252ff02f190e74d6f5a69da3e5ea7bb5) --- Source/Game/Movement/Generators/ChaseMovementGenerator.cs | 2 +- Source/Game/Movement/Generators/ConfusedGenerator.cs | 2 +- Source/Game/Movement/Generators/FleeingGenerator.cs | 2 +- .../Game/Movement/Generators/FlightPathMovementGenerator.cs | 2 +- Source/Game/Movement/Generators/FollowMovementGenerator.cs | 2 +- Source/Game/Movement/Generators/FormationMovement.cs | 3 +-- Source/Game/Movement/Generators/HomeMovement.cs | 2 +- Source/Game/Movement/Generators/IdleMovement.cs | 4 ++-- Source/Game/Movement/Generators/PointMovement.cs | 3 +-- Source/Game/Movement/Generators/RandomMovement.cs | 2 +- .../Game/Movement/Generators/SplineChainMovementGenerator.cs | 2 +- Source/Game/Movement/Generators/WaypointMovement.cs | 2 +- 12 files changed, 13 insertions(+), 15 deletions(-) diff --git a/Source/Game/Movement/Generators/ChaseMovementGenerator.cs b/Source/Game/Movement/Generators/ChaseMovementGenerator.cs index 2143aab74..7bba568b9 100644 --- a/Source/Game/Movement/Generators/ChaseMovementGenerator.cs +++ b/Source/Game/Movement/Generators/ChaseMovementGenerator.cs @@ -51,7 +51,7 @@ namespace Game.Movement public override void Initialize(Unit owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); owner.SetWalk(false); diff --git a/Source/Game/Movement/Generators/ConfusedGenerator.cs b/Source/Game/Movement/Generators/ConfusedGenerator.cs index e3354f834..16cc30d73 100644 --- a/Source/Game/Movement/Generators/ConfusedGenerator.cs +++ b/Source/Game/Movement/Generators/ConfusedGenerator.cs @@ -36,7 +36,7 @@ namespace Game.Movement public override void DoInitialize(T owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Transitory | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); if (!owner || !owner.IsAlive()) diff --git a/Source/Game/Movement/Generators/FleeingGenerator.cs b/Source/Game/Movement/Generators/FleeingGenerator.cs index 8b404056e..dab7dfcbe 100644 --- a/Source/Game/Movement/Generators/FleeingGenerator.cs +++ b/Source/Game/Movement/Generators/FleeingGenerator.cs @@ -39,7 +39,7 @@ namespace Game.Movement public override void DoInitialize(T owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Transitory | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); if (owner == null || !owner.IsAlive()) diff --git a/Source/Game/Movement/Generators/FlightPathMovementGenerator.cs b/Source/Game/Movement/Generators/FlightPathMovementGenerator.cs index 37bd3dbda..7284e6660 100644 --- a/Source/Game/Movement/Generators/FlightPathMovementGenerator.cs +++ b/Source/Game/Movement/Generators/FlightPathMovementGenerator.cs @@ -38,7 +38,7 @@ namespace Game.Movement public override void DoInitialize(Player owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); DoReset(owner); diff --git a/Source/Game/Movement/Generators/FollowMovementGenerator.cs b/Source/Game/Movement/Generators/FollowMovementGenerator.cs index 2be72fe82..175827198 100644 --- a/Source/Game/Movement/Generators/FollowMovementGenerator.cs +++ b/Source/Game/Movement/Generators/FollowMovementGenerator.cs @@ -51,7 +51,7 @@ namespace Game.Movement public override void Initialize(Unit owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); owner.StopMoving(); diff --git a/Source/Game/Movement/Generators/FormationMovement.cs b/Source/Game/Movement/Generators/FormationMovement.cs index c398c6bbd..397ad71a6 100644 --- a/Source/Game/Movement/Generators/FormationMovement.cs +++ b/Source/Game/Movement/Generators/FormationMovement.cs @@ -38,7 +38,7 @@ namespace Game.Movement public override void DoInitialize(Creature owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Transitory | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); if (owner.HasUnitState(UnitState.NotMove) || owner.IsMovementPreventedByCasting()) @@ -81,7 +81,6 @@ namespace Game.Movement { RemoveFlag(MovementGeneratorFlags.Transitory | MovementGeneratorFlags.Deactivated); - owner.StopMoving(); DoInitialize(owner); } diff --git a/Source/Game/Movement/Generators/HomeMovement.cs b/Source/Game/Movement/Generators/HomeMovement.cs index 3092730f7..fcddf18ca 100644 --- a/Source/Game/Movement/Generators/HomeMovement.cs +++ b/Source/Game/Movement/Generators/HomeMovement.cs @@ -33,7 +33,7 @@ namespace Game.AI public override void DoInitialize(T owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); SetTargetLocation(owner); diff --git a/Source/Game/Movement/Generators/IdleMovement.cs b/Source/Game/Movement/Generators/IdleMovement.cs index 2147b6995..a50a85fd2 100644 --- a/Source/Game/Movement/Generators/IdleMovement.cs +++ b/Source/Game/Movement/Generators/IdleMovement.cs @@ -76,7 +76,7 @@ namespace Game.Movement public override void Initialize(Unit owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); owner.StopMoving(); @@ -161,7 +161,7 @@ namespace Game.Movement public override void Initialize(Unit owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); // Distracted creatures stand up if not standing diff --git a/Source/Game/Movement/Generators/PointMovement.cs b/Source/Game/Movement/Generators/PointMovement.cs index 63e08d4c5..6024f4e45 100644 --- a/Source/Game/Movement/Generators/PointMovement.cs +++ b/Source/Game/Movement/Generators/PointMovement.cs @@ -40,7 +40,7 @@ namespace Game.Movement public override void DoInitialize(T owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); if (_movementId == EventId.ChargePrepath) @@ -84,7 +84,6 @@ namespace Game.Movement { RemoveFlag(MovementGeneratorFlags.Transitory | MovementGeneratorFlags.Deactivated); - owner.StopMoving(); DoInitialize(owner); } diff --git a/Source/Game/Movement/Generators/RandomMovement.cs b/Source/Game/Movement/Generators/RandomMovement.cs index 46178eda2..e8bef3b78 100644 --- a/Source/Game/Movement/Generators/RandomMovement.cs +++ b/Source/Game/Movement/Generators/RandomMovement.cs @@ -38,7 +38,7 @@ namespace Game.Movement public override void DoInitialize(Creature owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Transitory | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); if (owner == null || !owner.IsAlive()) diff --git a/Source/Game/Movement/Generators/SplineChainMovementGenerator.cs b/Source/Game/Movement/Generators/SplineChainMovementGenerator.cs index cb01510c8..318d4f38e 100644 --- a/Source/Game/Movement/Generators/SplineChainMovementGenerator.cs +++ b/Source/Game/Movement/Generators/SplineChainMovementGenerator.cs @@ -59,7 +59,7 @@ namespace Game.Movement public override void Initialize(Unit owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Deactivated); AddFlag(MovementGeneratorFlags.Initialized); if (_chainSize == 0) diff --git a/Source/Game/Movement/Generators/WaypointMovement.cs b/Source/Game/Movement/Generators/WaypointMovement.cs index 915bee971..3a2ff6b24 100644 --- a/Source/Game/Movement/Generators/WaypointMovement.cs +++ b/Source/Game/Movement/Generators/WaypointMovement.cs @@ -95,7 +95,7 @@ namespace Game.Movement public override void DoInitialize(Creature owner) { - RemoveFlag(MovementGeneratorFlags.InitializationPending); + RemoveFlag(MovementGeneratorFlags.InitializationPending | MovementGeneratorFlags.Transitory | MovementGeneratorFlags.Deactivated); if (_loadedFromDB) {