aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-04-18 00:19:33 +0200
committerOvahlord <dreadkiller@gmx.de>2024-05-28 16:43:01 +0200
commitd5d90d78494f7e1f9ae91b8b029a55bc8194fd97 (patch)
tree6e9d40e248167deace43e806a3ea7ca79477ab81 /src
parentb1c0c0a5ce7d87945e2e0b309ce493d0d910b2da (diff)
Core/Movement: Fixed pauses on waypoint movement happening at wrong times when FollowPathBackwardsFromEndToStart is set and creature is going from end to start
(cherry picked from commit c5097114d1d08d6d6f7d2adc9f5f3f52f75c5818)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp17
1 files changed, 15 insertions, 2 deletions
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<Creature>::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()