mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Movement: prevent double initialization calls if the generator was deactivated before being initialized
ref #22037
(cherry picked from commit 825c5f5ec4)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user