aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Movement
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2024-02-29 15:52:25 +0100
committerGitHub <noreply@github.com>2024-02-29 15:52:25 +0100
commitfb3e6737da7795be651d36ce7493c07c7ecbdfeb (patch)
treec1b0b0e8979fbc2bf1f5271f2beb450ec49b6d3d /src/server/game/Movement
parentc541eda54d7e0dddeec329a6beac2948e0b0a40b (diff)
Core/Movement: require a minimum wander_distance value of 0.1 and check the path length of generated random movement (#29766)
this serves as a means to reduce the console spam caused by failed spline validation
Diffstat (limited to 'src/server/game/Movement')
-rw-r--r--src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
index dc5ccd1ab8b..df49180b40d 100644
--- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp
@@ -124,8 +124,8 @@ void RandomMovementGenerator<Creature>::SetRandomLocation(Creature* owner)
}
Position position(_reference);
- float distance = frand(0.f, _wanderDistance);
- float angle = frand(0.f, float(M_PI * 2));
+ float distance = _wanderDistance > 0.1f ? frand(0.1f, _wanderDistance) : _wanderDistance;
+ float angle = frand(0.f, static_cast<float>(M_PI * 2));
owner->MovePositionToFirstCollision(position, distance, angle);
// Check if the destination is in LOS
@@ -152,6 +152,13 @@ void RandomMovementGenerator<Creature>::SetRandomLocation(Creature* owner)
return;
}
+ if (_path->GetPathLength() < 0.1f)
+ {
+ // the path is too short for the spline system to be accepted. Let's try again soon.
+ _timer.Reset(500);
+ return;
+ }
+
RemoveFlag(MOVEMENTGENERATOR_FLAG_TRANSITORY | MOVEMENTGENERATOR_FLAG_TIMED_PAUSED);
owner->AddUnitState(UNIT_STATE_ROAMING_MOVE);