From f1165a393746906dd9ee08110cd95954db922e87 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 16 Aug 2024 01:21:15 +0200 Subject: [PATCH] Allow for more complex gathering (preparation) steps; add firmament aetheryte --- GatheringPathRenderer/EditorCommands.cs | 10 +- GatheringPathRenderer/RendererPlugin.cs | 2 +- .../157_Spineless Basin_MIN.json | 9 +- .../Western Thanalan/154_Hammerlea_MIN.json | 9 +- .../300_Twinpools_BTN.json | 9 +- .../351_Red Rim_MIN.json | 11 +- .../551_The Bed of Bones_MIN.json | 9 +- .../552_Gorgagne Holding_BTN.json | 9 +- .../355_Landlord Colony_MIN.json | 9 +- .../The Churning Mists/359_Four Arms_BTN.json | 9 +- .../553_Landlord Colony_MIN.json | 9 +- .../The Churning Mists/554_Ohl Tahn_BTN.json | 9 +- .../352_Avalonia Fallen_MIN.json | 9 +- .../358_Avalonia Fallen_BTN.json | 9 +- .../353_The Makers' Quarter_MIN.json | 15 +- .../361_The Answering Quarter_BTN.json | 15 +- .../354_Voor Sian Siran_MIN.json | 9 +- .../360_The Blue Window_BTN.json | 9 +- .../The Azim Steppe/495_Onsal Hakair_MIN.json | 9 +- .../519_Nhaama's Retreat_BTN.json | 9 +- .../The Azim Steppe/813_Onsal Hakair_BTN.json | 9 +- .../The Fringes/485_East End_MIN.json | 9 +- .../486_The Striped Hills_MIN.json | 9 +- .../The Fringes/505_East End_BTN.json | 9 +- .../The Fringes/509_Dimwold_BTN.json | 9 +- .../The Fringes/513_Dimwold_BTN.json | 9 +- .../The Lochs/493_The High Bank_MIN.json | 9 +- .../The Lochs/514_Abalathia's Skull_BTN.json | 9 +- .../The Lochs/526_Abalathia's Skull_BTN.json | 9 +- .../The Peaks/489_Rustrock_MIN.json | 9 +- .../The Peaks/512_The Last Forest_BTN.json | 9 +- .../The Peaks/531_Sleeping Stones_MIN.json | 11 +- .../The Peaks/532_The Last Forest_BTN.json | 9 +- .../The Ruby Sea/487_Hells' Lid_MIN.json | 15 +- .../The Ruby Sea/507_Onokoro_BTN.json | 9 +- .../510_East Othard Coastline_BTN.json | 9 +- .../The Ruby Sea/511_Rasen Kaikyo_BTN.json | 9 +- .../The Ruby Sea/529_Rasen Kaikyo_BTN.json | 9 +- .../533_The Turquoise Trench_MIN.json | 17 +- .../534_The Isle of Bekko_BTN.json | 9 +- .../Yanxia/488_The Gensui Chain_MIN.json | 9 +- .../491_Unseen Spirits Laughing_MIN.json | 9 +- .../Yanxia/508_The Heron's Flight_BTN.json | 9 +- .../Yanxia/731_Yuzuka Manor_BTN.json | 9 +- .../Kholusia/649_Stonegazer_BTN.json | 9 +- .../Kholusia/650_Shadow Fault_MIN.json | 9 +- .../The Rak'tika Greatwood/688__MIN.json | 9 +- .../The Rak'tika Greatwood/689__MIN.json | 9 +- .../Elpis/823_The Hungering Gardens_MIN.json | 9 +- .../Elpis/846_Anagnorisis_BTN.json | 9 +- .../6.x - Endwalker/Elysion/316__MIN.json | 9 +- .../6.x - Endwalker/Elysion/317__MIN.json | 9 +- .../6.x - Endwalker/Elysion/322__MIN.json | 9 +- .../6.x - Endwalker/Elysion/336__MIN.json | 9 +- .../6.x - Endwalker/Elysion/393__BTN.json | 9 +- .../6.x - Endwalker/Elysion/394__BTN.json | 9 +- .../6.x - Endwalker/Elysion/398__BTN.json | 9 +- .../6.x - Endwalker/Elysion/399__BTN.json | 9 +- .../822_Monitoring Station G_MIN.json | 9 +- .../Garlemald/842_Camp Broken Glass_BTN.json | 9 +- .../Labyrinthos/816_Lower Acrinthos_MIN.json | 11 +- .../838_Meryall Agronomics_BTN.json | 9 +- .../821_The Crushing Brand_MIN.json | 9 +- .../902_Heimdall's Last Sight_BTN.json | 9 +- .../Thavnair/820_The Hamsa Hatchery_MIN.json | 9 +- .../Thavnair/840_Giantsgall Grounds_BTN.json | 9 +- .../7.x - Dawntrail/Kozama'uka/946__BTN.json | 9 +- .../Kozama'uka/976_Uyuyub'_MIN.json | 9 +- .../Kozama'uka/986_Uyuyub'_BTN.json | 9 +- .../Shaaloani/978_Pyariyoanaan Plain_MIN.json | 9 +- .../999_Yawtanane Grasslands_BTN.json | 9 +- .../7.x - Dawntrail/Urqopacha/961__MIN.json | 9 +- .../Urqopacha/974_Chabameki_MIN.json | 9 +- .../Urqopacha/975_Sorrow_MIN.json | 9 +- .../Urqopacha/992_Chabameki_BTN.json | 9 +- .../Urqopacha/993_Chabayuqeq_MIN.json | 9 +- .../Urqopacha/994_Larh Tortoh_BTN.json | 9 +- .../1000_The Xobr'it Cinderfield_BTN.json | 9 +- .../7.x - Dawntrail/Yak T'el/955__BTN.json | 9 +- .../7.x - Dawntrail/Yak T'el/970__MIN.json | 9 +- .../Yak T'el/979_The Ut'ohmu Horizon_MIN.json | 9 +- GatheringPaths/gatheringlocation-v1.json | 44 +- .../GatheringSourceGenerator.cs | 8 +- .../Charlemend/S7_Charlemend.json | 24 +- .../Ehll Tou/S6_Ehll Tou.json | 24 +- QuestPaths/quest-v1.json | 2075 +++++++++-------- .../Common/EAetheryteLocation.cs | 23 + Questionable.Model/Gathering/GatheringRoot.cs | 7 +- .../Converter/AethernetShardConverter.cs | 9 + Questionable.Model/common-schema.json | 8 + Questionable/Controller/GameUiController.cs | 44 + .../Controller/GatheringController.cs | 9 +- Questionable/Controller/QuestController.cs | 35 +- .../Steps/Shared/AethernetShortcut.cs | 40 +- .../Steps/Shared/GatheringRequiredItems.cs | 36 +- Questionable/Controller/Steps/TaskCreator.cs | 52 + Questionable/Data/AetheryteData.cs | 45 +- Questionable/Functions/AetheryteFunctions.cs | 2 +- Questionable/QuestionablePlugin.cs | 2 + .../Validators/AethernetShortcutValidator.cs | 4 +- 100 files changed, 1907 insertions(+), 1339 deletions(-) create mode 100644 Questionable/Controller/Steps/TaskCreator.cs diff --git a/GatheringPathRenderer/EditorCommands.cs b/GatheringPathRenderer/EditorCommands.cs index 75c50db60..2e9edad5d 100644 --- a/GatheringPathRenderer/EditorCommands.cs +++ b/GatheringPathRenderer/EditorCommands.cs @@ -15,6 +15,7 @@ using Dalamud.Plugin.Services; using Lumina.Excel.GeneratedSheets; using Questionable.Model; using Questionable.Model.Gathering; +using Questionable.Model.Questing; namespace GatheringPathRenderer; @@ -186,7 +187,14 @@ internal sealed class EditorCommands : IDisposable var root = new GatheringRoot { Author = [_configuration.AuthorName], - TerritoryId = _clientState.TerritoryType, + Steps = + [ + new QuestStep + { + TerritoryId = _clientState.TerritoryType, + InteractionType = EInteractionType.None, + } + ], Groups = [ new GatheringNodeGroup diff --git a/GatheringPathRenderer/RendererPlugin.cs b/GatheringPathRenderer/RendererPlugin.cs index 50f9e4a74..95edf94c5 100644 --- a/GatheringPathRenderer/RendererPlugin.cs +++ b/GatheringPathRenderer/RendererPlugin.cs @@ -146,7 +146,7 @@ public sealed class RendererPlugin : IDalamudPlugin } internal IEnumerable GetLocationsInTerritory(ushort territoryId) - => _gatheringLocations.Where(x => x.Root.TerritoryId == territoryId); + => _gatheringLocations.Where(x => x.Root.Steps.LastOrDefault()?.TerritoryId == territoryId); internal void Save(FileInfo targetFile, GatheringRoot root) { diff --git a/GatheringPaths/2.x - A Realm Reborn/Central Thanalan/157_Spineless Basin_MIN.json b/GatheringPaths/2.x - A Realm Reborn/Central Thanalan/157_Spineless Basin_MIN.json index 66426fb79..1967ad969 100644 --- a/GatheringPaths/2.x - A Realm Reborn/Central Thanalan/157_Spineless Basin_MIN.json +++ b/GatheringPaths/2.x - A Realm Reborn/Central Thanalan/157_Spineless Basin_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 141, - "AetheryteShortcut": "Central Thanalan - Black Brush Station", + "Steps": [ + { + "TerritoryId": 141, + "InteractionType": "None", + "AetheryteShortcut": "Central Thanalan - Black Brush Station" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/2.x - A Realm Reborn/Western Thanalan/154_Hammerlea_MIN.json b/GatheringPaths/2.x - A Realm Reborn/Western Thanalan/154_Hammerlea_MIN.json index 4a13bd8e1..8c7bb8d73 100644 --- a/GatheringPaths/2.x - A Realm Reborn/Western Thanalan/154_Hammerlea_MIN.json +++ b/GatheringPaths/2.x - A Realm Reborn/Western Thanalan/154_Hammerlea_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 140, - "AetheryteShortcut": "Western Thanalan - Horizon", + "Steps": [ + { + "TerritoryId": 140, + "InteractionType": "None", + "AetheryteShortcut": "Western Thanalan - Horizon" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/300_Twinpools_BTN.json b/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/300_Twinpools_BTN.json index 2e4c56c7a..77edce820 100644 --- a/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/300_Twinpools_BTN.json +++ b/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/300_Twinpools_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 397, - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Steps": [ + { + "TerritoryId": 397, + "InteractionType": "None", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/351_Red Rim_MIN.json b/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/351_Red Rim_MIN.json index e61ee3745..0b88a0203 100644 --- a/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/351_Red Rim_MIN.json +++ b/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/351_Red Rim_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 397, - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Steps": [ + { + "TerritoryId": 397, + "InteractionType": "None", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" + } + ], "Groups": [ { "Nodes": [ @@ -164,4 +169,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/551_The Bed of Bones_MIN.json b/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/551_The Bed of Bones_MIN.json index 2b7fbfb32..1af05fc6b 100644 --- a/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/551_The Bed of Bones_MIN.json +++ b/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/551_The Bed of Bones_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 397, - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Steps": [ + { + "TerritoryId": 397, + "InteractionType": "None", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/552_Gorgagne Holding_BTN.json b/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/552_Gorgagne Holding_BTN.json index ed1967bea..ba3986320 100644 --- a/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/552_Gorgagne Holding_BTN.json +++ b/GatheringPaths/3.x - Heavensward/Coerthas Western Highlands/552_Gorgagne Holding_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 397, - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Steps": [ + { + "TerritoryId": 397, + "InteractionType": "None", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/3.x - Heavensward/The Churning Mists/355_Landlord Colony_MIN.json b/GatheringPaths/3.x - Heavensward/The Churning Mists/355_Landlord Colony_MIN.json index 56f820ad4..f1e8dba9b 100644 --- a/GatheringPaths/3.x - Heavensward/The Churning Mists/355_Landlord Colony_MIN.json +++ b/GatheringPaths/3.x - Heavensward/The Churning Mists/355_Landlord Colony_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 400, - "AetheryteShortcut": "The Churning Mists - Moghome", + "Steps": [ + { + "TerritoryId": 400, + "InteractionType": "None", + "AetheryteShortcut": "The Churning Mists - Moghome" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/3.x - Heavensward/The Churning Mists/359_Four Arms_BTN.json b/GatheringPaths/3.x - Heavensward/The Churning Mists/359_Four Arms_BTN.json index c4a5d4be4..56368de85 100644 --- a/GatheringPaths/3.x - Heavensward/The Churning Mists/359_Four Arms_BTN.json +++ b/GatheringPaths/3.x - Heavensward/The Churning Mists/359_Four Arms_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 400, - "AetheryteShortcut": "The Churning Mists - Zenith", + "Steps": [ + { + "TerritoryId": 400, + "InteractionType": "None", + "AetheryteShortcut": "The Churning Mists - Zenith" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/3.x - Heavensward/The Churning Mists/553_Landlord Colony_MIN.json b/GatheringPaths/3.x - Heavensward/The Churning Mists/553_Landlord Colony_MIN.json index e6743d620..9b9796721 100644 --- a/GatheringPaths/3.x - Heavensward/The Churning Mists/553_Landlord Colony_MIN.json +++ b/GatheringPaths/3.x - Heavensward/The Churning Mists/553_Landlord Colony_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 400, - "AetheryteShortcut": "The Churning Mists - Moghome", + "Steps": [ + { + "TerritoryId": 400, + "InteractionType": "None", + "AetheryteShortcut": "The Churning Mists - Moghome" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/3.x - Heavensward/The Churning Mists/554_Ohl Tahn_BTN.json b/GatheringPaths/3.x - Heavensward/The Churning Mists/554_Ohl Tahn_BTN.json index 3792592d8..6a89c1618 100644 --- a/GatheringPaths/3.x - Heavensward/The Churning Mists/554_Ohl Tahn_BTN.json +++ b/GatheringPaths/3.x - Heavensward/The Churning Mists/554_Ohl Tahn_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 400, - "AetheryteShortcut": "The Churning Mists - Zenith", + "Steps": [ + { + "TerritoryId": 400, + "InteractionType": "None", + "AetheryteShortcut": "The Churning Mists - Zenith" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/3.x - Heavensward/The Dravanian Forelands/352_Avalonia Fallen_MIN.json b/GatheringPaths/3.x - Heavensward/The Dravanian Forelands/352_Avalonia Fallen_MIN.json index 0b1e53ce8..20bfeb5a5 100644 --- a/GatheringPaths/3.x - Heavensward/The Dravanian Forelands/352_Avalonia Fallen_MIN.json +++ b/GatheringPaths/3.x - Heavensward/The Dravanian Forelands/352_Avalonia Fallen_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 398, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine", + "Steps": [ + { + "TerritoryId": 398, + "InteractionType": "None", + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/3.x - Heavensward/The Dravanian Forelands/358_Avalonia Fallen_BTN.json b/GatheringPaths/3.x - Heavensward/The Dravanian Forelands/358_Avalonia Fallen_BTN.json index c672d2e4a..9bb8f4725 100644 --- a/GatheringPaths/3.x - Heavensward/The Dravanian Forelands/358_Avalonia Fallen_BTN.json +++ b/GatheringPaths/3.x - Heavensward/The Dravanian Forelands/358_Avalonia Fallen_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 398, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine", + "Steps": [ + { + "TerritoryId": 398, + "InteractionType": "None", + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/3.x - Heavensward/The Dravanian Hinterlands/353_The Makers' Quarter_MIN.json b/GatheringPaths/3.x - Heavensward/The Dravanian Hinterlands/353_The Makers' Quarter_MIN.json index 3a1d34771..d462b4530 100644 --- a/GatheringPaths/3.x - Heavensward/The Dravanian Hinterlands/353_The Makers' Quarter_MIN.json +++ b/GatheringPaths/3.x - Heavensward/The Dravanian Hinterlands/353_The Makers' Quarter_MIN.json @@ -1,11 +1,16 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 399, - "AetheryteShortcut": "Idyllshire", - "AethernetShortcut": [ - "[Idyllshire] Aetheryte Plaza", - "[Idyllshire] Epilogue Gate (Eastern Hinterlands)" + "Steps": [ + { + "TerritoryId": 399, + "InteractionType": "None", + "AetheryteShortcut": "Idyllshire", + "AethernetShortcut": [ + "[Idyllshire] Aetheryte Plaza", + "[Idyllshire] Epilogue Gate (Eastern Hinterlands)" + ] + } ], "Groups": [ { diff --git a/GatheringPaths/3.x - Heavensward/The Dravanian Hinterlands/361_The Answering Quarter_BTN.json b/GatheringPaths/3.x - Heavensward/The Dravanian Hinterlands/361_The Answering Quarter_BTN.json index 857dd7052..64e5cb8d4 100644 --- a/GatheringPaths/3.x - Heavensward/The Dravanian Hinterlands/361_The Answering Quarter_BTN.json +++ b/GatheringPaths/3.x - Heavensward/The Dravanian Hinterlands/361_The Answering Quarter_BTN.json @@ -1,11 +1,16 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 399, - "AetheryteShortcut": "Idyllshire", - "AethernetShortcut": [ - "[Idyllshire] Aetheryte Plaza", - "[Idyllshire] Prologue Gate (Western Hinterlands)" + "Steps": [ + { + "TerritoryId": 399, + "InteractionType": "None", + "AetheryteShortcut": "Idyllshire", + "AethernetShortcut": [ + "[Idyllshire] Aetheryte Plaza", + "[Idyllshire] Prologue Gate (Western Hinterlands)" + ] + } ], "Groups": [ { diff --git a/GatheringPaths/3.x - Heavensward/The Sea of Clouds/354_Voor Sian Siran_MIN.json b/GatheringPaths/3.x - Heavensward/The Sea of Clouds/354_Voor Sian Siran_MIN.json index e8040da62..63e23e8e0 100644 --- a/GatheringPaths/3.x - Heavensward/The Sea of Clouds/354_Voor Sian Siran_MIN.json +++ b/GatheringPaths/3.x - Heavensward/The Sea of Clouds/354_Voor Sian Siran_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 401, - "AetheryteShortcut": "The Sea of Clouds - Camp Cloudtop", + "Steps": [ + { + "TerritoryId": 401, + "InteractionType": "None", + "AetheryteShortcut": "The Sea of Clouds - Camp Cloudtop" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/3.x - Heavensward/The Sea of Clouds/360_The Blue Window_BTN.json b/GatheringPaths/3.x - Heavensward/The Sea of Clouds/360_The Blue Window_BTN.json index b15a0425e..11239918a 100644 --- a/GatheringPaths/3.x - Heavensward/The Sea of Clouds/360_The Blue Window_BTN.json +++ b/GatheringPaths/3.x - Heavensward/The Sea of Clouds/360_The Blue Window_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 401, - "AetheryteShortcut": "The Sea of Clouds - Ok' Zundu", + "Steps": [ + { + "TerritoryId": 401, + "InteractionType": "None", + "AetheryteShortcut": "The Sea of Clouds - Ok' Zundu" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Azim Steppe/495_Onsal Hakair_MIN.json b/GatheringPaths/4.x - Stormblood/The Azim Steppe/495_Onsal Hakair_MIN.json index 3c8c4282e..fb4823a68 100644 --- a/GatheringPaths/4.x - Stormblood/The Azim Steppe/495_Onsal Hakair_MIN.json +++ b/GatheringPaths/4.x - Stormblood/The Azim Steppe/495_Onsal Hakair_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 622, - "AetheryteShortcut": "Azim Steppe - Dawn Throne", + "Steps": [ + { + "TerritoryId": 622, + "InteractionType": "None", + "AetheryteShortcut": "Azim Steppe - Dawn Throne" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Azim Steppe/519_Nhaama's Retreat_BTN.json b/GatheringPaths/4.x - Stormblood/The Azim Steppe/519_Nhaama's Retreat_BTN.json index bbefc52d9..d3c96970c 100644 --- a/GatheringPaths/4.x - Stormblood/The Azim Steppe/519_Nhaama's Retreat_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Azim Steppe/519_Nhaama's Retreat_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 622, - "AetheryteShortcut": "Azim Steppe - Dawn Throne", + "Steps": [ + { + "TerritoryId": 622, + "InteractionType": "None", + "AetheryteShortcut": "Azim Steppe - Dawn Throne" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Azim Steppe/813_Onsal Hakair_BTN.json b/GatheringPaths/4.x - Stormblood/The Azim Steppe/813_Onsal Hakair_BTN.json index 2bcf9909e..89ce42a88 100644 --- a/GatheringPaths/4.x - Stormblood/The Azim Steppe/813_Onsal Hakair_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Azim Steppe/813_Onsal Hakair_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 622, - "AetheryteShortcut": "Azim Steppe - Dawn Throne", + "Steps": [ + { + "TerritoryId": 622, + "InteractionType": "None", + "AetheryteShortcut": "Azim Steppe - Dawn Throne" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Fringes/485_East End_MIN.json b/GatheringPaths/4.x - Stormblood/The Fringes/485_East End_MIN.json index 27eb04f13..d5471d643 100644 --- a/GatheringPaths/4.x - Stormblood/The Fringes/485_East End_MIN.json +++ b/GatheringPaths/4.x - Stormblood/The Fringes/485_East End_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 612, - "AetheryteShortcut": "Fringes - Castrum Oriens", + "Steps": [ + { + "TerritoryId": 612, + "InteractionType": "None", + "AetheryteShortcut": "Fringes - Castrum Oriens" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Fringes/486_The Striped Hills_MIN.json b/GatheringPaths/4.x - Stormblood/The Fringes/486_The Striped Hills_MIN.json index eba926f8a..d93f48ade 100644 --- a/GatheringPaths/4.x - Stormblood/The Fringes/486_The Striped Hills_MIN.json +++ b/GatheringPaths/4.x - Stormblood/The Fringes/486_The Striped Hills_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 612, - "AetheryteShortcut": "Fringes - Castrum Oriens", + "Steps": [ + { + "TerritoryId": 612, + "InteractionType": "None", + "AetheryteShortcut": "Fringes - Castrum Oriens" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Fringes/505_East End_BTN.json b/GatheringPaths/4.x - Stormblood/The Fringes/505_East End_BTN.json index a9d9ff5d0..3d3a89d0a 100644 --- a/GatheringPaths/4.x - Stormblood/The Fringes/505_East End_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Fringes/505_East End_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 612, - "AetheryteShortcut": "Fringes - Castrum Oriens", + "Steps": [ + { + "TerritoryId": 612, + "InteractionType": "None", + "AetheryteShortcut": "Fringes - Castrum Oriens" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Fringes/509_Dimwold_BTN.json b/GatheringPaths/4.x - Stormblood/The Fringes/509_Dimwold_BTN.json index bc74413e5..46149bb4d 100644 --- a/GatheringPaths/4.x - Stormblood/The Fringes/509_Dimwold_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Fringes/509_Dimwold_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 612, - "AetheryteShortcut": "Fringes - Castrum Oriens", + "Steps": [ + { + "TerritoryId": 612, + "InteractionType": "None", + "AetheryteShortcut": "Fringes - Castrum Oriens" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Fringes/513_Dimwold_BTN.json b/GatheringPaths/4.x - Stormblood/The Fringes/513_Dimwold_BTN.json index 9386a44c9..927179cd4 100644 --- a/GatheringPaths/4.x - Stormblood/The Fringes/513_Dimwold_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Fringes/513_Dimwold_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 612, - "AetheryteShortcut": "Fringes - Castrum Oriens", + "Steps": [ + { + "TerritoryId": 612, + "InteractionType": "None", + "AetheryteShortcut": "Fringes - Castrum Oriens" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Lochs/493_The High Bank_MIN.json b/GatheringPaths/4.x - Stormblood/The Lochs/493_The High Bank_MIN.json index 4d75f62ed..69b00338a 100644 --- a/GatheringPaths/4.x - Stormblood/The Lochs/493_The High Bank_MIN.json +++ b/GatheringPaths/4.x - Stormblood/The Lochs/493_The High Bank_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 621, - "AetheryteShortcut": "Lochs - Porta Praetoria", + "Steps": [ + { + "TerritoryId": 621, + "InteractionType": "None", + "AetheryteShortcut": "Lochs - Porta Praetoria" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Lochs/514_Abalathia's Skull_BTN.json b/GatheringPaths/4.x - Stormblood/The Lochs/514_Abalathia's Skull_BTN.json index 46299430c..ebdcaf1fe 100644 --- a/GatheringPaths/4.x - Stormblood/The Lochs/514_Abalathia's Skull_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Lochs/514_Abalathia's Skull_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 621, - "AetheryteShortcut": "Lochs - Ala Mhigan Quarter", + "Steps": [ + { + "TerritoryId": 621, + "InteractionType": "None", + "AetheryteShortcut": "Lochs - Ala Mhigan Quarter" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Lochs/526_Abalathia's Skull_BTN.json b/GatheringPaths/4.x - Stormblood/The Lochs/526_Abalathia's Skull_BTN.json index f16197d38..3881eff7b 100644 --- a/GatheringPaths/4.x - Stormblood/The Lochs/526_Abalathia's Skull_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Lochs/526_Abalathia's Skull_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 621, - "AetheryteShortcut": "Lochs - Porta Praetoria", + "Steps": [ + { + "TerritoryId": 621, + "InteractionType": "None", + "AetheryteShortcut": "Lochs - Porta Praetoria" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Peaks/489_Rustrock_MIN.json b/GatheringPaths/4.x - Stormblood/The Peaks/489_Rustrock_MIN.json index c2172a4d4..6c0df9a8a 100644 --- a/GatheringPaths/4.x - Stormblood/The Peaks/489_Rustrock_MIN.json +++ b/GatheringPaths/4.x - Stormblood/The Peaks/489_Rustrock_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 620, - "AetheryteShortcut": "Peaks - Ala Gannha", + "Steps": [ + { + "TerritoryId": 620, + "InteractionType": "None", + "AetheryteShortcut": "Peaks - Ala Gannha" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Peaks/512_The Last Forest_BTN.json b/GatheringPaths/4.x - Stormblood/The Peaks/512_The Last Forest_BTN.json index 95642b761..c73c08d94 100644 --- a/GatheringPaths/4.x - Stormblood/The Peaks/512_The Last Forest_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Peaks/512_The Last Forest_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 620, - "AetheryteShortcut": "Peaks - Ala Gannha", + "Steps": [ + { + "TerritoryId": 620, + "InteractionType": "None", + "AetheryteShortcut": "Peaks - Ala Gannha" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Peaks/531_Sleeping Stones_MIN.json b/GatheringPaths/4.x - Stormblood/The Peaks/531_Sleeping Stones_MIN.json index d9e04e5e3..871aec200 100644 --- a/GatheringPaths/4.x - Stormblood/The Peaks/531_Sleeping Stones_MIN.json +++ b/GatheringPaths/4.x - Stormblood/The Peaks/531_Sleeping Stones_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 620, - "AetheryteShortcut": "Peaks - Ala Gannha", + "Steps": [ + { + "TerritoryId": 620, + "InteractionType": "None", + "AetheryteShortcut": "Peaks - Ala Gannha" + } + ], "Groups": [ { "Nodes": [ @@ -128,4 +133,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/4.x - Stormblood/The Peaks/532_The Last Forest_BTN.json b/GatheringPaths/4.x - Stormblood/The Peaks/532_The Last Forest_BTN.json index 35f11b147..3ba97a5d3 100644 --- a/GatheringPaths/4.x - Stormblood/The Peaks/532_The Last Forest_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Peaks/532_The Last Forest_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 620, - "AetheryteShortcut": "Peaks - Ala Gannha", + "Steps": [ + { + "TerritoryId": 620, + "InteractionType": "None", + "AetheryteShortcut": "Peaks - Ala Gannha" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Ruby Sea/487_Hells' Lid_MIN.json b/GatheringPaths/4.x - Stormblood/The Ruby Sea/487_Hells' Lid_MIN.json index 9649c3b79..b4ef3ded7 100644 --- a/GatheringPaths/4.x - Stormblood/The Ruby Sea/487_Hells' Lid_MIN.json +++ b/GatheringPaths/4.x - Stormblood/The Ruby Sea/487_Hells' Lid_MIN.json @@ -1,11 +1,16 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 613, - "AetheryteShortcut": "Kugane", - "AethernetShortcut": [ - "[Kugane] Aetheryte Plaza", - "[Kugane] The Ruby Price" + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Kugane", + "AethernetShortcut": [ + "[Kugane] Aetheryte Plaza", + "[Kugane] The Ruby Price" + ] + } ], "Groups": [ { diff --git a/GatheringPaths/4.x - Stormblood/The Ruby Sea/507_Onokoro_BTN.json b/GatheringPaths/4.x - Stormblood/The Ruby Sea/507_Onokoro_BTN.json index 9ba00a291..604e7d039 100644 --- a/GatheringPaths/4.x - Stormblood/The Ruby Sea/507_Onokoro_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Ruby Sea/507_Onokoro_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 613, - "AetheryteShortcut": "Ruby Sea - Onokoro", + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Ruby Sea - Onokoro" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Ruby Sea/510_East Othard Coastline_BTN.json b/GatheringPaths/4.x - Stormblood/The Ruby Sea/510_East Othard Coastline_BTN.json index f3621a43d..653a07139 100644 --- a/GatheringPaths/4.x - Stormblood/The Ruby Sea/510_East Othard Coastline_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Ruby Sea/510_East Othard Coastline_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 613, - "AetheryteShortcut": "Ruby Sea - Onokoro", + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Ruby Sea - Onokoro" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Ruby Sea/511_Rasen Kaikyo_BTN.json b/GatheringPaths/4.x - Stormblood/The Ruby Sea/511_Rasen Kaikyo_BTN.json index 0972e6668..1b7516f4c 100644 --- a/GatheringPaths/4.x - Stormblood/The Ruby Sea/511_Rasen Kaikyo_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Ruby Sea/511_Rasen Kaikyo_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 613, - "AetheryteShortcut": "Ruby Sea - Tamamizu", + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Ruby Sea - Tamamizu" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Ruby Sea/529_Rasen Kaikyo_BTN.json b/GatheringPaths/4.x - Stormblood/The Ruby Sea/529_Rasen Kaikyo_BTN.json index 71f30298f..e65b26a50 100644 --- a/GatheringPaths/4.x - Stormblood/The Ruby Sea/529_Rasen Kaikyo_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Ruby Sea/529_Rasen Kaikyo_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 613, - "AetheryteShortcut": "Ruby Sea - Onokoro", + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Ruby Sea - Onokoro" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/The Ruby Sea/533_The Turquoise Trench_MIN.json b/GatheringPaths/4.x - Stormblood/The Ruby Sea/533_The Turquoise Trench_MIN.json index f886de4f8..c3dd904aa 100644 --- a/GatheringPaths/4.x - Stormblood/The Ruby Sea/533_The Turquoise Trench_MIN.json +++ b/GatheringPaths/4.x - Stormblood/The Ruby Sea/533_The Turquoise Trench_MIN.json @@ -1,11 +1,16 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 613, - "AetheryteShortcut": "Kugane", - "AethernetShortcut": [ - "[Kugane] Aetheryte Plaza", - "[Kugane] The Ruby Price" + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Kugane", + "AethernetShortcut": [ + "[Kugane] Aetheryte Plaza", + "[Kugane] The Ruby Price" + ] + } ], "FlyBetweenNodes": true, "Groups": [ @@ -135,4 +140,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/4.x - Stormblood/The Ruby Sea/534_The Isle of Bekko_BTN.json b/GatheringPaths/4.x - Stormblood/The Ruby Sea/534_The Isle of Bekko_BTN.json index 9844919ba..ec7a85a7d 100644 --- a/GatheringPaths/4.x - Stormblood/The Ruby Sea/534_The Isle of Bekko_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Ruby Sea/534_The Isle of Bekko_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 613, - "AetheryteShortcut": "Ruby Sea - Tamamizu", + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Ruby Sea - Tamamizu" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/Yanxia/488_The Gensui Chain_MIN.json b/GatheringPaths/4.x - Stormblood/Yanxia/488_The Gensui Chain_MIN.json index 6e63e7c7a..ffc19238a 100644 --- a/GatheringPaths/4.x - Stormblood/Yanxia/488_The Gensui Chain_MIN.json +++ b/GatheringPaths/4.x - Stormblood/Yanxia/488_The Gensui Chain_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 614, - "AetheryteShortcut": "Yanxia - Namai", + "Steps": [ + { + "TerritoryId": 614, + "InteractionType": "None", + "AetheryteShortcut": "Yanxia - Namai" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/Yanxia/491_Unseen Spirits Laughing_MIN.json b/GatheringPaths/4.x - Stormblood/Yanxia/491_Unseen Spirits Laughing_MIN.json index a832d5697..bdfded1ed 100644 --- a/GatheringPaths/4.x - Stormblood/Yanxia/491_Unseen Spirits Laughing_MIN.json +++ b/GatheringPaths/4.x - Stormblood/Yanxia/491_Unseen Spirits Laughing_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 614, - "AetheryteShortcut": "Yanxia - Namai", + "Steps": [ + { + "TerritoryId": 614, + "InteractionType": "None", + "AetheryteShortcut": "Yanxia - Namai" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/Yanxia/508_The Heron's Flight_BTN.json b/GatheringPaths/4.x - Stormblood/Yanxia/508_The Heron's Flight_BTN.json index 6c13febf3..e08bd10df 100644 --- a/GatheringPaths/4.x - Stormblood/Yanxia/508_The Heron's Flight_BTN.json +++ b/GatheringPaths/4.x - Stormblood/Yanxia/508_The Heron's Flight_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 614, - "AetheryteShortcut": "Yanxia - Namai", + "Steps": [ + { + "TerritoryId": 614, + "InteractionType": "None", + "AetheryteShortcut": "Yanxia - Namai" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/4.x - Stormblood/Yanxia/731_Yuzuka Manor_BTN.json b/GatheringPaths/4.x - Stormblood/Yanxia/731_Yuzuka Manor_BTN.json index 23fae294a..c7d8352ac 100644 --- a/GatheringPaths/4.x - Stormblood/Yanxia/731_Yuzuka Manor_BTN.json +++ b/GatheringPaths/4.x - Stormblood/Yanxia/731_Yuzuka Manor_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 614, - "AetheryteShortcut": "Yanxia - Namai", + "Steps": [ + { + "TerritoryId": 614, + "InteractionType": "None", + "AetheryteShortcut": "Yanxia - Namai" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/5.x - Shadowbringers/Kholusia/649_Stonegazer_BTN.json b/GatheringPaths/5.x - Shadowbringers/Kholusia/649_Stonegazer_BTN.json index 677ec3746..54ae87dd9 100644 --- a/GatheringPaths/5.x - Shadowbringers/Kholusia/649_Stonegazer_BTN.json +++ b/GatheringPaths/5.x - Shadowbringers/Kholusia/649_Stonegazer_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 814, - "AetheryteShortcut": "Kholusia - Wright", + "Steps": [ + { + "TerritoryId": 814, + "InteractionType": "None", + "AetheryteShortcut": "Kholusia - Wright" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/5.x - Shadowbringers/Kholusia/650_Shadow Fault_MIN.json b/GatheringPaths/5.x - Shadowbringers/Kholusia/650_Shadow Fault_MIN.json index 83fc6092d..297e8606d 100644 --- a/GatheringPaths/5.x - Shadowbringers/Kholusia/650_Shadow Fault_MIN.json +++ b/GatheringPaths/5.x - Shadowbringers/Kholusia/650_Shadow Fault_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 814, - "AetheryteShortcut": "Kholusia - Wright", + "Steps": [ + { + "TerritoryId": 814, + "InteractionType": "None", + "AetheryteShortcut": "Kholusia - Wright" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/5.x - Shadowbringers/The Rak'tika Greatwood/688__MIN.json b/GatheringPaths/5.x - Shadowbringers/The Rak'tika Greatwood/688__MIN.json index 257ddef63..ced42fa89 100644 --- a/GatheringPaths/5.x - Shadowbringers/The Rak'tika Greatwood/688__MIN.json +++ b/GatheringPaths/5.x - Shadowbringers/The Rak'tika Greatwood/688__MIN.json @@ -1,7 +1,12 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 817, + "Steps": [ + { + "TerritoryId": 817, + "InteractionType": "None" + } + ], "Groups": [ { "Nodes": [ @@ -58,4 +63,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/5.x - Shadowbringers/The Rak'tika Greatwood/689__MIN.json b/GatheringPaths/5.x - Shadowbringers/The Rak'tika Greatwood/689__MIN.json index dabf5ad7b..8d6f0db11 100644 --- a/GatheringPaths/5.x - Shadowbringers/The Rak'tika Greatwood/689__MIN.json +++ b/GatheringPaths/5.x - Shadowbringers/The Rak'tika Greatwood/689__MIN.json @@ -1,7 +1,12 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 817, + "Steps": [ + { + "TerritoryId": 817, + "InteractionType": "None" + } + ], "Groups": [ { "Nodes": [ @@ -58,4 +63,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/6.x - Endwalker/Elpis/823_The Hungering Gardens_MIN.json b/GatheringPaths/6.x - Endwalker/Elpis/823_The Hungering Gardens_MIN.json index 4bf777b08..a1303d90e 100644 --- a/GatheringPaths/6.x - Endwalker/Elpis/823_The Hungering Gardens_MIN.json +++ b/GatheringPaths/6.x - Endwalker/Elpis/823_The Hungering Gardens_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 961, - "AetheryteShortcut": "Elpis - Poieten Oikos", + "Steps": [ + { + "TerritoryId": 961, + "InteractionType": "None", + "AetheryteShortcut": "Elpis - Poieten Oikos" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/6.x - Endwalker/Elpis/846_Anagnorisis_BTN.json b/GatheringPaths/6.x - Endwalker/Elpis/846_Anagnorisis_BTN.json index 8262dab42..1079cd1c2 100644 --- a/GatheringPaths/6.x - Endwalker/Elpis/846_Anagnorisis_BTN.json +++ b/GatheringPaths/6.x - Endwalker/Elpis/846_Anagnorisis_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 961, - "AetheryteShortcut": "Elpis - Anagnorisis", + "Steps": [ + { + "TerritoryId": 961, + "InteractionType": "None", + "AetheryteShortcut": "Elpis - Anagnorisis" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/6.x - Endwalker/Elysion/316__MIN.json b/GatheringPaths/6.x - Endwalker/Elysion/316__MIN.json index d401f0dc1..53d696f27 100644 --- a/GatheringPaths/6.x - Endwalker/Elysion/316__MIN.json +++ b/GatheringPaths/6.x - Endwalker/Elysion/316__MIN.json @@ -1,7 +1,12 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1073, + "Steps": [ + { + "TerritoryId": 1073, + "InteractionType": "None" + } + ], "Groups": [ { "Nodes": [ @@ -58,4 +63,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/6.x - Endwalker/Elysion/317__MIN.json b/GatheringPaths/6.x - Endwalker/Elysion/317__MIN.json index 2fb862040..a5a183288 100644 --- a/GatheringPaths/6.x - Endwalker/Elysion/317__MIN.json +++ b/GatheringPaths/6.x - Endwalker/Elysion/317__MIN.json @@ -1,7 +1,12 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1073, + "Steps": [ + { + "TerritoryId": 1073, + "InteractionType": "None" + } + ], "Groups": [ { "Nodes": [ @@ -54,4 +59,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/6.x - Endwalker/Elysion/322__MIN.json b/GatheringPaths/6.x - Endwalker/Elysion/322__MIN.json index 7854b5194..28eafc167 100644 --- a/GatheringPaths/6.x - Endwalker/Elysion/322__MIN.json +++ b/GatheringPaths/6.x - Endwalker/Elysion/322__MIN.json @@ -1,7 +1,12 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1073, + "Steps": [ + { + "TerritoryId": 1073, + "InteractionType": "None" + } + ], "Groups": [ { "Nodes": [ @@ -58,4 +63,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/6.x - Endwalker/Elysion/336__MIN.json b/GatheringPaths/6.x - Endwalker/Elysion/336__MIN.json index c5f722ca8..29fd7e14e 100644 --- a/GatheringPaths/6.x - Endwalker/Elysion/336__MIN.json +++ b/GatheringPaths/6.x - Endwalker/Elysion/336__MIN.json @@ -1,7 +1,12 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1073, + "Steps": [ + { + "TerritoryId": 1073, + "InteractionType": "None" + } + ], "Groups": [ { "Nodes": [ @@ -58,4 +63,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/6.x - Endwalker/Elysion/393__BTN.json b/GatheringPaths/6.x - Endwalker/Elysion/393__BTN.json index d4c4076d5..f5b800cf5 100644 --- a/GatheringPaths/6.x - Endwalker/Elysion/393__BTN.json +++ b/GatheringPaths/6.x - Endwalker/Elysion/393__BTN.json @@ -1,7 +1,12 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1073, + "Steps": [ + { + "TerritoryId": 1073, + "InteractionType": "None" + } + ], "Groups": [ { "Nodes": [ @@ -54,4 +59,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/6.x - Endwalker/Elysion/394__BTN.json b/GatheringPaths/6.x - Endwalker/Elysion/394__BTN.json index a405c6658..647326f06 100644 --- a/GatheringPaths/6.x - Endwalker/Elysion/394__BTN.json +++ b/GatheringPaths/6.x - Endwalker/Elysion/394__BTN.json @@ -1,7 +1,12 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1073, + "Steps": [ + { + "TerritoryId": 1073, + "InteractionType": "None" + } + ], "Groups": [ { "Nodes": [ @@ -58,4 +63,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/6.x - Endwalker/Elysion/398__BTN.json b/GatheringPaths/6.x - Endwalker/Elysion/398__BTN.json index 8ad1fa44e..a53db4350 100644 --- a/GatheringPaths/6.x - Endwalker/Elysion/398__BTN.json +++ b/GatheringPaths/6.x - Endwalker/Elysion/398__BTN.json @@ -1,7 +1,12 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1073, + "Steps": [ + { + "TerritoryId": 1073, + "InteractionType": "None" + } + ], "Groups": [ { "Nodes": [ @@ -58,4 +63,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/6.x - Endwalker/Elysion/399__BTN.json b/GatheringPaths/6.x - Endwalker/Elysion/399__BTN.json index 64f577788..5953cde4b 100644 --- a/GatheringPaths/6.x - Endwalker/Elysion/399__BTN.json +++ b/GatheringPaths/6.x - Endwalker/Elysion/399__BTN.json @@ -1,7 +1,12 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1073, + "Steps": [ + { + "TerritoryId": 1073, + "InteractionType": "None" + } + ], "Groups": [ { "Nodes": [ @@ -58,4 +63,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/6.x - Endwalker/Garlemald/822_Monitoring Station G_MIN.json b/GatheringPaths/6.x - Endwalker/Garlemald/822_Monitoring Station G_MIN.json index 76477c0f0..17711bbe3 100644 --- a/GatheringPaths/6.x - Endwalker/Garlemald/822_Monitoring Station G_MIN.json +++ b/GatheringPaths/6.x - Endwalker/Garlemald/822_Monitoring Station G_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 958, - "AetheryteShortcut": "Garlemald - Camp Broken Glass", + "Steps": [ + { + "TerritoryId": 958, + "InteractionType": "None", + "AetheryteShortcut": "Garlemald - Camp Broken Glass" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/6.x - Endwalker/Garlemald/842_Camp Broken Glass_BTN.json b/GatheringPaths/6.x - Endwalker/Garlemald/842_Camp Broken Glass_BTN.json index 70944b16c..ed1de864a 100644 --- a/GatheringPaths/6.x - Endwalker/Garlemald/842_Camp Broken Glass_BTN.json +++ b/GatheringPaths/6.x - Endwalker/Garlemald/842_Camp Broken Glass_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 958, - "AetheryteShortcut": "Garlemald - Camp Broken Glass", + "Steps": [ + { + "TerritoryId": 958, + "InteractionType": "None", + "AetheryteShortcut": "Garlemald - Camp Broken Glass" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/6.x - Endwalker/Labyrinthos/816_Lower Acrinthos_MIN.json b/GatheringPaths/6.x - Endwalker/Labyrinthos/816_Lower Acrinthos_MIN.json index 8749bf37e..68ea154cf 100644 --- a/GatheringPaths/6.x - Endwalker/Labyrinthos/816_Lower Acrinthos_MIN.json +++ b/GatheringPaths/6.x - Endwalker/Labyrinthos/816_Lower Acrinthos_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 956, - "AetheryteShortcut": "Labyrinthos - Archeion", + "Steps": [ + { + "TerritoryId": 956, + "InteractionType": "None", + "AetheryteShortcut": "Labyrinthos - Archeion" + } + ], "Groups": [ { "Nodes": [ @@ -155,4 +160,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/GatheringPaths/6.x - Endwalker/Labyrinthos/838_Meryall Agronomics_BTN.json b/GatheringPaths/6.x - Endwalker/Labyrinthos/838_Meryall Agronomics_BTN.json index 396b05e51..889d8c827 100644 --- a/GatheringPaths/6.x - Endwalker/Labyrinthos/838_Meryall Agronomics_BTN.json +++ b/GatheringPaths/6.x - Endwalker/Labyrinthos/838_Meryall Agronomics_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 956, - "AetheryteShortcut": "Labyrinthos - Archeion", + "Steps": [ + { + "TerritoryId": 956, + "InteractionType": "None", + "AetheryteShortcut": "Labyrinthos - Archeion" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/6.x - Endwalker/Mare Lamentorum/821_The Crushing Brand_MIN.json b/GatheringPaths/6.x - Endwalker/Mare Lamentorum/821_The Crushing Brand_MIN.json index 59b2e8439..5c9f42949 100644 --- a/GatheringPaths/6.x - Endwalker/Mare Lamentorum/821_The Crushing Brand_MIN.json +++ b/GatheringPaths/6.x - Endwalker/Mare Lamentorum/821_The Crushing Brand_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 959, - "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum", + "Steps": [ + { + "TerritoryId": 959, + "InteractionType": "None", + "AetheryteShortcut": "Mare Lamentorum - Sinus Lacrimarum" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/6.x - Endwalker/Mare Lamentorum/902_Heimdall's Last Sight_BTN.json b/GatheringPaths/6.x - Endwalker/Mare Lamentorum/902_Heimdall's Last Sight_BTN.json index ae21eaea9..967e67c2a 100644 --- a/GatheringPaths/6.x - Endwalker/Mare Lamentorum/902_Heimdall's Last Sight_BTN.json +++ b/GatheringPaths/6.x - Endwalker/Mare Lamentorum/902_Heimdall's Last Sight_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 959, - "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow", + "Steps": [ + { + "TerritoryId": 959, + "InteractionType": "None", + "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/6.x - Endwalker/Thavnair/820_The Hamsa Hatchery_MIN.json b/GatheringPaths/6.x - Endwalker/Thavnair/820_The Hamsa Hatchery_MIN.json index 5ad3c30c8..a83330097 100644 --- a/GatheringPaths/6.x - Endwalker/Thavnair/820_The Hamsa Hatchery_MIN.json +++ b/GatheringPaths/6.x - Endwalker/Thavnair/820_The Hamsa Hatchery_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 957, - "AetheryteShortcut": "Thavnair - Great Work", + "Steps": [ + { + "TerritoryId": 957, + "InteractionType": "None", + "AetheryteShortcut": "Thavnair - Great Work" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/6.x - Endwalker/Thavnair/840_Giantsgall Grounds_BTN.json b/GatheringPaths/6.x - Endwalker/Thavnair/840_Giantsgall Grounds_BTN.json index bf1884b5d..d90030497 100644 --- a/GatheringPaths/6.x - Endwalker/Thavnair/840_Giantsgall Grounds_BTN.json +++ b/GatheringPaths/6.x - Endwalker/Thavnair/840_Giantsgall Grounds_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 957, - "AetheryteShortcut": "Thavnair - Great Work", + "Steps": [ + { + "TerritoryId": 957, + "InteractionType": "None", + "AetheryteShortcut": "Thavnair - Great Work" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Kozama'uka/946__BTN.json b/GatheringPaths/7.x - Dawntrail/Kozama'uka/946__BTN.json index b97d0790f..bf551a66e 100644 --- a/GatheringPaths/7.x - Dawntrail/Kozama'uka/946__BTN.json +++ b/GatheringPaths/7.x - Dawntrail/Kozama'uka/946__BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1188, - "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Steps": [ + { + "TerritoryId": 1188, + "InteractionType": "None", + "AetheryteShortcut": "Kozama'uka - Ok'hanu" + } + ], "FlyBetweenNodes": true, "Groups": [ { diff --git a/GatheringPaths/7.x - Dawntrail/Kozama'uka/976_Uyuyub'_MIN.json b/GatheringPaths/7.x - Dawntrail/Kozama'uka/976_Uyuyub'_MIN.json index f83d5960e..4b99218fb 100644 --- a/GatheringPaths/7.x - Dawntrail/Kozama'uka/976_Uyuyub'_MIN.json +++ b/GatheringPaths/7.x - Dawntrail/Kozama'uka/976_Uyuyub'_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1188, - "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Steps": [ + { + "TerritoryId": 1188, + "InteractionType": "None", + "AetheryteShortcut": "Kozama'uka - Ok'hanu" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Kozama'uka/986_Uyuyub'_BTN.json b/GatheringPaths/7.x - Dawntrail/Kozama'uka/986_Uyuyub'_BTN.json index 5ff1849ed..7637ea8b2 100644 --- a/GatheringPaths/7.x - Dawntrail/Kozama'uka/986_Uyuyub'_BTN.json +++ b/GatheringPaths/7.x - Dawntrail/Kozama'uka/986_Uyuyub'_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1188, - "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Steps": [ + { + "TerritoryId": 1188, + "InteractionType": "None", + "AetheryteShortcut": "Kozama'uka - Ok'hanu" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Shaaloani/978_Pyariyoanaan Plain_MIN.json b/GatheringPaths/7.x - Dawntrail/Shaaloani/978_Pyariyoanaan Plain_MIN.json index 6c7417be0..ef7c642e5 100644 --- a/GatheringPaths/7.x - Dawntrail/Shaaloani/978_Pyariyoanaan Plain_MIN.json +++ b/GatheringPaths/7.x - Dawntrail/Shaaloani/978_Pyariyoanaan Plain_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1190, - "AetheryteShortcut": "Shaaloani - Mehwahhetsoan", + "Steps": [ + { + "TerritoryId": 1190, + "InteractionType": "None", + "AetheryteShortcut": "Shaaloani - Mehwahhetsoan" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Shaaloani/999_Yawtanane Grasslands_BTN.json b/GatheringPaths/7.x - Dawntrail/Shaaloani/999_Yawtanane Grasslands_BTN.json index 5d63bdea7..38b9da9a2 100644 --- a/GatheringPaths/7.x - Dawntrail/Shaaloani/999_Yawtanane Grasslands_BTN.json +++ b/GatheringPaths/7.x - Dawntrail/Shaaloani/999_Yawtanane Grasslands_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1190, - "AetheryteShortcut": "Shaaloani - Hhusatahwi", + "Steps": [ + { + "TerritoryId": 1190, + "InteractionType": "None", + "AetheryteShortcut": "Shaaloani - Hhusatahwi" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Urqopacha/961__MIN.json b/GatheringPaths/7.x - Dawntrail/Urqopacha/961__MIN.json index 566b0c304..2ed58e1e0 100644 --- a/GatheringPaths/7.x - Dawntrail/Urqopacha/961__MIN.json +++ b/GatheringPaths/7.x - Dawntrail/Urqopacha/961__MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1187, - "AetheryteShortcut": "Urqopacha - Wachunpelo", + "Steps": [ + { + "TerritoryId": 1187, + "InteractionType": "None", + "AetheryteShortcut": "Urqopacha - Wachunpelo" + } + ], "FlyBetweenNodes": false, "Groups": [ { diff --git a/GatheringPaths/7.x - Dawntrail/Urqopacha/974_Chabameki_MIN.json b/GatheringPaths/7.x - Dawntrail/Urqopacha/974_Chabameki_MIN.json index 3359bf54b..7dff5fe8e 100644 --- a/GatheringPaths/7.x - Dawntrail/Urqopacha/974_Chabameki_MIN.json +++ b/GatheringPaths/7.x - Dawntrail/Urqopacha/974_Chabameki_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1187, - "AetheryteShortcut": "Urqopacha - Wachunpelo", + "Steps": [ + { + "TerritoryId": 1187, + "InteractionType": "None", + "AetheryteShortcut": "Urqopacha - Wachunpelo" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Urqopacha/975_Sorrow_MIN.json b/GatheringPaths/7.x - Dawntrail/Urqopacha/975_Sorrow_MIN.json index 3075fdf89..c4162843c 100644 --- a/GatheringPaths/7.x - Dawntrail/Urqopacha/975_Sorrow_MIN.json +++ b/GatheringPaths/7.x - Dawntrail/Urqopacha/975_Sorrow_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1187, - "AetheryteShortcut": "Urqopacha - Worlar's Echo", + "Steps": [ + { + "TerritoryId": 1187, + "InteractionType": "None", + "AetheryteShortcut": "Urqopacha - Worlar's Echo" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Urqopacha/992_Chabameki_BTN.json b/GatheringPaths/7.x - Dawntrail/Urqopacha/992_Chabameki_BTN.json index 0e80e665f..67e9a8e3a 100644 --- a/GatheringPaths/7.x - Dawntrail/Urqopacha/992_Chabameki_BTN.json +++ b/GatheringPaths/7.x - Dawntrail/Urqopacha/992_Chabameki_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1187, - "AetheryteShortcut": "Urqopacha - Wachunpelo", + "Steps": [ + { + "TerritoryId": 1187, + "InteractionType": "None", + "AetheryteShortcut": "Urqopacha - Wachunpelo" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Urqopacha/993_Chabayuqeq_MIN.json b/GatheringPaths/7.x - Dawntrail/Urqopacha/993_Chabayuqeq_MIN.json index f2bfae725..c29cb2cbb 100644 --- a/GatheringPaths/7.x - Dawntrail/Urqopacha/993_Chabayuqeq_MIN.json +++ b/GatheringPaths/7.x - Dawntrail/Urqopacha/993_Chabayuqeq_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1187, - "AetheryteShortcut": "Urqopacha - Wachunpelo", + "Steps": [ + { + "TerritoryId": 1187, + "InteractionType": "None", + "AetheryteShortcut": "Urqopacha - Wachunpelo" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Urqopacha/994_Larh Tortoh_BTN.json b/GatheringPaths/7.x - Dawntrail/Urqopacha/994_Larh Tortoh_BTN.json index 41f6e35de..689c55b78 100644 --- a/GatheringPaths/7.x - Dawntrail/Urqopacha/994_Larh Tortoh_BTN.json +++ b/GatheringPaths/7.x - Dawntrail/Urqopacha/994_Larh Tortoh_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1187, - "AetheryteShortcut": "Urqopacha - Worlar's Echo", + "Steps": [ + { + "TerritoryId": 1187, + "InteractionType": "None", + "AetheryteShortcut": "Urqopacha - Worlar's Echo" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Yak T'el/1000_The Xobr'it Cinderfield_BTN.json b/GatheringPaths/7.x - Dawntrail/Yak T'el/1000_The Xobr'it Cinderfield_BTN.json index 075e07bcb..061dc49a8 100644 --- a/GatheringPaths/7.x - Dawntrail/Yak T'el/1000_The Xobr'it Cinderfield_BTN.json +++ b/GatheringPaths/7.x - Dawntrail/Yak T'el/1000_The Xobr'it Cinderfield_BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1189, - "AetheryteShortcut": "Yak T'el - Iq Br'aax", + "Steps": [ + { + "TerritoryId": 1189, + "InteractionType": "None", + "AetheryteShortcut": "Yak T'el - Iq Br'aax" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Yak T'el/955__BTN.json b/GatheringPaths/7.x - Dawntrail/Yak T'el/955__BTN.json index 68779daa9..33239ba1d 100644 --- a/GatheringPaths/7.x - Dawntrail/Yak T'el/955__BTN.json +++ b/GatheringPaths/7.x - Dawntrail/Yak T'el/955__BTN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1189, - "AetheryteShortcut": "Yak T'el - Iq Br'aax", + "Steps": [ + { + "TerritoryId": 1189, + "InteractionType": "None", + "AetheryteShortcut": "Yak T'el - Iq Br'aax" + } + ], "FlyBetweenNodes": true, "Groups": [ { diff --git a/GatheringPaths/7.x - Dawntrail/Yak T'el/970__MIN.json b/GatheringPaths/7.x - Dawntrail/Yak T'el/970__MIN.json index 27cfb7e2d..71eb2bd40 100644 --- a/GatheringPaths/7.x - Dawntrail/Yak T'el/970__MIN.json +++ b/GatheringPaths/7.x - Dawntrail/Yak T'el/970__MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1189, - "AetheryteShortcut": "Yak T'el - Mamook", + "Steps": [ + { + "TerritoryId": 1189, + "InteractionType": "None", + "AetheryteShortcut": "Yak T'el - Mamook" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/7.x - Dawntrail/Yak T'el/979_The Ut'ohmu Horizon_MIN.json b/GatheringPaths/7.x - Dawntrail/Yak T'el/979_The Ut'ohmu Horizon_MIN.json index eeb921264..2eaabe11f 100644 --- a/GatheringPaths/7.x - Dawntrail/Yak T'el/979_The Ut'ohmu Horizon_MIN.json +++ b/GatheringPaths/7.x - Dawntrail/Yak T'el/979_The Ut'ohmu Horizon_MIN.json @@ -1,8 +1,13 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", "Author": "liza", - "TerritoryId": 1189, - "AetheryteShortcut": "Yak T'el - Iq Br'aax", + "Steps": [ + { + "TerritoryId": 1189, + "InteractionType": "None", + "AetheryteShortcut": "Yak T'el - Iq Br'aax" + } + ], "Groups": [ { "Nodes": [ diff --git a/GatheringPaths/gatheringlocation-v1.json b/GatheringPaths/gatheringlocation-v1.json index ffb288ab5..beba3b182 100644 --- a/GatheringPaths/gatheringlocation-v1.json +++ b/GatheringPaths/gatheringlocation-v1.json @@ -19,20 +19,12 @@ "type": "string" } }, - "TerritoryId": { - "type": "number" - }, - "AetheryteShortcut": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" - }, - "AethernetShortcut": { + "Steps": { "type": "array", - "description": "A pair of aethernet locations (from + to) to use as a shortcut", - "minItems": 2, - "maxItems": 2, "items": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/AethernetShard" - } + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json#/$defs/Step" + }, + "minItems": 1 }, "FlyBetweenNodes": { "description": "If nodes are close enough together, flying makes no sense due to the pathfinding overhead", @@ -63,7 +55,7 @@ "type": "object", "properties": { "Position": { - "$ref": "#/$defs/Vector3" + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Vector3" }, "MinimumAngle": { "type": "number", @@ -108,30 +100,8 @@ "required": [ "$schema", "Author", - "TerritoryId", + "Steps", "Groups" ], - "additionalProperties": false, - "$defs": { - "Vector3": { - "type": "object", - "description": "Position to (typically) walk to", - "properties": { - "X": { - "type": "number" - }, - "Y": { - "type": "number" - }, - "Z": { - "type": "number" - } - }, - "required": [ - "X", - "Y", - "Z" - ] - } - } + "additionalProperties": false } diff --git a/QuestPathGenerator/GatheringSourceGenerator.cs b/QuestPathGenerator/GatheringSourceGenerator.cs index 6ba6efbb1..1a341ed67 100644 --- a/QuestPathGenerator/GatheringSourceGenerator.cs +++ b/QuestPathGenerator/GatheringSourceGenerator.cs @@ -152,13 +152,7 @@ public class GatheringSourceGenerator : ISourceGenerator SeparatedList( SyntaxNodeList( AssignmentList(nameof(GatheringRoot.Author), root.Author).AsSyntaxNodeOrToken(), - Assignment(nameof(GatheringRoot.TerritoryId), root.TerritoryId, emptyRoot.TerritoryId) - .AsSyntaxNodeOrToken(), - Assignment(nameof(GatheringRoot.AetheryteShortcut), root.AetheryteShortcut, - emptyRoot.AetheryteShortcut) - .AsSyntaxNodeOrToken(), - Assignment(nameof(GatheringRoot.AethernetShortcut), root.AethernetShortcut, - emptyRoot.AethernetShortcut) + AssignmentList(nameof(GatheringRoot.Steps), root.Steps) .AsSyntaxNodeOrToken(), Assignment(nameof(GatheringRoot.FlyBetweenNodes), root.FlyBetweenNodes, emptyRoot.FlyBetweenNodes) diff --git a/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Charlemend/S7_Charlemend.json b/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Charlemend/S7_Charlemend.json index ea885fd4a..43f33bd5a 100644 --- a/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Charlemend/S7_Charlemend.json +++ b/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Charlemend/S7_Charlemend.json @@ -5,6 +5,25 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 886, + "InteractionType": "None", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Firmament" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InTerritory": [ + 886 + ] + }, + "AethernetShortcutIf": { + "InSameTerritory": true + } + } + }, { "DataId": 1035211, "Position": { @@ -14,10 +33,9 @@ }, "TerritoryId": 886, "InteractionType": "Interact", - "AetheryteShortcut": "Ishgard", "AethernetShortcut": [ - "[Ishgard] Aetheryte Plaza", - "[Ishgard] Firmament" + "[Firmament] The Mendicant's Court", + "[Firmament] Western Risensong Quarter" ], "DialogueChoices": [ { diff --git a/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Ehll Tou/S6_Ehll Tou.json b/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Ehll Tou/S6_Ehll Tou.json index 6e4e68f3d..70a150918 100644 --- a/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Ehll Tou/S6_Ehll Tou.json +++ b/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Ehll Tou/S6_Ehll Tou.json @@ -5,6 +5,25 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 886, + "InteractionType": "None", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Firmament" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InTerritory": [ + 886 + ] + }, + "AethernetShortcutIf": { + "InSameTerritory": true + } + } + }, { "DataId": 1033543, "Position": { @@ -14,10 +33,9 @@ }, "TerritoryId": 886, "InteractionType": "Interact", - "AetheryteShortcut": "Ishgard", "AethernetShortcut": [ - "[Ishgard] Aetheryte Plaza", - "[Ishgard] Firmament" + "[Firmament] The Mendicant's Court", + "[Firmament] The Mattock" ], "DialogueChoices": [ { diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 7db023e10..122c64068 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -48,1040 +48,7 @@ "Steps": { "type": "array", "items": { - "type": "object", - "properties": { - "DataId": { - "type": "integer", - "description": "The data id of the NPC/Object/Aetheryte/Aether Current", - "exclusiveMinimum": 0 - }, - "Position": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Vector3" - }, - "StopDistance": { - "type": [ - "number", - "null" - ], - "description": "Set if pathfinding should stop closer or further away from the default stop distance", - "exclusiveMinimum": 0 - }, - "IgnoreDistanceToObject": { - "type": "boolean", - "description": "Most interactions with objects are checked for a Y (height) difference of 2 in-game units. If set to true, the game won't attempt to get any closer if the height difference is larger than this." - }, - "TerritoryId": { - "type": "integer", - "description": "The territory id associated with the location", - "exclusiveMinimum": 0 - }, - "TargetTerritoryId": { - "type": "integer", - "description": "If set, this step is complete (movement-wise) if this territory id is reached", - "exclusiveMinimum": 0 - }, - "InteractionType": { - "type": "string", - "description": "What to do at the position", - "enum": [ - "None", - "Interact", - "WalkTo", - "AttuneAethernetShard", - "AttuneAetheryte", - "AttuneAetherCurrent", - "Combat", - "UseItem", - "EquipItem", - "EquipRecommended", - "Say", - "Emote", - "Action", - "WaitForNpcAtPosition", - "WaitForManualProgress", - "Duty", - "SinglePlayerDuty", - "Jump", - "Dive", - "Instruction", - "AcceptQuest", - "CompleteQuest", - "InitiateLeve" - ] - }, - "Disabled": { - "description": "Whether this step is disabled (see SkipIf for more control)", - "type": "boolean" - }, - "DisableNavmesh": { - "description": "If true, will go to the position in a straight line instead of using pathfinding", - "type": "boolean" - }, - "Mount": { - "type": [ - "boolean", - "null" - ], - "description": "If true, will mount regardless of distance to position. If false, will unmount." - }, - "Fly": { - "type": "boolean", - "description": "If true and flying is unlocked in a zone, will use a flight path" - }, - "Land": { - "type": "boolean", - "description": "If true and flying, will attempt to land on the ground" - }, - "Sprint": { - "type": [ - "boolean", - "null" - ] - }, - "AetheryteShortcut": { - "description": "The Aetheryte to teleport to (before moving)", - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" - }, - "AethernetShortcut": { - "type": "array", - "description": "A pair of aethernet locations (from + to) to use as a shortcut", - "minItems": 2, - "maxItems": 2, - "items": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/AethernetShard" - } - }, - "ItemId": { - "type": [ - "number", - "null" - ], - "description": "The Item to use", - "exclusiveMinimum": 0 - }, - "SkipConditions": { - "type": "object", - "properties": { - "StepIf": { - "type": "object", - "properties": { - "Never": { - "type": "boolean" - }, - "CompletionQuestVariablesFlags": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/CompletionFlags" - }, - "Flying": { - "type": "string", - "enum": [ - "Locked", - "Unlocked" - ] - }, - "Chocobo": { - "type": "string", - "enum": [ - "Locked", - "Unlocked" - ] - }, - "NotTargetable": { - "type": "boolean" - }, - "InTerritory": { - "type": "array", - "items": { - "type": "integer" - } - }, - "NotInTerritory": { - "type": "array", - "items": { - "type": "integer" - } - }, - "Item": { - "type": "object", - "properties": { - "NotInInventory": { - "type": "boolean" - } - } - }, - "QuestsAccepted": { - "type": "array", - "items": { - "type": "number" - } - }, - "QuestsCompleted": { - "type": "array", - "items": { - "type": "number" - } - }, - "AetheryteLocked": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" - }, - "AetheryteUnlocked": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" - }, - "NearPosition": { - "type": "object", - "properties": { - "Position": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Vector3" - }, - "MaximumDistance": { - "type": "number" - } - }, - "required": [ - "Position", - "MaximumDistance" - ], - "additionalProperties": false - }, - "ExtraCondition": { - "type": "string", - "enum": [ - "WakingSandsMainArea", - "RisingStonesSolar" - ] - } - }, - "additionalProperties": false - }, - "AetheryteShortcutIf": { - "type": "object", - "properties": { - "Never": { - "type": "boolean" - }, - "InSameTerritory": { - "type": "boolean" - }, - "InTerritory": { - "type": "array", - "items": { - "type": "integer" - } - }, - "AetheryteLocked": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" - }, - "AetheryteUnlocked": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" - } - }, - "additionalProperties": false - }, - "AethernetShortcutIf": { - "type": "object", - "properties": { - "Never": { - "type": "boolean" - }, - "InSameTerritory": { - "type": "boolean" - }, - "AetheryteLocked": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" - }, - "AetheryteUnlocked": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "CompletionQuestVariablesFlags": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/CompletionFlags" - }, - "RequiredQuestVariables": { - "type": "array", - "description": "Certain quests (primarily beast tribes/allied societies) have a RNG element to spawning targets, and the step should be skipped in its entirety if none of the sets below match", - "minItems": 6, - "maxItems": 6, - "items": { - "type": [ - "array", - "null" - ], - "items": { - "type": [ - "number", - "object" - ], - "properties": { - "High": { - "type": [ - "number", - "null" - ], - "minimum": 0, - "maximum": 15 - }, - "Low": { - "type": [ - "number", - "null" - ], - "minimum": 0, - "maximum": 15 - } - }, - "minimum": 0, - "maximum": 255 - } - } - }, - "RequiredGatheredItems": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ItemId": { - "type": "number" - }, - "AlternativeItemId": { - "description": "For leves that allow you to gather two items with different chance percentage, this is the preferred item if the gathering chance is 100% (after buffs)", - "type": "number" - }, - "ItemCount": { - "type": "number", - "exclusiveMinimum": 0 - }, - "Collectability": { - "type": "number", - "minimum": 0, - "maximum": 1000 - } - }, - "required": [ - "ItemId", - "ItemCount" - ] - } - }, - "DelaySecondsAtStart": { - "description": "Time to wait before starting", - "type": [ - "number", - "null" - ] - }, - "Comment": { - "type": "string" - } - }, - "required": [ - "TerritoryId", - "InteractionType" - ], - "allOf": [ - { - "if": { - "properties": { - "InteractionType": { - "const": "Interact" - } - } - }, - "then": { - "required": [ - "DataId" - ] - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "WalkTo" - } - } - }, - "then": { - "required": [ - "Position" - ] - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "AttuneAetheryte" - } - } - }, - "then": { - "properties": { - "Aetheryte": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" - }, - "DataId": { - "type": "null" - }, - "Position": { - "type": "null" - } - }, - "required": [ - "Aetheryte" - ] - }, - "else": { - "properties": { - "Aetheryte": { - "type": "null" - } - } - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "AttuneAethernetShard" - } - } - }, - "then": { - "properties": { - "AethernetShard": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/AethernetShard" - }, - "DataId": { - "type": "null" - }, - "Position": { - "type": "null" - } - }, - "required": [ - "AethernetShard" - ] - }, - "else": { - "properties": { - "AethernetShard": { - "type": "null" - } - } - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "AttuneAetherCurrent" - } - } - }, - "then": { - "properties": { - "AetherCurrentId": { - "type": "integer", - "description": "The aether current id, used to check if a given aetheryte is unlocked", - "exclusiveMinimum": 0 - } - }, - "required": [ - "DataId", - "Position", - "AetherCurrentId" - ] - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "Combat" - } - } - }, - "then": { - "properties": { - "EnemySpawnType": { - "type": "string", - "description": "Determines how enemy spawning is handled in combat locations", - "enum": [ - "AutoOnEnterArea", - "AfterInteraction", - "AfterItemUse", - "OverworldEnemies" - ] - }, - "KillEnemyDataIds": { - "description": "The enemy data ids which are supposed to be killed", - "type": "array", - "items": { - "type": "integer" - } - }, - "ComplexCombatData": { - "description": "If multiple different enemies are supposed to be killed in a single quest step, this typically is handled via items", - "type": "array", - "items": { - "type": "object", - "properties": { - "DataId": { - "description": "The enemy data id which is supposed to be killed", - "type": "integer" - }, - "MinimumKillCount": { - "description": "Overworld mobs: If this number of mobs has been killed, will wait a bit before attempting to pull another mob to see if the quest progresses", - "type": "integer" - }, - "RewardItemId": { - "type": "integer" - }, - "RewardItemCount": { - "type": "integer" - }, - "CompletionQuestVariablesFlags": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/CompletionFlags" - }, - "IgnoreQuestMarker": { - "type": "boolean" - } - }, - "required": [ - "DataId" - ] - } - }, - "CombatDelaySecondsAtStart": { - "type": "number" - } - }, - "required": [ - "Position", - "EnemySpawnType" - ], - "oneOf": [ - { - "required": [ - "KillEnemyDataIds" - ] - }, - { - "required": [ - "ComplexCombatData" - ] - } - ] - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "UseItem" - }, - "ItemId": { - "not": { - "const": 30362 - } - } - } - }, - "then": { - "required": [ - "Position" - ] - } - }, - { - "if": { - "anyOf": [ - { - "properties": { - "InteractionType": { - "const": "UseItem" - } - } - }, - { - "properties": { - "InteractionType": { - "const": "Combat" - }, - "EnemySpawnType": { - "const": "AfterItemUse" - } - } - } - ] - }, - "then": { - "properties": { - "GroundTarget": { - "type": [ - "boolean", - "null" - ], - "default": false - } - }, - "required": [ - "ItemId" - ] - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "EquipItem" - } - } - }, - "then": { - "required": [ - "ItemId" - ] - } - }, - { - "if": { - "properties": { - "InteractionType": { - "anyOf": [ - { - "const": "Emote" - }, - { - "const": "AcceptQuest" - }, - { - "const": "CompleteQuest" - }, - { - "const": "SinglePlayerDuty" - } - ] - } - } - }, - "then": { - "properties": { - "Emote": { - "type": "string", - "description": "The emote to use", - "enum": [ - "stretch", - "wave", - "rally", - "deny", - "pray", - "slap", - "doubt", - "psych", - "cheer", - "happy", - "poke", - "flex", - "soothe", - "me", - "welcome", - "imperialsalute", - "pet", - "dance", - "respect", - "lookout", - "kneel", - "bow", - "uchiwasshoi", - "clap", - "victorypose" - ] - } - } - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "Emote" - } - } - }, - "then": { - "required": [ - "Position", - "Emote" - ] - } - }, - { - "if": { - "properties": { - "InteractionType": { - "anyOf": [ - { - "const": "Say" - }, - { - "const": "CompleteQuest" - } - ] - } - } - }, - "then": { - "properties": { - "ChatMessage": { - "type": "object", - "description": "The text to use with /say", - "properties": { - "ExcelSheet": { - "type": "string" - }, - "Key": { - "type": "string" - } - }, - "required": [ - "Key" - ] - } - } - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "Say" - } - } - }, - "then": { - "required": [ - "ChatMessage" - ] - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "Action" - } - } - }, - "then": { - "properties": { - "Action": { - "type": "string", - "description": "The action to use", - "enum": [ - "Cure", - "Esuna", - "Physick", - "Buffet", - "Fumigate", - "Siphon Snout", - "Red Gulal", - "Yellow Gulal", - "Blue Gulal" - ] - } - }, - "required": [ - "Action" - ] - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "Jump" - } - } - }, - "then": { - "properties": { - "JumpDestination": { - "type": "object", - "properties": { - "Position": { - "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Vector3" - }, - "StopDistance": { - "type": [ - "number", - "null" - ], - "description": "Set if pathfinding should stop closer or further away from the default stop distance", - "exclusiveMinimum": 0 - }, - "DelaySeconds": { - "type": [ - "number", - "null" - ] - }, - "Type": { - "type": "string", - "enum": [ - "SingleJump", - "RepeatedJumps" - ], - "default": "SingleJump" - } - }, - "required": [ - "Position" - ] - } - }, - "required": [ - "Position", - "JumpDestination" - ] - } - }, - { - "if": { - "properties": { - "InteractionType": { - "anyOf": [ - { - "const": "Interact" - }, - { - "const": "SinglePlayerDuty" - }, - { - "const": "WaitForManualProgress" - }, - { - "const": "AcceptQuest" - }, - { - "const": "CompleteQuest" - }, - { - "const": "Instruction" - }, - { - "const": "Say" - }, - { - "const": "Emote" - }, - { - "const": "UseItem" - } - ] - } - } - }, - "then": { - "properties": { - "DialogueChoices": { - "type": "array", - "items": { - "type": "object", - "properties": { - "Type": { - "type": "string", - "enum": [ - "YesNo", - "List" - ] - }, - "ExcelSheet": { - "type": "string" - } - }, - "required": [ - "Type" - ], - "allOf": [ - { - "if": { - "properties": { - "Type": { - "const": "YesNo" - } - } - }, - "then": { - "properties": { - "Prompt": { - "type": [ - "string", - "integer" - ] - }, - "Yes": { - "type": "boolean", - "default": true - } - }, - "required": [ - "Prompt", - "Yes" - ] - } - }, - { - "if": { - "properties": { - "Type": { - "const": "List" - } - } - }, - "then": { - "properties": { - "Prompt": { - "type": [ - "string", - "integer", - "null" - ] - }, - "Answer": { - "type": [ - "string", - "integer" - ] - } - }, - "required": [ - "Prompt", - "Answer" - ] - } - } - ] - } - }, - "PointMenuChoices": { - "type": "array", - "items": { - "type": "integer", - "minimum": 0 - } - } - } - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "Duty" - } - } - }, - "then": { - "properties": { - "ContentFinderConditionId": { - "type": "integer", - "exclusiveMinimum": 0, - "exclusiveMaximum": 3000 - }, - "DataId": { - "type": "null" - }, - "Position": { - "type": "null" - } - }, - "required": [ - "ContentFinderConditionId" - ] - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "WaitForNpcAtPosition" - } - } - }, - "then": { - "properties": { - "NpcWaitDistance": { - "type": "number", - "exclusiveMinimum": 0 - } - } - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "AcceptQuest" - } - } - }, - "then": { - "properties": { - "PickUpQuestId": { - "type": [ - "null", - "number", - "string" - ], - "description": "Determines the quest which should be accepted. If empty/null, accepts the quest corresponding to the file name." - } - } - } - }, - { - "if": { - "properties": { - "InteractionType": { - "const": "CompleteQuest" - } - } - }, - "then": { - "properties": { - "TurnInQuestId": { - "type": [ - "null", - "number", - "string" - ], - "description": "Determines the quest which should be turned in. If empty/null, turns in the quest corresponding to the file name." - }, - "NextQuestId": { - "type": [ - "null", - "number", - "string" - ], - "description": "For quest chains (e.g. DT healer role quests) Which quest to do next, given that you meet the required level." - } - } - } - } - ], - "not": { - "anyOf": [ - { - "required": [ - "SkipIf" - ] - } - ] - } + "$ref": "#/$defs/Step" } }, "Comment": { @@ -1100,5 +67,1043 @@ "QuestSequence", "Author" ], - "additionalProperties": false + "additionalProperties": false, + "$defs": { + "Step": { + "type": "object", + "properties": { + "DataId": { + "type": "integer", + "description": "The data id of the NPC/Object/Aetheryte/Aether Current", + "exclusiveMinimum": 0 + }, + "Position": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Vector3" + }, + "StopDistance": { + "type": [ + "number", + "null" + ], + "description": "Set if pathfinding should stop closer or further away from the default stop distance", + "exclusiveMinimum": 0 + }, + "IgnoreDistanceToObject": { + "type": "boolean", + "description": "Most interactions with objects are checked for a Y (height) difference of 2 in-game units. If set to true, the game won't attempt to get any closer if the height difference is larger than this." + }, + "TerritoryId": { + "type": "integer", + "description": "The territory id associated with the location", + "exclusiveMinimum": 0 + }, + "TargetTerritoryId": { + "type": "integer", + "description": "If set, this step is complete (movement-wise) if this territory id is reached", + "exclusiveMinimum": 0 + }, + "InteractionType": { + "type": "string", + "description": "What to do at the position", + "enum": [ + "None", + "Interact", + "WalkTo", + "AttuneAethernetShard", + "AttuneAetheryte", + "AttuneAetherCurrent", + "Combat", + "UseItem", + "EquipItem", + "EquipRecommended", + "Say", + "Emote", + "Action", + "WaitForNpcAtPosition", + "WaitForManualProgress", + "Duty", + "SinglePlayerDuty", + "Jump", + "Dive", + "Instruction", + "AcceptQuest", + "CompleteQuest", + "InitiateLeve" + ] + }, + "Disabled": { + "description": "Whether this step is disabled (see SkipIf for more control)", + "type": "boolean" + }, + "DisableNavmesh": { + "description": "If true, will go to the position in a straight line instead of using pathfinding", + "type": "boolean" + }, + "Mount": { + "type": [ + "boolean", + "null" + ], + "description": "If true, will mount regardless of distance to position. If false, will unmount." + }, + "Fly": { + "type": "boolean", + "description": "If true and flying is unlocked in a zone, will use a flight path" + }, + "Land": { + "type": "boolean", + "description": "If true and flying, will attempt to land on the ground" + }, + "Sprint": { + "type": [ + "boolean", + "null" + ] + }, + "AetheryteShortcut": { + "description": "The Aetheryte to teleport to (before moving)", + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" + }, + "AethernetShortcut": { + "type": "array", + "description": "A pair of aethernet locations (from + to) to use as a shortcut", + "minItems": 2, + "maxItems": 2, + "items": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/AethernetShard" + } + }, + "ItemId": { + "type": [ + "number", + "null" + ], + "description": "The Item to use", + "exclusiveMinimum": 0 + }, + "SkipConditions": { + "type": "object", + "properties": { + "StepIf": { + "type": "object", + "properties": { + "Never": { + "type": "boolean" + }, + "CompletionQuestVariablesFlags": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/CompletionFlags" + }, + "Flying": { + "type": "string", + "enum": [ + "Locked", + "Unlocked" + ] + }, + "Chocobo": { + "type": "string", + "enum": [ + "Locked", + "Unlocked" + ] + }, + "NotTargetable": { + "type": "boolean" + }, + "InTerritory": { + "type": "array", + "items": { + "type": "integer" + } + }, + "NotInTerritory": { + "type": "array", + "items": { + "type": "integer" + } + }, + "Item": { + "type": "object", + "properties": { + "NotInInventory": { + "type": "boolean" + } + } + }, + "QuestsAccepted": { + "type": "array", + "items": { + "type": "number" + } + }, + "QuestsCompleted": { + "type": "array", + "items": { + "type": "number" + } + }, + "AetheryteLocked": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" + }, + "AetheryteUnlocked": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" + }, + "NearPosition": { + "type": "object", + "properties": { + "Position": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Vector3" + }, + "MaximumDistance": { + "type": "number" + } + }, + "required": [ + "Position", + "MaximumDistance" + ], + "additionalProperties": false + }, + "ExtraCondition": { + "type": "string", + "enum": [ + "WakingSandsMainArea", + "RisingStonesSolar" + ] + } + }, + "additionalProperties": false + }, + "AetheryteShortcutIf": { + "type": "object", + "properties": { + "Never": { + "type": "boolean" + }, + "InSameTerritory": { + "type": "boolean" + }, + "InTerritory": { + "type": "array", + "items": { + "type": "integer" + } + }, + "AetheryteLocked": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" + }, + "AetheryteUnlocked": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" + } + }, + "additionalProperties": false + }, + "AethernetShortcutIf": { + "type": "object", + "properties": { + "Never": { + "type": "boolean" + }, + "InSameTerritory": { + "type": "boolean" + }, + "AetheryteLocked": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" + }, + "AetheryteUnlocked": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "CompletionQuestVariablesFlags": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/CompletionFlags" + }, + "RequiredQuestVariables": { + "type": "array", + "description": "Certain quests (primarily beast tribes/allied societies) have a RNG element to spawning targets, and the step should be skipped in its entirety if none of the sets below match", + "minItems": 6, + "maxItems": 6, + "items": { + "type": [ + "array", + "null" + ], + "items": { + "type": [ + "number", + "object" + ], + "properties": { + "High": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "maximum": 15 + }, + "Low": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "maximum": 15 + } + }, + "minimum": 0, + "maximum": 255 + } + } + }, + "RequiredGatheredItems": { + "type": "array", + "items": { + "type": "object", + "properties": { + "ItemId": { + "type": "number" + }, + "AlternativeItemId": { + "description": "For leves that allow you to gather two items with different chance percentage, this is the preferred item if the gathering chance is 100% (after buffs)", + "type": "number" + }, + "ItemCount": { + "type": "number", + "exclusiveMinimum": 0 + }, + "Collectability": { + "type": "number", + "minimum": 0, + "maximum": 1000 + } + }, + "required": [ + "ItemId", + "ItemCount" + ] + } + }, + "DelaySecondsAtStart": { + "description": "Time to wait before starting", + "type": [ + "number", + "null" + ] + }, + "Comment": { + "type": "string" + } + }, + "required": [ + "TerritoryId", + "InteractionType" + ], + "allOf": [ + { + "if": { + "properties": { + "InteractionType": { + "const": "Interact" + } + } + }, + "then": { + "required": [ + "DataId" + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "WalkTo" + } + } + }, + "then": { + "required": [ + "Position" + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "AttuneAetheryte" + } + } + }, + "then": { + "properties": { + "Aetheryte": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" + }, + "DataId": { + "type": "null" + }, + "Position": { + "type": "null" + } + }, + "required": [ + "Aetheryte" + ] + }, + "else": { + "properties": { + "Aetheryte": { + "type": "null" + } + } + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "AttuneAethernetShard" + } + } + }, + "then": { + "properties": { + "AethernetShard": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/AethernetShard" + }, + "DataId": { + "type": "null" + }, + "Position": { + "type": "null" + } + }, + "required": [ + "AethernetShard" + ] + }, + "else": { + "properties": { + "AethernetShard": { + "type": "null" + } + } + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "AttuneAetherCurrent" + } + } + }, + "then": { + "properties": { + "AetherCurrentId": { + "type": "integer", + "description": "The aether current id, used to check if a given aetheryte is unlocked", + "exclusiveMinimum": 0 + } + }, + "required": [ + "DataId", + "Position", + "AetherCurrentId" + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "Combat" + } + } + }, + "then": { + "properties": { + "EnemySpawnType": { + "type": "string", + "description": "Determines how enemy spawning is handled in combat locations", + "enum": [ + "AutoOnEnterArea", + "AfterInteraction", + "AfterItemUse", + "OverworldEnemies" + ] + }, + "KillEnemyDataIds": { + "description": "The enemy data ids which are supposed to be killed", + "type": "array", + "items": { + "type": "integer" + } + }, + "ComplexCombatData": { + "description": "If multiple different enemies are supposed to be killed in a single quest step, this typically is handled via items", + "type": "array", + "items": { + "type": "object", + "properties": { + "DataId": { + "description": "The enemy data id which is supposed to be killed", + "type": "integer" + }, + "MinimumKillCount": { + "description": "Overworld mobs: If this number of mobs has been killed, will wait a bit before attempting to pull another mob to see if the quest progresses", + "type": "integer" + }, + "RewardItemId": { + "type": "integer" + }, + "RewardItemCount": { + "type": "integer" + }, + "CompletionQuestVariablesFlags": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/CompletionFlags" + }, + "IgnoreQuestMarker": { + "type": "boolean" + } + }, + "required": [ + "DataId" + ] + } + }, + "CombatDelaySecondsAtStart": { + "type": "number" + } + }, + "required": [ + "Position", + "EnemySpawnType" + ], + "oneOf": [ + { + "required": [ + "KillEnemyDataIds" + ] + }, + { + "required": [ + "ComplexCombatData" + ] + } + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "UseItem" + }, + "ItemId": { + "not": { + "const": 30362 + } + } + } + }, + "then": { + "required": [ + "Position" + ] + } + }, + { + "if": { + "anyOf": [ + { + "properties": { + "InteractionType": { + "const": "UseItem" + } + } + }, + { + "properties": { + "InteractionType": { + "const": "Combat" + }, + "EnemySpawnType": { + "const": "AfterItemUse" + } + } + } + ] + }, + "then": { + "properties": { + "GroundTarget": { + "type": [ + "boolean", + "null" + ], + "default": false + } + }, + "required": [ + "ItemId" + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "EquipItem" + } + } + }, + "then": { + "required": [ + "ItemId" + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "anyOf": [ + { + "const": "Emote" + }, + { + "const": "AcceptQuest" + }, + { + "const": "CompleteQuest" + }, + { + "const": "SinglePlayerDuty" + } + ] + } + } + }, + "then": { + "properties": { + "Emote": { + "type": "string", + "description": "The emote to use", + "enum": [ + "stretch", + "wave", + "rally", + "deny", + "pray", + "slap", + "doubt", + "psych", + "cheer", + "happy", + "poke", + "flex", + "soothe", + "me", + "welcome", + "imperialsalute", + "pet", + "dance", + "respect", + "lookout", + "kneel", + "bow", + "uchiwasshoi", + "clap", + "victorypose" + ] + } + } + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "Emote" + } + } + }, + "then": { + "required": [ + "Position", + "Emote" + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "anyOf": [ + { + "const": "Say" + }, + { + "const": "CompleteQuest" + } + ] + } + } + }, + "then": { + "properties": { + "ChatMessage": { + "type": "object", + "description": "The text to use with /say", + "properties": { + "ExcelSheet": { + "type": "string" + }, + "Key": { + "type": "string" + } + }, + "required": [ + "Key" + ] + } + } + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "Say" + } + } + }, + "then": { + "required": [ + "ChatMessage" + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "Action" + } + } + }, + "then": { + "properties": { + "Action": { + "type": "string", + "description": "The action to use", + "enum": [ + "Cure", + "Esuna", + "Physick", + "Buffet", + "Fumigate", + "Siphon Snout", + "Red Gulal", + "Yellow Gulal", + "Blue Gulal" + ] + } + }, + "required": [ + "Action" + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "Jump" + } + } + }, + "then": { + "properties": { + "JumpDestination": { + "type": "object", + "properties": { + "Position": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Vector3" + }, + "StopDistance": { + "type": [ + "number", + "null" + ], + "description": "Set if pathfinding should stop closer or further away from the default stop distance", + "exclusiveMinimum": 0 + }, + "DelaySeconds": { + "type": [ + "number", + "null" + ] + }, + "Type": { + "type": "string", + "enum": [ + "SingleJump", + "RepeatedJumps" + ], + "default": "SingleJump" + } + }, + "required": [ + "Position" + ] + } + }, + "required": [ + "Position", + "JumpDestination" + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "anyOf": [ + { + "const": "Interact" + }, + { + "const": "SinglePlayerDuty" + }, + { + "const": "WaitForManualProgress" + }, + { + "const": "AcceptQuest" + }, + { + "const": "CompleteQuest" + }, + { + "const": "Instruction" + }, + { + "const": "Say" + }, + { + "const": "Emote" + }, + { + "const": "UseItem" + } + ] + } + } + }, + "then": { + "properties": { + "DialogueChoices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Type": { + "type": "string", + "enum": [ + "YesNo", + "List" + ] + }, + "ExcelSheet": { + "type": "string" + } + }, + "required": [ + "Type" + ], + "allOf": [ + { + "if": { + "properties": { + "Type": { + "const": "YesNo" + } + } + }, + "then": { + "properties": { + "Prompt": { + "type": [ + "string", + "integer" + ] + }, + "Yes": { + "type": "boolean", + "default": true + } + }, + "required": [ + "Prompt", + "Yes" + ] + } + }, + { + "if": { + "properties": { + "Type": { + "const": "List" + } + } + }, + "then": { + "properties": { + "Prompt": { + "type": [ + "string", + "integer", + "null" + ] + }, + "Answer": { + "type": [ + "string", + "integer" + ] + } + }, + "required": [ + "Prompt", + "Answer" + ] + } + } + ] + } + }, + "PointMenuChoices": { + "type": "array", + "items": { + "type": "integer", + "minimum": 0 + } + } + } + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "Duty" + } + } + }, + "then": { + "properties": { + "ContentFinderConditionId": { + "type": "integer", + "exclusiveMinimum": 0, + "exclusiveMaximum": 3000 + }, + "DataId": { + "type": "null" + }, + "Position": { + "type": "null" + } + }, + "required": [ + "ContentFinderConditionId" + ] + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "WaitForNpcAtPosition" + } + } + }, + "then": { + "properties": { + "NpcWaitDistance": { + "type": "number", + "exclusiveMinimum": 0 + } + } + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "AcceptQuest" + } + } + }, + "then": { + "properties": { + "PickUpQuestId": { + "type": [ + "null", + "number", + "string" + ], + "description": "Determines the quest which should be accepted. If empty/null, accepts the quest corresponding to the file name." + } + } + } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "CompleteQuest" + } + } + }, + "then": { + "properties": { + "TurnInQuestId": { + "type": [ + "null", + "number", + "string" + ], + "description": "Determines the quest which should be turned in. If empty/null, turns in the quest corresponding to the file name." + }, + "NextQuestId": { + "type": [ + "null", + "number", + "string" + ], + "description": "For quest chains (e.g. DT healer role quests) Which quest to do next, given that you meet the required level." + } + } + } + } + ], + "not": { + "anyOf": [ + { + "required": [ + "SkipIf" + ] + } + ] + } + } + } } diff --git a/Questionable.Model/Common/EAetheryteLocation.cs b/Questionable.Model/Common/EAetheryteLocation.cs index 3313d4df3..875e1a5f4 100644 --- a/Questionable.Model/Common/EAetheryteLocation.cs +++ b/Questionable.Model/Common/EAetheryteLocation.cs @@ -87,6 +87,15 @@ public enum EAetheryteLocation IshgardGatesOfJudgement = 88, IshgardFirmament = 100001, + FirmamentMendicantsCourt = 2011373, + FirmamentMattock = 2011374, + FirmamentNewNest = 2011384, + FirmanentSaintRoellesDais = 2011385, + FirmamentFeatherfall = 2011386, + FirmamentHoarfrostHall = 2011387, + FirmamentWesternRisensongQuarter = 2011388, + FIrmamentEasternRisensongQuarter = 2011389, + Idyllshire = 75, IdyllshireWest = 90, IdyllshirePrologueGate = 91, @@ -251,3 +260,17 @@ public enum EAetheryteLocation LivingMemoryLeynodePyro = 214, LivingMemoryLeynodeAero = 215, } + +public static class EAetheryteLocationExtensions +{ + public static bool IsFirmamentAetheryte(this EAetheryteLocation aetheryteLocation) => + aetheryteLocation is EAetheryteLocation.IshgardFirmament + or EAetheryteLocation.FirmamentMendicantsCourt + or EAetheryteLocation.FirmamentMattock + or EAetheryteLocation.FirmamentNewNest + or EAetheryteLocation.FirmanentSaintRoellesDais + or EAetheryteLocation.FirmamentFeatherfall + or EAetheryteLocation.FirmamentHoarfrostHall + or EAetheryteLocation.FirmamentWesternRisensongQuarter + or EAetheryteLocation.FIrmamentEasternRisensongQuarter; +} diff --git a/Questionable.Model/Gathering/GatheringRoot.cs b/Questionable.Model/Gathering/GatheringRoot.cs index c76f45c77..52da35eb2 100644 --- a/Questionable.Model/Gathering/GatheringRoot.cs +++ b/Questionable.Model/Gathering/GatheringRoot.cs @@ -2,6 +2,7 @@ using System.Text.Json.Serialization; using Questionable.Model.Common; using Questionable.Model.Common.Converter; +using Questionable.Model.Questing; using Questionable.Model.Questing.Converter; namespace Questionable.Model.Gathering; @@ -10,12 +11,8 @@ public sealed class GatheringRoot { [JsonConverter(typeof(StringListOrValueConverter))] public List Author { get; set; } = []; - public ushort TerritoryId { get; set; } - [JsonConverter(typeof(AetheryteConverter))] - public EAetheryteLocation? AetheryteShortcut { get; set; } - - public AethernetShortcut? AethernetShortcut { get; set; } + public List Steps { get; set; } = []; public bool? FlyBetweenNodes { get; set; } public List Groups { get; set; } = []; } diff --git a/Questionable.Model/Questing/Converter/AethernetShardConverter.cs b/Questionable.Model/Questing/Converter/AethernetShardConverter.cs index b1560c7c5..6b5e58349 100644 --- a/Questionable.Model/Questing/Converter/AethernetShardConverter.cs +++ b/Questionable.Model/Questing/Converter/AethernetShardConverter.cs @@ -58,6 +58,15 @@ public sealed class AethernetShardConverter() : EnumConverter _isInitialCheck || _questController.IsRunning; @@ -916,6 +919,46 @@ internal sealed class GameUiController : IDisposable addon->Close(true); } + private void TeleportTownPostSetup(AddonEvent type, AddonArgs args) + { + if (ShouldHandleUiInteractions && + _questController.HasCurrentTaskMatching(out AethernetShortcut.UseAethernetShortcut? aethernetShortcut) && + aethernetShortcut.From.IsFirmamentAetheryte()) + { + // this might be better via atkvalues; but this works for now + uint toIndex = aethernetShortcut.To switch + { + EAetheryteLocation.FirmamentMendicantsCourt => 0, + EAetheryteLocation.FirmamentMattock => 1, + EAetheryteLocation.FirmamentNewNest => 2, + EAetheryteLocation.FirmanentSaintRoellesDais => 3, + EAetheryteLocation.FirmamentFeatherfall => 4, + EAetheryteLocation.FirmamentHoarfrostHall => 5, + EAetheryteLocation.FirmamentWesternRisensongQuarter => 6, + EAetheryteLocation.FIrmamentEasternRisensongQuarter => 7, + _ => uint.MaxValue, + }; + + if (toIndex == uint.MaxValue) + return; + + _logger.LogInformation("Teleporting to {ToName} with menu index {ToIndex}", aethernetShortcut.From, + toIndex); + unsafe + { + var teleportToDestination = stackalloc AtkValue[] + { + new() { Type = ValueType.Int, Int = 11 }, + new() { Type = ValueType.UInt, UInt = toIndex } + }; + + var addon = (AtkUnitBase*)args.Addon; + addon->FireCallback(2, teleportToDestination); + addon->FireCallback(2, teleportToDestination, true); + } + } + } + private StringOrRegex? ResolveReference(Quest? quest, string? excelSheet, ExcelRef? excelRef, bool isRegExp) { if (excelRef == null) @@ -933,6 +976,7 @@ internal sealed class GameUiController : IDisposable public void Dispose() { + _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "TelepotTown", TeleportTownPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "GuildLeve", GuildLevePostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "JournalResult", JournalResultPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "HousingSelectBlock", HousingSelectBlockPostSetup); diff --git a/Questionable/Controller/GatheringController.cs b/Questionable/Controller/GatheringController.cs index f5a517fa7..aeb837d96 100644 --- a/Questionable/Controller/GatheringController.cs +++ b/Questionable/Controller/GatheringController.cs @@ -151,11 +151,12 @@ internal sealed unsafe class GatheringController : MiniTaskController() - .With(_currentRequest.Root.TerritoryId, MountTask.EMountIf.Always)); + .With(territoryId, MountTask.EMountIf.Always)); bool fly = currentNode.Fly.GetValueOrDefault(_currentRequest.Root.FlyBetweenNodes.GetValueOrDefault(true)) && - _gameFunctions.IsFlyingUnlocked(_currentRequest.Root.TerritoryId); + _gameFunctions.IsFlyingUnlocked(territoryId); if (currentNode.Locations.Count > 1) { Vector3 averagePosition = new Vector3 @@ -170,12 +171,12 @@ internal sealed unsafe class GatheringController : MiniTaskController() - .With(_currentRequest.Root.TerritoryId, pointOnFloor ?? averagePosition, 50f, fly: fly, + .With(territoryId, pointOnFloor ?? averagePosition, 50f, fly: fly, ignoreDistanceToObject: true)); } _taskQueue.Enqueue(_serviceProvider.GetRequiredService() - .With(_currentRequest.Root.TerritoryId, fly, currentNode)); + .With(territoryId, fly, currentNode)); _taskQueue.Enqueue(_serviceProvider.GetRequiredService() .With(currentNode.DataId, null, EInteractionType.InternalGather, true)); diff --git a/Questionable/Controller/QuestController.cs b/Questionable/Controller/QuestController.cs index ea397d841..a9cc65500 100644 --- a/Questionable/Controller/QuestController.cs +++ b/Questionable/Controller/QuestController.cs @@ -35,7 +35,7 @@ internal sealed class QuestController : MiniTaskController, IDi private readonly IToastGui _toastGui; private readonly Configuration _configuration; private readonly YesAlreadyIpc _yesAlreadyIpc; - private readonly IReadOnlyList _taskFactories; + private readonly TaskCreator _taskCreator; private readonly object _progressLock = new(); @@ -73,7 +73,7 @@ internal sealed class QuestController : MiniTaskController, IDi IToastGui toastGui, Configuration configuration, YesAlreadyIpc yesAlreadyIpc, - IEnumerable taskFactories) + TaskCreator taskCreator) : base(chatGui, logger) { _clientState = clientState; @@ -88,7 +88,7 @@ internal sealed class QuestController : MiniTaskController, IDi _toastGui = toastGui; _configuration = configuration; _yesAlreadyIpc = yesAlreadyIpc; - _taskFactories = taskFactories.ToList().AsReadOnly(); + _taskCreator = taskCreator; _condition.ConditionChange += OnConditionChange; _toastGui.Toast += OnNormalToast; @@ -607,34 +607,7 @@ internal sealed class QuestController : MiniTaskController, IDi try { - var newTasks = _taskFactories - .SelectMany(x => - { - IList tasks = x.CreateAllTasks(CurrentQuest.Quest, seq, step).ToList(); - - if (tasks.Count > 0 && _logger.IsEnabled(LogLevel.Trace)) - { - string factoryName = x.GetType().FullName ?? x.GetType().Name; - if (factoryName.Contains('.', StringComparison.Ordinal)) - factoryName = factoryName[(factoryName.LastIndexOf('.') + 1)..]; - - _logger.LogTrace("Factory {FactoryName} created Task {TaskNames}", - factoryName, string.Join(", ", tasks.Select(y => y.ToString()))); - } - - return tasks; - }) - .ToList(); - if (newTasks.Count == 0) - { - _logger.LogInformation("Nothing to execute for step?"); - return; - } - - _logger.LogInformation("Tasks for {QuestId}, {Sequence}, {Step}: {Tasks}", - CurrentQuest.Quest.Id, seq.Sequence, seq.Steps.IndexOf(step), - string.Join(", ", newTasks.Select(x => x.ToString()))); - foreach (var task in newTasks) + foreach (var task in _taskCreator.CreateTasks(CurrentQuest.Quest, seq, step)) _taskQueue.Enqueue(task); } catch (Exception e) diff --git a/Questionable/Controller/Steps/Shared/AethernetShortcut.cs b/Questionable/Controller/Steps/Shared/AethernetShortcut.cs index 6e7ad1649..1c45596db 100644 --- a/Questionable/Controller/Steps/Shared/AethernetShortcut.cs +++ b/Questionable/Controller/Steps/Shared/AethernetShortcut.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Numerics; using Dalamud.Game.ClientState.Conditions; +using Dalamud.Game.ClientState.Objects.Enums; using Dalamud.Plugin.Services; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -102,12 +103,9 @@ internal static class AethernetShortcut if (aetheryteData.CalculateDistance(playerPosition, territoryType, From) < aetheryteData.CalculateDistance(playerPosition, territoryType, To)) { - if (aetheryteData.CalculateDistance(playerPosition, territoryType, From) < 11) + if (aetheryteData.CalculateDistance(playerPosition, territoryType, From) < (From.IsFirmamentAetheryte() ? 11f : 4f)) { - logger.LogInformation("Using lifestream to teleport to {Destination}", To); - lifestreamIpc.Teleport(To); - - _teleported = true; + DoTeleport(); return true; } else if (From == EAetheryteLocation.SolutionNine) @@ -141,7 +139,7 @@ internal static class AethernetShortcut } } - MoveTo(From); + MoveTo(); return true; } } @@ -154,13 +152,32 @@ internal static class AethernetShortcut return false; } - private void MoveTo(EAetheryteLocation from) + private void MoveTo() { logger.LogInformation("Moving to aethernet shortcut"); _moving = true; movementController.NavigateTo(EMovementType.Quest, (uint)From, aetheryteData.Locations[From], false, true, - AetheryteConverter.IsLargeAetheryte(From) ? 10.9f : 6.9f); + From.IsFirmamentAetheryte() + ? 4.4f + : AetheryteConverter.IsLargeAetheryte(From) + ? 10.9f + : 6.9f); + } + + private void DoTeleport() + { + if (From.IsFirmamentAetheryte()) + { + logger.LogInformation("Using manual teleport interaction"); + _teleported = gameFunctions.InteractWith((uint)From, ObjectKind.EventObj); + } + else + { + logger.LogInformation("Using lifestream to teleport to {Destination}", To); + lifestreamIpc.Teleport(To); + _teleported = true; + } } public ETaskResult Update() @@ -173,7 +190,7 @@ internal static class AethernetShortcut if (condition[ConditionFlag.Mounted]) { _triedMounting = false; - MoveTo(From); + MoveTo(); return ETaskResult.StillRunning; } else @@ -194,10 +211,7 @@ internal static class AethernetShortcut if (!_teleported) { - logger.LogInformation("Using lifestream to teleport to {Destination}", To); - lifestreamIpc.Teleport(To); - - _teleported = true; + DoTeleport(); return ETaskResult.StillRunning; } diff --git a/Questionable/Controller/Steps/Shared/GatheringRequiredItems.cs b/Questionable/Controller/Steps/Shared/GatheringRequiredItems.cs index 7817f49ca..f9af944dd 100644 --- a/Questionable/Controller/Steps/Shared/GatheringRequiredItems.cs +++ b/Questionable/Controller/Steps/Shared/GatheringRequiredItems.cs @@ -1,13 +1,14 @@ using System; using System.Collections.Generic; +using System.Linq; using Dalamud.Game.Text; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using LLib.GameData; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using Questionable.Controller.Steps.Common; using Questionable.Data; -using Questionable.GatheringPaths; using Questionable.Model; using Questionable.Model.Gathering; using Questionable.Model.Questing; @@ -23,7 +24,7 @@ internal static class GatheringRequiredItems IClientState clientState, GatheringData gatheringData, TerritoryData territoryData, - AetheryteData aetheryteData) : ITaskFactory + ILogger logger) : ITaskFactory { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { @@ -50,24 +51,25 @@ internal static class GatheringRequiredItems if (HasRequiredItems(requiredGatheredItems)) continue; - if (gatheringRoot.AetheryteShortcut != null && clientState.TerritoryType != gatheringRoot.TerritoryId) + using (var _ = logger.BeginScope("Gathering(inner)")) { - ushort expectedTerritoryId = gatheringRoot.TerritoryId; - if (gatheringRoot.AethernetShortcut != null) - expectedTerritoryId = aetheryteData.TerritoryIds[gatheringRoot.AethernetShortcut.From]; - - yield return serviceProvider.GetRequiredService() - .With(null, gatheringRoot.AetheryteShortcut.Value, expectedTerritoryId); + QuestSequence gatheringSequence = new QuestSequence + { + Sequence = 0, + Steps = gatheringRoot.Steps + }; + foreach (var gatheringStep in gatheringSequence.Steps) + { + foreach (var task in serviceProvider.GetRequiredService() + .CreateTasks(quest, gatheringSequence, gatheringStep)) + if (task is not WaitAtEnd.NextStep) + yield return task; + } } - if (gatheringRoot.AethernetShortcut != null) - { - yield return serviceProvider.GetRequiredService() - .With(gatheringRoot.AethernetShortcut.From, gatheringRoot.AethernetShortcut.To); - } - - yield return new WaitConditionTask(() => clientState.TerritoryType == gatheringRoot.TerritoryId, - $"Wait(territory: {territoryData.GetNameAndId(gatheringRoot.TerritoryId)})"); + ushort territoryId = gatheringRoot.Steps.Last().TerritoryId; + yield return new WaitConditionTask(() => clientState.TerritoryType == territoryId, + $"Wait(territory: {territoryData.GetNameAndId(territoryId)})"); yield return new WaitConditionTask(() => movementController.IsNavmeshReady, "Wait(navmesh ready)"); diff --git a/Questionable/Controller/Steps/TaskCreator.cs b/Questionable/Controller/Steps/TaskCreator.cs new file mode 100644 index 000000000..c5e8255c5 --- /dev/null +++ b/Questionable/Controller/Steps/TaskCreator.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Extensions.Logging; +using Questionable.Model; +using Questionable.Model.Questing; + +namespace Questionable.Controller.Steps; + +internal sealed class TaskCreator +{ + private readonly IReadOnlyList _taskFactories; + private readonly ILogger _logger; + + public TaskCreator(IEnumerable taskFactories, ILogger logger) + { + _taskFactories = taskFactories.ToList().AsReadOnly(); + _logger = logger; + } + + public IReadOnlyList CreateTasks(Quest quest, QuestSequence sequence, QuestStep step) + { + var newTasks = _taskFactories + .SelectMany(x => + { + IList tasks = x.CreateAllTasks(quest, sequence, step).ToList(); + + if (tasks.Count > 0 && _logger.IsEnabled(LogLevel.Trace)) + { + string factoryName = x.GetType().FullName ?? x.GetType().Name; + if (factoryName.Contains('.', StringComparison.Ordinal)) + factoryName = factoryName[(factoryName.LastIndexOf('.') + 1)..]; + + _logger.LogTrace("Factory {FactoryName} created Task {TaskNames}", + factoryName, string.Join(", ", tasks.Select(y => y.ToString()))); + } + + return tasks; + }) + .ToList(); + if (newTasks.Count == 0) + _logger.LogInformation("Nothing to execute for step?"); + else + { + _logger.LogInformation("Tasks for {QuestId}, {Sequence}, {Step}: {Tasks}", + quest.Id, sequence.Sequence, sequence.Steps.IndexOf(step), + string.Join(", ", newTasks.Select(x => x.ToString()))); + } + + return newTasks; + } +} diff --git a/Questionable/Data/AetheryteData.cs b/Questionable/Data/AetheryteData.cs index 74d183130..b843c70da 100644 --- a/Questionable/Data/AetheryteData.cs +++ b/Questionable/Data/AetheryteData.cs @@ -3,6 +3,7 @@ using System.Collections.ObjectModel; using System.Linq; using System.Numerics; using Dalamud.Plugin.Services; +using Dalamud.Utility; using Lumina.Excel.GeneratedSheets; using Questionable.Model.Common; @@ -14,7 +15,25 @@ internal sealed class AetheryteData { Dictionary aethernetNames = new(); Dictionary territoryIds = new(); - Dictionary aethernetGroups = new(); + Dictionary aethernetGroups = new(); + + + void ConfigureAetheryte(EAetheryteLocation aetheryteLocation, string name, ushort territoryId, + ushort aethernetGroup) + { + aethernetNames[aetheryteLocation] = name; + territoryIds[aetheryteLocation] = territoryId; + aethernetGroups[aetheryteLocation] = aethernetGroup; + } + + void ConfigureAetheryteWithPlaceName(EAetheryteLocation aetheryteLocation, uint placeNameId, ushort territoryId) + { + ConfigureAetheryte(aetheryteLocation, + dataManager.GetExcelSheet()!.GetRow(placeNameId)!.Name.ToDalamudString().TextValue, + territoryId, + (ushort)((int)aetheryteLocation / 100)); + } + foreach (var aetheryte in dataManager.GetExcelSheet()!.Where(x => x.RowId > 0)) { string? aethernetName = aetheryte.AethernetName?.Value?.Name.ToString(); @@ -28,9 +47,16 @@ internal sealed class AetheryteData aethernetGroups[(EAetheryteLocation)aetheryte.RowId] = aetheryte.AethernetGroup; } - aethernetNames[EAetheryteLocation.IshgardFirmament] = "Firmament"; - territoryIds[EAetheryteLocation.IshgardFirmament] = 886; - aethernetGroups[EAetheryteLocation.IshgardFirmament] = aethernetGroups[EAetheryteLocation.Ishgard]; + ConfigureAetheryte(EAetheryteLocation.IshgardFirmament, "Firmament", 886, + aethernetGroups[EAetheryteLocation.Ishgard]); + ConfigureAetheryteWithPlaceName(EAetheryteLocation.FirmamentMendicantsCourt, 3436, 886); + ConfigureAetheryteWithPlaceName(EAetheryteLocation.FirmamentMattock, 3473, 886); + ConfigureAetheryteWithPlaceName(EAetheryteLocation.FirmamentNewNest, 3475, 886); + ConfigureAetheryteWithPlaceName(EAetheryteLocation.FirmanentSaintRoellesDais, 3474, 886); + ConfigureAetheryteWithPlaceName(EAetheryteLocation.FirmamentFeatherfall, 3525, 886); + ConfigureAetheryteWithPlaceName(EAetheryteLocation.FirmamentHoarfrostHall, 3528, 886); + ConfigureAetheryteWithPlaceName(EAetheryteLocation.FirmamentWesternRisensongQuarter, 3646, 886); + ConfigureAetheryteWithPlaceName(EAetheryteLocation.FIrmamentEasternRisensongQuarter, 3645, 886); AethernetNames = aethernetNames.AsReadOnly(); TerritoryIds = territoryIds.AsReadOnly(); @@ -207,6 +233,15 @@ internal sealed class AetheryteData { EAetheryteLocation.RadzAtHanKama, new(129.59485f, 26.993164f, 13.473633f) }, { EAetheryteLocation.RadzAtHanHighCrucible, new(57.90796f, -24.704407f, -210.6203f) }, + { EAetheryteLocation.FirmamentMendicantsCourt, new(23.941406f, -16.006714f, 169.35986f) }, + { EAetheryteLocation.FirmamentMattock, new(76.035645f, -18.509216f, 10.299805f) }, + { EAetheryteLocation.FirmamentNewNest, new(149.49255f, -50.003845f, 98.55798f) }, + { EAetheryteLocation.FirmanentSaintRoellesDais, new(207.75159f, -40.024475f, -25.589417f) }, + { EAetheryteLocation.FirmamentFeatherfall, new(-78.78235f, -0.015319824f, 75.97461f) }, + { EAetheryteLocation.FirmamentHoarfrostHall, new(-132.55518f, 9.964111f, -14.66394f) }, + { EAetheryteLocation.FirmamentWesternRisensongQuarter, new(-91.722046f, -0.015319824f, -115.19043f) }, + { EAetheryteLocation.FIrmamentEasternRisensongQuarter, new(114.3053f, -20.004639f, -107.43884f) }, + { EAetheryteLocation.LabyrinthosArcheion, new(443.5338f, 170.6416f, -476.18835f) }, { EAetheryteLocation.LabyrinthosSharlayanHamlet, new(8.377136f, -27.542603f, -46.67737f) }, { EAetheryteLocation.LabyrinthosAporia, new(-729.18286f, -27.634155f, 302.1438f) }, @@ -276,7 +311,7 @@ internal sealed class AetheryteData public ReadOnlyDictionary AethernetNames { get; } public ReadOnlyDictionary TerritoryIds { get; } - public ReadOnlyDictionary AethernetGroups { get; } + public ReadOnlyDictionary AethernetGroups { get; } public IReadOnlyList TownTerritoryIds { get; set; } public float CalculateDistance(Vector3 fromPosition, ushort fromTerritoryType, EAetheryteLocation to) diff --git a/Questionable/Functions/AetheryteFunctions.cs b/Questionable/Functions/AetheryteFunctions.cs index 0388b0246..afdedf4d8 100644 --- a/Questionable/Functions/AetheryteFunctions.cs +++ b/Questionable/Functions/AetheryteFunctions.cs @@ -41,7 +41,7 @@ internal sealed unsafe class AetheryteFunctions public bool IsAetheryteUnlocked(EAetheryteLocation aetheryteLocation) { - if (aetheryteLocation == EAetheryteLocation.IshgardFirmament) + if (aetheryteLocation.IsFirmamentAetheryte()) return _serviceProvider.GetRequiredService().IsQuestComplete(new QuestId(3672)); return IsAetheryteUnlocked((uint)aetheryteLocation, out _); } diff --git a/Questionable/QuestionablePlugin.cs b/Questionable/QuestionablePlugin.cs index 9be89b8b4..e51c7b3ff 100644 --- a/Questionable/QuestionablePlugin.cs +++ b/Questionable/QuestionablePlugin.cs @@ -171,6 +171,8 @@ public sealed class QuestionablePlugin : IDalamudPlugin WaitAtEnd.WaitObjectAtPosition>(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); + + serviceCollection.AddSingleton(); } private static void AddControllers(ServiceCollection serviceCollection) diff --git a/Questionable/Validation/Validators/AethernetShortcutValidator.cs b/Questionable/Validation/Validators/AethernetShortcutValidator.cs index 13a00aa87..2dd107f72 100644 --- a/Questionable/Validation/Validators/AethernetShortcutValidator.cs +++ b/Questionable/Validation/Validators/AethernetShortcutValidator.cs @@ -29,8 +29,8 @@ internal sealed class AethernetShortcutValidator : IQuestValidator if (aethernetShortcut == null) return null; - byte fromGroup = _aetheryteData.AethernetGroups.GetValueOrDefault(aethernetShortcut.From); - byte toGroup = _aetheryteData.AethernetGroups.GetValueOrDefault(aethernetShortcut.To); + ushort fromGroup = _aetheryteData.AethernetGroups.GetValueOrDefault(aethernetShortcut.From); + ushort toGroup = _aetheryteData.AethernetGroups.GetValueOrDefault(aethernetShortcut.To); if (fromGroup != toGroup) { return new ValidationIssue