diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-02-29 15:52:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-29 15:52:25 +0100 |
commit | fb3e6737da7795be651d36ce7493c07c7ecbdfeb (patch) | |
tree | c1b0b0e8979fbc2bf1f5271f2beb450ec49b6d3d /src | |
parent | c541eda54d7e0dddeec329a6beac2948e0b0a40b (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')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp | 11 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 75b4da4172c..44ed1ca4109 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -2257,6 +2257,11 @@ void ObjectMgr::LoadCreatures() TC_LOG_ERROR("sql.sql", "Table `creature` has creature (GUID: {} Entry: {}) with `wander_distance`< 0, set to 0.", guid, data.id); data.wander_distance = 0.0f; } + else if (data.wander_distance > 0.0f && data.wander_distance < 0.1f) + { + TC_LOG_ERROR("sql.sql", "Table `creature` has creature (GUID: {} Entry: {}) with `wander_distance` below the allowed minimum distance of 0.1, set to 0.", guid, data.id); + data.wander_distance = 0.0f; + } else if (data.movementType == RANDOM_MOTION_TYPE) { if (G3D::fuzzyEq(data.wander_distance, 0.0f)) 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); |