Add jumping as a possibility to get vnav unstuck
authorLiza Carvelli <liza@carvel.li>
Sat, 5 Apr 2025 17:16:58 +0000 (19:16 +0200)
committerLiza Carvelli <liza@carvel.li>
Sat, 5 Apr 2025 17:16:58 +0000 (19:16 +0200)
QuestPaths/2.x - A Realm Reborn/MSQ-2/C1-Coerthas Central Highlands, The Enterprise/952_In Pursuit of the Past.json
Questionable/Controller/MovementController.cs

index 0bb7abf..3124d64 100644 (file)
@@ -238,6 +238,7 @@ internal sealed class MovementController : IDisposable
                     if (Destination.ShouldRecalculateNavmesh())
                     {
                         RecalculateNavmesh(navPoints, start.Value);
+                        return;
                     }
 
                     if (!Destination.IsFlying && !_condition[ConditionFlag.Mounted] &&
@@ -383,8 +384,23 @@ internal sealed class MovementController : IDisposable
                 if (Math.Abs(distance - Destination.LastWaypoint.Distance2DAtLastUpdate) < 0.5f)
                 {
                     int calculations = Destination.NavmeshCalculations;
-                    _logger.LogWarning("Recalculating navmesh (n = {Calculations})", calculations);
-                    Restart(Destination);
+                    if (calculations % 6 == 1)
+                    {
+                        _logger.LogWarning("Jumping to try and resolve navmesh problem (n = {Calculations})",
+                            calculations);
+                        unsafe
+                        {
+                            ActionManager.Instance()->UseAction(ActionType.GeneralAction, 2);
+                            Destination.NavmeshCalculations++;
+                            Destination.LastWaypoint.UpdatedAt = Environment.TickCount64;
+                        }
+                    }
+                    else
+                    {
+                        _logger.LogWarning("Recalculating navmesh (n = {Calculations})", calculations);
+                        Restart(Destination);
+                    }
+
                     Destination.NavmeshCalculations = calculations + 1;
                 }
                 else