diff --git a/Source/Game/Movement/Generators/ConfusedGenerator.cs b/Source/Game/Movement/Generators/ConfusedMovementGenerator.cs similarity index 91% rename from Source/Game/Movement/Generators/ConfusedGenerator.cs rename to Source/Game/Movement/Generators/ConfusedMovementGenerator.cs index b1efa2e62..1df3bcfde 100644 --- a/Source/Game/Movement/Generators/ConfusedGenerator.cs +++ b/Source/Game/Movement/Generators/ConfusedMovementGenerator.cs @@ -21,9 +21,9 @@ using System; namespace Game.Movement { - public class ConfusedGenerator : MovementGeneratorMedium where T : Unit + public class ConfusedMovementGenerator : MovementGeneratorMedium where T : Unit { - public ConfusedGenerator() + public ConfusedMovementGenerator() { _timer = new TimeTracker(); _reference = new(); @@ -83,6 +83,14 @@ namespace Game.Movement float angle = RandomHelper.FRand(0.0f, 1.0f) * MathF.PI * 2.0f; owner.MovePositionToFirstCollision(destination, distance, angle); + // Check if the destination is in LOS + if (!owner.IsWithinLOS(destination.GetPositionX(), destination.GetPositionY(), destination.GetPositionZ())) + { + // Retry later on + _timer.Reset(200); + return true; + } + if (_path == null) { _path = new PathGenerator(owner); diff --git a/Source/Game/Movement/Generators/FleeingGenerator.cs b/Source/Game/Movement/Generators/FleeingMovementGenerator.cs similarity index 97% rename from Source/Game/Movement/Generators/FleeingGenerator.cs rename to Source/Game/Movement/Generators/FleeingMovementGenerator.cs index 69080ca3f..a72aedc29 100644 --- a/Source/Game/Movement/Generators/FleeingGenerator.cs +++ b/Source/Game/Movement/Generators/FleeingMovementGenerator.cs @@ -21,12 +21,12 @@ using System; namespace Game.Movement { - public class FleeingGenerator : MovementGeneratorMedium where T : Unit + public class FleeingMovementGenerator : MovementGeneratorMedium where T : Unit { public const float MIN_QUIET_DISTANCE = 28.0f; public const float MAX_QUIET_DISTANCE = 43.0f; - public FleeingGenerator(ObjectGuid fright) + public FleeingMovementGenerator(ObjectGuid fright) { _fleeTargetGUID = fright; _timer = new TimeTracker(); @@ -208,7 +208,7 @@ namespace Game.Movement TimeTracker _timer; } - public class TimedFleeingGenerator : FleeingGenerator + public class TimedFleeingGenerator : FleeingMovementGenerator { public TimedFleeingGenerator(ObjectGuid fright, uint time) : base(fright) { diff --git a/Source/Game/Movement/Generators/RandomMovement.cs b/Source/Game/Movement/Generators/RandomMovementGenerator.cs similarity index 96% rename from Source/Game/Movement/Generators/RandomMovement.cs rename to Source/Game/Movement/Generators/RandomMovementGenerator.cs index 6202fb451..5a2c8634f 100644 --- a/Source/Game/Movement/Generators/RandomMovement.cs +++ b/Source/Game/Movement/Generators/RandomMovementGenerator.cs @@ -144,6 +144,14 @@ namespace Game.Movement float angle = RandomHelper.FRand(0.0f, 1.0f) * MathF.PI * 2.0f; owner.MovePositionToFirstCollision(position, distance, angle); + // Check if the destination is in LOS + if (!owner.IsWithinLOS(position.GetPositionX(), position.GetPositionY(), position.GetPositionZ())) + { + // Retry later on + _timer.Reset(200); + return; + } + uint resetTimer = RandomHelper.randChance(50) ? RandomHelper.URand(5000, 10000) : RandomHelper.URand(1000, 2000); if (_path == null)