From c32ccf7e4e3c6d7111b682268c5c639e43754ea8 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Wed, 5 Jan 2022 23:19:46 -0500 Subject: [PATCH] Core/Movement: Add more LOS checks Port From (https://github.com/TrinityCore/TrinityCore/commit/1635a342284145cb4572840f2f3fdc29e4498bc3) --- ...usedGenerator.cs => ConfusedMovementGenerator.cs} | 12 ++++++++++-- ...eeingGenerator.cs => FleeingMovementGenerator.cs} | 6 +++--- ...{RandomMovement.cs => RandomMovementGenerator.cs} | 8 ++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) rename Source/Game/Movement/Generators/{ConfusedGenerator.cs => ConfusedMovementGenerator.cs} (91%) rename Source/Game/Movement/Generators/{FleeingGenerator.cs => FleeingMovementGenerator.cs} (97%) rename Source/Game/Movement/Generators/{RandomMovement.cs => RandomMovementGenerator.cs} (96%) 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)