From c5097114d1d08d6d6f7d2adc9f5f3f52f75c5818 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 18 Apr 2024 00:19:33 +0200 Subject: Core/Movement: Fixed pauses on waypoint movement happening at wrong times when FollowPathBackwardsFromEndToStart is set and creature is going from end to start --- .../MovementGenerators/WaypointMovementGenerator.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 11ec5c65d38..f41683bc3d4 100644 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -284,10 +284,23 @@ void WaypointMovementGenerator::OnArrived(Creature* owner) ASSERT(_currentNode < GetPath()->Nodes.size(), "WaypointMovementGenerator::OnArrived: tried to reference a node id (%u) which is not included in path (%u)", _currentNode, GetPath()->Id); WaypointNode const& waypoint = GetPath()->Nodes[_currentNode]; - if (waypoint.Delay) + + Milliseconds delay = [&] + { + if (!_isReturningToStart) + return Milliseconds(waypoint.Delay); + + // when traversing the path backwards, use delays from "next" waypoint to make sure pauses happen between the same points as in forward direction + if (_currentNode > 0) + return Milliseconds(GetPath()->Nodes[_currentNode - 1].Delay); + + return 0ms; + }(); + + if (delay > 0ms) { owner->ClearUnitState(UNIT_STATE_ROAMING_MOVE); - _nextMoveTime.Reset(waypoint.Delay); + _nextMoveTime.Reset(delay); } if (_waitTimeRangeAtPathEnd && IsFollowingPathBackwardsFromEndToStart() -- cgit v1.2.3