aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Movement/MotionMaster.cpp15
-rwxr-xr-xsrc/server/game/Movement/MovementGenerator.h12
-rw-r--r--src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp7
-rw-r--r--src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h4
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp18
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h4
-rw-r--r--src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp17
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h4
-rw-r--r--src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp10
-rw-r--r--src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.h4
-rw-r--r--src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp8
-rw-r--r--src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h4
-rw-r--r--src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp9
-rw-r--r--src/server/game/Movement/MovementGenerators/FormationMovementGenerator.h4
-rw-r--r--src/server/game/Movement/MovementGenerators/GenericMovementGenerator.cpp9
-rw-r--r--src/server/game/Movement/MovementGenerators/GenericMovementGenerator.h4
-rw-r--r--src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp11
-rw-r--r--src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h4
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp22
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/IdleMovementGenerator.h12
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp19
-rw-r--r--src/server/game/Movement/MovementGenerators/PointMovementGenerator.h4
-rw-r--r--src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp14
-rw-r--r--src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h4
-rw-r--r--src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp20
-rw-r--r--src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h4
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp8
-rwxr-xr-xsrc/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h4
28 files changed, 142 insertions, 117 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index b667010f458..41a602d3799 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -300,20 +300,27 @@ void MotionMaster::Update(uint32 diff)
AddFlag(MOTIONMASTER_FLAG_UPDATE);
+ enum class InitState : uint8
+ {
+ Failed,
+ Success,
+ AlreadyInitialized
+ } initializationState = InitState::AlreadyInitialized;
+
MovementGenerator* top = GetCurrentMovementGenerator();
if (HasFlag(MOTIONMASTER_FLAG_STATIC_INITIALIZATION_PENDING) && IsStatic(top))
{
RemoveFlag(MOTIONMASTER_FLAG_STATIC_INITIALIZATION_PENDING);
- top->Initialize(_owner);
+ initializationState = top->Initialize(_owner) ? InitState::Success : InitState::Failed;
}
if (top->HasFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING))
- top->Initialize(_owner);
+ initializationState = top->Initialize(_owner) ? InitState::Success : InitState::Failed;
if (top->HasFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED))
- top->Reset(_owner);
+ initializationState = top->Reset(_owner) ? InitState::Success : InitState::Failed;
ASSERT(!top->HasFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED), "MotionMaster:Update: update called on an uninitialized top! (%s) (type: %u, flags: %u)", _owner->GetGUID().ToString().c_str(), top->GetMovementGeneratorType(), top->Flags);
- if (!top->Update(_owner, diff))
+ if (initializationState == InitState::Failed || !top->Update(_owner, initializationState == InitState::AlreadyInitialized ? diff : 0))
{
ASSERT(top == GetCurrentMovementGenerator(), "MotionMaster::Update: top was modified while updating! (%s)", _owner->GetGUID().ToString().c_str());
diff --git a/src/server/game/Movement/MovementGenerator.h b/src/server/game/Movement/MovementGenerator.h
index 9c51fecf9dd..b268f8ee6b4 100755
--- a/src/server/game/Movement/MovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerator.h
@@ -51,9 +51,9 @@ class TC_GAME_API MovementGenerator
virtual ~MovementGenerator();
// on top first update
- virtual void Initialize(Unit*) = 0;
+ virtual bool Initialize(Unit*) = 0;
// on top reassign
- virtual void Reset(Unit*) = 0;
+ virtual bool Reset(Unit*) = 0;
// on top on MotionMaster::Update
virtual bool Update(Unit*, uint32 diff) = 0;
// on current top if another movement replaces
@@ -86,14 +86,14 @@ template<class T, class D>
class MovementGeneratorMedium : public MovementGenerator
{
public:
- void Initialize(Unit* owner) override
+ bool Initialize(Unit* owner) override
{
- (static_cast<D*>(this))->DoInitialize(static_cast<T*>(owner));
+ return (static_cast<D*>(this))->DoInitialize(static_cast<T*>(owner));
}
- void Reset(Unit* owner) override
+ bool Reset(Unit* owner) override
{
- (static_cast<D*>(this))->DoReset(static_cast<T*>(owner));
+ return (static_cast<D*>(this))->DoReset(static_cast<T*>(owner));
}
bool Update(Unit* owner, uint32 diff) override
diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
index e6e68190d80..447fb4629bc 100644
--- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
@@ -75,20 +75,21 @@ ChaseMovementGenerator::ChaseMovementGenerator(Unit *target, Optional<ChaseRange
}
ChaseMovementGenerator::~ChaseMovementGenerator() = default;
-void ChaseMovementGenerator::Initialize(Unit* /*owner*/)
+bool ChaseMovementGenerator::Initialize(Unit* /*owner*/)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED | MOVEMENTGENERATOR_FLAG_INFORM_ENABLED);
_path = nullptr;
_lastTargetPosition.reset();
+ return true;
}
-void ChaseMovementGenerator::Reset(Unit* owner)
+bool ChaseMovementGenerator::Reset(Unit* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- Initialize(owner);
+ return Initialize(owner);
}
bool ChaseMovementGenerator::Update(Unit* owner, uint32 diff)
diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h
index 6010f164d13..ba23cc0ea2f 100644
--- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h
@@ -34,8 +34,8 @@ class ChaseMovementGenerator : public MovementGenerator, public AbstractFollower
explicit ChaseMovementGenerator(Unit* target, Optional<ChaseRange> range = {}, Optional<ChaseAngle> angle = {});
~ChaseMovementGenerator();
- void Initialize(Unit*) override;
- void Reset(Unit*) override;
+ bool Initialize(Unit*) override;
+ bool Reset(Unit*) override;
bool Update(Unit*, uint32) override;
void Deactivate(Unit*) override;
void Finalize(Unit*, bool, bool) override;
diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
index 77331379a75..ea6716f9c7f 100755
--- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp
@@ -40,29 +40,29 @@ MovementGeneratorType ConfusedMovementGenerator<T>::GetMovementGeneratorType() c
}
template<class T>
-void ConfusedMovementGenerator<T>::DoInitialize(T* owner)
+bool ConfusedMovementGenerator<T>::DoInitialize(T* owner)
{
MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
if (!owner || !owner->IsAlive())
- return;
+ return false;
// TODO: UNIT_FIELD_FLAGS should not be handled by generators
owner->SetUnitFlag(UNIT_FLAG_CONFUSED);
- owner->StopMoving();
_timer.Reset(0);
owner->GetPosition(_x, _y, _z);
_path = nullptr;
+ return true;
}
template<class T>
-void ConfusedMovementGenerator<T>::DoReset(T* owner)
+bool ConfusedMovementGenerator<T>::DoReset(T* owner)
{
MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- DoInitialize(owner);
+ return DoInitialize(owner);
}
template<class T>
@@ -167,10 +167,10 @@ template ConfusedMovementGenerator<Player>::ConfusedMovementGenerator();
template ConfusedMovementGenerator<Creature>::ConfusedMovementGenerator();
template MovementGeneratorType ConfusedMovementGenerator<Player>::GetMovementGeneratorType() const;
template MovementGeneratorType ConfusedMovementGenerator<Creature>::GetMovementGeneratorType() const;
-template void ConfusedMovementGenerator<Player>::DoInitialize(Player*);
-template void ConfusedMovementGenerator<Creature>::DoInitialize(Creature*);
-template void ConfusedMovementGenerator<Player>::DoReset(Player*);
-template void ConfusedMovementGenerator<Creature>::DoReset(Creature*);
+template bool ConfusedMovementGenerator<Player>::DoInitialize(Player*);
+template bool ConfusedMovementGenerator<Creature>::DoInitialize(Creature*);
+template bool ConfusedMovementGenerator<Player>::DoReset(Player*);
+template bool ConfusedMovementGenerator<Creature>::DoReset(Creature*);
template bool ConfusedMovementGenerator<Player>::DoUpdate(Player*, uint32);
template bool ConfusedMovementGenerator<Creature>::DoUpdate(Creature*, uint32);
template void ConfusedMovementGenerator<Player>::DoDeactivate(Player*);
diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h
index 380c63f861b..ba217a2242f 100755
--- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h
@@ -31,8 +31,8 @@ class ConfusedMovementGenerator : public MovementGeneratorMedium<T, ConfusedMove
MovementGeneratorType GetMovementGeneratorType() const override;
- void DoInitialize(T*);
- void DoReset(T*);
+ bool DoInitialize(T*);
+ bool DoReset(T*);
bool DoUpdate(T*, uint32);
void DoDeactivate(T*);
void DoFinalize(T*, bool, bool);
diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
index 66d596e3c12..95aac0aecf3 100644
--- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp
@@ -45,27 +45,28 @@ MovementGeneratorType FleeingMovementGenerator<T>::GetMovementGeneratorType() co
}
template<class T>
-void FleeingMovementGenerator<T>::DoInitialize(T* owner)
+bool FleeingMovementGenerator<T>::DoInitialize(T* owner)
{
MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
if (!owner || !owner->IsAlive())
- return;
+ return false;
// TODO: UNIT_FIELD_FLAGS should not be handled by generators
owner->SetUnitFlag(UNIT_FLAG_FLEEING);
_path = nullptr;
SetTargetLocation(owner);
+ return true;
}
template<class T>
-void FleeingMovementGenerator<T>::DoReset(T* owner)
+bool FleeingMovementGenerator<T>::DoReset(T* owner)
{
MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- DoInitialize(owner);
+ return DoInitialize(owner);
}
template<class T>
@@ -223,10 +224,10 @@ template FleeingMovementGenerator<Player>::FleeingMovementGenerator(ObjectGuid);
template FleeingMovementGenerator<Creature>::FleeingMovementGenerator(ObjectGuid);
template MovementGeneratorType FleeingMovementGenerator<Player>::GetMovementGeneratorType() const;
template MovementGeneratorType FleeingMovementGenerator<Creature>::GetMovementGeneratorType() const;
-template void FleeingMovementGenerator<Player>::DoInitialize(Player*);
-template void FleeingMovementGenerator<Creature>::DoInitialize(Creature*);
-template void FleeingMovementGenerator<Player>::DoReset(Player*);
-template void FleeingMovementGenerator<Creature>::DoReset(Creature*);
+template bool FleeingMovementGenerator<Player>::DoInitialize(Player*);
+template bool FleeingMovementGenerator<Creature>::DoInitialize(Creature*);
+template bool FleeingMovementGenerator<Player>::DoReset(Player*);
+template bool FleeingMovementGenerator<Creature>::DoReset(Creature*);
template bool FleeingMovementGenerator<Player>::DoUpdate(Player*, uint32);
template bool FleeingMovementGenerator<Creature>::DoUpdate(Creature*, uint32);
template void FleeingMovementGenerator<Player>::DoDeactivate(Player*);
diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h
index 1b44e92dff1..cd183efad9f 100755
--- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h
@@ -34,8 +34,8 @@ class FleeingMovementGenerator : public MovementGeneratorMedium<T, FleeingMoveme
MovementGeneratorType GetMovementGeneratorType() const override;
- void DoInitialize(T*);
- void DoReset(T*);
+ bool DoInitialize(T*);
+ bool DoReset(T*);
bool DoUpdate(T*, uint32);
void DoDeactivate(T*);
void DoFinalize(T*, bool, bool);
diff --git a/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp
index 3d0bc4f8ee3..52f9fa107a7 100644
--- a/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.cpp
@@ -58,16 +58,17 @@ bool FlightPathMovementGenerator::GetResetPosition(Unit* /*owner*/, float& x, fl
return true;
}
-void FlightPathMovementGenerator::DoInitialize(Player* owner)
+bool FlightPathMovementGenerator::DoInitialize(Player* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
- DoReset(owner);
+ bool returnValue = DoReset(owner);
InitEndGridInfo();
+ return returnValue;
}
-void FlightPathMovementGenerator::DoReset(Player* owner)
+bool FlightPathMovementGenerator::DoReset(Player* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
@@ -80,7 +81,7 @@ void FlightPathMovementGenerator::DoReset(Player* owner)
if (currentNodeId == end)
{
TC_LOG_DEBUG("movement.flightpath", "FlightPathMovementGenerator::DoReset: trying to start a flypath from the end point. {}", owner->GetDebugInfo());
- return;
+ return false;
}
Movement::MoveSplineInit init(owner);
@@ -95,6 +96,7 @@ void FlightPathMovementGenerator::DoReset(Player* owner)
init.SetFly();
init.SetVelocity(PLAYER_FLIGHT_SPEED);
init.Launch();
+ return true;
}
bool FlightPathMovementGenerator::DoUpdate(Player* owner, uint32 /*diff*/)
diff --git a/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.h
index 5ed2366fcbb..6fa269a24fb 100644
--- a/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/FlightPathMovementGenerator.h
@@ -37,8 +37,8 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium<Player, Fligh
MovementGeneratorType GetMovementGeneratorType() const override;
bool GetResetPosition(Unit* owner, float& x, float& y, float& z) override;
- void DoInitialize(Player*);
- void DoReset(Player*);
+ bool DoInitialize(Player*);
+ bool DoReset(Player*);
bool DoUpdate(Player*, uint32);
void DoDeactivate(Player*);
void DoFinalize(Player*, bool, bool);
diff --git a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp
index 6a66c7ddb96..0a8fbd14f7d 100644
--- a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.cpp
@@ -52,22 +52,22 @@ static bool PositionOkay(Unit* owner, Unit* target, float range, Optional<ChaseA
return !angle || angle->IsAngleOkay(target->GetRelativeAngle(owner));
}
-void FollowMovementGenerator::Initialize(Unit* owner)
+bool FollowMovementGenerator::Initialize(Unit* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED | MOVEMENTGENERATOR_FLAG_INFORM_ENABLED);
- owner->StopMoving();
UpdatePetSpeed(owner);
_path = nullptr;
_lastTargetPosition.reset();
+ return true;
}
-void FollowMovementGenerator::Reset(Unit* owner)
+bool FollowMovementGenerator::Reset(Unit* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- Initialize(owner);
+ return Initialize(owner);
}
bool FollowMovementGenerator::Update(Unit* owner, uint32 diff)
diff --git a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h
index 455a3535921..cc2c483faa3 100644
--- a/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/FollowMovementGenerator.h
@@ -36,8 +36,8 @@ class FollowMovementGenerator : public MovementGenerator, public AbstractFollowe
explicit FollowMovementGenerator(Unit* target, float range, ChaseAngle angle);
~FollowMovementGenerator();
- void Initialize(Unit*) override;
- void Reset(Unit*) override;
+ bool Initialize(Unit*) override;
+ bool Reset(Unit*) override;
bool Update(Unit*, uint32) override;
void Deactivate(Unit*) override;
void Finalize(Unit*, bool, bool) override;
diff --git a/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp
index b1261f816ed..295a9e16878 100644
--- a/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.cpp
@@ -38,7 +38,7 @@ MovementGeneratorType FormationMovementGenerator::GetMovementGeneratorType() con
return FORMATION_MOTION_TYPE;
}
-void FormationMovementGenerator::DoInitialize(Creature* owner)
+bool FormationMovementGenerator::DoInitialize(Creature* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
@@ -47,17 +47,18 @@ void FormationMovementGenerator::DoInitialize(Creature* owner)
{
AddFlag(MOVEMENTGENERATOR_FLAG_INTERRUPTED);
owner->StopMoving();
- return;
+ return true;
}
_nextMoveTimer.Reset(0);
+ return true;
}
-void FormationMovementGenerator::DoReset(Creature* owner)
+bool FormationMovementGenerator::DoReset(Creature* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- DoInitialize(owner);
+ return DoInitialize(owner);
}
bool FormationMovementGenerator::DoUpdate(Creature* owner, uint32 diff)
diff --git a/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.h
index 481e050ff07..2bf2c0df76f 100644
--- a/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/FormationMovementGenerator.h
@@ -32,8 +32,8 @@ class FormationMovementGenerator : public MovementGeneratorMedium<Creature, Form
MovementGeneratorType GetMovementGeneratorType() const override;
- void DoInitialize(Creature*);
- void DoReset(Creature*);
+ bool DoInitialize(Creature*);
+ bool DoReset(Creature*);
bool DoUpdate(Creature*, uint32);
void DoDeactivate(Creature*);
void DoFinalize(Creature*, bool, bool);
diff --git a/src/server/game/Movement/MovementGenerators/GenericMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/GenericMovementGenerator.cpp
index 9f5b437ba62..860ee97f800 100644
--- a/src/server/game/Movement/MovementGenerators/GenericMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/GenericMovementGenerator.cpp
@@ -30,13 +30,13 @@ GenericMovementGenerator::GenericMovementGenerator(std::function<void(Movement::
BaseUnitState = UNIT_STATE_ROAMING;
}
-void GenericMovementGenerator::Initialize(Unit* owner)
+bool GenericMovementGenerator::Initialize(Unit* owner)
{
if (HasFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED) && !HasFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING)) // Resume spline is not supported
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_FINALIZED);
- return;
+ return false;
}
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
@@ -45,11 +45,12 @@ void GenericMovementGenerator::Initialize(Unit* owner)
Movement::MoveSplineInit init(owner);
_splineInit(init);
_duration.Reset(init.Launch());
+ return _duration.GetExpiry() > 0ms;
}
-void GenericMovementGenerator::Reset(Unit* owner)
+bool GenericMovementGenerator::Reset(Unit* owner)
{
- Initialize(owner);
+ return Initialize(owner);
}
bool GenericMovementGenerator::Update(Unit* owner, uint32 diff)
diff --git a/src/server/game/Movement/MovementGenerators/GenericMovementGenerator.h b/src/server/game/Movement/MovementGenerators/GenericMovementGenerator.h
index 4151d9b1070..f4ba1c7d9f4 100644
--- a/src/server/game/Movement/MovementGenerators/GenericMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/GenericMovementGenerator.h
@@ -32,8 +32,8 @@ class GenericMovementGenerator : public MovementGenerator
public:
explicit GenericMovementGenerator(std::function<void(Movement::MoveSplineInit& init)>&& initializer, MovementGeneratorType type, uint32 id);
- void Initialize(Unit*) override;
- void Reset(Unit*) override;
+ bool Initialize(Unit*) override;
+ bool Reset(Unit*) override;
bool Update(Unit*, uint32) override;
void Deactivate(Unit*) override;
void Finalize(Unit*, bool, bool) override;
diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
index 9d2f98ac4b4..2400f13f469 100644
--- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp
@@ -81,10 +81,10 @@ void HomeMovementGenerator<Creature>::SetTargetLocation(Creature* owner)
}
template<class T>
-void HomeMovementGenerator<T>::DoInitialize(T*) { }
+bool HomeMovementGenerator<T>::DoInitialize(T*) { return false; }
template<>
-void HomeMovementGenerator<Creature>::DoInitialize(Creature* owner)
+bool HomeMovementGenerator<Creature>::DoInitialize(Creature* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
@@ -92,17 +92,18 @@ void HomeMovementGenerator<Creature>::DoInitialize(Creature* owner)
owner->SetNoSearchAssistance(false);
SetTargetLocation(owner);
+ return true;
}
template<class T>
-void HomeMovementGenerator<T>::DoReset(T*) { }
+bool HomeMovementGenerator<T>::DoReset(T*) { return false; }
template<>
-void HomeMovementGenerator<Creature>::DoReset(Creature* owner)
+bool HomeMovementGenerator<Creature>::DoReset(Creature* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- DoInitialize(owner);
+ return DoInitialize(owner);
}
template<class T>
diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h
index 3c0dbf696a9..5f26e53298d 100644
--- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h
@@ -28,8 +28,8 @@ class HomeMovementGenerator : public MovementGeneratorMedium< T, HomeMovementGen
MovementGeneratorType GetMovementGeneratorType() const override;
- void DoInitialize(T*);
- void DoReset(T*);
+ bool DoInitialize(T*);
+ bool DoReset(T*);
bool DoUpdate(T*, uint32);
void DoDeactivate(T*);
void DoFinalize(T*, bool, bool);
diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
index ff42921f53c..ec6b50732fb 100755
--- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp
@@ -36,14 +36,16 @@ IdleMovementGenerator::IdleMovementGenerator()
* TODO: "if (!owner->IsStopped())" is useless, each generator cleans their own STATE_MOVE, the result is that StopMoving is almost never called
* Old comment: "StopMoving is needed to make unit stop if its last movement generator expires but it should not be sent otherwise there are many redundent packets"
*/
-void IdleMovementGenerator::Initialize(Unit* owner)
+bool IdleMovementGenerator::Initialize(Unit* owner)
{
owner->StopMoving();
+ return true;
}
-void IdleMovementGenerator::Reset(Unit* owner)
+bool IdleMovementGenerator::Reset(Unit* owner)
{
owner->StopMoving();
+ return true;
}
void IdleMovementGenerator::Deactivate(Unit* /*owner*/)
@@ -70,13 +72,12 @@ RotateMovementGenerator::RotateMovementGenerator(uint32 id, uint32 time, RotateD
BaseUnitState = UNIT_STATE_ROTATING;
}
-void RotateMovementGenerator::Initialize(Unit* owner)
+bool RotateMovementGenerator::Initialize(Unit* /*owner*/)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
- owner->StopMoving();
-
+ return true;
/*
* TODO: This code should be handled somewhere else, like MovementInform
*
@@ -87,11 +88,11 @@ void RotateMovementGenerator::Initialize(Unit* owner)
*/
}
-void RotateMovementGenerator::Reset(Unit* owner)
+bool RotateMovementGenerator::Reset(Unit* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- Initialize(owner);
+ return Initialize(owner);
}
bool RotateMovementGenerator::Update(Unit* owner, uint32 diff)
@@ -148,7 +149,7 @@ DistractMovementGenerator::DistractMovementGenerator(uint32 timer, float orienta
BaseUnitState = UNIT_STATE_DISTRACTED;
}
-void DistractMovementGenerator::Initialize(Unit* owner)
+bool DistractMovementGenerator::Initialize(Unit* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
@@ -165,13 +166,14 @@ void DistractMovementGenerator::Initialize(Unit* owner)
init.DisableTransportPathTransformations();
init.SetFacing(_orientation);
init.Launch();
+ return true;
}
-void DistractMovementGenerator::Reset(Unit* owner)
+bool DistractMovementGenerator::Reset(Unit* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- Initialize(owner);
+ return Initialize(owner);
}
bool DistractMovementGenerator::Update(Unit* owner, uint32 diff)
diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h
index 7e0c89c561a..0e42eb4150b 100755
--- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h
@@ -28,8 +28,8 @@ class IdleMovementGenerator : public MovementGenerator
public:
explicit IdleMovementGenerator();
- void Initialize(Unit*) override;
- void Reset(Unit*) override;
+ bool Initialize(Unit*) override;
+ bool Reset(Unit*) override;
bool Update(Unit*, uint32) override { return true; }
void Deactivate(Unit*) override;
void Finalize(Unit*, bool, bool) override;
@@ -41,8 +41,8 @@ class RotateMovementGenerator : public MovementGenerator
public:
explicit RotateMovementGenerator(uint32 id, uint32 time, RotateDirection direction);
- void Initialize(Unit*) override;
- void Reset(Unit*) override;
+ bool Initialize(Unit*) override;
+ bool Reset(Unit*) override;
bool Update(Unit*, uint32) override;
void Deactivate(Unit*) override;
void Finalize(Unit*, bool, bool) override;
@@ -58,8 +58,8 @@ class DistractMovementGenerator : public MovementGenerator
public:
explicit DistractMovementGenerator(uint32 timer, float orientation);
- void Initialize(Unit*) override;
- void Reset(Unit*) override;
+ bool Initialize(Unit*) override;
+ bool Reset(Unit*) override;
bool Update(Unit*, uint32) override;
void Deactivate(Unit*) override;
void Finalize(Unit*, bool, bool) override;
diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
index 23c4a64025e..765da3694e2 100755
--- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp
@@ -43,7 +43,7 @@ MovementGeneratorType PointMovementGenerator<T>::GetMovementGeneratorType() cons
}
template<class T>
-void PointMovementGenerator<T>::DoInitialize(T* owner)
+bool PointMovementGenerator<T>::DoInitialize(T* owner)
{
MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
@@ -51,14 +51,14 @@ void PointMovementGenerator<T>::DoInitialize(T* owner)
if (_movementId == EVENT_CHARGE_PREPATH)
{
owner->AddUnitState(UNIT_STATE_ROAMING_MOVE);
- return;
+ return true;
}
if (owner->HasUnitState(UNIT_STATE_NOT_MOVE) || owner->IsMovementPreventedByCasting())
{
MovementGenerator::AddFlag(MOVEMENTGENERATOR_FLAG_INTERRUPTED);
owner->StopMoving();
- return;
+ return true;
}
owner->AddUnitState(UNIT_STATE_ROAMING_MOVE);
@@ -76,14 +76,15 @@ void PointMovementGenerator<T>::DoInitialize(T* owner)
// Call for creature group update
if (Creature* creature = owner->ToCreature())
creature->SignalFormationMovement();
+ return true;
}
template<class T>
-void PointMovementGenerator<T>::DoReset(T* owner)
+bool PointMovementGenerator<T>::DoReset(T* owner)
{
MovementGenerator::RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- DoInitialize(owner);
+ return DoInitialize(owner);
}
template<class T>
@@ -167,10 +168,10 @@ template PointMovementGenerator<Player>::PointMovementGenerator(uint32, float, f
template PointMovementGenerator<Creature>::PointMovementGenerator(uint32, float, float, float, bool, float, Optional<float>);
template MovementGeneratorType PointMovementGenerator<Player>::GetMovementGeneratorType() const;
template MovementGeneratorType PointMovementGenerator<Creature>::GetMovementGeneratorType() const;
-template void PointMovementGenerator<Player>::DoInitialize(Player*);
-template void PointMovementGenerator<Creature>::DoInitialize(Creature*);
-template void PointMovementGenerator<Player>::DoReset(Player*);
-template void PointMovementGenerator<Creature>::DoReset(Creature*);
+template bool PointMovementGenerator<Player>::DoInitialize(Player*);
+template bool PointMovementGenerator<Creature>::DoInitialize(Creature*);
+template bool PointMovementGenerator<Player>::DoReset(Player*);
+template bool PointMovementGenerator<Creature>::DoReset(Creature*);
template bool PointMovementGenerator<Player>::DoUpdate(Player*, uint32);
template bool PointMovementGenerator<Creature>::DoUpdate(Creature*, uint32);
template void PointMovementGenerator<Player>::DoDeactivate(Player*);
diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
index c943fa7eadb..e5d4753a35e 100644
--- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h
@@ -31,8 +31,8 @@ class PointMovementGenerator : public MovementGeneratorMedium<T, PointMovementGe
MovementGeneratorType GetMovementGeneratorType() const override;
- void DoInitialize(T*);
- void DoReset(T*);
+ bool DoInitialize(T*);
+ bool DoReset(T*);
bool DoUpdate(T*, uint32);
void DoDeactivate(T*);
void DoFinalize(T*, bool, bool);
diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
index a41db1336df..b5c26c8a952 100644
--- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
@@ -69,19 +69,18 @@ void RandomMovementGenerator<T>::Resume(uint32 overrideTimer /*= 0*/)
template MovementGeneratorType RandomMovementGenerator<Creature>::GetMovementGeneratorType() const;
template<class T>
-void RandomMovementGenerator<T>::DoInitialize(T*) { }
+bool RandomMovementGenerator<T>::DoInitialize(T*) { return false; }
template<>
-void RandomMovementGenerator<Creature>::DoInitialize(Creature* owner)
+bool RandomMovementGenerator<Creature>::DoInitialize(Creature* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED | MOVEMENTGENERATOR_FLAG_TIMED_PAUSED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
if (!owner || !owner->IsAlive())
- return;
+ return false;
_reference = owner->GetPosition();
- owner->StopMoving();
if (_wanderDistance == 0.f)
_wanderDistance = owner->GetWanderDistance();
@@ -91,17 +90,18 @@ void RandomMovementGenerator<Creature>::DoInitialize(Creature* owner)
_timer.Reset(0);
_path = nullptr;
+ return true;
}
template<class T>
-void RandomMovementGenerator<T>::DoReset(T*) { }
+bool RandomMovementGenerator<T>::DoReset(T*) { return false; }
template<>
-void RandomMovementGenerator<Creature>::DoReset(Creature* owner)
+bool RandomMovementGenerator<Creature>::DoReset(Creature* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
- DoInitialize(owner);
+ return DoInitialize(owner);
}
template<class T>
diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h
index 812297fa212..4098411d7bd 100644
--- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h
@@ -35,8 +35,8 @@ class RandomMovementGenerator : public MovementGeneratorMedium<T, RandomMovement
void Pause(uint32 timer = 0) override;
void Resume(uint32 overrideTimer = 0) override;
- void DoInitialize(T*);
- void DoReset(T*);
+ bool DoInitialize(T*);
+ bool DoReset(T*);
bool DoUpdate(T*, uint32);
void DoDeactivate(T*);
void DoFinalize(T*, bool, bool);
diff --git a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp
index baf464ebdbc..d322e922a66 100644
--- a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.cpp
@@ -51,6 +51,8 @@ uint32 SplineChainMovementGenerator::SendPathSpline(Unit* owner, float velocity,
uint32 nodeCount = path.size();
ASSERT(nodeCount > 1, "SplineChainMovementGenerator::SendPathSpline: Every path must have source & destination (size > 1)! (%s)", owner->GetGUID().ToString().c_str());
+ owner->AddUnitState(UNIT_STATE_ROAMING_MOVE);
+
Movement::MoveSplineInit init(owner);
if (nodeCount > 2)
init.MovebyPath(path);
@@ -81,7 +83,7 @@ void SplineChainMovementGenerator::SendSplineFor(Unit* owner, uint32 index, uint
}
}
-void SplineChainMovementGenerator::Initialize(Unit* owner)
+bool SplineChainMovementGenerator::Initialize(Unit* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
@@ -89,20 +91,20 @@ void SplineChainMovementGenerator::Initialize(Unit* owner)
if (!_chainSize)
{
TC_LOG_ERROR("movement", "SplineChainMovementGenerator::Initialize: couldn't initialize generator, referenced spline is empty! ({})", owner->GetGUID().ToString());
- return;
+ return false;
}
if (_nextIndex >= _chainSize)
{
TC_LOG_WARN("movement", "SplineChainMovementGenerator::Initialize: couldn't initialize generator, _nextIndex is >= _chainSize ({})", owner->GetGUID().ToString());
_msToNext = 0;
- return;
+ return false;
}
if (_nextFirstWP) // this is a resumed movegen that has to start with a partial spline
{
if (HasFlag(MOVEMENTGENERATOR_FLAG_FINALIZED))
- return;
+ return false;
SplineChainLink const& thisLink = _chain[_nextIndex];
if (_nextFirstWP >= thisLink.Points.size())
@@ -111,7 +113,6 @@ void SplineChainMovementGenerator::Initialize(Unit* owner)
_nextFirstWP = thisLink.Points.size() - 1;
}
- owner->AddUnitState(UNIT_STATE_ROAMING_MOVE);
Movement::PointsArray partial(thisLink.Points.begin() + (_nextFirstWP-1), thisLink.Points.end());
SendPathSpline(owner, thisLink.Velocity, partial);
@@ -133,14 +134,15 @@ void SplineChainMovementGenerator::Initialize(Unit* owner)
if (_nextIndex >= _chainSize)
_msToNext = 0;
}
+ return true;
}
-void SplineChainMovementGenerator::Reset(Unit* owner)
+bool SplineChainMovementGenerator::Reset(Unit* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_DEACTIVATED);
owner->StopMoving();
- Initialize(owner);
+ return Initialize(owner);
}
bool SplineChainMovementGenerator::Update(Unit* owner, uint32 diff)
@@ -174,7 +176,11 @@ bool SplineChainMovementGenerator::Update(Unit* owner, uint32 diff)
}
}
else
+ {
_msToNext -= diff;
+ if (owner->movespline->Finalized())
+ owner->ClearUnitState(UNIT_STATE_ROAMING_MOVE);
+ }
return true;
}
diff --git a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h
index 011f28bf1a3..0c48847dcba 100644
--- a/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/SplineChainMovementGenerator.h
@@ -31,8 +31,8 @@ class TC_GAME_API SplineChainMovementGenerator : public MovementGenerator
explicit SplineChainMovementGenerator(uint32 id, std::vector<SplineChainLink> const& chain, bool walk = false);
explicit SplineChainMovementGenerator(SplineChainResumeInfo const& info);
- void Initialize(Unit*) override;
- void Reset(Unit*) override;
+ bool Initialize(Unit*) override;
+ bool Reset(Unit*) override;
bool Update(Unit*, uint32) override;
void Deactivate(Unit*) override;
void Finalize(Unit*, bool, bool) override;
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
index 65181a09ac1..815e51d9512 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp
@@ -97,7 +97,7 @@ bool WaypointMovementGenerator<Creature>::GetResetPosition(Unit* /*owner*/, floa
return true;
}
-void WaypointMovementGenerator<Creature>::DoInitialize(Creature* owner)
+bool WaypointMovementGenerator<Creature>::DoInitialize(Creature* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
@@ -112,15 +112,16 @@ void WaypointMovementGenerator<Creature>::DoInitialize(Creature* owner)
if (!_path)
{
TC_LOG_ERROR("sql.sql", "WaypointMovementGenerator::DoInitialize: couldn't load path for creature ({}) (_pathId: {})", owner->GetGUID().ToString(), _pathId);
- return;
+ return false;
}
owner->StopMoving();
_nextMoveTime.Reset(1000);
+ return true;
}
-void WaypointMovementGenerator<Creature>::DoReset(Creature* owner)
+bool WaypointMovementGenerator<Creature>::DoReset(Creature* owner)
{
RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
@@ -128,6 +129,7 @@ void WaypointMovementGenerator<Creature>::DoReset(Creature* owner)
if (!HasFlag(MOVEMENTGENERATOR_FLAG_FINALIZED) && _nextMoveTime.Passed())
_nextMoveTime.Reset(1); // Needed so that Update does not behave as if node was reached
+ return true;
}
bool WaypointMovementGenerator<Creature>::DoUpdate(Creature* owner, uint32 diff)
diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
index e265c62522b..acbbf7ef2c8 100755
--- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h
@@ -44,8 +44,8 @@ class WaypointMovementGenerator<Creature> : public MovementGeneratorMedium<Creat
void Resume(uint32 overrideTimer = 0) override;
bool GetResetPosition(Unit*, float& x, float& y, float& z) override;
- void DoInitialize(Creature*);
- void DoReset(Creature*);
+ bool DoInitialize(Creature*);
+ bool DoReset(Creature*);
bool DoUpdate(Creature*, uint32);
void DoDeactivate(Creature*);
void DoFinalize(Creature*, bool, bool);