Add rogue quests; adjust ninja paths
authorLiza Carvelli <liza@carvel.li>
Sat, 19 Oct 2024 15:24:21 +0000 (17:24 +0200)
committerLiza Carvelli <liza@carvel.li>
Sat, 19 Oct 2024 15:24:21 +0000 (17:24 +0200)
42 files changed:
QuestPathGenerator/RoslynElements/QuestStepExtensions.cs
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/102_My First Dagger.json
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/104_Stabbers in Yer Fambles.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/110_A Dainty Dilemma.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/126_Stray into the Shadows.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/144_Stifled Screams.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/145_Slave to the Code.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/146_Grinners in the Mist.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/148_Sweet Sorrows.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/154_Market for Death.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/155_Cloying Victory.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/212_Peasants by Day, Ninjas by Night.json
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/213_My First Mudra.json
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/215_Once Upon a Time in Doma.json
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/216_Pirates versus Ninjas.json
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/217_Ninja Bathin'.json
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/232_Tough Guys.json
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/233_The Crow Knows.json
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/234_Master and Student.json
QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/235_Strangers in a Strange Land.json
QuestPaths/3.x - Heavensward/Class Quests/NIN/1684_The Impossible Girl.json
QuestPaths/3.x - Heavensward/Class Quests/NIN/1685_Ninja Assassin.json
QuestPaths/3.x - Heavensward/Class Quests/NIN/1686_Medieval Espionage.json
QuestPaths/3.x - Heavensward/Class Quests/NIN/1687_Staying Alive.json
QuestPaths/3.x - Heavensward/Class Quests/NIN/1688_In Her Defense.json
QuestPaths/4.x - Stormblood/Class Quests/NIN/2948_Search for the Stolen Scroll.json
QuestPaths/4.x - Stormblood/Class Quests/NIN/2949_Ninja Bathin' Redux.json
QuestPaths/4.x - Stormblood/Class Quests/NIN/2951_True Enlightenment.json
QuestPaths/4.x - Stormblood/Class Quests/NIN/2952_When Clans Collide.json
QuestPaths/quest-v1.json
Questionable.Model/Questing/Converter/ActionConverter.cs
Questionable.Model/Questing/Converter/InteractionTypeConverter.cs
Questionable.Model/Questing/Converter/StatusConverter.cs [new file with mode: 0644]
Questionable.Model/Questing/EAction.cs
Questionable.Model/Questing/EInteractionType.cs
Questionable.Model/Questing/EStatus.cs [new file with mode: 0644]
Questionable.Model/Questing/QuestStep.cs
Questionable/Controller/Steps/Gathering/DoGather.cs
Questionable/Controller/Steps/Interactions/Action.cs
Questionable/Controller/Steps/Interactions/StatusOff.cs [new file with mode: 0644]
Questionable/Functions/GameFunctions.cs
Questionable/QuestionablePlugin.cs

index 45f2a858ea61ba24a36361b7182a7b85950b5abd..d65ca7942450d025ee424e5e50d3d059d48f4fa5 100644 (file)
@@ -95,6 +95,8 @@ internal static class QuestStepExtensions
                                 .AsSyntaxNodeOrToken(),
                             Assignment(nameof(QuestStep.Action), step.Action, emptyStep.Action)
                                 .AsSyntaxNodeOrToken(),
+                            Assignment(nameof(QuestStep.Status), step.Status, emptyStep.Status)
+                                .AsSyntaxNodeOrToken(),
                             Assignment(nameof(QuestStep.EnemySpawnType), step.EnemySpawnType,
                                     emptyStep.EnemySpawnType)
                                 .AsSyntaxNodeOrToken(),
index 431a9e90bb067bbe7f6b4616d2d2f1cb4072dec1..bece61c85b307de45df691aeb35dca7b2b8957f3 100644 (file)
@@ -53,7 +53,8 @@
               "Prompt": "TEXT_CLSROG011_00102_Q1_000_030",
               "Yes": true
             }
-          ]
+          ],
+          "NextQuestId": 104
         }
       ]
     }
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/104_Stabbers in Yer Fambles.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/104_Stabbers in Yer Fambles.json
new file mode 100644 (file)
index 0000000..a87348b
--- /dev/null
@@ -0,0 +1,196 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Limsa Lominsa",
+          "TargetTerritoryId": 129,
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            },
+            "StepIf": {
+              "ExtraCondition": "RoguesGuild"
+            }
+          }
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "Position": {
+            "X": 31.662792,
+            "Y": 44.020653,
+            "Z": 146.94322
+          },
+          "TerritoryId": 134,
+          "InteractionType": "Combat",
+          "EnemySpawnType": "OverworldEnemies",
+          "ComplexCombatData": [
+            {
+              "DataId": 347,
+              "MinimumKillCount": 3,
+              "CompletionQuestVariablesFlags": [
+                {
+                  "Low": 3
+                },
+                null,
+                null,
+                null,
+                null,
+                null
+              ]
+            }
+          ],
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Fishermens' Guild",
+            "[Limsa Lominsa] Zephyr Gate (Middle La Noscea)"
+          ],
+          "CompletionQuestVariablesFlags": [
+            {
+              "Low": 3
+            },
+            null,
+            null,
+            null,
+            null,
+            null
+          ]
+        },
+        {
+          "Position": {
+            "X": 74.15681,
+            "Y": 45.953808,
+            "Z": 169.73499
+          },
+          "TerritoryId": 134,
+          "InteractionType": "Combat",
+          "EnemySpawnType": "OverworldEnemies",
+          "ComplexCombatData": [
+            {
+              "DataId": 338,
+              "MinimumKillCount": 3,
+              "CompletionQuestVariablesFlags": [
+                null,
+                {
+                  "Low": 3
+                },
+                null,
+                null,
+                null,
+                null
+              ]
+            }
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            {
+              "Low": 3
+            },
+            null,
+            null,
+            null,
+            null
+          ]
+        },
+        {
+          "Position": {
+            "X": 5.6626997,
+            "Y": 42.625427,
+            "Z": 55.983746
+          },
+          "TerritoryId": 134,
+          "InteractionType": "Combat",
+          "EnemySpawnType": "OverworldEnemies",
+          "ComplexCombatData": [
+            {
+              "DataId": 383,
+              "MinimumKillCount": 3,
+              "CompletionQuestVariablesFlags": [
+                null,
+                {
+                  "High": 3
+                },
+                null,
+                null,
+                null,
+                null
+              ]
+            }
+          ],
+          "CompletionQuestVariablesFlags": [
+            null,
+            {
+              "High": 3
+            },
+            null,
+            null,
+            null,
+            null
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "AetheryteShortcut": "Limsa Lominsa",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ]
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 110
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/110_A Dainty Dilemma.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/110_A Dainty Dilemma.json
new file mode 100644 (file)
index 0000000..062d18b
--- /dev/null
@@ -0,0 +1,298 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Limsa Lominsa",
+          "TargetTerritoryId": 129,
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            },
+            "StepIf": {
+              "ExtraCondition": "RoguesGuild"
+            }
+          }
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1010197,
+          "Position": {
+            "X": -150.98804,
+            "Y": -129.4397,
+            "Z": 266.31567
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 2004936,
+          "Position": {
+            "X": -151.90363,
+            "Y": -128.16058,
+            "Z": 256.8551
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "SkipConditions": {
+            "StepIf": {
+              "InTerritory": [
+                135
+              ]
+            }
+          }
+        },
+        {
+          "Position": {
+            "X": 174.3623,
+            "Y": 39.811382,
+            "Z": 52.27733
+          },
+          "TerritoryId": 135,
+          "InteractionType": "Combat",
+          "EnemySpawnType": "OverworldEnemies",
+          "Fly": true,
+          "KillEnemyDataIds": [
+            324
+          ],
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Fishermens' Guild",
+            "[Limsa Lominsa] Tempest Gate (Lower La Noscea)"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "AetheryteShortcut": "Limsa Lominsa",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            },
+            "StepIf": {
+              "ExtraCondition": "RoguesGuild"
+            }
+          }
+        },
+        {
+          "DataId": 1010197,
+          "Position": {
+            "X": -150.98804,
+            "Y": -129.4397,
+            "Z": 266.31567
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 2004936,
+          "Position": {
+            "X": -151.90363,
+            "Y": -128.16058,
+            "Z": 256.8551
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Fishermens' Guild",
+            "[Limsa Lominsa] The Aftcastle"
+          ],
+          "SkipConditions": {
+            "StepIf": {
+              "InTerritory": [
+                128
+              ]
+            }
+          }
+        },
+        {
+          "DataId": 1005411,
+          "Position": {
+            "X": 13.412659,
+            "Y": 40.2,
+            "Z": -13.260071
+          },
+          "TerritoryId": 128,
+          "InteractionType": "Interact",
+          "DialogueChoices": [
+            {
+              "Type": "List",
+              "Prompt": "TEXT_CLSROG050_00110_Q1_000_061",
+              "Answer": "TEXT_CLSROG050_00110_A1_000_064"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "DataId": 1010206,
+          "Position": {
+            "X": 107.71338,
+            "Y": 47.783855,
+            "Z": 50.736206
+          },
+          "TerritoryId": 134,
+          "InteractionType": "Interact",
+          "Fly": true,
+          "AethernetShortcut": [
+            "[Limsa Lominsa] The Aftcastle",
+            "[Limsa Lominsa] Zephyr Gate (Middle La Noscea)"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 6,
+      "Steps": [
+        {
+          "Position": {
+            "X": 101.76026,
+            "Y": 48.69752,
+            "Z": 10.89893
+          },
+          "TerritoryId": 134,
+          "InteractionType": "Combat",
+          "EnemySpawnType": "OverworldEnemies",
+          "KillEnemyDataIds": [
+            769
+          ],
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 7,
+      "Steps": [
+        {
+          "DataId": 1010206,
+          "Position": {
+            "X": 107.71338,
+            "Y": 47.783855,
+            "Z": 50.736206
+          },
+          "TerritoryId": 134,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 8,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "AetheryteShortcut": "Limsa Lominsa",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            },
+            "StepIf": {
+              "ExtraCondition": "RoguesGuild"
+            }
+          }
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 126
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/126_Stray into the Shadows.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/126_Stray into the Shadows.json
new file mode 100644 (file)
index 0000000..bf69b45
--- /dev/null
@@ -0,0 +1,346 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Limsa Lominsa",
+          "TargetTerritoryId": 129,
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            },
+            "StepIf": {
+              "ExtraCondition": "RoguesGuild"
+            }
+          }
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1010198,
+          "Position": {
+            "X": -152.11719,
+            "Y": -129.4397,
+            "Z": 267.10913
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 2004936,
+          "Position": {
+            "X": -151.8734,
+            "Y": -128.1446,
+            "Z": 256.8712
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "SkipConditions": {
+            "StepIf": {
+              "InTerritory": [
+                128
+              ]
+            }
+          }
+        },
+        {
+          "DataId": 1010212,
+          "Position": {
+            "X": -50.8584,
+            "Y": 40,
+            "Z": 111.40613
+          },
+          "TerritoryId": 128,
+          "InteractionType": "Interact",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Fishermens' Guild",
+            "[Limsa Lominsa] The Aftcastle"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1010211,
+          "Position": {
+            "X": -42.22174,
+            "Y": 42.249126,
+            "Z": 115.89221
+          },
+          "TerritoryId": 128,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "Position": {
+            "X": -62.300663,
+            "Y": 42.300003,
+            "Z": -151.94725
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 128,
+          "InteractionType": "Action",
+          "Action": "Hide",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] The Aftcastle",
+            "[Limsa Lominsa] Culinarians' Guild"
+          ],
+          "SkipConditions": {
+            "StepIf": {
+              "CompletionQuestVariablesFlags": [
+                null,
+                null,
+                null,
+                null,
+                null,
+                128
+              ]
+            }
+          }
+        },
+        {
+          "Position": {
+            "X": -54.962505,
+            "Y": 42.300007,
+            "Z": -158.14607
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 128,
+          "InteractionType": "WalkTo",
+          "DisableNavmesh": true,
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            128
+          ]
+        },
+        {
+          "TerritoryId": 128,
+          "InteractionType": "StatusOff",
+          "Status": "Hidden"
+        },
+        {
+          "Position": {
+            "X": -155.25468,
+            "Y": 18,
+            "Z": 28.882175
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 129,
+          "InteractionType": "Action",
+          "Action": "Hide",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Culinarians' Guild",
+            "[Limsa Lominsa] Hawkers' Alley"
+          ],
+          "SkipConditions": {
+            "StepIf": {
+              "CompletionQuestVariablesFlags": [
+                null,
+                null,
+                null,
+                null,
+                null,
+                32
+              ]
+            }
+          }
+        },
+        {
+          "Position": {
+            "X": -150.91245,
+            "Y": 18.2,
+            "Z": 34.06711
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 129,
+          "InteractionType": "WalkTo",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            32
+          ]
+        },
+        {
+          "TerritoryId": 129,
+          "InteractionType": "StatusOff",
+          "Status": "Hidden"
+        },
+        {
+          "Position": {
+            "X": -187.95581,
+            "Y": 1.2697256,
+            "Z": 208.46738
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 129,
+          "InteractionType": "Action",
+          "Action": "Hide",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Hawkers' Alley",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ],
+          "SkipConditions": {
+            "StepIf": {
+              "CompletionQuestVariablesFlags": [
+                null,
+                null,
+                null,
+                null,
+                null,
+                64
+              ]
+            }
+          }
+        },
+        {
+          "Position": {
+            "X": -190.81572,
+            "Y": 0.9999907,
+            "Z": 210.59836
+          },
+          "TerritoryId": 129,
+          "InteractionType": "WalkTo",
+          "CompletionQuestVariablesFlags": [
+            null,
+            null,
+            null,
+            null,
+            null,
+            64
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "TerritoryId": 129,
+          "InteractionType": "StatusOff",
+          "Status": "Hidden"
+        },
+        {
+          "DataId": 1010213,
+          "Position": {
+            "X": -161.12,
+            "Y": 1.9499999,
+            "Z": 239.30713
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 6,
+      "Steps": [
+        {
+          "DataId": 1010213,
+          "Position": {
+            "X": -161.12,
+            "Y": 1.9499999,
+            "Z": 239.30713
+          },
+          "TerritoryId": 129,
+          "InteractionType": "SinglePlayerDuty"
+        }
+      ]
+    },
+    {
+      "Sequence": 7,
+      "Steps": [
+        {
+          "DataId": 1010213,
+          "Position": {
+            "X": -161.12,
+            "Y": 1.9499999,
+            "Z": 239.30713
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Hawkers' Alley",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 144
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/144_Stifled Screams.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/144_Stifled Screams.json
new file mode 100644 (file)
index 0000000..be10582
--- /dev/null
@@ -0,0 +1,144 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Limsa Lominsa",
+          "TargetTerritoryId": 129,
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            },
+            "StepIf": {
+              "ExtraCondition": "RoguesGuild"
+            }
+          }
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1010199,
+          "Position": {
+            "X": 256.12268,
+            "Y": 21.097961,
+            "Z": 581.3839
+          },
+          "TerritoryId": 135,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Lower La Noscea - Moraby Drydocks",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 2004861,
+          "Position": {
+            "X": -131.63965,
+            "Y": 0.503479,
+            "Z": 729.9762
+          },
+          "TerritoryId": 135,
+          "InteractionType": "Interact",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 1010218,
+          "Position": {
+            "X": 319.44763,
+            "Y": -36.353825,
+            "Z": 346.76123
+          },
+          "TerritoryId": 138,
+          "InteractionType": "Interact",
+          "Fly": true,
+          "AetheryteShortcut": "Western La Noscea - Aleport"
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "DataId": 1010218,
+          "Position": {
+            "X": 319.44763,
+            "Y": -36.353825,
+            "Z": 346.76123
+          },
+          "TerritoryId": 138,
+          "InteractionType": "SinglePlayerDuty"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1010218,
+          "Position": {
+            "X": 319.44763,
+            "Y": -36.353825,
+            "Z": 346.76123
+          },
+          "StopDistance": 5,
+          "TerritoryId": 138,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 145
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/145_Slave to the Code.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/145_Slave to the Code.json
new file mode 100644 (file)
index 0000000..18b09b1
--- /dev/null
@@ -0,0 +1,86 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1010218,
+          "Position": {
+            "X": 319.44763,
+            "Y": -36.353825,
+            "Z": 346.76123
+          },
+          "StopDistance": 5,
+          "TerritoryId": 138,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Western La Noscea - Aleport",
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            }
+          }
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "Position": {
+            "X": 593.2056,
+            "Y": 43.88314,
+            "Z": 304.65137
+          },
+          "TerritoryId": 138,
+          "InteractionType": "WalkTo",
+          "Fly": true
+        },
+        {
+          "DataId": 1010228,
+          "Position": {
+            "X": 594.1709,
+            "Y": 43.893982,
+            "Z": 303.76135
+          },
+          "TerritoryId": 138,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "AetheryteShortcut": "Limsa Lominsa",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ]
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 146
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/146_Grinners in the Mist.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/146_Grinners in the Mist.json
new file mode 100644 (file)
index 0000000..091bc9b
--- /dev/null
@@ -0,0 +1,258 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Limsa Lominsa",
+          "TargetTerritoryId": 129,
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            },
+            "StepIf": {
+              "ExtraCondition": "RoguesGuild"
+            }
+          }
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 2004936,
+          "Position": {
+            "X": -151.90363,
+            "Y": -128.16058,
+            "Z": 256.8551
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129
+        },
+        {
+          "DataId": 1010238,
+          "Position": {
+            "X": 146.71545,
+            "Y": 62.3279,
+            "Z": 291.82874
+          },
+          "TerritoryId": 134,
+          "InteractionType": "Interact",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Fishermens' Guild",
+            "[Limsa Lominsa] Zephyr Gate (Middle La Noscea)"
+          ],
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "Position": {
+            "X": 168.34132,
+            "Y": 69.5,
+            "Z": 327.67975
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 134,
+          "InteractionType": "Action",
+          "Action": "Hide"
+        },
+        {
+          "Position": {
+            "X": 178.24341,
+            "Y": 69.5,
+            "Z": 328.4606
+          },
+          "TerritoryId": 134,
+          "InteractionType": "WalkTo"
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "TerritoryId": 134,
+          "InteractionType": "StatusOff",
+          "Status": "Hidden"
+        },
+        {
+          "DataId": 1010238,
+          "Position": {
+            "X": 146.71545,
+            "Y": 62.3279,
+            "Z": 291.82874
+          },
+          "TerritoryId": 134,
+          "InteractionType": "Interact",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 1010242,
+          "Position": {
+            "X": 7.2174683,
+            "Y": 57.91383,
+            "Z": -307.11835
+          },
+          "TerritoryId": 134,
+          "InteractionType": "Combat",
+          "AetheryteShortcut": "Middle La Noscea - Summerford Farms",
+          "Fly": true,
+          "EnemySpawnType": "AfterInteraction",
+          "KillEnemyDataIds": [
+            3567,
+            3568
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "DataId": 1010242,
+          "Position": {
+            "X": 7.2174683,
+            "Y": 57.91383,
+            "Z": -307.11835
+          },
+          "TerritoryId": 134,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 6,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "AetheryteShortcut": "Limsa Lominsa",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ]
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 7,
+      "Steps": [
+        {
+          "DataId": 1010237,
+          "Position": {
+            "X": 242.29797,
+            "Y": 8.000164,
+            "Z": 668.2383
+          },
+          "TerritoryId": 135,
+          "InteractionType": "SinglePlayerDuty",
+          "AetheryteShortcut": "Lower La Noscea - Moraby Drydocks",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 8,
+      "Steps": [
+        {
+          "DataId": 1010237,
+          "Position": {
+            "X": 242.29797,
+            "Y": 8.000164,
+            "Z": 668.2383
+          },
+          "StopDistance": 7,
+          "TerritoryId": 135,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "AetheryteShortcut": "Limsa Lominsa",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ]
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 148
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/148_Sweet Sorrows.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/148_Sweet Sorrows.json
new file mode 100644 (file)
index 0000000..78735a3
--- /dev/null
@@ -0,0 +1,292 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Limsa Lominsa",
+          "TargetTerritoryId": 129,
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            },
+            "StepIf": {
+              "ExtraCondition": "RoguesGuild"
+            }
+          }
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 2004936,
+          "Position": {
+            "X": -151.90363,
+            "Y": -128.16058,
+            "Z": 256.8551
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "SkipConditions": {
+            "StepIf": {
+              "InTerritory": [
+                134,
+                135
+              ]
+            }
+          }
+        },
+        {
+          "Position": {
+            "X": 212.54845,
+            "Y": 65.80573,
+            "Z": 285.71436
+          },
+          "TerritoryId": 134,
+          "InteractionType": "WalkTo",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Fishermens' Guild",
+            "[Limsa Lominsa] Zephyr Gate (Middle La Noscea)"
+          ],
+          "Fly": true,
+          "SkipConditions": {
+            "StepIf": {
+              "InTerritory": [
+                135
+              ]
+            }
+          }
+        },
+        {
+          "Position": {
+            "X": 509.26575,
+            "Y": 95.90476,
+            "Z": -446.11078
+          },
+          "StopDistance": 0.5,
+          "TerritoryId": 135,
+          "InteractionType": "Combat",
+          "EnemySpawnType": "AutoOnEnterArea",
+          "KillEnemyDataIds": [
+            2864,
+            2865,
+            2866
+          ],
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 1010252,
+          "Position": {
+            "X": 508.23218,
+            "Y": 95.95811,
+            "Z": -449.82074
+          },
+          "TerritoryId": 135,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "AetheryteShortcut": "Limsa Lominsa",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ]
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 2004936,
+          "Position": {
+            "X": -151.90363,
+            "Y": -128.16058,
+            "Z": 256.8551
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "SkipConditions": {
+            "StepIf": {
+              "AetheryteUnlocked": "Eastern La Noscea - Costa Del Sol"
+            }
+          },
+          "$": "Pathfinder ref"
+        },
+        {
+          "DataId": 1000868,
+          "Position": {
+            "X": -192.00433,
+            "Y": 0.9999907,
+            "Z": 211.68835
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 137,
+          "SkipConditions": {
+            "StepIf": {
+              "AetheryteUnlocked": "Eastern La Noscea - Costa Del Sol"
+            }
+          }
+        },
+        {
+          "TerritoryId": 137,
+          "InteractionType": "AttuneAetheryte",
+          "Aetheryte": "Eastern La Noscea - Costa Del Sol",
+          "SkipConditions": {
+            "StepIf": {
+              "AetheryteUnlocked": "Eastern La Noscea - Costa Del Sol"
+            }
+          }
+        },
+        {
+          "Position": {
+            "X": 449.17413,
+            "Y": 16.072088,
+            "Z": 406.06335
+          },
+          "TerritoryId": 137,
+          "InteractionType": "WalkTo",
+          "Fly": true,
+          "AetheryteShortcut": "Eastern La Noscea - Costa Del Sol",
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            }
+          }
+        },
+        {
+          "DataId": 1010251,
+          "Position": {
+            "X": 450.82776,
+            "Y": 16.18121,
+            "Z": 406.69873
+          },
+          "TerritoryId": 137,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 5,
+      "Steps": [
+        {
+          "DataId": 1010251,
+          "Position": {
+            "X": 450.82776,
+            "Y": 16.18121,
+            "Z": 406.69873
+          },
+          "TerritoryId": 137,
+          "InteractionType": "SinglePlayerDuty"
+        }
+      ]
+    },
+    {
+      "Sequence": 6,
+      "Steps": [
+        {
+          "DataId": 1010250,
+          "Position": {
+            "X": 448.47778,
+            "Y": 16.154829,
+            "Z": 408.77393
+          },
+          "TerritoryId": 137,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "AetheryteShortcut": "Limsa Lominsa",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ]
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 154
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/154_Market for Death.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/154_Market for Death.json
new file mode 100644 (file)
index 0000000..d0908b9
--- /dev/null
@@ -0,0 +1,160 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Limsa Lominsa",
+          "TargetTerritoryId": 129,
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            },
+            "StepIf": {
+              "ExtraCondition": "RoguesGuild"
+            }
+          }
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "Position": {
+            "X": 410.07083,
+            "Y": 31.504957,
+            "Z": -12.586371
+          },
+          "TerritoryId": 138,
+          "InteractionType": "WalkTo",
+          "AetheryteShortcut": "Western La Noscea - Aleport",
+          "TargetTerritoryId": 139,
+          "Fly": true
+        },
+        {
+          "Position": {
+            "X": -436.69995,
+            "Y": -2.0159357,
+            "Z": 48.819775
+          },
+          "StopDistance": 1,
+          "TerritoryId": 139,
+          "InteractionType": "Combat",
+          "EnemySpawnType": "AutoOnEnterArea",
+          "KillEnemyDataIds": [
+            3569,
+            3570,
+            3571
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "DataId": 2004916,
+          "Position": {
+            "X": -436.02655,
+            "Y": -1.9379272,
+            "Z": 48.569458
+          },
+          "TerritoryId": 139,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 3,
+      "Steps": [
+        {
+          "DataId": 1010261,
+          "Position": {
+            "X": -437.3694,
+            "Y": -2.369183,
+            "Z": 55.954834
+          },
+          "StopDistance": 7,
+          "TerritoryId": 139,
+          "InteractionType": "Interact"
+        }
+      ]
+    },
+    {
+      "Sequence": 4,
+      "Steps": [
+        {
+          "DataId": 1010267,
+          "Position": {
+            "X": -449.08832,
+            "Y": 21.634577,
+            "Z": -327.93164
+          },
+          "TerritoryId": 134,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Middle La Noscea - Summerford Farms",
+          "Fly": true
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "AetheryteShortcut": "Limsa Lominsa",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ]
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 155
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/155_Cloying Victory.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/NIN/155_Cloying Victory.json
new file mode 100644 (file)
index 0000000..4b7c804
--- /dev/null
@@ -0,0 +1,108 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Limsa Lominsa",
+          "TargetTerritoryId": 129,
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Aetheryte Plaza",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true
+            },
+            "StepIf": {
+              "ExtraCondition": "RoguesGuild"
+            }
+          }
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 2004936,
+          "Position": {
+            "X": -151.90363,
+            "Y": -128.16058,
+            "Z": 256.8551
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129
+        },
+        {
+          "DataId": 2004863,
+          "Position": {
+            "X": 4.4403076,
+            "Y": 44.47998,
+            "Z": 121.29382
+          },
+          "TerritoryId": 128,
+          "InteractionType": "SinglePlayerDuty",
+          "AethernetShortcut": [
+            "[Limsa Lominsa] Fishermens' Guild",
+            "[Limsa Lominsa] The Aftcastle"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1009944,
+          "Position": {
+            "X": -152.66656,
+            "Y": 2.8562405,
+            "Z": 243.18298
+          },
+          "TerritoryId": 129,
+          "InteractionType": "Interact",
+          "TargetTerritoryId": 129,
+          "AethernetShortcut": [
+            "[Limsa Lominsa] The Aftcastle",
+            "[Limsa Lominsa] Fishermens' Guild"
+          ]
+        },
+        {
+          "DataId": 1009943,
+          "Position": {
+            "X": -153.36847,
+            "Y": -129.4397,
+            "Z": 265.88843
+          },
+          "StopDistance": 7,
+          "TerritoryId": 129,
+          "InteractionType": "CompleteQuest",
+          "NextQuestId": 212
+        }
+      ]
+    }
+  ]
+}
index b4d68b9e72345bb0b2d418aa44610ebcf09be090..c0aece195865c2796f72ddbabf56a3d44f14fedb 100644 (file)
             "[Limsa Lominsa] Fishermens' Guild"\r
           ],\r
           "SkipConditions": {\r
+            "AetheryteShortcutIf": {\r
+              "InSameTerritory": true\r
+            },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -151.80984,\r
-                  "Y": -128.6493,\r
-                  "Z": 265.27332\r
-                },\r
-                "TerritoryId": 129,\r
-                "MaximumDistance": 50\r
-              }\r
+              "ExtraCondition": "RoguesGuild"\r
             }\r
           }\r
         },\r
@@ -41,6 +36,7 @@
             "Y": -129.4397,\r
             "Z": 265.88843\r
           },\r
+          "StopDistance": 7,\r
           "TerritoryId": 129,\r
           "InteractionType": "AcceptQuest"\r
         }\r
@@ -98,7 +94,8 @@
             "Z": -2.3651733\r
           },\r
           "TerritoryId": 137,\r
-          "InteractionType": "Interact"\r
+          "InteractionType": "Interact",\r
+          "Fly": true\r
         }\r
       ]\r
     },\r
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
+          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true }\r
-          }\r
+          },\r
+          "DialogueChoices": [\r
+            {\r
+              "Type": "YesNo",\r
+              "Prompt": "TEXT_JOBNIN300_00212_Q2_000_000",\r
+              "Yes": true\r
+            }\r
+          ]\r
         }\r
       ]\r
     },\r
index 36039c5b24e4bb2268ea42bfb5f62f3061073ffd..68637f769a4a137a0f7c36668af099fd6509f240 100644 (file)
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137,\r
           }\r
         },\r
         {\r
-          "InteractionType": "WaitForManualProgress",\r
+          "DataId": 2004927,\r
+          "Position": {\r
+            "X": -10.605103,\r
+            "Y": 41.397705,\r
+            "Z": 267.87207\r
+          },\r
           "TerritoryId": 137,\r
-          "Comment": "Use Ten -> Fuma Shuriken on the dummy"\r
+          "InteractionType": "Action",\r
+          "Action": "Fuma Shuriken"\r
         }\r
       ]\r
     },\r
index 4f10975f027690134ac9ce52ce04b015f605e306..a0d21f699b42e8a5db0e21f01202160502aca496 100644 (file)
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
           }\r
         },\r
         {\r
-          "InteractionType": "WaitForManualProgress",\r
+          "DataId": 2004928,\r
+          "Position": {\r
+            "X": -10.605103,\r
+            "Y": 41.397705,\r
+            "Z": 267.87207\r
+          },\r
           "TerritoryId": 137,\r
-          "Comment": "Use Ten -> Chi -> Raiton on the dummy"\r
+          "InteractionType": "Action",\r
+          "Action": "Raiton"\r
         }\r
       ]\r
     },\r
       "Sequence": 3,\r
       "Steps": [\r
         {\r
-          "InteractionType": "WaitForManualProgress",\r
+          "DataId": 2004929,\r
+          "Position": {\r
+            "X": -10.605103,\r
+            "Y": 41.397705,\r
+            "Z": 267.87207\r
+          },\r
+          "StopDistance": 7,\r
           "TerritoryId": 137,\r
-          "Comment": "Use Chi -> Ten -> Katon on the dummy"\r
+          "InteractionType": "Action",\r
+          "Action": "Katon"\r
         }\r
       ]\r
     },\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index 5449a01edd7d54149df39edc01cb9aca3e6c7c82..f93110de24a9e16f8f5e20cf999d11b7983f2b30 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
             "Z": 257.98413\r
           },\r
           "TerritoryId": 137,\r
-          "InteractionType": "AcceptQuest"\r
+          "InteractionType": "AcceptQuest",\r
+          "DialogueChoices": [\r
+            {\r
+              "Type": "List",\r
+              "Prompt": "TEXT_JOBNIN400_00216_Q1_000_000",\r
+              "Answer": "TEXT_JOBNIN400_00216_A1_000_001"\r
+            }\r
+          ]\r
         }\r
       ]\r
     },\r
index 2108a0ce2f9c48b5cc8c4359c0b36bb5ea3508ec..47e609362813208844f6cf23001dfabe964a528d 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index 277b3c15a1547aebff67e1f8dc968a9f1e64c266..da4da560e91e2a77c825c228ee9df5395987d2e2 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index 4bc21c0a0e1db445589c5e4341a82d38d414e797..6d437dd4b4a3b4dc4c9088dcaca010f9d3a4f575 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index 04608f05bf1d9c88486a4f147a7de3987c687bfa..8f2abd348c8a7d69a457e3206216396e55e526ff 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
             "Z": 250.32422\r
           },\r
           "TerritoryId": 137,\r
-          "InteractionType": "Interact"\r
+          "InteractionType": "Interact",\r
+          "DialogueChoices": [\r
+            {\r
+              "Type": "List",\r
+              "Prompt": "TEXT_JOBNIN500_00234_Q1_000_000",\r
+              "Answer": "TEXT_JOBNIN500_00234_A1_000_002"\r
+            }\r
+          ]\r
         }\r
       ]\r
     },\r
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index c0da4f4e395abd6720f02388354003f1531c4988..5bd22f6b22cc7048f7a947954b856ef6bf67ae6c 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index b4bf12a188efe1aa5d3aaffb35965dbc55bf09c7..62ab343560ebdbae41bf220c048d2adc04388948 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index 7fd6311f4ad4391959b2528454a27a427246cddb..3bf578ba9d02722b7cc06cd3da8303fc5cf1ea06 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
       "Sequence": 2,\r
       "Steps": [\r
         {\r
+          "DataId": 2005928,\r
           "Position": {\r
-            "X": -11.615023,\r
-            "Y": 66.32614,\r
-            "Z": 421.28235\r
+            "X": -22.842834,\r
+            "Y": 66.300415,\r
+            "Z": 426.1692\r
           },\r
           "TerritoryId": 135,\r
-          "InteractionType": "WalkTo"\r
-        },\r
-        {\r
-          "TerritoryId": 135,\r
-          "InteractionType": "WaitForManualProgress",\r
-          "Comment": "Use Raiton on destination"\r
+          "InteractionType": "Action",\r
+          "Action": "Raiton"\r
         }\r
       ]\r
     },\r
       "Sequence": 3,\r
       "Steps": [\r
         {\r
+          "DataId": 2005929,\r
           "Position": {\r
-            "X": -45.41632,\r
-            "Y": 50.40381,\r
-            "Z": 519.4183\r
+            "X": -46.707886,\r
+            "Y": 48.41687,\r
+            "Z": 529.1676\r
           },\r
           "TerritoryId": 135,\r
-          "InteractionType": "WalkTo"\r
-        },\r
-        {\r
-          "TerritoryId": 135,\r
-          "InteractionType": "WaitForManualProgress",\r
-          "Comment": "Use Raiton on destination"\r
+          "InteractionType": "Action",\r
+          "Action": "Raiton"\r
         }\r
       ]\r
     },\r
       "Sequence": 4,\r
       "Steps": [\r
         {\r
+          "DataId": 2005930,\r
           "Position": {\r
-            "X": -91.23599,\r
-            "Y": 28.63774,\r
-            "Z": 617.4151\r
+            "X": -93.888794,\r
+            "Y": 26.932129,\r
+            "Z": 623.25464\r
           },\r
           "TerritoryId": 135,\r
-          "InteractionType": "WalkTo"\r
-        },\r
-        {\r
-          "TerritoryId": 135,\r
-          "InteractionType": "WaitForManualProgress",\r
-          "Comment": "Use Raiton on destination"\r
+          "InteractionType": "Action",\r
+          "Action": "Raiton"\r
         }\r
       ]\r
     },\r
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index 1fac612b4e29c173b9eceff4c3b9a003c5fc3d2f..5dd02706a3b2eac11a04de83fdcbcce7f0eca297 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index 9d8c74d853f45fa240b67c178db130fb565397e5..52e53ea9ec1c7ec1dffa270bee3694c1f0a12445 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
           },\r
           "TerritoryId": 398,\r
           "InteractionType": "WalkTo",\r
+          "Fly": true,\r
           "AetheryteShortcut": "The Dravanian Forelands - Tailfeather"\r
         },\r
         {\r
           "TerritoryId": 398,\r
           "InteractionType": "Combat",\r
           "EnemySpawnType": "AfterInteraction",\r
-          "KillEnemyDataIds": [5042, 4619]\r
+          "KillEnemyDataIds": [5042, 4619],\r
+          "Fly": true\r
         }\r
       ]\r
     },\r
             "Z": -217.02905\r
           },\r
           "TerritoryId": 398,\r
-          "InteractionType": "Interact"\r
+          "InteractionType": "Interact",\r
+          "Fly": true\r
         }\r
       ]\r
     },\r
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index 5003e06364ade9d74015523964cd3e8ee347221b..60b6c1cbaf9f0463bb24128ad50353bac1151808 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
           "TerritoryId": 135,\r
           "Fly": true,\r
           "InteractionType": "Interact",\r
-          "AetheryteShortcut": "Lower La Noscea - Moraby Drydocks"\r
+          "AetheryteShortcut": "Lower La Noscea - Moraby Drydocks",\r
+          "DialogueChoices": [\r
+            {\r
+              "Type": "List",\r
+              "Prompt": "TEXT_JOBNIN600_01688_Q1_000_000",\r
+              "Answer": "TEXT_JOBNIN600_01688_A1_000_010"\r
+            }\r
+          ]\r
         }\r
       ]\r
     },\r
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index da54b86afccb9a2e4ec1675f6f56d43ff72f77c2..8cec6e1b217e7f93519cbdefdb964990253910d9 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
           "AethernetShortcut": [\r
             "[Limsa Lominsa] Aetheryte Plaza",\r
             "[Limsa Lominsa] The Aftcastle"\r
+          ],\r
+          "DialogueChoices": [\r
+            {\r
+              "Type": "List",\r
+              "Prompt": "TEXT_JOBNIN601_02948_Q1_000_031",\r
+              "Answer": "TEXT_JOBNIN601_02948_A3_000_034"\r
+            }\r
           ]\r
         }\r
       ]\r
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index 0db541cf8969807f7e1b44ce3928092fcaaa21ae..a4e481929ad0e666fc2d7be6b63974655ce461ae 100644 (file)
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true },\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
@@ -74,7 +65,8 @@
             "Z": -60.22008\r
           },\r
           "TerritoryId": 628,\r
-          "InteractionType": "WalkTo",\r
+          "InteractionType": "Action",\r
+          "Action": "Hide",\r
           "AethernetShortcut": [\r
             "[Kugane] Sekiseigumi Barracks",\r
             "[Kugane] Aetheryte Plaza"\r
           }\r
         },\r
         {\r
-          "InteractionType": "WaitForManualProgress",\r
+          "Position": {\r
+            "X": -46.572186,\r
+            "Y": 3.0135043,\r
+            "Z": -71.70311\r
+          },\r
           "TerritoryId": 628,\r
-          "Comment": "Hide, then approach Loutish Lickspittle",\r
+          "InteractionType": "WalkTo",\r
           "CompletionQuestVariablesFlags": [null, null, null, null, null, 128]\r
         },\r
+        {\r
+          "TerritoryId": 628,\r
+          "InteractionType": "StatusOff",\r
+          "Status": "Hidden"\r
+        },\r
         {\r
           "Position": {\r
             "X": -53.864307,\r
             "Z": -106.929726\r
           },\r
           "TerritoryId": 628,\r
-          "InteractionType": "WalkTo"\r
+          "InteractionType": "Action",\r
+          "Action": "Hide"\r
         },\r
         {\r
-          "InteractionType": "WaitForManualProgress",\r
+          "Position": {\r
+            "X": -82.41595,\r
+            "Y": -7.300003,\r
+            "Z": -111.459076\r
+          },\r
           "TerritoryId": 628,\r
-          "Comment": "Hide, then approach the two NPCs downstairs"\r
+          "InteractionType": "WalkTo"\r
         }\r
       ]\r
     },\r
     {\r
       "Sequence": 3,\r
       "Steps": [\r
+        {\r
+          "TerritoryId": 628,\r
+          "InteractionType": "StatusOff",\r
+          "Status": "Hidden"\r
+        },\r
         {\r
           "DataId": 1023555,\r
           "Position": {\r
index 326f2abc52eef4a7c2f6d5e8c190510f4336b6f1..0d833ebd24fea824c06402bb76f8068005017596 100644 (file)
           "AetheryteShortcut": "Yanxia - Namai",\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true }\r
-          }\r
+          },\r
+          "DialogueChoices": [\r
+            {\r
+              "Type": "List",\r
+              "Prompt": "TEXT_JOBNIN680_02951_Q1_000_003",\r
+              "Answer": "TEXT_JOBNIN680_02951_A3_000_006"\r
+            }\r
+          ]\r
         }\r
       ]\r
     },\r
             "Z": -96.75751\r
           },\r
           "TerritoryId": 614,\r
-          "InteractionType": "Interact"\r
+          "InteractionType": "Interact",\r
+          "DialogueChoices": [\r
+            {\r
+              "Type": "YesNo",\r
+              "Prompt": "TEXT_JOBNIN680_02951_SYSTEM_100_049",\r
+              "Yes": true\r
+            }\r
+          ]\r
         }\r
       ]\r
     },\r
             "Y": 16.160986,\r
             "Z": 390.68732\r
           },\r
+          "StopDistance": 1,\r
           "TerritoryId": 614,\r
           "InteractionType": "Combat",\r
           "KillEnemyDataIds": [6641],\r
-          "EnemySpawnType": "OverworldEnemies"\r
+          "EnemySpawnType": "OverworldEnemies",\r
+          "Fly": true\r
         }\r
       ]\r
     },\r
           },\r
           "TerritoryId": 614,\r
           "InteractionType": "Interact",\r
-          "AetheryteShortcut": "Yanxia - Namai"\r
+          "AetheryteShortcut": "Yanxia - Namai",\r
+          "DialogueChoices": [\r
+            {\r
+              "Type": "YesNo",\r
+              "Prompt": "TEXT_JOBNIN680_02951_SYSTEM_100_049",\r
+              "Yes": true\r
+            }\r
+          ]\r
         }\r
       ]\r
     },\r
index ba6035e0b3a8cada4960138314ec24280ed0aea2..202dfebd9f4613ee5e77b40632e15d6cfd5fda0b 100644 (file)
           "AetheryteShortcut": "Yanxia - Namai",\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": { "InSameTerritory": true }\r
-          }\r
+          },\r
+          "DialogueChoices": [\r
+            {\r
+              "Type": "List",\r
+              "Prompt": "TEXT_JOBNIN700_02952_Q1_100_004",\r
+              "Answer": "TEXT_JOBNIN700_02952_A1_100_005"\r
+            }\r
+          ]\r
         }\r
       ]\r
     },\r
@@ -34,7 +41,7 @@
           "TerritoryId": 622,\r
           "InteractionType": "SinglePlayerDuty",\r
           "Fly": true,\r
-          "AetheryteShortcut": "Azim Steppe - Dawn Throne",\r
+          "AetheryteShortcut": "Azim Steppe - Reunion",\r
           "SkipConditions": {\r
             "AetheryteShortcutIf": {\r
               "NearPosition": {\r
           "TerritoryId": 137,\r
           "InteractionType": "Interact",\r
           "AetheryteShortcut": "Eastern La Noscea - Wineport",\r
-          "Fly": true,\r
           "SkipConditions": {\r
             "StepIf": {\r
-              "NearPosition": {\r
-                "Position": {\r
-                  "X": -25.149055,\r
-                  "Y": -24.773232,\r
-                  "Z": 258.15594\r
-                },\r
-                "TerritoryId": 137,\r
-                "MaximumDistance": 25\r
-              }\r
+              "ExtraCondition": "DockStorehouse"\r
             }\r
           },\r
           "TargetTerritoryId": 137\r
index fb18c119f1bd74d63f667817f00a99e8d6a4a3b8..dc821c51e413dac5c37fc4c45756ad92d7941c95 100644 (file)
             "Say",
             "Emote",
             "Action",
+            "StatusOff",
             "WaitForNpcAtPosition",
             "WaitForManualProgress",
             "Duty",
                   "Hop-step",
                   "Fuma Shuriken",
                   "Katon",
-                  "Raiton"
+                  "Raiton",
+                  "Hide"
                 ]
               }
             },
             ]
           }
         },
+        {
+          "if": {
+            "properties": {
+              "InteractionType": {
+                "const": "StatusOff"
+              }
+            }
+          },
+          "then": {
+            "properties": {
+              "Status": {
+                "type": "string",
+                "description": "The status to disable",
+                "enum": [
+                  "Hidden"
+                ]
+              }
+            },
+            "required": [
+              "Status"
+            ]
+          }
+        },
         {
           "if": {
             "properties": {
index 9b1be7dd80ffa333f49fd0d39f3f21e98ee27b1b..7a21742450bf8366b60b0616ed3dbf146479e6ec 100644 (file)
@@ -35,6 +35,7 @@ public sealed class ActionConverter() : EnumConverter<EAction>(Values)
         { EAction.BlueGulal, "Blue Gulal" },
         { EAction.ElectrixFlux, "Electric Flux" },
         { EAction.HopStep, "Hop-step" },
+        { EAction.Hide, "Hide" },
         { EAction.FumaShuriken, "Fuma Shuriken" },
         { EAction.Katon, "Katon" },
         { EAction.Raiton, "Raiton" },
index aef951bf44bc491bac999ffc6e312d1ce79440d7..b8367ebbbba14fb9917d5451dcc85002ae59fbef 100644 (file)
@@ -21,6 +21,7 @@ public sealed class InteractionTypeConverter() : EnumConverter<EInteractionType>
         { EInteractionType.Say, "Say" },
         { EInteractionType.Emote, "Emote" },
         { EInteractionType.Action, "Action" },
+        { EInteractionType.StatusOff, "StatusOff" },
         { EInteractionType.WaitForObjectAtPosition, "WaitForNpcAtPosition" },
         { EInteractionType.WaitForManualProgress, "WaitForManualProgress" },
         { EInteractionType.Duty, "Duty" },
diff --git a/Questionable.Model/Questing/Converter/StatusConverter.cs b/Questionable.Model/Questing/Converter/StatusConverter.cs
new file mode 100644 (file)
index 0000000..e16c493
--- /dev/null
@@ -0,0 +1,12 @@
+using System.Collections.Generic;
+using Questionable.Model.Common.Converter;
+
+namespace Questionable.Model.Questing.Converter;
+
+public sealed class StatusConverter() : EnumConverter<EStatus>(Values)
+{
+    private static readonly Dictionary<EStatus, string> Values = new()
+    {
+        { EStatus.Hidden, "Hidden" },
+    };
+}
index 71549e6e61998b3d0b959a4a1c08e5582d101e34..429281732350d2b930a8bcc6a47850b87dd4b017 100644 (file)
@@ -36,6 +36,7 @@ public enum EAction
     BlueGulal = 29384,
     ElectrixFlux = 29718,
     HopStep = 31116,
+    Hide = 2245,
     Ten = 2259,
     Ninjutsu = 2260,
     Chi = 2261,
@@ -43,6 +44,7 @@ public enum EAction
     FumaShuriken = 2265,
     Katon = 2266,
     Raiton = 2267,
+    RabbitMedium = 2272,
 
     CollectMiner = 240,
     ScourMiner = 22182,
index af23e90e7fc2fe021e75b8a42334d42912ef7419..137078ebab4105c7317ecb1cc56380cfa7a98a0e 100644 (file)
@@ -20,6 +20,7 @@ public enum EInteractionType
     Say,
     Emote,
     Action,
+    StatusOff,
     WaitForObjectAtPosition,
     WaitForManualProgress,
     Duty,
diff --git a/Questionable.Model/Questing/EStatus.cs b/Questionable.Model/Questing/EStatus.cs
new file mode 100644 (file)
index 0000000..780f1a4
--- /dev/null
@@ -0,0 +1,12 @@
+using System.Text.Json.Serialization;
+using Questionable.Model.Questing.Converter;
+
+namespace Questionable.Model.Questing;
+
+[JsonConverter(typeof(StatusConverter))]
+public enum EStatus : uint
+{
+    GatheringRateUp = 218,
+    Hidden = 614,
+    Eukrasia = 2606,
+}
index dcb8042a9c0dc76686fd14598a9c411d70747dd7..5a6998188c509f9db888f057df28323a1e5a5561 100644 (file)
@@ -63,6 +63,7 @@ public sealed class QuestStep
     public EEmote? Emote { get; set; }
     public ChatMessage? ChatMessage { get; set; }
     public EAction? Action { get; set; }
+    public EStatus? Status { get; set; }
 
     public EEnemySpawnType? EnemySpawnType { get; set; }
     public List<uint> KillEnemyDataIds { get; set; } = [];
index 169b0b7c618500bdbb91d021e78626cc1e576872..701f8534570e1baa09e661aea8abede55d723a52 100644 (file)
@@ -37,8 +37,6 @@ internal static class DoGather
         ICondition condition,
         ILogger<GatherExecutor> logger) : TaskExecutor<Task>
     {
-        private const uint StatusGatheringRateUp = 218;
-
         private bool _wasGathering;
         private SlotInfo? _slotToGather;
         private Queue<EAction>? _actionQueue;
@@ -155,7 +153,7 @@ internal static class DoGather
             //uint gp = clientState.LocalPlayer!.CurrentGp;
             Queue<EAction> actions = new();
 
-            if (!gameFunctions.HasStatus(StatusGatheringRateUp))
+            if (!gameFunctions.HasStatus(EStatus.GatheringRateUp))
             {
                 // do we have an alternative item? only happens for 'evaluation' leve quests
                 if (Task.Request.AlternativeItemId != 0)
index e6c4f1f484d037446e1905af09da4081e33c4fb0..7255fa0bfb71f3fdc8a5f8fc72600d3bf049278c 100644 (file)
@@ -1,6 +1,8 @@
 using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using Dalamud.Game.ClientState.Objects.Types;
+using FFXIVClientStructs.FFXIV.Client.Game;
 using Microsoft.Extensions.Logging;
 using Questionable.Controller.Steps.Common;
 using Questionable.Functions;
@@ -29,7 +31,13 @@ internal static class Action
 
         public static ITask OnObject(uint? dataId, EAction action)
         {
-            return new UseOnObject(dataId, action);
+            if (action is EAction.FumaShuriken or EAction.Katon or EAction.Raiton)
+            {
+                ArgumentNullException.ThrowIfNull(dataId);
+                return new UseMudraOnObject(dataId.Value, action);
+            }
+            else
+                return new UseOnObject(dataId, action);
         }
     }
 
@@ -62,19 +70,18 @@ internal static class Action
                 {
                     if (Task.Action == EAction.Diagnosis)
                     {
-                        uint eukrasiaAura = 2606;
                         // If SGE have Eukrasia status, we need to remove it.
-                        if (gameFunctions.HasStatus(eukrasiaAura))
+                        if (gameFunctions.HasStatus(EStatus.Eukrasia))
                         {
-                            if (GameFunctions.RemoveStatus(eukrasiaAura))
+                            if (GameFunctions.RemoveStatus(EStatus.Eukrasia))
                             {
                                 // Introduce a delay of 2 seconds before using the next action (otherwise it will try and use Eukrasia Diagnosis)
                                 _continueAt = DateTime.Now.AddSeconds(2);
-                                return true; 
+                                return true;
                             }
                         }
                     }
-                    
+
                     _usedAction = gameFunctions.UseAction(gameObject, Task.Action);
                     _continueAt = DateTime.Now.AddSeconds(0.5);
                     return true;
@@ -118,4 +125,67 @@ internal static class Action
             return ETaskResult.TaskComplete;
         }
     }
+
+    internal sealed record UseMudraOnObject(uint DataId, EAction Action) : ITask
+    {
+        public override string ToString() => $"Mudra({Action})";
+    }
+
+    internal sealed class UseMudraOnObjectExecutor(
+        GameFunctions gameFunctions,
+        ILogger<UseMudraOnObject> logger) : TaskExecutor<UseMudraOnObject>
+    {
+        private static readonly ReadOnlyDictionary<EAction, Dictionary<EAction, EAction>> Combos =
+            new Dictionary<EAction, Dictionary<EAction, EAction>>
+            {
+                { EAction.FumaShuriken, new() { { EAction.Ninjutsu, EAction.Ten } } },
+                { EAction.Raiton, new() { { EAction.Ninjutsu, EAction.Ten }, { EAction.FumaShuriken, EAction.Chi } } },
+                { EAction.Katon, new() {{ EAction.Ninjutsu, EAction.Chi }, { EAction.FumaShuriken, EAction.Ten } } }
+            }.AsReadOnly();
+
+        private DateTime _continueAt = DateTime.MinValue;
+
+        protected override bool Start() => true;
+
+        public override unsafe ETaskResult Update()
+        {
+            if (DateTime.Now < _continueAt)
+                return ETaskResult.StillRunning;
+
+            EAction adjustedNinjutsuId = (EAction)ActionManager.Instance()->GetAdjustedActionId((uint)EAction.Ninjutsu);
+            if (adjustedNinjutsuId == EAction.RabbitMedium)
+            {
+                _continueAt = DateTime.Now.AddSeconds(1);
+                return ETaskResult.StillRunning;
+            }
+
+            IGameObject? gameObject = gameFunctions.FindObjectByDataId(Task.DataId);
+            if (gameObject == null || !gameObject.IsTargetable)
+                return ETaskResult.StillRunning;
+
+            if (adjustedNinjutsuId == Task.Action)
+            {
+                _continueAt = DateTime.Now.AddSeconds(0.25);
+                return gameFunctions.UseAction(gameObject, Task.Action)
+                    ? ETaskResult.TaskComplete
+                    : ETaskResult.StillRunning;
+            }
+
+            if (Combos.TryGetValue(Task.Action, out var combo))
+            {
+                if (combo.TryGetValue(adjustedNinjutsuId, out var mudra))
+                {
+                    _continueAt = DateTime.Now.AddSeconds(0.25);
+                    gameFunctions.UseAction(mudra);
+                    return ETaskResult.StillRunning;
+                }
+
+                _continueAt = DateTime.Now.AddSeconds(0.25);
+                return ETaskResult.StillRunning;
+            }
+
+            logger.LogError("Unable to find relevant combo for {Action}", Task.Action);
+            return ETaskResult.TaskComplete;
+        }
+    }
 }
diff --git a/Questionable/Controller/Steps/Interactions/StatusOff.cs b/Questionable/Controller/Steps/Interactions/StatusOff.cs
new file mode 100644 (file)
index 0000000..746f739
--- /dev/null
@@ -0,0 +1,47 @@
+using System;
+using Questionable.Controller.Steps.Common;
+using Questionable.Functions;
+using Questionable.Model;
+using Questionable.Model.Questing;
+
+namespace Questionable.Controller.Steps.Interactions;
+
+internal static class StatusOff
+{
+    internal sealed class Factory : SimpleTaskFactory
+    {
+        public override ITask? CreateTask(Quest quest, QuestSequence sequence, QuestStep step)
+        {
+            if (step.InteractionType != EInteractionType.StatusOff)
+                return null;
+
+            ArgumentNullException.ThrowIfNull(step.Status);
+            return new Task(step.Status.Value);
+        }
+    }
+
+    internal sealed record Task(EStatus Status) : ITask
+    {
+        public bool ShouldRedoOnInterrupt() => true;
+
+        public override string ToString() => $"StatusOff({Status})";
+    }
+
+    internal sealed class DoStatusOff(
+        GameFunctions gameFunctions)
+        : AbstractDelayedTaskExecutor<Task>
+    {
+        protected override bool StartInternal()
+        {
+            if (gameFunctions.HasStatus(Task.Status))
+                return GameFunctions.RemoveStatus(Task.Status);
+
+            return false;
+        }
+
+        public override ETaskResult Update()
+        {
+            return gameFunctions.HasStatus(Task.Status) ? ETaskResult.StillRunning : ETaskResult.TaskComplete;
+        }
+    }
+}
index 2cc2e12268538be52df1dbb6bc9346ab64e523d6..bb0313ae57c7cc73a7c70e0ba46e6758ca9a9875 100644 (file)
@@ -298,7 +298,7 @@ internal sealed unsafe class GameFunctions
                statusManager->HasStatus(2730);
     }
 
-    public bool HasStatus(uint statusId)
+    public bool HasStatus(EStatus statusId)
     {
         var localPlayer = _clientState.LocalPlayer;
         if (localPlayer == null)
@@ -306,12 +306,12 @@ internal sealed unsafe class GameFunctions
 
         var battleChara = (BattleChara*)localPlayer.Address;
         StatusManager* statusManager = battleChara->GetStatusManager();
-        return statusManager->HasStatus(statusId);
+        return statusManager->HasStatus((uint)statusId);
     }
     
-    public static bool RemoveStatus(uint statusId)
+    public static bool RemoveStatus(EStatus statusId)
     {
-        return StatusManager.ExecuteStatusOff(statusId);
+        return StatusManager.ExecuteStatusOff((uint)statusId);
     }
 
     public bool Mount()
index bdb639f450c6b41ec296d3ac9bd8a257887a72d7..bac542419057aadbc3866e93b09b769a44aa51f3 100644 (file)
@@ -174,6 +174,8 @@ public sealed class QuestionablePlugin : IDalamudPlugin
         serviceCollection.AddTaskExecutor<Emote.UseOnObject, Emote.UseOnObjectExecutor>();
         serviceCollection.AddTaskExecutor<Emote.UseOnSelf, Emote.UseOnSelfExecutor>();
         serviceCollection.AddTaskFactoryAndExecutor<Action.UseOnObject, Action.Factory, Action.UseOnObjectExecutor>();
+        serviceCollection.AddTaskExecutor<Action.UseMudraOnObject, Action.UseMudraOnObjectExecutor>();
+        serviceCollection.AddTaskFactoryAndExecutor<StatusOff.Task, StatusOff.Factory, StatusOff.DoStatusOff>();
         serviceCollection.AddTaskFactoryAndExecutor<Interact.Task, Interact.Factory, Interact.DoInteract>();
         serviceCollection.AddTaskFactory<Jump.Factory>();
         serviceCollection.AddTaskExecutor<Jump.SingleJumpTask, Jump.DoSingleJump>();