From fd62d925e4d76e875e51070419b8830a9480d08a Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 28 Jul 2024 21:03:44 +0200 Subject: [PATCH] Minor cleanup for HW part 2 --- QuestPathGenerator/RoslynShortcuts.cs | 4 + .../1828_Hide Your Moogles.json | 128 +++++++++++++++++- .../1945_Ebb and Aetherflow.json | 30 +++- .../1963_Taking Stock.json | 20 ++- .../1966_Saro Roggo's Common Life.json | 37 ++++- .../1909_Sleepless in Ok' Zundu.json | 30 +++- .../1910_Flying the Nest.json | 30 +++- .../WAR/585_Better Axe Around.json | 3 +- .../WAR/586_Duty and the Beast.json | 14 +- .../WAR/588_The Bear Necessity.json | 58 ++++++-- .../Class Quests/WAR/601_And My Axe.json | 3 +- .../1628_The Wyrm's Lair.json | 0 .../1629_New Winds, Old Friends.json | 0 .../1630_A General Summons.json | 0 .../1631_Awakening in Ul'dah.json | 1 + .../1632_A Brave Resolution.json | 2 + .../1633_Ready to Fly.json | 3 + .../1634_Into the Aery.json | 1 + .../1635_The Song Begins.json | 2 + .../1636_Unrest in Ishgard.json | 1 + .../1637_He Who Would Not Be Denied.json | 2 + .../1638_Ill-weather Friends.json | 42 ++++-- .../{ => A4-Ishgard}/1639_Fire and Blood.json | 2 + .../1640_A Knight's Calling.json | 18 ++- .../1641_The Sins of Antiquity.json | 1 + .../1993_The Spice of Life.json | 0 .../1994_Noble Indiscretions.json | 0 .../{ => A4-Ishgard}/1995_A Child Apart.json | 19 +++ .../MSQ/{ => A4-Ishgard}/1996_Bloodlines.json | 19 +++ .../1642_In Search of the Soleil.json | 1 + .../1643_Into the Blue.json | 6 +- .../1644_Familiar Faces.json | 3 +- .../1645_Devourer of Worlds.json | 29 +++- .../1646_Black and the White.json | 0 .../1647_Bolt, Chain, and Island.json | 1 + .../1648_A Difference of Opinion.json | 1 + .../1649_One Good Turn.json | 2 + .../1650_An Engineering Enterprise.json | 1 + .../1651_Aetherial Trail.json | 0 .../1652_Lost in the Lifestream.json | 2 + .../1653_Tataru's Surprise.json | 17 +++ .../1654_Onward to Sharlayan.json | 0 .../1655_A Great New Nation.json | 0 .../1656_Golems Begone.json | 11 +- .../1657_An Illuminati Incident.json | 17 +-- .../1658_Leaving Idyllshire.json | 1 + .../1659_Matoya's Cave.json | 1 + .../1660_Forbidden Knowledge.json | 34 ++++- .../1661_An Eye for Aether.json | 1 + .../1662_Hour of Departure.json | 65 ++++++++- ...663_The First Flight of the Excelsior.json | 0 .../1664_Systematic Exploration.json | 30 +++- .../1665_In Node We Trust.json | 23 +++- .../1666_Chimerical Maintenance.json | 46 ++++++- ...667_Close Encounters of the VIth Kind.json | 7 +- .../1668_Fetters of Lament.json | 0 .../{ => A7-Azys Lla}/1669_Heavensward.json | 18 ++- QuestPaths/quest-v1.json | 33 +++-- Questionable.Model/V1/SkipStepConditions.cs | 8 +- Questionable/Controller/MovementController.cs | 27 +++- .../NavigationOverrides/AlternateLocation.cs | 13 ++ .../NavigationOverrides/BlacklistedArea.cs | 7 +- .../NavigationOverrides/BlacklistedPoint.cs | 7 +- .../IBlacklistedLocation.cs | 2 +- .../MovementOverrideController.cs | 19 ++- Questionable/Controller/QuestController.cs | 44 +++++- .../Controller/Steps/Shared/SkipCondition.cs | 14 ++ 67 files changed, 850 insertions(+), 111 deletions(-) rename QuestPaths/3.x - Heavensward/MSQ/{ => A3.3-The Churning Mists}/1628_The Wyrm's Lair.json (100%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A3.3-The Churning Mists}/1629_New Winds, Old Friends.json (100%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A3.3-The Churning Mists}/1630_A General Summons.json (100%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A3.3-The Churning Mists}/1631_Awakening in Ul'dah.json (97%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A3.3-The Churning Mists}/1632_A Brave Resolution.json (95%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A3.3-The Churning Mists}/1633_Ready to Fly.json (97%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A3.3-The Churning Mists}/1634_Into the Aery.json (97%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A3.3-The Churning Mists}/1635_The Song Begins.json (89%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A3.3-The Churning Mists}/1636_Unrest in Ishgard.json (96%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A4-Ishgard}/1637_He Who Would Not Be Denied.json (95%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A4-Ishgard}/1638_Ill-weather Friends.json (76%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A4-Ishgard}/1639_Fire and Blood.json (97%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A4-Ishgard}/1640_A Knight's Calling.json (86%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A4-Ishgard}/1641_The Sins of Antiquity.json (98%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A4-Ishgard}/1993_The Spice of Life.json (100%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A4-Ishgard}/1994_Noble Indiscretions.json (100%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A4-Ishgard}/1995_A Child Apart.json (70%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A4-Ishgard}/1996_Bloodlines.json (73%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A5-Sea of Clouds}/1642_In Search of the Soleil.json (96%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A5-Sea of Clouds}/1643_Into the Blue.json (89%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A5-Sea of Clouds}/1644_Familiar Faces.json (95%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A5-Sea of Clouds}/1645_Devourer of Worlds.json (71%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A5-Sea of Clouds}/1646_Black and the White.json (100%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A5-Sea of Clouds}/1647_Bolt, Chain, and Island.json (98%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A5-Sea of Clouds}/1648_A Difference of Opinion.json (97%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A5-Sea of Clouds}/1649_One Good Turn.json (92%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1650_An Engineering Enterprise.json (98%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1651_Aetherial Trail.json (100%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1652_Lost in the Lifestream.json (97%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1653_Tataru's Surprise.json (83%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1654_Onward to Sharlayan.json (100%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1655_A Great New Nation.json (100%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1656_Golems Begone.json (83%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1657_An Illuminati Incident.json (82%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1658_Leaving Idyllshire.json (97%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1659_Matoya's Cave.json (98%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1660_Forbidden Knowledge.json (74%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1661_An Eye for Aether.json (98%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A6-The Dravanian Hinterlands}/1662_Hour of Departure.json (68%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A7-Azys Lla}/1663_The First Flight of the Excelsior.json (100%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A7-Azys Lla}/1664_Systematic Exploration.json (77%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A7-Azys Lla}/1665_In Node We Trust.json (76%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A7-Azys Lla}/1666_Chimerical Maintenance.json (71%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A7-Azys Lla}/1667_Close Encounters of the VIth Kind.json (92%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A7-Azys Lla}/1668_Fetters of Lament.json (100%) rename QuestPaths/3.x - Heavensward/MSQ/{ => A7-Azys Lla}/1669_Heavensward.json (84%) create mode 100644 Questionable/Controller/NavigationOverrides/AlternateLocation.cs diff --git a/QuestPathGenerator/RoslynShortcuts.cs b/QuestPathGenerator/RoslynShortcuts.cs index 48b003be..63ccdcd6 100644 --- a/QuestPathGenerator/RoslynShortcuts.cs +++ b/QuestPathGenerator/RoslynShortcuts.cs @@ -270,6 +270,10 @@ public static class RoslynShortcuts skipStepConditions.NotInTerritory).AsSyntaxNodeOrToken(), Assignment(nameof(SkipStepConditions.Item), skipStepConditions.Item, emptyStep.Item) .AsSyntaxNodeOrToken(), + AssignmentList(nameof(SkipStepConditions.QuestsAccepted), + skipStepConditions.QuestsAccepted).AsSyntaxNodeOrToken(), + AssignmentList(nameof(SkipStepConditions.QuestsCompleted), + skipStepConditions.QuestsCompleted).AsSyntaxNodeOrToken(), Assignment(nameof(SkipStepConditions.ExtraCondition), skipStepConditions.ExtraCondition, emptyStep.ExtraCondition) .AsSyntaxNodeOrToken())))); diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json index c002f6f4..e152eea9 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json @@ -20,6 +20,58 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": -526.363, + "Y": 50.165375, + "Z": 407.25165 + }, + "TerritoryId": 400, + "InteractionType": "WalkTo", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + -64 + ] + }, + { + "Position": { + "X": -533.25507, + "Y": 53.07081, + "Z": 414.5445 + }, + "TerritoryId": 400, + "InteractionType": "WalkTo", + "DisableNavmesh": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + -64 + ] + }, + { + "Position": { + "X": -515.5652, + "Y": 57.261906, + "Z": 444.5247 + }, + "TerritoryId": 400, + "InteractionType": "WalkTo", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + -64 + ] + }, { "DataId": 1013424, "Position": { @@ -29,7 +81,15 @@ }, "TerritoryId": 400, "InteractionType": "Interact", - "$": "0 0 0 0 0 0 -> 17 0 0 0 0 64" + "$": "0 0 0 0 0 0 -> 17 0 0 0 0 64", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 1013425, @@ -40,7 +100,58 @@ }, "TerritoryId": 400, "InteractionType": "Interact", - "$": "17 0 0 0 0 64 -> 33 16 0 0 0 96" + "$": "17 0 0 0 0 64 -> 33 16 0 0 0 96", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "Position": { + "X": -456.7709, + "Y": 43.310535, + "Z": 387.23517 + }, + "TerritoryId": 400, + "InteractionType": "WalkTo", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + -128 + ] + }, + { + "Position": { + "X": -445.09866, + "Y": 51.348675, + "Z": 390.17886 + }, + "StopDistance": 0.25, + "TerritoryId": 400, + "InteractionType": "Jump", + "DisableNavmesh": true, + "JumpDestination": { + "Position": { + "X": -441.6318, + "Y": 53.80215, + "Z": 380.9018 + } + }, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + -128 + ] }, { "DataId": 1013421, @@ -50,7 +161,15 @@ "Z": 379.3545 }, "TerritoryId": 400, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } ] }, @@ -65,7 +184,8 @@ "Z": 347.0968 }, "TerritoryId": 400, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "DisableNavmesh": true } ] } diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1945_Ebb and Aetherflow.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1945_Ebb and Aetherflow.json index 5542d646..64cbba1e 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1945_Ebb and Aetherflow.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1945_Ebb and Aetherflow.json @@ -39,7 +39,15 @@ }, "TerritoryId": 399, "InteractionType": "Interact", - "$": "0 0 0 0 0 0 -> 16 16 16 0 0 64" + "$": "0 0 0 0 0 0 -> 16 16 16 0 0 64", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 2005879, @@ -50,7 +58,15 @@ }, "TerritoryId": 399, "InteractionType": "Interact", - "$": "16 16 16 0 0 64 -> 32 17 32 0 0 96" + "$": "16 16 16 0 0 64 -> 32 17 32 0 0 96", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] }, { "DataId": 2005877, @@ -60,7 +76,15 @@ "Z": 34.74475 }, "TerritoryId": 399, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } ] }, diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1963_Taking Stock.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1963_Taking Stock.json index f095da43..b67d5cd7 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1963_Taking Stock.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1963_Taking Stock.json @@ -52,17 +52,27 @@ "Z": 82.59637 }, "TerritoryId": 399, - "InteractionType": "Combat", - "EnemySpawnType": "AutoOnEnterArea", - "KillEnemyDataIds": [ - 5042 - ] + "InteractionType": "WalkTo" } ] }, { "Sequence": 3, "Steps": [ + { + "Position": { + "X": -403.42465, + "Y": 154.8542, + "Z": 82.59637 + }, + "TerritoryId": 399, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 5042 + ], + "CombatDelaySecondsAtStart": 1 + }, { "DataId": 2005885, "Position": { diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1966_Saro Roggo's Common Life.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1966_Saro Roggo's Common Life.json index 1974012d..b47b59fa 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1966_Saro Roggo's Common Life.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1966_Saro Roggo's Common Life.json @@ -29,7 +29,14 @@ }, "TerritoryId": 463, "InteractionType": "Interact", - "TargetTerritoryId": 399 + "TargetTerritoryId": 399, + "SkipConditions": { + "StepIf": { + "NotInTerritory": [ + 463 + ] + } + } }, { "DataId": 2006061, @@ -44,7 +51,15 @@ "KillEnemyDataIds": [ 44 ], - "$": "0 0 0 0 0 0 -> 16 1 0 0 0 128" + "$": "0 0 0 0 0 0 -> 16 1 0 0 0 128", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 2006062, @@ -59,7 +74,15 @@ "KillEnemyDataIds": [ 44 ], - "$": "16 1 0 0 0 128 -> 33 1 0 0 0 192" + "$": "16 1 0 0 0 128 -> 33 1 0 0 0 192", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 2006063, @@ -73,6 +96,14 @@ "EnemySpawnType": "AfterInteraction", "KillEnemyDataIds": [ 44 + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 ] } ] diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1909_Sleepless in Ok' Zundu.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1909_Sleepless in Ok' Zundu.json index 31342f03..e6fd0f6c 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1909_Sleepless in Ok' Zundu.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1909_Sleepless in Ok' Zundu.json @@ -29,7 +29,15 @@ }, "TerritoryId": 401, "InteractionType": "Interact", - "$": "0 0 0 0 0 0 -> 16 1 16 0 0 128" + "$": "0 0 0 0 0 0 -> 16 1 16 0 0 128", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 2005826, @@ -40,7 +48,15 @@ }, "TerritoryId": 401, "InteractionType": "Interact", - "$": "16 1 16 0 0 128 -> 32 17 32 0 0 160" + "$": "16 1 16 0 0 128 -> 32 17 32 0 0 160", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] }, { "DataId": 2005825, @@ -50,7 +66,15 @@ "Z": -564.3549 }, "TerritoryId": 401, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] } ] }, diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1910_Flying the Nest.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1910_Flying the Nest.json index c513db26..f9abb131 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1910_Flying the Nest.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1910_Flying the Nest.json @@ -29,7 +29,15 @@ }, "TerritoryId": 401, "InteractionType": "Interact", - "$": "0 0 0 0 0 0 -> 16 16 0 0 0 64" + "$": "0 0 0 0 0 0 -> 16 16 0 0 0 64", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 1012071, @@ -40,7 +48,15 @@ }, "TerritoryId": 401, "InteractionType": "Interact", - "$": "16 16 0 0 0 64 -> 32 17 0 0 0 96" + "$": "16 16 0 0 0 64 -> 32 17 0 0 0 96", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] }, { "DataId": 1012069, @@ -50,7 +66,15 @@ "Z": -417.74628 }, "TerritoryId": 401, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } ] }, diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WAR/585_Better Axe Around.json b/QuestPaths/3.x - Heavensward/Class Quests/WAR/585_Better Axe Around.json index 8885fb29..e101ffec 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WAR/585_Better Axe Around.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WAR/585_Better Axe Around.json @@ -19,7 +19,8 @@ "AetheryteShortcutIf": { "InSameTerritory": true } - } + }, + "Fly": true } ] }, diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WAR/586_Duty and the Beast.json b/QuestPaths/3.x - Heavensward/Class Quests/WAR/586_Duty and the Beast.json index 8df193e0..a883ac64 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WAR/586_Duty and the Beast.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WAR/586_Duty and the Beast.json @@ -26,6 +26,17 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": 465.77087, + "Y": 367.76678, + "Z": -658.1668 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead" + }, { "DataId": 1014199, "Position": { @@ -35,8 +46,7 @@ }, "TerritoryId": 155, "InteractionType": "SinglePlayerDuty", - "Fly": true, - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead" + "Fly": true } ] }, diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WAR/588_The Bear Necessity.json b/QuestPaths/3.x - Heavensward/Class Quests/WAR/588_The Bear Necessity.json index 8d1ab80b..f3ce1fe7 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WAR/588_The Bear Necessity.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WAR/588_The Bear Necessity.json @@ -26,6 +26,34 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1011920, + "Position": { + "X": 519.8595, + "Y": -51.071976, + "Z": 88.24292 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "Position": { + "X": 502.8876, + "Y": -48.989826, + "Z": 34.93356 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo" + }, { "DataId": 1011919, "Position": { @@ -35,7 +63,15 @@ }, "TerritoryId": 398, "InteractionType": "Interact", - "$": "0 0 0 0 0 0 -> 1 0 0 0 0 128" + "$": "0 0 0 0 0 0 -> 1 0 0 0 0 128", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 1011921, @@ -46,17 +82,15 @@ }, "TerritoryId": 398, "InteractionType": "Interact", - "$": "1 0 0 0 0 128 -> 2 0 0 0 0 160" - }, - { - "DataId": 1011920, - "Position": { - "X": 519.8595, - "Y": -51.071976, - "Z": 88.24292 - }, - "TerritoryId": 398, - "InteractionType": "Interact" + "$": "1 0 0 0 0 128 -> 2 0 0 0 0 160", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] } ] }, diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WAR/601_And My Axe.json b/QuestPaths/3.x - Heavensward/Class Quests/WAR/601_And My Axe.json index 6d85bf0f..241c804a 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WAR/601_And My Axe.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WAR/601_And My Axe.json @@ -78,7 +78,8 @@ "TerritoryId": 138, "InteractionType": "Interact", "Fly": true, - "StopDistance": 1 + "StopDistance": 1, + "AetheryteShortcut": "Western La Noscea - Aleport" } ] }, diff --git a/QuestPaths/3.x - Heavensward/MSQ/1628_The Wyrm's Lair.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1628_The Wyrm's Lair.json similarity index 100% rename from QuestPaths/3.x - Heavensward/MSQ/1628_The Wyrm's Lair.json rename to QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1628_The Wyrm's Lair.json diff --git a/QuestPaths/3.x - Heavensward/MSQ/1629_New Winds, Old Friends.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1629_New Winds, Old Friends.json similarity index 100% rename from QuestPaths/3.x - Heavensward/MSQ/1629_New Winds, Old Friends.json rename to QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1629_New Winds, Old Friends.json diff --git a/QuestPaths/3.x - Heavensward/MSQ/1630_A General Summons.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1630_A General Summons.json similarity index 100% rename from QuestPaths/3.x - Heavensward/MSQ/1630_A General Summons.json rename to QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1630_A General Summons.json diff --git a/QuestPaths/3.x - Heavensward/MSQ/1631_Awakening in Ul'dah.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1631_Awakening in Ul'dah.json similarity index 97% rename from QuestPaths/3.x - Heavensward/MSQ/1631_Awakening in Ul'dah.json rename to QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1631_Awakening in Ul'dah.json index 6aa8aeb9..ce48ffe1 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1631_Awakening in Ul'dah.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1631_Awakening in Ul'dah.json @@ -47,6 +47,7 @@ "Y": 37.760002, "Z": 78.812744 }, + "StopDistance": 5, "TerritoryId": 131, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1632_A Brave Resolution.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1632_A Brave Resolution.json similarity index 95% rename from QuestPaths/3.x - Heavensward/MSQ/1632_A Brave Resolution.json rename to QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1632_A Brave Resolution.json index 5fb25ba2..2287e337 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1632_A Brave Resolution.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1632_A Brave Resolution.json @@ -12,6 +12,7 @@ "Y": 37.760002, "Z": 78.812744 }, + "StopDistance": 5, "TerritoryId": 131, "InteractionType": "AcceptQuest" } @@ -44,6 +45,7 @@ "Y": 0, "Z": -9.079163 }, + "StopDistance": 5, "TerritoryId": 351, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1633_Ready to Fly.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1633_Ready to Fly.json similarity index 97% rename from QuestPaths/3.x - Heavensward/MSQ/1633_Ready to Fly.json rename to QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1633_Ready to Fly.json index 5d6b498d..4ed373cd 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1633_Ready to Fly.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1633_Ready to Fly.json @@ -12,6 +12,7 @@ "Y": 0, "Z": -9.079163 }, + "StopDistance": 5, "TerritoryId": 351, "InteractionType": "AcceptQuest" } @@ -62,6 +63,7 @@ "Y": -9.313226E-10, "Z": 5.9052124 }, + "StopDistance": 5, "TerritoryId": 433, "InteractionType": "Interact" } @@ -77,6 +79,7 @@ "Y": 1.1443481, "Z": 13.199036 }, + "StopDistance": 4, "TerritoryId": 433, "InteractionType": "Interact", "TargetTerritoryId": 419 diff --git a/QuestPaths/3.x - Heavensward/MSQ/1634_Into the Aery.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1634_Into the Aery.json similarity index 97% rename from QuestPaths/3.x - Heavensward/MSQ/1634_Into the Aery.json rename to QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1634_Into the Aery.json index bb8b508b..471a1666 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1634_Into the Aery.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1634_Into the Aery.json @@ -56,6 +56,7 @@ "Y": -1.1916885, "Z": -354.94012 }, + "StopDistance": 7, "TerritoryId": 400, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1635_The Song Begins.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1635_The Song Begins.json similarity index 89% rename from QuestPaths/3.x - Heavensward/MSQ/1635_The Song Begins.json rename to QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1635_The Song Begins.json index 51f2be8d..81bf09c6 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1635_The Song Begins.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1635_The Song Begins.json @@ -12,6 +12,7 @@ "Y": -1.1916885, "Z": -354.94012 }, + "StopDistance": 7, "TerritoryId": 400, "InteractionType": "AcceptQuest" } @@ -29,6 +30,7 @@ }, "TerritoryId": 400, "InteractionType": "CompleteQuest", + "AetheryteShortcut": "The Churning Mists - Zenith", "Fly": true } ] diff --git a/QuestPaths/3.x - Heavensward/MSQ/1636_Unrest in Ishgard.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1636_Unrest in Ishgard.json similarity index 96% rename from QuestPaths/3.x - Heavensward/MSQ/1636_Unrest in Ishgard.json rename to QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1636_Unrest in Ishgard.json index 83ea03f7..439147c9 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1636_Unrest in Ishgard.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1636_Unrest in Ishgard.json @@ -27,6 +27,7 @@ "Y": 27.979128, "Z": -116.41113 }, + "StopDistance": 7, "TerritoryId": 418, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1637_He Who Would Not Be Denied.json b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1637_He Who Would Not Be Denied.json similarity index 95% rename from QuestPaths/3.x - Heavensward/MSQ/1637_He Who Would Not Be Denied.json rename to QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1637_He Who Would Not Be Denied.json index 4967a02d..fba873b6 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1637_He Who Would Not Be Denied.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1637_He Who Would Not Be Denied.json @@ -12,6 +12,7 @@ "Y": 27.979128, "Z": -116.41113 }, + "StopDistance": 7, "TerritoryId": 418, "InteractionType": "AcceptQuest" } @@ -47,6 +48,7 @@ "Y": -9.313226E-10, "Z": 7.6447144 }, + "StopDistance": 5, "TerritoryId": 433, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1638_Ill-weather Friends.json b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1638_Ill-weather Friends.json similarity index 76% rename from QuestPaths/3.x - Heavensward/MSQ/1638_Ill-weather Friends.json rename to QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1638_Ill-weather Friends.json index 48612679..3017649c 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1638_Ill-weather Friends.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1638_Ill-weather Friends.json @@ -12,6 +12,7 @@ "Y": -9.313226E-10, "Z": 6.362976 }, + "StopDistance": 7, "TerritoryId": 433, "InteractionType": "AcceptQuest" } @@ -20,17 +21,6 @@ { "Sequence": 1, "Steps": [ - { - "DataId": 2005334, - "Position": { - "X": -0.015319824, - "Y": 1.1443481, - "Z": 13.199036 - }, - "TerritoryId": 433, - "InteractionType": "Interact", - "TargetTerritoryId": 419 - }, { "DataId": 1013381, "Position": { @@ -59,7 +49,15 @@ }, "TerritoryId": 418, "InteractionType": "Interact", - "$": "0 0 0 0 0 0 -> 1 0 0 0 0 32" + "$": "0 0 0 0 0 0 -> 1 0 0 0 0 32", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] }, { "DataId": 1013341, @@ -70,7 +68,15 @@ }, "TerritoryId": 418, "InteractionType": "Interact", - "$": "1 0 0 0 0 32 -> 2 0 0 0 0 96" + "$": "1 0 0 0 0 32 -> 2 0 0 0 0 96", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 1013340, @@ -80,7 +86,15 @@ "Z": 54.276245 }, "TerritoryId": 418, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } ] }, diff --git a/QuestPaths/3.x - Heavensward/MSQ/1639_Fire and Blood.json b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1639_Fire and Blood.json similarity index 97% rename from QuestPaths/3.x - Heavensward/MSQ/1639_Fire and Blood.json rename to QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1639_Fire and Blood.json index d8a95b91..ce1f3688 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1639_Fire and Blood.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1639_Fire and Blood.json @@ -57,6 +57,7 @@ "Y": -12.020914, "Z": 48.41687 }, + "StopDistance": 7, "TerritoryId": 418, "InteractionType": "Interact" } @@ -87,6 +88,7 @@ "Y": 23.979128, "Z": 12.802246 }, + "StopDistance": 5, "TerritoryId": 418, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1640_A Knight's Calling.json b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1640_A Knight's Calling.json similarity index 86% rename from QuestPaths/3.x - Heavensward/MSQ/1640_A Knight's Calling.json rename to QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1640_A Knight's Calling.json index 7cbc8fcc..492a0d58 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1640_A Knight's Calling.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1640_A Knight's Calling.json @@ -12,6 +12,7 @@ "Y": 23.979128, "Z": 12.802246 }, + "StopDistance": 5, "TerritoryId": 418, "InteractionType": "AcceptQuest" } @@ -27,6 +28,7 @@ "Y": 23.979126, "Z": 10.452393 }, + "StopDistance": 5, "TerritoryId": 418, "InteractionType": "Interact" } @@ -62,7 +64,19 @@ ] }, { - "Sequence": 4 + "Sequence": 4, + "Steps": [ + { + "Position": { + "X": 0, + "Y": 0, + "Z": 0 + }, + "TerritoryId": 1, + "InteractionType": "WalkTo", + "Comment": "Filler" + } + ] }, { "Sequence": 5, @@ -74,6 +88,7 @@ "Y": 42.34489, "Z": -207.04968 }, + "StopDistance": 7, "TerritoryId": 419, "InteractionType": "Interact" } @@ -105,6 +120,7 @@ "Y": 16.009666, "Z": -4.196289 }, + "StopDistance": 5, "TerritoryId": 419, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1641_The Sins of Antiquity.json b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1641_The Sins of Antiquity.json similarity index 98% rename from QuestPaths/3.x - Heavensward/MSQ/1641_The Sins of Antiquity.json rename to QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1641_The Sins of Antiquity.json index 0051e5e7..8450034b 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1641_The Sins of Antiquity.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1641_The Sins of Antiquity.json @@ -12,6 +12,7 @@ "Y": 16.009666, "Z": -4.196289 }, + "StopDistance": 5, "TerritoryId": 419, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1993_The Spice of Life.json b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1993_The Spice of Life.json similarity index 100% rename from QuestPaths/3.x - Heavensward/MSQ/1993_The Spice of Life.json rename to QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1993_The Spice of Life.json diff --git a/QuestPaths/3.x - Heavensward/MSQ/1994_Noble Indiscretions.json b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1994_Noble Indiscretions.json similarity index 100% rename from QuestPaths/3.x - Heavensward/MSQ/1994_Noble Indiscretions.json rename to QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1994_Noble Indiscretions.json diff --git a/QuestPaths/3.x - Heavensward/MSQ/1995_A Child Apart.json b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1995_A Child Apart.json similarity index 70% rename from QuestPaths/3.x - Heavensward/MSQ/1995_A Child Apart.json rename to QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1995_A Child Apart.json index 6fc2078e..aad4c3e4 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1995_A Child Apart.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1995_A Child Apart.json @@ -20,6 +20,25 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": 90.44213, + "Y": -3.7030487, + "Z": 76.662605 + }, + "TerritoryId": 418, + "InteractionType": "WalkTo" + }, + { + "Position": { + "X": 101.28695, + "Y": -20.020874, + "Z": 76.39896 + }, + "TerritoryId": 418, + "InteractionType": "WalkTo", + "DisableNavmesh": true + }, { "DataId": 1012169, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/1996_Bloodlines.json b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1996_Bloodlines.json similarity index 73% rename from QuestPaths/3.x - Heavensward/MSQ/1996_Bloodlines.json rename to QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1996_Bloodlines.json index b183800a..a5bf2bc5 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1996_Bloodlines.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1996_Bloodlines.json @@ -20,6 +20,25 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": 90.44213, + "Y": -3.7030487, + "Z": 76.662605 + }, + "TerritoryId": 418, + "InteractionType": "WalkTo" + }, + { + "Position": { + "X": 101.28695, + "Y": -20.020874, + "Z": 76.39896 + }, + "TerritoryId": 418, + "InteractionType": "WalkTo", + "DisableNavmesh": true + }, { "DataId": 1013340, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/1642_In Search of the Soleil.json b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1642_In Search of the Soleil.json similarity index 96% rename from QuestPaths/3.x - Heavensward/MSQ/1642_In Search of the Soleil.json rename to QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1642_In Search of the Soleil.json index 91fecbb4..5a186c92 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1642_In Search of the Soleil.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1642_In Search of the Soleil.json @@ -12,6 +12,7 @@ "Y": 24.390423, "Z": -4.4709473 }, + "StopDistance": 7, "TerritoryId": 418, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1643_Into the Blue.json b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1643_Into the Blue.json similarity index 89% rename from QuestPaths/3.x - Heavensward/MSQ/1643_Into the Blue.json rename to QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1643_Into the Blue.json index b599a269..7d3f2d8f 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1643_Into the Blue.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1643_Into the Blue.json @@ -28,7 +28,11 @@ "Z": -26.199768 }, "TerritoryId": 419, - "InteractionType": "Interact" + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] Skysteel Manufactory", + "[Ishgard] Athenaeum Astrologicum" + ] } ] }, diff --git a/QuestPaths/3.x - Heavensward/MSQ/1644_Familiar Faces.json b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1644_Familiar Faces.json similarity index 95% rename from QuestPaths/3.x - Heavensward/MSQ/1644_Familiar Faces.json rename to QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1644_Familiar Faces.json index cd2e9252..822f3dde 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1644_Familiar Faces.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1644_Familiar Faces.json @@ -38,7 +38,7 @@ "Z": 113.54166 }, "TerritoryId": 401, - "InteractionType": "Emote", + "InteractionType": "SinglePlayerDuty", "Emote": "lookout", "StopDistance": 0.25 } @@ -71,6 +71,7 @@ "Y": -35.95642, "Z": 18.722778 }, + "StopDistance": 7, "TerritoryId": 401, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1645_Devourer of Worlds.json b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1645_Devourer of Worlds.json similarity index 71% rename from QuestPaths/3.x - Heavensward/MSQ/1645_Devourer of Worlds.json rename to QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1645_Devourer of Worlds.json index bd8e4ffc..1b19f519 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1645_Devourer of Worlds.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1645_Devourer of Worlds.json @@ -12,6 +12,7 @@ "Y": -35.95642, "Z": 18.722778 }, + "StopDistance": 7, "TerritoryId": 401, "InteractionType": "AcceptQuest" } @@ -35,6 +36,22 @@ { "Sequence": 2, "Steps": [ + { + "Position": { + "X": -756.4804, + "Y": -13.877342, + "Z": -121.33485 + }, + "TerritoryId": 401, + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": -759.4263, + "Y": -9.201294, + "Z": -110.85681 + } + } + }, { "DataId": 2006229, "Position": { @@ -44,7 +61,17 @@ }, "TerritoryId": 401, "InteractionType": "AttuneAetherCurrent", - "AetherCurrentId": 2818117 + "AetherCurrentId": 2818117, + "DisableNavmesh": true + }, + { + "Position": { + "X": -755.9033, + "Y": -14.112402, + "Z": -177.06593 + }, + "TerritoryId": 401, + "InteractionType": "WalkTo" }, { "DataId": 1013090, diff --git a/QuestPaths/3.x - Heavensward/MSQ/1646_Black and the White.json b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1646_Black and the White.json similarity index 100% rename from QuestPaths/3.x - Heavensward/MSQ/1646_Black and the White.json rename to QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1646_Black and the White.json diff --git a/QuestPaths/3.x - Heavensward/MSQ/1647_Bolt, Chain, and Island.json b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1647_Bolt, Chain, and Island.json similarity index 98% rename from QuestPaths/3.x - Heavensward/MSQ/1647_Bolt, Chain, and Island.json rename to QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1647_Bolt, Chain, and Island.json index 73a8316b..e83bee3d 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1647_Bolt, Chain, and Island.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1647_Bolt, Chain, and Island.json @@ -100,6 +100,7 @@ "Y": -14.153766, "Z": -543.0228 }, + "StopDistance": 5, "TerritoryId": 401, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1648_A Difference of Opinion.json b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1648_A Difference of Opinion.json similarity index 97% rename from QuestPaths/3.x - Heavensward/MSQ/1648_A Difference of Opinion.json rename to QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1648_A Difference of Opinion.json index 816afbac..f4924843 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1648_A Difference of Opinion.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1648_A Difference of Opinion.json @@ -12,6 +12,7 @@ "Y": -14.153766, "Z": -543.0228 }, + "StopDistance": 5, "TerritoryId": 401, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1649_One Good Turn.json b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1649_One Good Turn.json similarity index 92% rename from QuestPaths/3.x - Heavensward/MSQ/1649_One Good Turn.json rename to QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1649_One Good Turn.json index 2d832de5..e5cf7112 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1649_One Good Turn.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1649_One Good Turn.json @@ -12,6 +12,7 @@ "Y": -14.153783, "Z": -541.558 }, + "StopDistance": 5, "TerritoryId": 401, "InteractionType": "AcceptQuest" } @@ -27,6 +28,7 @@ "Y": -15.134373, "Z": 37.094604 }, + "StopDistance": 7, "TerritoryId": 419, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1650_An Engineering Enterprise.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1650_An Engineering Enterprise.json similarity index 98% rename from QuestPaths/3.x - Heavensward/MSQ/1650_An Engineering Enterprise.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1650_An Engineering Enterprise.json index fadc7131..e2e4b212 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1650_An Engineering Enterprise.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1650_An Engineering Enterprise.json @@ -12,6 +12,7 @@ "Y": -15.134371, "Z": 38.52893 }, + "StopDistance": 7, "TerritoryId": 419, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1651_Aetherial Trail.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1651_Aetherial Trail.json similarity index 100% rename from QuestPaths/3.x - Heavensward/MSQ/1651_Aetherial Trail.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1651_Aetherial Trail.json diff --git a/QuestPaths/3.x - Heavensward/MSQ/1652_Lost in the Lifestream.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1652_Lost in the Lifestream.json similarity index 97% rename from QuestPaths/3.x - Heavensward/MSQ/1652_Lost in the Lifestream.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1652_Lost in the Lifestream.json index 330e5cd2..888fddda 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1652_Lost in the Lifestream.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1652_Lost in the Lifestream.json @@ -29,6 +29,7 @@ }, "TerritoryId": 133, "InteractionType": "Interact", + "TargetTerritoryId": 205, "DialogueChoices": [ { "Type": "YesNo", @@ -93,6 +94,7 @@ "Y": -8, "Z": 98.13074 }, + "StopDistance": 5, "TerritoryId": 132, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1653_Tataru's Surprise.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1653_Tataru's Surprise.json similarity index 83% rename from QuestPaths/3.x - Heavensward/MSQ/1653_Tataru's Surprise.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1653_Tataru's Surprise.json index 748a7f99..9285d55a 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1653_Tataru's Surprise.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1653_Tataru's Surprise.json @@ -12,6 +12,7 @@ "Y": -8, "Z": 98.13074 }, + "StopDistance": 5, "TerritoryId": 132, "InteractionType": "AcceptQuest" } @@ -33,6 +34,14 @@ "AethernetShortcut": [ "[Gridania] Aetheryte Plaza", "[Gridania] Leatherworkers' Guild & Shaded Bower" + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 ] }, { @@ -47,6 +56,14 @@ "AethernetShortcut": [ "[Gridania] Leatherworkers' Guild & Shaded Bower", "[Gridania] Conjurers' Guild" + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 ] } ] diff --git a/QuestPaths/3.x - Heavensward/MSQ/1654_Onward to Sharlayan.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1654_Onward to Sharlayan.json similarity index 100% rename from QuestPaths/3.x - Heavensward/MSQ/1654_Onward to Sharlayan.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1654_Onward to Sharlayan.json diff --git a/QuestPaths/3.x - Heavensward/MSQ/1655_A Great New Nation.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1655_A Great New Nation.json similarity index 100% rename from QuestPaths/3.x - Heavensward/MSQ/1655_A Great New Nation.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1655_A Great New Nation.json diff --git a/QuestPaths/3.x - Heavensward/MSQ/1656_Golems Begone.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1656_Golems Begone.json similarity index 83% rename from QuestPaths/3.x - Heavensward/MSQ/1656_Golems Begone.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1656_Golems Begone.json index 3530719c..28768729 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1656_Golems Begone.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1656_Golems Begone.json @@ -67,6 +67,11 @@ { "Sequence": 255, "Steps": [ + { + "TerritoryId": 478, + "InteractionType": "AttuneAethernetShard", + "AethernetShard": "[Idyllshire] West Idyllshire" + }, { "DataId": 1012097, "Position": { @@ -75,7 +80,11 @@ "Z": 23.483582 }, "TerritoryId": 478, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "AethernetShortcut": [ + "[Idyllshire] West Idyllshire", + "[Idyllshire] Aetheryte Plaza" + ] } ] } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1657_An Illuminati Incident.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1657_An Illuminati Incident.json similarity index 82% rename from QuestPaths/3.x - Heavensward/MSQ/1657_An Illuminati Incident.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1657_An Illuminati Incident.json index 06e538cb..f8924a38 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1657_An Illuminati Incident.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1657_An Illuminati Incident.json @@ -20,16 +20,6 @@ { "Sequence": 1, "Steps": [ - { - "Position": { - "X": 148.52824, - "Y": 207, - "Z": 117.84323 - }, - "TerritoryId": 478, - "InteractionType": "WalkTo", - "TargetTerritoryId": 399 - }, { "DataId": 1012416, "Position": { @@ -38,7 +28,11 @@ "Z": 6.3324585 }, "TerritoryId": 399, - "InteractionType": "SinglePlayerDuty" + "InteractionType": "SinglePlayerDuty", + "AethernetShortcut": [ + "[Idyllshire] Aetheryte Plaza", + "[Idyllshire] Epilogue Gate (Eastern Hinterlands)" + ] } ] }, @@ -52,6 +46,7 @@ "Y": 77.859474, "Z": -5.9052734 }, + "StopDistance": 7, "TerritoryId": 399, "InteractionType": "Interact" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1658_Leaving Idyllshire.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1658_Leaving Idyllshire.json similarity index 97% rename from QuestPaths/3.x - Heavensward/MSQ/1658_Leaving Idyllshire.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1658_Leaving Idyllshire.json index 691dc554..973360b2 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1658_Leaving Idyllshire.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1658_Leaving Idyllshire.json @@ -42,6 +42,7 @@ "Y": 203.98, "Z": 127.91626 }, + "StopDistance": 5, "TerritoryId": 478, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1659_Matoya's Cave.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1659_Matoya's Cave.json similarity index 98% rename from QuestPaths/3.x - Heavensward/MSQ/1659_Matoya's Cave.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1659_Matoya's Cave.json index 67aef290..3c27ba55 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1659_Matoya's Cave.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1659_Matoya's Cave.json @@ -12,6 +12,7 @@ "Y": 203.98, "Z": 127.91626 }, + "StopDistance": 5, "TerritoryId": 478, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1660_Forbidden Knowledge.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1660_Forbidden Knowledge.json similarity index 74% rename from QuestPaths/3.x - Heavensward/MSQ/1660_Forbidden Knowledge.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1660_Forbidden Knowledge.json index 61d24481..1a656cdf 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1660_Forbidden Knowledge.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1660_Forbidden Knowledge.json @@ -12,6 +12,7 @@ "Y": 38.43, "Z": 15.854065 }, + "StopDistance": 7, "TerritoryId": 463, "InteractionType": "AcceptQuest" } @@ -27,6 +28,7 @@ "Y": 38.43, "Z": 15.854065 }, + "StopDistance": 7, "TerritoryId": 463, "InteractionType": "Interact" } @@ -42,6 +44,7 @@ "Y": 38.43, "Z": 3.5552979 }, + "StopDistance": 7, "TerritoryId": 463, "InteractionType": "Interact" } @@ -59,7 +62,23 @@ }, "TerritoryId": 463, "InteractionType": "Interact", - "TargetTerritoryId": 399 + "TargetTerritoryId": 399, + "SkipConditions": { + "StepIf": { + "NotInTerritory": [ + 463 + ] + } + } + }, + { + "Position": { + "X": 228.06944, + "Y": 228.11594, + "Z": 767.1184 + }, + "TerritoryId": 399, + "InteractionType": "WalkTo" }, { "DataId": 1012427, @@ -69,7 +88,8 @@ "Z": 767.87964 }, "TerritoryId": 399, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DisableNavmesh": true } ] }, @@ -86,6 +106,16 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 228.06944, + "Y": 228.11594, + "Z": 767.1184 + }, + "TerritoryId": 399, + "InteractionType": "WalkTo", + "DisableNavmesh": true + }, { "DataId": 2005336, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/1661_An Eye for Aether.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1661_An Eye for Aether.json similarity index 98% rename from QuestPaths/3.x - Heavensward/MSQ/1661_An Eye for Aether.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1661_An Eye for Aether.json index 6b83be5f..cf6e1fdd 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1661_An Eye for Aether.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1661_An Eye for Aether.json @@ -27,6 +27,7 @@ "Y": 137.42972, "Z": 701.4724 }, + "StopDistance": 7, "TerritoryId": 399, "InteractionType": "Interact" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1662_Hour of Departure.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1662_Hour of Departure.json similarity index 68% rename from QuestPaths/3.x - Heavensward/MSQ/1662_Hour of Departure.json rename to QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1662_Hour of Departure.json index c6889d58..b79ad407 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1662_Hour of Departure.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1662_Hour of Departure.json @@ -12,6 +12,7 @@ "Y": -14.34896, "Z": 51.651733 }, + "StopDistance": 5, "TerritoryId": 419, "InteractionType": "AcceptQuest" } @@ -48,6 +49,14 @@ "AethernetShortcut": [ "[Ishgard] Athenaeum Astrologicum", "[Ishgard] The Forgotten Knight" + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 ] }, { @@ -59,7 +68,50 @@ }, "TerritoryId": 418, "InteractionType": "Interact", - "$": "16 1 0 0 0 128 -> 33 1 0 0 0 192" + "$": "16 1 0 0 0 128 -> 33 1 0 0 0 192", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "Position": { + "X": 89.00678, + "Y": 1.6069314, + "Z": 67.770386 + }, + "TerritoryId": 418, + "InteractionType": "WalkTo", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + -32 + ] + }, + { + "Position": { + "X": 74.918564, + "Y": -13.879314, + "Z": 68.86857 + }, + "TerritoryId": 418, + "InteractionType": "WalkTo", + "DisableNavmesh": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + -32 + ] }, { "DataId": 1012251, @@ -69,7 +121,15 @@ "Z": 40.268433 }, "TerritoryId": 418, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] } ] }, @@ -98,6 +158,7 @@ "Y": -9.313226E-10, "Z": 5.661072 }, + "StopDistance": 7, "TerritoryId": 433, "InteractionType": "Interact" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1663_The First Flight of the Excelsior.json b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1663_The First Flight of the Excelsior.json similarity index 100% rename from QuestPaths/3.x - Heavensward/MSQ/1663_The First Flight of the Excelsior.json rename to QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1663_The First Flight of the Excelsior.json diff --git a/QuestPaths/3.x - Heavensward/MSQ/1664_Systematic Exploration.json b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1664_Systematic Exploration.json similarity index 77% rename from QuestPaths/3.x - Heavensward/MSQ/1664_Systematic Exploration.json rename to QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1664_Systematic Exploration.json index 99382ded..3aef8e29 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1664_Systematic Exploration.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1664_Systematic Exploration.json @@ -29,7 +29,15 @@ }, "TerritoryId": 402, "InteractionType": "Interact", - "$": "0 0 0 0 0 0 -> 17 0 0 0 0 64" + "$": "0 0 0 0 0 0 -> 17 0 0 0 0 64", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 2006236, @@ -40,7 +48,15 @@ }, "TerritoryId": 402, "InteractionType": "Interact", - "$": "17 0 0 0 0 64 -> 33 1 0 0 0 192" + "$": "17 0 0 0 0 64 -> 33 1 0 0 0 192", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 2006238, @@ -50,7 +66,15 @@ "Z": -477.92786 }, "TerritoryId": 402, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] } ] }, diff --git a/QuestPaths/3.x - Heavensward/MSQ/1665_In Node We Trust.json b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1665_In Node We Trust.json similarity index 76% rename from QuestPaths/3.x - Heavensward/MSQ/1665_In Node We Trust.json rename to QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1665_In Node We Trust.json index de71d84a..09046438 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1665_In Node We Trust.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1665_In Node We Trust.json @@ -12,6 +12,7 @@ "Y": -176.4502, "Z": -579.3393 }, + "StopDistance": 7, "TerritoryId": 402, "InteractionType": "AcceptQuest", "DialogueChoices": [ @@ -34,6 +35,7 @@ "Y": -176.4502, "Z": -577.5082 }, + "StopDistance": 5, "TerritoryId": 402, "InteractionType": "Interact" } @@ -57,6 +59,24 @@ { "Sequence": 3, "Steps": [ + { + "Position": { + "X": -138.06377, + "Y": -158.1412, + "Z": -496.24612 + }, + "TerritoryId": 402, + "InteractionType": "WalkTo" + }, + { + "Position": { + "X": -147.24174, + "Y": -154.81604, + "Z": -498.42224 + }, + "TerritoryId": 402, + "InteractionType": "WalkTo" + }, { "DataId": 2006363, "Position": { @@ -80,7 +100,8 @@ "Z": -619.8978 }, "TerritoryId": 402, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "DisableNavmesh": true } ] } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1666_Chimerical Maintenance.json b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1666_Chimerical Maintenance.json similarity index 71% rename from QuestPaths/3.x - Heavensward/MSQ/1666_Chimerical Maintenance.json rename to QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1666_Chimerical Maintenance.json index f0d2c524..f1727762 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1666_Chimerical Maintenance.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1666_Chimerical Maintenance.json @@ -48,7 +48,15 @@ "KillEnemyDataIds": [ 4942 ], - "$": "0 0 0 0 0 0 -> 18 0 0 0 0 64" + "$": "0 0 0 0 0 0 -> 18 0 0 0 0 64", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 2005569, @@ -64,7 +72,15 @@ 4943, 4623 ], - "$": "18 0 0 0 0 64 -> 34 48 0 0 0 96" + "$": "18 0 0 0 0 64 -> 34 48 0 0 0 96", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] }, { "DataId": 2005567, @@ -79,6 +95,14 @@ "KillEnemyDataIds": [ 4614, 4942 + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 ] } ] @@ -101,6 +125,24 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 780.2551, + "Y": -21.268166, + "Z": -478.28162 + }, + "TerritoryId": 402, + "InteractionType": "WalkTo" + }, + { + "Position": { + "X": 778.6274, + "Y": -17.943024, + "Z": -487.80676 + }, + "TerritoryId": 402, + "InteractionType": "WalkTo" + }, { "DataId": 2006364, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/1667_Close Encounters of the VIth Kind.json b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1667_Close Encounters of the VIth Kind.json similarity index 92% rename from QuestPaths/3.x - Heavensward/MSQ/1667_Close Encounters of the VIth Kind.json rename to QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1667_Close Encounters of the VIth Kind.json index 6bd5abf8..79d9235b 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1667_Close Encounters of the VIth Kind.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1667_Close Encounters of the VIth Kind.json @@ -1,6 +1,9 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "JerryWester", + "TerritoryBlacklist": [ + 459 + ], "QuestSequence": [ { "Sequence": 0, @@ -12,6 +15,7 @@ "Y": 10.474376, "Z": 77.50049 }, + "StopDistance": 7, "TerritoryId": 402, "InteractionType": "AcceptQuest" } @@ -82,7 +86,8 @@ "Z": 456.53467 }, "TerritoryId": 402, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "DisableNavmesh": true } ] } diff --git a/QuestPaths/3.x - Heavensward/MSQ/1668_Fetters of Lament.json b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1668_Fetters of Lament.json similarity index 100% rename from QuestPaths/3.x - Heavensward/MSQ/1668_Fetters of Lament.json rename to QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1668_Fetters of Lament.json diff --git a/QuestPaths/3.x - Heavensward/MSQ/1669_Heavensward.json b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1669_Heavensward.json similarity index 84% rename from QuestPaths/3.x - Heavensward/MSQ/1669_Heavensward.json rename to QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1669_Heavensward.json index ec66a80c..6b6bd71c 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/1669_Heavensward.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1669_Heavensward.json @@ -13,7 +13,8 @@ "Z": -5.2339478 }, "TerritoryId": 402, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "Fly": true } ] }, @@ -66,7 +67,19 @@ ] }, { - "Sequence": 4 + "Sequence": 4, + "Steps": [ + { + "Position": { + "X": 0, + "Y": 0, + "Z": 0 + }, + "TerritoryId": 1, + "InteractionType": "WalkTo", + "Comment": "Filler" + } + ] }, { "Sequence": 5, @@ -88,6 +101,7 @@ "Y": 0.022254243, "Z": 4.623413 }, + "StopDistance": 5, "TerritoryId": 433, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 160b1cea..91193fee 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -325,14 +325,24 @@ "if": { "properties": { "InteractionType": { - "anyOf": [ - { - "const": "Interact" - }, - { - "const": "SinglePlayerDuty" - } - ] + "const": "Interact" + } + } + }, + "then": { + "required": [ + "DataId" + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "SinglePlayerDuty" + }, + "Emote": { + "not": true } } }, @@ -607,6 +617,9 @@ }, { "const": "CompleteQuest" + }, + { + "const": "SinglePlayerDuty" } ] } @@ -1009,7 +1022,9 @@ "not": { "anyOf": [ { - "required": ["SkipIf"] + "required": [ + "SkipIf" + ] } ] } diff --git a/Questionable.Model/V1/SkipStepConditions.cs b/Questionable.Model/V1/SkipStepConditions.cs index 1f420ca2..316b1cc1 100644 --- a/Questionable.Model/V1/SkipStepConditions.cs +++ b/Questionable.Model/V1/SkipStepConditions.cs @@ -19,6 +19,12 @@ public sealed class SkipStepConditions { if (Never) return false; - return Flying != null || Chocobo != null || InTerritory.Count > 0 || NotInTerritory.Count > 0 || Item != null; + return Flying != null || + Chocobo != null || + InTerritory.Count > 0 || + NotInTerritory.Count > 0 || + Item != null || + QuestsAccepted.Count > 0 || + QuestsCompleted.Count > 0; } } diff --git a/Questionable/Controller/MovementController.cs b/Questionable/Controller/MovementController.cs index 5332c404..1db1d5cf 100644 --- a/Questionable/Controller/MovementController.cs +++ b/Questionable/Controller/MovementController.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Linq; using System.Numerics; @@ -110,8 +111,24 @@ internal sealed class MovementController : IDisposable } if (!Destination.IsFlying) - _movementOverrideController.AdjustPath(navPoints); + { + (navPoints, bool recalculateNavmesh) = _movementOverrideController.AdjustPath(navPoints); + if (recalculateNavmesh && Destination.NavmeshCalculations < 10) + { + Destination.NavmeshCalculations++; + Destination.PartialRoute.AddRange(navPoints); + _logger.LogInformation("Running navmesh recalculation with fudged point ({From} to {To})", navPoints.Last(), Destination.Position); + _cancellationTokenSource = new(); + _cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(30)); + _pathfindTask = + _navmeshIpc.Pathfind(navPoints.Last(), Destination.Position, Destination.IsFlying, + _cancellationTokenSource.Token); + return; + } + } + + navPoints = Destination.PartialRoute.Concat(navPoints).ToList(); _logger.LogInformation("Navigating via route: [{Route}]", string.Join(" → ", _pathfindTask.Result.Select(x => x.ToString("G", CultureInfo.InvariantCulture)))); @@ -245,6 +262,7 @@ internal sealed class MovementController : IDisposable return pointOnFloor != null && Math.Abs(pointOnFloor.Value.Y - p.Y) > 0.5f; } + [MemberNotNull(nameof(Destination))] private void PrepareNavigation(EMovementType type, uint? dataId, Vector3 to, bool fly, bool sprint, float? stopDistance, bool ignoreDistanceToObject, bool land, bool useNavmesh) { @@ -271,6 +289,7 @@ internal sealed class MovementController : IDisposable PrepareNavigation(type, dataId, to, fly, sprint, stopDistance, ignoreDistanceToObject, land, true); _logger.LogInformation("Pathfinding to {Destination}", Destination); + Destination.NavmeshCalculations++; _cancellationTokenSource = new(); _cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(30)); _pathfindTask = @@ -336,7 +355,11 @@ internal sealed class MovementController : IDisposable bool CanSprint, bool IgnoreDistanceToObject, bool Land, - bool UseNavmesh); + bool UseNavmesh) + { + public int NavmeshCalculations { get; set; } + public List PartialRoute { get; } = []; + } public sealed class PathfindingFailedException : Exception { diff --git a/Questionable/Controller/NavigationOverrides/AlternateLocation.cs b/Questionable/Controller/NavigationOverrides/AlternateLocation.cs new file mode 100644 index 00000000..21367a21 --- /dev/null +++ b/Questionable/Controller/NavigationOverrides/AlternateLocation.cs @@ -0,0 +1,13 @@ +using System.Globalization; +using System.Numerics; + +namespace Questionable.Controller.NavigationOverrides; + +public sealed record AlternateLocation(Vector3 Point, bool RecalculateNavmesh) +{ + public override string ToString() + { + return string.Create(CultureInfo.InvariantCulture, + $"{nameof(Point)}: {Point:G}, {nameof(RecalculateNavmesh)}: {RecalculateNavmesh}"); + } +} diff --git a/Questionable/Controller/NavigationOverrides/BlacklistedArea.cs b/Questionable/Controller/NavigationOverrides/BlacklistedArea.cs index 5e49e874..d1b134ed 100644 --- a/Questionable/Controller/NavigationOverrides/BlacklistedArea.cs +++ b/Questionable/Controller/NavigationOverrides/BlacklistedArea.cs @@ -6,14 +6,15 @@ internal sealed record BlacklistedArea( ushort TerritoryId, Vector3 Center, float MinDistance, - float MaxDistance) : IBlacklistedLocation + float MaxDistance, + bool RecalculateNavmesh = false) : IBlacklistedLocation { - public Vector3? AdjustPoint(Vector3 point) + public AlternateLocation? AdjustPoint(Vector3 point) { float distance = (point - Center).Length(); if (distance < MinDistance || distance > MaxDistance) return null; - return Center + Vector3.Normalize(point - Center) * MaxDistance; + return new AlternateLocation(Center + Vector3.Normalize(point - Center) * MaxDistance, RecalculateNavmesh); } } diff --git a/Questionable/Controller/NavigationOverrides/BlacklistedPoint.cs b/Questionable/Controller/NavigationOverrides/BlacklistedPoint.cs index 2ad12d8e..ba8b86c0 100644 --- a/Questionable/Controller/NavigationOverrides/BlacklistedPoint.cs +++ b/Questionable/Controller/NavigationOverrides/BlacklistedPoint.cs @@ -6,14 +6,15 @@ public sealed record BlacklistedPoint( ushort TerritoryId, Vector3 Original, Vector3 Replacement, - float CheckDistance = 0.05f) : IBlacklistedLocation + float CheckDistance = 0.05f, + bool RecalculateNavmesh = false) : IBlacklistedLocation { - public Vector3? AdjustPoint(Vector3 point) + public AlternateLocation? AdjustPoint(Vector3 point) { float distance = (point - Original).Length(); if (distance > CheckDistance) return null; - return Replacement; + return new AlternateLocation(Replacement, RecalculateNavmesh); } } diff --git a/Questionable/Controller/NavigationOverrides/IBlacklistedLocation.cs b/Questionable/Controller/NavigationOverrides/IBlacklistedLocation.cs index f8ef2fda..e3b686c8 100644 --- a/Questionable/Controller/NavigationOverrides/IBlacklistedLocation.cs +++ b/Questionable/Controller/NavigationOverrides/IBlacklistedLocation.cs @@ -6,5 +6,5 @@ internal interface IBlacklistedLocation { ushort TerritoryId { get; } - Vector3? AdjustPoint(Vector3 point); + AlternateLocation? AdjustPoint(Vector3 point); } diff --git a/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs b/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs index 4d7c3343..3896aa21 100644 --- a/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs +++ b/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Globalization; +using System.Linq; using System.Numerics; using Dalamud.Plugin.Services; using Microsoft.Extensions.Logging; @@ -25,6 +26,7 @@ internal sealed class MovementOverrideController // 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)), + new BlacklistedPoint(132, new(48.5f, -8f, 98.25f), new(50.53978f, -8.046954f, 101.06045f)), // ul'dah lamp near adventuer's guild new BlacklistedPoint(130, new(59.5f, 4.25f, -118f), new(60.551353f, 4f, -119.76446f)), @@ -53,6 +55,9 @@ internal sealed class MovementOverrideController // moghome, mogmug's trial new BlacklistedPoint(400, new(384, -74, 648.75f), new(386.0543f, -72.409454f, 652.0184f), 3), + // leaving idyllshiret through the west gate attempts to run into this wall + new BlacklistedPoint(399, new(-514.4851f, 149.63762f, -480.58087f), new(-528.78656f, 151.17374f, -473.07077f), 5, true), + new BlacklistedPoint(1189, new(574f, -142.25f, 504.25f), new(574.44183f, -142.12766f, 507.60065f)), // kholusia, random rocks @@ -84,7 +89,7 @@ internal sealed class MovementOverrideController /// walked on without jumping, but if you teleport to the wrong side you're fucked otherwise. /// /// list of points to check - public void AdjustPath(List navPoints) + public (List, bool) AdjustPath(List navPoints) { foreach (var blacklistedArea in BlacklistedLocations) { @@ -93,17 +98,21 @@ internal sealed class MovementOverrideController for (int i = 0; i < navPoints.Count; ++i) { - Vector3? updatedPoint = blacklistedArea.AdjustPoint(navPoints[i]); + AlternateLocation? alternateLocation = blacklistedArea.AdjustPoint(navPoints[i]); - if (updatedPoint != null) + if (alternateLocation != null) { _logger.LogInformation("Fudging navmesh point from {Original} to {Replacement} in blacklisted area", navPoints[i].ToString("G", CultureInfo.InvariantCulture), - updatedPoint.Value.ToString("G", CultureInfo.InvariantCulture)); + alternateLocation); - navPoints[i] = updatedPoint.Value; + navPoints[i] = alternateLocation.Point; + if (alternateLocation.RecalculateNavmesh) + return (navPoints.Take(i + 1).ToList(), true); } } } + + return (navPoints, false); } } diff --git a/Questionable/Controller/QuestController.cs b/Questionable/Controller/QuestController.cs index 6297c4cd..6f00598f 100644 --- a/Questionable/Controller/QuestController.cs +++ b/Questionable/Controller/QuestController.cs @@ -4,6 +4,7 @@ using System.Linq; using Dalamud.Game.ClientState.Conditions; using Dalamud.Game.ClientState.Keys; using Dalamud.Plugin.Services; +using FFXIVClientStructs.FFXIV.Client.Game; using Microsoft.Extensions.Logging; using Questionable.Controller.Steps; using Questionable.Controller.Steps.Shared; @@ -28,7 +29,7 @@ internal sealed class QuestController private readonly YesAlreadyIpc _yesAlreadyIpc; private readonly IReadOnlyList _taskFactories; - private readonly object _lock = new(); + private readonly object _progressLock = new(); private QuestProgress? _startedQuest; private QuestProgress? _nextQuest; @@ -37,6 +38,13 @@ internal sealed class QuestController private ITask? _currentTask; private bool _automatic; + /// + /// Some combat encounters finish relatively early (i.e. they're done as part of progressing the quest, but not + /// technically necessary to progress the quest if we'd just run away and back). We add some slight delay, as + /// talking to NPCs, teleporting etc. won't successfully execute. + /// + private DateTime _safeAnimationEnd = DateTime.MinValue; + public QuestController( IClientState clientState, GameFunctions gameFunctions, @@ -90,13 +98,14 @@ internal sealed class QuestController public void Reload() { - lock (_lock) + lock (_progressLock) { _logger.LogInformation("Reload, resetting curent quest progress"); _startedQuest = null; _nextQuest = null; _simulatedQuest = null; + _safeAnimationEnd = DateTime.MinValue; DebugState = null; @@ -106,6 +115,20 @@ internal sealed class QuestController public void Update() { + unsafe + { + ActionManager* actionManager = ActionManager.Instance(); + if (actionManager != null) + { + float animationLock = Math.Max(actionManager->AnimationLock, + actionManager->CastTimeElapsed > 0 + ? actionManager->CastTimeTotal - actionManager->CastTimeElapsed + : 0); + if (animationLock > 0) + _safeAnimationEnd = DateTime.Now.AddSeconds(1 + animationLock); + } + } + UpdateCurrentQuest(); if (!_clientState.IsLoggedIn || _condition[ConditionFlag.Unconscious]) @@ -116,7 +139,8 @@ internal sealed class QuestController _movementController.Stop(); _combatController.Stop(); } - } else if (_keyState[VirtualKey.ESCAPE]) + } + else if (_keyState[VirtualKey.ESCAPE]) { if (_currentTask != null || _taskQueue.Count > 0) { @@ -134,7 +158,7 @@ internal sealed class QuestController && CurrentQuest is { Sequence: 0, Step: 0 } or { Sequence: 0, Step: 255 } && DateTime.Now >= CurrentQuest.StepProgress.StartedAt.AddSeconds(15)) { - lock (_lock) + lock (_progressLock) { _logger.LogWarning("Quest accept apparently didn't work out, resetting progress"); CurrentQuest.SetStep(0); @@ -149,7 +173,7 @@ internal sealed class QuestController private void UpdateCurrentQuest() { - lock (_lock) + lock (_progressLock) { DebugState = null; @@ -249,6 +273,12 @@ internal sealed class QuestController return; } + if (DateTime.Now < _safeAnimationEnd) + { + DebugState = "Waiting for Animation"; + return; + } + if (questToRun.Sequence != currentSequence) { questToRun.SetSequence(currentSequence); @@ -302,7 +332,7 @@ internal sealed class QuestController public void IncreaseStepCount(ushort? questId, int? sequence, bool shouldContinue = false) { - lock (_lock) + lock (_progressLock) { (QuestSequence? seq, QuestStep? step) = GetNextStep(); if (CurrentQuest == null || seq == null || step == null) @@ -587,7 +617,7 @@ internal sealed class QuestController public void Skip(ushort questQuestId, byte currentQuestSequence) { - lock (_lock) + lock (_progressLock) { if (_currentTask is ISkippableTask) _currentTask = null; diff --git a/Questionable/Controller/Steps/Shared/SkipCondition.cs b/Questionable/Controller/Steps/Shared/SkipCondition.cs index c4fd7d5f..6710071c 100644 --- a/Questionable/Controller/Steps/Shared/SkipCondition.cs +++ b/Questionable/Controller/Steps/Shared/SkipCondition.cs @@ -79,6 +79,20 @@ internal static class SkipCondition return true; } + if (SkipConditions.InTerritory.Count > 0 && + SkipConditions.InTerritory.Contains(clientState.TerritoryType)) + { + logger.LogInformation("Skipping step, as in a skip.InTerritory"); + return true; + } + + if (SkipConditions.NotInTerritory.Count > 0 && + !SkipConditions.NotInTerritory.Contains(clientState.TerritoryType)) + { + logger.LogInformation("Skipping step, as not in a skip.NotInTerritory"); + return true; + } + if (SkipConditions.QuestsCompleted.Count > 0 && SkipConditions.QuestsCompleted.All(gameFunctions.IsQuestComplete)) {