Add Botanist 1-20 quests
authorLiza Carvelli <liza@carvel.li>
Sat, 28 Jun 2025 13:18:20 +0000 (15:18 +0200)
committerLiza Carvelli <liza@carvel.li>
Sat, 28 Jun 2025 13:18:20 +0000 (15:18 +0200)
16 files changed:
GatheringPaths/2.x - A Realm Reborn/Central Shroud/16_Greentear_BTN.json [new file with mode: 0644]
GatheringPaths/2.x - A Realm Reborn/Central Shroud/19_Bentbranch_BTN.json [new file with mode: 0644]
GatheringPaths/2.x - A Realm Reborn/North Shroud/12_Treespeak_BTN.json [new file with mode: 0644]
GatheringPaths/2.x - A Realm Reborn/North Shroud/13_Treespeak_BTN.json [new file with mode: 0644]
GatheringPaths/2.x - A Realm Reborn/Western La Noscea/35_Skull Valley_BTN.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/208_My First Hatchet.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/3_Way of the Botanist.json
QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/4_Sap for Smiles.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/5_Weapons of a Feather.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/6_Haste Makes Waste.json [new file with mode: 0644]
QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/7_Dressed to Harvest.json [new file with mode: 0644]
Questionable.Model/Questing/EAction.cs
Questionable.Model/Questing/EStatus.cs
Questionable/Controller/Steps/Interactions/Action.cs
Questionable/Controller/Steps/Shared/Gather.cs
Questionable/QuestionablePlugin.cs

diff --git a/GatheringPaths/2.x - A Realm Reborn/Central Shroud/16_Greentear_BTN.json b/GatheringPaths/2.x - A Realm Reborn/Central Shroud/16_Greentear_BTN.json
new file mode 100644 (file)
index 0000000..1f37b70
--- /dev/null
@@ -0,0 +1,168 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
+  "Author": "liza",
+  "Steps": [
+    {
+      "TerritoryId": 148,
+      "InteractionType": "None",
+      "AetheryteShortcut": "Central Shroud - Bentbranch Meadows",
+      "SkipConditions": {
+        "AetheryteShortcutIf": {
+          "InSameTerritory": true
+        }
+      }
+    }
+  ],
+  "Groups": [
+    {
+      "Nodes": [
+        {
+          "DataId": 30028,
+          "Locations": [
+            {
+              "Position": {
+                "X": 225.8048,
+                "Y": -5.26357,
+                "Z": -71.51706
+              },
+              "MinimumAngle": -60,
+              "MaximumAngle": 105
+            },
+            {
+              "Position": {
+                "X": 229.0866,
+                "Y": -7.037199,
+                "Z": -62.40871
+              },
+              "MinimumAngle": 0,
+              "MaximumAngle": 175
+            },
+            {
+              "Position": {
+                "X": 210.4522,
+                "Y": -5.798344,
+                "Z": -69.99769
+              },
+              "MinimumAngle": 180,
+              "MaximumAngle": 360
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30030,
+          "Locations": [
+            {
+              "Position": {
+                "X": 205.3417,
+                "Y": -7.402449,
+                "Z": -46.44062
+              },
+              "MinimumAngle": 70,
+              "MaximumAngle": 320
+            },
+            {
+              "Position": {
+                "X": 204.9178,
+                "Y": -8.416177,
+                "Z": -24.97287
+              },
+              "MinimumAngle": 50,
+              "MaximumAngle": 260
+            },
+            {
+              "Position": {
+                "X": 196.8121,
+                "Y": -7.515049,
+                "Z": -31.74415
+              },
+              "MinimumAngle": 115,
+              "MaximumAngle": 305
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30027,
+          "Locations": [
+            {
+              "Position": {
+                "X": 263.5084,
+                "Y": -7.83625,
+                "Z": -28.76189
+              },
+              "MinimumAngle": 220,
+              "MaximumAngle": 360
+            },
+            {
+              "Position": {
+                "X": 275.0262,
+                "Y": -6.339698,
+                "Z": -42.46669
+              },
+              "MinimumAngle": 30,
+              "MaximumAngle": 150,
+              "MinimumDistance": 1.9,
+              "MaximumDistance": 3
+            },
+            {
+              "Position": {
+                "X": 248.5661,
+                "Y": -8.912354,
+                "Z": -5.168106
+              },
+              "MinimumAngle": 0,
+              "MaximumAngle": 235
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30029,
+          "Locations": [
+            {
+              "Position": {
+                "X": 278.9887,
+                "Y": -6.181031,
+                "Z": -100.3401
+              },
+              "MinimumAngle": 0,
+              "MaximumAngle": 135,
+              "MinimumDistance": 1.8,
+              "MaximumDistance": 3
+            },
+            {
+              "Position": {
+                "X": 281.2963,
+                "Y": -6.572734,
+                "Z": -72.80408
+              },
+              "MinimumAngle": -5,
+              "MaximumAngle": 165
+            },
+            {
+              "Position": {
+                "X": 282.8807,
+                "Y": -5.350755,
+                "Z": -91.96065
+              },
+              "MinimumAngle": -30,
+              "MaximumAngle": 115,
+              "MinimumDistance": 1.8,
+              "MaximumDistance": 3
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/GatheringPaths/2.x - A Realm Reborn/Central Shroud/19_Bentbranch_BTN.json b/GatheringPaths/2.x - A Realm Reborn/Central Shroud/19_Bentbranch_BTN.json
new file mode 100644 (file)
index 0000000..557df70
--- /dev/null
@@ -0,0 +1,156 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
+  "Author": "liza",
+  "Steps": [
+    {
+      "TerritoryId": 148,
+      "InteractionType": "None",
+      "AetheryteShortcut": "Central Shroud - Bentbranch Meadows",
+      "SkipConditions": {
+        "AetheryteShortcutIf": {
+          "InSameTerritory": true
+        }
+      }
+    }
+  ],
+  "Groups": [
+    {
+      "Nodes": [
+        {
+          "DataId": 30034,
+          "Locations": [
+            {
+              "Position": {
+                "X": -105.3941,
+                "Y": 2.85339,
+                "Z": -121.8738
+              },
+              "MinimumAngle": -20,
+              "MaximumAngle": 165
+            },
+            {
+              "Position": {
+                "X": -97.9409,
+                "Y": 3.064394,
+                "Z": -126.5676
+              },
+              "MinimumAngle": 115,
+              "MaximumAngle": 340
+            },
+            {
+              "Position": {
+                "X": -125.5794,
+                "Y": 5.63143,
+                "Z": -133.3981
+              }
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30035,
+          "Locations": [
+            {
+              "Position": {
+                "X": -154.1009,
+                "Y": 4.5624,
+                "Z": -131.7312
+              },
+              "MinimumAngle": -270,
+              "MaximumAngle": 40
+            },
+            {
+              "Position": {
+                "X": -128.832,
+                "Y": 9.71995,
+                "Z": -145.739
+              }
+            },
+            {
+              "Position": {
+                "X": -117.9702,
+                "Y": 9.59642,
+                "Z": -173.7937
+              },
+              "MinimumAngle": -155,
+              "MaximumAngle": 155
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30036,
+          "Locations": [
+            {
+              "Position": {
+                "X": -182.3201,
+                "Y": 3.129771,
+                "Z": -91.56992
+              },
+              "MinimumAngle": -190,
+              "MaximumAngle": 65
+            },
+            {
+              "Position": {
+                "X": -177.8435,
+                "Y": 2.23569,
+                "Z": -67.93159
+              },
+              "MinimumAngle": -160,
+              "MaximumAngle": 30
+            },
+            {
+              "Position": {
+                "X": -163.9663,
+                "Y": 1.91069,
+                "Z": -52.19678
+              },
+              "MinimumAngle": 135,
+              "MaximumAngle": 300
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30320,
+          "Locations": [
+            {
+              "Position": {
+                "X": -131.0494,
+                "Y": 0.2034574,
+                "Z": -82.93172
+              },
+              "MinimumAngle": -155,
+              "MaximumAngle": 45
+            },
+            {
+              "Position": {
+                "X": -121.5437,
+                "Y": -1.821766,
+                "Z": -74.98891
+              }
+            },
+            {
+              "Position": {
+                "X": -114.8504,
+                "Y": -1.186134,
+                "Z": -88.04849
+              },
+              "MinimumAngle": -210,
+              "MaximumAngle": 90
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/GatheringPaths/2.x - A Realm Reborn/North Shroud/12_Treespeak_BTN.json b/GatheringPaths/2.x - A Realm Reborn/North Shroud/12_Treespeak_BTN.json
new file mode 100644 (file)
index 0000000..e860a52
--- /dev/null
@@ -0,0 +1,162 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
+  "Author": "liza",
+  "Steps": [
+    {
+      "TerritoryId": 154,
+      "InteractionType": "None",
+      "AetheryteShortcut": "North Shroud - Fallgourd Float",
+      "SkipConditions": {
+        "AetheryteShortcutIf": {
+          "InSameTerritory": true
+        }
+      }
+    }
+  ],
+  "Groups": [
+    {
+      "Nodes": [
+        {
+          "DataId": 30016,
+          "Locations": [
+            {
+              "Position": {
+                "X": 395.0683,
+                "Y": -4.213107,
+                "Z": 235.0844
+              },
+              "MinimumAngle": -200,
+              "MaximumAngle": 15
+            },
+            {
+              "Position": {
+                "X": 404.3488,
+                "Y": -2.116929,
+                "Z": 216.968
+              },
+              "MinimumAngle": -125,
+              "MaximumAngle": 10
+            },
+            {
+              "Position": {
+                "X": 388.5088,
+                "Y": -1.260179,
+                "Z": 222.3745
+              },
+              "MinimumAngle": -145,
+              "MaximumAngle": 0
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30018,
+          "Locations": [
+            {
+              "Position": {
+                "X": 361.0402,
+                "Y": -6.135924,
+                "Z": 266.7503
+              },
+              "MinimumAngle": -155,
+              "MaximumAngle": 10
+            },
+            {
+              "Position": {
+                "X": 368.0511,
+                "Y": -6.085522,
+                "Z": 262.3561
+              },
+              "MinimumAngle": -135,
+              "MaximumAngle": 10
+            },
+            {
+              "Position": {
+                "X": 352.1197,
+                "Y": -2.546567,
+                "Z": 262.7847
+              },
+              "MinimumAngle": 250,
+              "MaximumAngle": 355
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30081,
+          "Locations": [
+            {
+              "Position": {
+                "X": 404.6927,
+                "Y": -3.737513,
+                "Z": 283.6237
+              },
+              "MinimumAngle": 55,
+              "MaximumAngle": 255
+            },
+            {
+              "Position": {
+                "X": 406.1155,
+                "Y": -4.338434,
+                "Z": 271.2292
+              },
+              "MinimumAngle": 0,
+              "MaximumAngle": 190
+            },
+            {
+              "Position": {
+                "X": 394.464,
+                "Y": -3.775356,
+                "Z": 286.3456
+              },
+              "MinimumAngle": 105,
+              "MaximumAngle": 290
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30017,
+          "Locations": [
+            {
+              "Position": {
+                "X": 443.0036,
+                "Y": -1.818904,
+                "Z": 251.6805
+              },
+              "MinimumAngle": 0,
+              "MaximumAngle": 145
+            },
+            {
+              "Position": {
+                "X": 459.7153,
+                "Y": -1.026285,
+                "Z": 263.6502
+              },
+              "MinimumAngle": 50,
+              "MaximumAngle": 235
+            },
+            {
+              "Position": {
+                "X": 468.4217,
+                "Y": -1.290563,
+                "Z": 262.4874
+              },
+              "MinimumAngle": 15,
+              "MaximumAngle": 220
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/GatheringPaths/2.x - A Realm Reborn/North Shroud/13_Treespeak_BTN.json b/GatheringPaths/2.x - A Realm Reborn/North Shroud/13_Treespeak_BTN.json
new file mode 100644 (file)
index 0000000..b2db712
--- /dev/null
@@ -0,0 +1,164 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
+  "Author": "liza",
+  "Steps": [
+    {
+      "TerritoryId": 154,
+      "InteractionType": "None",
+      "AetheryteShortcut": "North Shroud - Fallgourd Float",
+      "SkipConditions": {
+        "AetheryteShortcutIf": {
+          "InSameTerritory": true
+        }
+      }
+    }
+  ],
+  "Groups": [
+    {
+      "Nodes": [
+        {
+          "DataId": 30020,
+          "Locations": [
+            {
+              "Position": {
+                "X": 279.9662,
+                "Y": -9.225774,
+                "Z": 318.6275
+              },
+              "MinimumAngle": 50,
+              "MaximumAngle": 240
+            },
+            {
+              "Position": {
+                "X": 295.7656,
+                "Y": -8.987611,
+                "Z": 311.5129
+              },
+              "MinimumAngle": 0,
+              "MaximumAngle": 190
+            },
+            {
+              "Position": {
+                "X": 283.9807,
+                "Y": -11.68445,
+                "Z": 310.4038
+              },
+              "MinimumAngle": 0,
+              "MaximumAngle": 250
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30019,
+          "Locations": [
+            {
+              "Position": {
+                "X": 238.5998,
+                "Y": -22.81126,
+                "Z": 254.0548
+              },
+              "MinimumAngle": -85,
+              "MaximumAngle": 55
+            },
+            {
+              "Position": {
+                "X": 234.2172,
+                "Y": -22.83841,
+                "Z": 265.2955
+              },
+              "MinimumAngle": -160,
+              "MaximumAngle": 0
+            },
+            {
+              "Position": {
+                "X": 257.4443,
+                "Y": -20.59358,
+                "Z": 246.4006
+              },
+              "MinimumAngle": -115,
+              "MaximumAngle": 70
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30082,
+          "Locations": [
+            {
+              "Position": {
+                "X": 221.3946,
+                "Y": -27.69197,
+                "Z": 317.5874
+              },
+              "MinimumAngle": 0,
+              "MaximumAngle": 125
+            },
+            {
+              "Position": {
+                "X": 209.7868,
+                "Y": -29.03308,
+                "Z": 317.4061
+              },
+              "MinimumAngle": 130,
+              "MaximumAngle": 295
+            },
+            {
+              "Position": {
+                "X": 216.8077,
+                "Y": -28.68546,
+                "Z": 320.5408
+              },
+              "MinimumAngle": 45,
+              "MaximumAngle": 230
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30021,
+          "Locations": [
+            {
+              "Position": {
+                "X": 250.3709,
+                "Y": -20.9966,
+                "Z": 296.2364
+              },
+              "MinimumAngle": 105,
+              "MaximumAngle": 265
+            },
+            {
+              "Position": {
+                "X": 247.4017,
+                "Y": -21.53168,
+                "Z": 284.9166
+              },
+              "MinimumAngle": -40,
+              "MaximumAngle": 100,
+              "MinimumDistance": 1.3,
+              "MaximumDistance": 3
+            },
+            {
+              "Position": {
+                "X": 255.3057,
+                "Y": -17.90455,
+                "Z": 302.6251
+              },
+              "MinimumAngle": 145,
+              "MaximumAngle": 305
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/GatheringPaths/2.x - A Realm Reborn/Western La Noscea/35_Skull Valley_BTN.json b/GatheringPaths/2.x - A Realm Reborn/Western La Noscea/35_Skull Valley_BTN.json
new file mode 100644 (file)
index 0000000..71fa86e
--- /dev/null
@@ -0,0 +1,162 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json",
+  "Author": "liza",
+  "Steps": [
+    {
+      "TerritoryId": 138,
+      "InteractionType": "None",
+      "AetheryteShortcut": "Western La Noscea - Aleport",
+      "SkipConditions": {
+        "AetheryteShortcutIf": {
+          "InSameTerritory": true
+        }
+      }
+    }
+  ],
+  "Groups": [
+    {
+      "Nodes": [
+        {
+          "DataId": 30098,
+          "Locations": [
+            {
+              "Position": {
+                "X": 300.7484,
+                "Y": -15.4861,
+                "Z": 153.9048
+              },
+              "MinimumAngle": 175,
+              "MaximumAngle": 360
+            },
+            {
+              "Position": {
+                "X": 297.8418,
+                "Y": -20.09089,
+                "Z": 166.8599
+              },
+              "MinimumAngle": 95,
+              "MaximumAngle": 265
+            },
+            {
+              "Position": {
+                "X": 312.9494,
+                "Y": -14.81517,
+                "Z": 145.3793
+              },
+              "MinimumAngle": 110,
+              "MaximumAngle": 270
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30099,
+          "Locations": [
+            {
+              "Position": {
+                "X": 317.6309,
+                "Y": 0.3300658,
+                "Z": 98.40825
+              },
+              "MinimumAngle": 15,
+              "MaximumAngle": 190
+            },
+            {
+              "Position": {
+                "X": 300.7116,
+                "Y": -9.200176,
+                "Z": 128.1148
+              },
+              "MinimumAngle": 20,
+              "MaximumAngle": 205
+            },
+            {
+              "Position": {
+                "X": 313.6669,
+                "Y": -5.031699,
+                "Z": 119.2471
+              },
+              "MinimumAngle": 0,
+              "MaximumAngle": 185
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30100,
+          "Locations": [
+            {
+              "Position": {
+                "X": 222.8638,
+                "Y": -1.971927,
+                "Z": 82.03091
+              },
+              "MinimumAngle": -115,
+              "MaximumAngle": 25
+            },
+            {
+              "Position": {
+                "X": 274.0746,
+                "Y": 6.008316,
+                "Z": 65.73824
+              },
+              "MinimumAngle": -115,
+              "MaximumAngle": 75
+            },
+            {
+              "Position": {
+                "X": 252.9545,
+                "Y": 5.45654,
+                "Z": 50.69089
+              },
+              "MinimumAngle": 225,
+              "MaximumAngle": 360
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "Nodes": [
+        {
+          "DataId": 30101,
+          "Locations": [
+            {
+              "Position": {
+                "X": 254.374,
+                "Y": -17.77545,
+                "Z": 174.2901
+              },
+              "MinimumAngle": 115,
+              "MaximumAngle": 265
+            },
+            {
+              "Position": {
+                "X": 240.5732,
+                "Y": -17.28173,
+                "Z": 176.6604
+              },
+              "MinimumAngle": 80,
+              "MaximumAngle": 255
+            },
+            {
+              "Position": {
+                "X": 256.3937,
+                "Y": -16.40165,
+                "Z": 164.8165
+              },
+              "MinimumAngle": 90,
+              "MaximumAngle": 295
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/208_My First Hatchet.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/208_My First Hatchet.json
new file mode 100644 (file)
index 0000000..a7e5c74
--- /dev/null
@@ -0,0 +1,79 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "TerritoryId": 133,
+          "InteractionType": "EquipItem",
+          "ItemId": 2545,
+          "AetheryteShortcut": "Gridania",
+          "AethernetShortcut": [
+            "[Gridania] Aetheryte Plaza",
+            "[Gridania] Botanists' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true,
+              "InTerritory": [
+                133
+              ]
+            },
+            "StepIf": {
+              "Item": {
+                "NotInInventory": true
+              }
+            }
+          }
+        },
+        {
+          "TerritoryId": 133,
+          "InteractionType": "EquipRecommended"
+        },
+        {
+          "DataId": 1000815,
+          "Position": {
+            "X": -233.9361,
+            "Y": 6.668152,
+            "Z": -171.03839
+          },
+          "TerritoryId": 133,
+          "InteractionType": "AcceptQuest"
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "TerritoryId": 154,
+          "InteractionType": "Gather",
+          "ItemsToGather": [
+            {
+              "ItemId": 5509,
+              "ItemCount": 10
+            }
+          ]
+        },
+        {
+          "DataId": 1000815,
+          "Position": {
+            "X": -233.9361,
+            "Y": 6.668152,
+            "Z": -171.03839
+          },
+          "TerritoryId": 133,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Gridania",
+          "AethernetShortcut": [
+            "[Gridania] Aetheryte Plaza",
+            "[Gridania] Botanists' Guild"
+          ],
+          "NextQuestId": 4
+        }
+      ]
+    }
+  ]
+}
index 1a5f96d..2f6fc39 100644 (file)
@@ -48,7 +48,8 @@
               "Prompt": "TEXT_CLSHRV001_00003_Q1_000_1",\r
               "Yes": true\r
             }\r
-          ]\r
+          ],\r
+          "NextQuestId": 208\r
         }\r
       ]\r
     }\r
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/4_Sap for Smiles.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/4_Sap for Smiles.json
new file mode 100644 (file)
index 0000000..f1286d0
--- /dev/null
@@ -0,0 +1,69 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1000815,
+          "Position": {
+            "X": -233.9361,
+            "Y": 6.668152,
+            "Z": -171.03839
+          },
+          "TerritoryId": 133,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Gridania",
+          "AethernetShortcut": [
+            "[Gridania] Aetheryte Plaza",
+            "[Gridania] Botanists' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true,
+              "InTerritory": [
+                133
+              ]
+            }
+          }
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "TerritoryId": 154,
+          "InteractionType": "EquipRecommended"
+        },
+        {
+          "TerritoryId": 154,
+          "InteractionType": "Gather",
+          "ItemsToGather": [
+            {
+              "ItemId": 5498,
+              "ItemCount": 10
+            }
+          ]
+        },
+        {
+          "DataId": 1000295,
+          "Position": {
+            "X": -234.24127,
+            "Y": 8.000092,
+            "Z": -155.169
+          },
+          "TerritoryId": 133,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Gridania",
+          "AethernetShortcut": [
+            "[Gridania] Aetheryte Plaza",
+            "[Gridania] Botanists' Guild"
+          ],
+          "NextQuestId": 6
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/5_Weapons of a Feather.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/5_Weapons of a Feather.json
new file mode 100644 (file)
index 0000000..280d34a
--- /dev/null
@@ -0,0 +1,69 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+          "DataId": 1000815,
+          "Position": {
+            "X": -233.9361,
+            "Y": 6.668152,
+            "Z": -171.03839
+          },
+          "TerritoryId": 133,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Gridania",
+          "AethernetShortcut": [
+            "[Gridania] Aetheryte Plaza",
+            "[Gridania] Botanists' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true,
+              "InTerritory": [
+                133
+              ]
+            }
+          }
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "TerritoryId": 148,
+          "InteractionType": "EquipRecommended"
+        },
+        {
+          "TerritoryId": 148,
+          "InteractionType": "Gather",
+          "ItemsToGather": [
+            {
+              "ItemId": 5352,
+              "ItemCount": 10
+            }
+          ]
+        },
+        {
+          "DataId": 1000295,
+          "Position": {
+            "X": -234.24127,
+            "Y": 8.000092,
+            "Z": -155.169
+          },
+          "TerritoryId": 133,
+          "InteractionType": "CompleteQuest",
+          "AetheryteShortcut": "Gridania",
+          "AethernetShortcut": [
+            "[Gridania] Aetheryte Plaza",
+            "[Gridania] Botanists' Guild"
+          ],
+          "NextQuestId": 6
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/6_Haste Makes Waste.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/6_Haste Makes Waste.json
new file mode 100644 (file)
index 0000000..7253d68
--- /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": 1000815,
+          "Position": {
+            "X": -233.9361,
+            "Y": 6.668152,
+            "Z": -171.03839
+          },
+          "TerritoryId": 133,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Gridania",
+          "AethernetShortcut": [
+            "[Gridania] Aetheryte Plaza",
+            "[Gridania] Botanists' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true,
+              "InTerritory": [
+                133
+              ]
+            }
+          }
+        }
+      ]
+    },
+    {
+      "Sequence": 1,
+      "Steps": [
+        {
+          "DataId": 1000239,
+          "Position": {
+            "X": 170.30591,
+            "Y": 15.699951,
+            "Z": -118.638916
+          },
+          "TerritoryId": 133,
+          "InteractionType": "Interact",
+          "AethernetShortcut": [
+            "[Gridania] Botanists' Guild",
+            "[Gridania] Leatherworkers' Guild & Shaded Bower"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 2,
+      "Steps": [
+        {
+          "TerritoryId": 148,
+          "InteractionType": "EquipRecommended"
+        },
+        {
+          "TerritoryId": 148,
+          "InteractionType": "Gather",
+          "ItemsToGather": [
+            {
+              "ItemId": 4832,
+              "ItemCount": 10
+            }
+          ]
+        },
+        {
+          "DataId": 1000239,
+          "Position": {
+            "X": 170.30591,
+            "Y": 15.699951,
+            "Z": -118.638916
+          },
+          "TerritoryId": 133,
+          "InteractionType": "Interact",
+          "AetheryteShortcut": "Gridania",
+          "AethernetShortcut": [
+            "[Gridania] Aetheryte Plaza",
+            "[Gridania] Leatherworkers' Guild & Shaded Bower"
+          ]
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "DataId": 1000815,
+          "Position": {
+            "X": -233.9361,
+            "Y": 6.668152,
+            "Z": -171.03839
+          },
+          "TerritoryId": 133,
+          "InteractionType": "CompleteQuest",
+          "AethernetShortcut": [
+            "[Gridania] Leatherworkers' Guild & Shaded Bower",
+            "[Gridania] Botanists' Guild"
+          ],
+          "NextQuestId": 7
+        }
+      ]
+    }
+  ]
+}
diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/7_Dressed to Harvest.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/7_Dressed to Harvest.json
new file mode 100644 (file)
index 0000000..96736bd
--- /dev/null
@@ -0,0 +1,69 @@
+{
+  "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json",
+  "Author": "liza",
+  "QuestSequence": [
+    {
+      "Sequence": 0,
+      "Steps": [
+        {
+
+          "DataId": 1000815,
+          "Position": {
+            "X": -233.9361,
+            "Y": 6.668152,
+            "Z": -171.03839
+          },
+          "TerritoryId": 133,
+          "InteractionType": "AcceptQuest",
+          "AetheryteShortcut": "Gridania",
+          "AethernetShortcut": [
+            "[Gridania] Aetheryte Plaza",
+            "[Gridania] Botanists' Guild"
+          ],
+          "SkipConditions": {
+            "AetheryteShortcutIf": {
+              "InSameTerritory": true,
+              "InTerritory": [
+                133
+              ]
+            }
+          }
+        }
+      ]
+    },
+    {
+      "Sequence": 255,
+      "Steps": [
+        {
+          "TerritoryId": 138,
+          "InteractionType": "EquipRecommended"
+        },
+        {
+          "TerritoryId": 138,
+          "InteractionType": "Gather",
+          "ItemsToGather": [
+            {
+              "ItemId": 5599,
+              "ItemCount": 15
+            }
+          ]
+        },
+        {
+          "DataId": 1000292,
+          "Position": {
+            "X": -233.99713,
+            "Y": 8,
+            "Z": -146.86816
+          },
+          "TerritoryId": 133,
+          "AetheryteShortcut": "Gridania",
+          "AethernetShortcut": [
+            "[Gridania] Aetheryte Plaza",
+            "[Gridania] Botanists' Guild"
+          ],
+          "InteractionType": "CompleteQuest"
+        }
+      ]
+    }
+  ]
+}
index bc606f0..06c5e31 100644 (file)
@@ -58,12 +58,14 @@ public enum EAction
     ShroudedLuminescence = 39505,
     BigSneeze = 1765,
 
+    Prospect = 227,
     CollectMiner = 240,
     LuckOfTheMountaineer = 4081,
     ScourMiner = 22182,
     MeticulousMiner = 22184,
     ScrutinyMiner = 22185,
 
+    Triangulate = 210,
     CollectBotanist = 815,
     LuckOfThePioneer = 4095,
     ScourBotanist = 22186,
index 00919e1..92f40ff 100644 (file)
@@ -6,7 +6,9 @@ namespace Questionable.Model.Questing;
 [JsonConverter(typeof(StatusConverter))]
 public enum EStatus : uint
 {
+    Triangulate = 217,
     GatheringRateUp = 218,
+    Prospect = 225,
     Hidden = 614,
     Eukrasia = 2606,
     Jog = 4209,
index f7f9750..6211b67 100644 (file)
@@ -192,4 +192,29 @@ internal static class Action
 
         public override bool ShouldInterruptOnDamage() => false;
     }
+
+    internal sealed record TriggerStatusIfMissing(EStatus Status, EAction Action) : ITask
+    {
+        public override string ToString() => $"TriggerStatus({Status})";
+    }
+
+    internal sealed class TriggerStatusIfMissingExecutor(GameFunctions gameFunctions)
+        : TaskExecutor<TriggerStatusIfMissing>
+    {
+        protected override bool Start()
+        {
+            if (gameFunctions.HasStatus(Task.Status))
+                return false;
+
+            gameFunctions.UseAction(Task.Action);
+            return true;
+        }
+
+        public override ETaskResult Update()
+        {
+            return gameFunctions.HasStatus(Task.Status) ? ETaskResult.TaskComplete : ETaskResult.StillRunning;
+        }
+
+        public override bool ShouldInterruptOnDamage() => false;
+    }
 }
index bc54655..0874c71 100644 (file)
@@ -13,6 +13,7 @@ using Questionable.Data;
 using Questionable.Model;
 using Questionable.Model.Gathering;
 using Questionable.Model.Questing;
+using Action = Questionable.Controller.Steps.Interactions.Action;
 
 namespace Questionable.Controller.Steps.Shared;
 
@@ -61,6 +62,11 @@ internal static class Gather
             if (HasRequiredItems(Task.GatheredItem))
                 yield break;
 
+            if (currentClassJob == EClassJob.Miner)
+                yield return new Action.TriggerStatusIfMissing(EStatus.Triangulate, EAction.Prospect);
+            else if (currentClassJob == EClassJob.Botanist)
+                yield return new Action.TriggerStatusIfMissing(EStatus.Triangulate, EAction.Triangulate);
+
             using (var _ = logger.BeginScope("Gathering(inner)"))
             {
                 QuestSequence gatheringSequence = new QuestSequence
index e54a500..24294cd 100644 (file)
@@ -198,6 +198,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin
         serviceCollection.AddTaskExecutor<Emote.UseOnSelf, Emote.UseOnSelfExecutor>();
         serviceCollection.AddTaskFactoryAndExecutor<Action.UseOnObject, Action.Factory, Action.UseOnObjectExecutor>();
         serviceCollection.AddTaskExecutor<Action.UseMudraOnObject, Action.UseMudraOnObjectExecutor>();
+        serviceCollection.AddTaskExecutor<Action.TriggerStatusIfMissing, Action.TriggerStatusIfMissingExecutor>();
         serviceCollection.AddTaskFactoryAndExecutor<StatusOff.Task, StatusOff.Factory, StatusOff.DoStatusOff>();
         serviceCollection.AddTaskFactoryAndExecutor<Interact.Task, Interact.Factory, Interact.DoInteract>();
         serviceCollection.AddTaskFactory<Jump.Factory>();