aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2018-06-15 12:36:53 +0200
committerShauren <shauren.trinity@gmail.com>2021-09-29 00:00:26 +0200
commit30583be0252ff02f190e74d6f5a69da3e5ea7bb5 (patch)
tree725ae3aef3d2fa88549ea6c48cd572a6d839b202
parent2bf94153bd7f3c75dc899ef56e1ce072cdbb1b55 (diff)
Core/Movement: prevent double initialization calls if the generator was deactivated before being initialized
ref #22037 (cherry picked from commit 825c5f5ec44953a9af71d50cad0b214ef867b086)
-rw-r--r--src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp2
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp3
-rw-r--r--src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp4
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp3
-rw-r--r--src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp2
12 files changed, 13 insertions, 15 deletions
diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
index c20e34c2bfb..ef0571cbdf0 100644
--- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
@@ -65,7 +65,7 @@ ChaseMovementGenerator::~ChaseMovementGenerator() = default;
void ChaseMovementGenerator::Initialize(Unit* owner)
{
- RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
owner->SetWalk(false);
diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
index e61c8d4cafe..0f6c2a0f1f1 100755
--- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
@@ -42,7 +42,7 @@ MovementGeneratorType ConfusedMovementGenerator<T>::GetMovementGeneratorType() c
template<class T>
void ConfusedMovementGenerator<T>::DoInitialize(T* owner)
{
- MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
if (!owner || !owner->IsAlive())
diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
index 536ffa736e1..88eb379e1a2 100644
--- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
@@ -48,7 +48,7 @@ MovementGeneratorType FleeingMovementGenerator<T>::GetMovementGeneratorType() co
template<class T>
void FleeingMovementGenerator<T>::DoInitialize(T* owner)
{
- MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
if (!owner || !owner->IsAlive())
diff --git a/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp
index ab8cbf734a8..00dc385884b 100644
--- a/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp
@@ -60,7 +60,7 @@ bool FlightPathMovementGenerator::GetResetPosition(Unit* /*owner*/, float& x, fl
void FlightPathMovementGenerator::DoInitialize(Player* owner)
{
- RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
DoReset(owner);
diff --git a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp
index c4b3e8cc571..1bbbae60b89 100644
--- a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp
@@ -55,7 +55,7 @@ static bool PositionOkay(Unit* owner, Unit* target, float range, Optional<ChaseA
void FollowMovementGenerator::Initialize(Unit* owner)
{
- RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
owner->StopMoving();
diff --git a/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp
index 902803e41e7..cebfc8bc449 100644
--- a/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp
@@ -37,7 +37,7 @@ MovementGeneratorType FormationMovementGenerator::GetMovementGeneratorType() con
void FormationMovementGenerator::DoInitialize(Creature* owner)
{
- RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
if (owner->HasUnitState(UNIT_STATE_NOT_MOVE) || owner->IsMovementPreventedByCasting())
@@ -80,7 +80,6 @@ void FormationMovementGenerator::DoReset(Creature* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- owner->StopMoving();
DoInitialize(owner);
}
diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
index 46c14e27fb2..dfc6a040236 100644
--- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
@@ -85,7 +85,7 @@ void HomeMovementGenerator<T>::DoInitialize(T*) { }
template<>
void HomeMovementGenerator<Creature>::DoInitialize(Creature* owner)
{
- RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
SetTargetLocation(owner);
diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
index a91a7c65df5..48456ea0eb9 100644
--- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
@@ -73,7 +73,7 @@ RotateMovementGenerator::RotateMovementGenerator(uint32 id, uint32 time, RotateD
void RotateMovementGenerator::Initialize(Unit* owner)
{
- RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
owner->StopMoving();
@@ -151,7 +151,7 @@ DistractMovementGenerator::DistractMovementGenerator(uint32 timer, float orienta
void DistractMovementGenerator::Initialize(Unit* owner)
{
- RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
// Distracted creatures stand up if not standing
diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
index 7418f345b41..817f7d58933 100755
--- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
@@ -48,7 +48,7 @@ MovementGeneratorType PointMovementGenerator<T>::GetMovementGeneratorType() cons
template<class T>
void PointMovementGenerator<T>::DoInitialize(T* owner)
{
- MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
if (_movementId == EVENT_CHARGE_PREPATH)
@@ -89,7 +89,6 @@ void PointMovementGenerator<T>::DoReset(T* owner)
{
MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- owner->StopMoving();
DoInitialize(owner);
}
diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
index 26d4268d15e..fd596671933 100644
--- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
@@ -49,7 +49,7 @@ void RandomMovementGenerator<T>::DoInitialize(T*) { }
template<>
void RandomMovementGenerator<Creature>::DoInitialize(Creature* owner)
{
- RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
if (!owner || !owner->IsAlive())
diff --git a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp
index 3b72deafe53..6f5c0506b96 100644
--- a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp
@@ -80,7 +80,7 @@ void SplineChainMovementGenerator::SendSplineFor(Unit* owner, uint32 index, uint
void SplineChainMovementGenerator::Initialize(Unit* owner)
{
- RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
if (!_chainSize)
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index 56a1bb1fb2f..e8f9a532194 100644
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -95,7 +95,7 @@ bool WaypointMovementGenerator<Creature>::GetResetPosition(Unit* /*owner*/, floa
void WaypointMovementGenerator<Creature>::DoInitialize(Creature* owner)
{
- RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING);
+ RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
if (_loadedFromDB)
{