From 1ea5ae9e40ee841c974f49d9d66c5e6766d64362 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Tue, 23 Jul 2024 00:38:16 +0200 Subject: [PATCH] Fix some movement issues --- .../MovementOverrideController.cs | 8 +++++++- Questionable/Controller/Steps/Shared/Move.cs | 13 ++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs b/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs index ee46f639..87ec23bf 100644 --- a/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs +++ b/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs @@ -12,12 +12,18 @@ internal sealed class MovementOverrideController [ new BlacklistedArea(1191, new(-223.0412f, 31.937134f, -584.03906f), 5f, 7.75f), - // New Gridania Navmesh workaround + // limsa, aftcastle to baderon new BlacklistedPoint(128, new(2f, 40.25f, 36.5f), new(0.25f, 40.25f, 36.5f)), + // New Gridania, Carline Canopy stairs + new BlacklistedPoint(132, new(29, -8, 120.5f), new(28.265165f, -8.000001f, 120.149734f)), + new BlacklistedPoint(132, new(28.25f, -8, 125), new(27.372725f, -8.200001f, 125.55859f)), + new BlacklistedPoint(132, new(32.25f, -8, 126.5f), new(32.022232f, -8.200011f, 126.86095f)), + // lotus stand new BlacklistedPoint(205, new(26.75f, 0.5f, 20.75f), new(27.179117f, 0.26728272f, 19.714373f)), + // New Gridania Navmesh workaround - planter box outside the Carline Canopy new BlacklistedPoint(132, new(45.5f, -8f, 101f), new(50.53978f, -8.046954f, 101.06045f)), // ul'dah lamp near adventuer's guild diff --git a/Questionable/Controller/Steps/Shared/Move.cs b/Questionable/Controller/Steps/Shared/Move.cs index 1abbd4ee..e7474688 100644 --- a/Questionable/Controller/Steps/Shared/Move.cs +++ b/Questionable/Controller/Steps/Shared/Move.cs @@ -65,7 +65,8 @@ internal static class Move GameFunctions gameFunctions, IClientState clientState, MovementController movementController, - TerritoryData territoryData) + TerritoryData territoryData, + AetheryteData aetheryteData) { public QuestStep Step { get; set; } = null!; public Vector3 Destination { get; set; } @@ -91,8 +92,14 @@ internal static class Move var position = clientState.LocalPlayer?.Position ?? new Vector3(); float actualDistance = (position - Destination).Length(); - // this may otherwise sometimes skip a move step - if (Step.AethernetShortcut != null || Step.AetheryteShortcut != null) + // if we teleport to a different zone, assume we always need to move; this is primarily relevant for cases + // where you're e.g. in Lakeland, and the step navigates via Crystarium → Tesselation back into the same + // zone. + // + // Side effects of this check being broken include: + // - mounting when near the target npc (if you spawn close enough for the next step) + // - trying to fly when near the target npc (if close enough where no movement is required) + if (Step.AetheryteShortcut != null && aetheryteData.TerritoryIds[Step.AetheryteShortcut.Value] != Step.TerritoryId) actualDistance = float.MaxValue; if (Step.Mount == true)