Limsa navmesh adjustments; add more role quests
authorLiza Carvelli <liza@carvel.li>
Fri, 12 Jul 2024 08:31:34 +0000 (10:31 +0200)
committerLiza Carvelli <liza@carvel.li>
Fri, 12 Jul 2024 08:31:34 +0000 (10:31 +0200)
31 files changed:
QuestPaths/Dawntrail/Role Quests/Magical Ranged/4842_Power Forgotten.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/Magical Ranged/4843_A Brand of Justice.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/Magical Ranged/4844_The Seeds of Popularity.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/Magical Ranged/4845_Floundering Fame.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/Magical Ranged/4846_Behind the Helm.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/Magical Ranged/4847_Heroes and Pretenders.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/MagicalRanged/4842_Power Forgotten.json [deleted file]
QuestPaths/Dawntrail/Role Quests/MagicalRanged/4843_A Brand of Justice.json [deleted file]
QuestPaths/Dawntrail/Role Quests/MagicalRanged/4844_The Seeds of Popularity.json [deleted file]
QuestPaths/Dawntrail/Role Quests/MagicalRanged/4845_Floundering Fame.json [deleted file]
QuestPaths/Dawntrail/Role Quests/MagicalRanged/4846_Behind the Helm.json [deleted file]
QuestPaths/Dawntrail/Role Quests/MagicalRanged/4847_Heroes and Pretenders.json [deleted file]
QuestPaths/Dawntrail/Role Quests/Melee/4830_The Hunter and the Hunted.json
QuestPaths/Dawntrail/Role Quests/Melee/4831_A Sea of Blood.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/Melee/4832_Who's Who.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/Melee/4833_Cornered Prey.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/Melee/4834_Impostor Syndrome.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/Melee/4835_A Hunter True.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/Physical Ranged/4836_To Steal a Steelhog.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/Physical Ranged/4837_Bandits Abound.json [new file with mode: 0644]
QuestPaths/Dawntrail/Role Quests/PhysicalRanged/4836_To Steal a Steelhog.json [deleted file]
QuestPaths/Dawntrail/Role Quests/PhysicalRanged/4837_Bandits Abound.json [deleted file]
QuestPaths/Dawntrail/Side Quests/Urqopacha/5030_An Unlikely Inspector.json [new file with mode: 0644]
QuestPaths/Dawntrail/Side Quests/Urqopacha/5031_The Carmine Secret.json [new file with mode: 0644]
QuestPaths/Dawntrail/Unlocks/Dungeons/5014_Something Stray in the Neighborhood.json [new file with mode: 0644]
Questionable/Controller/MovementController.cs
Questionable/Controller/NavigationOverrides/BlacklistedArea.cs [new file with mode: 0644]
Questionable/Controller/NavigationOverrides/BlacklistedPoint.cs [new file with mode: 0644]
Questionable/Controller/NavigationOverrides/IBlacklistedLocation.cs [new file with mode: 0644]
Questionable/Controller/NavigationOverrides/MovementOverrideController.cs [new file with mode: 0644]
Questionable/QuestionablePlugin.cs

diff --git a/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4842_Power Forgotten.json b/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4842_Power Forgotten.json
new file mode 100644 (file)
index 0000000..c23273f
--- /dev/null
@@ -0,0 +1,85 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048330,
+          "Position": {
+            "X": -28.732727,
+            "Y": -17.972864,
+            "Z": 194.72034
+          },
+          "TerritoryId": 1185,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1048335,
+          "Position": {
+            "X": -16.739136,
+            "Y": 0.5999997,
+            "Z": -55.10034
+          },
+          "TerritoryId": 963,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han"
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1048337,
+          "Position": {
+            "X": 155.87085,
+            "Y": 5.297462,
+            "Z": 618.2803
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Thavnair - Yedlihmad"
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 2013708,
+          "Position": {
+            "X": 48.90515,
+            "Y": 90.22656,
+            "Z": -83.024414
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 957,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048331,
+          "Position": {
+            "X": 214.03821,
+            "Y": 5.2600574,
+            "Z": 628.3817
+          },
+          "TerritoryId": 957,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 4843
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4843_A Brand of Justice.json b/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4843_A Brand of Justice.json
new file mode 100644 (file)
index 0000000..7b194cf
--- /dev/null
@@ -0,0 +1,142 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048331,
+          "Position": {
+            "X": 214.03821,
+            "Y": 5.2600574,
+            "Z": 628.3817
+          },
+          "TerritoryId": 957,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1048332,
+          "Position": {
+            "X": 52.506226,
+            "Y": -5.20688E-07,
+            "Z": -54.154297
+          },
+          "TerritoryId": 963,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han"
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1048340,
+          "Position": {
+            "X": -186.69415,
+            "Y": 4.0499983,
+            "Z": -108.11017
+          },
+          "TerritoryId": 963,
+          "InteractionType": "Interact",
+          "AethernetShortcut": [
+            "[Radz-at-Han] Aetheryte Plaza",
+            "[Radz-at-Han] Hall of the Radiant Host"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1048332,
+          "Position": {
+            "X": 52.506226,
+            "Y": -5.20688E-07,
+            "Z": -54.154297
+          },
+          "TerritoryId": 963,
+          "InteractionType": "Interact",
+          "AethernetShortcut": [
+            "[Radz-at-Han] Hall of the Radiant Host",
+            "[Radz-at-Han] Aetheryte Plaza"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 1048343,
+          "Position": {
+            "X": -336.53772,
+            "Y": 52.243706,
+            "Z": -165.05688
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Thavnair - Great Work"
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "Position": {
+            "X": -427.5108,
+            "Y": -0.015813708,
+            "Z": -710.37146
+          },
+          "StopDistance": 0.25,
+          "TerritoryId": 957,
+          "InteractionType": "Combat",
+          "EnemySpawnType": "AutoOnEnterArea",
+          "KillEnemyDataIds": [
+            17625
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 6,
+      "Steps": [
+        {
+          "DataId": 1048344,
+          "Position": {
+            "X": -419.028,
+            "Y": 0.06509568,
+            "Z": -710.9331
+          },
+          "StopDistance": 7,
+          "TerritoryId": 957,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048331,
+          "Position": {
+            "X": 214.03821,
+            "Y": 5.2600574,
+            "Z": 628.3817
+          },
+          "TerritoryId": 957,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 4844
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4844_The Seeds of Popularity.json b/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4844_The Seeds of Popularity.json
new file mode 100644 (file)
index 0000000..d1926e0
--- /dev/null
@@ -0,0 +1,164 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048331,
+          "Position": {
+            "X": 214.03821,
+            "Y": 5.2600574,
+            "Z": 628.3817
+          },
+          "TerritoryId": 957,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1048348,
+          "Position": {
+            "X": -118.76105,
+            "Y": 88.94139,
+            "Z": -556.90857
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "Position": {
+            "X": 77.94611,
+            "Y": 82.44486,
+            "Z": -548.9286
+          },
+          "StopDistance": 10,
+          "TerritoryId": 957,
+          "InteractionType": "Instruction",
+          "EnemySpawnType": "AutoOnEnterArea",
+          "KillEnemyDataIds": [
+            17626
+          ],
+          "ItemId": 2003495,
+          "Comment": "TODO Needs item use?"
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1048348,
+          "Position": {
+            "X": -118.76105,
+            "Y": 88.94139,
+            "Z": -556.90857
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 1048350,
+          "Position": {
+            "X": -508.53745,
+            "Y": 12.375278,
+            "Z": 97.3678
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Thavnair - Great Work"
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "DataId": 1048354,
+          "Position": {
+            "X": 154.28394,
+            "Y": 5.2641535,
+            "Z": 618.40234
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Thavnair - Yedlihmad",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
+        },
+        {
+          "DataId": 1048355,
+          "Position": {
+            "X": 227.98499,
+            "Y": 10.19656,
+            "Z": 563.31726
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
+        },
+        {
+          "DataId": 1048352,
+          "Position": {
+            "X": 195.5138,
+            "Y": 15.136732,
+            "Z": 529.015
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048331,
+          "Position": {
+            "X": 214.03821,
+            "Y": 5.2600574,
+            "Z": 628.3817
+          },
+          "TerritoryId": 957,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 4845
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4845_Floundering Fame.json b/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4845_Floundering Fame.json
new file mode 100644 (file)
index 0000000..b6ab46a
--- /dev/null
@@ -0,0 +1,346 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048331,
+          "Position": {
+            "X": 214.03821,
+            "Y": 5.2600574,
+            "Z": 628.3817
+          },
+          "TerritoryId": 957,
+          "InteractionType": "AcceptQuest",
+          "DialogueChoices": [
+            {
+              "Type": "List",
+              "Prompt": "TEXT_KINGBA531_04845_Q2_000_200",
+              "Answer": "TEXT_KINGBA531_04845_A1_000_200"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1048357,
+          "Position": {
+            "X": -183.21509,
+            "Y": 36,
+            "Z": 53.116577
+          },
+          "TerritoryId": 963,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han",
+          "AethernetShortcut": [
+            "[Radz-at-Han] Aetheryte Plaza",
+            "[Radz-at-Han] Ruveydah Fibers"
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
+        },
+        {
+          "DataId": 1048359,
+          "Position": {
+            "X": -175.0058,
+            "Y": 36.051327,
+            "Z": 104.20386
+          },
+          "TerritoryId": 963,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
+        },
+        {
+          "DataId": 1048360,
+          "Position": {
+            "X": -237.41516,
+            "Y": 35.999996,
+            "Z": 102.067505
+          },
+          "TerritoryId": 963,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1048362,
+          "Position": {
+            "X": -10.544006,
+            "Y": 2.999996,
+            "Z": -204.91345
+          },
+          "TerritoryId": 963,
+          "InteractionType": "Interact",
+          "AethernetShortcut": [
+            "[Radz-at-Han] Ruveydah Fibers",
+            "[Radz-at-Han] Mehryde's Meyhane"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1048361,
+          "Position": {
+            "X": 9.262146,
+            "Y": 0.92,
+            "Z": -103.31885
+          },
+          "TerritoryId": 963,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 1048363,
+          "Position": {
+            "X": 369.40564,
+            "Y": 3.9809039,
+            "Z": -219.40955
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Thavnair - Palaka's Stand"
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "DataId": 2013713,
+          "Position": {
+            "X": 362.35596,
+            "Y": 3.616333,
+            "Z": -241.77924
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 6,
+      "Steps": [
+        {
+          "DataId": 2013713,
+          "Position": {
+            "X": 362.35596,
+            "Y": 3.616333,
+            "Z": -241.77924
+          },
+          "StopDistance": 0.25,
+          "TerritoryId": 957,
+          "InteractionType": "Interact",
+          "Fly": true,
+          "SkipIf": [
+            "NotTargetable"
+          ],
+          "DialogueChoices": [
+            {
+              "Type": "YesNo",
+              "Prompt": "TEXT_KINGBA531_04845_Q1_000_054",
+              "Yes": true
+            }
+          ],
+          "Comment": "retry point"
+        },
+        {
+          "DataId": 1048364,
+          "Position": {
+            "X": 387.43045,
+            "Y": 5.8062716,
+            "Z": -203.20459
+          },
+          "TerritoryId": 957,
+          "InteractionType": "WaitForNpcAtPosition",
+          "StopDistance": 50,
+          "Mount": false,
+          "Sprint": false
+        },
+        {
+          "Position": {
+            "X": 386.85394,
+            "Y": 3.0972311,
+            "Z": -220.57103
+          },
+          "TerritoryId": 957,
+          "InteractionType": "WalkTo",
+          "Mount": false,
+          "Sprint": false
+        },
+        {
+          "DataId": 1048364,
+          "Position": {
+            "X": 398.46808,
+            "Y": 12.103142,
+            "Z": -174.068
+          },
+          "TerritoryId": 957,
+          "InteractionType": "WaitForNpcAtPosition",
+          "StopDistance": 50,
+          "Mount": false,
+          "Sprint": false
+        },
+        {
+          "Position": {
+            "X": 395.88028,
+            "Y": 10.267179,
+            "Z": -192.21916
+          },
+          "TerritoryId": 957,
+          "InteractionType": "WalkTo",
+          "Mount": false,
+          "Sprint": false
+        },
+        {
+          "DataId": 1048364,
+          "Position": {
+            "X": 395.6862,
+            "Y": 11.099065,
+            "Z": -169.7558
+          },
+          "TerritoryId": 957,
+          "InteractionType": "WaitForNpcAtPosition",
+          "StopDistance": 50,
+          "Mount": false,
+          "Sprint": false
+        },
+        {
+          "Position": {
+            "X": 398.42825,
+            "Y": 12.946791,
+            "Z": -180.08061
+          },
+          "TerritoryId": 957,
+          "InteractionType": "WalkTo",
+          "Mount": false,
+          "Sprint": false
+        },
+        {
+          "Position": {
+            "X": 368.02908,
+            "Y": 5.7749786,
+            "Z": -135.06207
+          },
+          "TerritoryId": 957,
+          "InteractionType": "WalkTo",
+          "Mount": false,
+          "Sprint": false
+        },
+        {
+          "Position": {
+            "X": 300.81885,
+            "Y": 18.925224,
+            "Z": -43.56831
+          },
+          "TerritoryId": 957,
+          "InteractionType": "WalkTo",
+          "Mount": false,
+          "Sprint": false
+        },
+        {
+          "DataId": 1048364,
+          "Position": {
+            "X": 274.41418,
+            "Y": 17.838093,
+            "Z": -2.1020741
+          },
+          "TerritoryId": 957,
+          "InteractionType": "WaitForNpcAtPosition",
+          "StopDistance": 50,
+          "Mount": false,
+          "Sprint": false
+        },
+        {
+          "Position": {
+            "X": 256.60135,
+            "Y": 19.312042,
+            "Z": -1.2628903
+          },
+          "TerritoryId": 957,
+          "InteractionType": "WalkTo",
+          "Mount": false,
+          "Sprint": false
+        },
+        {
+          "Position": {
+            "X": 244.453,
+            "Y": 16.725914,
+            "Z": 14.936783
+          },
+          "TerritoryId": 957,
+          "InteractionType": "WalkTo",
+          "Mount": false,
+          "Sprint": false
+        }
+      ]
+    },
+    {
+      "Sequence": 7,
+      "Steps": [
+        {
+          "DataId": 1048368,
+          "Position": {
+            "X": 239.33765,
+            "Y": 11.061386,
+            "Z": 69.99304
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048331,
+          "Position": {
+            "X": 214.03821,
+            "Y": 5.2600574,
+            "Z": 628.3817
+          },
+          "TerritoryId": 957,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Thavnair - Yedlihmad",
+          "NextQuestId": 4846
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4846_Behind the Helm.json b/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4846_Behind the Helm.json
new file mode 100644 (file)
index 0000000..5fb5341
--- /dev/null
@@ -0,0 +1,138 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048331,
+          "Position": {
+            "X": 214.03821,
+            "Y": 5.2600574,
+            "Z": 628.3817
+          },
+          "TerritoryId": 957,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1048330,
+          "Position": {
+            "X": -28.732727,
+            "Y": -17.972864,
+            "Z": 194.72034
+          },
+          "TerritoryId": 1185,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Tuliyollal",
+          "AethernetShortcut": [
+            "[Tuliyollal] Aetheryte Plaza",
+            "[Tuliyollal] Bayside Bevy Marketplace"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "Position": {
+            "X": 327.87598,
+            "Y": -15.862221,
+            "Z": -236.6933
+          },
+          "TerritoryId": 1190,
+          "InteractionType": "WalkTo",
+          "AetheryteShortcut": "Shaaloani - Mehwahhetsoan",
+          "SkipIf": [
+            "FlyingUnlocked"
+          ]
+        },
+        {
+          "Position": {
+            "X": 442.79218,
+            "Y": -16.660347,
+            "Z": -111.04725
+          },
+          "TerritoryId": 1190,
+          "InteractionType": "Combat",
+          "EnemySpawnType": "AutoOnEnterArea",
+          "KillEnemyDataIds": [
+            17627
+          ],
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1048369,
+          "Position": {
+            "X": 441.5503,
+            "Y": -16.619904,
+            "Z": -109.14783
+          },
+          "StopDistance": 7,
+          "TerritoryId": 1190,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 1048333,
+          "Position": {
+            "X": 52.506226,
+            "Y": -5.20688E-07,
+            "Z": -54.154297
+          },
+          "TerritoryId": 963,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Radz-at-Han"
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "DataId": 1048372,
+          "Position": {
+            "X": -53.177734,
+            "Y": -1.9999962,
+            "Z": 147.60046
+          },
+          "StopDistance": 7,
+          "TerritoryId": 963,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048331,
+          "Position": {
+            "X": 214.03821,
+            "Y": 5.2600574,
+            "Z": 628.3817
+          },
+          "TerritoryId": 957,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Thavnair - Yedlihmad",
+          "NextQuestId": 4847
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4847_Heroes and Pretenders.json b/QuestPaths/Dawntrail/Role Quests/Magical Ranged/4847_Heroes and Pretenders.json
new file mode 100644 (file)
index 0000000..d3023ce
--- /dev/null
@@ -0,0 +1,95 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "TerritoryBlacklist": [
+    1218
+  ],
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048331,
+          "Position": {
+            "X": 214.03821,
+            "Y": 5.2600574,
+            "Z": 628.3817
+          },
+          "TerritoryId": 957,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1048374,
+          "Position": {
+            "X": -77.04285,
+            "Y": 99.946754,
+            "Z": -711.0552
+          },
+          "TerritoryId": 957,
+          "InteractionType": "SinglePlayerDuty",
+          "AetheryteShortcut": "Radz-at-Han",
+          "AethernetShortcut": [
+            "[Radz-at-Han] Aetheryte Plaza",
+            "[Radz-at-Han] The Gate of First Sight (Thavnair)"
+          ],
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "Position": {
+            "X": 0,
+            "Y": 0,
+            "Z": 0
+          },
+          "TerritoryId": 1,
+          "InteractionType": "WalkTo",
+          "Comment": "Filler"
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1048374,
+          "Position": {
+            "X": -77.04285,
+            "Y": 99.946754,
+            "Z": -711.0552
+          },
+          "TerritoryId": 957,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048330,
+          "Position": {
+            "X": -28.732727,
+            "Y": -17.972864,
+            "Z": 194.72034
+          },
+          "TerritoryId": 1185,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Tuliyollal",
+          "AethernetShortcut": [
+            "[Tuliyollal] Aetheryte Plaza",
+            "[Tuliyollal] Bayside Bevy Marketplace"
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4842_Power Forgotten.json b/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4842_Power Forgotten.json
deleted file mode 100644 (file)
index c23273f..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "$schema": "https://carvel.li/questionable/quest-1.0",
-  "Author": "liza",
-  "QuestSequence": [
-    {
-      "Sequence": 0,
-      "Steps": [
-        {
-          "DataId": 1048330,
-          "Position": {
-            "X": -28.732727,
-            "Y": -17.972864,
-            "Z": 194.72034
-          },
-          "TerritoryId": 1185,
-          "InteractionType": "AcceptQuest"
-        }
-      ]
-    },
-    {
-      "Sequence": 1,
-      "Steps": [
-        {
-          "DataId": 1048335,
-          "Position": {
-            "X": -16.739136,
-            "Y": 0.5999997,
-            "Z": -55.10034
-          },
-          "TerritoryId": 963,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Radz-at-Han"
-        }
-      ]
-    },
-    {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "DataId": 1048337,
-          "Position": {
-            "X": 155.87085,
-            "Y": 5.297462,
-            "Z": 618.2803
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Thavnair - Yedlihmad"
-        }
-      ]
-    },
-    {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "DataId": 2013708,
-          "Position": {
-            "X": 48.90515,
-            "Y": 90.22656,
-            "Z": -83.024414
-          },
-          "StopDistance": 0.5,
-          "TerritoryId": 957,
-          "InteractionType": "Interact"
-        }
-      ]
-    },
-    {
-      "Sequence": 255,
-      "Steps": [
-        {
-          "DataId": 1048331,
-          "Position": {
-            "X": 214.03821,
-            "Y": 5.2600574,
-            "Z": 628.3817
-          },
-          "TerritoryId": 957,
-          "InteractionType": "CompleteQuest",
-          "NextQuestId": 4843
-        }
-      ]
-    }
-  ]
-}
diff --git a/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4843_A Brand of Justice.json b/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4843_A Brand of Justice.json
deleted file mode 100644 (file)
index 7b194cf..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-{
-  "$schema": "https://carvel.li/questionable/quest-1.0",
-  "Author": "liza",
-  "QuestSequence": [
-    {
-      "Sequence": 0,
-      "Steps": [
-        {
-          "DataId": 1048331,
-          "Position": {
-            "X": 214.03821,
-            "Y": 5.2600574,
-            "Z": 628.3817
-          },
-          "TerritoryId": 957,
-          "InteractionType": "AcceptQuest"
-        }
-      ]
-    },
-    {
-      "Sequence": 1,
-      "Steps": [
-        {
-          "DataId": 1048332,
-          "Position": {
-            "X": 52.506226,
-            "Y": -5.20688E-07,
-            "Z": -54.154297
-          },
-          "TerritoryId": 963,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Radz-at-Han"
-        }
-      ]
-    },
-    {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "DataId": 1048340,
-          "Position": {
-            "X": -186.69415,
-            "Y": 4.0499983,
-            "Z": -108.11017
-          },
-          "TerritoryId": 963,
-          "InteractionType": "Interact",
-          "AethernetShortcut": [
-            "[Radz-at-Han] Aetheryte Plaza",
-            "[Radz-at-Han] Hall of the Radiant Host"
-          ]
-        }
-      ]
-    },
-    {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "DataId": 1048332,
-          "Position": {
-            "X": 52.506226,
-            "Y": -5.20688E-07,
-            "Z": -54.154297
-          },
-          "TerritoryId": 963,
-          "InteractionType": "Interact",
-          "AethernetShortcut": [
-            "[Radz-at-Han] Hall of the Radiant Host",
-            "[Radz-at-Han] Aetheryte Plaza"
-          ]
-        }
-      ]
-    },
-    {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "DataId": 1048343,
-          "Position": {
-            "X": -336.53772,
-            "Y": 52.243706,
-            "Z": -165.05688
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Thavnair - Great Work"
-        }
-      ]
-    },
-    {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "Position": {
-            "X": -427.5108,
-            "Y": -0.015813708,
-            "Z": -710.37146
-          },
-          "StopDistance": 0.25,
-          "TerritoryId": 957,
-          "InteractionType": "Combat",
-          "EnemySpawnType": "AutoOnEnterArea",
-          "KillEnemyDataIds": [
-            17625
-          ]
-        }
-      ]
-    },
-    {
-      "Sequence": 6,
-      "Steps": [
-        {
-          "DataId": 1048344,
-          "Position": {
-            "X": -419.028,
-            "Y": 0.06509568,
-            "Z": -710.9331
-          },
-          "StopDistance": 7,
-          "TerritoryId": 957,
-          "InteractionType": "Interact"
-        }
-      ]
-    },
-    {
-      "Sequence": 255,
-      "Steps": [
-        {
-          "DataId": 1048331,
-          "Position": {
-            "X": 214.03821,
-            "Y": 5.2600574,
-            "Z": 628.3817
-          },
-          "TerritoryId": 957,
-          "InteractionType": "CompleteQuest",
-          "NextQuestId": 4844
-        }
-      ]
-    }
-  ]
-}
diff --git a/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4844_The Seeds of Popularity.json b/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4844_The Seeds of Popularity.json
deleted file mode 100644 (file)
index d1926e0..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-{
-  "$schema": "https://carvel.li/questionable/quest-1.0",
-  "Author": "liza",
-  "QuestSequence": [
-    {
-      "Sequence": 0,
-      "Steps": [
-        {
-          "DataId": 1048331,
-          "Position": {
-            "X": 214.03821,
-            "Y": 5.2600574,
-            "Z": 628.3817
-          },
-          "TerritoryId": 957,
-          "InteractionType": "AcceptQuest"
-        }
-      ]
-    },
-    {
-      "Sequence": 1,
-      "Steps": [
-        {
-          "DataId": 1048348,
-          "Position": {
-            "X": -118.76105,
-            "Y": 88.94139,
-            "Z": -556.90857
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact"
-        }
-      ]
-    },
-    {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 77.94611,
-            "Y": 82.44486,
-            "Z": -548.9286
-          },
-          "StopDistance": 10,
-          "TerritoryId": 957,
-          "InteractionType": "Instruction",
-          "EnemySpawnType": "AutoOnEnterArea",
-          "KillEnemyDataIds": [
-            17626
-          ],
-          "ItemId": 2003495,
-          "Comment": "TODO Needs item use?"
-        }
-      ]
-    },
-    {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "DataId": 1048348,
-          "Position": {
-            "X": -118.76105,
-            "Y": 88.94139,
-            "Z": -556.90857
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact"
-        }
-      ]
-    },
-    {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "DataId": 1048350,
-          "Position": {
-            "X": -508.53745,
-            "Y": 12.375278,
-            "Z": 97.3678
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Thavnair - Great Work"
-        }
-      ]
-    },
-    {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "DataId": 1048354,
-          "Position": {
-            "X": 154.28394,
-            "Y": 5.2641535,
-            "Z": 618.40234
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Thavnair - Yedlihmad",
-          "CompletionQuestVariablesFlags": [
-            null,
-            null,
-            null,
-            null,
-            null,
-            32
-          ]
-        },
-        {
-          "DataId": 1048355,
-          "Position": {
-            "X": 227.98499,
-            "Y": 10.19656,
-            "Z": 563.31726
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact",
-          "CompletionQuestVariablesFlags": [
-            null,
-            null,
-            null,
-            null,
-            null,
-            64
-          ]
-        },
-        {
-          "DataId": 1048352,
-          "Position": {
-            "X": 195.5138,
-            "Y": 15.136732,
-            "Z": 529.015
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact",
-          "CompletionQuestVariablesFlags": [
-            null,
-            null,
-            null,
-            null,
-            null,
-            128
-          ]
-        }
-      ]
-    },
-    {
-      "Sequence": 255,
-      "Steps": [
-        {
-          "DataId": 1048331,
-          "Position": {
-            "X": 214.03821,
-            "Y": 5.2600574,
-            "Z": 628.3817
-          },
-          "TerritoryId": 957,
-          "InteractionType": "CompleteQuest",
-          "NextQuestId": 4845
-        }
-      ]
-    }
-  ]
-}
diff --git a/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4845_Floundering Fame.json b/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4845_Floundering Fame.json
deleted file mode 100644 (file)
index b6ab46a..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-{
-  "$schema": "https://carvel.li/questionable/quest-1.0",
-  "Author": "liza",
-  "QuestSequence": [
-    {
-      "Sequence": 0,
-      "Steps": [
-        {
-          "DataId": 1048331,
-          "Position": {
-            "X": 214.03821,
-            "Y": 5.2600574,
-            "Z": 628.3817
-          },
-          "TerritoryId": 957,
-          "InteractionType": "AcceptQuest",
-          "DialogueChoices": [
-            {
-              "Type": "List",
-              "Prompt": "TEXT_KINGBA531_04845_Q2_000_200",
-              "Answer": "TEXT_KINGBA531_04845_A1_000_200"
-            }
-          ]
-        }
-      ]
-    },
-    {
-      "Sequence": 1,
-      "Steps": [
-        {
-          "DataId": 1048357,
-          "Position": {
-            "X": -183.21509,
-            "Y": 36,
-            "Z": 53.116577
-          },
-          "TerritoryId": 963,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Radz-at-Han",
-          "AethernetShortcut": [
-            "[Radz-at-Han] Aetheryte Plaza",
-            "[Radz-at-Han] Ruveydah Fibers"
-          ],
-          "CompletionQuestVariablesFlags": [
-            null,
-            null,
-            null,
-            null,
-            null,
-            128
-          ]
-        },
-        {
-          "DataId": 1048359,
-          "Position": {
-            "X": -175.0058,
-            "Y": 36.051327,
-            "Z": 104.20386
-          },
-          "TerritoryId": 963,
-          "InteractionType": "Interact",
-          "CompletionQuestVariablesFlags": [
-            null,
-            null,
-            null,
-            null,
-            null,
-            64
-          ]
-        },
-        {
-          "DataId": 1048360,
-          "Position": {
-            "X": -237.41516,
-            "Y": 35.999996,
-            "Z": 102.067505
-          },
-          "TerritoryId": 963,
-          "InteractionType": "Interact",
-          "CompletionQuestVariablesFlags": [
-            null,
-            null,
-            null,
-            null,
-            null,
-            32
-          ]
-        }
-      ]
-    },
-    {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "DataId": 1048362,
-          "Position": {
-            "X": -10.544006,
-            "Y": 2.999996,
-            "Z": -204.91345
-          },
-          "TerritoryId": 963,
-          "InteractionType": "Interact",
-          "AethernetShortcut": [
-            "[Radz-at-Han] Ruveydah Fibers",
-            "[Radz-at-Han] Mehryde's Meyhane"
-          ]
-        }
-      ]
-    },
-    {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "DataId": 1048361,
-          "Position": {
-            "X": 9.262146,
-            "Y": 0.92,
-            "Z": -103.31885
-          },
-          "TerritoryId": 963,
-          "InteractionType": "Interact"
-        }
-      ]
-    },
-    {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "DataId": 1048363,
-          "Position": {
-            "X": 369.40564,
-            "Y": 3.9809039,
-            "Z": -219.40955
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Thavnair - Palaka's Stand"
-        }
-      ]
-    },
-    {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "DataId": 2013713,
-          "Position": {
-            "X": 362.35596,
-            "Y": 3.616333,
-            "Z": -241.77924
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact"
-        }
-      ]
-    },
-    {
-      "Sequence": 6,
-      "Steps": [
-        {
-          "DataId": 2013713,
-          "Position": {
-            "X": 362.35596,
-            "Y": 3.616333,
-            "Z": -241.77924
-          },
-          "StopDistance": 0.25,
-          "TerritoryId": 957,
-          "InteractionType": "Interact",
-          "Fly": true,
-          "SkipIf": [
-            "NotTargetable"
-          ],
-          "DialogueChoices": [
-            {
-              "Type": "YesNo",
-              "Prompt": "TEXT_KINGBA531_04845_Q1_000_054",
-              "Yes": true
-            }
-          ],
-          "Comment": "retry point"
-        },
-        {
-          "DataId": 1048364,
-          "Position": {
-            "X": 387.43045,
-            "Y": 5.8062716,
-            "Z": -203.20459
-          },
-          "TerritoryId": 957,
-          "InteractionType": "WaitForNpcAtPosition",
-          "StopDistance": 50,
-          "Mount": false,
-          "Sprint": false
-        },
-        {
-          "Position": {
-            "X": 386.85394,
-            "Y": 3.0972311,
-            "Z": -220.57103
-          },
-          "TerritoryId": 957,
-          "InteractionType": "WalkTo",
-          "Mount": false,
-          "Sprint": false
-        },
-        {
-          "DataId": 1048364,
-          "Position": {
-            "X": 398.46808,
-            "Y": 12.103142,
-            "Z": -174.068
-          },
-          "TerritoryId": 957,
-          "InteractionType": "WaitForNpcAtPosition",
-          "StopDistance": 50,
-          "Mount": false,
-          "Sprint": false
-        },
-        {
-          "Position": {
-            "X": 395.88028,
-            "Y": 10.267179,
-            "Z": -192.21916
-          },
-          "TerritoryId": 957,
-          "InteractionType": "WalkTo",
-          "Mount": false,
-          "Sprint": false
-        },
-        {
-          "DataId": 1048364,
-          "Position": {
-            "X": 395.6862,
-            "Y": 11.099065,
-            "Z": -169.7558
-          },
-          "TerritoryId": 957,
-          "InteractionType": "WaitForNpcAtPosition",
-          "StopDistance": 50,
-          "Mount": false,
-          "Sprint": false
-        },
-        {
-          "Position": {
-            "X": 398.42825,
-            "Y": 12.946791,
-            "Z": -180.08061
-          },
-          "TerritoryId": 957,
-          "InteractionType": "WalkTo",
-          "Mount": false,
-          "Sprint": false
-        },
-        {
-          "Position": {
-            "X": 368.02908,
-            "Y": 5.7749786,
-            "Z": -135.06207
-          },
-          "TerritoryId": 957,
-          "InteractionType": "WalkTo",
-          "Mount": false,
-          "Sprint": false
-        },
-        {
-          "Position": {
-            "X": 300.81885,
-            "Y": 18.925224,
-            "Z": -43.56831
-          },
-          "TerritoryId": 957,
-          "InteractionType": "WalkTo",
-          "Mount": false,
-          "Sprint": false
-        },
-        {
-          "DataId": 1048364,
-          "Position": {
-            "X": 274.41418,
-            "Y": 17.838093,
-            "Z": -2.1020741
-          },
-          "TerritoryId": 957,
-          "InteractionType": "WaitForNpcAtPosition",
-          "StopDistance": 50,
-          "Mount": false,
-          "Sprint": false
-        },
-        {
-          "Position": {
-            "X": 256.60135,
-            "Y": 19.312042,
-            "Z": -1.2628903
-          },
-          "TerritoryId": 957,
-          "InteractionType": "WalkTo",
-          "Mount": false,
-          "Sprint": false
-        },
-        {
-          "Position": {
-            "X": 244.453,
-            "Y": 16.725914,
-            "Z": 14.936783
-          },
-          "TerritoryId": 957,
-          "InteractionType": "WalkTo",
-          "Mount": false,
-          "Sprint": false
-        }
-      ]
-    },
-    {
-      "Sequence": 7,
-      "Steps": [
-        {
-          "DataId": 1048368,
-          "Position": {
-            "X": 239.33765,
-            "Y": 11.061386,
-            "Z": 69.99304
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact"
-        }
-      ]
-    },
-    {
-      "Sequence": 255,
-      "Steps": [
-        {
-          "DataId": 1048331,
-          "Position": {
-            "X": 214.03821,
-            "Y": 5.2600574,
-            "Z": 628.3817
-          },
-          "TerritoryId": 957,
-          "InteractionType": "CompleteQuest",
-          "AetheryteShortcut": "Thavnair - Yedlihmad",
-          "NextQuestId": 4846
-        }
-      ]
-    }
-  ]
-}
diff --git a/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4846_Behind the Helm.json b/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4846_Behind the Helm.json
deleted file mode 100644 (file)
index 5fb5341..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-{
-  "$schema": "https://carvel.li/questionable/quest-1.0",
-  "Author": "liza",
-  "QuestSequence": [
-    {
-      "Sequence": 0,
-      "Steps": [
-        {
-          "DataId": 1048331,
-          "Position": {
-            "X": 214.03821,
-            "Y": 5.2600574,
-            "Z": 628.3817
-          },
-          "TerritoryId": 957,
-          "InteractionType": "AcceptQuest"
-        }
-      ]
-    },
-    {
-      "Sequence": 1,
-      "Steps": [
-        {
-          "DataId": 1048330,
-          "Position": {
-            "X": -28.732727,
-            "Y": -17.972864,
-            "Z": 194.72034
-          },
-          "TerritoryId": 1185,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Tuliyollal",
-          "AethernetShortcut": [
-            "[Tuliyollal] Aetheryte Plaza",
-            "[Tuliyollal] Bayside Bevy Marketplace"
-          ]
-        }
-      ]
-    },
-    {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 327.87598,
-            "Y": -15.862221,
-            "Z": -236.6933
-          },
-          "TerritoryId": 1190,
-          "InteractionType": "WalkTo",
-          "AetheryteShortcut": "Shaaloani - Mehwahhetsoan",
-          "SkipIf": [
-            "FlyingUnlocked"
-          ]
-        },
-        {
-          "Position": {
-            "X": 442.79218,
-            "Y": -16.660347,
-            "Z": -111.04725
-          },
-          "TerritoryId": 1190,
-          "InteractionType": "Combat",
-          "EnemySpawnType": "AutoOnEnterArea",
-          "KillEnemyDataIds": [
-            17627
-          ],
-          "Fly": true
-        }
-      ]
-    },
-    {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "DataId": 1048369,
-          "Position": {
-            "X": 441.5503,
-            "Y": -16.619904,
-            "Z": -109.14783
-          },
-          "StopDistance": 7,
-          "TerritoryId": 1190,
-          "InteractionType": "Interact"
-        }
-      ]
-    },
-    {
-      "Sequence": 4,
-      "Steps": [
-        {
-          "DataId": 1048333,
-          "Position": {
-            "X": 52.506226,
-            "Y": -5.20688E-07,
-            "Z": -54.154297
-          },
-          "TerritoryId": 963,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Radz-at-Han"
-        }
-      ]
-    },
-    {
-      "Sequence": 5,
-      "Steps": [
-        {
-          "DataId": 1048372,
-          "Position": {
-            "X": -53.177734,
-            "Y": -1.9999962,
-            "Z": 147.60046
-          },
-          "StopDistance": 7,
-          "TerritoryId": 963,
-          "InteractionType": "Interact"
-        }
-      ]
-    },
-    {
-      "Sequence": 255,
-      "Steps": [
-        {
-          "DataId": 1048331,
-          "Position": {
-            "X": 214.03821,
-            "Y": 5.2600574,
-            "Z": 628.3817
-          },
-          "TerritoryId": 957,
-          "InteractionType": "CompleteQuest",
-          "AetheryteShortcut": "Thavnair - Yedlihmad",
-          "NextQuestId": 4847
-        }
-      ]
-    }
-  ]
-}
diff --git a/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4847_Heroes and Pretenders.json b/QuestPaths/Dawntrail/Role Quests/MagicalRanged/4847_Heroes and Pretenders.json
deleted file mode 100644 (file)
index d3023ce..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-{
-  "$schema": "https://carvel.li/questionable/quest-1.0",
-  "Author": "liza",
-  "TerritoryBlacklist": [
-    1218
-  ],
-  "QuestSequence": [
-    {
-      "Sequence": 0,
-      "Steps": [
-        {
-          "DataId": 1048331,
-          "Position": {
-            "X": 214.03821,
-            "Y": 5.2600574,
-            "Z": 628.3817
-          },
-          "TerritoryId": 957,
-          "InteractionType": "AcceptQuest"
-        }
-      ]
-    },
-    {
-      "Sequence": 1,
-      "Steps": [
-        {
-          "DataId": 1048374,
-          "Position": {
-            "X": -77.04285,
-            "Y": 99.946754,
-            "Z": -711.0552
-          },
-          "TerritoryId": 957,
-          "InteractionType": "SinglePlayerDuty",
-          "AetheryteShortcut": "Radz-at-Han",
-          "AethernetShortcut": [
-            "[Radz-at-Han] Aetheryte Plaza",
-            "[Radz-at-Han] The Gate of First Sight (Thavnair)"
-          ],
-          "Fly": true
-        }
-      ]
-    },
-    {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "Position": {
-            "X": 0,
-            "Y": 0,
-            "Z": 0
-          },
-          "TerritoryId": 1,
-          "InteractionType": "WalkTo",
-          "Comment": "Filler"
-        }
-      ]
-    },
-    {
-      "Sequence": 3,
-      "Steps": [
-        {
-          "DataId": 1048374,
-          "Position": {
-            "X": -77.04285,
-            "Y": 99.946754,
-            "Z": -711.0552
-          },
-          "TerritoryId": 957,
-          "InteractionType": "Interact"
-        }
-      ]
-    },
-    {
-      "Sequence": 255,
-      "Steps": [
-        {
-          "DataId": 1048330,
-          "Position": {
-            "X": -28.732727,
-            "Y": -17.972864,
-            "Z": 194.72034
-          },
-          "TerritoryId": 1185,
-          "InteractionType": "CompleteQuest",
-          "AetheryteShortcut": "Tuliyollal",
-          "AethernetShortcut": [
-            "[Tuliyollal] Aetheryte Plaza",
-            "[Tuliyollal] Bayside Bevy Marketplace"
-          ]
-        }
-      ]
-    }
-  ]
-}
index fc3fa27f431f4ff9ca5255ad52a5b911023c67a7..daf1cb47fefc012ea43c1454e8c9332885fe967a 100644 (file)
             "Z": 198.68762
           },
           "TerritoryId": 1185,
-          "InteractionType": "AcceptQuest"
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Tuliyollal",
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1019038,
+          "Position": {
+            "X": -55.222473,
+            "Y": -2.9000003,
+            "Z": -65.65961
+          },
+          "TerritoryId": 628,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Kugane",
+          "AethernetShortcut": [
+            "[Kugane] Aetheryte Plaza",
+            "[Kugane] Shiokaze Hostelry"
+          ],
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
+        },
+        {
+          "DataId": 1019003,
+          "Position": {
+            "X": -41.24518,
+            "Y": -3.0000017,
+            "Z": -63.09613
+          },
+          "TerritoryId": 628,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
+        },
+        {
+          "DataId": 1019069,
+          "Position": {
+            "X": -62.119568,
+            "Y": 8,
+            "Z": -56.62628
+          },
+          "TerritoryId": 628,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1051620,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997255,
+            "Z": -52.048523
+          },
+          "TerritoryId": 628,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1048296,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997235,
+            "Z": -52.018066
+          },
+          "TerritoryId": 628,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 2013689,
+          "Position": {
+            "X": 29.251465,
+            "Y": 5.935669,
+            "Z": -129.62543
+          },
+          "TerritoryId": 628,
+          "InteractionType": "Interact",
+          "AethernetShortcut": [
+            "[Kugane] Sekiseigumi Barracks",
+            "[Kugane] Rakuza District"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "DataId": 2013690,
+          "Position": {
+            "X": 14.114502,
+            "Y": 3.982544,
+            "Z": 43.411865
+          },
+          "TerritoryId": 628,
+          "InteractionType": "Interact",
+          "AethernetShortcut": [
+            "[Kugane] Rakuza District",
+            "[Kugane] Kogane Dori Markets"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048296,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997235,
+            "Z": -52.018066
+          },
+          "TerritoryId": 628,
+          "InteractionType": "CompleteQuest",
+          "AethernetShortcut": [
+            "[Kugane] Kogane Dori Markets",
+            "[Kugane] Sekiseigumi Barracks"
+          ],
+          "NextQuestId": 4831
         }
       ]
     }
diff --git a/QuestPaths/Dawntrail/Role Quests/Melee/4831_A Sea of Blood.json b/QuestPaths/Dawntrail/Role Quests/Melee/4831_A Sea of Blood.json
new file mode 100644 (file)
index 0000000..dfc926b
--- /dev/null
@@ -0,0 +1,153 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048296,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997235,
+            "Z": -52.018066
+          },
+          "TerritoryId": 628,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Kugane",
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ],
+          "DialogueChoices": [
+            {
+              "Type": "List",
+              "Prompt": "TEXT_KINGBA311_04831_Q2_000_000",
+              "Answer": "TEXT_KINGBA311_04831_A2_000_002"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1019154,
+          "Position": {
+            "X": 829.1294,
+            "Y": 5.9230084,
+            "Z": 859.739
+          },
+          "TerritoryId": 613,
+          "InteractionType": "Interact",
+          "AethernetShortcut": [
+            "[Kugane] Sekiseigumi Barracks",
+            "[Kugane] The Ruby Price"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1019169,
+          "Position": {
+            "X": 476.82898,
+            "Y": 30.113333,
+            "Z": 763.546
+          },
+          "TerritoryId": 613,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
+        },
+        {
+          "DataId": 1019167,
+          "Position": {
+            "X": 447.56226,
+            "Y": 34.29651,
+            "Z": 732.66187
+          },
+          "TerritoryId": 613,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1048299,
+          "Position": {
+            "X": 463.46216,
+            "Y": 29.787891,
+            "Z": 736.8428
+          },
+          "TerritoryId": 613,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "Position": {
+            "X": 426.16245,
+            "Y": 0.7213422,
+            "Z": 195.08597
+          },
+          "TerritoryId": 613,
+          "InteractionType": "WalkTo",
+          "Fly": true
+        },
+        {
+          "DataId": 1048301,
+          "Position": {
+            "X": 427.78674,
+            "Y": 0.5689501,
+            "Z": 195.39172
+          },
+          "TerritoryId": 613,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048296,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997235,
+            "Z": -52.018066
+          },
+          "TerritoryId": 628,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Kugane",
+          "AethernetShortcut": [
+            "[Kugane] Aetheryte Plaza",
+            "[Kugane] Sekiseigumi Barracks"
+          ],
+          "NextQuestId": 4832
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/Melee/4832_Who's Who.json b/QuestPaths/Dawntrail/Role Quests/Melee/4832_Who's Who.json
new file mode 100644 (file)
index 0000000..088de24
--- /dev/null
@@ -0,0 +1,142 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048296,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997235,
+            "Z": -52.018066
+          },
+          "TerritoryId": 628,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Kugane",
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1019260,
+          "Position": {
+            "X": 417.5935,
+            "Y": 68.02854,
+            "Z": -110.24652
+          },
+          "TerritoryId": 614,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Yanxia - Namai",
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
+        },
+        {
+          "DataId": 1019257,
+          "Position": {
+            "X": 468.55872,
+            "Y": 68.02771,
+            "Z": -93.21747
+          },
+          "TerritoryId": 614,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
+        },
+        {
+          "DataId": 1019262,
+          "Position": {
+            "X": 445.76172,
+            "Y": 58.67623,
+            "Z": -155.62683
+          },
+          "TerritoryId": 614,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1048302,
+          "Position": {
+            "X": 399.95422,
+            "Y": 76.04927,
+            "Z": -114.885254
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 614,
+          "InteractionType": "Interact",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1048304,
+          "Position": {
+            "X": 421.3473,
+            "Y": 1.7278045,
+            "Z": -278.70605
+          },
+          "TerritoryId": 614,
+          "InteractionType": "Interact",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048296,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997235,
+            "Z": -52.018066
+          },
+          "TerritoryId": 628,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Kugane",
+          "AethernetShortcut": [
+            "[Kugane] Aetheryte Plaza",
+            "[Kugane] Sekiseigumi Barracks"
+          ],
+          "NextQuestId": 4833
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/Melee/4833_Cornered Prey.json b/QuestPaths/Dawntrail/Role Quests/Melee/4833_Cornered Prey.json
new file mode 100644 (file)
index 0000000..aaf2aab
--- /dev/null
@@ -0,0 +1,104 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048297,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997235,
+            "Z": -52.018066
+          },
+          "TerritoryId": 628,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Kugane",
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 2013691,
+          "Position": {
+            "X": 203.8147,
+            "Y": 12.069824,
+            "Z": 773.0067
+          },
+          "TerritoryId": 613,
+          "InteractionType": "Interact",
+          "AethernetShortcut": [
+            "[Kugane] Sekiseigumi Barracks",
+            "[Kugane] The Ruby Price"
+          ],
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 2013692,
+          "Position": {
+            "X": 138.59766,
+            "Y": 9.292725,
+            "Z": 676.6002
+          },
+          "TerritoryId": 613,
+          "InteractionType": "Combat",
+          "EnemySpawnType": "AfterInteraction",
+          "KillEnemyDataIds": [
+            17617,
+            17618,
+            17619
+          ],
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 2013693,
+          "Position": {
+            "X": 167.89502,
+            "Y": 2.1209717,
+            "Z": 561.27246
+          },
+          "TerritoryId": 613,
+          "InteractionType": "Interact",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048297,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997235,
+            "Z": -52.018066
+          },
+          "TerritoryId": 628,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Kugane",
+          "AethernetShortcut": [
+            "[Kugane] Aetheryte Plaza",
+            "[Kugane] Sekiseigumi Barracks"
+          ],
+          "NextQuestId": 4834
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/Melee/4834_Impostor Syndrome.json b/QuestPaths/Dawntrail/Role Quests/Melee/4834_Impostor Syndrome.json
new file mode 100644 (file)
index 0000000..d8a32a5
--- /dev/null
@@ -0,0 +1,144 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048297,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997235,
+            "Z": -52.018066
+          },
+          "TerritoryId": 628,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Kugane",
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "Position": {
+            "X": 42.052795,
+            "Y": 4.000001,
+            "Z": 71.14965
+          },
+          "TerritoryId": 628,
+          "InteractionType": "WalkTo",
+          "AethernetShortcut": [
+            "[Kugane] Sekiseigumi Barracks",
+            "[Kugane] Kogane Dori Markets"
+          ]
+        },
+        {
+          "DataId": 1018984,
+          "Position": {
+            "X": 42.34375,
+            "Y": 4.8365364,
+            "Z": 73.83838
+          },
+          "TerritoryId": 628,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1019065,
+          "Position": {
+            "X": 80.49133,
+            "Y": 4,
+            "Z": 56.443115
+          },
+          "TerritoryId": 628,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 2013694,
+          "Position": {
+            "X": 517.2654,
+            "Y": 0.99176025,
+            "Z": -692.10345
+          },
+          "TerritoryId": 613,
+          "InteractionType": "UseItem",
+          "ItemId": 2003492,
+          "AetheryteShortcut": "Ruby Sea - Onokoro",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 2013695,
+          "Position": {
+            "X": 519.76794,
+            "Y": 0.99176025,
+            "Z": -679.8352
+          },
+          "TerritoryId": 613,
+          "InteractionType": "Combat",
+          "EnemySpawnType": "AfterInteraction",
+          "KillEnemyDataIds": [
+            17620
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "DataId": 1019065,
+          "Position": {
+            "X": 80.49133,
+            "Y": 4,
+            "Z": 56.443115
+          },
+          "TerritoryId": 628,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Kugane",
+          "AethernetShortcut": [
+            "[Kugane] Aetheryte Plaza",
+            "[Kugane] Kogane Dori Markets"
+          ],
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048298,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997235,
+            "Z": -52.018066
+          },
+          "TerritoryId": 628,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 4835
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/Melee/4835_A Hunter True.json b/QuestPaths/Dawntrail/Role Quests/Melee/4835_A Hunter True.json
new file mode 100644 (file)
index 0000000..de3637e
--- /dev/null
@@ -0,0 +1,169 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048298,
+          "Position": {
+            "X": 111.40613,
+            "Y": 11.997235,
+            "Z": -52.018066
+          },
+          "TerritoryId": 628,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Kugane",
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1019350,
+          "Position": {
+            "X": 563.2562,
+            "Y": -19.505632,
+            "Z": 319.11182
+          },
+          "TerritoryId": 622,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Azim Steppe - Reunion",
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
+        },
+        {
+          "DataId": 1019351,
+          "Position": {
+            "X": 548.8822,
+            "Y": -19.505648,
+            "Z": 295.1858
+          },
+          "TerritoryId": 622,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
+        },
+        {
+          "DataId": 1019353,
+          "Position": {
+            "X": 544.0298,
+            "Y": -19.505642,
+            "Z": 391.68372
+          },
+          "TerritoryId": 622,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1048305,
+          "Position": {
+            "X": 591.08875,
+            "Y": -19.505634,
+            "Z": 296.9253
+          },
+          "TerritoryId": 622,
+          "InteractionType": "Interact",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1048305,
+          "Position": {
+            "X": 591.08875,
+            "Y": -19.505634,
+            "Z": 296.9253
+          },
+          "TerritoryId": 622,
+          "InteractionType": "SinglePlayerDuty"
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "Position": {
+            "X": 0,
+            "Y": 0,
+            "Z": 0
+          },
+          "TerritoryId": 1,
+          "InteractionType": "WalkTo",
+          "Comment": "Filler"
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "DataId": 1048307,
+          "Position": {
+            "X": -494.56018,
+            "Y": 71.630486,
+            "Z": -518.9441
+          },
+          "TerritoryId": 622,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048295,
+          "Position": {
+            "X": -74.143616,
+            "Y": -19.32829,
+            "Z": 198.68762
+          },
+          "TerritoryId": 1185,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Tuliyollal",
+          "AethernetShortcut": [
+            "[Tuliyollal] Aetheryte Plaza",
+            "[Tuliyollal] Bayside Bevy Marketplace"
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/Physical Ranged/4836_To Steal a Steelhog.json b/QuestPaths/Dawntrail/Role Quests/Physical Ranged/4836_To Steal a Steelhog.json
new file mode 100644 (file)
index 0000000..064e3e2
--- /dev/null
@@ -0,0 +1,119 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048308,
+          "Position": {
+            "X": -38.95636,
+            "Y": -17.972864,
+            "Z": 203.38745
+          },
+          "TerritoryId": 1185,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Tuliyollal",
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1020193,
+          "Position": {
+            "X": 26.108154,
+            "Y": 0,
+            "Z": 25.253662
+          },
+          "TerritoryId": 635,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Rhalgr's Reach",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
+        },
+        {
+          "DataId": 1019483,
+          "Position": {
+            "X": -37.521973,
+            "Y": 1.2530026,
+            "Z": 36.301147
+          },
+          "TerritoryId": 635,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
+        },
+        {
+          "DataId": 1019484,
+          "Position": {
+            "X": -66.5141,
+            "Y": -5.9571908E-15,
+            "Z": -22.964844
+          },
+          "TerritoryId": 635,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1048311,
+          "Position": {
+            "X": 460.86804,
+            "Y": 41.92747,
+            "Z": 335.10327
+          },
+          "TerritoryId": 612,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Fringes - Peering Stones",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048309,
+          "Position": {
+            "X": 19.638367,
+            "Y": -0.11837298,
+            "Z": 47.226562
+          },
+          "TerritoryId": 635,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Rhalgr's Reach",
+          "NextQuestId": 4837
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/Physical Ranged/4837_Bandits Abound.json b/QuestPaths/Dawntrail/Role Quests/Physical Ranged/4837_Bandits Abound.json
new file mode 100644 (file)
index 0000000..e494b3b
--- /dev/null
@@ -0,0 +1,25 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048309,
+          "Position": {
+            "X": 19.638367,
+            "Y": -0.11837298,
+            "Z": 47.226562
+          },
+          "TerritoryId": 635,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Rhalgr's Reach",
+          "SkipIf": [
+            "AetheryteShortcutIfInSameTerritory"
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Role Quests/PhysicalRanged/4836_To Steal a Steelhog.json b/QuestPaths/Dawntrail/Role Quests/PhysicalRanged/4836_To Steal a Steelhog.json
deleted file mode 100644 (file)
index 064e3e2..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-{
-  "$schema": "https://carvel.li/questionable/quest-1.0",
-  "Author": "liza",
-  "QuestSequence": [
-    {
-      "Sequence": 0,
-      "Steps": [
-        {
-          "DataId": 1048308,
-          "Position": {
-            "X": -38.95636,
-            "Y": -17.972864,
-            "Z": 203.38745
-          },
-          "TerritoryId": 1185,
-          "InteractionType": "AcceptQuest",
-          "AetheryteShortcut": "Tuliyollal",
-          "SkipIf": [
-            "AetheryteShortcutIfInSameTerritory"
-          ]
-        }
-      ]
-    },
-    {
-      "Sequence": 1,
-      "Steps": [
-        {
-          "DataId": 1020193,
-          "Position": {
-            "X": 26.108154,
-            "Y": 0,
-            "Z": 25.253662
-          },
-          "TerritoryId": 635,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Rhalgr's Reach",
-          "CompletionQuestVariablesFlags": [
-            null,
-            null,
-            null,
-            null,
-            null,
-            64
-          ]
-        },
-        {
-          "DataId": 1019483,
-          "Position": {
-            "X": -37.521973,
-            "Y": 1.2530026,
-            "Z": 36.301147
-          },
-          "TerritoryId": 635,
-          "InteractionType": "Interact",
-          "CompletionQuestVariablesFlags": [
-            null,
-            null,
-            null,
-            null,
-            null,
-            128
-          ]
-        },
-        {
-          "DataId": 1019484,
-          "Position": {
-            "X": -66.5141,
-            "Y": -5.9571908E-15,
-            "Z": -22.964844
-          },
-          "TerritoryId": 635,
-          "InteractionType": "Interact",
-          "CompletionQuestVariablesFlags": [
-            null,
-            null,
-            null,
-            null,
-            null,
-            32
-          ]
-        }
-      ]
-    },
-    {
-      "Sequence": 2,
-      "Steps": [
-        {
-          "DataId": 1048311,
-          "Position": {
-            "X": 460.86804,
-            "Y": 41.92747,
-            "Z": 335.10327
-          },
-          "TerritoryId": 612,
-          "InteractionType": "Interact",
-          "AetheryteShortcut": "Fringes - Peering Stones",
-          "Fly": true
-        }
-      ]
-    },
-    {
-      "Sequence": 255,
-      "Steps": [
-        {
-          "DataId": 1048309,
-          "Position": {
-            "X": 19.638367,
-            "Y": -0.11837298,
-            "Z": 47.226562
-          },
-          "TerritoryId": 635,
-          "InteractionType": "CompleteQuest",
-          "AetheryteShortcut": "Rhalgr's Reach",
-          "NextQuestId": 4837
-        }
-      ]
-    }
-  ]
-}
diff --git a/QuestPaths/Dawntrail/Role Quests/PhysicalRanged/4837_Bandits Abound.json b/QuestPaths/Dawntrail/Role Quests/PhysicalRanged/4837_Bandits Abound.json
deleted file mode 100644 (file)
index e494b3b..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "$schema": "https://carvel.li/questionable/quest-1.0",
-  "Author": "liza",
-  "QuestSequence": [
-    {
-      "Sequence": 0,
-      "Steps": [
-        {
-          "DataId": 1048309,
-          "Position": {
-            "X": 19.638367,
-            "Y": -0.11837298,
-            "Z": 47.226562
-          },
-          "TerritoryId": 635,
-          "InteractionType": "AcceptQuest",
-          "AetheryteShortcut": "Rhalgr's Reach",
-          "SkipIf": [
-            "AetheryteShortcutIfInSameTerritory"
-          ]
-        }
-      ]
-    }
-  ]
-}
diff --git a/QuestPaths/Dawntrail/Side Quests/Urqopacha/5030_An Unlikely Inspector.json b/QuestPaths/Dawntrail/Side Quests/Urqopacha/5030_An Unlikely Inspector.json
new file mode 100644 (file)
index 0000000..a83ee8d
--- /dev/null
@@ -0,0 +1,113 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048650,
+          "Position": {
+            "X": 367.87964,
+            "Y": -156.28014,
+            "Z": -419.11957
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 2014104,
+          "Position": {
+            "X": 374.77686,
+            "Y": -154.07043,
+            "Z": -373.52563
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
+        },
+        {
+          "DataId": 2014106,
+          "Position": {
+            "X": 327.90112,
+            "Y": -152.20874,
+            "Z": -369.31415
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
+        },
+        {
+          "DataId": 2014105,
+          "Position": {
+            "X": 330.6172,
+            "Y": -158.06824,
+            "Z": -399.8932
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
+        },
+        {
+          "DataId": 2014107,
+          "Position": {
+            "X": 275.7152,
+            "Y": -166.94897,
+            "Z": -462.7909
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "Interact",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            16
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048650,
+          "Position": {
+            "X": 367.87964,
+            "Y": -156.28014,
+            "Z": -419.11957
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "CompleteQuest"
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Side Quests/Urqopacha/5031_The Carmine Secret.json b/QuestPaths/Dawntrail/Side Quests/Urqopacha/5031_The Carmine Secret.json
new file mode 100644 (file)
index 0000000..284e85a
--- /dev/null
@@ -0,0 +1,82 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1048649,
+          "Position": {
+            "X": 357.86987,
+            "Y": -155.91757,
+            "Z": -370.1076
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1050671,
+          "Position": {
+            "X": 191.97375,
+            "Y": -87.10133,
+            "Z": -277.39374
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "UseItem",
+          "ItemId": 2003601,
+          "Fly": true,
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
+        },
+        {
+          "DataId": 1050670,
+          "Position": {
+            "X": 132.86023,
+            "Y": -75.24902,
+            "Z": -213.2143
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "UseItem",
+          "ItemId": 2003601,
+          "Fly": true,
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1048649,
+          "Position": {
+            "X": 357.86987,
+            "Y": -155.91757,
+            "Z": -370.1076
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Urqopacha - Wachunpelo"
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/Dawntrail/Unlocks/Dungeons/5014_Something Stray in the Neighborhood.json b/QuestPaths/Dawntrail/Unlocks/Dungeons/5014_Something Stray in the Neighborhood.json
new file mode 100644 (file)
index 0000000..2275fc5
--- /dev/null
@@ -0,0 +1,116 @@
+{
+  "$schema": "https://carvel.li/questionable/quest-1.0",
+  "Author": "liza",
+  "TerritoryBlacklist": [
+    1204
+  ],
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1051440,
+          "Position": {
+            "X": 305.01257,
+            "Y": 51.199978,
+            "Z": 198.07727
+          },
+          "TerritoryId": 1186,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 2014334,
+          "Position": {
+            "X": -6.9123535,
+            "Y": 53.177612,
+            "Z": 761.68445
+          },
+          "TerritoryId": 1192,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1048243,
+          "Position": {
+            "X": 57.87744,
+            "Y": 53.200012,
+            "Z": 772.03015
+          },
+          "TerritoryId": 1192,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 1192,
+          "SkipIf": [
+            "FlyingUnlocked"
+          ]
+        },
+        {
+          "DataId": 1051443,
+          "Position": {
+            "X": 614.28235,
+            "Y": 9.022843,
+            "Z": 610.13184
+          },
+          "TerritoryId": 1192,
+          "InteractionType": "Interact",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "TerritoryId": 1192,
+          "InteractionType": "Duty",
+          "ContentFinderConditionId": 981
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 1051442,
+          "Position": {
+            "X": 613.76355,
+            "Y": 9.022844,
+            "Z": 612.1156
+          },
+          "StopDistance": 7,
+          "TerritoryId": 1192,
+          "InteractionType": "Interact",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1051440,
+          "Position": {
+            "X": 305.01257,
+            "Y": 51.199978,
+            "Z": 198.07727
+          },
+          "TerritoryId": 1186,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Solution Nine",
+          "AethernetShortcut": [
+            "[Solution Nine] Aetheryte Plaza",
+            "[Solution Nine] Neon Stein"
+          ]
+        }
+      ]
+    }
+  ]
+}
index badf5f0b7587a56fab2b246da321a104ca0d6cda..c4d22503208639862c2b98c31dbb546ea45fcdb7 100644 (file)
@@ -14,6 +14,7 @@ using Dalamud.Plugin.Services;
 using FFXIVClientStructs.FFXIV.Client.Game;
 using FFXIVClientStructs.FFXIV.Client.Game.Control;
 using Microsoft.Extensions.Logging;
+using Questionable.Controller.NavigationOverrides;
 using Questionable.External;
 using Questionable.Model;
 using Questionable.Model.V1;
@@ -23,28 +24,26 @@ namespace Questionable.Controller;
 
 internal sealed class MovementController : IDisposable
 {
-    private static readonly List<BlacklistedArea> BlacklistedAreas =
-    [
-        new(1191, new(-223.0412f, 31.937134f, -584.03906f), 5f, 7.75f),
-    ];
-
     private readonly NavmeshIpc _navmeshIpc;
     private readonly IClientState _clientState;
     private readonly GameFunctions _gameFunctions;
     private readonly ChatFunctions _chatFunctions;
     private readonly ICondition _condition;
+    private readonly MovementOverrideController _movementOverrideController;
     private readonly ILogger<MovementController> _logger;
     private CancellationTokenSource? _cancellationTokenSource;
     private Task<List<Vector3>>? _pathfindTask;
 
     public MovementController(NavmeshIpc navmeshIpc, IClientState clientState, GameFunctions gameFunctions,
-        ChatFunctions chatFunctions, ICondition condition, ILogger<MovementController> logger)
+        ChatFunctions chatFunctions, ICondition condition, MovementOverrideController movementOverrideController,
+        ILogger<MovementController> logger)
     {
         _navmeshIpc = navmeshIpc;
         _clientState = clientState;
         _gameFunctions = gameFunctions;
         _chatFunctions = chatFunctions;
         _condition = condition;
+        _movementOverrideController = movementOverrideController;
         _logger = logger;
     }
 
@@ -112,29 +111,7 @@ internal sealed class MovementController : IDisposable
                 }
 
                 if (!Destination.IsFlying)
-                {
-                    // certain areas shouldn't have navmesh points in them, e.g. the aetheryte in HF Outskirts can't be
-                    // walked on without jumping, but if you teleport to the wrong side you're fucked otherwise.
-                    foreach (var blacklistedArea in BlacklistedAreas)
-                    {
-                        if (_clientState.TerritoryType != blacklistedArea.TerritoryId)
-                            continue;
-
-                        for (int i = 0; i < navPoints.Count; ++i)
-                        {
-                            var point = navPoints[i];
-                            float distance = (point - blacklistedArea.Center).Length();
-                            if (distance < blacklistedArea.MinDistance || distance > blacklistedArea.MaxDistance)
-                                continue;
-
-                            _logger.LogInformation("Fudging navmesh point {Point} in blacklisted area",
-                                point.ToString("G", CultureInfo.InvariantCulture));
-                            navPoints[i] = blacklistedArea.Center +
-                                           Vector3.Normalize(point - blacklistedArea.Center) *
-                                           blacklistedArea.MaxDistance;
-                        }
-                    }
-                }
+                    _movementOverrideController.AdjustPath(navPoints);
 
                 _navmeshIpc.MoveTo(navPoints, Destination.IsFlying);
                 MovementStartedAt = DateTime.Now;
@@ -175,7 +152,8 @@ internal sealed class MovementController : IDisposable
             {
                 if (Destination.DataId
                     is 2012173 or 2012174 or 2012175 or 2012176
-                    or 2014133 or 2014134 or 2014135)
+                    or 2014133 or 2014134 or 2014135
+                    or 2014105)
                 {
                     Stop();
                 }
@@ -336,12 +314,6 @@ internal sealed class MovementController : IDisposable
         bool CanSprint,
         bool UseNavmesh);
 
-    public sealed record BlacklistedArea(
-        ushort TerritoryId,
-        Vector3 Center,
-        float MinDistance,
-        float MaxDistance);
-
     public sealed class PathfindingFailedException : Exception
     {
         public PathfindingFailedException()
diff --git a/Questionable/Controller/NavigationOverrides/BlacklistedArea.cs b/Questionable/Controller/NavigationOverrides/BlacklistedArea.cs
new file mode 100644 (file)
index 0000000..5e49e87
--- /dev/null
@@ -0,0 +1,19 @@
+using System.Numerics;
+
+namespace Questionable.Controller.NavigationOverrides;
+
+internal sealed record BlacklistedArea(
+    ushort TerritoryId,
+    Vector3 Center,
+    float MinDistance,
+    float MaxDistance) : IBlacklistedLocation
+{
+    public Vector3? AdjustPoint(Vector3 point)
+    {
+        float distance = (point - Center).Length();
+        if (distance < MinDistance || distance > MaxDistance)
+            return null;
+
+        return Center + Vector3.Normalize(point - Center) * MaxDistance;
+    }
+}
diff --git a/Questionable/Controller/NavigationOverrides/BlacklistedPoint.cs b/Questionable/Controller/NavigationOverrides/BlacklistedPoint.cs
new file mode 100644 (file)
index 0000000..2ad12d8
--- /dev/null
@@ -0,0 +1,19 @@
+using System.Numerics;
+
+namespace Questionable.Controller.NavigationOverrides;
+
+public sealed record BlacklistedPoint(
+    ushort TerritoryId,
+    Vector3 Original,
+    Vector3 Replacement,
+    float CheckDistance = 0.05f) : IBlacklistedLocation
+{
+    public Vector3? AdjustPoint(Vector3 point)
+    {
+        float distance = (point - Original).Length();
+        if (distance > CheckDistance)
+            return null;
+
+        return Replacement;
+    }
+}
diff --git a/Questionable/Controller/NavigationOverrides/IBlacklistedLocation.cs b/Questionable/Controller/NavigationOverrides/IBlacklistedLocation.cs
new file mode 100644 (file)
index 0000000..f8ef2fd
--- /dev/null
@@ -0,0 +1,10 @@
+using System.Numerics;
+
+namespace Questionable.Controller.NavigationOverrides;
+
+internal interface IBlacklistedLocation
+{
+    ushort TerritoryId { get; }
+
+    Vector3? AdjustPoint(Vector3 point);
+}
diff --git a/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs b/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs
new file mode 100644 (file)
index 0000000..2bb5d8a
--- /dev/null
@@ -0,0 +1,52 @@
+using System.Collections.Generic;
+using System.Globalization;
+using System.Numerics;
+using Dalamud.Plugin.Services;
+using Microsoft.Extensions.Logging;
+
+namespace Questionable.Controller.NavigationOverrides;
+
+internal sealed class MovementOverrideController
+{
+    private static readonly List<IBlacklistedLocation> BlacklistedLocations = [
+        new BlacklistedArea(1191, new(-223.0412f, 31.937134f, -584.03906f), 5f, 7.75f),
+        new BlacklistedPoint(128, new Vector3(2f, 40.25f, 36.5f), new Vector3(0.25f, 40.25f, 36.5f))
+    ];
+
+    private readonly IClientState _clientState;
+    private readonly ILogger<MovementOverrideController> _logger;
+
+    public MovementOverrideController(IClientState clientState, ILogger<MovementOverrideController> logger)
+    {
+        _clientState = clientState;
+        _logger = logger;
+    }
+
+    /// <summary>
+    /// Certain areas shouldn't have navmesh points in them, e.g. the aetheryte in HF Outskirts can't be
+    /// walked on without jumping, but if you teleport to the wrong side you're fucked otherwise.
+    /// </summary>
+    /// <param name="navPoints">list of points to check</param>
+    public void AdjustPath(List<Vector3> navPoints)
+    {
+        foreach (var blacklistedArea in BlacklistedLocations)
+        {
+            if (_clientState.TerritoryType != blacklistedArea.TerritoryId)
+                continue;
+
+            for (int i = 0; i < navPoints.Count; ++i)
+            {
+                Vector3? updatedPoint = blacklistedArea.AdjustPoint(navPoints[i]);
+
+                if (updatedPoint != 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));
+
+                    navPoints[i] = updatedPoint.Value;
+                }
+            }
+        }
+    }
+}
index 3b1e59ca2b7d4871f8311c329e5c0d0d77d25f82..2fe468df8a5fbbcc5a43441bc8b78c417b9919bc 100644 (file)
@@ -9,6 +9,7 @@ using Dalamud.Plugin.Services;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using Questionable.Controller;
+using Questionable.Controller.NavigationOverrides;
 using Questionable.Controller.Steps;
 using Questionable.Controller.Steps.BaseFactory;
 using Questionable.Controller.Steps.BaseTasks;
@@ -114,6 +115,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin
         serviceCollection.AddTransient<WaitAtEnd.WaitQuestCompleted>();
 
         serviceCollection.AddSingleton<MovementController>();
+        serviceCollection.AddSingleton<MovementOverrideController>();
         serviceCollection.AddSingleton<QuestRegistry>();
         serviceCollection.AddSingleton<QuestController>();
         serviceCollection.AddSingleton<GameUiController>();