From 8b8c940d34b7005d766ec62c4e42c090f6a0c6bb Mon Sep 17 00:00:00 2001 From: AnimaMachinae Date: Fri, 18 Oct 2024 08:40:08 +0000 Subject: [PATCH 01/95] Upload files to "QuestPaths/3.x - Heavensward/Class Quests/DRG" 50-54 quests --- .../DRG/1689_Sky's the Limit.json | 108 +++++++++++++ .../Class Quests/DRG/1690_Days of Azure.json | 112 ++++++++++++++ .../DRG/1691_Heart of Justice.json | 81 ++++++++++ .../DRG/1692_Sworn Upon a Lance.json | 146 ++++++++++++++++++ 4 files changed, 447 insertions(+) create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/DRG/1689_Sky's the Limit.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/DRG/1690_Days of Azure.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/DRG/1691_Heart of Justice.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/DRG/1692_Sworn Upon a Lance.json diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1689_Sky's the Limit.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1689_Sky's the Limit.json new file mode 100644 index 00000000..9f097305 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1689_Sky's the Limit.json @@ -0,0 +1,108 @@ +{ + "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013437, + "Position": { + "X": -580.5906, + "Y": 206.85785, + "Z": -407.64478 + }, + "TerritoryId": 155, + "InteractionType": "Combat", + "Land": true, + "Fly": true, + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 4478 + ], + "CompletionQuestVariablesFlags": [ + 1, + null, + null, + null, + null, + null + ] + }, + { + "DataId": 1013437, + "Position": { + "X": -580.5906, + "Y": 206.85785, + "Z": -407.64478 + }, + "TerritoryId": 155, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest", + "NextQuestId": 1690 + } + ] + } + ] +} \ No newline at end of file diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1690_Days of Azure.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1690_Days of Azure.json new file mode 100644 index 00000000..fb0f7c95 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1690_Days of Azure.json @@ -0,0 +1,112 @@ +{ + "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013441, + "Position": { + "X": 468.58923, + "Y": 166.28001, + "Z": 256.73303 + }, + "TerritoryId": 397, + "InteractionType": "Combat", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Land": true, + "Fly": true, + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 4504 + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013441, + "Position": { + "X": 468.58923, + "Y": 166.28001, + "Z": 256.73303 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2006182, + "Position": { + "X": 197.40588, + "Y": 184.00854, + "Z": -102.80011 + }, + "TerritoryId": 397, + "InteractionType": "Combat", + "Land": true, + "Fly": true, + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 4486 + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1013445, + "Position": { + "X": 202.19727, + "Y": 183.6595, + "Z": -96.11658 + }, + "TerritoryId": 397, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} \ No newline at end of file diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1691_Heart of Justice.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1691_Heart of Justice.json new file mode 100644 index 00000000..00cf0daf --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1691_Heart of Justice.json @@ -0,0 +1,81 @@ +{ + "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1013445, + "Position": { + "X": 202.19727, + "Y": 183.6595, + "Z": -96.11658 + }, + "TerritoryId": 397, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013448, + "Position": { + "X": 83.26843, + "Y": 23.979126, + "Z": 2.3345947 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest", + "NextQuestId": 1690 + } + ] + } + ] +} \ No newline at end of file diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1692_Sworn Upon a Lance.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1692_Sworn Upon a Lance.json new file mode 100644 index 00000000..53d969e5 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1692_Sworn Upon a Lance.json @@ -0,0 +1,146 @@ +{ + "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013450, + "Position": { + "X": 84.30603, + "Y": 23.979128, + "Z": -12.802368 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013456, + "Position": { + "X": 489.82983, + "Y": 164.7244, + "Z": 266.25464 + }, + "TerritoryId": 397, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Land": true, + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1013457, + "Position": { + "X": 492.88147, + "Y": 164.6694, + "Z": 265.06445 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1013464, + "Position": { + "X": 133.47058, + "Y": 24.400866, + "Z": -6.149414 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest", + "NextQuestId": 1690 + } + ] + } + ] +} \ No newline at end of file From dec4fb64c8426bbfebf596289846e3e6e0d50eb0 Mon Sep 17 00:00:00 2001 From: AnimaMachinae Date: Tue, 22 Oct 2024 00:25:35 +0000 Subject: [PATCH 02/95] Upload files to "QuestPaths/3.x - Heavensward/Class Quests/DRG" --- .../DRG/1693_Dragoon's Errand.json | 158 ++++++++++++++++++ .../DRG/1694_Sanguine Dragoon.json | 141 ++++++++++++++++ 2 files changed, 299 insertions(+) create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/DRG/1694_Sanguine Dragoon.json diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json new file mode 100644 index 00000000..d0c8f5e0 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json @@ -0,0 +1,158 @@ +{ + "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": -48.009445, + "Y": 98.00955, + "Z": 106.47891 + }, + "TerritoryId": 397, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Fly": true, + "Land": true + }, + { + "DataId": 1013467, + "Position": { + "X": -51.10254, + "Y": 98.63026, + "Z": 105.1499 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013466, + "Position": { + "X": -155.5047, + "Y": 175.79733, + "Z": 693.26306 + }, + "TerritoryId": 397, + "InteractionType": "Combat", + "Fly": true, + "Land": true, + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 4482, + 5049 + ], + "CompletionQuestVariablesFlags": [ + 2, + null, + null, + null, + null, + null + ] + }, + { + "DataId": 1013466, + "Position": { + "X": -155.5047, + "Y": 175.79733, + "Z": 693.26306 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1012163, + "Position": { + "X": 128.25195, + "Y": 24.458832, + "Z": -0.6867676 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true + }, + { + "DataId": 1013470, + "Position": { + "X": 218.00562, + "Y": 222, + "Z": 346.45605 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} \ No newline at end of file diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1694_Sanguine Dragoon.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1694_Sanguine Dragoon.json new file mode 100644 index 00000000..4cc22951 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1694_Sanguine Dragoon.json @@ -0,0 +1,141 @@ +{ + "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013471, + "Position": { + "X": 503.53247, + "Y": -51.363117, + "Z": 79.941895 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "Fly": true, + "Land": true, + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013472, + "Position": { + "X": 396.35315, + "Y": -50.87535, + "Z": 73.04492 + }, + "TerritoryId": 398, + "InteractionType": "Combat", + "Fly": true, + "Land": true, + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 4497 + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1013471, + "Position": { + "X": 503.53247, + "Y": -51.363117, + "Z": 79.941895 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "Fly": true, + "Land": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1013476, + "Position": { + "X": 571.5571, + "Y": -36.290947, + "Z": 359.3651 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "Fly": true, + "Land": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest", + "NextQuestId": 1690 + } + ] + } + ] +} \ No newline at end of file From 1f709cdc5c4b8ddc58ec4159a32615d7af51180c Mon Sep 17 00:00:00 2001 From: AnimaMachinae Date: Tue, 22 Oct 2024 00:28:16 +0000 Subject: [PATCH 03/95] Upload files to "QuestPaths/3.x - Heavensward/Class Quests/DRG" --- .../Class Quests/DRG/1695_Dragoon's Fate.json | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/DRG/1695_Dragoon's Fate.json diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1695_Dragoon's Fate.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1695_Dragoon's Fate.json new file mode 100644 index 00000000..d4703aed --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1695_Dragoon's Fate.json @@ -0,0 +1,123 @@ +{ + "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013483, + "Position": { + "X": -272.26672, + "Y": 124.213005, + "Z": -23.361572 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "Fly": true, + "Land": true, + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013485, + "Position": { + "X": -360.1892, + "Y": 101.91492, + "Z": -178.79004 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "Fly": true, + "Land": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1013489, + "Position": { + "X": -429.099, + "Y": 121.59912, + "Z": -309.49878 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "Fly": true, + "Land": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1013494, + "Position": { + "X": -505.30255, + "Y": 120.61159, + "Z": -311.39087 + }, + "TerritoryId": 397, + "InteractionType": "SinglePlayerDuty", + "Fly": true, + "Land": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1013494, + "Position": { + "X": -505.30255, + "Y": 120.61159, + "Z": -311.39087 + }, + "TerritoryId": 397, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} \ No newline at end of file From eec08014e01733eb0e55256b4bd3c133cf6045f6 Mon Sep 17 00:00:00 2001 From: UcanPatates Date: Fri, 25 Oct 2024 15:33:45 +0000 Subject: [PATCH 04/95] =?UTF-8?q?Dosyalar=C4=B1=20"QuestPaths/5.x=20-=20Sh?= =?UTF-8?q?adowbringers/Class=20Quests/MCH"=20dizinine=20y=C3=BCkle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MCH/2907_Release the Hounds.json | 118 ++++++++++++ .../MCH/2908_Snouts Down, Tails Up.json | 176 ++++++++++++++++++ 2 files changed, 294 insertions(+) create mode 100644 QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2907_Release the Hounds.json create mode 100644 QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2908_Snouts Down, Tails Up.json diff --git a/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2907_Release the Hounds.json b/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2907_Release the Hounds.json new file mode 100644 index 00000000..c0f8cc4d --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2907_Release the Hounds.json @@ -0,0 +1,118 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "UcanPatates", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1022157, + "Position": { + "X": -323.9643, + "Y": 239.9684, + "Z": 372.91516 + }, + "TerritoryId": 155, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1022163, + "Position": { + "X": -395.95636, + "Y": 240.14958, + "Z": 340.59656 + }, + "TerritoryId": 155, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 3, + "Steps": [ + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1022167, + "Position": { + "X": -385.36664, + "Y": 232.23338, + "Z": 314.65625 + }, + "TerritoryId": 155, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + } + ] +} \ No newline at end of file diff --git a/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2908_Snouts Down, Tails Up.json b/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2908_Snouts Down, Tails Up.json new file mode 100644 index 00000000..ddb138da --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2908_Snouts Down, Tails Up.json @@ -0,0 +1,176 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "UcanPatates", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1022169, + "Position": { + "X": -58.854065, + "Y": 20.000334, + "Z": 42.83203 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "AetheryteShortcut": "Limsa Lominsa", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1022170, + "Position": { + "X": -172.6253, + "Y": 41.10136, + "Z": 175.89062 + }, + "TerritoryId": 128, + "InteractionType": "Interact", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] The Aftcastle" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 129 + ] + }, + "AethernetShortcutIf": { + "InSameTerritory": true + } + }, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_JOBMCH680_02908_Q1_000_000", + "Answer": "TEXT_JOBMCH680_02908_A1_000_001" + } + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1022173, + "Position": { + "X": 356.5575, + "Y": 351.0862, + "Z": -545.2201 + }, + "TerritoryId": 155, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Fly": true, + "ComplexCombatData": [ + { + "DataId": 7487, + "MinimumKillCount": 2 + } + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1022173, + "Position": { + "X": 356.5575, + "Y": 351.0862, + "Z": -545.2201 + }, + "TerritoryId": 155, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1022151, + "Position": { + "X": 115.098755, + "Y": 24.398598, + "Z": 2.822876 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + } + ] +} \ No newline at end of file From 64e45c72c23189b94414e9db05a1fe3d5b1dc691 Mon Sep 17 00:00:00 2001 From: UcanPatates Date: Fri, 25 Oct 2024 16:41:04 +0000 Subject: [PATCH 05/95] =?UTF-8?q?Dosyalar=C4=B1=20"QuestPaths/5.x=20-=20Sh?= =?UTF-8?q?adowbringers/Class=20Quests/MCH"=20dizinine=20y=C3=BCkle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MCH/2909_The Mongrel and the Knight.json | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2909_The Mongrel and the Knight.json diff --git a/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2909_The Mongrel and the Knight.json b/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2909_The Mongrel and the Knight.json new file mode 100644 index 00000000..619e768e --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2909_The Mongrel and the Knight.json @@ -0,0 +1,98 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "UcanPatates", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "AethernetShortcut": [ + "[Ishgard] Skysteel Manufactory", + "[Ishgard] Aetheryte Plaza" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + } + ] +} \ No newline at end of file From d5a9a6b06c67dc021829da6ced0f29988d853f77 Mon Sep 17 00:00:00 2001 From: UcanPatates Date: Fri, 25 Oct 2024 20:33:25 +0000 Subject: [PATCH 06/95] QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2907_Release the Hounds.json Sil --- .../MCH/2907_Release the Hounds.json | 118 ------------------ 1 file changed, 118 deletions(-) delete mode 100644 QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2907_Release the Hounds.json diff --git a/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2907_Release the Hounds.json b/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2907_Release the Hounds.json deleted file mode 100644 index c0f8cc4d..00000000 --- a/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2907_Release the Hounds.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "UcanPatates", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "AcceptQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1022157, - "Position": { - "X": -323.9643, - "Y": 239.9684, - "Z": 372.91516 - }, - "TerritoryId": 155, - "InteractionType": "Interact", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1022163, - "Position": { - "X": -395.95636, - "Y": 240.14958, - "Z": 340.59656 - }, - "TerritoryId": 155, - "InteractionType": "SinglePlayerDuty", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 3, - "Steps": [ - ] - }, - { - "Sequence": 4, - "Steps": [ - { - "DataId": 1022167, - "Position": { - "X": -385.36664, - "Y": 232.23338, - "Z": 314.65625 - }, - "TerritoryId": 155, - "InteractionType": "Interact", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "CompleteQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - } - ] -} \ No newline at end of file From d41febd9f30ab8b57b856328a25224bb479249c2 Mon Sep 17 00:00:00 2001 From: UcanPatates Date: Fri, 25 Oct 2024 20:33:30 +0000 Subject: [PATCH 07/95] QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2908_Snouts Down, Tails Up.json Sil --- .../MCH/2908_Snouts Down, Tails Up.json | 176 ------------------ 1 file changed, 176 deletions(-) delete mode 100644 QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2908_Snouts Down, Tails Up.json diff --git a/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2908_Snouts Down, Tails Up.json b/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2908_Snouts Down, Tails Up.json deleted file mode 100644 index ddb138da..00000000 --- a/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2908_Snouts Down, Tails Up.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "UcanPatates", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "AcceptQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1022169, - "Position": { - "X": -58.854065, - "Y": 20.000334, - "Z": 42.83203 - }, - "TerritoryId": 129, - "InteractionType": "Interact", - "AetheryteShortcut": "Limsa Lominsa", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1022170, - "Position": { - "X": -172.6253, - "Y": 41.10136, - "Z": 175.89062 - }, - "TerritoryId": 128, - "InteractionType": "Interact", - "AetheryteShortcut": "Limsa Lominsa", - "AethernetShortcut": [ - "[Limsa Lominsa] Aetheryte Plaza", - "[Limsa Lominsa] The Aftcastle" - ], - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true, - "InTerritory": [ - 129 - ] - }, - "AethernetShortcutIf": { - "InSameTerritory": true - } - }, - "DialogueChoices": [ - { - "Type": "List", - "Prompt": "TEXT_JOBMCH680_02908_Q1_000_000", - "Answer": "TEXT_JOBMCH680_02908_A1_000_001" - } - ] - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "DataId": 1022173, - "Position": { - "X": 356.5575, - "Y": 351.0862, - "Z": -545.2201 - }, - "TerritoryId": 155, - "InteractionType": "Combat", - "EnemySpawnType": "AfterInteraction", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Fly": true, - "ComplexCombatData": [ - { - "DataId": 7487, - "MinimumKillCount": 2 - } - ], - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 4, - "Steps": [ - { - "DataId": 1022173, - "Position": { - "X": 356.5575, - "Y": 351.0862, - "Z": -545.2201 - }, - "TerritoryId": 155, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 5, - "Steps": [ - { - "DataId": 1022151, - "Position": { - "X": 115.098755, - "Y": 24.398598, - "Z": 2.822876 - }, - "TerritoryId": 418, - "InteractionType": "Interact", - "AetheryteShortcut": "Ishgard", - "AethernetShortcut": [ - "[Ishgard] Aetheryte Plaza", - "[Ishgard] The Forgotten Knight" - ], - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "CompleteQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - } - ] -} \ No newline at end of file From 6fcfe77b2114fc840da9e293714c56e5230adb4b Mon Sep 17 00:00:00 2001 From: UcanPatates Date: Fri, 25 Oct 2024 20:33:34 +0000 Subject: [PATCH 08/95] QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2909_The Mongrel and the Knight.json Sil --- .../MCH/2909_The Mongrel and the Knight.json | 98 ------------------- 1 file changed, 98 deletions(-) delete mode 100644 QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2909_The Mongrel and the Knight.json diff --git a/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2909_The Mongrel and the Knight.json b/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2909_The Mongrel and the Knight.json deleted file mode 100644 index 619e768e..00000000 --- a/QuestPaths/5.x - Shadowbringers/Class Quests/MCH/2909_The Mongrel and the Knight.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "UcanPatates", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "AcceptQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1014577, - "Position": { - "X": -154.31458, - "Y": 16.999992, - "Z": -53.3609 - }, - "TerritoryId": 418, - "InteractionType": "Interact", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - }, - "AethernetShortcut": [ - "[Ishgard] Aetheryte Plaza", - "[Ishgard] Skysteel Manufactory" - ] - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "SinglePlayerDuty", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - }, - "AethernetShortcut": [ - "[Ishgard] Skysteel Manufactory", - "[Ishgard] Aetheryte Plaza" - ] - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "CompleteQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - } - ] -} \ No newline at end of file From 55ec23f6ec0c03bef7c9eac3e3d0623b751f6db9 Mon Sep 17 00:00:00 2001 From: UcanPatates Date: Fri, 25 Oct 2024 20:34:38 +0000 Subject: [PATCH 09/95] =?UTF-8?q?Dosyalar=C4=B1=20"QuestPaths/4.x=20-=20St?= =?UTF-8?q?ormblood/Class=20Quests/MCH"=20dizinine=20y=C3=BCkle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MCH/2907_Release the Hounds.json | 118 ++++++++++++ .../MCH/2908_Snouts Down, Tails Up.json | 176 ++++++++++++++++++ .../MCH/2909_The Mongrel and the Knight.json | 98 ++++++++++ 3 files changed, 392 insertions(+) create mode 100644 QuestPaths/4.x - Stormblood/Class Quests/MCH/2907_Release the Hounds.json create mode 100644 QuestPaths/4.x - Stormblood/Class Quests/MCH/2908_Snouts Down, Tails Up.json create mode 100644 QuestPaths/4.x - Stormblood/Class Quests/MCH/2909_The Mongrel and the Knight.json diff --git a/QuestPaths/4.x - Stormblood/Class Quests/MCH/2907_Release the Hounds.json b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2907_Release the Hounds.json new file mode 100644 index 00000000..c0f8cc4d --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2907_Release the Hounds.json @@ -0,0 +1,118 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "UcanPatates", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1022157, + "Position": { + "X": -323.9643, + "Y": 239.9684, + "Z": 372.91516 + }, + "TerritoryId": 155, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1022163, + "Position": { + "X": -395.95636, + "Y": 240.14958, + "Z": 340.59656 + }, + "TerritoryId": 155, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 3, + "Steps": [ + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1022167, + "Position": { + "X": -385.36664, + "Y": 232.23338, + "Z": 314.65625 + }, + "TerritoryId": 155, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + } + ] +} \ No newline at end of file diff --git a/QuestPaths/4.x - Stormblood/Class Quests/MCH/2908_Snouts Down, Tails Up.json b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2908_Snouts Down, Tails Up.json new file mode 100644 index 00000000..ddb138da --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2908_Snouts Down, Tails Up.json @@ -0,0 +1,176 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "UcanPatates", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1022169, + "Position": { + "X": -58.854065, + "Y": 20.000334, + "Z": 42.83203 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "AetheryteShortcut": "Limsa Lominsa", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1022170, + "Position": { + "X": -172.6253, + "Y": 41.10136, + "Z": 175.89062 + }, + "TerritoryId": 128, + "InteractionType": "Interact", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] The Aftcastle" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 129 + ] + }, + "AethernetShortcutIf": { + "InSameTerritory": true + } + }, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_JOBMCH680_02908_Q1_000_000", + "Answer": "TEXT_JOBMCH680_02908_A1_000_001" + } + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1022173, + "Position": { + "X": 356.5575, + "Y": 351.0862, + "Z": -545.2201 + }, + "TerritoryId": 155, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Fly": true, + "ComplexCombatData": [ + { + "DataId": 7487, + "MinimumKillCount": 2 + } + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1022173, + "Position": { + "X": 356.5575, + "Y": 351.0862, + "Z": -545.2201 + }, + "TerritoryId": 155, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1022151, + "Position": { + "X": 115.098755, + "Y": 24.398598, + "Z": 2.822876 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + } + ] +} \ No newline at end of file diff --git a/QuestPaths/4.x - Stormblood/Class Quests/MCH/2909_The Mongrel and the Knight.json b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2909_The Mongrel and the Knight.json new file mode 100644 index 00000000..619e768e --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2909_The Mongrel and the Knight.json @@ -0,0 +1,98 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "UcanPatates", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "AethernetShortcut": [ + "[Ishgard] Skysteel Manufactory", + "[Ishgard] Aetheryte Plaza" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + } + ] +} \ No newline at end of file From 23256c6abf73e25bda124ef51ed4a5737be80982 Mon Sep 17 00:00:00 2001 From: AnimaMachinae Date: Sat, 26 Oct 2024 02:35:48 +0000 Subject: [PATCH 10/95] Update QuestPaths/3.x - Heavensward/Class Quests/DRG/1689_Sky's the Limit.json --- .../DRG/1689_Sky's the Limit.json | 214 +++++++++--------- 1 file changed, 107 insertions(+), 107 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1689_Sky's the Limit.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1689_Sky's the Limit.json index 9f097305..20a0a6a7 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1689_Sky's the Limit.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1689_Sky's the Limit.json @@ -1,108 +1,108 @@ -{ - "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "AnimaMachinae", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - }, - "$": "Alberic" - }, - { - "DataId": 1006748, - "Position": { - "X": 217.88354, - "Y": 222, - "Z": 345.3269 - }, - "TerritoryId": 155, - "InteractionType": "AcceptQuest" - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1013437, - "Position": { - "X": -580.5906, - "Y": 206.85785, - "Z": -407.64478 - }, - "TerritoryId": 155, - "InteractionType": "Combat", - "Land": true, - "Fly": true, - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "EnemySpawnType": "AutoOnEnterArea", - "KillEnemyDataIds": [ - 4478 - ], - "CompletionQuestVariablesFlags": [ - 1, - null, - null, - null, - null, - null - ] - }, - { - "DataId": 1013437, - "Position": { - "X": -580.5906, - "Y": 206.85785, - "Z": -407.64478 - }, - "TerritoryId": 155, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true, - "$": "Alberic" - }, - { - "DataId": 1006748, - "Position": { - "X": 217.88354, - "Y": 222, - "Z": 345.3269 - }, - "TerritoryId": 155, - "InteractionType": "CompleteQuest", - "NextQuestId": 1690 - } - ] - } - ] +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013437, + "Position": { + "X": -580.5906, + "Y": 206.85785, + "Z": -407.64478 + }, + "TerritoryId": 155, + "InteractionType": "Combat", + "Land": true, + "Fly": true, + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 4478 + ], + "CompletionQuestVariablesFlags": [ + 1, + null, + null, + null, + null, + null + ] + }, + { + "DataId": 1013437, + "Position": { + "X": -580.5906, + "Y": 206.85785, + "Z": -407.64478 + }, + "TerritoryId": 155, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest", + "NextQuestId": 1690 + } + ] + } + ] } \ No newline at end of file From 9a550fe8e0624b4a7c7f9b40c368765a5e1f0680 Mon Sep 17 00:00:00 2001 From: AnimaMachinae Date: Sat, 26 Oct 2024 02:36:00 +0000 Subject: [PATCH 11/95] Update QuestPaths/3.x - Heavensward/Class Quests/DRG/1690_Days of Azure.json --- .../Class Quests/DRG/1690_Days of Azure.json | 222 +++++++++--------- 1 file changed, 111 insertions(+), 111 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1690_Days of Azure.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1690_Days of Azure.json index fb0f7c95..94460833 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1690_Days of Azure.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1690_Days of Azure.json @@ -1,112 +1,112 @@ -{ - "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "AnimaMachinae", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - }, - "$": "Alberic" - }, - { - "DataId": 1006748, - "Position": { - "X": 217.88354, - "Y": 222, - "Z": 345.3269 - }, - "TerritoryId": 155, - "InteractionType": "AcceptQuest" - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1013441, - "Position": { - "X": 468.58923, - "Y": 166.28001, - "Z": 256.73303 - }, - "TerritoryId": 397, - "InteractionType": "Combat", - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", - "Land": true, - "Fly": true, - "EnemySpawnType": "AfterInteraction", - "KillEnemyDataIds": [ - 4504 - ] - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1013441, - "Position": { - "X": 468.58923, - "Y": 166.28001, - "Z": 256.73303 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "DataId": 2006182, - "Position": { - "X": 197.40588, - "Y": 184.00854, - "Z": -102.80011 - }, - "TerritoryId": 397, - "InteractionType": "Combat", - "Land": true, - "Fly": true, - "EnemySpawnType": "AfterInteraction", - "KillEnemyDataIds": [ - 4486 - ] - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "DataId": 1013445, - "Position": { - "X": 202.19727, - "Y": 183.6595, - "Z": -96.11658 - }, - "TerritoryId": 397, - "InteractionType": "CompleteQuest" - } - ] - } - ] +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013441, + "Position": { + "X": 468.58923, + "Y": 166.28001, + "Z": 256.73303 + }, + "TerritoryId": 397, + "InteractionType": "Combat", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Land": true, + "Fly": true, + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 4504 + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013441, + "Position": { + "X": 468.58923, + "Y": 166.28001, + "Z": 256.73303 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2006182, + "Position": { + "X": 197.40588, + "Y": 184.00854, + "Z": -102.80011 + }, + "TerritoryId": 397, + "InteractionType": "Combat", + "Land": true, + "Fly": true, + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 4486 + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1013445, + "Position": { + "X": 202.19727, + "Y": 183.6595, + "Z": -96.11658 + }, + "TerritoryId": 397, + "InteractionType": "CompleteQuest" + } + ] + } + ] } \ No newline at end of file From 23f93f7de5018c7bc67f21f8af095a8143184fa6 Mon Sep 17 00:00:00 2001 From: AnimaMachinae Date: Sat, 26 Oct 2024 02:36:13 +0000 Subject: [PATCH 12/95] Update QuestPaths/3.x - Heavensward/Class Quests/DRG/1691_Heart of Justice.json --- .../DRG/1691_Heart of Justice.json | 160 +++++++++--------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1691_Heart of Justice.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1691_Heart of Justice.json index 00cf0daf..87848800 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1691_Heart of Justice.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1691_Heart of Justice.json @@ -1,81 +1,81 @@ -{ - "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "AnimaMachinae", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "DataId": 1013445, - "Position": { - "X": 202.19727, - "Y": 183.6595, - "Z": -96.11658 - }, - "TerritoryId": 397, - "InteractionType": "AcceptQuest", - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1013448, - "Position": { - "X": 83.26843, - "Y": 23.979126, - "Z": 2.3345947 - }, - "TerritoryId": 418, - "InteractionType": "Interact", - "AetheryteShortcut": "Ishgard", - "AethernetShortcut": [ - "[Ishgard] Aetheryte Plaza", - "[Ishgard] The Forgotten Knight" - ], - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true, - "$": "Alberic" - }, - { - "DataId": 1006748, - "Position": { - "X": 217.88354, - "Y": 222, - "Z": 345.3269 - }, - "TerritoryId": 155, - "InteractionType": "CompleteQuest", - "NextQuestId": 1690 - } - ] - } - ] +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1013445, + "Position": { + "X": 202.19727, + "Y": 183.6595, + "Z": -96.11658 + }, + "TerritoryId": 397, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013448, + "Position": { + "X": 83.26843, + "Y": 23.979126, + "Z": 2.3345947 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest", + "NextQuestId": 1690 + } + ] + } + ] } \ No newline at end of file From b2c42a8c49e208653169965d0bab0a71fff2f49d Mon Sep 17 00:00:00 2001 From: AnimaMachinae Date: Sat, 26 Oct 2024 02:36:24 +0000 Subject: [PATCH 13/95] Update QuestPaths/3.x - Heavensward/Class Quests/DRG/1692_Sworn Upon a Lance.json --- .../DRG/1692_Sworn Upon a Lance.json | 290 +++++++++--------- 1 file changed, 145 insertions(+), 145 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1692_Sworn Upon a Lance.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1692_Sworn Upon a Lance.json index 53d969e5..8aba6719 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1692_Sworn Upon a Lance.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1692_Sworn Upon a Lance.json @@ -1,146 +1,146 @@ -{ - "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "AnimaMachinae", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - }, - "$": "Alberic" - }, - { - "DataId": 1006748, - "Position": { - "X": 217.88354, - "Y": 222, - "Z": 345.3269 - }, - "TerritoryId": 155, - "InteractionType": "AcceptQuest" - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1013450, - "Position": { - "X": 84.30603, - "Y": 23.979128, - "Z": -12.802368 - }, - "TerritoryId": 418, - "InteractionType": "Interact", - "AetheryteShortcut": "Ishgard", - "AethernetShortcut": [ - "[Ishgard] Aetheryte Plaza", - "[Ishgard] The Forgotten Knight" - ], - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1013456, - "Position": { - "X": 489.82983, - "Y": 164.7244, - "Z": 266.25464 - }, - "TerritoryId": 397, - "InteractionType": "SinglePlayerDuty", - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", - "Land": true, - "Fly": true - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "DataId": 1013457, - "Position": { - "X": 492.88147, - "Y": 164.6694, - "Z": 265.06445 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 4, - "Steps": [ - { - "DataId": 1013464, - "Position": { - "X": 133.47058, - "Y": 24.400866, - "Z": -6.149414 - }, - "TerritoryId": 418, - "InteractionType": "Interact", - "AetheryteShortcut": "Ishgard", - "AethernetShortcut": [ - "[Ishgard] Aetheryte Plaza", - "[Ishgard] The Forgotten Knight" - ] - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true, - "$": "Alberic" - }, - { - "DataId": 1006748, - "Position": { - "X": 217.88354, - "Y": 222, - "Z": 345.3269 - }, - "TerritoryId": 155, - "InteractionType": "CompleteQuest", - "NextQuestId": 1690 - } - ] - } - ] +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013450, + "Position": { + "X": 84.30603, + "Y": 23.979128, + "Z": -12.802368 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013456, + "Position": { + "X": 489.82983, + "Y": 164.7244, + "Z": 266.25464 + }, + "TerritoryId": 397, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Land": true, + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1013457, + "Position": { + "X": 492.88147, + "Y": 164.6694, + "Z": 265.06445 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1013464, + "Position": { + "X": 133.47058, + "Y": 24.400866, + "Z": -6.149414 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest", + "NextQuestId": 1690 + } + ] + } + ] } \ No newline at end of file From 1ffffd0e833e90d8492b1426c3481efd66eb391d Mon Sep 17 00:00:00 2001 From: AnimaMachinae Date: Sat, 26 Oct 2024 02:36:39 +0000 Subject: [PATCH 14/95] Update QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json --- .../DRG/1693_Dragoon's Errand.json | 314 +++++++++--------- 1 file changed, 157 insertions(+), 157 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json index d0c8f5e0..bf8e87a2 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json @@ -1,158 +1,158 @@ -{ - "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "AnimaMachinae", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - }, - "$": "Alberic" - }, - { - "DataId": 1006748, - "Position": { - "X": 217.88354, - "Y": 222, - "Z": 345.3269 - }, - "TerritoryId": 155, - "InteractionType": "AcceptQuest" - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "Position": { - "X": -48.009445, - "Y": 98.00955, - "Z": 106.47891 - }, - "TerritoryId": 397, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", - "Fly": true, - "Land": true - }, - { - "DataId": 1013467, - "Position": { - "X": -51.10254, - "Y": 98.63026, - "Z": 105.1499 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1013466, - "Position": { - "X": -155.5047, - "Y": 175.79733, - "Z": 693.26306 - }, - "TerritoryId": 397, - "InteractionType": "Combat", - "Fly": true, - "Land": true, - "EnemySpawnType": "AutoOnEnterArea", - "KillEnemyDataIds": [ - 4482, - 5049 - ], - "CompletionQuestVariablesFlags": [ - 2, - null, - null, - null, - null, - null - ] - }, - { - "DataId": 1013466, - "Position": { - "X": -155.5047, - "Y": 175.79733, - "Z": 693.26306 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "DataId": 1012163, - "Position": { - "X": 128.25195, - "Y": 24.458832, - "Z": -0.6867676 - }, - "TerritoryId": 418, - "InteractionType": "Interact", - "AetheryteShortcut": "Ishgard", - "AethernetShortcut": [ - "[Ishgard] Aetheryte Plaza", - "[Ishgard] The Forgotten Knight" - ], - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true - }, - { - "DataId": 1013470, - "Position": { - "X": 218.00562, - "Y": 222, - "Z": 346.45605 - }, - "TerritoryId": 155, - "InteractionType": "CompleteQuest" - } - ] - } - ] +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": -48.009445, + "Y": 98.00955, + "Z": 106.47891 + }, + "TerritoryId": 397, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Fly": true, + "Land": true + }, + { + "DataId": 1013467, + "Position": { + "X": -51.10254, + "Y": 98.63026, + "Z": 105.1499 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013466, + "Position": { + "X": -155.5047, + "Y": 175.79733, + "Z": 693.26306 + }, + "TerritoryId": 397, + "InteractionType": "Combat", + "Fly": true, + "Land": true, + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 4482, + 5049 + ], + "CompletionQuestVariablesFlags": [ + 2, + null, + null, + null, + null, + null + ] + }, + { + "DataId": 1013466, + "Position": { + "X": -155.5047, + "Y": 175.79733, + "Z": 693.26306 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1012163, + "Position": { + "X": 128.25195, + "Y": 24.458832, + "Z": -0.6867676 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true + }, + { + "DataId": 1013470, + "Position": { + "X": 218.00562, + "Y": 222, + "Z": 346.45605 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest" + } + ] + } + ] } \ No newline at end of file From 4b8049d699fd82136c9a331e597e462b4928eefe Mon Sep 17 00:00:00 2001 From: AnimaMachinae Date: Sat, 26 Oct 2024 02:36:54 +0000 Subject: [PATCH 15/95] Update QuestPaths/3.x - Heavensward/Class Quests/DRG/1694_Sanguine Dragoon.json --- .../DRG/1694_Sanguine Dragoon.json | 280 +++++++++--------- 1 file changed, 140 insertions(+), 140 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1694_Sanguine Dragoon.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1694_Sanguine Dragoon.json index 4cc22951..638a73df 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1694_Sanguine Dragoon.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1694_Sanguine Dragoon.json @@ -1,141 +1,141 @@ -{ - "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "AnimaMachinae", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - }, - "$": "Alberic" - }, - { - "DataId": 1006748, - "Position": { - "X": 217.88354, - "Y": 222, - "Z": 345.3269 - }, - "TerritoryId": 155, - "InteractionType": "AcceptQuest" - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1013471, - "Position": { - "X": 503.53247, - "Y": -51.363117, - "Z": 79.941895 - }, - "TerritoryId": 398, - "InteractionType": "Interact", - "Fly": true, - "Land": true, - "AetheryteShortcut": "The Dravanian Forelands - Tailfeather" - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1013472, - "Position": { - "X": 396.35315, - "Y": -50.87535, - "Z": 73.04492 - }, - "TerritoryId": 398, - "InteractionType": "Combat", - "Fly": true, - "Land": true, - "EnemySpawnType": "AfterInteraction", - "KillEnemyDataIds": [ - 4497 - ] - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "DataId": 1013471, - "Position": { - "X": 503.53247, - "Y": -51.363117, - "Z": 79.941895 - }, - "TerritoryId": 398, - "InteractionType": "Interact", - "Fly": true, - "Land": true - } - ] - }, - { - "Sequence": 4, - "Steps": [ - { - "DataId": 1013476, - "Position": { - "X": 571.5571, - "Y": -36.290947, - "Z": 359.3651 - }, - "TerritoryId": 398, - "InteractionType": "Interact", - "Fly": true, - "Land": true - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true, - "$": "Alberic" - }, - { - "DataId": 1006748, - "Position": { - "X": 217.88354, - "Y": 222, - "Z": 345.3269 - }, - "TerritoryId": 155, - "InteractionType": "CompleteQuest", - "NextQuestId": 1690 - } - ] - } - ] +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013471, + "Position": { + "X": 503.53247, + "Y": -51.363117, + "Z": 79.941895 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "Fly": true, + "Land": true, + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013472, + "Position": { + "X": 396.35315, + "Y": -50.87535, + "Z": 73.04492 + }, + "TerritoryId": 398, + "InteractionType": "Combat", + "Fly": true, + "Land": true, + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 4497 + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1013471, + "Position": { + "X": 503.53247, + "Y": -51.363117, + "Z": 79.941895 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "Fly": true, + "Land": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1013476, + "Position": { + "X": 571.5571, + "Y": -36.290947, + "Z": 359.3651 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "Fly": true, + "Land": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest", + "NextQuestId": 1690 + } + ] + } + ] } \ No newline at end of file From 4cb3a9a2215a6ef7d0eb06808f9f78202d5bfdfd Mon Sep 17 00:00:00 2001 From: AnimaMachinae Date: Sat, 26 Oct 2024 02:37:10 +0000 Subject: [PATCH 16/95] Update QuestPaths/3.x - Heavensward/Class Quests/DRG/1695_Dragoon's Fate.json --- .../Class Quests/DRG/1695_Dragoon's Fate.json | 244 +++++++++--------- 1 file changed, 122 insertions(+), 122 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1695_Dragoon's Fate.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1695_Dragoon's Fate.json index d4703aed..b9103ce9 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1695_Dragoon's Fate.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1695_Dragoon's Fate.json @@ -1,123 +1,123 @@ -{ - "schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "AnimaMachinae", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - }, - "$": "Alberic" - }, - { - "DataId": 1006748, - "Position": { - "X": 217.88354, - "Y": 222, - "Z": 345.3269 - }, - "TerritoryId": 155, - "InteractionType": "AcceptQuest" - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1013483, - "Position": { - "X": -272.26672, - "Y": 124.213005, - "Z": -23.361572 - }, - "TerritoryId": 397, - "InteractionType": "Interact", - "Fly": true, - "Land": true, - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1013485, - "Position": { - "X": -360.1892, - "Y": 101.91492, - "Z": -178.79004 - }, - "TerritoryId": 397, - "InteractionType": "Interact", - "Fly": true, - "Land": true - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "DataId": 1013489, - "Position": { - "X": -429.099, - "Y": 121.59912, - "Z": -309.49878 - }, - "TerritoryId": 397, - "InteractionType": "Interact", - "Fly": true, - "Land": true - } - ] - }, - { - "Sequence": 4, - "Steps": [ - { - "DataId": 1013494, - "Position": { - "X": -505.30255, - "Y": 120.61159, - "Z": -311.39087 - }, - "TerritoryId": 397, - "InteractionType": "SinglePlayerDuty", - "Fly": true, - "Land": true - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "DataId": 1013494, - "Position": { - "X": -505.30255, - "Y": 120.61159, - "Z": -311.39087 - }, - "TerritoryId": 397, - "InteractionType": "CompleteQuest" - } - ] - } - ] +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" + }, + { + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013483, + "Position": { + "X": -272.26672, + "Y": 124.213005, + "Z": -23.361572 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "Fly": true, + "Land": true, + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013485, + "Position": { + "X": -360.1892, + "Y": 101.91492, + "Z": -178.79004 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "Fly": true, + "Land": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1013489, + "Position": { + "X": -429.099, + "Y": 121.59912, + "Z": -309.49878 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "Fly": true, + "Land": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1013494, + "Position": { + "X": -505.30255, + "Y": 120.61159, + "Z": -311.39087 + }, + "TerritoryId": 397, + "InteractionType": "SinglePlayerDuty", + "Fly": true, + "Land": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1013494, + "Position": { + "X": -505.30255, + "Y": 120.61159, + "Z": -311.39087 + }, + "TerritoryId": 397, + "InteractionType": "CompleteQuest" + } + ] + } + ] } \ No newline at end of file From ad76bb88c0e4ddc01e4bf45cd11bb076f513ba89 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 2 Nov 2024 15:51:29 +0100 Subject: [PATCH 17/95] Update distances when following NPC in 'Scales of Blue' --- .../E-SolutionNine-HeritageFound2/4936_Scales of Blue.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4936_Scales of Blue.json b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4936_Scales of Blue.json index 831ad356..1167f268 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4936_Scales of Blue.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4936_Scales of Blue.json @@ -92,7 +92,8 @@ "Z": 50.459126 }, "TerritoryId": 1186, - "InteractionType": "WaitForNpcAtPosition" + "InteractionType": "WaitForNpcAtPosition", + "StopDistance": 1 }, { "DataId": 1048078, @@ -103,7 +104,8 @@ }, "TerritoryId": 1186, "InteractionType": "WaitForNpcAtPosition", - "NpcWaitDistance": 2 + "NpcWaitDistance": 3, + "StopDistance": 5 }, { "DataId": 1048078, From bd38b330ed2f0e857d5b048dc5a5e1795f3c190f Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 3 Nov 2024 19:25:33 +0100 Subject: [PATCH 18/95] Add plugin setup window --- LLib | 2 +- Questionable/Configuration.cs | 7 + Questionable/Controller/CommandHandler.cs | 17 ++- Questionable/DalamudInitializer.cs | 19 ++- Questionable/QuestionablePlugin.cs | 3 + Questionable/Windows/OneTimeSetupWindow.cs | 164 +++++++++++++++++++++ Questionable/Windows/QuestWindow.cs | 3 + 7 files changed, 211 insertions(+), 4 deletions(-) create mode 100644 Questionable/Windows/OneTimeSetupWindow.cs diff --git a/LLib b/LLib index 6dfc18ee..912a7b04 160000 --- a/LLib +++ b/LLib @@ -1 +1 @@ -Subproject commit 6dfc18ee6a187138036ee2d51ba2257741c1e568 +Subproject commit 912a7b04ce180e337af9beeef2d1393b040c1ba8 diff --git a/Questionable/Configuration.cs b/Questionable/Configuration.cs index f2a25164..fb96ce35 100644 --- a/Questionable/Configuration.cs +++ b/Questionable/Configuration.cs @@ -6,12 +6,19 @@ namespace Questionable; internal sealed class Configuration : IPluginConfiguration { + public const int PluginSetupVersion = 1; + public int Version { get; set; } = 1; + public int PluginSetupCompleteVersion { get; set; } public GeneralConfiguration General { get; } = new(); public AdvancedConfiguration Advanced { get; } = new(); public WindowConfig DebugWindowConfig { get; } = new(); public WindowConfig ConfigWindowConfig { get; } = new(); + internal bool IsPluginSetupComplete() => PluginSetupCompleteVersion == PluginSetupVersion; + + internal void MarkPluginSetupComplete() => PluginSetupCompleteVersion = PluginSetupVersion; + internal sealed class GeneralConfiguration { public uint MountId { get; set; } = 71; diff --git a/Questionable/Controller/CommandHandler.cs b/Questionable/Controller/CommandHandler.cs index 4f80f53b..0bb87429 100644 --- a/Questionable/Controller/CommandHandler.cs +++ b/Questionable/Controller/CommandHandler.cs @@ -24,12 +24,14 @@ internal sealed class CommandHandler : IDisposable private readonly QuestRegistry _questRegistry; private readonly ConfigWindow _configWindow; private readonly DebugOverlay _debugOverlay; + private readonly OneTimeSetupWindow _oneTimeSetupWindow; private readonly QuestWindow _questWindow; private readonly QuestSelectionWindow _questSelectionWindow; private readonly ITargetManager _targetManager; private readonly QuestFunctions _questFunctions; private readonly GameFunctions _gameFunctions; private readonly IDataManager _dataManager; + private readonly Configuration _configuration; public CommandHandler( ICommandManager commandManager, @@ -39,12 +41,14 @@ internal sealed class CommandHandler : IDisposable QuestRegistry questRegistry, ConfigWindow configWindow, DebugOverlay debugOverlay, + OneTimeSetupWindow oneTimeSetupWindow, QuestWindow questWindow, QuestSelectionWindow questSelectionWindow, ITargetManager targetManager, QuestFunctions questFunctions, GameFunctions gameFunctions, - IDataManager dataManager) + IDataManager dataManager, + Configuration configuration) { _commandManager = commandManager; _chatGui = chatGui; @@ -53,12 +57,14 @@ internal sealed class CommandHandler : IDisposable _questRegistry = questRegistry; _configWindow = configWindow; _debugOverlay = debugOverlay; + _oneTimeSetupWindow = oneTimeSetupWindow; _questWindow = questWindow; _questSelectionWindow = questSelectionWindow; _targetManager = targetManager; _questFunctions = questFunctions; _gameFunctions = gameFunctions; _dataManager = dataManager; + _configuration = configuration; _commandManager.AddHandler("/qst", new CommandInfo(ProcessCommand) { @@ -75,6 +81,15 @@ internal sealed class CommandHandler : IDisposable private void ProcessCommand(string command, string arguments) { + if (!_configuration.IsPluginSetupComplete()) + { + if (string.IsNullOrEmpty(arguments)) + _oneTimeSetupWindow.IsOpen = true; + else + _chatGui.PrintError("Please complete the one-time setup first.", MessageTag, TagColor); + return; + } + string[] parts = arguments.Split(' '); switch (parts[0]) { diff --git a/Questionable/DalamudInitializer.cs b/Questionable/DalamudInitializer.cs index 78ac865c..a4b228d9 100644 --- a/Questionable/DalamudInitializer.cs +++ b/Questionable/DalamudInitializer.cs @@ -18,9 +18,11 @@ internal sealed class DalamudInitializer : IDisposable private readonly QuestController _questController; private readonly MovementController _movementController; private readonly WindowSystem _windowSystem; + private readonly OneTimeSetupWindow _oneTimeSetupWindow; private readonly QuestWindow _questWindow; private readonly ConfigWindow _configWindow; private readonly IToastGui _toastGui; + private readonly Configuration _configuration; private readonly ILogger _logger; public DalamudInitializer( @@ -30,6 +32,7 @@ internal sealed class DalamudInitializer : IDisposable MovementController movementController, InteractionUiController interactionUiController, WindowSystem windowSystem, + OneTimeSetupWindow oneTimeSetupWindow, QuestWindow questWindow, DebugOverlay debugOverlay, ConfigWindow configWindow, @@ -38,6 +41,7 @@ internal sealed class DalamudInitializer : IDisposable JournalProgressWindow journalProgressWindow, PriorityWindow priorityWindow, IToastGui toastGui, + Configuration configuration, ILogger logger) { _pluginInterface = pluginInterface; @@ -45,11 +49,14 @@ internal sealed class DalamudInitializer : IDisposable _questController = questController; _movementController = movementController; _windowSystem = windowSystem; + _oneTimeSetupWindow = oneTimeSetupWindow; _questWindow = questWindow; _configWindow = configWindow; _toastGui = toastGui; + _configuration = configuration; _logger = logger; + _windowSystem.AddWindow(oneTimeSetupWindow); _windowSystem.AddWindow(questWindow); _windowSystem.AddWindow(configWindow); _windowSystem.AddWindow(debugOverlay); @@ -59,7 +66,7 @@ internal sealed class DalamudInitializer : IDisposable _windowSystem.AddWindow(priorityWindow); _pluginInterface.UiBuilder.Draw += _windowSystem.Draw; - _pluginInterface.UiBuilder.OpenMainUi += _questWindow.Toggle; + _pluginInterface.UiBuilder.OpenMainUi += ToggleQuestWindow; _pluginInterface.UiBuilder.OpenConfigUi += _configWindow.Toggle; _framework.Update += FrameworkUpdate; _framework.RunOnTick(interactionUiController.HandleCurrentDialogueChoices, TimeSpan.FromMilliseconds(200)); @@ -91,6 +98,14 @@ internal sealed class DalamudInitializer : IDisposable private void OnQuestToast(ref SeString message, ref QuestToastOptions options, ref bool isHandled) => _logger.LogTrace("Quest Toast: {Message}", message); + private void ToggleQuestWindow() + { + if (_configuration.IsPluginSetupComplete()) + _questWindow.Toggle(); + else + _oneTimeSetupWindow.IsOpen = true; + } + public void Dispose() { _toastGui.QuestToast -= OnQuestToast; @@ -98,7 +113,7 @@ internal sealed class DalamudInitializer : IDisposable _toastGui.Toast -= OnToast; _framework.Update -= FrameworkUpdate; _pluginInterface.UiBuilder.OpenConfigUi -= _configWindow.Toggle; - _pluginInterface.UiBuilder.OpenMainUi -= _questWindow.Toggle; + _pluginInterface.UiBuilder.OpenMainUi -= ToggleQuestWindow; _pluginInterface.UiBuilder.Draw -= _windowSystem.Draw; _windowSystem.RemoveAllWindows(); diff --git a/Questionable/QuestionablePlugin.cs b/Questionable/QuestionablePlugin.cs index bac54241..5e8dc11d 100644 --- a/Questionable/QuestionablePlugin.cs +++ b/Questionable/QuestionablePlugin.cs @@ -6,6 +6,7 @@ using Dalamud.Game.ClientState.Objects; using Dalamud.Interface.Windowing; using Dalamud.Plugin; using Dalamud.Plugin.Services; +using LLib; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Questionable.Controller; @@ -110,6 +111,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); @@ -255,6 +257,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); diff --git a/Questionable/Windows/OneTimeSetupWindow.cs b/Questionable/Windows/OneTimeSetupWindow.cs new file mode 100644 index 00000000..2e8ac1ff --- /dev/null +++ b/Questionable/Windows/OneTimeSetupWindow.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using Dalamud.Interface; +using Dalamud.Interface.Colors; +using Dalamud.Interface.Components; +using Dalamud.Interface.Utility.Raii; +using Dalamud.Plugin; +using Dalamud.Utility; +using ImGuiNET; +using LLib; +using LLib.ImGui; +using Microsoft.Extensions.Logging; + +namespace Questionable.Windows; + +internal sealed class OneTimeSetupWindow : LWindow, IDisposable +{ + private static readonly IReadOnlyList RequiredPlugins = + [ + new("vnavmesh", + """ + vnavmesh handles the navigation within a zone, moving + your character to the next quest-related objective. + """, + new Uri("https://github.com/awgil/ffxiv_navmesh/")), + new("Lifestream", + """ + Used to travel to aethernet shards in cities. + """, + new Uri("https://github.com/NightmareXIV/Lifestream")), + new("TextAdvance", + """ + Automatically accepts and turns in quests, skips cutscenes + and dialogue. + """, + new Uri("https://github.com/NightmareXIV/TextAdvance")), + ]; + + private static readonly IReadOnlyList RecommendedPlugins = + [ + new("Rotation Solver Reborn", + """ + Automatically handles most combat interactions you encounter + during quests, including being interrupted by mobs. + """, + new Uri("https://github.com/FFXIV-CombatReborn/RotationSolverReborn")), + ]; + + private readonly Configuration _configuration; + private readonly IDalamudPluginInterface _pluginInterface; + private readonly UiUtils _uiUtils; + private readonly DalamudReflector _dalamudReflector; + private readonly ILogger _logger; + + public OneTimeSetupWindow(Configuration configuration, IDalamudPluginInterface pluginInterface, UiUtils uiUtils, + DalamudReflector dalamudReflector, ILogger logger) + : base("Questionable Setup###QuestionableOneTimeSetup", + ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoSavedSettings, true) + { + _configuration = configuration; + _pluginInterface = pluginInterface; + _uiUtils = uiUtils; + _dalamudReflector = dalamudReflector; + _logger = logger; + + RespectCloseHotkey = false; + ShowCloseButton = false; + AllowPinning = false; + AllowClickthrough = false; + IsOpen = !_configuration.IsPluginSetupComplete(); + _logger.LogInformation("One-time setup needed: {IsOpen}", IsOpen); + } + + public override void Draw() + { + float checklistPadding; + using (_pluginInterface.UiBuilder.IconFontFixedWidthHandle.Push()) + { + checklistPadding = ImGui.CalcTextSize(FontAwesomeIcon.Check.ToIconString()).X + + ImGui.GetStyle().ItemSpacing.X; + } + + ImGui.Text("Questionable requires the following plugins to work:"); + bool allRequiredInstalled = true; + using (ImRaii.PushIndent()) + { + foreach (var plugin in RequiredPlugins) + allRequiredInstalled &= DrawPlugin(plugin, checklistPadding); + } + + ImGui.Spacing(); + ImGui.Separator(); + ImGui.Spacing(); + + ImGui.Text("The following plugins are recommended, but not required:"); + using (ImRaii.PushIndent()) + { + foreach (var plugin in RecommendedPlugins) + DrawPlugin(plugin, checklistPadding); + } + + ImGui.Spacing(); + ImGui.Separator(); + ImGui.Spacing(); + + if (allRequiredInstalled) + { + using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGreen)) + { + if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Check, "Finish Setup")) + { + _configuration.MarkPluginSetupComplete(); + _pluginInterface.SavePluginConfig(_configuration); + } + } + } + else + { + using (ImRaii.Disabled()) + { + using (ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed)) + ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Check, "Missing required plugins"); + } + } + + ImGui.SameLine(); + + if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Times, "Close window & don't enable Questionable")) + { + IsOpen = false; + } + } + + private bool DrawPlugin(PluginInfo plugin, float checklistPadding) + { + bool isInstalled = IsPluginInstalled(plugin.DisplayName); + using (ImRaii.PushId("plugin_" + plugin.DisplayName)) + { + _uiUtils.ChecklistItem(plugin.DisplayName, isInstalled); + using (ImRaii.PushIndent(checklistPadding)) + { + ImGui.TextUnformatted(plugin.Details); + if (!isInstalled && ImGui.Button("Open Repository")) + Util.OpenLink(plugin.Uri.ToString()); + } + } + + return isInstalled; + } + + private bool IsPluginInstalled(string internalName) + { + return _dalamudReflector.TryGetDalamudPlugin(internalName, out _, suppressErrors: true, ignoreCache: true); + } + + public void Dispose() + { + } + + private sealed record PluginInfo( + string DisplayName, + string Details, + Uri Uri); +} diff --git a/Questionable/Windows/QuestWindow.cs b/Questionable/Windows/QuestWindow.cs index 37724c8c..1deaf934 100644 --- a/Questionable/Windows/QuestWindow.cs +++ b/Questionable/Windows/QuestWindow.cs @@ -113,6 +113,9 @@ internal sealed class QuestWindow : LWindow, IPersistableWindowConfig public override bool DrawConditions() { + if (!_configuration.IsPluginSetupComplete()) + return false; + if (!_clientState.IsLoggedIn || _clientState.LocalPlayer == null || _clientState.IsPvPExcludingDen) return false; From 9aad77e486f3d150ebb3315aa991b7f41c7609dc Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 3 Nov 2024 19:28:16 +0100 Subject: [PATCH 19/95] Close window when clicking 'FInish setup' --- Questionable/Windows/OneTimeSetupWindow.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Questionable/Windows/OneTimeSetupWindow.cs b/Questionable/Windows/OneTimeSetupWindow.cs index 2e8ac1ff..6026bafe 100644 --- a/Questionable/Windows/OneTimeSetupWindow.cs +++ b/Questionable/Windows/OneTimeSetupWindow.cs @@ -111,6 +111,7 @@ internal sealed class OneTimeSetupWindow : LWindow, IDisposable { _configuration.MarkPluginSetupComplete(); _pluginInterface.SavePluginConfig(_configuration); + IsOpen = false; } } } From 1f5b9ac687702c26b02535a19697606d4c2f0a5e Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 3 Nov 2024 20:18:00 +0100 Subject: [PATCH 20/95] Update THM paths; fix /cry being the wrong emote --- .../BLM/346_My First Scepter.json | 2 +- .../BLM/347_The Threat of Intimacy.json | 13 +- .../BLM/349_The Threat of Paucity.json | 142 +++++++++++------- .../BLM/350_The Threat of Superiority.json | 8 +- .../BLM/353_Facing Your Demons.json | 27 ++-- .../Questing/Converter/EmoteConverter.cs | 2 +- Questionable.Model/Questing/EEmote.cs | 2 +- 7 files changed, 119 insertions(+), 77 deletions(-) diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/346_My First Scepter.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/346_My First Scepter.json index 160be255..74f4a3d3 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/346_My First Scepter.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/346_My First Scepter.json @@ -103,7 +103,7 @@ "Y": 3.082914, "Z": 272.46896 }, - "TerritoryId": 148, + "TerritoryId": 141, "InteractionType": "Combat", "EnemySpawnType": "OverworldEnemies", "ComplexCombatData": [ diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/347_The Threat of Intimacy.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/347_The Threat of Intimacy.json index 83f8fccd..d257b9b6 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/347_The Threat of Intimacy.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/347_The Threat of Intimacy.json @@ -93,6 +93,16 @@ { "Sequence": 4, "Steps": [ + { + "Position": { + "X": -253.97243, + "Y": 33.2412, + "Z": 408.68488 + }, + "TerritoryId": 140, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1002027, "Position": { @@ -101,8 +111,7 @@ "Z": 407.27856 }, "TerritoryId": 140, - "InteractionType": "Interact", - "Fly": true + "InteractionType": "Interact" } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/349_The Threat of Paucity.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/349_The Threat of Paucity.json index db9410cb..fdcc2b85 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/349_The Threat of Paucity.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/349_The Threat of Paucity.json @@ -33,9 +33,9 @@ { "DataId": 1001710, "Position": { - "X": -240.2533, - "Y": 18.8, - "Z": 86.900024 + "X": -240.2533, + "Y": 18.8, + "Z": 86.900024 }, "TerritoryId": 130, "InteractionType": "Interact" @@ -43,49 +43,79 @@ ] }, { - "Sequence": 2, - "Steps": [ - { - "Position": { - "X": 149.07747, - "Y": -2, - "Z": -225.21188 + "Sequence": 2, + "Steps": [ + { + "TerritoryId": 130, + "InteractionType": "None", + "AetheryteShortcut": "Ul'dah", + "AethernetShortcut": [ + "[Ul'dah] Thaumaturges' Guild", + "[Ul'dah] Gate of Nald (Central Thanalan)" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 141 + ], + "AetheryteUnlocked": "Central Thanalan - Black Brush Station" }, - "TerritoryId": 141, - "AetheryteShortcut": "Ul'dah", - "AethernetShortcut": [ - "[Ul'dah] Thaumaturges' Guild", - "[Ul'dah] Gate of Nald (Central Thanalan)" - ], - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true, - "InTerritory": [ - 141 - ] - } - }, - "InteractionType": "Combat", - "EnemySpawnType": "OverworldEnemies", - "ComplexCombatData": [ - { - "DataId": 160, - "MinimumKillCount": 8, - "$": "Slay efts", - "CompletionQuestVariablesFlags": [ - { - "Low": 8 - }, - null, - null, - null, - null, - null - ] - } - ] + "AethernetShortcutIf": { + "AetheryteUnlocked": "Central Thanalan - Black Brush Station" + } } - ] + }, + { + "Position": { + "X": -62.183617, + "Y": -3.6582246, + "Z": 145.88391 + }, + "InteractionType": "WalkTo", + "TerritoryId": 141, + "SkipConditions": { + "StepIf": { + "Flying": "Unlocked", + "AetheryteUnlocked": "Central Thanalan - Black Brush Station" + } + } + }, + { + "Position": { + "X": 149.07747, + "Y": -2, + "Z": -225.21188 + }, + "TerritoryId": 141, + "AetheryteShortcut": "Central Thanalan - Black Brush Station", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "Fly": true, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 160, + "MinimumKillCount": 8, + "$": "Slay efts", + "CompletionQuestVariablesFlags": [ + { + "Low": 8 + }, + null, + null, + null, + null, + null + ] + } + ] + } + ] }, { "Sequence": 3, @@ -93,9 +123,9 @@ { "DataId": 1001710, "Position": { - "X": -240.2533, - "Y": 18.8, - "Z": 86.900024 + "X": -240.2533, + "Y": 18.8, + "Z": 86.900024 }, "TerritoryId": 130, "InteractionType": "Interact", @@ -125,9 +155,9 @@ { "DataId": 2001512, "Position": { - "X": -366.29285, - "Y": -34.989014, - "Z": 293.56824 + "X": -366.29285, + "Y": -34.989014, + "Z": 293.56824 }, "TerritoryId": 145, "InteractionType": "Combat", @@ -151,9 +181,9 @@ { "DataId": 2001499, "Position": { - "X": -366.29285, - "Y": -34.989014, - "Z": 293.56824 + "X": -366.29285, + "Y": -34.989014, + "Z": 293.56824 }, "TerritoryId": 145, "InteractionType": "Interact" @@ -166,9 +196,9 @@ { "DataId": 1001710, "Position": { - "X": -240.2533, - "Y": 18.8, - "Z": 86.900024 + "X": -240.2533, + "Y": 18.8, + "Z": 86.900024 }, "TerritoryId": 130, "InteractionType": "CompleteQuest", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/350_The Threat of Superiority.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/350_The Threat of Superiority.json index 3f4f94e3..4057558e 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/350_The Threat of Superiority.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/350_The Threat of Superiority.json @@ -121,11 +121,11 @@ "Sequence": 255, "Steps": [ { - "DataId": 1001710, + "DataId": 1001711, "Position": { - "X": -240.2533, - "Y": 18.8, - "Z": 86.900024 + "X": -241.62665, + "Y": 18.8, + "Z": 83.32947 }, "TerritoryId": 130, "InteractionType": "CompleteQuest", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/353_Facing Your Demons.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/353_Facing Your Demons.json index 7465e765..073489d1 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/353_Facing Your Demons.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/353_Facing Your Demons.json @@ -34,19 +34,12 @@ "Sequence": 1, "Steps": [ { - "DataId": 1004094, - "Position": { - "X": -413.47375, - "Y": 23.113977, - "Z": -383.71863 - }, - "TerritoryId": 140, - "InteractionType": "Interact", - "AetheryteShortcut": "Western Thanalan - Horizon", - "Fly": true, + "TerritoryId": 145, + "InteractionType": "UseItem", + "ItemId": 30362, + "TargetTerritoryId": 140, "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true, + "StepIf": { "InTerritory": [ 140 ] @@ -72,6 +65,16 @@ }, "TerritoryId": 140, "InteractionType": "Interact" + }, + { + "DataId": 1004094, + "Position": { + "X": -413.47375, + "Y": 23.113977, + "Z": -383.71863 + }, + "TerritoryId": 140, + "InteractionType": "Interact" } ] }, diff --git a/Questionable.Model/Questing/Converter/EmoteConverter.cs b/Questionable.Model/Questing/Converter/EmoteConverter.cs index 9b007178..3e7cb2cb 100644 --- a/Questionable.Model/Questing/Converter/EmoteConverter.cs +++ b/Questionable.Model/Questing/Converter/EmoteConverter.cs @@ -11,6 +11,7 @@ public sealed class EmoteConverter() : EnumConverter(Values) { EEmote.Cheer, "cheer" }, { EEmote.Clap, "clap" }, { EEmote.Comfort, "comfort" }, + { EEmote.Cry, "cry" }, { EEmote.Dance, "dance" }, { EEmote.Doubt, "doubt" }, { EEmote.Doze, "doze" }, @@ -31,7 +32,6 @@ public sealed class EmoteConverter() : EnumConverter(Values) { EEmote.Disappointed, "disappointed" }, { EEmote.Pray, "pray" }, { EEmote.ImperialSalute, "imperialsalute" }, - { EEmote.Cry, "cry" }, { EEmote.Pet, "pet" }, { EEmote.Slap, "slap" }, { EEmote.SundropDance, "sundropdance"}, diff --git a/Questionable.Model/Questing/EEmote.cs b/Questionable.Model/Questing/EEmote.cs index 1056d9ae..93342666 100644 --- a/Questionable.Model/Questing/EEmote.cs +++ b/Questionable.Model/Questing/EEmote.cs @@ -12,6 +12,7 @@ public enum EEmote Cheer = 6, Clap = 7, Comfort = 9, + Cry = 10, Dance = 11, Doubt = 12, Doze = 13, @@ -32,7 +33,6 @@ public enum EEmote Disappointed = 49, Pray = 58, ImperialSalute = 59, - Cry = 74, Pet = 105, Slap = 111, SundropDance = 120, From fb0180ce3b29c2414df0ee112a019463890b5e04 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 3 Nov 2024 20:42:33 +0100 Subject: [PATCH 21/95] Minor DRG updates --- .../DRG/1693_Dragoon's Errand.json | 313 +++++++++--------- .../Controller/Steps/Shared/MoveTo.cs | 1 + 2 files changed, 161 insertions(+), 153 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json index bf8e87a2..0dc34715 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/DRG/1693_Dragoon's Errand.json @@ -1,158 +1,165 @@ { - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "AnimaMachinae", - "QuestSequence": [ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ { - "Sequence": 0, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - }, - "$": "Alberic" - }, - { - "DataId": 1006748, - "Position": { - "X": 217.88354, - "Y": 222, - "Z": 345.3269 - }, - "TerritoryId": 155, - "InteractionType": "AcceptQuest" - } - ] + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "$": "Alberic" }, { - "Sequence": 1, - "Steps": [ - { - "Position": { - "X": -48.009445, - "Y": 98.00955, - "Z": 106.47891 - }, - "TerritoryId": 397, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", - "Fly": true, - "Land": true - }, - { - "DataId": 1013467, - "Position": { - "X": -51.10254, - "Y": 98.63026, - "Z": 105.1499 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1013466, - "Position": { - "X": -155.5047, - "Y": 175.79733, - "Z": 693.26306 - }, - "TerritoryId": 397, - "InteractionType": "Combat", - "Fly": true, - "Land": true, - "EnemySpawnType": "AutoOnEnterArea", - "KillEnemyDataIds": [ - 4482, - 5049 - ], - "CompletionQuestVariablesFlags": [ - 2, - null, - null, - null, - null, - null - ] - }, - { - "DataId": 1013466, - "Position": { - "X": -155.5047, - "Y": 175.79733, - "Z": 693.26306 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "DataId": 1012163, - "Position": { - "X": 128.25195, - "Y": 24.458832, - "Z": -0.6867676 - }, - "TerritoryId": 418, - "InteractionType": "Interact", - "AetheryteShortcut": "Ishgard", - "AethernetShortcut": [ - "[Ishgard] Aetheryte Plaza", - "[Ishgard] The Forgotten Knight" - ], - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "Position": { - "X": 215.65454, - "Y": 222.1, - "Z": 345.1806 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Land": true, - "Fly": true - }, - { - "DataId": 1013470, - "Position": { - "X": 218.00562, - "Y": 222, - "Z": 346.45605 - }, - "TerritoryId": 155, - "InteractionType": "CompleteQuest" - } - ] + "DataId": 1006748, + "Position": { + "X": 217.88354, + "Y": 222, + "Z": 345.3269 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest" } - ] -} \ No newline at end of file + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": -48.009445, + "Y": 98.00955, + "Z": 106.47891 + }, + "TerritoryId": 397, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Fly": true, + "Land": true + }, + { + "DataId": 1013467, + "Position": { + "X": -51.10254, + "Y": 98.63026, + "Z": 105.1499 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013466, + "Position": { + "X": -155.5047, + "Y": 175.79733, + "Z": 693.26306 + }, + "TerritoryId": 397, + "InteractionType": "Combat", + "Fly": true, + "Land": true, + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 4482, + 5049 + ], + "CompletionQuestVariablesFlags": [ + 2, + null, + null, + null, + null, + null + ] + }, + { + "DataId": 1013466, + "Position": { + "X": -155.5047, + "Y": 175.79733, + "Z": 693.26306 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1012163, + "Position": { + "X": 128.25195, + "Y": 24.458832, + "Z": -0.6867676 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 215.65454, + "Y": 222.1, + "Z": 345.1806 + }, + "TerritoryId": 155, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Land": true, + "Fly": true + }, + { + "DataId": 1013470, + "Position": { + "X": 218.00562, + "Y": 222, + "Z": 346.45605 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_JOBDRG560_01693_Q1_000_000", + "Answer": "TEXT_JOBDRG560_01693_A1_000_002" + } + ] + } + ] + } + ] +} diff --git a/Questionable/Controller/Steps/Shared/MoveTo.cs b/Questionable/Controller/Steps/Shared/MoveTo.cs index bd62ea13..89b7170a 100644 --- a/Questionable/Controller/Steps/Shared/MoveTo.cs +++ b/Questionable/Controller/Steps/Shared/MoveTo.cs @@ -325,6 +325,7 @@ internal static class MoveTo internal sealed class LandTask : ITask { public bool ShouldRedoOnInterrupt() => true; + public override string ToString() => "Land"; } internal sealed class LandExecutor(IClientState clientState, ICondition condition, ILogger logger) : TaskExecutor From cc3dc7b4ffae5a6af69833d9905bb1ceecce8b35 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 3 Nov 2024 20:56:22 +0100 Subject: [PATCH 22/95] Add second half of 'The Merchant of Komra' --- .../4051_The Merchant of Komra.json | 98 +++++++++++++++---- 1 file changed, 80 insertions(+), 18 deletions(-) diff --git a/QuestPaths/5.x - Shadowbringers/Alliance Raid Quests/4051_The Merchant of Komra.json b/QuestPaths/5.x - Shadowbringers/Alliance Raid Quests/4051_The Merchant of Komra.json index 9ce48483..b7a27609 100644 --- a/QuestPaths/5.x - Shadowbringers/Alliance Raid Quests/4051_The Merchant of Komra.json +++ b/QuestPaths/5.x - Shadowbringers/Alliance Raid Quests/4051_The Merchant of Komra.json @@ -130,6 +130,16 @@ "TerritoryId": 928, "InteractionType": "Interact", "DisableNavmesh": true, + "RequiredQuestVariables": [ + null, + null, + null, + [ + 1 + ], + null, + null + ], "CompletionQuestVariablesFlags": [ null, null, @@ -237,12 +247,7 @@ null, 64 ] - } - ] - }, - { - "Sequence": 255, - "Steps": [ + }, { "Position": { "X": -305.8408, @@ -251,7 +256,16 @@ }, "TerritoryId": 928, "InteractionType": "WalkTo", - "RestartNavigationIfCancelled": false + "RestartNavigationIfCancelled": false, + "DelaySecondsAtStart": 2, + "RequiredQuestVariables": [ + null, + null, + null, + [2], + null, + null + ] }, { "TerritoryId": 928, @@ -259,27 +273,74 @@ "DelaySecondsAtStart": 2 }, { - "DataId": 2011237, "Position": { - "X": -366.47595, - "Y": -241.35199, - "Z": -339.07074 + "X": -366.50647, + "Y": -241.32147, + "Z": -311.57397 }, + "StopDistance": 0.5, "TerritoryId": 928, - "InteractionType": "Interact", - "TargetTerritoryId": 928 + "InteractionType": "Jump", + "JumpDestination": { + "DataId": 2011269, + "Position": { + "X": -366.558, + "Y": -249.74661, + "Z": -301.74612 + } + }, + "DelaySecondsAtStart": 2, + "RequiredQuestVariables": [ + null, + null, + null, + [2], + null, + null + ] }, { - "DataId": 2011155, + "DataId": 2011269, "Position": { - "X": -383.81018, - "Y": 102.89148, - "Z": 389.12024 + "X": -366.50647, + "Y": -248.43219, + "Z": -285.6947 }, "TerritoryId": 928, "InteractionType": "Interact", - "TargetTerritoryId": 814 + "TargetTerritoryId": 928, + "RequiredQuestVariables": [ + null, + null, + null, + [2], + null, + null + ] }, + { + "DataId": 2011459, + "Position": { + "X": 205.8899, + "Y": -500.0229, + "Z": -167.86456 + }, + "TerritoryId": 928, + "InteractionType": "Interact", + "RequiredQuestVariables": [ + null, + null, + null, + [2], + null, + null + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ { "DataId": 1036043, "Position": { @@ -289,6 +350,7 @@ }, "TerritoryId": 814, "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Kholusia - Stilltide", "Fly": true } ] From eb81c74930ef5ac0ff79d598bb661d2ec0eab86b Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 3 Nov 2024 21:26:57 +0100 Subject: [PATCH 23/95] Add missing SB MCH quests --- .../MCH/2905_The Machinists' Choice.json | 141 +++++++ .../MCH/2906_The Hrunting Heist.json | 145 +++++++ .../MCH/2907_Release the Hounds.json | 239 ++++++------ .../MCH/2908_Snouts Down, Tails Up.json | 354 +++++++++--------- .../MCH/2909_The Mongrel and the Knight.json | 194 +++++----- 5 files changed, 690 insertions(+), 383 deletions(-) create mode 100644 QuestPaths/4.x - Stormblood/Class Quests/MCH/2905_The Machinists' Choice.json create mode 100644 QuestPaths/4.x - Stormblood/Class Quests/MCH/2906_The Hrunting Heist.json diff --git a/QuestPaths/4.x - Stormblood/Class Quests/MCH/2905_The Machinists' Choice.json b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2905_The Machinists' Choice.json new file mode 100644 index 00000000..9a904e25 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2905_The Machinists' Choice.json @@ -0,0 +1,141 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1022146, + "Position": { + "X": 56.321045, + "Y": 207.33994, + "Z": -31.937195 + }, + "TerritoryId": 478, + "InteractionType": "Interact", + "AetheryteShortcut": "Idyllshire" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1017656, + "Position": { + "X": 70.7561, + "Y": 207.28993, + "Z": 0.59503174 + }, + "TerritoryId": 478, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1013721, + "Position": { + "X": 17.380005, + "Y": 205.38686, + "Z": 37.491333 + }, + "TerritoryId": 478, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 1012133, + "Position": { + "X": -26.840637, + "Y": 206.49944, + "Z": 28.67163 + }, + "TerritoryId": 478, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1022148, + "Position": { + "X": -78.965515, + "Y": 206.50021, + "Z": 23.575134 + }, + "TerritoryId": 478, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Brume" + ] + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Class Quests/MCH/2906_The Hrunting Heist.json b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2906_The Hrunting Heist.json new file mode 100644 index 00000000..e92ab1fe --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2906_The Hrunting Heist.json @@ -0,0 +1,145 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Brume" + ], + "SkipConditions": { + "AethernetShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1022151, + "Position": { + "X": 115.098755, + "Y": 24.398598, + "Z": 2.822876 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] The Brume", + "[Ishgard] The Forgotten Knight" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1022152, + "Position": { + "X": 3.9215698, + "Y": 27.790508, + "Z": -150.83551 + }, + "TerritoryId": 419, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] The Forgotten Knight", + "[Ishgard] Saint Reymanaud's Cathedral" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] Saint Reymanaud's Cathedral", + "[Ishgard] Skysteel Manufactory" + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "Position": { + "X": 660.36426, + "Y": 202.54167, + "Z": -180.60214 + }, + "StopDistance": 1, + "TerritoryId": 397, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 7486 + ], + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1022153, + "Position": { + "X": 662.95874, + "Y": 202.59106, + "Z": -177.14203 + }, + "StopDistance": 7, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Brume" + ] + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Class Quests/MCH/2907_Release the Hounds.json b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2907_Release the Hounds.json index c0f8cc4d..f4124dee 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/MCH/2907_Release the Hounds.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2907_Release the Hounds.json @@ -1,118 +1,127 @@ { - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "UcanPatates", - "QuestSequence": [ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "UcanPatates", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ { - "Sequence": 0, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "AcceptQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1022157, - "Position": { - "X": -323.9643, - "Y": 239.9684, - "Z": 372.91516 - }, - "TerritoryId": 155, - "InteractionType": "Interact", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1022163, - "Position": { - "X": -395.95636, - "Y": 240.14958, - "Z": 340.59656 - }, - "TerritoryId": 155, - "InteractionType": "SinglePlayerDuty", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 3, - "Steps": [ - ] - }, - { - "Sequence": 4, - "Steps": [ - { - "DataId": 1022167, - "Position": { - "X": -385.36664, - "Y": 232.23338, - "Z": 314.65625 - }, - "TerritoryId": 155, - "InteractionType": "Interact", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "CompleteQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Brume" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } - ] -} \ No newline at end of file + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1022157, + "Position": { + "X": -323.9643, + "Y": 239.9684, + "Z": 372.91516 + }, + "TerritoryId": 155, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1022163, + "Position": { + "X": -395.95636, + "Y": 240.14958, + "Z": 340.59656 + }, + "TerritoryId": 155, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 3, + "Steps": [ + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1022167, + "Position": { + "X": -385.36664, + "Y": 232.23338, + "Z": 314.65625 + }, + "StopDistance": 5, + "TerritoryId": 155, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Brume" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Class Quests/MCH/2908_Snouts Down, Tails Up.json b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2908_Snouts Down, Tails Up.json index ddb138da..edbc7049 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/MCH/2908_Snouts Down, Tails Up.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2908_Snouts Down, Tails Up.json @@ -1,176 +1,184 @@ { - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "UcanPatates", - "QuestSequence": [ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "UcanPatates", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ { - "Sequence": 0, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "AcceptQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1022169, - "Position": { - "X": -58.854065, - "Y": 20.000334, - "Z": 42.83203 - }, - "TerritoryId": 129, - "InteractionType": "Interact", - "AetheryteShortcut": "Limsa Lominsa", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1022170, - "Position": { - "X": -172.6253, - "Y": 41.10136, - "Z": 175.89062 - }, - "TerritoryId": 128, - "InteractionType": "Interact", - "AetheryteShortcut": "Limsa Lominsa", - "AethernetShortcut": [ - "[Limsa Lominsa] Aetheryte Plaza", - "[Limsa Lominsa] The Aftcastle" - ], - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true, - "InTerritory": [ - 129 - ] - }, - "AethernetShortcutIf": { - "InSameTerritory": true - } - }, - "DialogueChoices": [ - { - "Type": "List", - "Prompt": "TEXT_JOBMCH680_02908_Q1_000_000", - "Answer": "TEXT_JOBMCH680_02908_A1_000_001" - } - ] - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "DataId": 1022173, - "Position": { - "X": 356.5575, - "Y": 351.0862, - "Z": -545.2201 - }, - "TerritoryId": 155, - "InteractionType": "Combat", - "EnemySpawnType": "AfterInteraction", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "Fly": true, - "ComplexCombatData": [ - { - "DataId": 7487, - "MinimumKillCount": 2 - } - ], - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 4, - "Steps": [ - { - "DataId": 1022173, - "Position": { - "X": 356.5575, - "Y": 351.0862, - "Z": -545.2201 - }, - "TerritoryId": 155, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 5, - "Steps": [ - { - "DataId": 1022151, - "Position": { - "X": 115.098755, - "Y": 24.398598, - "Z": 2.822876 - }, - "TerritoryId": 418, - "InteractionType": "Interact", - "AetheryteShortcut": "Ishgard", - "AethernetShortcut": [ - "[Ishgard] Aetheryte Plaza", - "[Ishgard] The Forgotten Knight" - ], - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "CompleteQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Brume" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } - ] -} \ No newline at end of file + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1022169, + "Position": { + "X": -58.854065, + "Y": 20.000334, + "Z": 42.83203 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "AetheryteShortcut": "Limsa Lominsa", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1022170, + "Position": { + "X": -172.6253, + "Y": 41.10136, + "Z": 175.89062 + }, + "TerritoryId": 128, + "InteractionType": "Interact", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] The Aftcastle" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 128 + ] + }, + "AethernetShortcutIf": { + "InSameTerritory": true + } + }, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_JOBMCH680_02908_Q1_000_000", + "Answer": "TEXT_JOBMCH680_02908_A1_000_001" + } + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1022173, + "Position": { + "X": 356.5575, + "Y": 351.0862, + "Z": -545.2201 + }, + "TerritoryId": 155, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Fly": true, + "ComplexCombatData": [ + { + "DataId": 7487, + "MinimumKillCount": 2 + } + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1022173, + "Position": { + "X": 356.5575, + "Y": 351.0862, + "Z": -545.2201 + }, + "TerritoryId": 155, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1022151, + "Position": { + "X": 115.098755, + "Y": 24.398598, + "Z": 2.822876 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] The Forgotten Knight", + "[Ishgard] The Brume" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Class Quests/MCH/2909_The Mongrel and the Knight.json b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2909_The Mongrel and the Knight.json index 619e768e..8c8af4e6 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/MCH/2909_The Mongrel and the Knight.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/MCH/2909_The Mongrel and the Knight.json @@ -1,98 +1,102 @@ { - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "UcanPatates", - "QuestSequence": [ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "UcanPatates", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ { - "Sequence": 0, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "AcceptQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1014577, - "Position": { - "X": -154.31458, - "Y": 16.999992, - "Z": -53.3609 - }, - "TerritoryId": 418, - "InteractionType": "Interact", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - }, - "AethernetShortcut": [ - "[Ishgard] Aetheryte Plaza", - "[Ishgard] Skysteel Manufactory" - ] - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "SinglePlayerDuty", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - }, - "AethernetShortcut": [ - "[Ishgard] Skysteel Manufactory", - "[Ishgard] Aetheryte Plaza" - ] - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "DataId": 1012251, - "Position": { - "X": 12.313965, - "Y": -12.020877, - "Z": 40.268433 - }, - "TerritoryId": 418, - "InteractionType": "CompleteQuest", - "AetheryteShortcut": "Ishgard", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Brume" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } - ] -} \ No newline at end of file + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "AethernetShortcut": [ + "[Ishgard] Skysteel Manufactory", + "[Ishgard] Aetheryte Plaza" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1012251, + "Position": { + "X": 12.313965, + "Y": -12.020877, + "Z": 40.268433 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + } + ] +} From f42540bd6612b6965bad14a8a4f262434b5a8563 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 3 Nov 2024 22:25:03 +0100 Subject: [PATCH 24/95] Add notification settings for when manual interactions are required --- .gitmodules | 3 + Directory.Build.targets | 2 +- Questionable.sln | 12 + Questionable/Configuration.cs | 12 +- .../Steps/Common/SendNotification.cs | 84 ++++++ .../Controller/Steps/Shared/WaitAtEnd.cs | 24 +- Questionable/Data/TerritoryData.cs | 7 + .../External/NotificationMasterIpc.cs | 24 ++ Questionable/Questionable.csproj | 1 + Questionable/QuestionablePlugin.cs | 2 + Questionable/Windows/ConfigWindow.cs | 250 +++++++++++------- Questionable/Windows/OneTimeSetupWindow.cs | 8 + Questionable/packages.lock.json | 7 +- vendor/NotificationMasterAPI | 1 + 14 files changed, 341 insertions(+), 96 deletions(-) create mode 100644 Questionable/Controller/Steps/Common/SendNotification.cs create mode 100644 Questionable/External/NotificationMasterIpc.cs create mode 160000 vendor/NotificationMasterAPI diff --git a/.gitmodules b/.gitmodules index 0bc08a36..832da345 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "vendor/ECommons"] path = vendor/ECommons url = https://github.com/NightmareXIV/ECommons.git +[submodule "vendor/NotificationMasterAPI"] + path = vendor/NotificationMasterAPI + url = https://github.com/NightmareXIV/NotificationMasterAPI.git diff --git a/Directory.Build.targets b/Directory.Build.targets index 9b59f0ef..1d114280 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,5 +1,5 @@ - 3.12 + 3.13 diff --git a/Questionable.sln b/Questionable.sln index ad259b03..df898789 100644 --- a/Questionable.sln +++ b/Questionable.sln @@ -26,6 +26,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Directory.Build.targets = Directory.Build.targets EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "vendor", "vendor", "{8F5EC9D5-4CE7-433B-BB3A-782500E84DDB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NotificationMasterAPI", "vendor\NotificationMasterAPI\NotificationMasterAPI\NotificationMasterAPI.csproj", "{9BD494ED-22F2-487B-BCE1-435399A8720E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -68,8 +72,16 @@ Global {A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B}.Debug|x64.Build.0 = Debug|x64 {A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B}.Release|x64.ActiveCfg = Release|x64 {A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B}.Release|x64.Build.0 = Release|x64 + {9BD494ED-22F2-487B-BCE1-435399A8720E}.Debug|x64.ActiveCfg = Debug|x64 + {9BD494ED-22F2-487B-BCE1-435399A8720E}.Debug|x64.Build.0 = Debug|x64 + {9BD494ED-22F2-487B-BCE1-435399A8720E}.Release|x64.ActiveCfg = Release|x64 + {9BD494ED-22F2-487B-BCE1-435399A8720E}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {A12D7B4B-8E6E-4DCF-A41A-12F62E9FF94B} = {8F5EC9D5-4CE7-433B-BB3A-782500E84DDB} + {9BD494ED-22F2-487B-BCE1-435399A8720E} = {8F5EC9D5-4CE7-433B-BB3A-782500E84DDB} + EndGlobalSection EndGlobal diff --git a/Questionable/Configuration.cs b/Questionable/Configuration.cs index fb96ce35..238e4a51 100644 --- a/Questionable/Configuration.cs +++ b/Questionable/Configuration.cs @@ -1,4 +1,5 @@ using Dalamud.Configuration; +using Dalamud.Game.Text; using FFXIVClientStructs.FFXIV.Client.UI.Agent; using LLib.ImGui; @@ -8,9 +9,10 @@ internal sealed class Configuration : IPluginConfiguration { public const int PluginSetupVersion = 1; - public int Version { get; set; } = 1; + public int Version { get; set; } =1 ; public int PluginSetupCompleteVersion { get; set; } public GeneralConfiguration General { get; } = new(); + public NotificationConfiguration Notifications { get; } = new(); public AdvancedConfiguration Advanced { get; } = new(); public WindowConfig DebugWindowConfig { get; } = new(); public WindowConfig ConfigWindowConfig { get; } = new(); @@ -30,6 +32,14 @@ internal sealed class Configuration : IPluginConfiguration public bool ConfigureTextAdvance { get; set; } = true; } + internal sealed class NotificationConfiguration + { + public bool Enabled { get; set; } = true; + public XivChatType ChatType { get; set; } = XivChatType.Debug; + public bool ShowTrayMessage { get; set; } + public bool FlashTaskbar { get; set; } + } + internal sealed class AdvancedConfiguration { public bool DebugOverlay { get; set; } diff --git a/Questionable/Controller/Steps/Common/SendNotification.cs b/Questionable/Controller/Steps/Common/SendNotification.cs new file mode 100644 index 00000000..76b8a810 --- /dev/null +++ b/Questionable/Controller/Steps/Common/SendNotification.cs @@ -0,0 +1,84 @@ +using Dalamud.Game.Text; +using Dalamud.Game.Text.SeStringHandling; +using Dalamud.Plugin.Services; +using Questionable.External; +using Questionable.Model.Questing; + +namespace Questionable.Controller.Steps.Common; + +internal static class SendNotification +{ + internal sealed record Task(EInteractionType InteractionType, string? Comment) : ITask + { + public override string ToString() => "SendNotification"; + } + + internal sealed class Executor( + NotificationMasterIpc notificationMasterIpc, + IChatGui chatGui, + Configuration configuration) : TaskExecutor + { + protected override bool Start() + { + if (!configuration.Notifications.Enabled) + return false; + + string text = Task.InteractionType switch + { + EInteractionType.Duty => "Duty", + EInteractionType.SinglePlayerDuty => "Single player duty", + EInteractionType.Instruction or EInteractionType.WaitForManualProgress or EInteractionType.Snipe => + "Manual interaction required", + _ => $"{Task.InteractionType}", + }; + + if (!string.IsNullOrEmpty(Task.Comment)) + text += $" - {Task.Comment}"; + + if (configuration.Notifications.ChatType != XivChatType.None) + { + var message = configuration.Notifications.ChatType switch + { + XivChatType.Say + or XivChatType.Shout + or XivChatType.TellOutgoing + or XivChatType.TellIncoming + or XivChatType.Party + or XivChatType.Alliance + or (>= XivChatType.Ls1 and <= XivChatType.Ls8) + or XivChatType.FreeCompany + or XivChatType.NoviceNetwork + or XivChatType.Yell + or XivChatType.CrossParty + or XivChatType.PvPTeam + or XivChatType.CrossLinkShell1 + or XivChatType.NPCDialogue + or XivChatType.NPCDialogueAnnouncements + or (>= XivChatType.CrossLinkShell2 and <= XivChatType.CrossLinkShell8) + => new XivChatEntry + { + Message = text, + Type = configuration.Notifications.ChatType, + Name = new SeStringBuilder() + .AddUiForeground(CommandHandler.MessageTag, CommandHandler.TagColor) + .Build(), + }, + _ => new XivChatEntry + { + Message = new SeStringBuilder() + .AddUiForeground($"[{CommandHandler.MessageTag}] ", CommandHandler.TagColor) + .Append(text) + .Build(), + Type = configuration.Notifications.ChatType, + } + }; + chatGui.Print(message); + } + + notificationMasterIpc.Notify(text); + return true; + } + + public override ETaskResult Update() => ETaskResult.TaskComplete; + } +} diff --git a/Questionable/Controller/Steps/Shared/WaitAtEnd.cs b/Questionable/Controller/Steps/Shared/WaitAtEnd.cs index d64c009b..84d2e1ca 100644 --- a/Questionable/Controller/Steps/Shared/WaitAtEnd.cs +++ b/Questionable/Controller/Steps/Shared/WaitAtEnd.cs @@ -6,6 +6,7 @@ using System.Numerics; using Dalamud.Game.ClientState.Conditions; using Dalamud.Plugin.Services; using Questionable.Controller.Steps.Common; +using Questionable.Controller.Steps.Interactions; using Questionable.Controller.Utils; using Questionable.Data; using Questionable.Functions; @@ -19,7 +20,8 @@ internal static class WaitAtEnd internal sealed class Factory( IClientState clientState, ICondition condition, - TerritoryData territoryData) + TerritoryData territoryData, + Configuration configuration) : ITaskFactory { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) @@ -47,12 +49,28 @@ internal static class WaitAtEnd case EInteractionType.WaitForManualProgress: case EInteractionType.Instruction: - case EInteractionType.Snipe: return [new WaitNextStepOrSequence()]; + case EInteractionType.Snipe: + if (configuration.General.AutomaticallyCompleteSnipeTasks) + return [new WaitNextStepOrSequence()]; + else + return [ + new SendNotification.Task(step.InteractionType, step.Comment), + new WaitNextStepOrSequence() + ]; + case EInteractionType.Duty: + return [ + new SendNotification.Task(step.InteractionType, step.ContentFinderConditionId.HasValue ? territoryData.GetContentFinderConditionName(step.ContentFinderConditionId.Value) : step.Comment), + new EndAutomation(), + ]; + case EInteractionType.SinglePlayerDuty: - return [new EndAutomation()]; + return [ + new SendNotification.Task(step.InteractionType, quest.Info.Name), + new EndAutomation() + ]; case EInteractionType.WalkTo: case EInteractionType.Jump: diff --git a/Questionable/Data/TerritoryData.cs b/Questionable/Data/TerritoryData.cs index 0b20d9a9..e2d471c3 100644 --- a/Questionable/Data/TerritoryData.cs +++ b/Questionable/Data/TerritoryData.cs @@ -14,6 +14,7 @@ internal sealed class TerritoryData private readonly ImmutableHashSet _territoriesWithMount; private readonly ImmutableDictionary _dutyTerritories; private readonly ImmutableDictionary _instanceNames; + private readonly ImmutableDictionary _contentFinderConditionNames; public TerritoryData(IDataManager dataManager) { @@ -40,6 +41,10 @@ internal sealed class TerritoryData _instanceNames = dataManager.GetExcelSheet()! .Where(x => x.RowId > 0 && x.Content != 0 && x.ContentLinkType == 1 && x.ContentType.Row != 6) .ToImmutableDictionary(x => x.Content, x => x.Name.ToString()); + + _contentFinderConditionNames = dataManager.GetExcelSheet()! + .Where(x => x.RowId > 0 && x.Content != 0 && x.ContentLinkType == 1 && x.ContentType.Row != 6) + .ToImmutableDictionary(x => x.RowId, x => x.Name.ToString()); } public string? GetName(ushort territoryId) => _territoryNames.GetValueOrDefault(territoryId); @@ -61,4 +66,6 @@ internal sealed class TerritoryData _dutyTerritories.TryGetValue(territoryId, out uint contentType) && contentType == 7; public string? GetInstanceName(ushort instanceId) => _instanceNames.GetValueOrDefault(instanceId); + + public string? GetContentFinderConditionName(uint cfcId) => _contentFinderConditionNames.GetValueOrDefault(cfcId); } diff --git a/Questionable/External/NotificationMasterIpc.cs b/Questionable/External/NotificationMasterIpc.cs new file mode 100644 index 00000000..7a528c6f --- /dev/null +++ b/Questionable/External/NotificationMasterIpc.cs @@ -0,0 +1,24 @@ +using Dalamud.Plugin; +using NotificationMasterAPI; + +namespace Questionable.External; + +internal sealed class NotificationMasterIpc(IDalamudPluginInterface pluginInterface, Configuration configuration) +{ + private readonly NotificationMasterApi _api = new(pluginInterface); + + public bool Enabled => _api.IsIPCReady(); + + public void Notify(string message) + { + var config = configuration.Notifications; + if (!config.Enabled) + return; + + if (config.ShowTrayMessage) + _api.DisplayTrayNotification("Questionable", message); + + if (config.FlashTaskbar) + _api.FlashTaskbarIcon(); + } +} diff --git a/Questionable/Questionable.csproj b/Questionable/Questionable.csproj index 8d1a3c89..64df5619 100644 --- a/Questionable/Questionable.csproj +++ b/Questionable/Questionable.csproj @@ -21,5 +21,6 @@ + diff --git a/Questionable/QuestionablePlugin.cs b/Questionable/QuestionablePlugin.cs index 5e8dc11d..b97158c6 100644 --- a/Questionable/QuestionablePlugin.cs +++ b/Questionable/QuestionablePlugin.cs @@ -127,6 +127,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); } private static void AddTaskFactories(ServiceCollection serviceCollection) @@ -205,6 +206,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceCollection.AddTaskExecutor(); serviceCollection.AddTaskExecutor(); + serviceCollection.AddTaskExecutor(); serviceCollection.AddTaskExecutor(); serviceCollection.AddTaskFactory(); serviceCollection.AddTaskExecutor(); diff --git a/Questionable/Windows/ConfigWindow.cs b/Questionable/Windows/ConfigWindow.cs index 0416943f..7bcd7681 100644 --- a/Questionable/Windows/ConfigWindow.cs +++ b/Questionable/Windows/ConfigWindow.cs @@ -1,12 +1,17 @@ using System; using System.Diagnostics.CodeAnalysis; using System.Linq; +using Dalamud.Game.Text; using Dalamud.Interface.Colors; +using Dalamud.Interface.Components; +using Dalamud.Interface.Utility.Raii; using Dalamud.Plugin; using Dalamud.Plugin.Services; +using Dalamud.Utility; using ImGuiNET; using LLib.ImGui; using Lumina.Excel.GeneratedSheets; +using Questionable.External; using GrandCompany = FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany; namespace Questionable.Windows; @@ -14,6 +19,7 @@ namespace Questionable.Windows; internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig { private readonly IDalamudPluginInterface _pluginInterface; + private readonly NotificationMasterIpc _notificationMasterIpc; private readonly Configuration _configuration; private readonly uint[] _mountIds; @@ -23,10 +29,11 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig ["None (manually pick quest)", "Maelstrom", "Twin Adder", "Immortal Flames"]; [SuppressMessage("Performance", "CA1861", Justification = "One time initialization")] - public ConfigWindow(IDalamudPluginInterface pluginInterface, Configuration configuration, IDataManager dataManager) + public ConfigWindow(IDalamudPluginInterface pluginInterface, NotificationMasterIpc notificationMasterIpc, Configuration configuration, IDataManager dataManager) : base("Config - Questionable###QuestionableConfig", ImGuiWindowFlags.AlwaysAutoResize) { _pluginInterface = pluginInterface; + _notificationMasterIpc = notificationMasterIpc; _configuration = configuration; var mounts = dataManager.GetExcelSheet()! @@ -43,109 +50,174 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig public override void Draw() { - if (ImGui.BeginTabBar("QuestionableConfigTabs")) + using var tabBar = ImRaii.TabBar("QuestionableConfigTabs"); + if (!tabBar) + return; + + DrawGeneralTab(); + DrawNotificationsTab(); + DrawAdvancedTab(); + } + + private void DrawGeneralTab() + { + using var tab = ImRaii.TabItem("General"); + if (!tab) + return; + int selectedMount = Array.FindIndex(_mountIds, x => x == _configuration.General.MountId); + if (selectedMount == -1) { - if (ImGui.BeginTabItem("General")) + selectedMount = 0; + _configuration.General.MountId = _mountIds[selectedMount]; + Save(); + } + + if (ImGui.Combo("Preferred Mount", ref selectedMount, _mountNames, _mountNames.Length)) + { + _configuration.General.MountId = _mountIds[selectedMount]; + Save(); + } + + int grandCompany = (int)_configuration.General.GrandCompany; + if (ImGui.Combo("Preferred Grand Company", ref grandCompany, _grandCompanyNames, + _grandCompanyNames.Length)) + { + _configuration.General.GrandCompany = (GrandCompany)grandCompany; + Save(); + } + + bool hideInAllInstances = _configuration.General.HideInAllInstances; + if (ImGui.Checkbox("Hide quest window in all instanced duties", ref hideInAllInstances)) + { + _configuration.General.HideInAllInstances = hideInAllInstances; + Save(); + } + + bool useEscToCancelQuesting = _configuration.General.UseEscToCancelQuesting; + if (ImGui.Checkbox("Use ESC to cancel questing/movement", ref useEscToCancelQuesting)) + { + _configuration.General.UseEscToCancelQuesting = useEscToCancelQuesting; + Save(); + } + + bool showIncompleteSeasonalEvents = _configuration.General.ShowIncompleteSeasonalEvents; + if (ImGui.Checkbox("Show details for incomplete seasonal events", ref showIncompleteSeasonalEvents)) + { + _configuration.General.ShowIncompleteSeasonalEvents = showIncompleteSeasonalEvents; + Save(); + } + + bool configureTextAdvance = _configuration.General.ConfigureTextAdvance; + if (ImGui.Checkbox("Automatically configure TextAdvance with the recommended settings", + ref configureTextAdvance)) + { + _configuration.General.ConfigureTextAdvance = configureTextAdvance; + Save(); + } + + if (ImGui.CollapsingHeader("Cheats")) + { + ImGui.TextColored(ImGuiColors.DalamudRed, + "This setting will be removed in a future version, and will be\navailable through TextAdvance instead."); + bool automaticallyCompleteSnipeTasks = _configuration.General.AutomaticallyCompleteSnipeTasks; + if (ImGui.Checkbox("Automatically complete snipe tasks", ref automaticallyCompleteSnipeTasks)) { - int selectedMount = Array.FindIndex(_mountIds, x => x == _configuration.General.MountId); - if (selectedMount == -1) + _configuration.General.AutomaticallyCompleteSnipeTasks = automaticallyCompleteSnipeTasks; + Save(); + } + } + } + + private void DrawNotificationsTab() + { + using var tab = ImRaii.TabItem("Notifications"); + if (!tab) + return; + + bool enabled = _configuration.Notifications.Enabled; + if (ImGui.Checkbox("Enable notifications when manual interaction is required", ref enabled)) + { + _configuration.Notifications.Enabled = enabled; + Save(); + } + + using (ImRaii.Disabled(!_configuration.Notifications.Enabled)) + { + using (ImRaii.PushIndent()) + { + var xivChatTypes = Enum.GetValues() + .Where(x => x != XivChatType.StandardEmote) + .ToArray(); + var selectedChatType = Array.IndexOf(xivChatTypes, _configuration.Notifications.ChatType); + string[] chatTypeNames = xivChatTypes + .Select(t => t.GetAttribute()?.FancyName ?? t.ToString()) + .ToArray(); + if (ImGui.Combo("Chat channel", ref selectedChatType, chatTypeNames, + chatTypeNames.Length)) { - selectedMount = 0; - _configuration.General.MountId = _mountIds[selectedMount]; + _configuration.Notifications.ChatType = xivChatTypes[selectedChatType]; Save(); } - if (ImGui.Combo("Preferred Mount", ref selectedMount, _mountNames, _mountNames.Length)) + ImGui.Separator(); + ImGui.Text("NotificationMaster settings"); + ImGui.SameLine(); + ImGuiComponents.HelpMarker("Requires the plugin 'NotificationMaster' to be installed."); + using (ImRaii.Disabled(!_notificationMasterIpc.Enabled)) { - _configuration.General.MountId = _mountIds[selectedMount]; - Save(); - } - - int grandCompany = (int)_configuration.General.GrandCompany; - if (ImGui.Combo("Preferred Grand Company", ref grandCompany, _grandCompanyNames, - _grandCompanyNames.Length)) - { - _configuration.General.GrandCompany = (GrandCompany)grandCompany; - Save(); - } - - bool hideInAllInstances = _configuration.General.HideInAllInstances; - if (ImGui.Checkbox("Hide quest window in all instanced duties", ref hideInAllInstances)) - { - _configuration.General.HideInAllInstances = hideInAllInstances; - Save(); - } - - bool useEscToCancelQuesting = _configuration.General.UseEscToCancelQuesting; - if (ImGui.Checkbox("Use ESC to cancel questing/movement", ref useEscToCancelQuesting)) - { - _configuration.General.UseEscToCancelQuesting = useEscToCancelQuesting; - Save(); - } - - bool showIncompleteSeasonalEvents = _configuration.General.ShowIncompleteSeasonalEvents; - if (ImGui.Checkbox("Show details for incomplete seasonal events", ref showIncompleteSeasonalEvents)) - { - _configuration.General.ShowIncompleteSeasonalEvents = showIncompleteSeasonalEvents; - Save(); - } - - bool configureTextAdvance = _configuration.General.ConfigureTextAdvance; - if (ImGui.Checkbox("Automatically configure TextAdvance with the recommended settings", ref configureTextAdvance)) - { - _configuration.General.ConfigureTextAdvance = configureTextAdvance; - Save(); - } - - if (ImGui.CollapsingHeader("Cheats")) - { - ImGui.TextColored(ImGuiColors.DalamudRed, "This setting will be removed in a future version, and will be\navailable through TextAdvance instead."); - bool automaticallyCompleteSnipeTasks = _configuration.General.AutomaticallyCompleteSnipeTasks; - if (ImGui.Checkbox("Automatically complete snipe tasks", ref automaticallyCompleteSnipeTasks)) + bool showTrayMessage = _configuration.Notifications.ShowTrayMessage; + if (ImGui.Checkbox("Show tray notification", ref showTrayMessage)) { - _configuration.General.AutomaticallyCompleteSnipeTasks = automaticallyCompleteSnipeTasks; + _configuration.Notifications.ShowTrayMessage = showTrayMessage; + Save(); + } + + bool flashTaskbar = _configuration.Notifications.FlashTaskbar; + if (ImGui.Checkbox("Flash taskbar icon", ref flashTaskbar)) + { + _configuration.Notifications.FlashTaskbar = flashTaskbar; Save(); } } - - ImGui.EndTabItem(); } - - if (ImGui.BeginTabItem("Advanced")) - { - ImGui.TextColored(ImGuiColors.DalamudRed, - "Enabling any option here may cause unexpected behavior. Use at your own risk."); - - ImGui.Separator(); - - bool debugOverlay = _configuration.Advanced.DebugOverlay; - if (ImGui.Checkbox("Enable debug overlay", ref debugOverlay)) - { - _configuration.Advanced.DebugOverlay = debugOverlay; - Save(); - } - - bool neverFly = _configuration.Advanced.NeverFly; - if (ImGui.Checkbox("Disable flying (even if unlocked for the zone)", ref neverFly)) - { - _configuration.Advanced.NeverFly = neverFly; - Save(); - } - - bool additionalStatusInformation = _configuration.Advanced.AdditionalStatusInformation; - if (ImGui.Checkbox("Draw additional status information", ref additionalStatusInformation)) - { - _configuration.Advanced.AdditionalStatusInformation = additionalStatusInformation; - Save(); - } - - ImGui.EndTabItem(); - } - - ImGui.EndTabBar(); } } + private void DrawAdvancedTab() + { + using var tab = ImRaii.TabItem("Advanced"); + if (!tab) + return; + + ImGui.TextColored(ImGuiColors.DalamudRed, + "Enabling any option here may cause unexpected behavior. Use at your own risk."); + + ImGui.Separator(); + + bool debugOverlay = _configuration.Advanced.DebugOverlay; + if (ImGui.Checkbox("Enable debug overlay", ref debugOverlay)) + { + _configuration.Advanced.DebugOverlay = debugOverlay; + Save(); + } + + bool neverFly = _configuration.Advanced.NeverFly; + if (ImGui.Checkbox("Disable flying (even if unlocked for the zone)", ref neverFly)) + { + _configuration.Advanced.NeverFly = neverFly; + Save(); + } + + bool additionalStatusInformation = _configuration.Advanced.AdditionalStatusInformation; + if (ImGui.Checkbox("Draw additional status information", ref additionalStatusInformation)) + { + _configuration.Advanced.AdditionalStatusInformation = additionalStatusInformation; + Save(); + } + + ImGui.EndTabItem(); + } + private void Save() => _pluginInterface.SavePluginConfig(_configuration); public void SaveWindowConfig() => Save(); diff --git a/Questionable/Windows/OneTimeSetupWindow.cs b/Questionable/Windows/OneTimeSetupWindow.cs index 6026bafe..2ec22702 100644 --- a/Questionable/Windows/OneTimeSetupWindow.cs +++ b/Questionable/Windows/OneTimeSetupWindow.cs @@ -44,6 +44,12 @@ internal sealed class OneTimeSetupWindow : LWindow, IDisposable during quests, including being interrupted by mobs. """, new Uri("https://github.com/FFXIV-CombatReborn/RotationSolverReborn")), + new("NotificationMaster", + """ + Sends a configurable out-of-game notification if a quest + requires manual actions. + """, + new Uri("https://github.com/NightmareXIV/NotificationMaster")), ]; private readonly Configuration _configuration; @@ -109,6 +115,7 @@ internal sealed class OneTimeSetupWindow : LWindow, IDisposable { if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Check, "Finish Setup")) { + _logger.LogInformation("Marking setup as complete"); _configuration.MarkPluginSetupComplete(); _pluginInterface.SavePluginConfig(_configuration); IsOpen = false; @@ -128,6 +135,7 @@ internal sealed class OneTimeSetupWindow : LWindow, IDisposable if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Times, "Close window & don't enable Questionable")) { + _logger.LogWarning("Closing window without all required plugins installed"); IsOpen = false; } } diff --git a/Questionable/packages.lock.json b/Questionable/packages.lock.json index 07f5b16f..eb9b1d2c 100644 --- a/Questionable/packages.lock.json +++ b/Questionable/packages.lock.json @@ -174,7 +174,7 @@ "gatheringpaths": { "type": "Project", "dependencies": { - "Questionable.Model": "[3.10.0, )" + "Questionable.Model": "[3.12.0, )" } }, "llib": { @@ -183,6 +183,9 @@ "DalamudPackager": "[2.1.13, )" } }, + "notificationmasterapi": { + "type": "Project" + }, "questionable.model": { "type": "Project", "dependencies": { @@ -192,7 +195,7 @@ "questpaths": { "type": "Project", "dependencies": { - "Questionable.Model": "[3.10.0, )" + "Questionable.Model": "[3.12.0, )" } } } diff --git a/vendor/NotificationMasterAPI b/vendor/NotificationMasterAPI new file mode 160000 index 00000000..05b1ba78 --- /dev/null +++ b/vendor/NotificationMasterAPI @@ -0,0 +1 @@ +Subproject commit 05b1ba788d5cb940ed8e82599eb88778c9cecdb0 From cc599b36455f3e42aa750b566d3468d7cf71f5dd Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 4 Nov 2024 01:37:18 +0100 Subject: [PATCH 25/95] Update waypoint order in 'Braced for Trouble' --- .../4914_Braced for Trouble.json | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4914_Braced for Trouble.json b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4914_Braced for Trouble.json index 7e08370b..e211e81d 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4914_Braced for Trouble.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4914_Braced for Trouble.json @@ -104,16 +104,6 @@ "InteractionType": "AttuneAetherCurrent", "AetherCurrentId": 2818450 }, - { - "Position": { - "X": -725.3725, - "Y": 28.795446, - "Z": -39.464005 - }, - "TerritoryId": 1190, - "InteractionType": "WalkTo", - "Mount": true - }, { "DataId": 2013799, "Position": { @@ -133,6 +123,16 @@ 64 ] }, + { + "Position": { + "X": -725.3725, + "Y": 28.795446, + "Z": -39.464005 + }, + "TerritoryId": 1190, + "InteractionType": "WalkTo", + "Mount": true + }, { "DataId": 2013800, "Position": { From 39dbfca8fb0a4314a883c02349a9d1286f5bff43 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Mon, 4 Nov 2024 18:51:31 +0800 Subject: [PATCH 26/95] Added new daily quests: - Krilled to Pieces - Deep Turquoise Sea - Holy Mother of Pearl - Flotsam and Jetsam --- .../Kojin/Dailies/2982_Krilled to Pieces.json | 160 ++++++++++++++++++ .../Dailies/2994_Deep Turquoise Sea.json | 99 +++++++++++ .../Dailies/2995_Holy Mother of Pearl.json | 122 +++++++++++++ .../Dailies/2996_Flotsam and Jetsam.json | 113 +++++++++++++ 4 files changed, 494 insertions(+) create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2982_Krilled to Pieces.json create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2994_Deep Turquoise Sea.json create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2995_Holy Mother of Pearl.json create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2996_Flotsam and Jetsam.json diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2982_Krilled to Pieces.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2982_Krilled to Pieces.json new file mode 100644 index 00000000..65ab799c --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2982_Krilled to Pieces.json @@ -0,0 +1,160 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1024218, + "Position": { + "X": 387.56384, + "Y": -119.795334, + "Z": -257.64862 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": 317.60294, + "Y": -83.18693, + "Z": -227.16872 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "RestartNavigationIfCancelled": false, + "Fly": true + }, + { + "DataId": 2009233, + "Position": { + "X": 81.19324, + "Y": -197.77222, + "Z": -266.8651 + }, + "TerritoryId": 613, + "InteractionType": "Action", + "Action": "Inhale", + "RequiredQuestVariables": [null, null, null, [112, 144], null, null] + }, + { + "DataId": 2009234, + "Position": { + "X": 195.05603, + "Y": -183.30664, + "Z": -346.6087 + }, + "TerritoryId": 613, + "InteractionType": "Action", + "Action": "Inhale", + "RequiredQuestVariables": [ + null, + null, + null, + [32, 96, 144], + null, + null + ] + }, + { + "DataId": 2009235, + "Position": { + "X": 50.980347, + "Y": -139.42175, + "Z": -280.96442 + }, + "TerritoryId": 613, + "InteractionType": "Action", + "Action": "Inhale", + "RequiredQuestVariables": [null, null, null, [80, 96], null, null] + }, + { + "DataId": 2009236, + "Position": { + "X": 192.0653, + "Y": -172.80847, + "Z": -247.63867 + }, + "TerritoryId": 613, + "InteractionType": "Action", + "Action": "Inhale", + "RequiredQuestVariables": [ + null, + null, + null, + [32, 80, 96, 112], + null, + null + ] + }, + { + "DataId": 2009237, + "Position": { + "X": 173.99854, + "Y": -161.85254, + "Z": -190.29535 + }, + "TerritoryId": 613, + "InteractionType": "Action", + "Action": "Inhale", + "RequiredQuestVariables": [ + null, + null, + null, + [32, 80, 112, 144], + null, + null + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 392.59683, + "Y": -119.589325, + "Z": -234.30063 + }, + "TerritoryId": 613, + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2994_Deep Turquoise Sea.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2994_Deep Turquoise Sea.json new file mode 100644 index 00000000..183075b2 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2994_Deep Turquoise Sea.json @@ -0,0 +1,99 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 318.03552, + "Y": -82.86303, + "Z": -227.4517 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "RestartNavigationIfCancelled": false + }, + { + "DataId": 2009119, + "Position": { + "X": -229.26678, + "Y": -308.73578, + "Z": 449.485 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [3], null, null, null, null], + "Fly": true + }, + { + "DataId": 2009121, + "Position": { + "X": -279.62158, + "Y": -366.81165, + "Z": 408.68237 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [19], null, null, null, null], + "Fly": true + }, + { + "DataId": 2009123, + "Position": { + "X": -249.59192, + "Y": -325.948, + "Z": 472.70923 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [35], null, null, null, null], + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 391.50903, + "Y": -119.58932, + "Z": -236.18898 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2995_Holy Mother of Pearl.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2995_Holy Mother of Pearl.json new file mode 100644 index 00000000..a0dc61c1 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2995_Holy Mother of Pearl.json @@ -0,0 +1,122 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1024316, + "Position": { + "X": 714.9614, + "Y": -0.3, + "Z": 140.3982 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2009124, + "Position": { + "X": 753.56665, + "Y": 0.41192627, + "Z": 121.72119 + }, + "TerritoryId": 613, + "InteractionType": "UseItem", + "ItemId": 2002414, + "RequiredQuestVariables": [null, null, null, [17], null, null], + "Fly": true + }, + { + "DataId": 2009127, + "Position": { + "X": 745.44885, + "Y": 0.16778564, + "Z": 95.78088 + }, + "TerritoryId": 613, + "InteractionType": "UseItem", + "ItemId": 2002414, + "RequiredQuestVariables": [null, null, null, [17], null, null], + "Fly": true + }, + { + "DataId": 2009128, + "Position": { + "X": 777.1571, + "Y": 1.2054443, + "Z": 110.36853 + }, + "TerritoryId": 613, + "InteractionType": "UseItem", + "ItemId": 2002414, + "RequiredQuestVariables": [null, null, null, [17], null, null], + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1024316, + "Position": { + "X": 714.9614, + "Y": -0.3, + "Z": 140.3982 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 391.50903, + "Y": -119.58932, + "Z": -236.18898 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2996_Flotsam and Jetsam.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2996_Flotsam and Jetsam.json new file mode 100644 index 00000000..a5def650 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2996_Flotsam and Jetsam.json @@ -0,0 +1,113 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2009130, + "Position": { + "X": 14.572327, + "Y": -0.07635498, + "Z": -352.86487 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Onokoro", + "RequiredQuestVariables": [null, [6, 7], null, null, null, null] + }, + { + "DataId": 2009131, + "Position": { + "X": 90.13501, + "Y": -0.045776367, + "Z": 177.50818 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, [22], null, null, null, null] + }, + { + "DataId": 2009132, + "Position": { + "X": -48.69159, + "Y": -0.045776367, + "Z": -312.1844 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, [23], null, null, null, null] + }, + { + "DataId": 2009133, + "Position": { + "X": 23.941406, + "Y": -0.19836426, + "Z": 192.70618 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, [39], null, null, null, null] + }, + { + "DataId": 2009134, + "Position": { + "X": 284.99268, + "Y": -0.19836426, + "Z": -28.000305 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, [38], null, null, null, null] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 391.50903, + "Y": -119.58932, + "Z": -236.18898 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} From 0f2857f0759a647f2b506a20686b1d80d4d4405b Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Mon, 4 Nov 2024 18:51:53 +0800 Subject: [PATCH 27/95] Added new story quest - The Value of Silence --- .../Story/2975_The Value of Silence.json | 179 ++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Story/2975_The Value of Silence.json diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Story/2975_The Value of Silence.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Story/2975_The Value of Silence.json new file mode 100644 index 00000000..7d9002c9 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Story/2975_The Value of Silence.json @@ -0,0 +1,179 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024215, + "Position": { + "X": 400.07617, + "Y": -119.589325, + "Z": -247.54712 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1024248, + "Position": { + "X": 539.48267, + "Y": -19.505934, + "Z": 416.09827 + }, + "TerritoryId": 622, + "InteractionType": "Interact", + "AetheryteShortcut": "Azim Steppe - Reunion", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1024250, + "Position": { + "X": 561.21155, + "Y": -19.505632, + "Z": 365.28564 + }, + "TerritoryId": 622, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 1024251, + "Position": { + "X": 553.6124, + "Y": -19.505638, + "Z": 314.7478 + }, + "TerritoryId": 622, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 1024252, + "Position": { + "X": 571.2213, + "Y": -19.505638, + "Z": 296.46753 + }, + "TerritoryId": 622, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1024248, + "Position": { + "X": 539.48267, + "Y": -19.505934, + "Z": 416.09827 + }, + "TerritoryId": 622, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANKJN003_02975_Q1_000_000", + "Answer": "TEXT_BANKJN003_02975_A1_000_001" + } + ], + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1024253, + "Position": { + "X": 355.30627, + "Y": -13.019889, + "Z": 471.1222 + }, + "TerritoryId": 622, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANKJN003_02975_Q2_000_000", + "Answer": "TEXT_BANKJN003_02975_A2_000_001" + } + ], + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "Position": { + "X": 474.09186, + "Y": -25.232485, + "Z": 550.5908 + }, + "TerritoryId": 622, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [8251, 8252, 8253], + "Fly": true + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1024256, + "Position": { + "X": 355.79456, + "Y": -12.957703, + "Z": 470.29822 + }, + "TerritoryId": 622, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1024215, + "Position": { + "X": 400.07617, + "Y": -119.589325, + "Z": -247.54712 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANKJN003_02975_Q3_000_000", + "Answer": "TEXT_BANKJN003_02975_A3_000_002" + } + ], + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "Fly": true + } + ] + } + ] +} From d757250d62619555d8ee4194b3f30ab1df3fd6c6 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 4 Nov 2024 13:42:27 +0100 Subject: [PATCH 28/95] Add HW MCH quests --- .../MCH/1696_Savior of Skysteel.json | 159 +++++++++ .../MCH/1697_Master of Marksmanship.json | 78 +++++ .../1698_Always the Last Place You Look.json | 165 +++++++++ .../MCH/1699_Rook Before You Reap.json | 47 +++ .../MCH/1700_Securing the Locks.json | 206 +++++++++++ .../MCH/1701_A Suppressive Strategy.json | 47 +++ .../MCH/1702_Blood on the Sands.json | 137 ++++++++ .../MCH/1703_Rage against the Machinists.json | 169 +++++++++ .../MCH/1704_The Power of a Tourney.json | 100 ++++++ .../MCH/1705_A Joye-less Celebration.json | 85 +++++ .../MCH/1706_Pushing the Brume.json | 328 ++++++++++++++++++ .../MCH/1707_A Joye-ful Reunion.json | 138 ++++++++ .../MCH/1708_Wheels of Justice.json | 159 +++++++++ .../MCH/1710_Taking the Fall.json | 161 +++++++++ .../Class Quests/MCH/1711_Rusted Steel.json | 86 +++++ .../MCH/1712_Rise of the Machinists.json | 184 ++++++++++ .../2109_So You Want to Be a Machinist.json | 38 ++ QuestPaths/quest-v1.json | 3 +- .../Questing/Converter/ActionConverter.cs | 1 + Questionable.Model/Questing/EAction.cs | 1 + .../MovementOverrideController.cs | 3 + 21 files changed, 2294 insertions(+), 1 deletion(-) create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1696_Savior of Skysteel.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1697_Master of Marksmanship.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1698_Always the Last Place You Look.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1699_Rook Before You Reap.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1700_Securing the Locks.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1701_A Suppressive Strategy.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1702_Blood on the Sands.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1703_Rage against the Machinists.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1704_The Power of a Tourney.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1705_A Joye-less Celebration.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1706_Pushing the Brume.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1707_A Joye-ful Reunion.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1708_Wheels of Justice.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1710_Taking the Fall.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1711_Rusted Steel.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/1712_Rise of the Machinists.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/MCH/2109_So You Want to Be a Machinist.json diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1696_Savior of Skysteel.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1696_Savior of Skysteel.json new file mode 100644 index 00000000..b91e8dad --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1696_Savior of Skysteel.json @@ -0,0 +1,159 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_JOBMCH300_01696_Q1_000_000", + "Answer": "TEXT_JOBMCH300_01696_A1_000_001" + } + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1014731, + "Position": { + "X": -73.16705, + "Y": 64.608665, + "Z": -248.0965 + }, + "TerritoryId": 180, + "InteractionType": "Interact", + "AetheryteShortcut": "Outer La Noscea - Camp Overlook" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1014733, + "Position": { + "X": -98.435974, + "Y": 64.488625, + "Z": -215.56421 + }, + "TerritoryId": 180, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1014735, + "Position": { + "X": -112.62689, + "Y": 64.39167, + "Z": -200.12213 + }, + "TerritoryId": 180, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 1014734, + "Position": { + "X": -147.81415, + "Y": 64.37568, + "Z": -220.56921 + }, + "TerritoryId": 180, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1014731, + "Position": { + "X": -73.16705, + "Y": 64.608665, + "Z": -248.0965 + }, + "TerritoryId": 180, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014736, + "Position": { + "X": -99.25995, + "Y": 62.382347, + "Z": -182.78784 + }, + "TerritoryId": 180, + "InteractionType": "CompleteQuest", + "NextQuestId": 1697 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1697_Master of Marksmanship.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1697_Master of Marksmanship.json new file mode 100644 index 00000000..f815895f --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1697_Master of Marksmanship.json @@ -0,0 +1,78 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "TerritoryId": 180, + "InteractionType": "EquipItem", + "ItemId": 10462, + "AetheryteShortcut": "Outer La Noscea - Camp Overlook", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + }, + "StepIf": { + "Item": { + "NotInInventory": true + } + } + } + }, + { + "TerritoryId": 180, + "InteractionType": "EquipRecommended" + }, + { + "DataId": 1014739, + "Position": { + "X": -97.33734, + "Y": 62.55459, + "Z": -175.34143 + }, + "TerritoryId": 180, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014742, + "Position": { + "X": -230.30444, + "Y": 63.88775, + "Z": -257.4655 + }, + "TerritoryId": 180, + "InteractionType": "SinglePlayerDuty", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 1698 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1698_Always the Last Place You Look.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1698_Always the Last Place You Look.json new file mode 100644 index 00000000..978b5d80 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1698_Always the Last Place You Look.json @@ -0,0 +1,165 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014745, + "Position": { + "X": -205.82898, + "Y": 45.803963, + "Z": 517.20447 + }, + "TerritoryId": 137, + "InteractionType": "Interact", + "AetheryteShortcut": "Eastern La Noscea - Wineport", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1014748, + "Position": { + "X": -233.66144, + "Y": 44.330624, + "Z": 519.09656 + }, + "TerritoryId": 137, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 4476 + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "Position": { + "X": -235.98387, + "Y": 44.330624, + "Z": 540.6855 + }, + "TerritoryId": 137, + "InteractionType": "WalkTo" + }, + { + "DataId": 1014749, + "Position": { + "X": -234.02765, + "Y": 44.330624, + "Z": 539.81836 + }, + "TerritoryId": 137, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 4477 + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1014745, + "Position": { + "X": -205.82898, + "Y": 45.803963, + "Z": 517.20447 + }, + "TerritoryId": 137, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 321 + ] + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1014745, + "Position": { + "X": -205.82898, + "Y": 45.803963, + "Z": 517.20447 + }, + "TerritoryId": 137, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1014748, + "Position": { + "X": -233.66144, + "Y": 44.330624, + "Z": 519.09656 + }, + "TerritoryId": 137, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 1699 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1699_Rook Before You Reap.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1699_Rook Before You Reap.json new file mode 100644 index 00000000..ba0456a1 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1699_Rook Before You Reap.json @@ -0,0 +1,47 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "NextQuestId": 1700 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1700_Securing the Locks.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1700_Securing the Locks.json new file mode 100644 index 00000000..8f84b431 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1700_Securing the Locks.json @@ -0,0 +1,206 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014750, + "Position": { + "X": -98.802185, + "Y": 16.0083, + "Z": 26.626953 + }, + "TerritoryId": 418, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1014752, + "Position": { + "X": -155.59625, + "Y": 16.979582, + "Z": -38.376526 + }, + "StopDistance": 10, + "TerritoryId": 418, + "InteractionType": "Action", + "Action": "Slug Shot", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1014753, + "Position": { + "X": 52.994507, + "Y": 24.071722, + "Z": -25.070618 + }, + "StopDistance": 10, + "TerritoryId": 418, + "InteractionType": "Action", + "Action": "Slug Shot", + "AethernetShortcut": [ + "[Ishgard] Skysteel Manufactory", + "[Ishgard] The Forgotten Knight" + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 1014754, + "Position": { + "X": 114.18323, + "Y": -7.146736, + "Z": 83.66516 + }, + "StopDistance": 10, + "TerritoryId": 418, + "InteractionType": "Action", + "Action": "Slug Shot", + "AethernetShortcut": [ + "[Ishgard] The Forgotten Knight", + "[Ishgard] The Brume" + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] The Brume", + "[Ishgard] Skysteel Manufactory" + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1014760, + "Position": { + "X": 232.6543, + "Y": 251.81952, + "Z": 127.21448 + }, + "TerritoryId": 155, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1014762, + "Position": { + "X": 207.44641, + "Y": 255.97514, + "Z": 82.26135 + }, + "TerritoryId": 155, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1014762, + "Position": { + "X": 207.44641, + "Y": 255.97514, + "Z": 82.26135 + }, + "TerritoryId": 155, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 1701 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1701_A Suppressive Strategy.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1701_A Suppressive Strategy.json new file mode 100644 index 00000000..8a37b97f --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1701_A Suppressive Strategy.json @@ -0,0 +1,47 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "NextQuestId": 1702 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1702_Blood on the Sands.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1702_Blood on the Sands.json new file mode 100644 index 00000000..994c210b --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1702_Blood on the Sands.json @@ -0,0 +1,137 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014769, + "Position": { + "X": -245.4414, + "Y": -20.03492, + "Z": -63.645386 + }, + "TerritoryId": 419, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] Skysteel Manufactory", + "[Ishgard] The Jeweled Crozier" + ], + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_JOBMCH451_01702_Q1_000_000", + "Answer": "TEXT_JOBMCH451_01702_A1_000_002" + } + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2006262, + "Position": { + "X": -246.357, + "Y": -20.035156, + "Z": -64.683044 + }, + "StopDistance": 4.5, + "TerritoryId": 419, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1014770, + "Position": { + "X": -16.281433, + "Y": 16.009666, + "Z": -6.668213 + }, + "TerritoryId": 419, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] The Jeweled Crozier", + "[Ishgard] The Last Vigil" + ], + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_JOBMCH451_01702_Q2_000_000", + "Answer": "TEXT_JOBMCH451_01702_A2_000_001" + } + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1014772, + "Position": { + "X": 427.0542, + "Y": 15.170297, + "Z": 706.72156 + }, + "TerritoryId": 137, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Eastern La Noscea - Costa Del Sol", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 1703 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1703_Rage against the Machinists.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1703_Rage against the Machinists.json new file mode 100644 index 00000000..df3de6f3 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1703_Rage against the Machinists.json @@ -0,0 +1,169 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014775, + "Position": { + "X": -155.6878, + "Y": 16.979584, + "Z": -38.4375 + }, + "TerritoryId": 418, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1014776, + "Position": { + "X": -138.7503, + "Y": 23.240587, + "Z": -83.878845 + }, + "TerritoryId": 418, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1014778, + "Position": { + "X": -160.35712, + "Y": 26.378231, + "Z": -88.9754 + }, + "TerritoryId": 418, + "InteractionType": "Action", + "Action": "Slug Shot", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 1014779, + "Position": { + "X": -94.31604, + "Y": 19.008303, + "Z": -16.494995 + }, + "TerritoryId": 418, + "InteractionType": "Action", + "Action": "Slug Shot", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 1014777, + "Position": { + "X": -133.83691, + "Y": 18.94346, + "Z": -12.100403 + }, + "TerritoryId": 418, + "InteractionType": "Action", + "Action": "Slug Shot", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1014782, + "Position": { + "X": -151.59845, + "Y": 16.979586, + "Z": -22.720703 + }, + "TerritoryId": 418, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "NextQuestId": 1704 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1704_The Power of a Tourney.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1704_The Power of a Tourney.json new file mode 100644 index 00000000..c6d91b50 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1704_The Power of a Tourney.json @@ -0,0 +1,100 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014784, + "Position": { + "X": 224.29236, + "Y": 302, + "Z": -276.84448 + }, + "TerritoryId": 155, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1014784, + "Position": { + "X": 224.29236, + "Y": 302, + "Z": -276.84448 + }, + "TerritoryId": 155, + "InteractionType": "SinglePlayerDuty" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1014788, + "Position": { + "X": 222.06445, + "Y": 302, + "Z": -189.01355 + }, + "StopDistance": 5, + "TerritoryId": 155, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 1705 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1705_A Joye-less Celebration.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1705_A Joye-less Celebration.json new file mode 100644 index 00000000..48c431cd --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1705_A Joye-less Celebration.json @@ -0,0 +1,85 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014793, + "Position": { + "X": -139.48273, + "Y": 19.236662, + "Z": -11.978394 + }, + "TerritoryId": 418, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1014795, + "Position": { + "X": -18.265076, + "Y": 16.009666, + "Z": -7.5532227 + }, + "TerritoryId": 419, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] Skysteel Manufactory", + "[Ishgard] The Last Vigil" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014796, + "Position": { + "X": -152.88019, + "Y": 16.999998, + "Z": -52.903076 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AethernetShortcut": [ + "[Ishgard] The Last Vigil", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 1706 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1706_Pushing the Brume.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1706_Pushing the Brume.json new file mode 100644 index 00000000..9b0e01bd --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1706_Pushing the Brume.json @@ -0,0 +1,328 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "StopDistance": 5, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": -461.6901, + "Y": -4.0053887, + "Z": -292.6277 + }, + "StopDistance": 0.5, + "TerritoryId": 156, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 201 + ], + "AetheryteShortcut": "Mor Dhona", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + }, + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + } + }, + { + "DataId": 2006271, + "Position": { + "X": -462.7909, + "Y": -2.7619019, + "Z": -289.4179 + }, + "StopDistance": 4.5, + "TerritoryId": 156, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "Position": { + "X": -567.30835, + "Y": -3.9906769, + "Z": -334.9877 + }, + "StopDistance": 0.5, + "TerritoryId": 156, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 5039, + 5040, + 5041 + ], + "Fly": true, + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } + }, + { + "DataId": 2006270, + "Position": { + "X": -570.4891, + "Y": -2.8840332, + "Z": -334.76776 + }, + "StopDistance": 4.5, + "TerritoryId": 156, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "Position": { + "X": -660.1279, + "Y": -2.9330442, + "Z": -366.86145 + }, + "TerritoryId": 156, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 4472, + 4473 + ], + "Fly": true, + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } + }, + { + "DataId": 2006269, + "Position": { + "X": -661.3413, + "Y": -1.6937866, + "Z": -367.8188 + }, + "TerritoryId": 156, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "StopDistance": 5, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1014801, + "Position": { + "X": 16.220276, + "Y": -12.02089, + "Z": 49.454468 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] Skysteel Manufactory", + "[Ishgard] The Brume" + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 1014800, + "Position": { + "X": 58.182617, + "Y": -12.020877, + "Z": 79.81995 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 1014799, + "Position": { + "X": 114.88513, + "Y": -19.787056, + "Z": 62.57715 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "StopDistance": 5, + "TerritoryId": 418, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] The Brume", + "[Ishgard] Skysteel Manufactory" + ] + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 2006272, + "Position": { + "X": 483.97034, + "Y": 212.51233, + "Z": 726.8329 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 1707, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_JOBMCH520_01706_Q1_000_000", + "Answer": "TEXT_JOBMCH520_01706_A1_000_001" + } + ] + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1707_A Joye-ful Reunion.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1707_A Joye-ful Reunion.json new file mode 100644 index 00000000..5a260cd3 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1707_A Joye-ful Reunion.json @@ -0,0 +1,138 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014805, + "Position": { + "X": 482.96326, + "Y": 212.5841, + "Z": 724.7882 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1014809, + "Position": { + "X": 114.335815, + "Y": -19.787056, + "Z": 61.81433 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Brume" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1014810, + "Position": { + "X": 117.17395, + "Y": -22.017334, + "Z": 32.791626 + }, + "StopDistance": 10, + "TerritoryId": 418, + "InteractionType": "Action", + "Action": "Slug Shot" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1014811, + "Position": { + "X": 319.69165, + "Y": 161.10796, + "Z": 147.44788 + }, + "TerritoryId": 397, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1014816, + "Position": { + "X": 397.05493, + "Y": 161.18224, + "Z": -98.10034 + }, + "StopDistance": 5, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 1708 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1708_Wheels of Justice.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1708_Wheels of Justice.json new file mode 100644 index 00000000..bee9501e --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1708_Wheels of Justice.json @@ -0,0 +1,159 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1014822, + "Position": { + "X": 95.20105, + "Y": 15.000009, + "Z": 25.345215 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] Skysteel Manufactory", + "[Ishgard] The Forgotten Knight" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] The Forgotten Knight", + "[Ishgard] Skysteel Manufactory" + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1014823, + "Position": { + "X": 490.37915, + "Y": -51.13661, + "Z": 29.587158 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather", + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1014825, + "Position": { + "X": 576.4706, + "Y": -37.673805, + "Z": -134.78296 + }, + "TerritoryId": 398, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 5042, + 5045 + ], + "Fly": true + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1014829, + "Position": { + "X": 578.5762, + "Y": -37.88608, + "Z": -132.55518 + }, + "StopDistance": 7, + "TerritoryId": 398, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 1710 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1710_Taking the Fall.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1710_Taking the Fall.json new file mode 100644 index 00000000..c40cf6af --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1710_Taking the Fall.json @@ -0,0 +1,161 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": 306.3128, + "Y": 70.876, + "Z": -411.73788 + }, + "TerritoryId": 401, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 4484 + ], + "AetheryteShortcut": "The Sea of Clouds - Ok' Zundu", + "Fly": true, + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + } + }, + { + "DataId": 2006274, + "Position": { + "X": 305.0736, + "Y": 71.06128, + "Z": -413.44324 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "Position": { + "X": 382.58212, + "Y": 71.00385, + "Z": -313.4424 + }, + "TerritoryId": 401, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 4617 + ], + "Fly": true, + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } + }, + { + "DataId": 2006275, + "Position": { + "X": 384.02368, + "Y": 71.39697, + "Z": -311.90973 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 1711 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1711_Rusted Steel.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1711_Rusted Steel.json new file mode 100644 index 00000000..fb57efc1 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1711_Rusted Steel.json @@ -0,0 +1,86 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014830, + "Position": { + "X": 74.81494, + "Y": 10.089107, + "Z": -111.680786 + }, + "TerritoryId": 419, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] Skysteel Manufactory", + "[Ishgard] The Tribunal" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1014830, + "Position": { + "X": 74.81494, + "Y": 10.089107, + "Z": -111.680786 + }, + "TerritoryId": 419, + "InteractionType": "Action", + "Action": "Slug Shot" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AethernetShortcut": [ + "[Ishgard] The Tribunal", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 1712 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/1712_Rise of the Machinists.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1712_Rise of the Machinists.json new file mode 100644 index 00000000..989ae550 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/1712_Rise of the Machinists.json @@ -0,0 +1,184 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1014835, + "Position": { + "X": -86.4729, + "Y": 15.23318, + "Z": -63.98114 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 1014837, + "Position": { + "X": -135.51538, + "Y": 5.467082, + "Z": 39.93274 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + }, + { + "DataId": 1014836, + "Position": { + "X": -20.004639, + "Y": 1.5791271, + "Z": 90.37915 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] Skysteel Manufactory", + "[Ishgard] Aetheryte Plaza" + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 1014834, + "Position": { + "X": 56.839844, + "Y": 24.071722, + "Z": -30.075562 + }, + "TerritoryId": 418, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] The Forgotten Knight" + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "StopDistance": 5, + "TerritoryId": 418, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Ishgard] The Forgotten Knight", + "[Ishgard] Skysteel Manufactory" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "Position": { + "X": 874.0602, + "Y": -3.0127013, + "Z": 353.70963 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather", + "Fly": true + }, + { + "DataId": 1014841, + "Position": { + "X": -631.281, + "Y": 96.94948, + "Z": -461.63123 + }, + "TerritoryId": 397, + "InteractionType": "SinglePlayerDuty", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "NextQuestId": 2109 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/MCH/2109_So You Want to Be a Machinist.json b/QuestPaths/3.x - Heavensward/Class Quests/MCH/2109_So You Want to Be a Machinist.json new file mode 100644 index 00000000..2e4e1d48 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/MCH/2109_So You Want to Be a Machinist.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1014577, + "Position": { + "X": -154.31458, + "Y": 16.999992, + "Z": -53.3609 + }, + "TerritoryId": 418, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "AethernetShortcut": [ + "[Ishgard] Aetheryte Plaza", + "[Ishgard] Skysteel Manufactory" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_JOBMCH299_02109_Q1_000_000", + "Yes": true + } + ] + } + ] + } + ] +} diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 3a8e5eb3..a1d9aa33 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -948,7 +948,8 @@ "Fuma Shuriken", "Katon", "Raiton", - "Hide" + "Hide", + "Slug Shot" ] } }, diff --git a/Questionable.Model/Questing/Converter/ActionConverter.cs b/Questionable.Model/Questing/Converter/ActionConverter.cs index 7a217424..d3a90500 100644 --- a/Questionable.Model/Questing/Converter/ActionConverter.cs +++ b/Questionable.Model/Questing/Converter/ActionConverter.cs @@ -39,5 +39,6 @@ public sealed class ActionConverter() : EnumConverter(Values) { EAction.FumaShuriken, "Fuma Shuriken" }, { EAction.Katon, "Katon" }, { EAction.Raiton, "Raiton" }, + { EAction.SlugShot, "Slug Shot" }, }; } diff --git a/Questionable.Model/Questing/EAction.cs b/Questionable.Model/Questing/EAction.cs index 42928173..5fd17258 100644 --- a/Questionable.Model/Questing/EAction.cs +++ b/Questionable.Model/Questing/EAction.cs @@ -45,6 +45,7 @@ public enum EAction Katon = 2266, Raiton = 2267, RabbitMedium = 2272, + SlugShot = 7412, CollectMiner = 240, ScourMiner = 22182, diff --git a/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs b/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs index 7b7186ef..182946f6 100644 --- a/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs +++ b/Questionable/Controller/NavigationOverrides/MovementOverrideController.cs @@ -49,6 +49,9 @@ internal sealed class MovementOverrideController // rising stones, plant boxes new BlacklistedPoint(351, new(3.25f, 0.75f, 8.5f), new(4f, 0f, 9.5f)), + // ishgard, clutter + new BlacklistedPoint(418, new(-136.75f, 2.75f, 9), new(-138.66408f, 2.0333426f, 8.860787f), 1f), + // southern sea of clouds, random rock new BlacklistedPoint(401, new(-14.75f, -136.75f, 515.75f), new(-17.631899f, -137.39148f, 512.6676f), 2), From bca953b913c4275803387c01828a7a5a0e068b88 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Mon, 4 Nov 2024 20:54:37 +0800 Subject: [PATCH 29/95] Added new daily quests: - Confused Courier - Buoyant Bounty - Anala-lyze This --- .../Kojin/Dailies/2987_Confused Courier.json | 105 +++++++++++ .../Kojin/Dailies/2988_Buoyant Bounty.json | 112 +++++++++++ .../Kojin/Dailies/2989_Anala-lyze This.json | 175 ++++++++++++++++++ 3 files changed, 392 insertions(+) create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2987_Confused Courier.json create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2988_Buoyant Bounty.json create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2989_Anala-lyze This.json diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2987_Confused Courier.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2987_Confused Courier.json new file mode 100644 index 00000000..39d11335 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2987_Confused Courier.json @@ -0,0 +1,105 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1024300, + "Position": { + "X": 139.60474, + "Y": -0.17411774, + "Z": -578.1796 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "AetheryteShortcut": "Ruby Sea - Onokoro", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1024305, + "Position": { + "X": 30.71643, + "Y": 1.1855971, + "Z": -529.778 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [33, 34], null, null, null], + "Fly": true + }, + { + "DataId": 1024303, + "Position": { + "X": 43.503418, + "Y": 3.6636734, + "Z": -619.379 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [17, 35], null, null, null], + "Fly": true + }, + { + "DataId": 1024301, + "Position": { + "X": -11.886841, + "Y": 3.194641, + "Z": -622.88855 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [18, 19], null, null, null], + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 392.59683, + "Y": -119.589325, + "Z": -234.30063 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2988_Buoyant Bounty.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2988_Buoyant Bounty.json new file mode 100644 index 00000000..1643f212 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2988_Buoyant Bounty.json @@ -0,0 +1,112 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Ruby Sea - Onokoro" + }, + { + "DataId": 2009104, + "Position": { + "X": 399.89307, + "Y": -0.10687256, + "Z": -347.21906 + }, + "TerritoryId": 613, + "InteractionType": "UseItem", + "RequiredQuestVariables": [null, null, [16], null, null, null], + "ItemId": 2002405, + "Fly": true + }, + { + "DataId": 2009103, + "Position": { + "X": 187.24341, + "Y": -0.10687256, + "Z": -477.71423 + }, + "TerritoryId": 613, + "InteractionType": "UseItem", + "RequiredQuestVariables": [null, null, [32], null, null, null], + "ItemId": 2002405, + "Fly": true + }, + { + "DataId": 2009102, + "Position": { + "X": 379.07983, + "Y": -0.07635498, + "Z": -494.31604 + }, + "TerritoryId": 613, + "InteractionType": "UseItem", + "RequiredQuestVariables": [null, null, [48], null, null, null], + "ItemId": 2002405, + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1024218, + "Position": { + "X": 387.56384, + "Y": -119.795334, + "Z": -257.64862 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 392.59683, + "Y": -119.589325, + "Z": -234.30063 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2989_Anala-lyze This.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2989_Anala-lyze This.json new file mode 100644 index 00000000..a98fc963 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2989_Anala-lyze This.json @@ -0,0 +1,175 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Kugane", + "AethernetShortcut": [ + "[Kugane] Aetheryte Plaza", + "[Kugane] The Ruby Price" + ] + }, + { + "DataId": 2009161, + "Position": { + "X": 52.262085, + "Y": 18.844849, + "Z": 576.43994 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [8238], + "RequiredQuestVariables": [null, null, [16], null, null, null], + "Fly": true + }, + { + "Position": { + "X": 52.262085, + "Y": 18.844849, + "Z": 576.43994 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "KillEnemyDataIds": [8239], + "RequiredQuestVariables": [null, null, [16], null, null, null] + }, + { + "Position": { + "X": 52.262085, + "Y": 18.844849, + "Z": 576.43994 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "KillEnemyDataIds": [8240], + "RequiredQuestVariables": [null, null, [16], null, null, null] + }, + { + "DataId": 2009162, + "Position": { + "X": 29.587158, + "Y": 51.407593, + "Z": 771.35876 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [8238], + "RequiredQuestVariables": [null, null, [32], null, null, null], + "Fly": true + }, + { + "Position": { + "X": 29.587158, + "Y": 51.407593, + "Z": 771.35876 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "KillEnemyDataIds": [8239], + "RequiredQuestVariables": [null, null, [32], null, null, null] + }, + { + "Position": { + "X": 29.587158, + "Y": 51.407593, + "Z": 771.35876 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "KillEnemyDataIds": [8240], + "RequiredQuestVariables": [null, null, [32], null, null, null] + }, + { + "DataId": 2009163, + "Position": { + "X": 337.84998, + "Y": 5.8136597, + "Z": 685.26733 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [8238], + "RequiredQuestVariables": [null, null, [48], null, null, null], + "Fly": true + }, + { + "Position": { + "X": 337.84998, + "Y": 5.8136597, + "Z": 685.26733 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "KillEnemyDataIds": [8239], + "RequiredQuestVariables": [null, null, [48], null, null, null] + }, + { + "Position": { + "X": 337.84998, + "Y": 5.8136597, + "Z": 685.26733 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "KillEnemyDataIds": [8240], + "RequiredQuestVariables": [null, null, [48], null, null, null] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 392.59683, + "Y": -119.589325, + "Z": -234.30063 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} From cc8f326d7ea10afefcb0d5a8e7ae5dae99ba9ea1 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 4 Nov 2024 17:19:49 +0100 Subject: [PATCH 30/95] Handle how required classes are configured for individual quest steps + gathering --- LLib | 2 +- .../RoslynElements/GatheredItemExtensions.cs | 4 - .../RoslynElements/QuestStepExtensions.cs | 6 ++ .../3852_Prudence at This Junction.json | 81 ++++++++++++++++++- .../Qitari/Dailies/3806_A Tool's Errand.json | 16 +++- .../3807_Where the Sun Don't Shine.json | 16 +++- .../Qitari/Dailies/3808_A Touch of Home.json | 16 +++- .../Qitari/Dailies/3809_Mother's Recipe.json | 16 +++- .../Dailies/3811_Rational Thinking.json | 16 +++- .../Qitari/Dailies/3812_Making Scents.json | 16 +++- .../Dailies/3814_Prayers and Poison.json | 16 +++- .../Qitari/Dailies/3815_Salve Our Souls.json | 16 +++- .../Qitari/Dailies/3816_Rings of Pattern.json | 16 +++- .../Qitari/Dailies/3817_You Dirty Rats.json | 16 +++- .../Dailies/3818_If It's Broke, Fix It.json | 16 +++- .../3820_The Qitari Book of Records.json | 16 +++- .../Qitari/Dailies/3821_Meat and Greet.json | 16 +++- .../Dailies/3822_I Have Never Exploded.json | 16 +++- .../Qitari/Dailies/3824_Rock 'n Ronka.json | 16 +++- ...5_There's No Clean Like Qhoterl Clean.json | 16 +++- .../Dailies/3827_Her Splendid Materials.json | 16 +++- .../Qitari/Dailies/3828_Splendid Eats.json | 17 +++- .../Dailies/3830_Safety Is No Accident.json | 16 +++- ...Fish, Two Fish, Bread Fish, Stew Fish.json | 16 +++- .../Story/3795_Wisdom of the Night.json | 16 +++- .../Qitari/Story/3796_Delving Deeper.json | 16 +++- .../Qitari/Story/3797_A Chilling Fate.json | 16 +++- .../Story/3798_What Ails the Forest.json | 16 +++- .../Dailies/4607_Signs of the Past.json | 16 +++- .../Dailies/4609_Well Below Standard.json | 16 +++- .../Dailies/4611_Grounds for Improvement.json | 16 +++- .../Dailies/4612_A Fertile Blend.json | 16 +++- .../Dailies/4614_The Robot and the Sea.json | 16 +++- .../Dailies/4615_Using Their Heads.json | 19 +++-- .../Dailies/4617_I'll Fish It Myself.json | 16 +++- .../Omicrons/Dailies/4618_Sold Out.json | 16 +++- .../Dailies/4620_A Taste of the Sea.json | 16 +++- .../Omicrons/Dailies/4622_Ea Epicurious.json | 16 +++- .../Omicrons/Dailies/4623_I, Omicron.json | 16 +++- ...25_Corporeal Hand to Proverbial Mouth.json | 16 +++- .../Dailies/4626_Mush for Miw Miisv.json | 16 +++- .../Dailies/4627_Corporeal Comforts.json | 16 +++- .../Dailies/4629_A Light in the Dark.json | 16 +++- .../4630_Reclaiming the Taste of Home.json | 16 +++- .../Omicrons/Dailies/4631_Not Forgotten.json | 16 +++- .../Dailies/4632_Checking for Cavities.json | 17 +++- .../Omicrons/Dailies/4634_The Lost World.json | 16 +++- ...1_The Café at the End of the Universe.json | 16 +++- .../4602_Longing So for All the Fish.json | 16 +++- .../Story/4603_And Another Question.json | 19 +++-- ...estaurateur's Guide to the Dragonstar.json | 16 +++- .../Omicrons/Story/4605_Mostly Heartless.json | 16 +++- QuestPaths/quest-v1.json | 21 +++-- .../Questing/Converter/ClassJobConverter.cs | 26 ------ .../Converter/ExtendedClassJobConverter.cs | 57 +++++++++++++ .../Questing/EExtendedClassJob.cs | 55 +++++++++++++ Questionable.Model/Questing/GatheredItem.cs | 6 -- Questionable.Model/Questing/QuestStep.cs | 2 + Questionable.Model/common-schema.json | 51 ++++++++++++ .../Controller/ContextMenuController.cs | 5 +- .../Controller/Steps/Shared/Gather.cs | 27 +------ .../Controller/Steps/Shared/SkipCondition.cs | 41 +++++++++- Questionable/Data/ClassJobUtils.cs | 66 +++++++++++++++ 63 files changed, 1000 insertions(+), 226 deletions(-) delete mode 100644 Questionable.Model/Questing/Converter/ClassJobConverter.cs create mode 100644 Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs create mode 100644 Questionable.Model/Questing/EExtendedClassJob.cs create mode 100644 Questionable/Data/ClassJobUtils.cs diff --git a/LLib b/LLib index 912a7b04..fde09c70 160000 --- a/LLib +++ b/LLib @@ -1 +1 @@ -Subproject commit 912a7b04ce180e337af9beeef2d1393b040c1ba8 +Subproject commit fde09c705b648f03c287814191a554f0a4b92cc4 diff --git a/QuestPathGenerator/RoslynElements/GatheredItemExtensions.cs b/QuestPathGenerator/RoslynElements/GatheredItemExtensions.cs index 179c7a66..cad92fac 100644 --- a/QuestPathGenerator/RoslynElements/GatheredItemExtensions.cs +++ b/QuestPathGenerator/RoslynElements/GatheredItemExtensions.cs @@ -29,10 +29,6 @@ internal static class GatheredItemExtensions .AsSyntaxNodeOrToken(), Assignment(nameof(GatheredItem.Collectability), gatheredItem.Collectability, emptyItem.Collectability) - .AsSyntaxNodeOrToken(), - Assignment(nameof(GatheredItem.QuestAcceptedAsClass), - gatheredItem.QuestAcceptedAsClass, - emptyItem.QuestAcceptedAsClass) .AsSyntaxNodeOrToken())))); } } diff --git a/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs b/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs index d65ca794..ecfea639 100644 --- a/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs +++ b/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs @@ -120,6 +120,12 @@ internal static class QuestStepExtensions AssignmentList(nameof(QuestStep.RequiredQuestVariables), step.RequiredQuestVariables) .AsSyntaxNodeOrToken(), + AssignmentList(nameof(QuestStep.RequiredCurrentJob), + step.RequiredCurrentJob) + .AsSyntaxNodeOrToken(), + AssignmentList(nameof(QuestStep.RequiredQuestAcceptedJob), + step.RequiredQuestAcceptedJob) + .AsSyntaxNodeOrToken(), AssignmentList(nameof(QuestStep.ItemsToGather), step.ItemsToGather), AssignmentList(nameof(QuestStep.CompletionQuestVariablesFlags), diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/3852_Prudence at This Junction.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/3852_Prudence at This Junction.json index 50722a12..e2e944e9 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/3852_Prudence at This Junction.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/3852_Prudence at This Junction.json @@ -40,10 +40,88 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": -12.223117, + "Y": -2.0482793, + "Z": -145.75566 + }, + "TerritoryId": 141, + "InteractionType": "WalkTo" + }, { "TerritoryId": 141, "InteractionType": "EquipRecommended" }, + { + "DataId": 1001564, + "Position": { + "X": -9.689575, + "Y": -2.0480804, + "Z": -145.09808 + }, + "TerritoryId": 141, + "InteractionType": "PurchaseItem", + "PurchaseMenu": { + "ExcelSheet": "GilShop", + "Key": 262186 + }, + "ItemId": 2654, + "ItemCount": 1, + "RequiredCurrentJob": [ + "DoW" + ], + "SkipConditions": { + "StepIf": { + "Item": { + "NotInInventory": false + } + } + } + }, + { + "DataId": 1001564, + "Position": { + "X": -9.689575, + "Y": -2.0480804, + "Z": -145.09808 + }, + "TerritoryId": 141, + "InteractionType": "PurchaseItem", + "PurchaseMenu": { + "ExcelSheet": "GilShop", + "Key": 262186 + }, + "ItemId": 2655, + "ItemCount": 1, + "RequiredCurrentJob": [ + "DoM" + ] + }, + { + "TerritoryId": 141, + "InteractionType": "EquipItem", + "ItemId": 2654, + "SkipConditions": { + "StepIf": { + "Item": { + "NotInInventory": true + } + } + } + }, + { + "TerritoryId": 141, + "InteractionType": "EquipItem", + "ItemId": 2655, + "SkipConditions": { + "StepIf": { + "Item": { + "NotInInventory": true + } + } + } + }, { "DataId": 1001447, "Position": { @@ -52,8 +130,7 @@ "Z": -148.51611 }, "TerritoryId": 141, - "InteractionType": "CompleteQuest", - "Comment": "All starting gear (except the hat) is ilvl 5 already" + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3806_A Tool's Errand.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3806_A Tool's Errand.json index 3a11c275..95347389 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3806_A Tool's Errand.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3806_A Tool's Errand.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29517, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29543, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3807_Where the Sun Don't Shine.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3807_Where the Sun Don't Shine.json index 194836db..88b96f98 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3807_Where the Sun Don't Shine.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3807_Where the Sun Don't Shine.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29518, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29544, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3808_A Touch of Home.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3808_A Touch of Home.json index 5fa818a8..8c2898f5 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3808_A Touch of Home.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3808_A Touch of Home.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29519, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29545, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3809_Mother's Recipe.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3809_Mother's Recipe.json index e0e1def3..001da099 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3809_Mother's Recipe.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3809_Mother's Recipe.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29520, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29546, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3811_Rational Thinking.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3811_Rational Thinking.json index 1e420bdf..1d5c1c12 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3811_Rational Thinking.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3811_Rational Thinking.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29521, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29547, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3812_Making Scents.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3812_Making Scents.json index 6b0ac904..277bd959 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3812_Making Scents.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3812_Making Scents.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29522, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29548, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3814_Prayers and Poison.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3814_Prayers and Poison.json index 6fa2638b..3805b7a9 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3814_Prayers and Poison.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3814_Prayers and Poison.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29523, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29549, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3815_Salve Our Souls.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3815_Salve Our Souls.json index 1a63219d..43379d50 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3815_Salve Our Souls.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3815_Salve Our Souls.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29524, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29550, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3816_Rings of Pattern.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3816_Rings of Pattern.json index bac8bfae..dfe3de3b 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3816_Rings of Pattern.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3816_Rings of Pattern.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29525, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29551, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3817_You Dirty Rats.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3817_You Dirty Rats.json index f0198739..8d18783e 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3817_You Dirty Rats.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3817_You Dirty Rats.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29526, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29552, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3818_If It's Broke, Fix It.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3818_If It's Broke, Fix It.json index 8d0ac16d..6e2d4ab0 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3818_If It's Broke, Fix It.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3818_If It's Broke, Fix It.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29527, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29553, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3820_The Qitari Book of Records.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3820_The Qitari Book of Records.json index 204ea239..f3b347cb 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3820_The Qitari Book of Records.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3820_The Qitari Book of Records.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29528, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29554, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3821_Meat and Greet.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3821_Meat and Greet.json index ffa6ff83..afc170ee 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3821_Meat and Greet.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3821_Meat and Greet.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29529, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29555, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3822_I Have Never Exploded.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3822_I Have Never Exploded.json index dec082cd..b78b3195 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3822_I Have Never Exploded.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3822_I Have Never Exploded.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29530, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29556, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3824_Rock 'n Ronka.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3824_Rock 'n Ronka.json index 7746ab7a..89faa318 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3824_Rock 'n Ronka.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3824_Rock 'n Ronka.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29531, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29557, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3825_There's No Clean Like Qhoterl Clean.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3825_There's No Clean Like Qhoterl Clean.json index b5e71d0b..02b0e4ea 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3825_There's No Clean Like Qhoterl Clean.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3825_There's No Clean Like Qhoterl Clean.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29532, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29558, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3827_Her Splendid Materials.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3827_Her Splendid Materials.json index 6b71e791..d694fed1 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3827_Her Splendid Materials.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3827_Her Splendid Materials.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29533, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29559, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3828_Splendid Eats.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3828_Splendid Eats.json index 9442335f..5e2e49e4 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3828_Splendid Eats.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3828_Splendid Eats.json @@ -23,14 +23,25 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29534, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ + { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29560, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3830_Safety Is No Accident.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3830_Safety Is No Accident.json index 8f3976ed..8e05db5e 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3830_Safety Is No Accident.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3830_Safety Is No Accident.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29535, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29561, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3831_One Fish, Two Fish, Bread Fish, Stew Fish.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3831_One Fish, Two Fish, Bread Fish, Stew Fish.json index f2761f62..255ac549 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3831_One Fish, Two Fish, Bread Fish, Stew Fish.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3831_One Fish, Two Fish, Bread Fish, Stew Fish.json @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29536, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29562, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3795_Wisdom of the Night.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3795_Wisdom of the Night.json index 84db90fd..5cd42198 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3795_Wisdom of the Night.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3795_Wisdom of the Night.json @@ -40,14 +40,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29513, "ItemCount": 1 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29539, "ItemCount": 1 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3796_Delving Deeper.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3796_Delving Deeper.json index be8eb6d4..7e573e1f 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3796_Delving Deeper.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3796_Delving Deeper.json @@ -55,14 +55,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29514, "ItemCount": 1 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29540, "ItemCount": 1 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3797_A Chilling Fate.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3797_A Chilling Fate.json index 4118fec3..1b253615 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3797_A Chilling Fate.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3797_A Chilling Fate.json @@ -38,14 +38,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29515, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29541, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3798_What Ails the Forest.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3798_What Ails the Forest.json index e7e98bf5..f5f60b1b 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3798_What Ails the Forest.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3798_What Ails the Forest.json @@ -85,14 +85,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29516, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29542, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4607_Signs of the Past.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4607_Signs of the Past.json index e70487a8..8a8c5c65 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4607_Signs of the Past.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4607_Signs of the Past.json @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38281, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38305, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4609_Well Below Standard.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4609_Well Below Standard.json index c50c4a58..e66130f8 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4609_Well Below Standard.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4609_Well Below Standard.json @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38282, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38306, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4611_Grounds for Improvement.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4611_Grounds for Improvement.json index 9cdb099a..a6c457b9 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4611_Grounds for Improvement.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4611_Grounds for Improvement.json @@ -34,14 +34,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38284, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38308, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4612_A Fertile Blend.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4612_A Fertile Blend.json index 0635180f..a98f9a30 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4612_A Fertile Blend.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4612_A Fertile Blend.json @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38283, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38307, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4614_The Robot and the Sea.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4614_The Robot and the Sea.json index 71875e68..24595739 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4614_The Robot and the Sea.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4614_The Robot and the Sea.json @@ -34,14 +34,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38285, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38309, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4615_Using Their Heads.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4615_Using Their Heads.json index dece67eb..7da759d5 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4615_Using Their Heads.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4615_Using Their Heads.json @@ -23,19 +23,28 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38286, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38310, "ItemCount": 3 } - ], - "Fly": true + ] }, { "DataId": 2013072, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4617_I'll Fish It Myself.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4617_I'll Fish It Myself.json index 513129c6..03704516 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4617_I'll Fish It Myself.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4617_I'll Fish It Myself.json @@ -35,14 +35,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38287, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38311, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4618_Sold Out.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4618_Sold Out.json index 4b83ed9d..901356f3 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4618_Sold Out.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4618_Sold Out.json @@ -35,14 +35,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38288, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38312, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4620_A Taste of the Sea.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4620_A Taste of the Sea.json index 94328961..75083d05 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4620_A Taste of the Sea.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4620_A Taste of the Sea.json @@ -49,14 +49,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38289, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38313, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4622_Ea Epicurious.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4622_Ea Epicurious.json index 9662a58c..6bcca2ff 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4622_Ea Epicurious.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4622_Ea Epicurious.json @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38290, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38314, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4623_I, Omicron.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4623_I, Omicron.json index 6d818a49..b3526732 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4623_I, Omicron.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4623_I, Omicron.json @@ -35,14 +35,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38291, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38315, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4625_Corporeal Hand to Proverbial Mouth.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4625_Corporeal Hand to Proverbial Mouth.json index b1fc3e92..547e110f 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4625_Corporeal Hand to Proverbial Mouth.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4625_Corporeal Hand to Proverbial Mouth.json @@ -34,14 +34,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38292, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38316, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4626_Mush for Miw Miisv.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4626_Mush for Miw Miisv.json index 1faf2416..9e32671b 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4626_Mush for Miw Miisv.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4626_Mush for Miw Miisv.json @@ -34,14 +34,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38293, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38317, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4627_Corporeal Comforts.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4627_Corporeal Comforts.json index f8be57ec..9be8d45f 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4627_Corporeal Comforts.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4627_Corporeal Comforts.json @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38294, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38318, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4629_A Light in the Dark.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4629_A Light in the Dark.json index 9ba18a23..a2599e52 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4629_A Light in the Dark.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4629_A Light in the Dark.json @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38295, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38319, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4630_Reclaiming the Taste of Home.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4630_Reclaiming the Taste of Home.json index 6e075fa8..a519f509 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4630_Reclaiming the Taste of Home.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4630_Reclaiming the Taste of Home.json @@ -49,14 +49,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38296, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38320, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4631_Not Forgotten.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4631_Not Forgotten.json index f3eca745..c6fcbdde 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4631_Not Forgotten.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4631_Not Forgotten.json @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38297, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38321, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4632_Checking for Cavities.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4632_Checking for Cavities.json index bf720251..2f609cbf 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4632_Checking for Cavities.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4632_Checking for Cavities.json @@ -24,14 +24,25 @@ "TerritoryId": 960, "InteractionType": "Gather", "AetheryteShortcut": "Ultima Thule - Reah Tahra", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38299, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "AetheryteShortcut": "Ultima Thule - Reah Tahra", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38323, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4634_The Lost World.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4634_The Lost World.json index 89f6b44c..f7439140 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4634_The Lost World.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4634_The Lost World.json @@ -34,14 +34,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38298, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38322, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4601_The Café at the End of the Universe.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4601_The Café at the End of the Universe.json index d1eb587c..ede9e73d 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4601_The Café at the End of the Universe.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4601_The Café at the End of the Universe.json @@ -116,14 +116,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38276, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38300, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4602_Longing So for All the Fish.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4602_Longing So for All the Fish.json index ffafc60f..281566ab 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4602_Longing So for All the Fish.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4602_Longing So for All the Fish.json @@ -172,14 +172,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38277, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38301, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4603_And Another Question.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4603_And Another Question.json index 9170a9ed..9b21672e 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4603_And Another Question.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4603_And Another Question.json @@ -140,19 +140,28 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38278, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38302, "ItemCount": 3 } - ], - "Fly": true + ] }, { "DataId": 2013072, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4604_The Restaurateur's Guide to the Dragonstar.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4604_The Restaurateur's Guide to the Dragonstar.json index 0cdbce56..a6d019d9 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4604_The Restaurateur's Guide to the Dragonstar.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4604_The Restaurateur's Guide to the Dragonstar.json @@ -92,14 +92,24 @@ { "TerritoryId": 398, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38279, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 398, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38303, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4605_Mostly Heartless.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4605_Mostly Heartless.json index 32571b61..b499112b 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4605_Mostly Heartless.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4605_Mostly Heartless.json @@ -157,14 +157,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38280, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38304, "ItemCount": 3 } diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index a1d9aa33..5ef7ce77 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -422,6 +422,20 @@ } } }, + "RequiredCurrentJob": { + "description": "Which class or job you are using whenever this step gets executed", + "type": "array", + "items": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/ClassJob" + } + }, + "RequiredQuestAcceptedJob": { + "description": "Which class or job you were using when accepting this quest (e.g. for beast tribes)", + "type": "array", + "items": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/ClassJob" + } + }, "DelaySecondsAtStart": { "description": "Time to wait before starting", "type": [ @@ -1313,13 +1327,6 @@ "type": "number", "minimum": 0, "maximum": 1000 - }, - "QuestAcceptedAsClass": { - "type": "string", - "enum": [ - "Miner", - "Botanist" - ] } }, "required": [ diff --git a/Questionable.Model/Questing/Converter/ClassJobConverter.cs b/Questionable.Model/Questing/Converter/ClassJobConverter.cs deleted file mode 100644 index 4beb8e93..00000000 --- a/Questionable.Model/Questing/Converter/ClassJobConverter.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Questionable.Model.Questing.Converter; - -internal sealed class ClassJobConverter : JsonConverter -{ - public override uint Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - if (reader.TokenType != JsonTokenType.String) - throw new JsonException(); - - return reader.GetString() switch - { - "Miner" => 16, - "Botanist" => 17, - _ => throw new JsonException("Unsupported value for classjob"), - }; - } - - public override void Write(Utf8JsonWriter writer, uint value, JsonSerializerOptions options) - { - throw new NotImplementedException(); - } -} diff --git a/Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs b/Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs new file mode 100644 index 00000000..c92ca0bc --- /dev/null +++ b/Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using Questionable.Model.Common.Converter; + +namespace Questionable.Model.Questing.Converter; + +internal sealed class ExtendedClassJobConverter() : EnumConverter(Values) +{ + private static readonly Dictionary Values = new() + { + { EExtendedClassJob.Gladiator, "Gladiator" }, + { EExtendedClassJob.Pugilist, "Pugilist" }, + { EExtendedClassJob.Marauder, "Marauder" }, + { EExtendedClassJob.Lancer, "Lancer" }, + { EExtendedClassJob.Archer, "Archer" }, + { EExtendedClassJob.Conjurer, "Conjurer" }, + { EExtendedClassJob.Thaumaturge, "Thaumaturge" }, + { EExtendedClassJob.Carpenter, "Carpenter" }, + { EExtendedClassJob.Blacksmith, "Blacksmith" }, + { EExtendedClassJob.Armorer, "Armorer" }, + { EExtendedClassJob.Goldsmith, "Goldsmith" }, + { EExtendedClassJob.Leatherworker, "Leatherworker" }, + { EExtendedClassJob.Weaver, "Weaver" }, + { EExtendedClassJob.Alchemist, "Alchemist" }, + { EExtendedClassJob.Culinarian, "Culinarian" }, + { EExtendedClassJob.Miner, "Miner" }, + { EExtendedClassJob.Botanist, "Botanist" }, + { EExtendedClassJob.Fisher, "Fisher" }, + { EExtendedClassJob.Paladin, "Paladin" }, + { EExtendedClassJob.Monk, "Monk" }, + { EExtendedClassJob.Warrior, "Warrior" }, + { EExtendedClassJob.Dragoon, "Dragoon" }, + { EExtendedClassJob.Bard, "Bard" }, + { EExtendedClassJob.WhiteMage, "White Mage" }, + { EExtendedClassJob.BlackMage, "Black Mage" }, + { EExtendedClassJob.Arcanist, "Arcanist" }, + { EExtendedClassJob.Summoner, "Summoner" }, + { EExtendedClassJob.Scholar, "Scholar" }, + { EExtendedClassJob.Rogue, "Rogue" }, + { EExtendedClassJob.Ninja, "Ninja" }, + { EExtendedClassJob.Machinist, "Machinist" }, + { EExtendedClassJob.DarkKnight, "Dark Knight" }, + { EExtendedClassJob.Astrologian, "Astrologian" }, + { EExtendedClassJob.Samurai, "Samurai" }, + { EExtendedClassJob.RedMage, "Red Mage" }, + { EExtendedClassJob.BlueMage, "Blue Mage" }, + { EExtendedClassJob.Gunbreaker, "Gunbreaker" }, + { EExtendedClassJob.Dancer, "Dancer" }, + { EExtendedClassJob.Reaper, "Reaper" }, + { EExtendedClassJob.Sage, "Sage" }, + { EExtendedClassJob.Viper, "Viper" }, + { EExtendedClassJob.Pictomancer, "Pictomancer" }, + { EExtendedClassJob.DoW, "DoW" }, + { EExtendedClassJob.DoM, "DoM" }, + { EExtendedClassJob.DoH, "DoH" }, + { EExtendedClassJob.DoL, "DoL" }, + }; +} diff --git a/Questionable.Model/Questing/EExtendedClassJob.cs b/Questionable.Model/Questing/EExtendedClassJob.cs new file mode 100644 index 00000000..79c771d1 --- /dev/null +++ b/Questionable.Model/Questing/EExtendedClassJob.cs @@ -0,0 +1,55 @@ +using System.Text.Json.Serialization; +using Questionable.Model.Questing.Converter; + +namespace Questionable.Model.Questing; + +[JsonConverter(typeof(ExtendedClassJobConverter))] +public enum EExtendedClassJob +{ + Gladiator, + Pugilist, + Marauder, + Lancer, + Archer, + Conjurer, + Thaumaturge, + Carpenter, + Blacksmith, + Armorer, + Goldsmith, + Leatherworker, + Weaver, + Alchemist, + Culinarian, + Miner, + Botanist, + Fisher, + Paladin, + Monk, + Warrior, + Dragoon, + Bard, + WhiteMage, + BlackMage, + Arcanist, + Summoner, + Scholar, + Rogue, + Ninja, + Machinist, + DarkKnight, + Astrologian, + Samurai, + RedMage, + BlueMage, + Gunbreaker, + Dancer, + Reaper, + Sage, + Viper, + Pictomancer, + DoW, + DoM, + DoH, + DoL, +} diff --git a/Questionable.Model/Questing/GatheredItem.cs b/Questionable.Model/Questing/GatheredItem.cs index 8d2239ff..81247180 100644 --- a/Questionable.Model/Questing/GatheredItem.cs +++ b/Questionable.Model/Questing/GatheredItem.cs @@ -9,10 +9,4 @@ public sealed class GatheredItem public uint AlternativeItemId { get; set; } public int ItemCount { get; set; } public ushort Collectability { get; set; } - - /// - /// Either miner or botanist; null if it is irrelevant (prefers current class/job, then any unlocked ones). - /// - [JsonConverter(typeof(ClassJobConverter))] - public uint? QuestAcceptedAsClass { get; set; } } diff --git a/Questionable.Model/Questing/QuestStep.cs b/Questionable.Model/Questing/QuestStep.cs index 5a699818..df2b7b12 100644 --- a/Questionable.Model/Questing/QuestStep.cs +++ b/Questionable.Model/Questing/QuestStep.cs @@ -76,6 +76,8 @@ public sealed class QuestStep public SkipConditions? SkipConditions { get; set; } public List?> RequiredQuestVariables { get; set; } = new(); + public List RequiredCurrentJob { get; set; } = []; + public List RequiredQuestAcceptedJob { get; set; } = []; public List ItemsToGather { get; set; } = []; public List CompletionQuestVariablesFlags { get; set; } = []; public List DialogueChoices { get; set; } = []; diff --git a/Questionable.Model/common-schema.json b/Questionable.Model/common-schema.json index d3c974ec..97d1474e 100644 --- a/Questionable.Model/common-schema.json +++ b/Questionable.Model/common-schema.json @@ -282,6 +282,57 @@ "[Solution Nine] Scanning Port Nine (Heritage Found)" ] }, + "ClassJob": { + "type": "string", + "enum": [ + "Gladiator", + "Pugilist", + "Marauder", + "Lancer", + "Archer", + "Conjurer", + "Thaumaturge", + "Carpenter", + "Blacksmith", + "Armorer", + "Goldsmith", + "Leatherworker", + "Weaver", + "Alchemist", + "Culinarian", + "Miner", + "Botanist", + "Fisher", + "Paladin", + "Monk", + "Warrior", + "Dragoon", + "Bard", + "White Mage", + "Black Mage", + "Arcanist", + "Summoner", + "Scholar", + "Rogue", + "Ninja", + "Machinist", + "Dark Knight", + "Astrologian", + "Samurai", + "Red Mage", + "Blue Mage", + "Gunbreaker", + "Dancer", + "Reaper", + "Sage", + "Viper", + "Pictomancer", + "DoW", + "DoM", + "DoH", + "DoL" + ] + }, "CompletionFlags": { "type": "array", "description": "Quest Variables that dictate whether or not this step is skipped: null is don't check, positive values need to be set, negative values need to be unset", diff --git a/Questionable/Controller/ContextMenuController.cs b/Questionable/Controller/ContextMenuController.cs index 819d8b25..f35e8343 100644 --- a/Questionable/Controller/ContextMenuController.cs +++ b/Questionable/Controller/ContextMenuController.cs @@ -123,12 +123,12 @@ internal sealed class ContextMenuController : IDisposable Prefix = SeIconChar.Hyadelyn, PrefixColor = 52, Name = name, - OnClicked = _ => StartGathering(npcId, itemId, quantityToGather, collectability, classJob), + OnClicked = _ => StartGathering(npcId, itemId, quantityToGather, collectability), IsEnabled = string.IsNullOrEmpty(lockedReasonn), }); } - private void StartGathering(uint npcId, uint itemId, int quantity, ushort collectability, EClassJob classJob) + private void StartGathering(uint npcId, uint itemId, int quantity, ushort collectability) { var info = (SatisfactionSupplyInfo)_questData.GetAllByIssuerDataId(npcId) .Single(x => x is SatisfactionSupplyInfo); @@ -142,7 +142,6 @@ internal sealed class ContextMenuController : IDisposable ItemId = itemId, ItemCount = quantity, Collectability = collectability, - QuestAcceptedAsClass = (uint)classJob, } ]; _questController.SetGatheringQuest(quest); diff --git a/Questionable/Controller/Steps/Shared/Gather.cs b/Questionable/Controller/Steps/Shared/Gather.cs index ee5c50a0..5724a209 100644 --- a/Questionable/Controller/Steps/Shared/Gather.cs +++ b/Questionable/Controller/Steps/Shared/Gather.cs @@ -36,26 +36,13 @@ internal static class Gather foreach (var itemToGather in step.ItemsToGather) { EClassJob currentClassJob = (EClassJob)clientState.LocalPlayer!.ClassJob.Id; - EClassJob classJob = currentClassJob; - if (itemToGather.QuestAcceptedAsClass != null) - { - classJob = (EClassJob)itemToGather.QuestAcceptedAsClass.Value; - if (!IsClassJobQuestWasAcceptedWith(quest.Id, classJob)) - continue; - } - - if (!gatheringData.TryGetGatheringPointId(itemToGather.ItemId, classJob, + if (!gatheringData.TryGetGatheringPointId(itemToGather.ItemId, currentClassJob, out GatheringPointId? gatheringPointId)) throw new TaskException($"No gathering point found for item {itemToGather.ItemId}"); if (!gatheringPointRegistry.TryGetGatheringPoint(gatheringPointId, out GatheringRoot? gatheringRoot)) throw new TaskException($"No path found for gathering point {gatheringPointId}"); - if (classJob != currentClassJob) - { - yield return new SwitchClassJob.Task(classJob); - } - if (HasRequiredItems(itemToGather)) continue; @@ -89,18 +76,6 @@ internal static class Gather } } - private unsafe bool IsClassJobQuestWasAcceptedWith(ElementId questId, EClassJob expectedClassJob) - { - if (questId is not QuestId) - return true; - - QuestWork* questWork = QuestManager.Instance()->GetQuestById(questId.Value); - if (questWork->AcceptClassJob != 0) - return (EClassJob)questWork->AcceptClassJob == expectedClassJob; - - return true; - } - private unsafe bool HasRequiredItems(GatheredItem itemToGather) { InventoryManager* inventoryManager = InventoryManager.Instance(); diff --git a/Questionable/Controller/Steps/Shared/SkipCondition.cs b/Questionable/Controller/Steps/Shared/SkipCondition.cs index c1efdbde..2951d8d8 100644 --- a/Questionable/Controller/Steps/Shared/SkipCondition.cs +++ b/Questionable/Controller/Steps/Shared/SkipCondition.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Numerics; using Dalamud.Game.ClientState.Objects.Types; @@ -6,8 +7,10 @@ using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game.Object; using FFXIVClientStructs.FFXIV.Client.Game.UI; +using LLib.GameData; using Microsoft.Extensions.Logging; using Questionable.Controller.Utils; +using Questionable.Data; using Questionable.Functions; using Questionable.Model; using Questionable.Model.Common; @@ -29,7 +32,9 @@ internal static class SkipCondition !QuestWorkUtils.HasCompletionFlags(step.CompletionQuestVariablesFlags) && step.RequiredQuestVariables.Count == 0 && step.PickUpQuestId == null && - step.NextQuestId == null) + step.NextQuestId == null && + step.RequiredCurrentJob.Count == 0 && + step.RequiredQuestAcceptedJob.Count == 0) return null; return new SkipTask(step, skipConditions ?? new(), quest.Id); @@ -136,7 +141,8 @@ internal static class SkipCondition GameObject* gameObject = (GameObject*)target.Address; if (!skipConditions.NotNamePlateIconId.Contains(gameObject->NamePlateIconId)) { - logger.LogInformation("Skipping step, object has icon id {IconId}", gameObject->NamePlateIconId); + logger.LogInformation("Skipping step, object has icon id {IconId}", + gameObject->NamePlateIconId); return true; } } @@ -213,6 +219,34 @@ internal static class SkipCondition return true; } } + + if (step is { RequiredQuestAcceptedJob.Count: > 0 }) + { + List expectedJobs = step.RequiredQuestAcceptedJob + .SelectMany(ClassJobUtils.AsIndividualJobs).ToList(); + EClassJob questJob = questWork.ClassJob; + logger.LogInformation("Checking quest job {QuestJob} against {ExpectedJobs}", questJob, + string.Join(",", expectedJobs)); + if (questJob != EClassJob.Adventurer && !expectedJobs.Contains(questJob)) + { + logger.LogInformation("Skipping step, as quest was accepted on a different job"); + return true; + } + } + } + + if (step is { RequiredCurrentJob.Count: > 0 }) + { + List expectedJobs = + step.RequiredCurrentJob.SelectMany(ClassJobUtils.AsIndividualJobs).ToList(); + EClassJob currentJob = (EClassJob)clientState.LocalPlayer!.ClassJob.Id; + logger.LogInformation("Checking current job {CurrentJob} against {ExpectedJobs}", currentJob, + string.Join(",", expectedJobs)); + if (!expectedJobs.Contains(currentJob)) + { + logger.LogInformation("Skipping step, as step requires a different job"); + return true; + } } if (skipConditions.NearPosition is { } nearPosition && @@ -231,7 +265,8 @@ internal static class SkipCondition var position = clientState.LocalPlayer?.Position; if (position != null && clientState.TerritoryType != 0 && - MatchesExtraCondition(skipConditions.ExtraCondition.Value, position.Value, clientState.TerritoryType)) + MatchesExtraCondition(skipConditions.ExtraCondition.Value, position.Value, + clientState.TerritoryType)) { logger.LogInformation("Skipping step, extra condition {} matches", skipConditions.ExtraCondition); return true; diff --git a/Questionable/Data/ClassJobUtils.cs b/Questionable/Data/ClassJobUtils.cs new file mode 100644 index 00000000..8346d9ec --- /dev/null +++ b/Questionable/Data/ClassJobUtils.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using LLib.GameData; +using Questionable.Model.Questing; + +namespace Questionable.Data; + +public static class ClassJobUtils +{ + public static IEnumerable AsIndividualJobs(EExtendedClassJob classJob) + { + return classJob switch + { + EExtendedClassJob.Gladiator => [EClassJob.Gladiator], + EExtendedClassJob.Pugilist => [EClassJob.Pugilist], + EExtendedClassJob.Marauder => [EClassJob.Marauder], + EExtendedClassJob.Lancer => [EClassJob.Lancer], + EExtendedClassJob.Archer => [EClassJob.Archer], + EExtendedClassJob.Conjurer => [EClassJob.Conjurer], + EExtendedClassJob.Thaumaturge => [EClassJob.Thaumaturge], + EExtendedClassJob.Carpenter => [EClassJob.Carpenter], + EExtendedClassJob.Blacksmith => [EClassJob.Blacksmith], + EExtendedClassJob.Armorer => [EClassJob.Armorer], + EExtendedClassJob.Goldsmith => [EClassJob.Goldsmith], + EExtendedClassJob.Leatherworker => [EClassJob.Leatherworker], + EExtendedClassJob.Weaver => [EClassJob.Weaver], + EExtendedClassJob.Alchemist => [EClassJob.Alchemist], + EExtendedClassJob.Culinarian => [EClassJob.Culinarian], + EExtendedClassJob.Miner => [EClassJob.Miner], + EExtendedClassJob.Botanist => [EClassJob.Botanist], + EExtendedClassJob.Fisher => [EClassJob.Fisher], + EExtendedClassJob.Paladin => [EClassJob.Paladin], + EExtendedClassJob.Monk => [EClassJob.Monk], + EExtendedClassJob.Warrior => [EClassJob.Warrior], + EExtendedClassJob.Dragoon => [EClassJob.Dragoon], + EExtendedClassJob.Bard => [EClassJob.Bard], + EExtendedClassJob.WhiteMage => [EClassJob.WhiteMage], + EExtendedClassJob.BlackMage => [EClassJob.BlackMage], + EExtendedClassJob.Arcanist => [EClassJob.Arcanist], + EExtendedClassJob.Summoner => [EClassJob.Summoner], + EExtendedClassJob.Scholar => [EClassJob.Scholar], + EExtendedClassJob.Rogue => [EClassJob.Rogue], + EExtendedClassJob.Ninja => [EClassJob.Ninja], + EExtendedClassJob.Machinist => [EClassJob.Machinist], + EExtendedClassJob.DarkKnight => [EClassJob.DarkKnight], + EExtendedClassJob.Astrologian => [EClassJob.Astrologian], + EExtendedClassJob.Samurai => [EClassJob.Samurai], + EExtendedClassJob.RedMage => [EClassJob.RedMage], + EExtendedClassJob.BlueMage => [EClassJob.BlueMage], + EExtendedClassJob.Gunbreaker => [EClassJob.Gunbreaker], + EExtendedClassJob.Dancer => [EClassJob.Dancer], + EExtendedClassJob.Reaper => [EClassJob.Reaper], + EExtendedClassJob.Sage => [EClassJob.Sage], + EExtendedClassJob.Viper => [EClassJob.Viper], + EExtendedClassJob.Pictomancer => [EClassJob.Pictomancer], + + EExtendedClassJob.DoW => Enum.GetValues().Where(x => x.DealsPhysicalDamage()), + EExtendedClassJob.DoM => Enum.GetValues().Where(x => x.DealsMagicDamage()), + EExtendedClassJob.DoH => Enum.GetValues().Where(x => x.IsCrafter()), + EExtendedClassJob.DoL => Enum.GetValues().Where(x => x.IsGatherer()), + + _ => throw new ArgumentOutOfRangeException(nameof(classJob), classJob, null) + }; + } +} From 6ef6dbfdb46d7b5c74019252ddaebdbda0e6c948 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 4 Nov 2024 17:20:42 +0100 Subject: [PATCH 31/95] If you start moving while in combat (because mounting isn't possible), use mount as soon as you're out of combat --- Questionable/Controller/Steps/Common/Mount.cs | 25 +++++--- .../Controller/Steps/Shared/MoveTo.cs | 63 ++++++++++++++++--- Questionable/Controller/Steps/TaskExecutor.cs | 2 +- 3 files changed, 71 insertions(+), 19 deletions(-) diff --git a/Questionable/Controller/Steps/Common/Mount.cs b/Questionable/Controller/Steps/Common/Mount.cs index d9d38ae2..2fb0d2d7 100644 --- a/Questionable/Controller/Steps/Common/Mount.cs +++ b/Questionable/Controller/Steps/Common/Mount.cs @@ -35,21 +35,21 @@ internal static class Mount private bool _mountTriggered; private DateTime _retryAt = DateTime.MinValue; - protected override bool Start() + public MountResult EvaluateMountState() { if (condition[ConditionFlag.Mounted]) - return false; + return MountResult.DontMount; if (!territoryData.CanUseMount(Task.TerritoryId)) { logger.LogInformation("Can't use mount in current territory {Id}", Task.TerritoryId); - return false; + return MountResult.DontMount; } if (gameFunctions.HasStatusPreventingMount()) { logger.LogInformation("Can't mount due to status preventing sprint or mount"); - return false; + return MountResult.DontMount; } if (Task.MountIf == EMountIf.AwayFromPosition) @@ -59,7 +59,7 @@ internal static class Mount if (Task.TerritoryId == clientState.TerritoryType && distance < 30f && !Conditions.IsDiving) { logger.LogInformation("Not using mount, as we're close to the target"); - return false; + return MountResult.DontMount; } logger.LogInformation( @@ -72,12 +72,14 @@ internal static class Mount if (!condition[ConditionFlag.InCombat]) { _retryAt = DateTime.Now.AddSeconds(0.5); - return true; + return MountResult.Mount; } - - return false; + else + return MountResult.WhenOutOfCombat; } + protected override bool Start() => EvaluateMountState() == MountResult.Mount; + public override ETaskResult Update() { if (_mountTriggered && !condition[ConditionFlag.Mounted] && DateTime.Now > _retryAt) @@ -108,6 +110,13 @@ internal static class Mount } } + internal enum MountResult + { + DontMount, + Mount, + WhenOutOfCombat, + } + internal sealed record UnmountTask : ITask { public bool ShouldRedoOnInterrupt() => true; diff --git a/Questionable/Controller/Steps/Shared/MoveTo.cs b/Questionable/Controller/Steps/Shared/MoveTo.cs index 89b7170a..eaead8ef 100644 --- a/Questionable/Controller/Steps/Shared/MoveTo.cs +++ b/Questionable/Controller/Steps/Shared/MoveTo.cs @@ -87,19 +87,23 @@ internal static class MoveTo private readonly GameFunctions _gameFunctions; private readonly ILogger _logger; private readonly IClientState _clientState; + private readonly ICondition _condition; private readonly Mount.MountExecutor _mountExecutor; private readonly Mount.UnmountExecutor _unmountExecutor; private Action? _startAction; private Vector3 _destination; private bool _canRestart; - private ITaskExecutor? _nestedExecutor; + + private (ITaskExecutor Executor, ITask Task, bool Triggered)? _nestedExecutor = + (new NoOpTaskExecutor(), new NoOpTask(), true); public MoveExecutor( MovementController movementController, GameFunctions gameFunctions, ILogger logger, IClientState clientState, + ICondition condition, IDataManager dataManager, Mount.MountExecutor mountExecutor, Mount.UnmountExecutor unmountExecutor) @@ -108,6 +112,7 @@ internal static class MoveTo _gameFunctions = gameFunctions; _logger = logger; _clientState = clientState; + _condition = condition; _mountExecutor = mountExecutor; _unmountExecutor = unmountExecutor; _cannotExecuteAtThisTime = dataManager.GetString(579, x => x.Text)!; @@ -161,16 +166,18 @@ internal static class MoveTo var mountTask = new Mount.MountTask(Task.TerritoryId, Mount.EMountIf.Always); if (_mountExecutor.Start(mountTask)) { - _nestedExecutor = _mountExecutor; + _nestedExecutor = (_mountExecutor, mountTask, true); return true; } + else if (_mountExecutor.EvaluateMountState() == Mount.MountResult.WhenOutOfCombat) + _nestedExecutor = (_mountExecutor, mountTask, false); } else if (Task.Mount == false) { var mountTask = new Mount.UnmountTask(); if (_unmountExecutor.Start(mountTask)) { - _nestedExecutor = _unmountExecutor; + _nestedExecutor = (_unmountExecutor, mountTask, true); return true; } } @@ -187,21 +194,43 @@ internal static class MoveTo var mountTask = new Mount.MountTask(Task.TerritoryId, mountIf, _destination); if (_mountExecutor.Start(mountTask)) { - _nestedExecutor = _mountExecutor; + _nestedExecutor = (_mountExecutor, mountTask, true); return true; } + else if (_mountExecutor.EvaluateMountState() == Mount.MountResult.WhenOutOfCombat) + _nestedExecutor = (_mountExecutor, mountTask, false); } } - _nestedExecutor = new NoOpTaskExecutor(); + if (_startAction != null && (_nestedExecutor == null || _nestedExecutor.Value.Triggered == false)) + _startAction(); return true; } public override ETaskResult Update() { - if (_nestedExecutor != null) + if (_nestedExecutor is { } nestedExecutor) { - if (_nestedExecutor.Update() == ETaskResult.TaskComplete) + if (nestedExecutor is { Triggered: false, Executor: Mount.MountExecutor mountExecutor }) + { + if (!_condition[ConditionFlag.InCombat]) + { + if (mountExecutor.EvaluateMountState() == Mount.MountResult.DontMount) + _nestedExecutor = (new NoOpTaskExecutor(), new NoOpTask(), true); + else + { + if (_movementController.IsPathfinding || _movementController.IsPathRunning) + _movementController.Stop(); + + if (nestedExecutor.Executor.Start(nestedExecutor.Task)) + { + _nestedExecutor = nestedExecutor with { Triggered = true }; + return ETaskResult.StillRunning; + } + } + } + } + else if (nestedExecutor.Executor.Update() == ETaskResult.TaskComplete) { _nestedExecutor = null; if (_startAction != null) @@ -213,6 +242,7 @@ internal static class MoveTo else return ETaskResult.TaskComplete; } + return ETaskResult.StillRunning; } @@ -245,6 +275,17 @@ internal static class MoveTo return ETaskResult.TaskComplete; } + public override bool WasInterrupted() + { + if (Task.Fly && _condition[ConditionFlag.InCombat] && !_condition[ConditionFlag.Mounted] && + _nestedExecutor is { Triggered: false, Executor: Mount.MountExecutor mountExecutor } && + mountExecutor.EvaluateMountState() == Mount.MountResult.WhenOutOfCombat) + { + return true; + } + + return base.WasInterrupted(); + } public bool OnErrorToast(SeString message) { @@ -255,7 +296,9 @@ internal static class MoveTo } } - private sealed class NoOpTaskExecutor : TaskExecutor + private sealed record NoOpTask : ITask; + + private sealed class NoOpTaskExecutor : TaskExecutor { protected override bool Start() => true; @@ -306,7 +349,6 @@ internal static class MoveTo GameFunctions gameFunctions, IClientState clientState) : TaskExecutor { - protected override bool Start() => true; public override ETaskResult Update() @@ -328,7 +370,8 @@ internal static class MoveTo public override string ToString() => "Land"; } - internal sealed class LandExecutor(IClientState clientState, ICondition condition, ILogger logger) : TaskExecutor + internal sealed class LandExecutor(IClientState clientState, ICondition condition, ILogger logger) + : TaskExecutor { private bool _landing; private DateTime _continueAt; diff --git a/Questionable/Controller/Steps/TaskExecutor.cs b/Questionable/Controller/Steps/TaskExecutor.cs index e5b2c2e9..9f1873f6 100644 --- a/Questionable/Controller/Steps/TaskExecutor.cs +++ b/Questionable/Controller/Steps/TaskExecutor.cs @@ -23,7 +23,7 @@ internal abstract class TaskExecutor : ITaskExecutor public InteractionProgressContext? ProgressContext { get; set; } ITask ITaskExecutor.CurrentTask => Task; - public bool WasInterrupted() + public virtual bool WasInterrupted() { if (ProgressContext is {} progressContext) { From c11bfe0abe0b378bdf6ae725e9cb82b4cdba7164 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 4 Nov 2024 17:51:51 +0100 Subject: [PATCH 32/95] Add missing PGL quests --- .../MNK/533_Way of the Pugilist.json | 182 ++++++++++++++++- .../MNK/555_Burning Up the Quarter Malm.json | 190 ++++++++++++++++++ 2 files changed, 364 insertions(+), 8 deletions(-) create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/555_Burning Up the Quarter Malm.json diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/533_Way of the Pugilist.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/533_Way of the Pugilist.json index 8c00e6a2..3cf1f2d1 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/533_Way of the Pugilist.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/533_Way of the Pugilist.json @@ -1,11 +1,25 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "liza", - "Disabled": true, + "Author": ["liza", "plogon_enjoyer"], "QuestSequence": [ { "Sequence": 0, "Steps": [ + { + "Position": { + "X": -86.589775, + "Y": 2.099846, + "Z": -51.574 + }, + "TerritoryId": 130, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Ul'dah", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + }, { "DataId": 1001286, "Position": { @@ -14,13 +28,165 @@ "Z": -51.163513 }, "TerritoryId": 130, - "InteractionType": "AcceptQuest", - "AetheryteShortcut": "Ul'dah", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1003817, + "Position": { + "X": -74.57086, + "Y": 1.9999951, + "Z": -42.404846 + }, + "TerritoryId": 130, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_CLSPGL020_00533_Q1_000_1", + "Yes": true } - } + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": -126.59337, + "Y": 11.159969, + "Z": 276.25775 + }, + "TerritoryId": 141, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 351, + "CompletionQuestVariablesFlags": [ + { + "Low": 3 + }, + null, + null, + null, + null, + null + ], + "MinimumKillCount": 3 + } + ], + "CompletionQuestVariablesFlags": [ + { + "Low": 3 + }, + null, + null, + null, + null, + null + ], + "$": "0 0 0 0 0 0 -> 19 0 0 0 0 0", + "AethernetShortcut": [ + "[Ul'dah] Aetheryte Plaza", + "[Ul'dah] Gate of Nald (Central Thanalan)" + ] + }, + { + "Position": { + "X": -126.59337, + "Y": 11.159969, + "Z": 276.25775 + }, + "TerritoryId": 141, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 385, + "CompletionQuestVariablesFlags": [ + null, + { + "High": 3 + }, + null, + null, + null, + null + ], + "MinimumKillCount": 3 + } + ], + "CompletionQuestVariablesFlags": [ + null, + { + "High": 3 + }, + null, + null, + null, + null + ], + "$": "19 0 0 0 0 0 -> 35 48 0 0 0 0" + }, + { + "Position": { + "X": 32.007893, + "Y": 5.8527403, + "Z": 299.76016 + }, + "TerritoryId": 141, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 205, + "CompletionQuestVariablesFlags": [ + null, + { + "Low": 3 + }, + null, + null, + null, + null + ], + "MinimumKillCount": 3 + } + ], + "CompletionQuestVariablesFlags": [ + null, + { + "Low": 3 + }, + null, + null, + null, + null + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1003817, + "Position": { + "X": -74.57086, + "Y": 1.9999951, + "Z": -42.404846 + }, + "TerritoryId": 130, + "AetheryteShortcut": "Ul'dah", + "InteractionType": "CompleteQuest", + "NextQuestId": 554 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/555_Burning Up the Quarter Malm.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/555_Burning Up the Quarter Malm.json new file mode 100644 index 00000000..0a6f8942 --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/555_Burning Up the Quarter Malm.json @@ -0,0 +1,190 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": ["liza", "plogon_enjoyer"], + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1003817, + "Position": { + "X": -74.57086, + "Y": 1.9999951, + "Z": -42.404846 + }, + "TerritoryId": 130, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ul'dah", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2001718, + "Position": { + "X": -108.2017, + "Y": 4.989685, + "Z": -105.7603 + }, + "TerritoryId": 130, + "InteractionType": "Action", + "Action": "Bootshine", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + 128, + null, + null + ] + }, + { + "DataId": 2001719, + "Position": { + "X": -105.9365, + "Y": 4.9655, + "Z": -107.8618 + }, + "TerritoryId": 130, + "InteractionType": "Action", + "Action": "Bootshine", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + 64, + null, + null + ] + }, + { + "DataId": 2001720, + "Position": { + "X": -77.89734, + "Y": 5.0201416, + "Z": -129.19812 + }, + "TerritoryId": 130, + "InteractionType": "Action", + "Action": "Bootshine", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + 32, + null, + null + ] + }, + { + "DataId": 2001721, + "Position": { + "X": -74.906555, + "Y": 4.8981323, + "Z": -130.99878 + }, + "TerritoryId": 130, + "InteractionType": "Action", + "Action": "Bootshine", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + 16, + null, + null + ] + }, + { + "DataId": 2001722, + "Position": { + "X": -71.732666, + "Y": 5.0201416, + "Z": -132.64673 + }, + "TerritoryId": 130, + "InteractionType": "Action", + "Action": "Bootshine", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + 8, + null, + null + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1003817, + "Position": { + "X": -74.57086, + "Y": 1.9999951, + "Z": -42.404846 + }, + "TerritoryId": 130, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "Position": { + "X": -210.32118, + "Y": 21.582167, + "Z": -94.337494 + }, + "TerritoryId": 141, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "KillEnemyDataIds": [ + 771 + ], + "Fly": true, + "AetheryteShortcut": "Central Thanalan - Black Brush Station", + "CombatDelaySecondsAtStart": 0, + "$": "Will stop once 3 Qiqirn Shellsweppers get hit by Snap Punch since it will move on to the next sequence" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": -118.55462, + "Y": 8.216448, + "Z": -82.81951 + }, + "TerritoryId": 141, + "InteractionType": "WalkTo" + }, + { + "DataId": 1003817, + "Position": { + "X": -74.57086, + "Y": 1.9999951, + "Z": -42.404846 + }, + "TerritoryId": 130, + "AetheryteShortcut": "Ul'dah", + "InteractionType": "CompleteQuest", + "NextQuestId": 558 + } + ] + } + ] +} From 82c3e3c647e82ebf93dcb27ddfccd6dda3733d3c Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 4 Nov 2024 20:10:35 +0100 Subject: [PATCH 33/95] Move when 'SendNotification' happens so it'll be before the solo duty dialog --- .../Steps/Common/SendNotification.cs | 25 ++++++++++++++++++- .../Controller/Steps/Shared/WaitAtEnd.cs | 24 +++--------------- Questionable/QuestionablePlugin.cs | 3 ++- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/Questionable/Controller/Steps/Common/SendNotification.cs b/Questionable/Controller/Steps/Common/SendNotification.cs index 76b8a810..5edb743c 100644 --- a/Questionable/Controller/Steps/Common/SendNotification.cs +++ b/Questionable/Controller/Steps/Common/SendNotification.cs @@ -1,13 +1,36 @@ -using Dalamud.Game.Text; +using System.Collections.Generic; +using Dalamud.Game.Text; using Dalamud.Game.Text.SeStringHandling; using Dalamud.Plugin.Services; +using Questionable.Data; using Questionable.External; +using Questionable.Model; using Questionable.Model.Questing; namespace Questionable.Controller.Steps.Common; internal static class SendNotification { + internal sealed class Factory( + Configuration configuration, + TerritoryData territoryData) : SimpleTaskFactory + { + public override ITask? CreateTask(Quest quest, QuestSequence sequence, QuestStep step) + { + return step.InteractionType switch + { + EInteractionType.Snipe when !configuration.General.AutomaticallyCompleteSnipeTasks => + new Task(step.InteractionType, step.Comment), + EInteractionType.Duty => + new Task(step.InteractionType, step.ContentFinderConditionId.HasValue + ? territoryData.GetContentFinderConditionName(step.ContentFinderConditionId.Value) + : step.Comment), + EInteractionType.SinglePlayerDuty => new Task(step.InteractionType, quest.Info.Name), + _ => null, + }; + } + } + internal sealed record Task(EInteractionType InteractionType, string? Comment) : ITask { public override string ToString() => "SendNotification"; diff --git a/Questionable/Controller/Steps/Shared/WaitAtEnd.cs b/Questionable/Controller/Steps/Shared/WaitAtEnd.cs index 84d2e1ca..d64c009b 100644 --- a/Questionable/Controller/Steps/Shared/WaitAtEnd.cs +++ b/Questionable/Controller/Steps/Shared/WaitAtEnd.cs @@ -6,7 +6,6 @@ using System.Numerics; using Dalamud.Game.ClientState.Conditions; using Dalamud.Plugin.Services; using Questionable.Controller.Steps.Common; -using Questionable.Controller.Steps.Interactions; using Questionable.Controller.Utils; using Questionable.Data; using Questionable.Functions; @@ -20,8 +19,7 @@ internal static class WaitAtEnd internal sealed class Factory( IClientState clientState, ICondition condition, - TerritoryData territoryData, - Configuration configuration) + TerritoryData territoryData) : ITaskFactory { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) @@ -49,28 +47,12 @@ internal static class WaitAtEnd case EInteractionType.WaitForManualProgress: case EInteractionType.Instruction: + case EInteractionType.Snipe: return [new WaitNextStepOrSequence()]; - case EInteractionType.Snipe: - if (configuration.General.AutomaticallyCompleteSnipeTasks) - return [new WaitNextStepOrSequence()]; - else - return [ - new SendNotification.Task(step.InteractionType, step.Comment), - new WaitNextStepOrSequence() - ]; - case EInteractionType.Duty: - return [ - new SendNotification.Task(step.InteractionType, step.ContentFinderConditionId.HasValue ? territoryData.GetContentFinderConditionName(step.ContentFinderConditionId.Value) : step.Comment), - new EndAutomation(), - ]; - case EInteractionType.SinglePlayerDuty: - return [ - new SendNotification.Task(step.InteractionType, quest.Info.Name), - new EndAutomation() - ]; + return [new EndAutomation()]; case EInteractionType.WalkTo: case EInteractionType.Jump: diff --git a/Questionable/QuestionablePlugin.cs b/Questionable/QuestionablePlugin.cs index b97158c6..9289b120 100644 --- a/Questionable/QuestionablePlugin.cs +++ b/Questionable/QuestionablePlugin.cs @@ -163,6 +163,8 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceCollection.AddTaskFactoryAndExecutor(); serviceCollection.AddTaskExecutor(); serviceCollection.AddTaskExecutor(); + serviceCollection + .AddTaskFactoryAndExecutor(); serviceCollection .AddTaskFactoryAndExecutor(); @@ -206,7 +208,6 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceCollection.AddTaskExecutor(); serviceCollection.AddTaskExecutor(); - serviceCollection.AddTaskExecutor(); serviceCollection.AddTaskExecutor(); serviceCollection.AddTaskFactory(); serviceCollection.AddTaskExecutor(); From 7941cf10f62740e4244a9328fb4b3580a0e0e542 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 4 Nov 2024 20:23:17 +0100 Subject: [PATCH 34/95] Add ARR ACN/SMN quests --- .../SMN/1091_Austerities of Flame.json | 105 +++++ .../SMN/1092_Austerities of Earth.json | 93 ++++ .../SMN/1093_Shadowing the Summoner.json | 80 ++++ .../Class Quests/SMN/1094_Allagan Attire.json | 206 ++++++++ .../SMN/1095_Austerities of Wind.json | 87 ++++ .../Class Quests/SMN/1096_Primal Burdens.json | 135 ++++++ .../SMN/1103_Topaz Teachings.json | 69 +++ .../451_So You Want to Be an Arcanist.json | 5 +- .../SMN/452_Way of the Arcanist.json | 12 +- .../SMN/454_My First Grimoire.json | 150 ++++++ .../SMN/455_What's in the Box.json | 199 ++++++++ .../SMN/457_Tactical Planning.json | 179 +++++++ .../Class Quests/SMN/458_Over the Rails.json | 119 +++++ .../Class Quests/SMN/459_Pincer Maneuver.json | 171 +++++++ .../SMN/460_Grimoire Fandango.json | 438 ++++++++++++++++++ .../SMN/461_Sinking Doesmaga.json | 272 +++++++++++ 16 files changed, 2315 insertions(+), 5 deletions(-) create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1091_Austerities of Flame.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1092_Austerities of Earth.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1093_Shadowing the Summoner.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1094_Allagan Attire.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1095_Austerities of Wind.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1096_Primal Burdens.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1103_Topaz Teachings.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/454_My First Grimoire.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/455_What's in the Box.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/457_Tactical Planning.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/458_Over the Rails.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/459_Pincer Maneuver.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/460_Grimoire Fandango.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/461_Sinking Doesmaga.json diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1091_Austerities of Flame.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1091_Austerities of Flame.json new file mode 100644 index 00000000..41477a2b --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1091_Austerities of Flame.json @@ -0,0 +1,105 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "Interact", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1006786, + "Position": { + "X": -347.15802, + "Y": 0.9522269, + "Z": 741.3595 + }, + "TerritoryId": 146, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Southern Thanalan - Forgotten Springs", + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1006786, + "Position": { + "X": -347.15802, + "Y": 0.9522269, + "Z": 741.3595 + }, + "StopDistance": 5, + "TerritoryId": 146, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ], + "NextQuestId": 1092 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1092_Austerities of Earth.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1092_Austerities of Earth.json new file mode 100644 index 00000000..d51cd859 --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1092_Austerities of Earth.json @@ -0,0 +1,93 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "TerritoryId": 133, + "InteractionType": "EquipItem", + "ItemId": 4549, + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 133 + ] + } + } + }, + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1006787, + "Position": { + "X": -268.78766, + "Y": -78.85388, + "Z": 444.8767 + }, + "TerritoryId": 154, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "North Shroud - Fallgourd Float", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1006787, + "Position": { + "X": -268.78766, + "Y": -78.85388, + "Z": 444.8767 + }, + "StopDistance": 7, + "TerritoryId": 154, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ], + "NextQuestId": 1093 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1093_Shadowing the Summoner.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1093_Shadowing the Summoner.json new file mode 100644 index 00000000..0f9e3081 --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1093_Shadowing the Summoner.json @@ -0,0 +1,80 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 133 + ] + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1006788, + "Position": { + "X": -105.79089, + "Y": 27.83778, + "Z": -374.3191 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": -152.77162, + "Y": 27.317062, + "Z": -400.4738 + }, + "TerritoryId": 146, + "InteractionType": "WalkTo" + }, + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ], + "NextQuestId": 1094 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1094_Allagan Attire.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1094_Allagan Attire.json new file mode 100644 index 00000000..1d0ca2c7 --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1094_Allagan Attire.json @@ -0,0 +1,206 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 133 + ] + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1006725, + "Position": { + "X": 446.82983, + "Y": -5.306207, + "Z": -465.72064 + }, + "TerritoryId": 156, + "InteractionType": "Interact", + "AetheryteShortcut": "Mor Dhona", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1006789, + "Position": { + "X": 503.2882, + "Y": -12.351167, + "Z": -343.19073 + }, + "TerritoryId": 156, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 1948 + ], + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1006789, + "Position": { + "X": 503.2882, + "Y": -12.351167, + "Z": -343.19073 + }, + "TerritoryId": 156, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1006790, + "Position": { + "X": 496.45215, + "Y": -2.546432, + "Z": -472.03784 + }, + "TerritoryId": 156, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 1948 + ], + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1006790, + "Position": { + "X": 496.45215, + "Y": -2.546432, + "Z": -472.03784 + }, + "TerritoryId": 156, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "Position": { + "X": 372.27008, + "Y": -4.9949923, + "Z": -482.91302 + }, + "TerritoryId": 156, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1006791, + "Position": { + "X": 373.52563, + "Y": -5.242633, + "Z": -484.70288 + }, + "TerritoryId": 156, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 1948 + ] + } + ] + }, + { + "Sequence": 7, + "Steps": [ + { + "DataId": 1006791, + "Position": { + "X": 373.52563, + "Y": -5.242633, + "Z": -484.70288 + }, + "TerritoryId": 156, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 8, + "Steps": [ + { + "DataId": 1006725, + "Position": { + "X": 446.82983, + "Y": -5.306207, + "Z": -465.72064 + }, + "TerritoryId": 156, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "TerritoryId": 156, + "InteractionType": "EquipRecommended" + }, + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ], + "NextQuestId": 1095 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1095_Austerities of Wind.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1095_Austerities of Wind.json new file mode 100644 index 00000000..0161b768 --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1095_Austerities of Wind.json @@ -0,0 +1,87 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 133 + ] + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1006792, + "Position": { + "X": -378.10333, + "Y": 51.61585, + "Z": -290.11975 + }, + "TerritoryId": 180, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Outer La Noscea - Camp Overlook", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1006792, + "Position": { + "X": -378.10333, + "Y": 51.61585, + "Z": -290.11975 + }, + "TerritoryId": 180, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ], + "NextQuestId": 1096 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1096_Primal Burdens.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1096_Primal Burdens.json new file mode 100644 index 00000000..5f23b8dd --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1096_Primal Burdens.json @@ -0,0 +1,135 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 133 + ] + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 494.60034, + "Y": -2.1295002, + "Z": -484.951 + }, + "TerritoryId": 156, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Mor Dhona", + "Fly": true + }, + { + "DataId": 1006793, + "Position": { + "X": 493.09534, + "Y": -2.349111, + "Z": -484.61133 + }, + "TerritoryId": 156, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1006794, + "Position": { + "X": 493.09534, + "Y": -2.4306269, + "Z": -483.6042 + }, + "TerritoryId": 156, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "Position": { + "X": 500.36328, + "Y": -3.814063, + "Z": -770.9911 + }, + "TerritoryId": 156, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "Position": { + "X": 504.98605, + "Y": -2.5969198, + "Z": -780.6112 + }, + "TerritoryId": 156, + "InteractionType": "SinglePlayerDuty", + "Mount": false + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1006795, + "Position": { + "X": 475.0896, + "Y": 5.8291526, + "Z": -842.40485 + }, + "TerritoryId": 156, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1006756, + "Position": { + "X": -16.891846, + "Y": 10.17425, + "Z": -246.87573 + }, + "TerritoryId": 133, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Mih Khetto's Amphitheatre" + ] + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1103_Topaz Teachings.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1103_Topaz Teachings.json new file mode 100644 index 00000000..f2b0983f --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/1103_Topaz Teachings.json @@ -0,0 +1,69 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1005199, + "Position": { + "X": -348.3177, + "Y": -2.3744698, + "Z": 11.917236 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_CLSACN149_01103_Q1_000_000", + "Answer": "TEXT_CLSACN149_01103_A1_000_000" + } + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "CompleteQuest", + "NextQuestId": 458 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/451_So You Want to Be an Arcanist.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/451_So You Want to Be an Arcanist.json index 4c4c38fc..5aade25c 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/451_So You Want to Be an Arcanist.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/451_So You Want to Be an Arcanist.json @@ -21,10 +21,7 @@ ], "SkipConditions": { "AetheryteShortcutIf": { - "InSameTerritory": true, - "InTerritory": [ - 129 - ] + "InSameTerritory": true } }, "DialogueChoices": [ diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/452_Way of the Arcanist.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/452_Way of the Arcanist.json index 4faf9f21..263102e6 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/452_Way of the Arcanist.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/452_Way of the Arcanist.json @@ -13,7 +13,17 @@ "Z": 1.3884888 }, "TerritoryId": 129, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/454_My First Grimoire.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/454_My First Grimoire.json new file mode 100644 index 00000000..360fb37a --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/454_My First Grimoire.json @@ -0,0 +1,150 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": -1.5568014, + "Y": 66.12121, + "Z": 102.35001 + }, + "TerritoryId": 135, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 347, + "MinimumKillCount": 3, + "CompletionQuestVariablesFlags": [ + null, + { + "Low": 3 + }, + null, + null, + null, + null + ] + }, + { + "DataId": 49, + "MinimumKillCount": 3, + "CompletionQuestVariablesFlags": [ + { + "Low": 3 + }, + null, + null, + null, + null, + null + ] + } + ], + "AethernetShortcut": [ + "[Limsa Lominsa] Arcanists' Guild", + "[Limsa Lominsa] Tempest Gate (Lower La Noscea)" + ], + "CompletionQuestVariablesFlags": [ + { + "Low": 3 + }, + { + "Low": 3 + }, + null, + null, + null, + null + ] + }, + { + "Position": { + "X": 157.63565, + "Y": 38.01287, + "Z": 48.92973 + }, + "TerritoryId": 135, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 324, + "MinimumKillCount": 3, + "CompletionQuestVariablesFlags": [ + null, + { + "High": 3 + }, + null, + null, + null, + null + ] + } + ], + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + { + "High": 3 + }, + null, + null, + null, + null + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "NextQuestId": 455 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/455_What's in the Box.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/455_What's in the Box.json new file mode 100644 index 00000000..adfe3dbf --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/455_What's in the Box.json @@ -0,0 +1,199 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 368.87418, + "Y": 61.448803, + "Z": -69.13581 + }, + "TerritoryId": 135, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 339, + "MinimumKillCount": 3, + "CompletionQuestVariablesFlags": [ + { + "Low": 3 + }, + null, + null, + null, + null, + null + ] + } + ], + "Fly": true, + "CompletionQuestVariablesFlags": [ + { + "Low": 3 + }, + null, + null, + null, + null, + null + ], + "AethernetShortcut": [ + "[Limsa Lominsa] Arcanists' Guild", + "[Limsa Lominsa] Tempest Gate (Lower La Noscea)" + ] + }, + { + "Position": { + "X": 381.1583, + "Y": 68.00773, + "Z": -114.15414 + }, + "TerritoryId": 135, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 118, + "MinimumKillCount": 3, + "CompletionQuestVariablesFlags": [ + null, + { + "High": 3 + }, + null, + null, + null, + null + ] + } + ], + "CompletionQuestVariablesFlags": [ + null, + { + "High": 3 + }, + null, + null, + null, + null + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2002266, + "Position": { + "X": -0.13739014, + "Y": 26.077637, + "Z": 196.52087 + }, + "TerritoryId": 134, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 39 + ], + "AethernetShortcut": [ + "[Limsa Lominsa] Arcanists' Guild", + "[Limsa Lominsa] Zephyr Gate (Middle La Noscea)" + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 2002476, + "Position": { + "X": -0.10687256, + "Y": 25.955566, + "Z": 196.55139 + }, + "TerritoryId": 134, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_CLSACN050_00455_Q1_000_000", + "Answer": "TEXT_CLSACN050_00455_A1_000_002" + } + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "NextQuestId": 457 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/457_Tactical Planning.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/457_Tactical Planning.json new file mode 100644 index 00000000..71133d7e --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/457_Tactical Planning.json @@ -0,0 +1,179 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 667.4784, + "Y": 15.36824, + "Z": 443.4379 + }, + "TerritoryId": 138, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "KillEnemyDataIds": [ + 22 + ], + "AetheryteShortcut": "Western La Noscea - Swiftperch", + "CompletionQuestVariablesFlags": [ + { + "Low": 3 + }, + null, + null, + null, + null, + null + ] + }, + { + "Position": { + "X": 686.6034, + "Y": 23.682272, + "Z": 422.78772 + }, + "TerritoryId": 138, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "KillEnemyDataIds": [ + 138 + ], + "CompletionQuestVariablesFlags": [ + null, + { + "High": 3 + }, + null, + null, + null, + null + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1005199, + "Position": { + "X": -348.3177, + "Y": -2.3744698, + "Z": 11.917236 + }, + "TerritoryId": 129, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1005200, + "Position": { + "X": -106.79791, + "Y": 45.688404, + "Z": -252.33844 + }, + "TerritoryId": 134, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Middle La Noscea - Summerford Farms", + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1005201, + "Position": { + "X": -98.49707, + "Y": 47.27536, + "Z": -262.31793 + }, + "StopDistance": 5, + "TerritoryId": 134, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_CLSACN101_00457_Q1_000_000", + "Answer": "TEXT_CLSACN101_00457_A1_000_001" + } + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "NextQuestId": 1103 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/458_Over the Rails.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/458_Over the Rails.json new file mode 100644 index 00000000..2e3bb87b --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/458_Over the Rails.json @@ -0,0 +1,119 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1005208, + "Position": { + "X": 316.02954, + "Y": -24.136772, + "Z": 211.20007 + }, + "TerritoryId": 138, + "InteractionType": "Interact", + "AetheryteShortcut": "Western La Noscea - Aleport" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1005211, + "Position": { + "X": 204.27246, + "Y": -36.402367, + "Z": 306.17224 + }, + "TerritoryId": 138, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 317, + 318 + ], + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1005211, + "Position": { + "X": 204.27246, + "Y": -36.402367, + "Z": 306.17224 + }, + "TerritoryId": 138, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 2002009, + "Position": { + "X": 173.81543, + "Y": -41.36731, + "Z": 280.7201 + }, + "TerritoryId": 138, + "InteractionType": "SinglePlayerDuty" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "NextQuestId": 459 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/459_Pincer Maneuver.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/459_Pincer Maneuver.json new file mode 100644 index 00000000..4f70c71b --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/459_Pincer Maneuver.json @@ -0,0 +1,171 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1003505, + "Position": { + "X": -186.20587, + "Y": 16, + "Z": 56.931396 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Limsa Lominsa] Arcanists' Guild", + "[Limsa Lominsa] Hawkers' Alley" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1000938, + "Position": { + "X": -4.654114, + "Y": 44.999847, + "Z": -241.84027 + }, + "TerritoryId": 128, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Limsa Lominsa] Hawkers' Alley", + "[Limsa Lominsa] Marauders' Guild" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Limsa Lominsa] Marauders' Guild", + "[Limsa Lominsa] Arcanists' Guild" + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "Position": { + "X": 177.58797, + "Y": -41.12709, + "Z": 260.26315 + }, + "TerritoryId": 138, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Western La Noscea - Aleport", + "Fly": true + }, + { + "DataId": 1005215, + "Position": { + "X": 178.66785, + "Y": -41.140213, + "Z": 261.61597 + }, + "TerritoryId": 138, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1005217, + "Position": { + "X": 103.74609, + "Y": 68.15523, + "Z": 329.45752 + }, + "TerritoryId": 135, + "InteractionType": "Interact", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Tempest Gate (Lower La Noscea)" + ], + "Fly": true + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 2002010, + "Position": { + "X": 108.384766, + "Y": 68.13147, + "Z": 351.61353 + }, + "TerritoryId": 135, + "InteractionType": "SinglePlayerDuty" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "NextQuestId": 460 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/460_Grimoire Fandango.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/460_Grimoire Fandango.json new file mode 100644 index 00000000..3febeabd --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/460_Grimoire Fandango.json @@ -0,0 +1,438 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 410.82263, + "Y": 31.185892, + "Z": -11.729958 + }, + "TerritoryId": 138, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Western La Noscea - Aleport", + "Fly": true + }, + { + "DataId": 1005227, + "Position": { + "X": -311.32983, + "Y": -1.5234554, + "Z": 127.336426 + }, + "TerritoryId": 139, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": -394.91058, + "Y": -3.4000032, + "Z": 148.78712 + }, + "TerritoryId": 139, + "InteractionType": "WalkTo", + "SkipConditions": { + "StepIf": { + "Flying": "Unlocked" + } + } + }, + { + "Position": { + "X": -449.98322, + "Y": 3.358525, + "Z": 88.437485 + }, + "TerritoryId": 139, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1006195, + "Position": { + "X": -453.36084, + "Y": 4.574484, + "Z": 71.54956 + }, + "TerritoryId": 139, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "Position": { + "X": -449.98322, + "Y": 3.358525, + "Z": 88.437485 + }, + "TerritoryId": 139, + "InteractionType": "WalkTo", + "Mount": true + }, + { + "DataId": 2001892, + "Position": { + "X": -457.7249, + "Y": 29.19043, + "Z": 58.335205 + }, + "TerritoryId": 139, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 2001894, + "Position": { + "X": -393.4234, + "Y": 42.557373, + "Z": -2.975586 + }, + "TerritoryId": 139, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "Position": { + "X": -373.06784, + "Y": 38.31673, + "Z": 36.456448 + }, + "TerritoryId": 139, + "InteractionType": "WalkTo", + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } + }, + { + "Position": { + "X": -367.3377, + "Y": 27.109692, + "Z": 40.748257 + }, + "TerritoryId": 139, + "InteractionType": "WalkTo", + "Mount": false, + "DisableNavmesh": true, + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } + }, + { + "DataId": 2001893, + "Position": { + "X": -388.72363, + "Y": 27.023682, + "Z": 45.578613 + }, + "TerritoryId": 139, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "Position": { + "X": -419.99802, + "Y": 19.50849, + "Z": 60.498474 + }, + "TerritoryId": 139, + "InteractionType": "WalkTo", + "Mount": true + }, + { + "Position": { + "X": -428.06293, + "Y": -1.8700926, + "Z": 65.585 + }, + "TerritoryId": 139, + "InteractionType": "WalkTo", + "DisableNavmesh": true + }, + { + "Position": { + "X": -449.98322, + "Y": 3.358525, + "Z": 88.437485 + }, + "TerritoryId": 139, + "InteractionType": "WalkTo" + }, + { + "DataId": 1006195, + "Position": { + "X": -453.36084, + "Y": 4.574484, + "Z": 71.54956 + }, + "TerritoryId": 139, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "Position": { + "X": -449.98322, + "Y": 3.358525, + "Z": 88.437485 + }, + "TerritoryId": 139, + "InteractionType": "WalkTo", + "Mount": true + }, + { + "Position": { + "X": -599.5244, + "Y": -3.3999999, + "Z": -51.651997 + }, + "TerritoryId": 139, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 2002478, + "Position": { + "X": -600.61035, + "Y": -3.189148, + "Z": -53.788086 + }, + "TerritoryId": 139, + "InteractionType": "Emote", + "Emote": "dance" + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 2002478, + "Position": { + "X": -600.61035, + "Y": -3.189148, + "Z": -53.788086 + }, + "TerritoryId": 139, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 7, + "Steps": [ + { + "Position": { + "X": -600.61035, + "Y": -3.189148, + "Z": -53.788086 + }, + "TerritoryId": 139, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 39 + ] + }, + { + "DataId": 2002478, + "Position": { + "X": -600.61035, + "Y": -3.189148, + "Z": -53.788086 + }, + "TerritoryId": 139, + "InteractionType": "Interact", + "DelaySecondsAtStart": 5 + } + ] + }, + { + "Sequence": 8, + "Steps": [ + { + "Position": { + "X": -394.91058, + "Y": -3.4000032, + "Z": 148.78712 + }, + "TerritoryId": 139, + "InteractionType": "WalkTo", + "SkipConditions": { + "StepIf": { + "Flying": "Unlocked" + } + } + }, + { + "DataId": 1005249, + "Position": { + "X": -337.30072, + "Y": -2.1811728, + "Z": 141.31372 + }, + "TerritoryId": 139, + "InteractionType": "Emote", + "Emote": "dance", + "Fly": true + } + ] + }, + { + "Sequence": 9, + "Steps": [ + { + "Position": { + "X": -139.68823, + "Y": 39.999985, + "Z": 154.54538 + }, + "TerritoryId": 128, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] The Aftcastle" + ] + }, + { + "DataId": 1005228, + "Position": { + "X": -190.3258, + "Y": 41.24994, + "Z": 176.22644 + }, + "TerritoryId": 128, + "InteractionType": "Emote", + "Emote": "dance", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_CLSACN250_00460_Q1_000_000", + "Yes": true + } + ] + } + ] + }, + { + "Sequence": 10, + "Steps": [ + { + "DataId": 1005228, + "Position": { + "X": -190.3258, + "Y": 41.24994, + "Z": 176.22644 + }, + "TerritoryId": 128, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "NextQuestId": 461 + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/461_Sinking Doesmaga.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/461_Sinking Doesmaga.json new file mode 100644 index 00000000..25573218 --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SMN/461_Sinking Doesmaga.json @@ -0,0 +1,272 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 540.5525, + "Y": 10.00537, + "Z": 215.53333 + }, + "TerritoryId": 137, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Eastern La Noscea - Costa Del Sol", + "SkipConditions": { + "StepIf": { + "Flying": "Unlocked" + } + } + }, + { + "Position": { + "X": 545.74445, + "Y": 11.959542, + "Z": 214.24825 + }, + "TerritoryId": 137, + "InteractionType": "WalkTo", + "SkipConditions": { + "StepIf": { + "Flying": "Unlocked" + } + } + }, + { + "Position": { + "X": 548.48584, + "Y": 12.640512, + "Z": 220.15768 + }, + "TerritoryId": 137, + "InteractionType": "WalkTo", + "Fly": true, + "SkipConditions": { + "StepIf": { + "Flying": "Locked" + } + } + }, + { + "DataId": 1005251, + "Position": { + "X": 550.46924, + "Y": 12.147732, + "Z": 220.9353 + }, + "StopDistance": 5, + "TerritoryId": 137, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": 542.48083, + "Y": 8.70027, + "Z": 398.26666 + }, + "TerritoryId": 137, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Eastern La Noscea - Costa Del Sol" + }, + { + "Position": { + "X": 585.3419, + "Y": 14.562424, + "Z": 379.80997 + }, + "TerritoryId": 137, + "InteractionType": "WalkTo" + }, + { + "DataId": 1005252, + "Position": { + "X": 586.0226, + "Y": 14.562427, + "Z": 376.21106 + }, + "StopDistance": 5, + "TerritoryId": 137, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1006273, + "Position": { + "X": 619.0126, + "Y": 23.936245, + "Z": 455.10022 + }, + "TerritoryId": 137, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1005253, + "Position": { + "X": 564.35486, + "Y": 20.617891, + "Z": 504.32593 + }, + "TerritoryId": 137, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "Position": { + "X": 515.26044, + "Y": 27.708418, + "Z": 469.322 + }, + "TerritoryId": 137, + "InteractionType": "WalkTo", + "Fly": true, + "SkipConditions": { + "StepIf": { + "Flying": "Locked" + } + } + }, + { + "Position": { + "X": 449.59036, + "Y": 15.174555, + "Z": 377.2856 + }, + "TerritoryId": 137, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1005254, + "Position": { + "X": 442.00806, + "Y": 15.793267, + "Z": 370.32104 + }, + "TerritoryId": 137, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1005229, + "Position": { + "X": 522.9114, + "Y": 17.448051, + "Z": 456.35156 + }, + "TerritoryId": 137, + "InteractionType": "Interact", + "Fly": true, + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_CLSACN300_00461_Q1_000_001", + "Yes": true + } + ] + } + ] + }, + { + "Sequence": 7, + "Steps": [ + { + "DataId": 1005235, + "Position": { + "X": 684.3823, + "Y": 11.594438, + "Z": 411.94775 + }, + "StopDistance": 1, + "TerritoryId": 137, + "InteractionType": "SinglePlayerDuty", + "Fly": true + } + ] + }, + { + "Sequence": 8, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Arcanists' Guild" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1000909, + "Position": { + "X": -326.37524, + "Y": 12.899658, + "Z": 9.994568 + }, + "TerritoryId": 129, + "InteractionType": "CompleteQuest", + "NextQuestId": 1091 + } + ] + } + ] +} From 9329bb7cd608421885bdcc14cb00d29b12512277 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Sun, 20 Oct 2024 00:51:34 +0800 Subject: [PATCH 35/95] Added action Fiery Breath --- QuestPaths/quest-v1.json | 1 + Questionable.Model/Questing/Converter/ActionConverter.cs | 1 + Questionable.Model/Questing/EAction.cs | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 5ef7ce77..58c1d16a 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -946,6 +946,7 @@ "Physick", "Aspected Benefic", "Form Shift", + "Fiery Breath", "Buffet (Sanuwa)", "Buffet (Griffin)", "Trample", diff --git a/Questionable.Model/Questing/Converter/ActionConverter.cs b/Questionable.Model/Questing/Converter/ActionConverter.cs index d3a90500..86a1800b 100644 --- a/Questionable.Model/Questing/Converter/ActionConverter.cs +++ b/Questionable.Model/Questing/Converter/ActionConverter.cs @@ -22,6 +22,7 @@ public sealed class ActionConverter() : EnumConverter(Values) { EAction.Physick, "Physick" }, { EAction.AspectedBenefic, "Aspected Benefic" }, { EAction.FormShift, "Form Shift" }, + { EAction.FieryBreath, "Fiery Breath" }, { EAction.BuffetSanuwa, "Buffet (Sanuwa)" }, { EAction.BuffetGriffin, "Buffet (Griffin)" }, { EAction.Trample, "Trample" }, diff --git a/Questionable.Model/Questing/EAction.cs b/Questionable.Model/Questing/EAction.cs index 5fd17258..4f798797 100644 --- a/Questionable.Model/Questing/EAction.cs +++ b/Questionable.Model/Questing/EAction.cs @@ -21,6 +21,7 @@ public enum EAction Physick = 190, AspectedBenefic = 3595, FormShift = 4262, + FieryBreath = 1764, BuffetSanuwa = 4931, BuffetGriffin = 4583, Trample = 4585, @@ -70,7 +71,8 @@ public static class EActionExtensions public static bool RequiresMount(this EAction action) { return action - is EAction.BuffetSanuwa + is EAction.FieryBreath + or EAction.BuffetSanuwa or EAction.BuffetGriffin or EAction.Trample or EAction.Fumigate From a287d91e2251b8915e931d5c34633fcaf355de32 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Mon, 4 Nov 2024 18:46:42 +0800 Subject: [PATCH 36/95] Added a few daily quests: - A Sappy Ending - Luring Lacovie - Forged in Flame - Beacon Keepers - This Infernal Heat --- .../Amalj'aa/Dailies/1224_A Sappy Ending.json | 116 ++++++++++++++++++ .../Amalj'aa/Dailies/1225_Luring Lacovie.json | 63 ++++++++++ .../Dailies/1234_Forged in Flame.json | 37 ++++++ .../Amalj'aa/Dailies/1235_Beacon Keepers.json | 37 ++++++ .../Dailies/1241_This Infernal Heat.json | 59 +++++++++ 5 files changed, 312 insertions(+) create mode 100644 QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1224_A Sappy Ending.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1225_Luring Lacovie.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1234_Forged in Flame.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1235_Beacon Keepers.json create mode 100644 QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1241_This Infernal Heat.json diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1224_A Sappy Ending.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1224_A Sappy Ending.json new file mode 100644 index 00000000..2af51938 --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1224_A Sappy Ending.json @@ -0,0 +1,116 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1005550, + "Position": { + "X": 105.27197, + "Y": 15.359643, + "Z": -357.3816 + }, + "TerritoryId": 146, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2002979, + "Position": { + "X": -180.68213, + "Y": 6.301941, + "Z": -136.21735 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [1, 2], null, null, null, null], + "Fly": true + }, + { + "DataId": 2002981, + "Position": { + "X": -30.655396, + "Y": 8.651855, + "Z": -87.02222 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [4, 17], null, null, null, null], + "Fly": true + }, + { + "DataId": 2002982, + "Position": { + "X": -116.44165, + "Y": -0.3204956, + "Z": -34.40918 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [18, 20], null, null, null, null], + "Fly": true + }, + { + "DataId": 2002985, + "Position": { + "X": -41.031555, + "Y": 0.16778564, + "Z": 15.915161 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [ + null, + [33, 34, 36], + null, + null, + null, + null + ], + "Fly": true + }, + { + "DataId": 2002986, + "Position": { + "X": -78.81293, + "Y": -1.083435, + "Z": 44.052734 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [ + null, + [49, 50, 52], + null, + null, + null, + null + ], + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1005550, + "Position": { + "X": 105.27197, + "Y": 15.359643, + "Z": -357.3816 + }, + "TerritoryId": 146, + "InteractionType": "CompleteQuest", + "Fly": true + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1225_Luring Lacovie.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1225_Luring Lacovie.json new file mode 100644 index 00000000..c0378b1d --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1225_Luring Lacovie.json @@ -0,0 +1,63 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1005550, + "Position": { + "X": 105.27197, + "Y": 15.359643, + "Z": -357.3816 + }, + "TerritoryId": 146, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": -40.402416, + "Y": -1.1266766, + "Z": 0.71999836 + }, + "TerritoryId": 146, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 358, + "MinimumKillCount": 3 + }, + { + "DataId": 2451, + "MinimumKillCount": 1 + } + ], + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1005550, + "Position": { + "X": 105.27197, + "Y": 15.359643, + "Z": -357.3816 + }, + "TerritoryId": 146, + "InteractionType": "CompleteQuest", + "Fly": true + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1234_Forged in Flame.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1234_Forged in Flame.json new file mode 100644 index 00000000..f489f265 --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1234_Forged in Flame.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1005551, + "Position": { + "X": 98.924194, + "Y": 15.29447, + "Z": -349.4469 + }, + "TerritoryId": 146, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1005551, + "Position": { + "X": 98.924194, + "Y": 15.29447, + "Z": -349.4469 + }, + "TerritoryId": 146, + "InteractionType": "CompleteQuest", + "Fly": true + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1235_Beacon Keepers.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1235_Beacon Keepers.json new file mode 100644 index 00000000..f489f265 --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1235_Beacon Keepers.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1005551, + "Position": { + "X": 98.924194, + "Y": 15.29447, + "Z": -349.4469 + }, + "TerritoryId": 146, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1005551, + "Position": { + "X": 98.924194, + "Y": 15.29447, + "Z": -349.4469 + }, + "TerritoryId": 146, + "InteractionType": "CompleteQuest", + "Fly": true + } + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1241_This Infernal Heat.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1241_This Infernal Heat.json new file mode 100644 index 00000000..fa976521 --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1241_This Infernal Heat.json @@ -0,0 +1,59 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1005551, + "Position": { + "X": 98.924194, + "Y": 15.29447, + "Z": -349.4469 + }, + "TerritoryId": 146, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": -38.375584, + "Y": 8.492833, + "Z": 156.09068 + }, + "TerritoryId": 146, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "ComplexCombatData": [ + { + "DataId": 2452, + "MinimumKillCount": 2 + } + ], + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1005551, + "Position": { + "X": 98.924194, + "Y": 15.29447, + "Z": -349.4469 + }, + "TerritoryId": 146, + "InteractionType": "CompleteQuest", + "Fly": true + } + ] + } + ] +} From 939aba4d2652fb25aabfd013f55f193801673e9e Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Mon, 4 Nov 2024 18:47:23 +0800 Subject: [PATCH 37/95] Added new story quest - "Ranger Rescue" --- .../Amalj'aa/Story/1219_Ranger Rescue.json | 221 ++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Story/1219_Ranger Rescue.json diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Story/1219_Ranger Rescue.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Story/1219_Ranger Rescue.json new file mode 100644 index 00000000..aeb0269d --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Story/1219_Ranger Rescue.json @@ -0,0 +1,221 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1005553, + "Position": { + "X": 122.6062, + "Y": 16.402647, + "Z": -362.11188 + }, + "TerritoryId": 146, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1005581, + "Position": { + "X": -55.985413, + "Y": -1.6554508, + "Z": -47.56244 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2002949, + "Position": { + "X": -70.17627, + "Y": 11.36792, + "Z": 97.0625 + }, + "TerritoryId": 146, + "InteractionType": "Action", + "Action": "Fiery Breath" + }, + { + "DataId": 2002956, + "Position": { + "X": -199.96954, + "Y": 5.661072, + "Z": 101.823364 + }, + "TerritoryId": 146, + "InteractionType": "Action", + "Action": "Fiery Breath" + }, + { + "DataId": 2002950, + "Position": { + "X": -118.0896, + "Y": 27.695068, + "Z": 126.97034 + }, + "TerritoryId": 146, + "InteractionType": "Action", + "Action": "Fiery Breath" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1005585, + "Position": { + "X": -114.64105, + "Y": 7.539109, + "Z": 308.82727 + }, + "TerritoryId": 146, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1005583, + "Position": { + "X": -114.27484, + "Y": 7.6587763, + "Z": 310.01746 + }, + "TerritoryId": 146, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1005584, + "Position": { + "X": -261.55493, + "Y": 7.084492, + "Z": 412.28345 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1008284, + "Position": { + "X": -306.44696, + "Y": 6.321288, + "Z": 392.5078 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "Fly": true + }, + { + "Position": { + "X": -365.44217, + "Y": 6.691126, + "Z": 395.09555 + }, + "TerritoryId": 146, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1008287, + "Position": { + "X": -366.10974, + "Y": 6.9095497, + "Z": 394.64404 + }, + "TerritoryId": 146, + "InteractionType": "Interact" + }, + { + "DataId": 1008285, + "Position": { + "X": -319.50867, + "Y": 8.2855835, + "Z": 428.18335 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 1008286, + "Position": { + "X": -330.5562, + "Y": 8.096848, + "Z": 480.0641 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 7, + "Steps": [ + { + "Position": { + "X": -159.56685, + "Y": 23.290625, + "Z": -334.22568 + }, + "TerritoryId": 146, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo" + }, + { + "DataId": 1005578, + "Position": { + "X": 89.00586, + "Y": 14.439478, + "Z": -387.77753 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1005553, + "Position": { + "X": 122.6062, + "Y": 16.402647, + "Z": -362.11188 + }, + "TerritoryId": 146, + "InteractionType": "CompleteQuest", + "Fly": true + } + ] + } + ] +} From 63b9020824cf97b81b1c02a6d87e5c32dc85c7c7 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Wed, 6 Nov 2024 22:05:27 +0800 Subject: [PATCH 38/95] Added new daily quests: - Singed Fur Their Own Good --- .../1236_Singed Fur Their Own Good.json | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1236_Singed Fur Their Own Good.json diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1236_Singed Fur Their Own Good.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1236_Singed Fur Their Own Good.json new file mode 100644 index 00000000..22c8e69d --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1236_Singed Fur Their Own Good.json @@ -0,0 +1,118 @@ +{ + "$schema": "https://git.carvel.li/plogon_enjoyer/Questionable/raw/branch/temp/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1005551, + "Position": { + "X": 98.924194, + "Y": 15.29447, + "Z": -349.4469 + }, + "TerritoryId": 146, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1005848, + "Position": { + "X": -101.487854, + "Y": 8.097177, + "Z": 403.28064 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "AetheryteShortcut": "Southern Thanalan - Forgotten Springs", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2003353, + "Position": { + "X": -248.0965, + "Y": 2.8533936, + "Z": 675.95935 + }, + "TerritoryId": 146, + "InteractionType": "Action", + "Action": "Fiery Breath", + "RequiredQuestVariables": [null, null, null, [1], null, null] + }, + { + "DataId": 2003354, + "Position": { + "X": -132.03638, + "Y": -1.449646, + "Z": 778.8052 + }, + "TerritoryId": 146, + "InteractionType": "Action", + "Action": "Fiery Breath", + "RequiredQuestVariables": [null, null, null, [1, 5], null, null] + }, + { + "DataId": 2003356, + "Position": { + "X": 78.446655, + "Y": 14.328186, + "Z": 589.9595 + }, + "TerritoryId": 146, + "InteractionType": "Action", + "Action": "Fiery Breath", + "RequiredQuestVariables": [null, null, null, [1, 5], null, null] + }, + { + "DataId": 2003357, + "Position": { + "X": 179.9801, + "Y": 6.6376343, + "Z": 601.15967 + }, + "TerritoryId": 146, + "InteractionType": "Action", + "Action": "Fiery Breath", + "RequiredQuestVariables": [null, null, null, [5], null, null] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": -56.11375, + "Y": 25.301596, + "Z": -391.2648 + }, + "TerritoryId": 146, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo", + "Mount": true + }, + { + "DataId": 1005551, + "Position": { + "X": 98.924194, + "Y": 15.29447, + "Z": -349.4469 + }, + "TerritoryId": 146, + "InteractionType": "CompleteQuest", + "Fly": true + } + ] + } + ] +} From bc66dcb5c2c6b372ff7da3ed9c58903138444190 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Wed, 6 Nov 2024 22:14:43 +0800 Subject: [PATCH 39/95] Added new story quest: - Misdelivered --- .../Kojin/Story/2976_Misdelivered.json | 105 ++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Story/2976_Misdelivered.json diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Story/2976_Misdelivered.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Story/2976_Misdelivered.json new file mode 100644 index 00000000..d530446d --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Story/2976_Misdelivered.json @@ -0,0 +1,105 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024215, + "Position": { + "X": 400.07617, + "Y": -119.589325, + "Z": -247.54712 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1024260, + "Position": { + "X": -131.9143, + "Y": -4.999999, + "Z": 181.75012 + }, + "TerritoryId": 628, + "InteractionType": "Interact", + "AetheryteShortcut": "Kugane", + "AethernetShortcut": ["[Kugane] Aetheryte Plaza", "[Kugane] Pier #1"] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": 246.58658, + "Y": 6.193447, + "Z": 651.3461 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [8244, 8246], + "Fly": true, + "AethernetShortcut": ["[Kugane] Pier #1", "[Kugane] The Ruby Price"] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1024264, + "Position": { + "X": 246.90613, + "Y": 6.054259, + "Z": 649.2561 + }, + "TerritoryId": 613, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1024267, + "Position": { + "X": -130.57153, + "Y": -4.999999, + "Z": 183.36768 + }, + "TerritoryId": 628, + "InteractionType": "Interact", + "AetheryteShortcut": "Kugane", + "AethernetShortcut": ["[Kugane] Aetheryte Plaza", "[Kugane] Pier #1"] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1024215, + "Position": { + "X": 400.07617, + "Y": -119.589325, + "Z": -247.54712 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Tamamizu" + } + ] + } + ] +} From 9faea025c1a746d94e6904c040a6536c4304e76e Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Wed, 6 Nov 2024 22:15:42 +0800 Subject: [PATCH 40/95] Added new daily quests: - Forever Blowing Bubbles - No, Not the Boo Box - Pleasure Doing Business - You Blow It Up - Tentacles of Trade - The Hot-blooded Kojin --- .../Dailies/2991_Forever Blowing Bubbles.json | 74 ++++++++ .../Dailies/2992_No, Not the Boo Box.json | 135 ++++++++++++++ .../Dailies/2993_Pleasure Doing Business.json | 129 +++++++++++++ .../Kojin/Dailies/2999_You Blow It Up.json | 93 ++++++++++ .../Dailies/3000_Tentacles of Trade.json | 171 ++++++++++++++++++ .../Dailies/3001_The Hot-blooded Kojin.json | 129 +++++++++++++ 6 files changed, 731 insertions(+) create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2991_Forever Blowing Bubbles.json create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2992_No, Not the Boo Box.json create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2993_Pleasure Doing Business.json create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2999_You Blow It Up.json create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/3000_Tentacles of Trade.json create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/3001_The Hot-blooded Kojin.json diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2991_Forever Blowing Bubbles.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2991_Forever Blowing Bubbles.json new file mode 100644 index 00000000..939a5b7a --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2991_Forever Blowing Bubbles.json @@ -0,0 +1,74 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 314.92435, + "Y": -78.61959, + "Z": -226.5322 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "RestartNavigationIfCancelled": false, + "Fly": true + }, + { + "DataId": 1024307, + "Position": { + "X": 29.617676, + "Y": -86.167725, + "Z": -26.962769 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 392.59683, + "Y": -119.589325, + "Z": -234.30063 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2992_No, Not the Boo Box.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2992_No, Not the Boo Box.json new file mode 100644 index 00000000..117a1f27 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2992_No, Not the Boo Box.json @@ -0,0 +1,135 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Ruby Sea - Onokoro" + }, + { + "DataId": 2009114, + "Position": { + "X": 558.5259, + "Y": -0.015319824, + "Z": -516.92993 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [1, 2], null] + }, + { + "DataId": 2009116, + "Position": { + "X": 558.5259, + "Y": -0.015319824, + "Z": -516.92993 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [8241], + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [3, 4, 5], null] + }, + { + "DataId": 2009113, + "Position": { + "X": 633.1731, + "Y": -0.015319824, + "Z": -497.79507 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [18, 20], null] + }, + { + "DataId": 2009111, + "Position": { + "X": 633.1731, + "Y": -0.015319824, + "Z": -497.79507 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [8241], + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [17, 19, 21], null] + }, + { + "DataId": 2009110, + "Position": { + "X": 694.08704, + "Y": -0.015319824, + "Z": -611.017 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [33, 36, 37], null] + }, + { + "DataId": 2009117, + "Position": { + "X": 694.08704, + "Y": -0.015319824, + "Z": -611.017 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [8241], + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [34, 35], null] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 392.59683, + "Y": -119.589325, + "Z": -234.30063 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2993_Pleasure Doing Business.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2993_Pleasure Doing Business.json new file mode 100644 index 00000000..89a2ba9e --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2993_Pleasure Doing Business.json @@ -0,0 +1,129 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Ruby Sea - Onokoro" + }, + { + "DataId": 1024310, + "Position": { + "X": -795.0103, + "Y": 21.373795, + "Z": -466.20892 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [17], null] + }, + { + "DataId": 1024311, + "Position": { + "X": -750.39294, + "Y": 1.6679686, + "Z": -479.33167 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [18, 33, 34], null] + }, + { + "DataId": 1024312, + "Position": { + "X": -792.08057, + "Y": 8.039127, + "Z": -444.419 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [17, 18], null] + }, + { + "DataId": 1024313, + "Position": { + "X": -764.12604, + "Y": 4.763445, + "Z": -441.51984 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [33, 34], null] + }, + { + "DataId": 1024314, + "Position": { + "X": -784.48157, + "Y": 7.7091823, + "Z": -456.9925 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [17, 33], null] + }, + { + "DataId": 1024315, + "Position": { + "X": -797.4823, + "Y": 8.045045, + "Z": -417.56317 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, null, null, null, [18, 34], null] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 392.59683, + "Y": -119.589325, + "Z": -234.30063 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2999_You Blow It Up.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2999_You Blow It Up.json new file mode 100644 index 00000000..c2a52242 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2999_You Blow It Up.json @@ -0,0 +1,93 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Ruby Sea - Onokoro" + }, + { + "Position": { + "X": -848.8846, + "Y": 36.0507, + "Z": 300.73306 + }, + "TerritoryId": 613, + "InteractionType": "UseItem", + "ItemId": 2002422, + "GroundTarget": true, + "Fly": true + }, + { + "Position": { + "X": -842.2923, + "Y": 36.053864, + "Z": 319.94763 + }, + "TerritoryId": 613, + "InteractionType": "UseItem", + "ItemId": 2002422, + "GroundTarget": true, + "Fly": true + }, + { + "Position": { + "X": -873.57074, + "Y": 36.01944, + "Z": 318.8049 + }, + "TerritoryId": 613, + "InteractionType": "UseItem", + "ItemId": 2002422, + "GroundTarget": true, + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 391.50903, + "Y": -119.58932, + "Z": -236.18898 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/3000_Tentacles of Trade.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/3000_Tentacles of Trade.json new file mode 100644 index 00000000..d2aab0bb --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/3000_Tentacles of Trade.json @@ -0,0 +1,171 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 317.37, + "Y": -83.39401, + "Z": -227.2903 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "RestartNavigationIfCancelled": false + }, + { + "DataId": 2009216, + "Position": { + "X": -154.40613, + "Y": -179.3393, + "Z": 187.97583 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [2], null, null, null], + "Fly": true + }, + { + "DataId": 2009217, + "Position": { + "X": -245.80762, + "Y": -194.50684, + "Z": 219.98926 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [2], null, null, null], + "Fly": true + }, + { + "DataId": 2009218, + "Position": { + "X": -162.8291, + "Y": -192.52313, + "Z": 255.6344 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [3], null, null, null], + "Fly": true + }, + { + "DataId": 2009146, + "Position": { + "X": -154.40613, + "Y": -179.3393, + "Z": 187.97583 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [1], null, null, null], + "Fly": true + }, + { + "DataId": 2009147, + "Position": { + "X": -154.40613, + "Y": -179.3393, + "Z": 187.97583 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [3], null, null, null], + "Fly": true + }, + { + "DataId": 2009148, + "Position": { + "X": -245.80762, + "Y": -194.50684, + "Z": 219.98926 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [3], null, null, null], + "Fly": true + }, + { + "DataId": 2009149, + "Position": { + "X": -245.80762, + "Y": -194.50684, + "Z": 219.98926 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [1], null, null, null], + "Fly": true + }, + { + "DataId": 2009150, + "Position": { + "X": -162.8291, + "Y": -192.52313, + "Z": 255.6344 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [2], null, null, null], + "Fly": true + }, + { + "DataId": 2009151, + "Position": { + "X": -162.8291, + "Y": -192.52313, + "Z": 255.6344 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [1], null, null, null], + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 392.55026, + "Y": -119.58932, + "Z": -234.19606 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/3001_The Hot-blooded Kojin.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/3001_The Hot-blooded Kojin.json new file mode 100644 index 00000000..569d73be --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/3001_The Hot-blooded Kojin.json @@ -0,0 +1,129 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "None", + "AetheryteShortcut": "Ruby Sea - Onokoro" + }, + { + "Position": { + "X": -727.74854, + "Y": 4.2885633, + "Z": 188.58618 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [8245, 8246], + "RequiredQuestVariables": [null, null, [16], null, null, null], + "Fly": true + }, + { + "DataId": 1024320, + "Position": { + "X": -727.74854, + "Y": 4.2885633, + "Z": 188.58618 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [16], null, null, null] + }, + { + "Position": { + "X": -869.9321, + "Y": 36.052956, + "Z": 280.29297 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [8247, 8248, 8249], + "RequiredQuestVariables": [null, null, [32], null, null, null], + "Fly": true + }, + { + "DataId": 1024322, + "Position": { + "X": -869.9321, + "Y": 36.052956, + "Z": 280.29297 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [32], null, null, null] + }, + { + "Position": { + "X": -607.43207, + "Y": 7.033699, + "Z": 184.71848 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [8244, 8246], + "RequiredQuestVariables": [null, null, [48], null, null, null], + "Fly": true + }, + { + "DataId": 1024318, + "Position": { + "X": -607.7821, + "Y": 7.029549, + "Z": 184.83252 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [48], null, null, null] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 392.55026, + "Y": -119.58932, + "Z": -234.19606 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "DataId": 1024217, + "Position": { + "X": 394.39978, + "Y": -119.58932, + "Z": -232.28815 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} From 56cd32b0febd953125b439d7888221622da5bab9 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Wed, 6 Nov 2024 23:43:48 +0800 Subject: [PATCH 41/95] Added new daily quests: - Bird Watching - Comb and Get It - Gastornis Groove - The Cat's Meow - Easy as Paissa --- .../Vanu Vanu/Dailies/2179_Bird Watching.json | 104 +++++++++++++++++ .../Dailies/2180_Comb and Get It.json | 102 ++++++++++++++++ .../Dailies/2194_Gastornis Groove.json | 93 +++++++++++++++ .../Dailies/2195_The Cat's Meow.json | 109 ++++++++++++++++++ .../Dailies/2196_Easy as Paissa.json | 86 ++++++++++++++ 5 files changed, 494 insertions(+) create mode 100644 QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2179_Bird Watching.json create mode 100644 QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2180_Comb and Get It.json create mode 100644 QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2194_Gastornis Groove.json create mode 100644 QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2195_The Cat's Meow.json create mode 100644 QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2196_Easy as Paissa.json diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2179_Bird Watching.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2179_Bird Watching.json new file mode 100644 index 00000000..a376c010 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2179_Bird Watching.json @@ -0,0 +1,104 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1016089, + "Position": { + "X": -799.46594, + "Y": -133.2695, + "Z": -404.1352 + }, + "TerritoryId": 401, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1012057, + "Position": { + "X": -599.0845, + "Y": -122.5, + "Z": 559.50244 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true, + "AetheryteShortcut": "The Sea of Clouds - Camp Cloudtop" + }, + { + "DataId": 1012055, + "Position": { + "X": -656.76355, + "Y": -117.32357, + "Z": 492.78992 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 1016215, + "Position": { + "X": -279.71313, + "Y": -156.87129, + "Z": 766.9946 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2006702, + "Position": { + "X": 270.8933, + "Y": -114.21387, + "Z": 395.2544 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 2006703, + "Position": { + "X": 504.1123, + "Y": -101.335205, + "Z": 360.58594 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1016089, + "Position": { + "X": -799.46594, + "Y": -133.2695, + "Z": -404.1352 + }, + "TerritoryId": 401, + "InteractionType": "CompleteQuest", + "Fly": true, + "AetheryteShortcut": "The Sea of Clouds - Ok' Zundu" + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2180_Comb and Get It.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2180_Comb and Get It.json new file mode 100644 index 00000000..b97fd2b0 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2180_Comb and Get It.json @@ -0,0 +1,102 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1016089, + "Position": { + "X": -799.46594, + "Y": -133.2695, + "Z": -404.1352 + }, + "TerritoryId": 401, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2006667, + "Position": { + "X": -792.59937, + "Y": -58.365784, + "Z": 188.06738 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, null, [16], null, null, null] + }, + { + "DataId": 2006761, + "Position": { + "X": -759.4568, + "Y": -61.905884, + "Z": 140.21509 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [null, null, [32], null, null, null] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2006666, + "Position": { + "X": -627.863, + "Y": -59.372925, + "Z": -162.12714 + }, + "TerritoryId": 401, + "InteractionType": "Combat", + "EnemySpawnType": "AfterItemUse", + "ItemId": 2001941, + "KillEnemyDataIds": [5238], + "Fly": true, + "RequiredQuestVariables": [null, [1], null, null, null, null] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1012068, + "Position": { + "X": -597.0398, + "Y": -51.05185, + "Z": -387.0451 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1016089, + "Position": { + "X": -799.46594, + "Y": -133.2695, + "Z": -404.1352 + }, + "TerritoryId": 401, + "InteractionType": "CompleteQuest", + "Fly": true + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2194_Gastornis Groove.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2194_Gastornis Groove.json new file mode 100644 index 00000000..b4f3da2d --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2194_Gastornis Groove.json @@ -0,0 +1,93 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1016089, + "Position": { + "X": -799.46594, + "Y": -133.2695, + "Z": -404.1352 + }, + "TerritoryId": 401, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1016093, + "Position": { + "X": -776.0281, + "Y": -133.35559, + "Z": -414.32825 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2006693, + "Position": { + "X": -420.8286, + "Y": -185.8396, + "Z": 705.745 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true, + "AetheryteShortcut": "The Sea of Clouds - Camp Cloudtop" + }, + { + "DataId": 2006692, + "Position": { + "X": -300.49597, + "Y": -192.37054, + "Z": 638.5442 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 2006691, + "Position": { + "X": -244.73944, + "Y": -184.92413, + "Z": 687.4342 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1016093, + "Position": { + "X": -776.0281, + "Y": -133.35559, + "Z": -414.32825 + }, + "TerritoryId": 401, + "InteractionType": "CompleteQuest", + "Fly": true, + "AetheryteShortcut": "The Sea of Clouds - Ok' Zundu" + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2195_The Cat's Meow.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2195_The Cat's Meow.json new file mode 100644 index 00000000..11808e11 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2195_The Cat's Meow.json @@ -0,0 +1,109 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1016089, + "Position": { + "X": -799.46594, + "Y": -133.2695, + "Z": -404.1352 + }, + "TerritoryId": 401, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1016088, + "Position": { + "X": -818.143, + "Y": -129.93259, + "Z": -414.02307 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1011952, + "Position": { + "X": -277.63788, + "Y": -184.59735, + "Z": 741.60376 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true, + "AetheryteShortcut": "The Sea of Clouds - Camp Cloudtop" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1016385, + "Position": { + "X": -519.646, + "Y": -152.47815, + "Z": 280.38452 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 1016377, + "Position": { + "X": 272.7854, + "Y": -114.24131, + "Z": 387.6859 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 1016376, + "Position": { + "X": 702.90686, + "Y": -126.03205, + "Z": 392.04993 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1016088, + "Position": { + "X": -818.143, + "Y": -129.93259, + "Z": -414.02307 + }, + "TerritoryId": 401, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "The Sea of Clouds - Ok' Zundu", + "Fly": true + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2196_Easy as Paissa.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2196_Easy as Paissa.json new file mode 100644 index 00000000..5a4d3f28 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2196_Easy as Paissa.json @@ -0,0 +1,86 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1016089, + "Position": { + "X": -799.46594, + "Y": -133.2695, + "Z": -404.1352 + }, + "TerritoryId": 401, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2006694, + "Position": { + "X": -28.030884, + "Y": -136.98022, + "Z": 454.94763 + }, + "TerritoryId": 401, + "InteractionType": "Interact", + "Fly": true, + "AetheryteShortcut": "The Sea of Clouds - Camp Cloudtop" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2006699, + "Position": { + "X": -15.182739, + "Y": -136.98022, + "Z": 458.33508 + }, + "TerritoryId": 401, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1016237, + "Position": { + "X": -28.000305, + "Y": -137.77374, + "Z": 454.94763 + }, + "TerritoryId": 401, + "InteractionType": "UseItem", + "ItemId": 2001935 + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1016089, + "Position": { + "X": -799.46594, + "Y": -133.2695, + "Z": -404.1352 + }, + "TerritoryId": 401, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "The Sea of Clouds - Ok' Zundu", + "Fly": true + } + ] + } + ] +} From 3858adaad43b6d3d6dde9ecfb8243f1e7364d322 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 7 Nov 2024 20:56:08 +0100 Subject: [PATCH 42/95] Include quest id in `Quest: ...` line in the UI --- .../Windows/QuestComponents/ActiveQuestComponent.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs b/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs index 34beb090..59d1eaf2 100644 --- a/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs +++ b/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs @@ -128,13 +128,13 @@ internal sealed partial class ActiveQuestComponent { using var _ = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudRed); ImGui.TextUnformatted( - $"Simulated Quest: {Shorten(currentQuest.Quest.Info.Name)} / {currentQuest.Sequence} / {currentQuest.Step}"); + $"Simulated Quest: {Shorten(currentQuest.Quest.Info.Name)} ({currentQuest.Quest.Id}) / {currentQuest.Sequence} / {currentQuest.Step}"); } else if (currentQuestType == QuestController.ECurrentQuestType.Gathering) { using var _ = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.ParsedGold); ImGui.TextUnformatted( - $"Gathering: {Shorten(currentQuest.Quest.Info.Name)} / {currentQuest.Sequence} / {currentQuest.Step}"); + $"Gathering: {Shorten(currentQuest.Quest.Info.Name)} ({currentQuest.Quest.Id}) / {currentQuest.Sequence} / {currentQuest.Step}"); } else { @@ -154,7 +154,7 @@ internal sealed partial class ActiveQuestComponent } ImGui.TextUnformatted( - $"Quest: {Shorten(startedQuest.Quest.Info.Name)} / {startedQuest.Sequence} / {startedQuest.Step}"); + $"Quest: {Shorten(startedQuest.Quest.Info.Name)} ({startedQuest.Quest.Id}) / {startedQuest.Sequence} / {startedQuest.Step}"); if (startedQuest.Quest.Root.Disabled) { @@ -177,7 +177,7 @@ internal sealed partial class ActiveQuestComponent { using var _ = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudYellow); ImGui.TextUnformatted( - $"Next Quest: {Shorten(nextQuest.Quest.Info.Name)} / {nextQuest.Sequence} / {nextQuest.Step}"); + $"Next Quest: {Shorten(nextQuest.Quest.Info.Name)} ({nextQuest.Quest.Id}) / {nextQuest.Sequence} / {nextQuest.Step}"); } } } From 59506bc9ee404f3406cb3c483171da19e2e7c271 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 7 Nov 2024 21:48:46 +0100 Subject: [PATCH 43/95] Remove outdated TODO in 'On the Cloud' --- .../MSQ/D-Shaaloani-HeritageFound1/4930_On the Cloud.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4930_On the Cloud.json b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4930_On the Cloud.json index b18b19a6..c5feac87 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4930_On the Cloud.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4930_On the Cloud.json @@ -147,8 +147,7 @@ "Z": -473.94547 }, "TerritoryId": 1191, - "InteractionType": "WalkTo", - "Comment": "TODO Verify this avoids combat" + "InteractionType": "WalkTo" }, { "DataId": 1047428, From 1bc17832bbabea23fd227f79f708d5e796f9fcf8 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 8 Nov 2024 00:42:53 +0100 Subject: [PATCH 44/95] Kill enemies if it stops you from teleporting to an aetheryte --- Questionable/Controller/Steps/Shared/AetheryteShortcut.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs b/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs index 7f2a8fd0..af575333 100644 --- a/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs +++ b/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Numerics; +using Dalamud.Game.ClientState.Conditions; using Dalamud.Plugin.Services; using Microsoft.Extensions.Logging; using Questionable.Controller.Steps.Common; @@ -56,6 +57,7 @@ internal static class AetheryteShortcut QuestFunctions questFunctions, IClientState clientState, IChatGui chatGui, + ICondition condition, AetheryteData aetheryteData) : TaskExecutor { private bool _teleported; @@ -217,6 +219,8 @@ internal static class AetheryteShortcut throw new TaskException("Unable to teleport to aetheryte"); } } + + public override bool WasInterrupted() => condition[ConditionFlag.InCombat] || base.WasInterrupted(); } internal sealed record MoveAwayFromAetheryte(EAetheryteLocation TargetAetheryte) : ITask From e3d6e571c72d24b4f3b2967d581ce79663ac916a Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 9 Nov 2024 11:59:53 +0100 Subject: [PATCH 45/95] Fix 'Combat Evolved' --- .../Aether Currents/Ultima Thule/4354_Combat Evolved.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/QuestPaths/6.x - Endwalker/Aether Currents/Ultima Thule/4354_Combat Evolved.json b/QuestPaths/6.x - Endwalker/Aether Currents/Ultima Thule/4354_Combat Evolved.json index 5b8449c0..873ec8c1 100644 --- a/QuestPaths/6.x - Endwalker/Aether Currents/Ultima Thule/4354_Combat Evolved.json +++ b/QuestPaths/6.x - Endwalker/Aether Currents/Ultima Thule/4354_Combat Evolved.json @@ -55,7 +55,11 @@ "EnemySpawnType": "AutoOnEnterArea", "KillEnemyDataIds": [ 14044 - ] + ], + "CombatItemUse": { + "ItemId": 2003273, + "Condition": "Incapacitated" + } } ] }, From be2491b0ac7db8ba5626e553fa5de2d13ee29bf8 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 9 Nov 2024 20:15:37 +0100 Subject: [PATCH 46/95] Fix schema URL --- .../Amalj'aa/Dailies/1236_Singed Fur Their Own Good.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1236_Singed Fur Their Own Good.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1236_Singed Fur Their Own Good.json index 22c8e69d..ebeef7cd 100644 --- a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1236_Singed Fur Their Own Good.json +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1236_Singed Fur Their Own Good.json @@ -1,5 +1,5 @@ { - "$schema": "https://git.carvel.li/plogon_enjoyer/Questionable/raw/branch/temp/QuestPaths/quest-v1.json", + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "plogon_enjoyer", "QuestSequence": [ { From fb45e21ebed59be82f6778cb9db7e4cceac96646 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 10 Nov 2024 21:23:56 +0100 Subject: [PATCH 47/95] Add navigation waypoint for (rarely) getting stuck in 'A Knight of Alexandria' --- .../MSQ/F-Living Memory/4952_A Knight of Alexandria.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4952_A Knight of Alexandria.json b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4952_A Knight of Alexandria.json index 9fce9170..8b984e7f 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4952_A Knight of Alexandria.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4952_A Knight of Alexandria.json @@ -21,6 +21,15 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": 392.8642, + "Y": 10.611866, + "Z": 322.41876 + }, + "TerritoryId": 1192, + "InteractionType": "WalkTo" + }, { "DataId": 1047899, "Position": { From 165760e50ee778581fe19c3c2b378c15e91507a1 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 10 Nov 2024 21:30:35 +0100 Subject: [PATCH 48/95] Add mounting to a step in 'Perplexing Puzzles, Endless Fun' --- .../Living Memory/5176_Perplexing Puzzles, Endless Fun.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/QuestPaths/7.x - Dawntrail/Aether Currents/Living Memory/5176_Perplexing Puzzles, Endless Fun.json b/QuestPaths/7.x - Dawntrail/Aether Currents/Living Memory/5176_Perplexing Puzzles, Endless Fun.json index 287286a6..65dd80b9 100644 --- a/QuestPaths/7.x - Dawntrail/Aether Currents/Living Memory/5176_Perplexing Puzzles, Endless Fun.json +++ b/QuestPaths/7.x - Dawntrail/Aether Currents/Living Memory/5176_Perplexing Puzzles, Endless Fun.json @@ -42,7 +42,8 @@ "Z": 628.7034 }, "TerritoryId": 1192, - "InteractionType": "WalkTo" + "InteractionType": "WalkTo", + "Mount": true }, { "DataId": 2013905, From 476e4c922faf1f2471ebcb575112c251659948b3 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 11 Nov 2024 22:05:16 +0100 Subject: [PATCH 49/95] Remove All Saints Wake from active event list --- Questionable/Windows/QuestComponents/EventInfoComponent.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Questionable/Windows/QuestComponents/EventInfoComponent.cs b/Questionable/Windows/QuestComponents/EventInfoComponent.cs index fedeb045..d85e1f70 100644 --- a/Questionable/Windows/QuestComponents/EventInfoComponent.cs +++ b/Questionable/Windows/QuestComponents/EventInfoComponent.cs @@ -22,7 +22,6 @@ internal sealed class EventInfoComponent [SuppressMessage("ReSharper", "CollectionNeverUpdated.Local")] private readonly List _eventQuests = [ - new("All Saints' Wake", [new(5184), new(5185)], AtDailyReset(new(2024, 11, 4))), ]; private readonly QuestData _questData; From 63bf674e4fa4bd96a7b24f3ff8fea54ab13d3a18 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 11 Nov 2024 22:05:35 +0100 Subject: [PATCH 50/95] Add navigation waypoint to 'An Illuminating Ritual' --- .../Urqopacha/5047_An Illuminating Ritual.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/QuestPaths/7.x - Dawntrail/Aether Currents/Urqopacha/5047_An Illuminating Ritual.json b/QuestPaths/7.x - Dawntrail/Aether Currents/Urqopacha/5047_An Illuminating Ritual.json index f3436491..2b5177e0 100644 --- a/QuestPaths/7.x - Dawntrail/Aether Currents/Urqopacha/5047_An Illuminating Ritual.json +++ b/QuestPaths/7.x - Dawntrail/Aether Currents/Urqopacha/5047_An Illuminating Ritual.json @@ -150,6 +150,15 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 415.27682, + "Y": 122.535, + "Z": 564.56915 + }, + "TerritoryId": 1187, + "InteractionType": "WalkTo" + }, { "DataId": 1048730, "Position": { From ea42b5b8dffae26fc7d2aea30b2ecd5738c891d5 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 11 Nov 2024 22:21:19 +0100 Subject: [PATCH 51/95] Add extra sequence + step arguments to /qst sim --- Questionable/Controller/CommandHandler.cs | 21 +++++++++++++++++-- Questionable/Controller/QuestController.cs | 12 +++++------ .../QuestComponents/ActiveQuestComponent.cs | 2 +- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/Questionable/Controller/CommandHandler.cs b/Questionable/Controller/CommandHandler.cs index 0bb87429..42759d99 100644 --- a/Questionable/Controller/CommandHandler.cs +++ b/Questionable/Controller/CommandHandler.cs @@ -205,7 +205,24 @@ internal sealed class CommandHandler : IDisposable { if (_questRegistry.TryGetQuest(questId, out Quest? quest)) { - _questController.SimulateQuest(quest); + byte sequenceId = 0; + int stepId = 0; + if (arguments.Length >= 2 && byte.TryParse(arguments[1], out byte parsedSequence)) + { + QuestSequence? sequence = quest.FindSequence(parsedSequence); + if (sequence != null) + { + sequenceId = (byte)sequence.Sequence; + if (arguments.Length >= 3 && int.TryParse(arguments[2], out int parsedStep)) + { + QuestStep? step = sequence.FindStep(parsedStep); + if (step != null) + stepId = parsedStep; + } + } + } + + _questController.SimulateQuest(quest, sequenceId, stepId); _chatGui.Print($"Simulating quest {questId} ({quest.Info.Name}).", MessageTag, TagColor); } else @@ -213,7 +230,7 @@ internal sealed class CommandHandler : IDisposable } else { - _questController.SimulateQuest(null); + _questController.SimulateQuest(null, 0, 0); _chatGui.Print("Cleared simulated quest.", MessageTag, TagColor); } } diff --git a/Questionable/Controller/QuestController.cs b/Questionable/Controller/QuestController.cs index 594cac80..0fbd79fe 100644 --- a/Questionable/Controller/QuestController.cs +++ b/Questionable/Controller/QuestController.cs @@ -509,11 +509,11 @@ internal sealed class QuestController : MiniTaskController, IDi Stop(label); } - public void SimulateQuest(Quest? quest) + public void SimulateQuest(Quest? quest, byte sequence, int step) { _logger.LogInformation("SimulateQuest: {QuestId}", quest?.Id); if (quest != null) - _simulatedQuest = new QuestProgress(quest); + _simulatedQuest = new QuestProgress(quest, sequence, step); else _simulatedQuest = null; } @@ -675,16 +675,16 @@ internal sealed class QuestController : MiniTaskController, IDi public int Step { get; private set; } public StepProgress StepProgress { get; private set; } = new(DateTime.Now); - public QuestProgress(Quest quest, byte sequence = 0) + public QuestProgress(Quest quest, byte sequence = 0, int step = 0) { Quest = quest; - SetSequence(sequence); + SetSequence(sequence, step); } - public void SetSequence(byte sequence) + public void SetSequence(byte sequence, int step = 0) { Sequence = sequence; - SetStep(0); + SetStep(step); } public void SetStep(int step) diff --git a/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs b/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs index 59d1eaf2..2652685f 100644 --- a/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs +++ b/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs @@ -400,7 +400,7 @@ internal sealed partial class ActiveQuestComponent ImGui.SameLine(); if (ImGui.Button("Clear sim")) { - _questController.SimulateQuest(null); + _questController.SimulateQuest(null, 0, 0); _movementController.Stop(); _questController.Stop("ClearSim"); From 7382131246067cc2bc7ef4755653ad583380a46b Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 11 Nov 2024 22:38:20 +0100 Subject: [PATCH 52/95] Fix missing class switches for gathering from context me Should have been in cc8f326d7ea10afefcb0d5a8e7ae5dae99ba9ea1, but kinda forgot. Oops. --- .../RoslynElements/QuestStepExtensions.cs | 3 +++ .../Zhloe/S1_Zhloe Aliapoh.json | 5 +++++ .../Adkiragh/S4_Adkiragh.json | 5 +++++ .../Custom Deliveries/Kurenai/S3_Kurenai.json | 5 +++++ .../Custom Deliveries/M'naago/S2_M'naago.json | 5 +++++ .../Charlemend/S7_Charlemend.json | 5 +++++ .../Ehll Tou/S6_Ehll Tou.json | 5 +++++ .../Kai-Shirr/S5_Kai-Shirr.json | 5 +++++ .../Ameliance/S8_Ameliance.json | 5 +++++ .../Custom Deliveries/Anden/S9_Anden.json | 5 +++++ .../Margrat/S10_Margrat.json | 5 +++++ QuestPaths/quest-v1.json | 20 +++++++++++++++++ .../Converter/ExtendedClassJobConverter.cs | 1 + .../Converter/InteractionTypeConverter.cs | 1 + .../Questing/EExtendedClassJob.cs | 2 ++ .../Questing/EInteractionType.cs | 1 + Questionable.Model/Questing/QuestStep.cs | 1 + .../Controller/ContextMenuController.cs | 22 +++++++++++++------ .../Controller/Steps/Shared/SwitchClassJob.cs | 18 +++++++++++++-- Questionable/QuestionablePlugin.cs | 3 ++- 20 files changed, 112 insertions(+), 10 deletions(-) diff --git a/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs b/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs index ecfea639..12b27ef4 100644 --- a/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs +++ b/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs @@ -97,6 +97,9 @@ internal static class QuestStepExtensions .AsSyntaxNodeOrToken(), Assignment(nameof(QuestStep.Status), step.Status, emptyStep.Status) .AsSyntaxNodeOrToken(), + Assignment(nameof(QuestStep.TargetClass), step.TargetClass, + emptyStep.TargetClass) + .AsSyntaxNodeOrToken(), Assignment(nameof(QuestStep.EnemySpawnType), step.EnemySpawnType, emptyStep.EnemySpawnType) .AsSyntaxNodeOrToken(), diff --git a/QuestPaths/3.x - Heavensward/Custom Deliveries/Zhloe/S1_Zhloe Aliapoh.json b/QuestPaths/3.x - Heavensward/Custom Deliveries/Zhloe/S1_Zhloe Aliapoh.json index 1422190e..87ef448e 100644 --- a/QuestPaths/3.x - Heavensward/Custom Deliveries/Zhloe/S1_Zhloe Aliapoh.json +++ b/QuestPaths/3.x - Heavensward/Custom Deliveries/Zhloe/S1_Zhloe Aliapoh.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 478, + "InteractionType": "SwitchClass", + "TargetClass": "Blue Mage" + }, { "TerritoryId": 478, "InteractionType": "Gather", diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Adkiragh/S4_Adkiragh.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Adkiragh/S4_Adkiragh.json index 99762b5b..cf54ae7c 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/Adkiragh/S4_Adkiragh.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Adkiragh/S4_Adkiragh.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 478, + "InteractionType": "SwitchClass", + "TargetClass": "Blue Mage" + }, { "TerritoryId": 478, "InteractionType": "Gather", diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/S3_Kurenai.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/S3_Kurenai.json index 9b1f82dc..887dbdd4 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/S3_Kurenai.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/S3_Kurenai.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "SwitchClass", + "TargetClass": "Blue Mage" + }, { "TerritoryId": 613, "InteractionType": "Gather", diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/M'naago/S2_M'naago.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/M'naago/S2_M'naago.json index ba9858d8..43cd2ebc 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/M'naago/S2_M'naago.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/M'naago/S2_M'naago.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 635, + "InteractionType": "SwitchClass", + "TargetClass": "Blue Mage" + }, { "TerritoryId": 635, "InteractionType": "Gather", 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 18b2d648..169f78bd 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,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 886, + "InteractionType": "SwitchClass", + "TargetClass": "Blue Mage" + }, { "TerritoryId": 886, "InteractionType": "Gather", 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 ec41fc8c..adc20fb6 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,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 886, + "InteractionType": "SwitchClass", + "TargetClass": "Blue Mage" + }, { "TerritoryId": 886, "InteractionType": "Gather", diff --git a/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Kai-Shirr/S5_Kai-Shirr.json b/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Kai-Shirr/S5_Kai-Shirr.json index 00702053..7e4b595d 100644 --- a/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Kai-Shirr/S5_Kai-Shirr.json +++ b/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Kai-Shirr/S5_Kai-Shirr.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 820, + "InteractionType": "SwitchClass", + "TargetClass": "Blue Mage" + }, { "TerritoryId": 820, "InteractionType": "Gather", diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Ameliance/S8_Ameliance.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Ameliance/S8_Ameliance.json index 9cd56890..56f16b92 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Ameliance/S8_Ameliance.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Ameliance/S8_Ameliance.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 962, + "InteractionType": "SwitchClass", + "TargetClass": "Blue Mage" + }, { "TerritoryId": 962, "InteractionType": "Gather", diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/S9_Anden.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/S9_Anden.json index b36972b0..8f0e1831 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/S9_Anden.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/S9_Anden.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 816, + "InteractionType": "SwitchClass", + "TargetClass": "Blue Mage" + }, { "TerritoryId": 816, "InteractionType": "Gather", diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Margrat/S10_Margrat.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Margrat/S10_Margrat.json index e4d27b17..6bd9ee4a 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Margrat/S10_Margrat.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Margrat/S10_Margrat.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 956, + "InteractionType": "SwitchClass", + "TargetClass": "Blue Mage" + }, { "TerritoryId": 956, "InteractionType": "Gather", diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 58c1d16a..72ee6318 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -128,6 +128,7 @@ "Craft", "Gather", "Snipe", + "SwitchClass", "Instruction", "AcceptQuest", "CompleteQuest", @@ -1365,6 +1366,25 @@ "Comment" ] } + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "SwitchClass" + } + } + }, + "then": { + "properties": { + "TargetClass": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/ClassJob" + } + }, + "required": [ + "TargetClass" + ] + } } ] } diff --git a/Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs b/Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs index c92ca0bc..2eaffe5e 100644 --- a/Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs +++ b/Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs @@ -7,6 +7,7 @@ internal sealed class ExtendedClassJobConverter() : EnumConverter Values = new() { + { EExtendedClassJob.None, "None" }, { EExtendedClassJob.Gladiator, "Gladiator" }, { EExtendedClassJob.Pugilist, "Pugilist" }, { EExtendedClassJob.Marauder, "Marauder" }, diff --git a/Questionable.Model/Questing/Converter/InteractionTypeConverter.cs b/Questionable.Model/Questing/Converter/InteractionTypeConverter.cs index b8367ebb..9de1ad0e 100644 --- a/Questionable.Model/Questing/Converter/InteractionTypeConverter.cs +++ b/Questionable.Model/Questing/Converter/InteractionTypeConverter.cs @@ -31,6 +31,7 @@ public sealed class InteractionTypeConverter() : EnumConverter { EInteractionType.Craft, "Craft" }, { EInteractionType.Gather, "Gather" }, { EInteractionType.Snipe, "Snipe" }, + { EInteractionType.SwitchClass, "SwitchClass" }, { EInteractionType.Instruction, "Instruction" }, { EInteractionType.AcceptQuest, "AcceptQuest" }, { EInteractionType.CompleteQuest, "CompleteQuest" }, diff --git a/Questionable.Model/Questing/EExtendedClassJob.cs b/Questionable.Model/Questing/EExtendedClassJob.cs index 79c771d1..e0f0d3fe 100644 --- a/Questionable.Model/Questing/EExtendedClassJob.cs +++ b/Questionable.Model/Questing/EExtendedClassJob.cs @@ -6,6 +6,7 @@ namespace Questionable.Model.Questing; [JsonConverter(typeof(ExtendedClassJobConverter))] public enum EExtendedClassJob { + None, Gladiator, Pugilist, Marauder, @@ -53,3 +54,4 @@ public enum EExtendedClassJob DoH, DoL, } + diff --git a/Questionable.Model/Questing/EInteractionType.cs b/Questionable.Model/Questing/EInteractionType.cs index 137078eb..2b9a75fc 100644 --- a/Questionable.Model/Questing/EInteractionType.cs +++ b/Questionable.Model/Questing/EInteractionType.cs @@ -30,6 +30,7 @@ public enum EInteractionType Craft, Gather, Snipe, + SwitchClass, /// /// Needs to be manually continued. diff --git a/Questionable.Model/Questing/QuestStep.cs b/Questionable.Model/Questing/QuestStep.cs index df2b7b12..0b4a05a2 100644 --- a/Questionable.Model/Questing/QuestStep.cs +++ b/Questionable.Model/Questing/QuestStep.cs @@ -64,6 +64,7 @@ public sealed class QuestStep public ChatMessage? ChatMessage { get; set; } public EAction? Action { get; set; } public EStatus? Status { get; set; } + public EExtendedClassJob TargetClass { get; set; } = EExtendedClassJob.None; public EEnemySpawnType? EnemySpawnType { get; set; } public List KillEnemyDataIds { get; set; } = []; diff --git a/Questionable/Controller/ContextMenuController.cs b/Questionable/Controller/ContextMenuController.cs index f35e8343..c3d6c4c5 100644 --- a/Questionable/Controller/ContextMenuController.cs +++ b/Questionable/Controller/ContextMenuController.cs @@ -71,14 +71,16 @@ internal sealed class ContextMenuController : IDisposable if (_gatheringData.TryGetCustomDeliveryNpc(itemId, out uint npcId)) { - AddContextMenuEntry(args, itemId, npcId, EClassJob.Miner, "Mine"); - AddContextMenuEntry(args, itemId, npcId, EClassJob.Botanist, "Harvest"); + AddContextMenuEntry(args, itemId, npcId, EExtendedClassJob.Miner, "Mine"); + AddContextMenuEntry(args, itemId, npcId, EExtendedClassJob.Botanist, "Harvest"); } } - private void AddContextMenuEntry(IMenuOpenedArgs args, uint itemId, uint npcId, EClassJob classJob, string verb) + private void AddContextMenuEntry(IMenuOpenedArgs args, uint itemId, uint npcId, EExtendedClassJob extendedClassJob, + string verb) { EClassJob currentClassJob = (EClassJob)_clientState.LocalPlayer!.ClassJob.Id; + EClassJob classJob = ClassJobUtils.AsIndividualJobs(extendedClassJob).Single(); if (classJob != currentClassJob && currentClassJob is EClassJob.Miner or EClassJob.Botanist) return; @@ -123,19 +125,25 @@ internal sealed class ContextMenuController : IDisposable Prefix = SeIconChar.Hyadelyn, PrefixColor = 52, Name = name, - OnClicked = _ => StartGathering(npcId, itemId, quantityToGather, collectability), + OnClicked = _ => StartGathering(npcId, itemId, quantityToGather, collectability, extendedClassJob), IsEnabled = string.IsNullOrEmpty(lockedReasonn), }); } - private void StartGathering(uint npcId, uint itemId, int quantity, ushort collectability) + private void StartGathering(uint npcId, uint itemId, int quantity, ushort collectability, + EExtendedClassJob extendedClassJob) { var info = (SatisfactionSupplyInfo)_questData.GetAllByIssuerDataId(npcId) .Single(x => x is SatisfactionSupplyInfo); if (_questRegistry.TryGetQuest(info.QuestId, out Quest? quest)) { - var step = quest.FindSequence(0)!.Steps.Single(x => x.InteractionType == EInteractionType.Gather); - step.ItemsToGather = + var sequence = quest.FindSequence(0)!; + + var switchClassStep = sequence.Steps.Single(x => x.InteractionType == EInteractionType.SwitchClass); + switchClassStep.TargetClass = extendedClassJob; + + var gatherStep = sequence.Steps.Single(x => x.InteractionType == EInteractionType.Gather); + gatherStep.ItemsToGather = [ new GatheredItem { diff --git a/Questionable/Controller/Steps/Shared/SwitchClassJob.cs b/Questionable/Controller/Steps/Shared/SwitchClassJob.cs index 37ddf1ee..48b153c3 100644 --- a/Questionable/Controller/Steps/Shared/SwitchClassJob.cs +++ b/Questionable/Controller/Steps/Shared/SwitchClassJob.cs @@ -1,13 +1,27 @@ -using Dalamud.Plugin.Services; -using FFXIVClientStructs.FFXIV.Client.Game; +using System.Linq; +using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.UI.Misc; using LLib.GameData; using Questionable.Controller.Steps.Common; +using Questionable.Data; +using Questionable.Model; +using Questionable.Model.Questing; namespace Questionable.Controller.Steps.Shared; internal static class SwitchClassJob { + internal sealed class Factory : SimpleTaskFactory + { + public override ITask? CreateTask(Quest quest, QuestSequence sequence, QuestStep step) + { + if (step.InteractionType != EInteractionType.SwitchClass) + return null; + + EClassJob classJob = ClassJobUtils.AsIndividualJobs(step.TargetClass).Single(); + return new Task(classJob); + } + } internal sealed record Task(EClassJob ClassJob) : ITask { public override string ToString() => $"SwitchJob({ClassJob})"; diff --git a/Questionable/QuestionablePlugin.cs b/Questionable/QuestionablePlugin.cs index 9289b120..ea0eefca 100644 --- a/Questionable/QuestionablePlugin.cs +++ b/Questionable/QuestionablePlugin.cs @@ -137,7 +137,8 @@ public sealed class QuestionablePlugin : IDalamudPlugin .AddTaskExecutor(); serviceCollection.AddTaskExecutor(); serviceCollection.AddTaskExecutor(); - serviceCollection.AddTaskExecutor(); + serviceCollection.AddTaskFactoryAndExecutor(); serviceCollection.AddTaskExecutor(); serviceCollection.AddTaskExecutor(); From be1e4ed2e621192653cc76bb3fdfc3574c12cbcd Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 16 Nov 2024 21:53:37 +0100 Subject: [PATCH 53/95] partial API 11 updates --- .../GatheringPathRenderer.csproj | 2 +- LLib | 2 +- .../Controller/CombatModules/ItemUseModule.cs | 2 +- .../RotationSolverRebornModule.cs | 2 +- Questionable/Controller/CommandHandler.cs | 5 +- .../Controller/ContextMenuController.cs | 2 +- .../GameUi/InteractionUiController.cs | 16 ++--- .../Controller/GatheringController.cs | 2 +- Questionable/Controller/MiniTaskController.cs | 2 +- Questionable/Controller/QuestController.cs | 6 -- .../Controller/Steps/Gathering/DoGather.cs | 2 +- .../Steps/Gathering/DoGatherCollectable.cs | 2 +- .../Steps/Interactions/EquipItem.cs | 17 ++--- .../Steps/Interactions/EquipRecommended.cs | 2 +- Questionable/Controller/Steps/Shared/Craft.cs | 38 +++++------ .../Controller/Steps/Shared/Gather.cs | 2 +- .../Controller/Steps/Shared/MoveTo.cs | 3 +- .../Controller/Steps/Shared/SkipCondition.cs | 2 +- .../Controller/Steps/Shared/SwitchClassJob.cs | 2 +- Questionable/Data/AetherCurrentData.cs | 10 +-- Questionable/Data/AetheryteData.cs | 16 ++--- Questionable/Data/GatheringData.cs | 35 +++++----- Questionable/Data/JournalData.cs | 35 ++++++---- Questionable/Data/QuestData.cs | 46 ++++++------- Questionable/Data/Sheets/QuestEx.cs | 45 +++++++++++++ Questionable/Data/TerritoryData.cs | 26 +++---- Questionable/Functions/AetheryteFunctions.cs | 11 ++- Questionable/Functions/ChatFunctions.cs | 14 ++-- Questionable/Functions/ExcelFunctions.cs | 39 +++++------ Questionable/Functions/GameFunctions.cs | 26 +++---- Questionable/Functions/QuestFunctions.cs | 12 ++-- Questionable/Model/LeveInfo.cs | 12 ++-- Questionable/Model/QuestInfo.cs | 37 +++++----- Questionable/Model/QuestInfoUtils.cs | 15 +++-- Questionable/Model/SatisfactionSupplyInfo.cs | 10 +-- Questionable/Questionable.csproj | 2 +- Questionable/Windows/ConfigWindow.cs | 5 +- .../GatheringJournalComponent.cs | 67 ++++++++++--------- .../QuestJournalComponent.cs | 2 +- Questionable/Windows/QuestWindow.cs | 2 +- vendor/ECommons | 2 +- 41 files changed, 314 insertions(+), 266 deletions(-) create mode 100644 Questionable/Data/Sheets/QuestEx.cs diff --git a/GatheringPathRenderer/GatheringPathRenderer.csproj b/GatheringPathRenderer/GatheringPathRenderer.csproj index fc157f20..6009a518 100644 --- a/GatheringPathRenderer/GatheringPathRenderer.csproj +++ b/GatheringPathRenderer/GatheringPathRenderer.csproj @@ -1,4 +1,4 @@ - + diff --git a/LLib b/LLib index fde09c70..538329a1 160000 --- a/LLib +++ b/LLib @@ -1 +1 @@ -Subproject commit fde09c705b648f03c287814191a554f0a4b92cc4 +Subproject commit 538329a1e80acbcd09e28bd6dd459c35b5563c0a diff --git a/Questionable/Controller/CombatModules/ItemUseModule.cs b/Questionable/Controller/CombatModules/ItemUseModule.cs index 91b4ca1d..ec9adfa1 100644 --- a/Questionable/Controller/CombatModules/ItemUseModule.cs +++ b/Questionable/Controller/CombatModules/ItemUseModule.cs @@ -142,7 +142,7 @@ internal sealed class ItemUseModule : ICombatModule { BattleChara* battleChara = (BattleChara*)gameObject.Address; if (_combatData.CombatItemUse.Condition == ECombatItemUseCondition.Incapacitated) - return (battleChara->Flags2 & 128u) != 0; + return (battleChara->CombatTagType & 128u) != 0; // FIXME 7.1 if (_combatData.CombatItemUse.Condition == ECombatItemUseCondition.HealthPercent) return (100f * battleChara->Health / battleChara->MaxHealth) < _combatData.CombatItemUse.Value; diff --git a/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs b/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs index a0b43b2f..581e07a9 100644 --- a/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs +++ b/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs @@ -82,7 +82,7 @@ internal sealed class RotationSolverRebornModule : ICombatModule, IDisposable float hitboxOffset = player.HitboxRadius + gameObject.HitboxRadius; float actualDistance = Vector3.Distance(player.Position, gameObject.Position); - float maxDistance = player.ClassJob.GameData?.Role is 3 or 4 ? 20f : 2.9f; + float maxDistance = player.ClassJob.ValueNullable?.Role is 3 or 4 ? 20f : 2.9f; if (actualDistance - hitboxOffset >= maxDistance) { if (actualDistance - hitboxOffset <= 5) diff --git a/Questionable/Controller/CommandHandler.cs b/Questionable/Controller/CommandHandler.cs index 42759d99..c6085a18 100644 --- a/Questionable/Controller/CommandHandler.cs +++ b/Questionable/Controller/CommandHandler.cs @@ -3,11 +3,10 @@ using System.Linq; using Dalamud.Game.ClientState.Objects; using Dalamud.Game.Command; using Dalamud.Plugin.Services; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Questionable.Functions; using Questionable.Model.Questing; using Questionable.Windows; -using Questionable.Windows.QuestComponents; using Quest = Questionable.Model.Quest; namespace Questionable.Controller; @@ -240,7 +239,7 @@ internal sealed class CommandHandler : IDisposable ushort? mountId = _gameFunctions.GetMountId(); if (mountId != null) { - var row = _dataManager.GetExcelSheet()!.GetRow(mountId.Value); + var row = _dataManager.GetExcelSheet().GetRowOrDefault(mountId.Value); _chatGui.Print( $"Mount ID: {mountId}, Name: {row?.Singular}, Obtainable: {(row?.Order == -1 ? "No" : "Yes")}", MessageTag, TagColor); diff --git a/Questionable/Controller/ContextMenuController.cs b/Questionable/Controller/ContextMenuController.cs index c3d6c4c5..fca77dd8 100644 --- a/Questionable/Controller/ContextMenuController.cs +++ b/Questionable/Controller/ContextMenuController.cs @@ -79,7 +79,7 @@ internal sealed class ContextMenuController : IDisposable private void AddContextMenuEntry(IMenuOpenedArgs args, uint itemId, uint npcId, EExtendedClassJob extendedClassJob, string verb) { - EClassJob currentClassJob = (EClassJob)_clientState.LocalPlayer!.ClassJob.Id; + EClassJob currentClassJob = (EClassJob)_clientState.LocalPlayer!.ClassJob.RowId; EClassJob classJob = ClassJobUtils.AsIndividualJobs(extendedClassJob).Single(); if (classJob != currentClassJob && currentClassJob is EClassJob.Miner or EClassJob.Botanist) return; diff --git a/Questionable/Controller/GameUi/InteractionUiController.cs b/Questionable/Controller/GameUi/InteractionUiController.cs index 698d24dd..797093dd 100644 --- a/Questionable/Controller/GameUi/InteractionUiController.cs +++ b/Questionable/Controller/GameUi/InteractionUiController.cs @@ -16,7 +16,7 @@ using FFXIVClientStructs.FFXIV.Component.GUI; using LLib; using LLib.GameData; using LLib.GameUI; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Microsoft.Extensions.Logging; using Questionable.Controller.Steps.Interactions; using Questionable.Data; @@ -90,7 +90,7 @@ internal sealed class InteractionUiController : IDisposable _shopController = shopController; _logger = logger; - _returnRegex = _dataManager.GetExcelSheet()!.GetRow(196)!.GetRegex(addon => addon.Text, pluginLog)!; + _returnRegex = _dataManager.GetExcelSheet().GetRow(196).GetRegex(addon => addon.Text, pluginLog)!; _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectString", SelectStringPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "CutSceneSelectString", CutsceneSelectStringPostSetup); @@ -713,7 +713,7 @@ internal sealed class InteractionUiController : IDisposable step.InteractionType == EInteractionType.Gather) { if (_gatheringData.TryGetGatheringPointId(step.ItemsToGather[0].ItemId, - (EClassJob?)_clientState.LocalPlayer?.ClassJob.Id ?? EClassJob.Adventurer, + (EClassJob?)_clientState.LocalPlayer?.ClassJob.RowId ?? EClassJob.Adventurer, out GatheringPointId? gatheringPointId) && _gatheringPointRegistry.TryGetGatheringPoint(gatheringPointId, out GatheringRoot? root)) { @@ -757,19 +757,19 @@ internal sealed class InteractionUiController : IDisposable [NotNullWhen(true)] out string? warpText) { var warps = _dataManager.GetExcelSheet()! - .Where(x => x.RowId > 0 && x.TerritoryType.Row == targetTerritoryId); + .Where(x => x.RowId > 0 && x.TerritoryType.RowId == targetTerritoryId); foreach (var entry in warps) { - string? excelName = entry.Name?.ToString(); - string? excelQuestion = entry.Question?.ToString(); + string? excelName = entry.Name.ToString(); + string? excelQuestion = entry.Question.ToString(); - if (excelQuestion != null && GameFunctions.GameStringEquals(excelQuestion, actualPrompt)) + if (!string.IsNullOrEmpty(excelQuestion) && GameFunctions.GameStringEquals(excelQuestion, actualPrompt)) { warpId = entry.RowId; warpText = excelQuestion; return true; } - else if (excelName != null && GameFunctions.GameStringEquals(excelName, actualPrompt)) + else if (!string.IsNullOrEmpty(excelName) && GameFunctions.GameStringEquals(excelName, actualPrompt)) { warpId = entry.RowId; warpText = excelName; diff --git a/Questionable/Controller/GatheringController.cs b/Questionable/Controller/GatheringController.cs index 8c7dedd4..bbe6d2e4 100644 --- a/Questionable/Controller/GatheringController.cs +++ b/Questionable/Controller/GatheringController.cs @@ -12,7 +12,7 @@ using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game.Event; using FFXIVClientStructs.FFXIV.Client.Game.UI; using LLib; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Microsoft.Extensions.Logging; using Questionable.Controller.Steps; using Questionable.Controller.Steps.Gathering; diff --git a/Questionable/Controller/MiniTaskController.cs b/Questionable/Controller/MiniTaskController.cs index dfa0bfc9..06850818 100644 --- a/Questionable/Controller/MiniTaskController.cs +++ b/Questionable/Controller/MiniTaskController.cs @@ -5,7 +5,7 @@ using Dalamud.Game.ClientState.Conditions; using Dalamud.Game.Text.SeStringHandling; using Dalamud.Plugin.Services; using LLib; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Questionable.Controller.Steps; diff --git a/Questionable/Controller/QuestController.cs b/Questionable/Controller/QuestController.cs index 0fbd79fe..d6ae32a8 100644 --- a/Questionable/Controller/QuestController.cs +++ b/Questionable/Controller/QuestController.cs @@ -8,20 +8,14 @@ using Dalamud.Game.Gui.Toast; using Dalamud.Game.Text.SeStringHandling; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; -using LLib; -using LLib.GameData; -using Lumina.Excel.GeneratedSheets; using Microsoft.Extensions.Logging; using Questionable.Controller.Steps; -using Questionable.Controller.Steps.Interactions; using Questionable.Controller.Steps.Shared; -using Questionable.Data; using Questionable.External; using Questionable.Functions; using Questionable.Model; using Questionable.Model.Questing; using Quest = Questionable.Model.Quest; -using Mount = Questionable.Controller.Steps.Common.Mount; namespace Questionable.Controller; diff --git a/Questionable/Controller/Steps/Gathering/DoGather.cs b/Questionable/Controller/Steps/Gathering/DoGather.cs index 701f8534..0f4c8c7f 100644 --- a/Questionable/Controller/Steps/Gathering/DoGather.cs +++ b/Questionable/Controller/Steps/Gathering/DoGather.cs @@ -225,7 +225,7 @@ internal static class DoGather private EAction PickAction(EAction minerAction, EAction botanistAction) { - if ((EClassJob?)clientState.LocalPlayer?.ClassJob.Id == EClassJob.Miner) + if ((EClassJob?)clientState.LocalPlayer?.ClassJob.RowId == EClassJob.Miner) return minerAction; else return botanistAction; diff --git a/Questionable/Controller/Steps/Gathering/DoGatherCollectable.cs b/Questionable/Controller/Steps/Gathering/DoGatherCollectable.cs index 16740943..2b91f353 100644 --- a/Questionable/Controller/Steps/Gathering/DoGatherCollectable.cs +++ b/Questionable/Controller/Steps/Gathering/DoGatherCollectable.cs @@ -193,7 +193,7 @@ internal static class DoGatherCollectable private EAction PickAction(EAction minerAction, EAction botanistAction) { - if ((EClassJob?)clientState.LocalPlayer?.ClassJob.Id == EClassJob.Miner) + if ((EClassJob?)clientState.LocalPlayer?.ClassJob.RowId == EClassJob.Miner) return minerAction; else return botanistAction; diff --git a/Questionable/Controller/Steps/Interactions/EquipItem.cs b/Questionable/Controller/Steps/Interactions/EquipItem.cs index c8159247..f5cd4e11 100644 --- a/Questionable/Controller/Steps/Interactions/EquipItem.cs +++ b/Questionable/Controller/Steps/Interactions/EquipItem.cs @@ -5,8 +5,7 @@ using Dalamud.Game.Text.SeStringHandling; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using LLib; -using Lumina.Excel.GeneratedSheets; -using Microsoft.Extensions.DependencyInjection; +using Lumina.Excel.Sheets; using Microsoft.Extensions.Logging; using Questionable.Functions; using Questionable.Model.Questing; @@ -63,13 +62,13 @@ internal static class EquipItem ]; private int _attempts; - private Item _item = null!; + private Item? _item; private List _targetSlots = null!; private DateTime _continueAt = DateTime.MaxValue; protected override bool Start() { - _item = dataManager.GetExcelSheet()!.GetRow(Task.ItemId) ?? + _item = dataManager.GetExcelSheet().GetRowOrDefault(Task.ItemId) ?? throw new ArgumentOutOfRangeException(nameof(Task.ItemId)); _targetSlots = GetEquipSlot(_item) ?? throw new InvalidOperationException("Not a piece of equipment"); @@ -118,7 +117,7 @@ internal static class EquipItem var itemSlot = equippedContainer->GetInventorySlot(slot); if (itemSlot != null && itemSlot->ItemId == Task.ItemId) { - logger.LogInformation("Already equipped {Item}, skipping step", _item.Name?.ToString()); + logger.LogInformation("Already equipped {Item}, skipping step", _item?.Name.ToString()); return; } } @@ -162,11 +161,13 @@ internal static class EquipItem throw new TaskException($"Could not equip item {Task.ItemId}."); } - private static List? GetEquipSlot(Item item) + private static List? GetEquipSlot(Item? item) { - return item.EquipSlotCategory.Row switch + if (item == null) + return []; + return item.Value.EquipSlotCategory.RowId switch { - >= 1 and <= 11 => [(ushort)(item.EquipSlotCategory.Row - 1)], + >= 1 and <= 11 => [(ushort)(item.Value.EquipSlotCategory.RowId - 1)], 12 => [11, 12], // rings 13 => [0], 17 => [13], // soul crystal diff --git a/Questionable/Controller/Steps/Interactions/EquipRecommended.cs b/Questionable/Controller/Steps/Interactions/EquipRecommended.cs index cd4f7982..b923c237 100644 --- a/Questionable/Controller/Steps/Interactions/EquipRecommended.cs +++ b/Questionable/Controller/Steps/Interactions/EquipRecommended.cs @@ -45,7 +45,7 @@ internal static class EquipRecommended protected override bool Start() { - RecommendEquipModule.Instance()->SetupForClassJob((byte)clientState.LocalPlayer!.ClassJob.Id); + RecommendEquipModule.Instance()->SetupForClassJob((byte)clientState.LocalPlayer!.ClassJob.RowId); return true; } diff --git a/Questionable/Controller/Steps/Shared/Craft.cs b/Questionable/Controller/Steps/Shared/Craft.cs index ad474fe2..26493ca0 100644 --- a/Questionable/Controller/Steps/Shared/Craft.cs +++ b/Questionable/Controller/Steps/Shared/Craft.cs @@ -6,7 +6,7 @@ using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.UI.Agent; using FFXIVClientStructs.FFXIV.Component.GUI; using LLib.GameData; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Microsoft.Extensions.Logging; using Questionable.External; using Questionable.Model.Questing; @@ -55,20 +55,20 @@ internal static class Craft return false; } - RecipeLookup? recipeLookup = dataManager.GetExcelSheet()!.GetRow(Task.ItemId); + RecipeLookup? recipeLookup = dataManager.GetExcelSheet().GetRowOrDefault(Task.ItemId); if (recipeLookup == null) throw new TaskException($"Item {Task.ItemId} is not craftable"); - uint recipeId = (EClassJob)clientState.LocalPlayer!.ClassJob.Id switch + uint recipeId = (EClassJob)clientState.LocalPlayer!.ClassJob.RowId switch { - EClassJob.Carpenter => recipeLookup.CRP.Row, - EClassJob.Blacksmith => recipeLookup.BSM.Row, - EClassJob.Armorer => recipeLookup.ARM.Row, - EClassJob.Goldsmith => recipeLookup.GSM.Row, - EClassJob.Leatherworker => recipeLookup.LTW.Row, - EClassJob.Weaver => recipeLookup.WVR.Row, - EClassJob.Alchemist => recipeLookup.ALC.Row, - EClassJob.Culinarian => recipeLookup.CUL.Row, + EClassJob.Carpenter => recipeLookup.Value.CRP.RowId, + EClassJob.Blacksmith => recipeLookup.Value.BSM.RowId, + EClassJob.Armorer => recipeLookup.Value.ARM.RowId, + EClassJob.Goldsmith => recipeLookup.Value.GSM.RowId, + EClassJob.Leatherworker => recipeLookup.Value.LTW.RowId, + EClassJob.Weaver => recipeLookup.Value.WVR.RowId, + EClassJob.Alchemist => recipeLookup.Value.ALC.RowId, + EClassJob.Culinarian => recipeLookup.Value.CUL.RowId, _ => 0 }; @@ -76,14 +76,14 @@ internal static class Craft { recipeId = new[] { - recipeLookup.CRP.Row, - recipeLookup.BSM.Row, - recipeLookup.ARM.Row, - recipeLookup.GSM.Row, - recipeLookup.LTW.Row, - recipeLookup.WVR.Row, - recipeLookup.ALC.Row, - recipeLookup.WVR.Row + recipeLookup.Value.CRP.RowId, + recipeLookup.Value.BSM.RowId, + recipeLookup.Value.ARM.RowId, + recipeLookup.Value.GSM.RowId, + recipeLookup.Value.LTW.RowId, + recipeLookup.Value.WVR.RowId, + recipeLookup.Value.ALC.RowId, + recipeLookup.Value.WVR.RowId } .FirstOrDefault(x => x != 0); } diff --git a/Questionable/Controller/Steps/Shared/Gather.cs b/Questionable/Controller/Steps/Shared/Gather.cs index 5724a209..13671d8d 100644 --- a/Questionable/Controller/Steps/Shared/Gather.cs +++ b/Questionable/Controller/Steps/Shared/Gather.cs @@ -35,7 +35,7 @@ internal static class Gather foreach (var itemToGather in step.ItemsToGather) { - EClassJob currentClassJob = (EClassJob)clientState.LocalPlayer!.ClassJob.Id; + EClassJob currentClassJob = (EClassJob)clientState.LocalPlayer!.ClassJob.RowId; if (!gatheringData.TryGetGatheringPointId(itemToGather.ItemId, currentClassJob, out GatheringPointId? gatheringPointId)) throw new TaskException($"No gathering point found for item {itemToGather.ItemId}"); diff --git a/Questionable/Controller/Steps/Shared/MoveTo.cs b/Questionable/Controller/Steps/Shared/MoveTo.cs index eaead8ef..4df2870f 100644 --- a/Questionable/Controller/Steps/Shared/MoveTo.cs +++ b/Questionable/Controller/Steps/Shared/MoveTo.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Numerics; using Dalamud.Game.ClientState.Conditions; @@ -10,7 +9,7 @@ using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game.Character; using LLib; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Microsoft.Extensions.Logging; using Questionable.Controller.Steps.Common; using Questionable.Data; diff --git a/Questionable/Controller/Steps/Shared/SkipCondition.cs b/Questionable/Controller/Steps/Shared/SkipCondition.cs index 2951d8d8..68297c4e 100644 --- a/Questionable/Controller/Steps/Shared/SkipCondition.cs +++ b/Questionable/Controller/Steps/Shared/SkipCondition.cs @@ -239,7 +239,7 @@ internal static class SkipCondition { List expectedJobs = step.RequiredCurrentJob.SelectMany(ClassJobUtils.AsIndividualJobs).ToList(); - EClassJob currentJob = (EClassJob)clientState.LocalPlayer!.ClassJob.Id; + EClassJob currentJob = (EClassJob)clientState.LocalPlayer!.ClassJob.RowId; logger.LogInformation("Checking current job {CurrentJob} against {ExpectedJobs}", currentJob, string.Join(",", expectedJobs)); if (!expectedJobs.Contains(currentJob)) diff --git a/Questionable/Controller/Steps/Shared/SwitchClassJob.cs b/Questionable/Controller/Steps/Shared/SwitchClassJob.cs index 48b153c3..59477fec 100644 --- a/Questionable/Controller/Steps/Shared/SwitchClassJob.cs +++ b/Questionable/Controller/Steps/Shared/SwitchClassJob.cs @@ -31,7 +31,7 @@ internal static class SwitchClassJob { protected override unsafe bool StartInternal() { - if (clientState.LocalPlayer!.ClassJob.Id == (uint)Task.ClassJob) + if (clientState.LocalPlayer!.ClassJob.RowId == (uint)Task.ClassJob) return false; var gearsetModule = RaptureGearsetModule.Instance(); diff --git a/Questionable/Data/AetherCurrentData.cs b/Questionable/Data/AetherCurrentData.cs index f83b99c0..04bb7c37 100644 --- a/Questionable/Data/AetherCurrentData.cs +++ b/Questionable/Data/AetherCurrentData.cs @@ -1,7 +1,7 @@ using System.Collections.Immutable; using System.Linq; using Dalamud.Plugin.Services; -using Lumina.Excel.GeneratedSheets2; +using Lumina.Excel.Sheets; namespace Questionable.Data; @@ -13,12 +13,12 @@ internal sealed class AetherCurrentData { _overworldCurrents = dataManager.GetExcelSheet()! .Where(x => x.RowId > 0) - .Where(x => x.Territory.Value != null) + .Where(x => x.Territory.IsValid) .ToImmutableDictionary( - x => (ushort)x.Territory.Row, + x => (ushort)x.Territory.RowId, x => x.AetherCurrents - .Where(y => y.Row > 0 && y.Value?.Quest.Row == 0) - .Select(y => y.Row) + .Where(y => y.RowId > 0 && y.Value.Quest.RowId == 0) + .Select(y => y.RowId) .ToImmutableList()); } diff --git a/Questionable/Data/AetheryteData.cs b/Questionable/Data/AetheryteData.cs index f921972f..1e8f34c2 100644 --- a/Questionable/Data/AetheryteData.cs +++ b/Questionable/Data/AetheryteData.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Numerics; using Dalamud.Plugin.Services; using Dalamud.Utility; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Questionable.Model.Common; namespace Questionable.Data; @@ -29,19 +29,19 @@ internal sealed class AetheryteData void ConfigureAetheryteWithPlaceName(EAetheryteLocation aetheryteLocation, uint placeNameId, ushort territoryId) { ConfigureAetheryte(aetheryteLocation, - dataManager.GetExcelSheet()!.GetRow(placeNameId)!.Name.ToDalamudString().TextValue, + dataManager.GetExcelSheet().GetRow(placeNameId).Name.ToDalamudString().TextValue, territoryId, (ushort)((int)aetheryteLocation / 100)); } - foreach (var aetheryte in dataManager.GetExcelSheet()!.Where(x => x.RowId > 0)) + foreach (var aetheryte in dataManager.GetExcelSheet().Where(x => x.RowId > 0)) { - string? aethernetName = aetheryte.AethernetName?.Value?.Name.ToString(); + string? aethernetName = aetheryte.AethernetName.ValueNullable?.Name.ToString(); if (!string.IsNullOrEmpty(aethernetName)) aethernetNames[(EAetheryteLocation)aetheryte.RowId] = aethernetName; - if (aetheryte.Territory != null && aetheryte.Territory.Row > 0) - territoryIds[(EAetheryteLocation)aetheryte.RowId] = (ushort)aetheryte.Territory.Row; + if (aetheryte.Territory.RowId > 0) + territoryIds[(EAetheryteLocation)aetheryte.RowId] = (ushort)aetheryte.Territory.RowId; if (aetheryte.AethernetGroup > 0) aethernetGroups[(EAetheryteLocation)aetheryte.RowId] = aetheryte.AethernetGroup; @@ -62,8 +62,8 @@ internal sealed class AetheryteData TerritoryIds = territoryIds.AsReadOnly(); AethernetGroups = aethernetGroups.AsReadOnly(); - TownTerritoryIds = dataManager.GetExcelSheet()! - .Where(x => x.RowId > 0 && !string.IsNullOrEmpty(x.Name) && x.TerritoryIntendedUse == 0) + TownTerritoryIds = dataManager.GetExcelSheet() + .Where(x => x.RowId > 0 && !string.IsNullOrEmpty(x.Name.ToString()) && x.TerritoryIntendedUse.RowId == 0) .Select(x => (ushort)x.RowId) .ToList(); } diff --git a/Questionable/Data/GatheringData.cs b/Questionable/Data/GatheringData.cs index c231f004..1d11a1ba 100644 --- a/Questionable/Data/GatheringData.cs +++ b/Questionable/Data/GatheringData.cs @@ -3,8 +3,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Dalamud.Plugin.Services; using LLib.GameData; -using Lumina.Excel.GeneratedSheets; -using Microsoft.Extensions.Logging; +using Lumina.Excel.Sheets; using Questionable.Model.Gathering; namespace Questionable.Data; @@ -18,43 +17,45 @@ internal sealed class GatheringData public GatheringData(IDataManager dataManager) { - Dictionary gatheringItemToItem = dataManager.GetExcelSheet()! - .Where(x => x.RowId != 0 && x.Item != 0) - .ToDictionary(x => x.RowId, x => (uint)x.Item); + Dictionary gatheringItemToItem = dataManager.GetExcelSheet() + .Where(x => x.RowId != 0 && x.Item.RowId != 0) + .ToDictionary(x => x.RowId, x => x.Item.RowId); - foreach (var gatheringPointBase in dataManager.GetExcelSheet()!) + foreach (var gatheringPointBase in dataManager.GetExcelSheet()) { - foreach (var gatheringItemId in gatheringPointBase.Item.Where(x => x != 0)) + foreach (var gatheringItem in gatheringPointBase.Item.Where(x => x.RowId != 0)) { - if (gatheringItemToItem.TryGetValue((uint)gatheringItemId, out uint itemId)) + if (gatheringItemToItem.TryGetValue(gatheringItem.RowId, out uint itemId)) { - if (gatheringPointBase.GatheringType.Row is 0 or 1) + if (gatheringPointBase.GatheringType.RowId is 0 or 1) _minerGatheringPoints[itemId] = new GatheringPointId((ushort)gatheringPointBase.RowId); - else if (gatheringPointBase.GatheringType.Row is 2 or 3) + else if (gatheringPointBase.GatheringType.RowId is 2 or 3) _botanistGatheringPoints[itemId] = new GatheringPointId((ushort)gatheringPointBase.RowId); } } } - _itemIdToCollectability = dataManager.GetExcelSheet()! + _itemIdToCollectability = dataManager.GetSubrowExcelSheet() .Where(x => x.RowId > 0) + .SelectMany(x => x) .Where(x => x.Slot is 2) .Select(x => new { - ItemId = x.Item.Row, + ItemId = x.Item.RowId, Collectability = x.CollectabilityHigh, }) .Distinct() .ToDictionary(x => x.ItemId, x => x.Collectability); - _npcForCustomDeliveries = dataManager.GetExcelSheet()! + _npcForCustomDeliveries = dataManager.GetExcelSheet() .Where(x => x.RowId > 0) - .SelectMany(x => dataManager.GetExcelSheet()! - .Where(y => y.RowId == x.SupplyIndex.Last()) + .SelectMany(x => dataManager.GetSubrowExcelSheet() + .Where(y => y.RowId == x.SatisfactionNpcParams.Last().SupplyIndex) + .SelectMany(y => y) .Select(y => new { - ItemId = y.Item.Row, - NpcId = x.Npc.Row + ItemId = y.Item.RowId, + NpcId = x.Npc.RowId })) .Where(x => x.ItemId > 0) .Distinct() diff --git a/Questionable/Data/JournalData.cs b/Questionable/Data/JournalData.cs index fca04e82..f26f452a 100644 --- a/Questionable/Data/JournalData.cs +++ b/Questionable/Data/JournalData.cs @@ -1,7 +1,8 @@ using System.Collections.Generic; using System.Linq; using Dalamud.Plugin.Services; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; +using Microsoft.Extensions.Logging; using Questionable.Model; using Questionable.Model.Questing; @@ -9,28 +10,36 @@ namespace Questionable.Data; internal sealed class JournalData { - public JournalData(IDataManager dataManager, QuestData questData) + public JournalData(IDataManager dataManager, QuestData questData, ILogger logger) { - var genres = dataManager.GetExcelSheet()! + var genres = dataManager.GetExcelSheet() .Where(x => x.RowId > 0 && x.Icon > 0) .Select(x => new Genre(x, questData.GetAllByJournalGenre(x.RowId))) .ToList(); + foreach (var genre in genres) + { + logger.LogInformation("Genre {GenreId}: {GenreName} has {QuestCount} quests", + genre.Id, genre.Name, genre.QuestCount); + } + logger.LogInformation("Genre count: {GenreCount}", genres.Count); + var quest = questData.GetQuestInfo(new QuestId(5193)); + logger.LogInformation("Q: {N}, {A}, {B}", quest.Name, quest.JournalGenre, quest.IssuerDataId); - var limsaStart = dataManager.GetExcelSheet()!.GetRow(1)!; - var gridaniaStart = dataManager.GetExcelSheet()!.GetRow(2)!; - var uldahStart = dataManager.GetExcelSheet()!.GetRow(3)!; + var limsaStart = dataManager.GetExcelSheet().GetRow(1); + var gridaniaStart = dataManager.GetExcelSheet().GetRow(2); + var uldahStart = dataManager.GetExcelSheet().GetRow(3); var genreLimsa = new Genre(uint.MaxValue - 3, "Starting in Limsa Lominsa", 1, - new uint[] { 108, 109 }.Concat(limsaStart.Quest.Select(x => x.Row)) + new uint[] { 108, 109 }.Concat(limsaStart.QuestRedoParam.Select(x => x.Quest.RowId)) .Where(x => x != 0) .Select(x => questData.GetQuestInfo(new QuestId((ushort)(x & 0xFFFF)))) .ToList()); var genreGridania = new Genre(uint.MaxValue - 2, "Starting in Gridania", 1, - new uint[] { 85, 123, 124 }.Concat(gridaniaStart.Quest.Select(x => x.Row)) + new uint[] { 85, 123, 124 }.Concat(gridaniaStart.QuestRedoParam.Select(x => x.Quest.RowId)) .Where(x => x != 0) .Select(x => questData.GetQuestInfo(new QuestId((ushort)(x & 0xFFFF)))) .ToList()); var genreUldah = new Genre(uint.MaxValue - 1, "Starting in Ul'dah", 1, - new uint[] { 568, 569, 570 }.Concat(uldahStart.Quest.Select(x => x.Row)) + new uint[] { 568, 569, 570 }.Concat(uldahStart.QuestRedoParam.Select(x => x.Quest.RowId)) .Where(x => x != 0) .Select(x => questData.GetQuestInfo(new QuestId((ushort)(x & 0xFFFF)))) .ToList()); @@ -41,12 +50,12 @@ internal sealed class JournalData genreLimsa.Quests.Contains(x) || genreGridania.Quests.Contains(x) || genreUldah.Quests.Contains(x)); Genres = genres.AsReadOnly(); - Categories = dataManager.GetExcelSheet()! + Categories = dataManager.GetExcelSheet() .Where(x => x.RowId > 0) .Select(x => new Category(x, Genres.Where(y => y.CategoryId == x.RowId).ToList())) .ToList() .AsReadOnly(); - Sections = dataManager.GetExcelSheet()! + Sections = dataManager.GetExcelSheet() .Select(x => new Section(x, Categories.Where(y => y.SectionId == x.RowId).ToList())) .ToList(); } @@ -61,7 +70,7 @@ internal sealed class JournalData { Id = journalGenre.RowId; Name = journalGenre.Name.ToString(); - CategoryId = journalGenre.JournalCategory.Row; + CategoryId = journalGenre.JournalCategory.RowId; Quests = quests; } @@ -84,7 +93,7 @@ internal sealed class JournalData { public uint Id { get; } = journalCategory.RowId; public string Name { get; } = journalCategory.Name.ToString(); - public uint SectionId { get; } = journalCategory.JournalSection.Row; + public uint SectionId { get; } = journalCategory.JournalSection.RowId; public IReadOnlyList Genres { get; } = genres; public int QuestCount => Genres.Sum(x => x.QuestCount); } diff --git a/Questionable/Data/QuestData.cs b/Questionable/Data/QuestData.cs index e74f28e5..b055a7d7 100644 --- a/Questionable/Data/QuestData.cs +++ b/Questionable/Data/QuestData.cs @@ -5,11 +5,11 @@ using System.Linq; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game.UI; using LLib.GameData; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; +using Questionable.Data.Sheets; using Questionable.Model; using Questionable.Model.Questing; -using Leve = Lumina.Excel.GeneratedSheets2.Leve; -using Quest = Lumina.Excel.GeneratedSheets2.Quest; +using Quest = Lumina.Excel.Sheets.Quest; namespace Questionable.Data; @@ -18,13 +18,13 @@ internal sealed class QuestData public static readonly IReadOnlyList CrystalTowerQuests = [new(1709), new(1200), new(1201), new(1202), new(1203), new(1474), new(494), new(495)]; - public static readonly IReadOnlyList TankRoleQuests = [136, 154, 178]; - public static readonly IReadOnlyList HealerRoleQuests = [137, 155, 179]; - public static readonly IReadOnlyList MeleeRoleQuests = [138, 156, 180]; - public static readonly IReadOnlyList PhysicalRangedRoleQuests = [138, 157, 181]; - public static readonly IReadOnlyList CasterRoleQuests = [139, 158, 182]; + public static readonly IReadOnlyList TankRoleQuests = [136, 154, 178]; + public static readonly IReadOnlyList HealerRoleQuests = [137, 155, 179]; + public static readonly IReadOnlyList MeleeRoleQuests = [138, 156, 180]; + public static readonly IReadOnlyList PhysicalRangedRoleQuests = [138, 157, 181]; + public static readonly IReadOnlyList CasterRoleQuests = [139, 158, 182]; - public static readonly IReadOnlyList> AllRoleQuestChapters = + public static readonly IReadOnlyList> AllRoleQuestChapters = [ TankRoleQuests, HealerRoleQuests, @@ -40,33 +40,33 @@ internal sealed class QuestData public QuestData(IDataManager dataManager) { - Dictionary questChapters = + Dictionary questChapters = dataManager.GetExcelSheet()! - .Where(x => x.RowId > 0 && x.Quest.Row > 0) - .ToDictionary(x => x.Quest.Row, x => x.Redo); + .Where(x => x.RowId > 0 && x.Quest.RowId > 0) + .ToDictionary(x => x.Quest.RowId, x => x.Redo.RowId); Dictionary startingCities = new(); for (byte redoChapter = 1; redoChapter <= 3; ++redoChapter) { - var questRedo = dataManager.GetExcelSheet()!.GetRow(redoChapter)!; - foreach (var quest in questRedo.Quest.Where(x => x.Row > 0)) - startingCities[quest.Row] = redoChapter; + var questRedo = dataManager.GetExcelSheet().GetRow(redoChapter); + foreach (var quest in questRedo.QuestRedoParam.Where(x => x.Quest.IsValid)) + startingCities[quest.Quest.RowId] = redoChapter; } List quests = [ - ..dataManager.GetExcelSheet()! + ..dataManager.GetExcelSheet() .Where(x => x.RowId > 0) - .Where(x => x.IssuerLocation.Row > 0) + .Where(x => x.IssuerLocation.RowId > 0) .Select(x => new QuestInfo(x, questChapters.GetValueOrDefault(x.RowId), startingCities.GetValueOrDefault(x.RowId))) .Where(x => x.QuestId.Value != 1428), - ..dataManager.GetExcelSheet()! - .Where(x => x.RowId > 0) + ..dataManager.GetExcelSheet() + .Where(x => x is { RowId: > 0, Npc.RowId: > 0 }) .Select(x => new SatisfactionSupplyInfo(x)), - ..dataManager.GetExcelSheet()! + ..dataManager.GetExcelSheet() .Where(x => x.RowId > 0) - .Where(x => x.LevelLevemete.Row != 0) + .Where(x => x.LevelLevemete.RowId != 0) .Select(x => new LeveInfo(x)), ]; _quests = quests.ToDictionary(x => x.QuestId, x => x); @@ -230,7 +230,7 @@ internal sealed class QuestData public List GetClassJobQuests(EClassJob classJob) { - List chapterIds = classJob switch + List chapterIds = classJob switch { EClassJob.Adventurer => throw new ArgumentOutOfRangeException(nameof(classJob)), @@ -308,7 +308,7 @@ internal sealed class QuestData return GetQuestsInNewGamePlusChapters(chapterIds); } - private List GetQuestsInNewGamePlusChapters(List chapterIds) + private List GetQuestsInNewGamePlusChapters(List chapterIds) { return _quests.Values .Where(x => x is QuestInfo) diff --git a/Questionable/Data/Sheets/QuestEx.cs b/Questionable/Data/Sheets/QuestEx.cs new file mode 100644 index 00000000..c4da0178 --- /dev/null +++ b/Questionable/Data/Sheets/QuestEx.cs @@ -0,0 +1,45 @@ +using Lumina.Excel; +using Lumina.Excel.Sheets; +using Lumina.Text.ReadOnly; + +namespace Questionable.Data.Sheets; + +// TODO Remove once fixed in dalamud +[Sheet("Quest", 0x1F8C7430)] +public readonly unsafe struct QuestEx(ExcelPage page, uint offset, uint row) : IExcelRow +{ + public uint RowId => row; + + public Quest Original { get; } = new(page, offset, row); + + public RowRef IssuerStart => RowRef.GetFirstValidRowOrUntyped(page.Module, page.ReadUInt32(offset + 2456), [typeof(EObjName), typeof(ENpcResident)], 882056187, page.Language); + public RowRef IssuerLocation => new(page.Module, page.ReadUInt32(offset + 2460), page.Language); + public RowRef JournalGenre => new(page.Module, page.ReadUInt32(offset + 2468), page.Language); + public ushort SortKey => page.ReadUInt16(offset + 2502); + public readonly RowRef Expansion => new(page.Module, (uint)page.ReadUInt8(offset + 2504), page.Language); + public readonly byte PreviousQuestJoin => page.ReadUInt8(offset + 2508); + public readonly RowRef ClassJobCategory0 => new(page.Module, (uint)page.ReadUInt8(offset + 2505), page.Language); + public readonly RowRef ClassJobCategory1 => new(page.Module, (uint)page.ReadUInt8(offset + 2507), page.Language); + public readonly RowRef Festival => new(page.Module, (uint)page.ReadUInt8(offset + 2517), page.Language); + public readonly byte Unknown7 => page.ReadUInt8(offset + 2509); + public readonly byte QuestLockJoin => page.ReadUInt8(offset + 2510); + public readonly RowRef GrandCompany => new(page.Module, (uint)page.ReadUInt8(offset + 2514), page.Language); + public readonly byte InstanceContentJoin => page.ReadUInt8(offset + 2516); + public readonly RowRef BeastTribe => new(page.Module, (uint)page.ReadUInt8(offset + 2520), page.Language); + public bool IsRepeatable => page.ReadPackedBool(offset + 2535, 1); + + public readonly Collection> PreviousQuest => new(page, offset, offset, &PreviousQuestCtor, 3); + private static RowRef PreviousQuestCtor(ExcelPage page, uint parentOffset, uint offset, uint i) => new(page.Module, page.ReadUInt32(offset + 2424 + i * 4), page.Language); + + public readonly Collection> QuestLock => new(page, offset, offset, &QuestLockCtor, 2); + private static RowRef QuestLockCtor(ExcelPage page, uint parentOffset, uint offset, uint i) => new(page.Module, page.ReadUInt32(offset + 2436 + i * 4), page.Language); + + public readonly Collection ClassJobLevel => new(page, offset, offset, &ClassJobLevelCtor, 2); + private static ushort ClassJobLevelCtor(ExcelPage page, uint parentOffset, uint offset, uint i) => page.ReadUInt16(offset + 2484 + i * 2); + + public Collection> InstanceContent => new(page, offset, offset, &InstanceContentCtor, 3); + private static RowRef InstanceContentCtor(ExcelPage page, uint parentOffset, uint offset, uint i) => new(page.Module, page.ReadUInt32(offset + 2444 + i * 4), page.Language); + + static QuestEx IExcelRow.Create(ExcelPage page, uint offset, uint row) => + new(page, offset, row); +} diff --git a/Questionable/Data/TerritoryData.cs b/Questionable/Data/TerritoryData.cs index e2d471c3..ee91f6b4 100644 --- a/Questionable/Data/TerritoryData.cs +++ b/Questionable/Data/TerritoryData.cs @@ -4,7 +4,7 @@ using System.Globalization; using System.Linq; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game.Character; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; namespace Questionable.Data; @@ -13,37 +13,37 @@ internal sealed class TerritoryData private readonly ImmutableDictionary _territoryNames; private readonly ImmutableHashSet _territoriesWithMount; private readonly ImmutableDictionary _dutyTerritories; - private readonly ImmutableDictionary _instanceNames; + private readonly ImmutableDictionary _instanceNames; private readonly ImmutableDictionary _contentFinderConditionNames; public TerritoryData(IDataManager dataManager) { - _territoryNames = dataManager.GetExcelSheet()! + _territoryNames = dataManager.GetExcelSheet() .Where(x => x.RowId > 0) .Select(x => new { x.RowId, - Name = x.PlaceName.Value?.Name?.ToString() ?? x.PlaceNameZone?.Value?.Name?.ToString(), + Name = x.PlaceName.ValueNullable?.Name.ToString() ?? x.PlaceNameZone.ValueNullable?.Name.ToString(), }) .Where(x => !string.IsNullOrEmpty(x.Name)) .ToImmutableDictionary(x => x.RowId, x => x.Name!); - _territoriesWithMount = dataManager.GetExcelSheet()! + _territoriesWithMount = dataManager.GetExcelSheet() .Where(x => x.RowId > 0 && x.Mount) .Select(x => (ushort)x.RowId) .ToImmutableHashSet(); - _dutyTerritories = dataManager.GetExcelSheet()! - .Where(x => x.RowId > 0 && x.ContentFinderCondition.Row != 0) - .ToImmutableDictionary(x => (ushort)x.RowId, x => x.ContentFinderCondition.Value!.ContentType.Row); + _dutyTerritories = dataManager.GetExcelSheet() + .Where(x => x.RowId > 0 && x.ContentFinderCondition.RowId != 0) + .ToImmutableDictionary(x => (ushort)x.RowId, x => x.ContentFinderCondition.Value.ContentType.RowId); - _instanceNames = dataManager.GetExcelSheet()! - .Where(x => x.RowId > 0 && x.Content != 0 && x.ContentLinkType == 1 && x.ContentType.Row != 6) - .ToImmutableDictionary(x => x.Content, x => x.Name.ToString()); + _instanceNames = dataManager.GetExcelSheet() + .Where(x => x.RowId > 0 && x.Content.RowId != 0 && x.ContentLinkType == 1 && x.ContentType.RowId != 6) + .ToImmutableDictionary(x => x.Content.RowId, x => x.Name.ToString()); - _contentFinderConditionNames = dataManager.GetExcelSheet()! - .Where(x => x.RowId > 0 && x.Content != 0 && x.ContentLinkType == 1 && x.ContentType.Row != 6) + _contentFinderConditionNames = dataManager.GetExcelSheet() + .Where(x => x.RowId > 0 && x.Content.RowId != 0 && x.ContentLinkType == 1 && x.ContentType.RowId != 6) .ToImmutableDictionary(x => x.RowId, x => x.Name.ToString()); } diff --git a/Questionable/Functions/AetheryteFunctions.cs b/Questionable/Functions/AetheryteFunctions.cs index afdedf4d..65b075d0 100644 --- a/Questionable/Functions/AetheryteFunctions.cs +++ b/Questionable/Functions/AetheryteFunctions.cs @@ -1,14 +1,12 @@ using System; -using System.Linq; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game.UI; -using Lumina.Excel.GeneratedSheets; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Questionable.Model.Common; using Questionable.Model.Questing; -using Action = Lumina.Excel.GeneratedSheets.Action; +using Action = Lumina.Excel.Sheets.Action; namespace Questionable.Functions; @@ -57,9 +55,10 @@ internal sealed unsafe class AetheryteFunctions public bool IsTeleportUnlocked() { - uint unlockLink = _dataManager.GetExcelSheet()! - .GetRow(5)! - .UnlockLink; + uint unlockLink = _dataManager.GetExcelSheet() + .GetRow(5) + .UnlockLink + .RowId; return UIState.Instance()->IsUnlockLinkUnlocked(unlockLink); } diff --git a/Questionable/Functions/ChatFunctions.cs b/Questionable/Functions/ChatFunctions.cs index 5c31e4d8..d53ed9be 100644 --- a/Questionable/Functions/ChatFunctions.cs +++ b/Questionable/Functions/ChatFunctions.cs @@ -12,7 +12,7 @@ using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.System.Framework; using FFXIVClientStructs.FFXIV.Client.System.Memory; using FFXIVClientStructs.FFXIV.Client.System.String; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Microsoft.Extensions.Logging; using Questionable.Model.Questing; @@ -41,11 +41,11 @@ internal sealed unsafe class ChatFunctions _sanitiseString = (delegate* unmanaged)sigScanner.ScanText(Signatures.SanitiseString); - _emoteCommands = dataManager.GetExcelSheet()! + _emoteCommands = dataManager.GetExcelSheet() .Where(x => x.RowId > 0) - .Where(x => x.TextCommand != null && x.TextCommand.Value != null) - .Select(x => (x.RowId, Command: x.TextCommand.Value!.Command?.ToString())) - .Where(x => x.Command != null && x.Command.StartsWith('/')) + .Where(x => x.TextCommand.IsValid) + .Select(x => (x.RowId, Command: x.TextCommand.Value.Command.ToString())) + .Where(x => !string.IsNullOrEmpty(x.Command) && x.Command.StartsWith('/')) .ToDictionary(x => (EEmote)x.RowId, x => x.Command!) .AsReadOnly(); } @@ -156,8 +156,8 @@ internal sealed unsafe class ChatFunctions private static class Signatures { - internal const string SendChat = "48 89 5C 24 ?? 57 48 83 EC 20 48 8B FA 48 8B D9 45 84 C9"; - internal const string SanitiseString = "E8 ?? ?? ?? ?? 48 8D 4C 24 ?? 0F B6 F0 E8 ?? ?? ?? ?? 48 8D 4D C0"; + internal const string SendChat = "48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 48 8B F2 48 8B F9 45 84 C9"; + internal const string SanitiseString = "E8 ?? ?? ?? ?? EB 0A 48 8D 4C 24 ?? E8 ?? ?? ?? ?? 48 8D AE"; } [StructLayout(LayoutKind.Explicit)] diff --git a/Questionable/Functions/ExcelFunctions.cs b/Questionable/Functions/ExcelFunctions.cs index e1278a59..2043c5a6 100644 --- a/Questionable/Functions/ExcelFunctions.cs +++ b/Questionable/Functions/ExcelFunctions.cs @@ -3,13 +3,13 @@ using System.Linq; using Dalamud.Plugin.Services; using Dalamud.Utility; using LLib; -using Lumina.Excel.CustomSheets; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Lumina.Text; +using Lumina.Text.ReadOnly; using Microsoft.Extensions.Logging; using Questionable.Model; using Quest = Questionable.Model.Quest; -using GimmickYesNo = Lumina.Excel.GeneratedSheets2.GimmickYesNo; +using GimmickYesNo = Lumina.Excel.Sheets.GimmickYesNo; namespace Questionable.Functions; @@ -33,12 +33,12 @@ internal sealed class ExcelFunctions return new StringOrRegex(seString?.ToDalamudString().ToString()); } - public SeString? GetRawDialogueText(Quest? currentQuest, string? excelSheetName, string key) + public ReadOnlySeString? GetRawDialogueText(Quest? currentQuest, string? excelSheetName, string key) { if (currentQuest != null && excelSheetName == null) { var questRow = - _dataManager.GetExcelSheet()!.GetRow((uint)currentQuest.Id.Value + + _dataManager.GetExcelSheet().GetRowOrDefault((uint)currentQuest.Id.Value + 0x10000); if (questRow == null) { @@ -46,18 +46,13 @@ internal sealed class ExcelFunctions return null; } - excelSheetName = $"quest/{(currentQuest.Id.Value / 100):000}/{questRow.Id}"; + excelSheetName = $"quest/{(currentQuest.Id.Value / 100):000}/{questRow.Value.RowId}"; } ArgumentNullException.ThrowIfNull(excelSheetName); - var excelSheet = _dataManager.Excel.GetSheet(excelSheetName); - if (excelSheet == null) - { - _logger.LogError("Unknown excel sheet '{SheetName}'", excelSheetName); - return null; - } - - return excelSheet.FirstOrDefault(x => x.Key == key)?.Value; + var excelSheet = _dataManager.GetExcelSheet(name: excelSheetName); + return excelSheet.Cast() + .FirstOrDefault(x => x!.Value.Key == key)?.Value; } public StringOrRegex GetDialogueTextByRowId(string? excelSheet, uint rowId, bool isRegex) @@ -69,36 +64,36 @@ internal sealed class ExcelFunctions return new StringOrRegex(seString?.ToDalamudString().ToString()); } - public SeString? GetRawDialogueTextByRowId(string? excelSheet, uint rowId) + public ReadOnlySeString? GetRawDialogueTextByRowId(string? excelSheet, uint rowId) { if (excelSheet == "GimmickYesNo") { - var questRow = _dataManager.GetExcelSheet()!.GetRow(rowId); + var questRow = _dataManager.GetExcelSheet().GetRowOrDefault(rowId); return questRow?.Unknown0; } else if (excelSheet == "Warp") { - var questRow = _dataManager.GetExcelSheet()!.GetRow(rowId); + var questRow = _dataManager.GetExcelSheet().GetRowOrDefault(rowId); return questRow?.Name; } else if (excelSheet is "Addon") { - var questRow = _dataManager.GetExcelSheet()!.GetRow(rowId); + var questRow = _dataManager.GetExcelSheet().GetRowOrDefault(rowId); return questRow?.Text; } else if (excelSheet is "EventPathMove") { - var questRow = _dataManager.GetExcelSheet()!.GetRow(rowId); - return questRow?.Unknown10; + var questRow = _dataManager.GetExcelSheet().GetRowOrDefault(rowId); + return questRow?.Unknown0; } else if (excelSheet is "GilShop") { - var questRow = _dataManager.GetExcelSheet()!.GetRow(rowId); + var questRow = _dataManager.GetExcelSheet().GetRowOrDefault(rowId); return questRow?.Name; } else if (excelSheet is "ContentTalk" or null) { - var questRow = _dataManager.GetExcelSheet()!.GetRow(rowId); + var questRow = _dataManager.GetExcelSheet().GetRowOrDefault(rowId); return questRow?.Text; } else diff --git a/Questionable/Functions/GameFunctions.cs b/Questionable/Functions/GameFunctions.cs index bb0313ae..d4a7e692 100644 --- a/Questionable/Functions/GameFunctions.cs +++ b/Questionable/Functions/GameFunctions.cs @@ -14,23 +14,22 @@ using FFXIVClientStructs.FFXIV.Client.Game.UI; using FFXIVClientStructs.FFXIV.Client.UI.Agent; using FFXIVClientStructs.FFXIV.Component.GUI; using LLib.GameUI; +using Lumina.Excel.Sheets; using Microsoft.Extensions.Logging; using Questionable.Model; -using Questionable.Model.Common; using Questionable.Model.Questing; -using Action = Lumina.Excel.GeneratedSheets2.Action; +using Action = Lumina.Excel.Sheets.Action; using BattleChara = FFXIVClientStructs.FFXIV.Client.Game.Character.BattleChara; -using ContentFinderCondition = Lumina.Excel.GeneratedSheets.ContentFinderCondition; +using ContentFinderCondition = Lumina.Excel.Sheets.ContentFinderCondition; using ObjectKind = Dalamud.Game.ClientState.Objects.Enums.ObjectKind; using Quest = Questionable.Model.Quest; -using TerritoryType = Lumina.Excel.GeneratedSheets.TerritoryType; namespace Questionable.Functions; internal sealed unsafe class GameFunctions { private readonly ReadOnlyDictionary _territoryToAetherCurrentCompFlgSet; - private readonly ReadOnlyDictionary _contentFinderConditionToContentId; + private readonly ReadOnlyDictionary _contentFinderConditionToContentId; private readonly QuestFunctions _questFunctions; private readonly IDataManager _dataManager; @@ -63,14 +62,15 @@ internal sealed unsafe class GameFunctions _configuration = configuration; _logger = logger; - _territoryToAetherCurrentCompFlgSet = dataManager.GetExcelSheet()! + _territoryToAetherCurrentCompFlgSet = dataManager.GetExcelSheet() .Where(x => x.RowId > 0) - .Where(x => x.Unknown32 > 0) - .ToDictionary(x => (ushort)x.RowId, x => x.Unknown32) + .Where(x => x.Unknown3 > 0) + .ToDictionary(x => (ushort)x.RowId, x => x.Unknown4) .AsReadOnly(); - _contentFinderConditionToContentId = dataManager.GetExcelSheet()! - .Where(x => x.RowId > 0 && x.Content > 0) - .ToDictionary(x => x.RowId, x => x.Content) + _territoryToAetherCurrentCompFlgSet = new Dictionary().AsReadOnly(); + _contentFinderConditionToContentId = dataManager.GetExcelSheet() + .Where(x => x.RowId > 0 && x.Content.RowId > 0) + .ToDictionary(x => x.RowId, x => x.Content.RowId) .AsReadOnly(); } @@ -220,7 +220,7 @@ internal sealed unsafe class GameFunctions public bool UseAction(IGameObject gameObject, EAction action, bool checkCanUse = true) { - var actionRow = _dataManager.GetExcelSheet()!.GetRow((uint)action)!; + var actionRow = _dataManager.GetExcelSheet().GetRow((uint)action); if (checkCanUse && !ActionManager.CanUseActionOnTarget((uint)action, (GameObject*)gameObject.Address)) { _logger.LogWarning("Can not use action {Action} on target {Target}", action, gameObject); @@ -378,7 +378,7 @@ internal sealed unsafe class GameFunctions public void OpenDutyFinder(uint contentFinderConditionId) { - if (_contentFinderConditionToContentId.TryGetValue(contentFinderConditionId, out ushort contentId)) + if (_contentFinderConditionToContentId.TryGetValue(contentFinderConditionId, out uint contentId)) { if (UIState.IsInstanceContentUnlocked(contentId)) AgentContentsFinder.Instance()->OpenRegularDuty(contentFinderConditionId); diff --git a/Questionable/Functions/QuestFunctions.cs b/Questionable/Functions/QuestFunctions.cs index b0a92395..9211514d 100644 --- a/Questionable/Functions/QuestFunctions.cs +++ b/Questionable/Functions/QuestFunctions.cs @@ -11,7 +11,7 @@ using FFXIVClientStructs.FFXIV.Client.UI.Agent; using FFXIVClientStructs.FFXIV.Component.GUI; using LLib.GameData; using LLib.GameUI; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Questionable.Controller; using Questionable.Controller.Steps.Interactions; using Questionable.Data; @@ -311,8 +311,8 @@ internal sealed unsafe class QuestFunctions ..QuestData.CrystalTowerQuests ]; - EClassJob classJob = (EClassJob?)_clientState.LocalPlayer?.ClassJob.Id ?? EClassJob.Adventurer; - ushort[] shadowbringersRoleQuestChapters = QuestData.AllRoleQuestChapters.Select(x => x[0]).ToArray(); + EClassJob classJob = (EClassJob?)_clientState.LocalPlayer?.ClassJob.RowId ?? EClassJob.Adventurer; + uint[] shadowbringersRoleQuestChapters = QuestData.AllRoleQuestChapters.Select(x => x[0]).ToArray(); if (classJob != EClassJob.Adventurer) { priorityQuests.AddRange(_questRegistry.GetKnownClassJobQuests(classJob) @@ -460,7 +460,7 @@ internal sealed unsafe class QuestFunctions // this only checks for the current class IQuestInfo questInfo = _questData.GetQuestInfo(leveId); - if (!questInfo.ClassJobs.Contains((EClassJob)_clientState.LocalPlayer!.ClassJob.Id) || + if (!questInfo.ClassJobs.Contains((EClassJob)_clientState.LocalPlayer!.ClassJob.RowId) || questInfo.Level > _clientState.LocalPlayer.Level) return true; @@ -597,7 +597,7 @@ internal sealed unsafe class QuestFunctions public bool IsClassJobUnlocked(EClassJob classJob) { var classJobRow = _dataManager.GetExcelSheet()!.GetRow((uint)classJob)!; - var questId = (ushort)classJobRow.UnlockQuest.Row; + var questId = (ushort)classJobRow.UnlockQuest.RowId; if (questId != 0) return IsQuestComplete(new QuestId(questId)); @@ -608,7 +608,7 @@ internal sealed unsafe class QuestFunctions public bool IsJobUnlocked(EClassJob classJob) { var classJobRow = _dataManager.GetExcelSheet()!.GetRow((uint)classJob)!; - return IsClassJobUnlocked((EClassJob)classJobRow.ClassJobParent.Row); + return IsClassJobUnlocked((EClassJob)classJobRow.ClassJobParent.RowId); } public GrandCompany GetGrandCompany() diff --git a/Questionable/Model/LeveInfo.cs b/Questionable/Model/LeveInfo.cs index 14878f71..21eaf552 100644 --- a/Questionable/Model/LeveInfo.cs +++ b/Questionable/Model/LeveInfo.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using LLib.GameData; -using Lumina.Excel.GeneratedSheets2; +using Lumina.Excel.Sheets; using Questionable.Model.Questing; namespace Questionable.Model; @@ -11,13 +11,13 @@ internal sealed class LeveInfo : IQuestInfo public LeveInfo(Leve leve) { QuestId = new LeveId((ushort)leve.RowId); - Name = leve.Name; + Name = leve.Name.ToString(); Level = leve.ClassJobLevel; - JournalGenre = leve.JournalGenre.Row; + JournalGenre = leve.JournalGenre.RowId; SortKey = QuestId.Value; - IssuerDataId = leve.LevelLevemete.Value!.Object.Row; - ClassJobs = QuestInfoUtils.AsList(leve.ClassJobCategory.Value!); - Expansion = (EExpansionVersion)leve.LevelLevemete.Value.Territory.Value!.ExVersion.Row; + IssuerDataId = leve.LevelLevemete.Value.Object.RowId; + ClassJobs = QuestInfoUtils.AsList(leve.ClassJobCategory.Value); + Expansion = (EExpansionVersion)leve.LevelLevemete.Value.Territory.Value.ExVersion.RowId; } public ElementId QuestId { get; } diff --git a/Questionable/Model/QuestInfo.cs b/Questionable/Model/QuestInfo.cs index 6149209a..cca29890 100644 --- a/Questionable/Model/QuestInfo.cs +++ b/Questionable/Model/QuestInfo.cs @@ -3,16 +3,15 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using FFXIVClientStructs.FFXIV.Client.UI.Agent; -using JetBrains.Annotations; using LLib.GameData; +using Questionable.Data.Sheets; using Questionable.Model.Questing; -using ExcelQuest = Lumina.Excel.GeneratedSheets2.Quest; namespace Questionable.Model; internal sealed class QuestInfo : IQuestInfo { - public QuestInfo(ExcelQuest quest, ushort newGamePlusChapter, byte startingCity) + public QuestInfo(QuestEx quest, uint newGamePlusChapter, byte startingCity) { QuestId = new QuestId((ushort)(quest.RowId & 0xFFFF)); @@ -34,38 +33,38 @@ internal sealed class QuestInfo : IQuestInfo _ => "", }; - Name = $"{quest.Name}{suffix}"; + Name = $"{quest.Original.Name}{suffix}"; Level = quest.ClassJobLevel[0]; - IssuerDataId = quest.IssuerStart.Row; + IssuerDataId = quest.IssuerStart.RowId; IsRepeatable = quest.IsRepeatable; PreviousQuests = new List { - new(new QuestId((ushort)(quest.PreviousQuest[0].Row & 0xFFFF)), quest.Unknown7), - new(new QuestId((ushort)(quest.PreviousQuest[1].Row & 0xFFFF))), - new(new QuestId((ushort)(quest.PreviousQuest[2].Row & 0xFFFF))) + new(new QuestId((ushort)(quest.PreviousQuest[0].RowId & 0xFFFF)), quest.Unknown7), + new(new QuestId((ushort)(quest.PreviousQuest[1].RowId & 0xFFFF))), + new(new QuestId((ushort)(quest.PreviousQuest[2].RowId & 0xFFFF))) } .Where(x => x.QuestId.Value != 0) .ToImmutableList(); PreviousQuestJoin = (EQuestJoin)quest.PreviousQuestJoin; QuestLocks = quest.QuestLock - .Select(x => new QuestId((ushort)(x.Row & 0xFFFFF))) + .Select(x => new QuestId((ushort)(x.RowId & 0xFFFFF))) .Where(x => x.Value != 0) .ToImmutableList(); QuestLockJoin = (EQuestJoin)quest.QuestLockJoin; - JournalGenre = quest.JournalGenre?.Row; + JournalGenre = quest.JournalGenre.ValueNullable?.RowId; SortKey = quest.SortKey; - IsMainScenarioQuest = quest.JournalGenre?.Value?.JournalCategory?.Value?.JournalSection?.Row is 0 or 1; - CompletesInstantly = quest.TodoParams[0].ToDoCompleteSeq == 0; - PreviousInstanceContent = quest.InstanceContent.Select(x => (ushort)x.Row).Where(x => x != 0).ToList(); + IsMainScenarioQuest = quest.JournalGenre.ValueNullable?.JournalCategory.ValueNullable?.JournalSection.ValueNullable?.RowId is 0 or 1; + CompletesInstantly = quest.Original.TodoParams[0].ToDoCompleteSeq == 0; + PreviousInstanceContent = quest.InstanceContent.Select(x => (ushort)x.RowId).Where(x => x != 0).ToList(); PreviousInstanceContentJoin = (EQuestJoin)quest.InstanceContentJoin; - GrandCompany = (GrandCompany)quest.GrandCompany.Row; - AlliedSociety = (EAlliedSociety)quest.BeastTribe.Row; - ClassJobs = QuestInfoUtils.AsList(quest.ClassJobCategory0.Value!); - IsSeasonalEvent = quest.Festival.Row != 0; + GrandCompany = (GrandCompany)quest.GrandCompany.RowId; + AlliedSociety = (EAlliedSociety)quest.BeastTribe.RowId; + ClassJobs = QuestInfoUtils.AsList(quest.ClassJobCategory0.ValueNullable!); + IsSeasonalEvent = quest.Festival.RowId != 0; NewGamePlusChapter = newGamePlusChapter; StartingCity = startingCity; - Expansion = (EExpansionVersion)quest.Expansion.Row; + Expansion = (EExpansionVersion)quest.Expansion.RowId; } @@ -88,7 +87,7 @@ internal sealed class QuestInfo : IQuestInfo public EAlliedSociety AlliedSociety { get; } public IReadOnlyList ClassJobs { get; } public bool IsSeasonalEvent { get; } - public ushort NewGamePlusChapter { get; } + public uint NewGamePlusChapter { get; } public byte StartingCity { get; set; } public EExpansionVersion Expansion { get; } diff --git a/Questionable/Model/QuestInfoUtils.cs b/Questionable/Model/QuestInfoUtils.cs index 4f44fd4a..c22415bf 100644 --- a/Questionable/Model/QuestInfoUtils.cs +++ b/Questionable/Model/QuestInfoUtils.cs @@ -1,7 +1,8 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using LLib.GameData; -using Lumina.Excel.GeneratedSheets2; +using Lumina.Excel.Sheets; namespace Questionable.Model; @@ -9,8 +10,12 @@ internal static class QuestInfoUtils { private static readonly Dictionary> CachedClassJobs = new(); - internal static IReadOnlyList AsList(ClassJobCategory classJobCategory) + internal static IReadOnlyList AsList(ClassJobCategory? optionalClassJobCategory) { + if (optionalClassJobCategory == null) + return Enum.GetValues(); + + ClassJobCategory classJobCategory = optionalClassJobCategory.Value; if (CachedClassJobs.TryGetValue(classJobCategory.RowId, out IReadOnlyList? classJobs)) return classJobs; @@ -57,8 +62,8 @@ internal static class QuestInfoUtils { EClassJob.Dancer, classJobCategory.DNC }, { EClassJob.Reaper, classJobCategory.RPR }, { EClassJob.Sage, classJobCategory.SGE }, - { EClassJob.Viper, classJobCategory.Unknown1 }, - { EClassJob.Pictomancer, classJobCategory.Unknown2 } + { EClassJob.Viper, classJobCategory.VPR }, + { EClassJob.Pictomancer, classJobCategory.PCT } } .Where(y => y.Value) .Select(y => y.Key) diff --git a/Questionable/Model/SatisfactionSupplyInfo.cs b/Questionable/Model/SatisfactionSupplyInfo.cs index 41f6d5e2..e2c25ad8 100644 --- a/Questionable/Model/SatisfactionSupplyInfo.cs +++ b/Questionable/Model/SatisfactionSupplyInfo.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using LLib.GameData; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Questionable.Model.Questing; namespace Questionable.Model; @@ -11,12 +11,12 @@ internal sealed class SatisfactionSupplyInfo : IQuestInfo public SatisfactionSupplyInfo(SatisfactionNpc npc) { QuestId = new SatisfactionSupplyNpcId((ushort)npc.RowId); - Name = npc.Npc.Value!.Singular; - IssuerDataId = npc.Npc.Row; + Name = npc.Npc.Value.Singular.ToString(); + IssuerDataId = npc.Npc.RowId; Level = npc.LevelUnlock; SortKey = QuestId.Value; - Expansion = (EExpansionVersion)npc.QuestRequired.Value!.Expansion.Row; - PreviousQuests = [new PreviousQuestInfo(new QuestId((ushort)(npc.QuestRequired.Row & 0xFFFF)))]; + Expansion = (EExpansionVersion)npc.QuestRequired.Value!.Expansion.RowId; + PreviousQuests = [new PreviousQuestInfo(new QuestId((ushort)(npc.QuestRequired.RowId & 0xFFFF)))]; } public ElementId QuestId { get; } diff --git a/Questionable/Questionable.csproj b/Questionable/Questionable.csproj index 64df5619..6d44ba06 100644 --- a/Questionable/Questionable.csproj +++ b/Questionable/Questionable.csproj @@ -1,4 +1,4 @@ - + dist $(SolutionDir)=X:\ diff --git a/Questionable/Windows/ConfigWindow.cs b/Questionable/Windows/ConfigWindow.cs index 7bcd7681..97847de5 100644 --- a/Questionable/Windows/ConfigWindow.cs +++ b/Questionable/Windows/ConfigWindow.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using Dalamud.Game.Text; @@ -10,7 +11,7 @@ using Dalamud.Plugin.Services; using Dalamud.Utility; using ImGuiNET; using LLib.ImGui; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Questionable.External; using GrandCompany = FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany; @@ -36,7 +37,7 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig _notificationMasterIpc = notificationMasterIpc; _configuration = configuration; - var mounts = dataManager.GetExcelSheet()! + var mounts = dataManager.GetExcelSheet() .Where(x => x is { RowId: > 0, Icon: > 0 }) .Select(x => (MountId: x.RowId, Name: x.Singular.ToString())) .Where(x => !string.IsNullOrEmpty(x.Name)) diff --git a/Questionable/Windows/JournalComponents/GatheringJournalComponent.cs b/Questionable/Windows/JournalComponents/GatheringJournalComponent.cs index 81588465..53b1576e 100644 --- a/Questionable/Windows/JournalComponents/GatheringJournalComponent.cs +++ b/Questionable/Windows/JournalComponents/GatheringJournalComponent.cs @@ -10,7 +10,7 @@ using Dalamud.Plugin.Services; using Dalamud.Utility.Signatures; using ImGuiNET; using LLib.GameData; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Questionable.Controller; using Questionable.Model; using Questionable.Model.Gathering; @@ -44,24 +44,24 @@ internal sealed class GatheringJournalComponent _gatheringPointRegistry = gatheringPointRegistry; // TODO some of the logic here would be better suited elsewhere, in particular the [item] → [gathering item] → [location] lookup - var routeToGatheringPoint = dataManager.GetExcelSheet()! - .Where(x => x.UnkData0[0].GatheringPoint != 0) - .SelectMany(x => x.UnkData0 - .Where(y => y.GatheringPoint != 0) + var routeToGatheringPoint = dataManager.GetExcelSheet() + .Where(x => x.GatheringPoint[0].RowId != 0) + .SelectMany(x => x.GatheringPoint + .Where(y => y.RowId != 0) .Select(y => new { RouteId = x.RowId, - GatheringPointId = y.GatheringPoint + GatheringPointId = y.RowId })) .GroupBy(x => x.RouteId) .ToDictionary(x => x.Key, x => x.Select(y => y.GatheringPointId).ToList()); - var gatheringLeveSheet = dataManager.GetExcelSheet()!; - var territoryTypeSheet = dataManager.GetExcelSheet()!; - var gatheringPointToLeve = dataManager.GetExcelSheet()! + var gatheringLeveSheet = dataManager.GetExcelSheet(); + var territoryTypeSheet = dataManager.GetExcelSheet(); + var gatheringPointToLeve = dataManager.GetExcelSheet() .Where(x => x.RowId > 0) .Select(x => { - uint startZonePlaceName = x.PlaceNameStartZone.Row; + uint startZonePlaceName = x.PlaceNameStartZone.RowId; startZonePlaceName = startZonePlaceName switch { 27 => 28, // limsa @@ -71,16 +71,17 @@ internal sealed class GatheringJournalComponent _ => startZonePlaceName }; - var territoryType = territoryTypeSheet.FirstOrDefault(y => startZonePlaceName == y.PlaceName.Row) + var territoryType = territoryTypeSheet.Cast() + .FirstOrDefault(y => startZonePlaceName == y!.Value.PlaceName.RowId) ?? throw new InvalidOperationException($"Unable to use {startZonePlaceName}"); return new { LeveId = x.RowId, LeveName = x.Name.ToString(), TerritoryType = (ushort)territoryType.RowId, - TerritoryName = territoryType.PlaceName.Value?.Name.ToString(), - Expansion = (EExpansionVersion)territoryType.ExVersion.Row, - GatheringLeve = gatheringLeveSheet.GetRow((uint)x.DataId), + TerritoryName = territoryType.PlaceName.ValueNullable?.Name.ToString(), + Expansion = (EExpansionVersion)territoryType.ExVersion.RowId, + GatheringLeve = gatheringLeveSheet.GetRowOrDefault(x.DataId.RowId), }; }) .Where(x => x.GatheringLeve != null) @@ -91,9 +92,9 @@ internal sealed class GatheringJournalComponent x.TerritoryType, x.TerritoryName, x.Expansion, - GatheringPoints = x.GatheringLeve!.Route - .Where(y => y.Row != 0) - .SelectMany(y => routeToGatheringPoint[y.Row]), + GatheringPoints = x.GatheringLeve!.Value.Route + .Where(y => y.RowId != 0) + .SelectMany(y => routeToGatheringPoint[y.RowId]), }) .SelectMany(x => x.GatheringPoints.Select(y => new { @@ -110,40 +111,40 @@ internal sealed class GatheringJournalComponent var itemSheet = dataManager.GetExcelSheet()!; _gatheringItems = dataManager.GetExcelSheet()! - .Where(x => x.RowId != 0 && x.GatheringItemLevel.Row != 0) + .Where(x => x.RowId != 0 && x.GatheringItemLevel.RowId != 0) .Select(x => new { GatheringItemId = (int)x.RowId, - Name = itemSheet.GetRow((uint)x.Item)?.Name.ToString() + Name = itemSheet.GetRowOrDefault(x.Item.RowId)?.Name.ToString() }) .Where(x => !string.IsNullOrEmpty(x.Name)) .ToDictionary(x => x.GatheringItemId, x => x.Name!); _gatheringPointsByExpansion = dataManager.GetExcelSheet()! - .Where(x => x.GatheringPointBase.Row != 0) - .Where(x => x.GatheringPointBase.Row is < 653 or > 680) // exclude ishgard restoration phase 1 - .DistinctBy(x => x.GatheringPointBase.Row) + .Where(x => x.GatheringPointBase.RowId != 0) + .Where(x => x.GatheringPointBase.RowId is < 653 or > 680) // exclude ishgard restoration phase 1 + .DistinctBy(x => x.GatheringPointBase.RowId) .Select(x => new { GatheringPointId = x.RowId, - Point = new DefaultGatheringPoint(new GatheringPointId((ushort)x.GatheringPointBase.Row), - x.GatheringPointBase.Value!.GatheringType.Row switch + Point = new DefaultGatheringPoint(new GatheringPointId((ushort)x.GatheringPointBase.RowId), + x.GatheringPointBase.Value!.GatheringType.RowId switch { 0 or 1 => EClassJob.Miner, 2 or 3 => EClassJob.Botanist, _ => EClassJob.Fisher }, x.GatheringPointBase.Value.GatheringLevel, - x.GatheringPointBase.Value.Item.Where(y => y != 0).Select(y => (ushort)y).ToList(), - (EExpansionVersion?)x.TerritoryType.Value?.ExVersion.Row ?? (EExpansionVersion)byte.MaxValue, - (ushort)x.TerritoryType.Row, - x.TerritoryType.Value?.PlaceName.Value?.Name.ToString(), - $"{x.GatheringPointBase.Row} - {x.PlaceName.Value?.Name}") + x.GatheringPointBase.Value.Item.Where(y => y.RowId != 0).Select(y => (ushort)y.RowId).ToList(), + (EExpansionVersion?)x.TerritoryType.ValueNullable?.ExVersion.RowId ?? (EExpansionVersion)byte.MaxValue, + (ushort)x.TerritoryType.RowId, + x.TerritoryType.ValueNullable?.PlaceName.ValueNullable?.Name.ToString(), + $"{x.GatheringPointBase.RowId} - {x.PlaceName.ValueNullable?.Name}") }) .Where(x => x.Point.ClassJob != EClassJob.Fisher) .Select(x => { - if (gatheringPointToLeve.TryGetValue((int)x.GatheringPointId, out var leve)) + if (gatheringPointToLeve.TryGetValue(x.GatheringPointId, out var leve)) { // it's a leve return x.Point with @@ -161,9 +162,9 @@ internal sealed class GatheringJournalComponent var territoryType = territoryTypeSheet.GetRow(gatheringRoot.Steps.Last().TerritoryId)!; return x.Point with { - Expansion = (EExpansionVersion)territoryType.ExVersion.Row, + Expansion = (EExpansionVersion)territoryType.ExVersion.RowId, TerritoryType = (ushort)territoryType.RowId, - TerritoryName = territoryType.PlaceName.Value?.Name.ToString(), + TerritoryName = territoryType.PlaceName.ValueNullable?.Name.ToString(), }; } else @@ -429,7 +430,7 @@ internal sealed class GatheringJournalComponent } } - public void ClearCounts() + public void ClearCounts(int type, int code) { foreach (var expansion in _gatheringPointsByExpansion) { diff --git a/Questionable/Windows/JournalComponents/QuestJournalComponent.cs b/Questionable/Windows/JournalComponents/QuestJournalComponent.cs index f273b00d..36565fdf 100644 --- a/Questionable/Windows/JournalComponents/QuestJournalComponent.cs +++ b/Questionable/Windows/JournalComponents/QuestJournalComponent.cs @@ -368,7 +368,7 @@ internal sealed class QuestJournalComponent } } - internal void ClearCounts() + internal void ClearCounts(int type, int code) { foreach (var genreCount in _genreCounts.ToList()) _genreCounts[genreCount.Key] = genreCount.Value with { Completed = 0 }; diff --git a/Questionable/Windows/QuestWindow.cs b/Questionable/Windows/QuestWindow.cs index 1deaf934..4c100a1b 100644 --- a/Questionable/Windows/QuestWindow.cs +++ b/Questionable/Windows/QuestWindow.cs @@ -67,7 +67,7 @@ internal sealed class QuestWindow : LWindow, IPersistableWindowConfig #endif SizeConstraints = new WindowSizeConstraints { - MinimumSize = new Vector2(200, 30), + MinimumSize = new Vector2(230, 30), MaximumSize = default }; RespectCloseHotkey = false; diff --git a/vendor/ECommons b/vendor/ECommons index 147e12e9..71ee09f7 160000 --- a/vendor/ECommons +++ b/vendor/ECommons @@ -1 +1 @@ -Subproject commit 147e12e95f2fb781f2c8ddac31d948700ed9051c +Subproject commit 71ee09f7cc2230a73503b945422760da1368405c From 60ec9e80c6ef0832ef0e84659017fd269f08b5d2 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 16 Nov 2024 22:08:04 +0100 Subject: [PATCH 54/95] Add aetheryte data for Dock Poga --- Questionable.Model/Common/Converter/AetheryteConverter.cs | 1 + Questionable.Model/Common/EAetheryteLocation.cs | 1 + Questionable.Model/common-schema.json | 1 + Questionable/Data/AetheryteData.cs | 1 + 4 files changed, 4 insertions(+) diff --git a/Questionable.Model/Common/Converter/AetheryteConverter.cs b/Questionable.Model/Common/Converter/AetheryteConverter.cs index 36853586..6d882ec3 100644 --- a/Questionable.Model/Common/Converter/AetheryteConverter.cs +++ b/Questionable.Model/Common/Converter/AetheryteConverter.cs @@ -110,6 +110,7 @@ public sealed class AetheryteConverter() : EnumConverter(Val { EAetheryteLocation.KozamaukaOkHanu, "Kozama'uka - Ok'hanu" }, { EAetheryteLocation.KozamaukaManyFires, "Kozama'uka - Many Fires" }, { EAetheryteLocation.KozamaukaEarthenshire, "Kozama'uka - Earthenshire" }, + { EAetheryteLocation.KozamaukaDockPoga, "Kozama'uka - Dock Poga" }, { EAetheryteLocation.YakTelIqBraax, "Yak T'el - Iq Br'aax" }, { EAetheryteLocation.YakTelMamook, "Yak T'el - Mamook" }, { EAetheryteLocation.ShaaloaniHhusatahwi, "Shaaloani - Hhusatahwi" }, diff --git a/Questionable.Model/Common/EAetheryteLocation.cs b/Questionable.Model/Common/EAetheryteLocation.cs index 11738206..b4b93076 100644 --- a/Questionable.Model/Common/EAetheryteLocation.cs +++ b/Questionable.Model/Common/EAetheryteLocation.cs @@ -258,6 +258,7 @@ public enum EAetheryteLocation KozamaukaOkHanu = 202, KozamaukaManyFires = 203, KozamaukaEarthenshire = 204, + KozamaukaDockPoga = 238, YakTelIqBraax = 205, YakTelMamook = 206, ShaaloaniHhusatahwi = 207, diff --git a/Questionable.Model/common-schema.json b/Questionable.Model/common-schema.json index 97d1474e..b0cdeeec 100644 --- a/Questionable.Model/common-schema.json +++ b/Questionable.Model/common-schema.json @@ -120,6 +120,7 @@ "Kozama'uka - Ok'hanu", "Kozama'uka - Many Fires", "Kozama'uka - Earthenshire", + "Kozama'uka - Dock Poga", "Yak T'el - Iq Br'aax", "Yak T'el - Mamook", "Shaaloani - Hhusatahwi", diff --git a/Questionable/Data/AetheryteData.cs b/Questionable/Data/AetheryteData.cs index 1e8f34c2..818132d9 100644 --- a/Questionable/Data/AetheryteData.cs +++ b/Questionable/Data/AetheryteData.cs @@ -291,6 +291,7 @@ internal sealed class AetheryteData { EAetheryteLocation.KozamaukaOkHanu, new(-169.51251f, 6.576599f, -479.42322f) }, { EAetheryteLocation.KozamaukaManyFires, new(541.16125f, 117.41809f, 203.60107f) }, { EAetheryteLocation.KozamaukaEarthenshire, new(-477.53113f, 124.04053f, 311.32983f) }, + { EAetheryteLocation.KozamaukaDockPoga, new(787.59436f, 14.175598f, -236.22491f) }, { EAetheryteLocation.YakTelIqBraax, new(-397.05505f, 23.5141f, -431.93713f) }, { EAetheryteLocation.YakTelMamook, new(721.40076f, -132.31104f, 526.1769f) }, { EAetheryteLocation.ShaaloaniHhusatahwi, new(386.40417f, -0.19836426f, 467.61267f) }, From db43fec431eb21f141b75d49bf9550356a896841 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 17 Nov 2024 02:12:27 +0100 Subject: [PATCH 55/95] Add 7.1 MSQ --- LLib | 2 +- .../MSQ/G-7.1/5244_A Royal Invitation.json | 126 +++++++++++ .../MSQ/G-7.1/5245_Alexandria Mourns.json | 74 +++++++ .../MSQ/G-7.1/5246_In Search of the Past.json | 146 +++++++++++++ .../MSQ/G-7.1/5247_Among the Abandoned.json | 126 +++++++++++ .../G-7.1/5248_Guidance of the Hhetso.json | 202 ++++++++++++++++++ .../MSQ/G-7.1/5249_The Warmth of Family.json | 94 ++++++++ .../MSQ/G-7.1/5250_Crossroads.json | 126 +++++++++++ .../Misc/5004_How the West Was Sung.json | 21 ++ Questionable/Data/JournalData.cs | 11 +- Questionable/Data/Sheets/QuestEx.cs | 1 + Questionable/Functions/ExcelFunctions.cs | 20 +- Questionable/Functions/GameFunctions.cs | 3 +- 13 files changed, 934 insertions(+), 18 deletions(-) create mode 100644 QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5244_A Royal Invitation.json create mode 100644 QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5245_Alexandria Mourns.json create mode 100644 QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5246_In Search of the Past.json create mode 100644 QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5247_Among the Abandoned.json create mode 100644 QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5248_Guidance of the Hhetso.json create mode 100644 QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5249_The Warmth of Family.json create mode 100644 QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5250_Crossroads.json create mode 100644 QuestPaths/7.x - Dawntrail/Unlocks/Misc/5004_How the West Was Sung.json diff --git a/LLib b/LLib index 538329a1..70b0bef2 160000 --- a/LLib +++ b/LLib @@ -1 +1 @@ -Subproject commit 538329a1e80acbcd09e28bd6dd459c35b5563c0a +Subproject commit 70b0bef2459898a70f7b34b4d196bbaeb72397b1 diff --git a/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5244_A Royal Invitation.json b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5244_A Royal Invitation.json new file mode 100644 index 00000000..320302f8 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5244_A Royal Invitation.json @@ -0,0 +1,126 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1047679, + "Position": { + "X": -165.36206, + "Y": -14.999356, + "Z": 203.93677 + }, + "TerritoryId": 1185, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Tuliyollal", + "AethernetShortcut": [ + "[Tuliyollal] Aetheryte Plaza", + "[Tuliyollal] The For'ard Cabins" + ] + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1046521, + "Position": { + "X": -46.616333, + "Y": -17.97287, + "Z": 180.3158 + }, + "StopDistance": 5, + "TerritoryId": 1185, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2014470, + "Position": { + "X": -32.700073, + "Y": -17.47168, + "Z": 184.9851 + }, + "TerritoryId": 1185, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1047501, + "Position": { + "X": -189.80707, + "Y": 120.74999, + "Z": -367.14734 + }, + "TerritoryId": 1185, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Tuliyollal] Bayside Bevy Marketplace", + "[Tuliyollal] Vollok Shoonsa" + ], + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_KINGMG101_05244_SYSTEM_000_301", + "Yes": true + } + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1048083, + "Position": { + "X": 302.05237, + "Y": 51.199978, + "Z": 205.0354 + }, + "TerritoryId": 1186, + "InteractionType": "Interact", + "AetheryteShortcut": "Solution Nine", + "AethernetShortcut": [ + "[Solution Nine] Aetheryte Plaza", + "[Solution Nine] Neon Stein" + ], + "TargetTerritoryId": 1207, + "SkipConditions": { + "AetheryteShortcutIf": { + "InTerritory": [ + 1207 + ] + }, + "StepIf": { + "InTerritory": [ + 1207 + ] + } + } + }, + { + "DataId": 1052185, + "Position": { + "X": -4.837158, + "Y": -3.632158E-08, + "Z": 5.996765 + }, + "TerritoryId": 1207, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5245_Alexandria Mourns.json b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5245_Alexandria Mourns.json new file mode 100644 index 00000000..6d37db44 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5245_Alexandria Mourns.json @@ -0,0 +1,74 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1052185, + "Position": { + "X": -4.837158, + "Y": -3.632158E-08, + "Z": 5.996765 + }, + "TerritoryId": 1207, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014102, + "Position": { + "X": -0.015319824, + "Y": 0.99176025, + "Z": 16.03717 + }, + "TerritoryId": 1207, + "InteractionType": "Interact", + "TargetTerritoryId": 1186, + "SkipConditions": { + "StepIf": { + "InTerritory": [ + 1186 + ] + } + } + }, + { + "DataId": 1052191, + "Position": { + "X": 20.248657, + "Y": 38.0566, + "Z": -388.90674 + }, + "TerritoryId": 1186, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Solution Nine] Neon Stein", + "[Solution Nine] Resolution" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1052198, + "Position": { + "X": -303.2426, + "Y": 9.519508, + "Z": 51.80432 + }, + "StopDistance": 5, + "TerritoryId": 1186, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5246_In Search of the Past.json b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5246_In Search of the Past.json new file mode 100644 index 00000000..6d0878d1 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5246_In Search of the Past.json @@ -0,0 +1,146 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1052202, + "Position": { + "X": -305.83655, + "Y": 9.519508, + "Z": 53.147095 + }, + "StopDistance": 5, + "TerritoryId": 1186, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052205, + "Position": { + "X": -257.0382, + "Y": 30, + "Z": -569.05475 + }, + "TerritoryId": 1191, + "InteractionType": "Interact", + "AetheryteShortcut": "Heritage Found - The Outskirts" + }, + { + "DataId": 1052204, + "Position": { + "X": -158.25134, + "Y": 25.984516, + "Z": -521.90436 + }, + "TerritoryId": 1191, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 1052206, + "Position": { + "X": -137.86536, + "Y": 35, + "Z": -568.29175 + }, + "TerritoryId": 1191, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1048083, + "Position": { + "X": 302.05237, + "Y": 51.199978, + "Z": 205.0354 + }, + "TerritoryId": 1186, + "InteractionType": "Interact", + "AetheryteShortcut": "Solution Nine", + "AethernetShortcut": [ + "[Solution Nine] Aetheryte Plaza", + "[Solution Nine] Neon Stein" + ], + "TargetTerritoryId": 1207, + "SkipConditions": { + "AetheryteShortcutIf": { + "InTerritory": [ + 1207 + ] + }, + "StepIf": { + "InTerritory": [ + 1207 + ] + } + } + }, + { + "DataId": 1048161, + "Position": { + "X": -5.874817, + "Y": -3.6188258E-08, + "Z": 6.8512573 + }, + "TerritoryId": 1207, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1052207, + "Position": { + "X": -609.3385, + "Y": -3.3580189, + "Z": -504.5701 + }, + "TerritoryId": 1191, + "InteractionType": "Interact", + "AetheryteShortcut": "Heritage Found - The Outskirts", + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "TerritoryId": 1191, + "InteractionType": "Duty", + "ContentFinderConditionId": 1008 + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1052213, + "Position": { + "X": 117.02136, + "Y": 12.5, + "Z": -67.826416 + }, + "StopDistance": 6, + "TerritoryId": 1254, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5247_Among the Abandoned.json b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5247_Among the Abandoned.json new file mode 100644 index 00000000..3ba25e86 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5247_Among the Abandoned.json @@ -0,0 +1,126 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1052217, + "Position": { + "X": 118.242065, + "Y": 12.5, + "Z": -69.0166 + }, + "StopDistance": 6, + "TerritoryId": 1254, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014471, + "Position": { + "X": 39.32251, + "Y": 13.260071, + "Z": 51.865356 + }, + "TerritoryId": 1254, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2014472, + "Position": { + "X": 101.8844, + "Y": 12.588623, + "Z": 130.44934 + }, + "TerritoryId": 1254, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2014473, + "Position": { + "X": 39.597046, + "Y": 13.260071, + "Z": 53.45227 + }, + "TerritoryId": 1254, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1052227, + "Position": { + "X": -581.2009, + "Y": -1.7638817, + "Z": -505.45514 + }, + "StopDistance": 5, + "TerritoryId": 1191, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1048083, + "Position": { + "X": 302.05237, + "Y": 51.199978, + "Z": 205.0354 + }, + "TerritoryId": 1186, + "InteractionType": "Interact", + "AetheryteShortcut": "Solution Nine", + "AethernetShortcut": [ + "[Solution Nine] Aetheryte Plaza", + "[Solution Nine] Neon Stein" + ], + "TargetTerritoryId": 1207, + "SkipConditions": { + "AetheryteShortcutIf": { + "InTerritory": [ + 1207 + ] + }, + "StepIf": { + "InTerritory": [ + 1207 + ] + } + } + }, + { + "DataId": 1048161, + "Position": { + "X": -5.874817, + "Y": -3.6188258E-08, + "Z": 6.8512573 + }, + "TerritoryId": 1207, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5248_Guidance of the Hhetso.json b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5248_Guidance of the Hhetso.json new file mode 100644 index 00000000..42f785b4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5248_Guidance of the Hhetso.json @@ -0,0 +1,202 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1052233, + "Position": { + "X": -0.80877686, + "Y": -4.1909516E-08, + "Z": 6.42395 + }, + "StopDistance": 5, + "TerritoryId": 1207, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": -363.22934, + "Y": 20.162338, + "Z": -90.19407 + }, + "TerritoryId": 1190, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Shaaloani - Sheshenewezi Springs" + }, + { + "DataId": 1051495, + "Position": { + "X": -365.28577, + "Y": 20.14268, + "Z": -88.51758 + }, + "StopDistance": 5, + "TerritoryId": 1190, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": 302.1455, + "Y": -15.629961, + "Z": -516.2348 + }, + "TerritoryId": 1190, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Shaaloani - Mehwahhetsoan", + "Fly": true + }, + { + "DataId": 1046988, + "Position": { + "X": 302.96777, + "Y": -15.629961, + "Z": -514.6716 + }, + "TerritoryId": 1190, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1051013, + "Position": { + "X": 303.79175, + "Y": -15.629962, + "Z": -516.25854 + }, + "TerritoryId": 1190, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1052247, + "Position": { + "X": 224.96375, + "Y": -16.329428, + "Z": -527.6417 + }, + "TerritoryId": 1190, + "InteractionType": "Interact", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_KINGMG105_05248_Q2_000_000", + "Answer": "TEXT_KINGMG105_05248_A2_000_002" + } + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + }, + { + "DataId": 1052245, + "Position": { + "X": 276.78333, + "Y": -16.53927, + "Z": -562.7985 + }, + "TerritoryId": 1190, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 1052243, + "Position": { + "X": 332.26514, + "Y": -14.986355, + "Z": -558.95325 + }, + "TerritoryId": 1190, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1052239, + "Position": { + "X": 354.57385, + "Y": -17.082237, + "Z": -452.5063 + }, + "TerritoryId": 1190, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 302.1455, + "Y": -15.629961, + "Z": -516.2348 + }, + "TerritoryId": 1190, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1051013, + "Position": { + "X": 303.79175, + "Y": -15.629962, + "Z": -516.25854 + }, + "TerritoryId": 1190, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5249_The Warmth of Family.json b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5249_The Warmth of Family.json new file mode 100644 index 00000000..7bbf6b74 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5249_The Warmth of Family.json @@ -0,0 +1,94 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1052248, + "Position": { + "X": 293.93445, + "Y": -16.71379, + "Z": -528.70984 + }, + "TerritoryId": 1190, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052248, + "Position": { + "X": 293.93445, + "Y": -16.71379, + "Z": -528.70984 + }, + "TerritoryId": 1190, + "InteractionType": "SinglePlayerDuty" + } + ] + }, + { + "Sequence": 2, + "Steps": [] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1052252, + "Position": { + "X": 299.15308, + "Y": -15.629961, + "Z": -518.4253 + }, + "StopDistance": 5, + "TerritoryId": 1190, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1052255, + "Position": { + "X": -123.91852, + "Y": 16.187744, + "Z": -296.80328 + }, + "TerritoryId": 1190, + "InteractionType": "Interact", + "Fly": true, + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_KINGMG106_05249_SYSTEM_000_402", + "Yes": true + } + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1052259, + "Position": { + "X": -171.03839, + "Y": 15.75679, + "Z": -372.45752 + }, + "TerritoryId": 1190, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5250_Crossroads.json b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5250_Crossroads.json new file mode 100644 index 00000000..1a853e69 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/MSQ/G-7.1/5250_Crossroads.json @@ -0,0 +1,126 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1052261, + "Position": { + "X": -172.25916, + "Y": 15.73959, + "Z": -376.1197 + }, + "TerritoryId": 1190, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1048083, + "Position": { + "X": 302.05237, + "Y": 51.199978, + "Z": 205.0354 + }, + "TerritoryId": 1186, + "InteractionType": "Interact", + "AetheryteShortcut": "Solution Nine", + "AethernetShortcut": [ + "[Solution Nine] Aetheryte Plaza", + "[Solution Nine] Neon Stein" + ], + "TargetTerritoryId": 1207, + "SkipConditions": { + "AetheryteShortcutIf": { + "InTerritory": [ + 1207 + ] + }, + "StepIf": { + "InTerritory": [ + 1207 + ] + } + } + }, + { + "DataId": 1052521, + "Position": { + "X": -1.8463745, + "Y": -3.4458935E-08, + "Z": 5.8441772 + }, + "TerritoryId": 1207, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1052269, + "Position": { + "X": -2.456726, + "Y": -7.2107476E-08, + "Z": 8.987488 + }, + "TerritoryId": 1207, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1052271, + "Position": { + "X": -0.41204834, + "Y": -3.9115548E-08, + "Z": 6.240906 + }, + "TerritoryId": 1207, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1052272, + "Position": { + "X": 0.19836426, + "Y": 0.00054359436, + "Z": -94.98743 + }, + "TerritoryId": 1186, + "InteractionType": "Interact", + "AetheryteShortcut": "Solution Nine" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1052267, + "Position": { + "X": -3.7080078, + "Y": -7.4505806E-08, + "Z": 9.170593 + }, + "StopDistance": 7, + "TerritoryId": 1207, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Unlocks/Misc/5004_How the West Was Sung.json b/QuestPaths/7.x - Dawntrail/Unlocks/Misc/5004_How the West Was Sung.json new file mode 100644 index 00000000..bec00ecc --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Unlocks/Misc/5004_How the West Was Sung.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1048548, + "Position": { + "X": -109.48352, + "Y": -15, + "Z": 185.04602 + }, + "TerritoryId": 1185, + "InteractionType": "AcceptQuest" + } + ] + } + ] +} diff --git a/Questionable/Data/JournalData.cs b/Questionable/Data/JournalData.cs index f26f452a..56a12b6b 100644 --- a/Questionable/Data/JournalData.cs +++ b/Questionable/Data/JournalData.cs @@ -2,7 +2,6 @@ using System.Linq; using Dalamud.Plugin.Services; using Lumina.Excel.Sheets; -using Microsoft.Extensions.Logging; using Questionable.Model; using Questionable.Model.Questing; @@ -10,20 +9,12 @@ namespace Questionable.Data; internal sealed class JournalData { - public JournalData(IDataManager dataManager, QuestData questData, ILogger logger) + public JournalData(IDataManager dataManager, QuestData questData) { var genres = dataManager.GetExcelSheet() .Where(x => x.RowId > 0 && x.Icon > 0) .Select(x => new Genre(x, questData.GetAllByJournalGenre(x.RowId))) .ToList(); - foreach (var genre in genres) - { - logger.LogInformation("Genre {GenreId}: {GenreName} has {QuestCount} quests", - genre.Id, genre.Name, genre.QuestCount); - } - logger.LogInformation("Genre count: {GenreCount}", genres.Count); - var quest = questData.GetQuestInfo(new QuestId(5193)); - logger.LogInformation("Q: {N}, {A}, {B}", quest.Name, quest.JournalGenre, quest.IssuerDataId); var limsaStart = dataManager.GetExcelSheet().GetRow(1); var gridaniaStart = dataManager.GetExcelSheet().GetRow(2); diff --git a/Questionable/Data/Sheets/QuestEx.cs b/Questionable/Data/Sheets/QuestEx.cs index c4da0178..2dc47b8e 100644 --- a/Questionable/Data/Sheets/QuestEx.cs +++ b/Questionable/Data/Sheets/QuestEx.cs @@ -12,6 +12,7 @@ public readonly unsafe struct QuestEx(ExcelPage page, uint offset, uint row) : I public Quest Original { get; } = new(page, offset, row); + public readonly ReadOnlySeString Id => page.ReadString(offset + 2420, offset); public RowRef IssuerStart => RowRef.GetFirstValidRowOrUntyped(page.Module, page.ReadUInt32(offset + 2456), [typeof(EObjName), typeof(ENpcResident)], 882056187, page.Language); public RowRef IssuerLocation => new(page.Module, page.ReadUInt32(offset + 2460), page.Language); public RowRef JournalGenre => new(page.Module, page.ReadUInt32(offset + 2468), page.Language); diff --git a/Questionable/Functions/ExcelFunctions.cs b/Questionable/Functions/ExcelFunctions.cs index 2043c5a6..3109f942 100644 --- a/Questionable/Functions/ExcelFunctions.cs +++ b/Questionable/Functions/ExcelFunctions.cs @@ -3,10 +3,13 @@ using System.Linq; using Dalamud.Plugin.Services; using Dalamud.Utility; using LLib; +using Lumina.Excel; +using Lumina.Excel.Exceptions; using Lumina.Excel.Sheets; using Lumina.Text; using Lumina.Text.ReadOnly; using Microsoft.Extensions.Logging; +using Questionable.Data.Sheets; using Questionable.Model; using Quest = Questionable.Model.Quest; using GimmickYesNo = Lumina.Excel.Sheets.GimmickYesNo; @@ -38,7 +41,7 @@ internal sealed class ExcelFunctions if (currentQuest != null && excelSheetName == null) { var questRow = - _dataManager.GetExcelSheet().GetRowOrDefault((uint)currentQuest.Id.Value + + _dataManager.GetExcelSheet().GetRowOrDefault((uint)currentQuest.Id.Value + 0x10000); if (questRow == null) { @@ -46,13 +49,20 @@ internal sealed class ExcelFunctions return null; } - excelSheetName = $"quest/{(currentQuest.Id.Value / 100):000}/{questRow.Value.RowId}"; + excelSheetName = $"quest/{(currentQuest.Id.Value / 100):000}/{questRow.Value.Id}"; } ArgumentNullException.ThrowIfNull(excelSheetName); - var excelSheet = _dataManager.GetExcelSheet(name: excelSheetName); - return excelSheet.Cast() - .FirstOrDefault(x => x!.Value.Key == key)?.Value; + try + { + var excelSheet = _dataManager.GetExcelSheet(name: excelSheetName); + return excelSheet.Cast() + .FirstOrDefault(x => x!.Value.Key == key)?.Value; + } + catch (SheetNotFoundException e) + { + throw new SheetNotFoundException($"Sheet '{excelSheetName}' not found", e); + } } public StringOrRegex GetDialogueTextByRowId(string? excelSheet, uint rowId, bool isRegex) diff --git a/Questionable/Functions/GameFunctions.cs b/Questionable/Functions/GameFunctions.cs index d4a7e692..c20f3d48 100644 --- a/Questionable/Functions/GameFunctions.cs +++ b/Questionable/Functions/GameFunctions.cs @@ -64,10 +64,9 @@ internal sealed unsafe class GameFunctions _territoryToAetherCurrentCompFlgSet = dataManager.GetExcelSheet() .Where(x => x.RowId > 0) - .Where(x => x.Unknown3 > 0) + .Where(x => x.Unknown4 > 0) .ToDictionary(x => (ushort)x.RowId, x => x.Unknown4) .AsReadOnly(); - _territoryToAetherCurrentCompFlgSet = new Dictionary().AsReadOnly(); _contentFinderConditionToContentId = dataManager.GetExcelSheet() .Where(x => x.RowId > 0 && x.Content.RowId > 0) .ToDictionary(x => x.RowId, x => x.Content.RowId) From 294a33a14308bb98792a2de63b5395deffd1d371 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 17 Nov 2024 03:38:50 +0100 Subject: [PATCH 56/95] Add neutral Pelupelu quests --- .../Dailies/5199_A Notion of Promotion.json | 96 +++++++++ .../Dailies/5200_A Sackful of Memories.json | 73 +++++++ ...1_Ferocious Foliage, Fearful Tourists.json | 137 +++++++++++++ ...5202_Community Outreach in Kozanuakiy.json | 73 +++++++ .../Dailies/5203_Preventative Measures.json | 120 +++++++++++ .../Dailies/5204_Burden of Beasts.json | 104 ++++++++++ .../Dailies/5205_Growing as a Guide.json | 123 +++++++++++ .../5193_An Intrepid New Enterprise.json | 192 ++++++++++++++++++ Questionable/Model/EAlliedSociety.cs | 1 + 9 files changed, 919 insertions(+) create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5199_A Notion of Promotion.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5200_A Sackful of Memories.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5201_Ferocious Foliage, Fearful Tourists.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5202_Community Outreach in Kozanuakiy.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5205_Growing as a Guide.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5193_An Intrepid New Enterprise.json diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5199_A Notion of Promotion.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5199_A Notion of Promotion.json new file mode 100644 index 00000000..133777c9 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5199_A Notion of Promotion.json @@ -0,0 +1,96 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052301, + "Position": { + "X": 219.98926, + "Y": 10.289447, + "Z": -522.9115 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Fly": true + }, + { + "DataId": 1052300, + "Position": { + "X": 208.48401, + "Y": 10.257622, + "Z": -588.98303 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 1052302, + "Position": { + "X": 171.03833, + "Y": 7.17552, + "Z": -602.6246 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5200_A Sackful of Memories.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5200_A Sackful of Memories.json new file mode 100644 index 00000000..b639ea7e --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5200_A Sackful of Memories.json @@ -0,0 +1,73 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052303, + "Position": { + "X": -191.66864, + "Y": 6.5458784, + "Z": -498.0392 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Ok'hanu" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5201_Ferocious Foliage, Fearful Tourists.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5201_Ferocious Foliage, Fearful Tourists.json new file mode 100644 index 00000000..056eab0b --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5201_Ferocious Foliage, Fearful Tourists.json @@ -0,0 +1,137 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014482, + "Position": { + "X": 718.6847, + "Y": 6.1188354, + "Z": -105.60773 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18172 + ], + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + 16 + ], + null, + null, + null + ] + }, + { + "DataId": 2014481, + "Position": { + "X": 581.78064, + "Y": 9.018005, + "Z": -180.49902 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18172 + ], + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + 32 + ], + null, + null, + null + ] + }, + { + "DataId": 2014480, + "Position": { + "X": 531.15125, + "Y": 12.527649, + "Z": -99.321045 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18172 + ], + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + 48 + ], + null, + null, + null + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5202_Community Outreach in Kozanuakiy.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5202_Community Outreach in Kozanuakiy.json new file mode 100644 index 00000000..87cadfa6 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5202_Community Outreach in Kozanuakiy.json @@ -0,0 +1,73 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052304, + "Position": { + "X": 670.344, + "Y": 26.329378, + "Z": -531.2734 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.json new file mode 100644 index 00000000..262ce23e --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.json @@ -0,0 +1,120 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014484, + "Position": { + "X": 847.34875, + "Y": 15.8845825, + "Z": -192.67572 + }, + "TerritoryId": 1188, + "InteractionType": "UseItem", + "ItemId": 2003717, + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 2014485, + "Position": { + "X": 855.2223, + "Y": 15.945618, + "Z": -208.72821 + }, + "TerritoryId": 1188, + "InteractionType": "UseItem", + "ItemId": 2003717, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 2014483, + "Position": { + "X": 868.1315, + "Y": 15.335266, + "Z": -203.96735 + }, + "TerritoryId": 1188, + "InteractionType": "UseItem", + "ItemId": 2003717, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json new file mode 100644 index 00000000..549951cf --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json @@ -0,0 +1,104 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052305, + "Position": { + "X": 474.20447, + "Y": 9.739183, + "Z": -207.90424 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2014486, + "Position": { + "X": 471.88513, + "Y": 9.933594, + "Z": -206.46985 + }, + "StopDistance": 4.5, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1052306, + "Position": { + "X": 791.37854, + "Y": 14.39521, + "Z": -206.53088 + }, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5205_Growing as a Guide.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5205_Growing as a Guide.json new file mode 100644 index 00000000..c576165f --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5205_Growing as a Guide.json @@ -0,0 +1,123 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "TerritoryId": 1188, + "InteractionType": "None", + "AetheryteShortcut": "Kozama'uka - Ok'hanu" + }, + { + "DataId": 1052307, + "Position": { + "X": -111.0094, + "Y": 1.6987718, + "Z": -111.0094 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [ + null, + [ + 1 + ], + null, + null, + null, + null + ], + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANPEL107_05205_Q1_000_000", + "Answer": "TEXT_BANPEL107_05205_A1_000_002" + } + ] + }, + { + "DataId": 1052308, + "Position": { + "X": -152.7276, + "Y": 3.6225784, + "Z": -349.87415 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [ + null, + [ + 2 + ], + null, + null, + null, + null + ], + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANPEL107_05205_Q2_000_000", + "Answer": "TEXT_BANPEL107_05205_A2_000_003" + } + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5193_An Intrepid New Enterprise.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5193_An Intrepid New Enterprise.json new file mode 100644 index 00000000..7376bf28 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5193_An Intrepid New Enterprise.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1051712, + "Position": { + "X": 12.344482, + "Y": -14, + "Z": 96.17761 + }, + "TerritoryId": 1185, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Tuliyollal", + "AethernetShortcut": [ + "[Tuliyollal] Aetheryte Plaza", + "[Tuliyollal] Bayside Bevy Marketplace" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014421, + "Position": { + "X": -65.72064, + "Y": 2.39563, + "Z": -400.22894 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1051713, + "Position": { + "X": -67.88745, + "Y": 2.4000018, + "Z": -399.64905 + }, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1051713, + "Position": { + "X": -67.88745, + "Y": 2.4000018, + "Z": -399.64905 + }, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1051718, + "Position": { + "X": 62.210938, + "Y": 0.7218611, + "Z": -333.94366 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANPEL001_05193_Q5_000_001", + "Answer": "TEXT_BANPEL001_05193_A5_000_002" + } + ] + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1051719, + "Position": { + "X": -42.923706, + "Y": 21.48239, + "Z": -88.76172 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANPEL001_05193_Q6_000_001", + "Answer": "TEXT_BANPEL001_05193_A6_000_003" + } + ] + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1051720, + "Position": { + "X": -183.45923, + "Y": 0.39999998, + "Z": -73.74689 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANPEL001_05193_Q7_000_001", + "Answer": "TEXT_BANPEL001_05193_A7_000_001" + } + ] + } + ] + }, + { + "Sequence": 7, + "Steps": [ + { + "DataId": 1051859, + "Position": { + "X": -73.411194, + "Y": 2.4000018, + "Z": -398.61145 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "TerritoryId": 1188, + "InteractionType": "AttuneAetheryte", + "Aetheryte": "Kozama'uka - Dock Poga", + "Fly": true, + "SkipConditions": { + "StepIf": { + "AetheryteUnlocked": "Kozama'uka - Dock Poga" + } + } + }, + { + "DataId": 1051721, + "Position": { + "X": 737.5753, + "Y": 8.14118, + "Z": -278.0957 + }, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "Fly": true + } + ] + } + ] +} diff --git a/Questionable/Model/EAlliedSociety.cs b/Questionable/Model/EAlliedSociety.cs index 2f7281f7..346244e2 100644 --- a/Questionable/Model/EAlliedSociety.cs +++ b/Questionable/Model/EAlliedSociety.cs @@ -25,4 +25,5 @@ public enum EAlliedSociety : byte Arkasodara = 15, Omicrons = 16, Loporrits = 17, + Pelupelu = 18, } From 4118affff0403f3a96ae74892e765019acfc17c9 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 17 Nov 2024 19:42:52 +0100 Subject: [PATCH 57/95] Add friendly/some respected Pelupelu qeusts + placeholders --- .../Dailies/5203_Preventative Measures.md | 3 + .../Dailies/5206_Bag Your Pardon.json | 129 ++++++++++ .../Dailies/5207_Thrilled to Be Here.json | 90 +++++++ .../5208_Canvassing in Kozama'uka.json | 118 +++++++++ .../Dailies/5209_Reed between the Lines.json | 133 +++++++++++ .../5210_The Rudiments of Fiend Removal.json | 146 +++++++++++ .../Dailies/5211_The Nectar Collector.json | 102 ++++++++ .../Dailies/5212_Starting from Scrap.json | 117 +++++++++ .../Dailies/5213_Advisor vs Predator.json | 58 +++++ .../5214_Let Mobbie Be Your Guide.json | 58 +++++ .../5215_The Popularity of Punutiys.json | 58 +++++ .../Dailies/5216_Breath of Foul Air.json | 145 +++++++++++ .../Dailies/5217_Big Bellies to Fill.json | 74 ++++++ .../Dailies/5218_The Hand That Feeds.json | 98 ++++++++ .../Dailies/5219_Born to Run Away.json | 58 +++++ .../5220_Bird Meat's Back on the Menu.json | 58 +++++ .../Dailies/5221_A Sympathetic Ear.json | 58 +++++ .../Dailies/5222_Worth the Weight.json | 58 +++++ .../Dailies/5223_In Time for Lunch.json | 58 +++++ .../Dailies/5224_His Swarm Enemy.json | 58 +++++ .../Dailies/5225_Seasoned Adventurer.json | 58 +++++ .../Dailies/5226_Animal Friendship.json | 58 +++++ .../Story/5194_A Tentative First Tour.json | 212 ++++++++++++++++ .../Story/5195_Earthenshire Awaits.json | 226 ++++++++++++++++++ 24 files changed, 2231 insertions(+) create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.md create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5206_Bag Your Pardon.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5207_Thrilled to Be Here.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5208_Canvassing in Kozama'uka.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5209_Reed between the Lines.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5211_The Nectar Collector.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5212_Starting from Scrap.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5213_Advisor vs Predator.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5214_Let Mobbie Be Your Guide.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5215_The Popularity of Punutiys.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5216_Breath of Foul Air.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5217_Big Bellies to Fill.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5218_The Hand That Feeds.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5219_Born to Run Away.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5220_Bird Meat's Back on the Menu.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5221_A Sympathetic Ear.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5222_Worth the Weight.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5223_In Time for Lunch.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5224_His Swarm Enemy.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5225_Seasoned Adventurer.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5226_Animal Friendship.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5194_A Tentative First Tour.json create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5195_Earthenshire Awaits.json diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.md b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.md new file mode 100644 index 00000000..ec7e7604 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.md @@ -0,0 +1,3 @@ +0 xx 0 0 0 0 | 2014483 2014484 2014485 + 48 | x x x + diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5206_Bag Your Pardon.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5206_Bag Your Pardon.json new file mode 100644 index 00000000..42d69f7b --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5206_Bag Your Pardon.json @@ -0,0 +1,129 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014540, + "Position": { + "X": -24.887512, + "Y": 21.774597, + "Z": -88.76172 + }, + "StopDistance": 1, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "RequiredQuestVariables": [ + null, + [ + 1 + ], + null, + null, + null, + null + ] + }, + { + "DataId": 2014487, + "Position": { + "X": -45.426086, + "Y": 21.469421, + "Z": -80.27777 + }, + "StopDistance": 1, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [ + null, + [ + 2 + ], + null, + null, + null, + null + ] + }, + { + "DataId": 2014539, + "Position": { + "X": -9.2317505, + "Y": 21.469421, + "Z": -74.418274 + }, + "StopDistance": 1, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [ + null, + [ + 3 + ], + null, + null, + null, + null + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5207_Thrilled to Be Here.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5207_Thrilled to Be Here.json new file mode 100644 index 00000000..3bc17705 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5207_Thrilled to Be Here.json @@ -0,0 +1,90 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052309, + "Position": { + "X": -100.35864, + "Y": 4.7510896, + "Z": -304.3412 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1052310, + "Position": { + "X": -103.01367, + "Y": 4.70791, + "Z": -305.40936 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5208_Canvassing in Kozama'uka.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5208_Canvassing in Kozama'uka.json new file mode 100644 index 00000000..88afbcf3 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5208_Canvassing in Kozama'uka.json @@ -0,0 +1,118 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052319, + "Position": { + "X": -185.07672, + "Y": 6.5185943, + "Z": -460.04425 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 1052318, + "Position": { + "X": -217.12067, + "Y": 6.4016876, + "Z": -474.60138 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1052320, + "Position": { + "X": -108.659546, + "Y": 9.773233, + "Z": -530.2052 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5209_Reed between the Lines.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5209_Reed between the Lines.json new file mode 100644 index 00000000..059ea14d --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5209_Reed between the Lines.json @@ -0,0 +1,133 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052321, + "Position": { + "X": 103.227295, + "Y": 0.7218611, + "Z": -334.37097 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2014488, + "Position": { + "X": 103.74609, + "Y": -0.015319824, + "Z": -339.13184 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 2014536, + "Position": { + "X": 106.21802, + "Y": -0.015319824, + "Z": -347.097 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 2014537, + "Position": { + "X": 112.93201, + "Y": -0.015319824, + "Z": -341.5122 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json new file mode 100644 index 00000000..1203c94c --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json @@ -0,0 +1,146 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Comment": "TODO untested how many RNG states this has", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052323, + "Position": { + "X": 495.75024, + "Y": 10.160157, + "Z": -242.99994 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2014491, + "Position": { + "X": 504.78357, + "Y": 15.396301, + "Z": -283.83307 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18173 + ], + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 1 + } + ], + null, + null, + null + ] + }, + { + "DataId": 2014489, + "Position": { + "X": 522.301, + "Y": 12.191956, + "Z": -273.97577 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18173 + ], + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 2 + } + ], + null, + null, + null + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1052323, + "Position": { + "X": 495.75024, + "Y": 10.160157, + "Z": -242.99994 + }, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5211_The Nectar Collector.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5211_The Nectar Collector.json new file mode 100644 index 00000000..7d51e3a6 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5211_The Nectar Collector.json @@ -0,0 +1,102 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014492, + "Position": { + "X": -448.50842, + "Y": 0.9613037, + "Z": -113.69501 + }, + "TerritoryId": 1188, + "InteractionType": "UseItem", + "ItemId": 2003721, + "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 2014493, + "Position": { + "X": -464.0421, + "Y": 0.62561035, + "Z": -119.95117 + }, + "TerritoryId": 1188, + "InteractionType": "UseItem", + "ItemId": 2003721, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5212_Starting from Scrap.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5212_Starting from Scrap.json new file mode 100644 index 00000000..f4add830 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5212_Starting from Scrap.json @@ -0,0 +1,117 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014494, + "Position": { + "X": 538.38403, + "Y": 15.701477, + "Z": -10.147278 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 2014495, + "Position": { + "X": 528.77075, + "Y": 15.6710205, + "Z": -2.456726 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 2014496, + "Position": { + "X": 511.7417, + "Y": 12.954895, + "Z": -7.522766 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5213_Advisor vs Predator.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5213_Advisor vs Predator.json new file mode 100644 index 00000000..f7b53cd4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5213_Advisor vs Predator.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Disabled": true, + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5214_Let Mobbie Be Your Guide.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5214_Let Mobbie Be Your Guide.json new file mode 100644 index 00000000..f7b53cd4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5214_Let Mobbie Be Your Guide.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Disabled": true, + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5215_The Popularity of Punutiys.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5215_The Popularity of Punutiys.json new file mode 100644 index 00000000..f7b53cd4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5215_The Popularity of Punutiys.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Disabled": true, + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5216_Breath of Foul Air.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5216_Breath of Foul Air.json new file mode 100644 index 00000000..8839e26b --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5216_Breath of Foul Air.json @@ -0,0 +1,145 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014500, + "Position": { + "X": -217.15118, + "Y": 109.57495, + "Z": 562.005 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18175 + ], + "AetheryteShortcut": "Kozama'uka - Earthenshire", + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 1 + } + ], + null, + null, + null + ] + }, + + { + "DataId": 2014501, + "Position": { + "X": -171.95392, + "Y": 109.57495, + "Z": 652.09424 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18175 + ], + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 2 + } + ], + null, + null, + null + ] + }, + { + "DataId": 2014502, + "Position": { + "X": -126.756714, + "Y": 109.57495, + "Z": 765.68225 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18175 + ], + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 3 + } + ], + null, + null, + null + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5217_Big Bellies to Fill.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5217_Big Bellies to Fill.json new file mode 100644 index 00000000..2da559a4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5217_Big Bellies to Fill.json @@ -0,0 +1,74 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1048848, + "Position": { + "X": 621.51514, + "Y": 119.49004, + "Z": 175.00574 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Many Fires", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5218_The Hand That Feeds.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5218_The Hand That Feeds.json new file mode 100644 index 00000000..1b751760 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5218_The Hand That Feeds.json @@ -0,0 +1,98 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 971.48047, + "Y": 7.1923084, + "Z": -254.86214 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1052331, + "Position": { + "X": 973.84595, + "Y": 7.192305, + "Z": -254.87152 + }, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1052332, + "Position": { + "X": 978.027, + "Y": 7.1869507, + "Z": -257.3739 + }, + "StopDistance": 8, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5219_Born to Run Away.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5219_Born to Run Away.json new file mode 100644 index 00000000..f7b53cd4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5219_Born to Run Away.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Disabled": true, + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5220_Bird Meat's Back on the Menu.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5220_Bird Meat's Back on the Menu.json new file mode 100644 index 00000000..f7b53cd4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5220_Bird Meat's Back on the Menu.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Disabled": true, + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5221_A Sympathetic Ear.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5221_A Sympathetic Ear.json new file mode 100644 index 00000000..f7b53cd4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5221_A Sympathetic Ear.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Disabled": true, + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5222_Worth the Weight.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5222_Worth the Weight.json new file mode 100644 index 00000000..f7b53cd4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5222_Worth the Weight.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Disabled": true, + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5223_In Time for Lunch.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5223_In Time for Lunch.json new file mode 100644 index 00000000..f7b53cd4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5223_In Time for Lunch.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Disabled": true, + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5224_His Swarm Enemy.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5224_His Swarm Enemy.json new file mode 100644 index 00000000..f7b53cd4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5224_His Swarm Enemy.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Disabled": true, + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5225_Seasoned Adventurer.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5225_Seasoned Adventurer.json new file mode 100644 index 00000000..f7b53cd4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5225_Seasoned Adventurer.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Disabled": true, + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5226_Animal Friendship.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5226_Animal Friendship.json new file mode 100644 index 00000000..f7b53cd4 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5226_Animal Friendship.json @@ -0,0 +1,58 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "Disabled": true, + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 770.70636, + "Y": 12.846572, + "Z": -260.59436 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051711, + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5194_A Tentative First Tour.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5194_A Tentative First Tour.json new file mode 100644 index 00000000..61b83af8 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5194_A Tentative First Tour.json @@ -0,0 +1,212 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 809.655, + "Y": 17.004526, + "Z": -257.89868 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + }, + { + "DataId": 1051710, + "Position": { + "X": 822.629, + "Y": 17.102613, + "Z": -263.20288 + }, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 809.655, + "Y": 17.004526, + "Z": -257.89868 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "Mount": true + }, + { + "DataId": 2014423, + "Position": { + "X": 727.0161, + "Y": 8.010925, + "Z": -284.3214 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1051722, + "Position": { + "X": 798.3672, + "Y": 13.076807, + "Z": -246.69269 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2014424, + "Position": { + "X": -90.62335, + "Y": 9.750427, + "Z": -515.31244 + }, + "StopDistance": 0.5, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 2014425, + "Position": { + "X": 55.74109, + "Y": 21.896606, + "Z": -75.63898 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 2014599, + "Position": { + "X": -300.1908, + "Y": 0.38146973, + "Z": -66.78876 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 2014600, + "Position": { + "X": -338.4604, + "Y": 0.38146973, + "Z": -88.944885 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 2014436, + "Position": { + "X": -370.4433, + "Y": 0.38146973, + "Z": -111.436646 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18170, + 18171 + ], + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 2014457, + "Position": { + "X": -332.8451, + "Y": 0.38146973, + "Z": -68.89453 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1051722, + "Position": { + "X": 798.3672, + "Y": 13.076807, + "Z": -246.69269 + }, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5195_Earthenshire Awaits.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5195_Earthenshire Awaits.json new file mode 100644 index 00000000..7ef90800 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5195_Earthenshire Awaits.json @@ -0,0 +1,226 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 809.655, + "Y": 17.004526, + "Z": -257.89868 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + }, + { + "DataId": 1051710, + "Position": { + "X": 822.629, + "Y": 17.102613, + "Z": -263.20288 + }, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1051731, + "Position": { + "X": -125.07825, + "Y": 9.842161, + "Z": -450.73627 + }, + "StopDistance": 2, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1051731, + "Position": { + "X": -125.07825, + "Y": 9.842161, + "Z": -450.73627 + }, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "Position": { + "X": 124.89976, + "Y": 3.8414032, + "Z": -279.8074 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1048815, + "Position": { + "X": 127.03125, + "Y": 3.8414035, + "Z": -279.92682 + }, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 2014427, + "Position": { + "X": 183.79492, + "Y": -0.015319824, + "Z": -331.53284 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 2014428, + "Position": { + "X": 210.43713, + "Y": -0.015319824, + "Z": -343.77057 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 2014429, + "Position": { + "X": 213.21423, + "Y": -0.015319824, + "Z": -354.84857 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 2014430, + "Position": { + "X": 229.93823, + "Y": -0.015319824, + "Z": -342.15308 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Mount": true, + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + }, + { + "DataId": 2014431, + "Position": { + "X": 252.18579, + "Y": -0.015319824, + "Z": -371.20624 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 8 + ] + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1048826, + "Position": { + "X": 672.4802, + "Y": 41.63828, + "Z": -527.36707 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "AetheryteShortcut": "Kozama'uka - Dock Poga" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1051710, + "Position": { + "X": 822.629, + "Y": 17.102613, + "Z": -263.20288 + }, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + } + ] + } + ] +} From 313179e154e288cb5528b2069deb2064f723c051 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 17 Nov 2024 19:49:35 +0100 Subject: [PATCH 58/95] Add Echoes of Vanadiel quests --- .../5233_An Otherworldly Encounter.json | 102 +++++++++ .../5234_It All Began with a Stone.json | 153 ++++++++++++++ .../5235_That World Was Called Vana'diel.json | 111 ++++++++++ .../Alliance Raid Quests/5236_Jeuno.json | 194 ++++++++++++++++++ 4 files changed, 560 insertions(+) create mode 100644 QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5233_An Otherworldly Encounter.json create mode 100644 QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5234_It All Began with a Stone.json create mode 100644 QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5235_That World Was Called Vana'diel.json create mode 100644 QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5236_Jeuno.json diff --git a/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5233_An Otherworldly Encounter.json b/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5233_An Otherworldly Encounter.json new file mode 100644 index 00000000..87de3002 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5233_An Otherworldly Encounter.json @@ -0,0 +1,102 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1051950, + "Position": { + "X": -15.335327, + "Y": -5.9003114E-09, + "Z": 31.3573 + }, + "TerritoryId": 1185, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Tuliyollal", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052166, + "Position": { + "X": 567.6814, + "Y": -131.41925, + "Z": 610.1013 + }, + "TerritoryId": 1189, + "InteractionType": "Interact", + "AetheryteShortcut": "Yak T'el - Mamook", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2014454, + "Position": { + "X": -525.8412, + "Y": -158.37347, + "Z": 541.46643 + }, + "TerritoryId": 1189, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1051954, + "Position": { + "X": -531.57855, + "Y": -152.53433, + "Z": 645.777 + }, + "TerritoryId": 1189, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "TerritoryId": 1189, + "InteractionType": "Duty", + "ContentFinderConditionId": 1015 + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1051956, + "Position": { + "X": 1.8463135, + "Y": 41.99997, + "Z": -2.456726 + }, + "StopDistance": 7, + "TerritoryId": 1264, + "InteractionType": "CompleteQuest", + "NextQuestId": 5234 + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5234_It All Began with a Stone.json b/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5234_It All Began with a Stone.json new file mode 100644 index 00000000..5d41c422 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5234_It All Began with a Stone.json @@ -0,0 +1,153 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1051957, + "Position": { + "X": -1.6327515, + "Y": 41.999977, + "Z": -0.7172241 + }, + "StopDistance": 6, + "TerritoryId": 1264, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1051957, + "Position": { + "X": -1.6327515, + "Y": 41.999977, + "Z": -0.7172241 + }, + "StopDistance": 6, + "TerritoryId": 1264, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1051959, + "Position": { + "X": -15.854187, + "Y": 41.99999, + "Z": -4.6845703 + }, + "TerritoryId": 1264, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1051961, + "Position": { + "X": -13.931519, + "Y": 41.999992, + "Z": -49.027283 + }, + "TerritoryId": 1264, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + }, + { + "DataId": 1051960, + "Position": { + "X": 15.457336, + "Y": 43.499985, + "Z": -137.25494 + }, + "TerritoryId": 1264, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 2014455, + "Position": { + "X": 71.213745, + "Y": 43.411865, + "Z": -84.00098 + }, + "TerritoryId": 1264, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_KINGEA102_05234_Q2_000_000", + "Answer": "TEXT_KINGEA102_05234_A2_000_001" + } + ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1051958, + "Position": { + "X": 1.8463135, + "Y": 41.99997, + "Z": -2.456726 + }, + "TerritoryId": 1264, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1051965, + "Position": { + "X": 1.8463135, + "Y": 41.99997, + "Z": -2.456726 + }, + "TerritoryId": 1264, + "InteractionType": "CompleteQuest", + "NextQuestId": 5235 + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5235_That World Was Called Vana'diel.json b/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5235_That World Was Called Vana'diel.json new file mode 100644 index 00000000..856a15aa --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5235_That World Was Called Vana'diel.json @@ -0,0 +1,111 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1051964, + "Position": { + "X": 0.56451416, + "Y": 41.999973, + "Z": -5.2339478 + }, + "TerritoryId": 1264, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1051967, + "Position": { + "X": 564.72107, + "Y": -131.41925, + "Z": 609.21643 + }, + "TerritoryId": 1189, + "InteractionType": "Interact", + "AetheryteShortcut": "Yak T'el - Mamook", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2014464, + "Position": { + "X": -412.2835, + "Y": 2.9754639, + "Z": -57.846985 + }, + "TerritoryId": 1185, + "InteractionType": "Interact", + "AetheryteShortcut": "Tuliyollal", + "AethernetShortcut": [ + "[Tuliyollal] Aetheryte Plaza", + "[Tuliyollal] Dirigible Landing" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1051971, + "Position": { + "X": -414.69446, + "Y": 3, + "Z": -55.10034 + }, + "StopDistance": 5, + "TerritoryId": 1185, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1051971, + "Position": { + "X": 93.53023, + "Y": -14, + "Z": 50.456287 + }, + "StopDistance": 0.25, + "TerritoryId": 1185, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Tuliyollal] Dirigible Landing", + "[Tuliyollal] Aetheryte Plaza" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1051972, + "Position": { + "X": 123.79639, + "Y": -14, + "Z": 27.115234 + }, + "StopDistance": 5, + "TerritoryId": 1185, + "InteractionType": "CompleteQuest", + "NextQuestId": 5236 + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5236_Jeuno.json b/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5236_Jeuno.json new file mode 100644 index 00000000..bb46c142 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Alliance Raid Quests/5236_Jeuno.json @@ -0,0 +1,194 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1051974, + "Position": { + "X": 121.782104, + "Y": -14, + "Z": 29.587158 + }, + "StopDistance": 7, + "TerritoryId": 1185, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052148, + "Position": { + "X": -527.245, + "Y": -152.47649, + "Z": 663.6301 + }, + "TerritoryId": 1189, + "InteractionType": "Interact", + "AetheryteShortcut": "Yak T'el - Mamook", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2014450, + "Position": { + "X": -528.37415, + "Y": -152.20874, + "Z": 671.13745 + }, + "TerritoryId": 1189, + "InteractionType": "Interact", + "TargetTerritoryId": 1265, + "SkipConditions": { + "StepIf": { + "InTerritory": [ + 1265 + ] + } + } + }, + { + "DataId": 1052131, + "Position": { + "X": -23.849854, + "Y": 43, + "Z": -25.192688 + }, + "TerritoryId": 1265, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1052132, + "Position": { + "X": -1.1139526, + "Y": 41.999992, + "Z": -110.15497 + }, + "TerritoryId": 1265, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1052139, + "Position": { + "X": 11.459534, + "Y": 41.99999, + "Z": -50.644714 + }, + "TerritoryId": 1265, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1051948, + "Position": { + "X": 11.36792, + "Y": 41.99999, + "Z": -50.55316 + }, + "StopDistance": 5, + "TerritoryId": 1265, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_KINGEA104_05236_Q1_000_000", + "Yes": true + }, + { + "Type": "YesNo", + "Prompt": "TEXT_KINGEA104_05236_Q2_000_000", + "Yes": true + }, + { + "Type": "List", + "Prompt": "TEXT_KINGEA104_05236_Q3_000_000", + "Answer": "TEXT_KINGEA104_05236_A3_000_002" + }, + { + "Type": "List", + "Prompt": "TEXT_KINGEA104_05236_Q5_000_000", + "Answer": "TEXT_KINGEA104_05236_A5_000_002" + }, + { + "Type": "List", + "Prompt": "TEXT_KINGEA104_05236_Q7_000_000", + "Answer": "TEXT_KINGEA104_05236_A7_000_001" + } + ], + "PointMenuChoices": [ + 0 + ] + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1052163, + "Position": { + "X": 5.9662476, + "Y": 41.999992, + "Z": -47.226746 + }, + "TerritoryId": 1265, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1052145, + "Position": { + "X": 139.45215, + "Y": 42, + "Z": -354.84857 + }, + "TerritoryId": 1185, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Tuliyollal", + "AethernetShortcut": [ + "[Tuliyollal] Aetheryte Plaza", + "[Tuliyollal] Brightploom Post" + ] + } + ] + } + ] +} From 54baec68bfba04f74edd356a58c668ef961b7c0b Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 17 Nov 2024 19:52:04 +0100 Subject: [PATCH 59/95] Misc 7.1 fixes --- .../Controller/CombatModules/ItemUseModule.cs | 3 +- Questionable/Controller/Steps/Common/Mount.cs | 14 +++++- Questionable/Data/GatheringData.cs | 4 +- Questionable/Data/QuestData.cs | 3 +- Questionable/Data/Sheets/QuestEx.cs | 46 ------------------- Questionable/Functions/ExcelFunctions.cs | 5 +- Questionable/Model/QuestInfo.cs | 8 ++-- 7 files changed, 23 insertions(+), 60 deletions(-) delete mode 100644 Questionable/Data/Sheets/QuestEx.cs diff --git a/Questionable/Controller/CombatModules/ItemUseModule.cs b/Questionable/Controller/CombatModules/ItemUseModule.cs index ec9adfa1..b5b6fd28 100644 --- a/Questionable/Controller/CombatModules/ItemUseModule.cs +++ b/Questionable/Controller/CombatModules/ItemUseModule.cs @@ -142,7 +142,8 @@ internal sealed class ItemUseModule : ICombatModule { BattleChara* battleChara = (BattleChara*)gameObject.Address; if (_combatData.CombatItemUse.Condition == ECombatItemUseCondition.Incapacitated) - return (battleChara->CombatTagType & 128u) != 0; // FIXME 7.1 + //return (byte)(((nint)battleChara + 0x1C68) & 0x40) != 0; // FIXME 7.1 + return false; if (_combatData.CombatItemUse.Condition == ECombatItemUseCondition.HealthPercent) return (100f * battleChara->Health / battleChara->MaxHealth) < _combatData.CombatItemUse.Value; diff --git a/Questionable/Controller/Steps/Common/Mount.cs b/Questionable/Controller/Steps/Common/Mount.cs index 2fb0d2d7..1e03d8e9 100644 --- a/Questionable/Controller/Steps/Common/Mount.cs +++ b/Questionable/Controller/Steps/Common/Mount.cs @@ -1,7 +1,9 @@ using System; using Dalamud.Game.ClientState.Conditions; +using Dalamud.Game.ClientState.Objects.SubKinds; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; +using FFXIVClientStructs.FFXIV.Client.Game.Character; using FFXIVClientStructs.FFXIV.Common.Math; using Microsoft.Extensions.Logging; using Questionable.Data; @@ -184,7 +186,17 @@ internal static class Mount : ETaskResult.TaskComplete; } - private unsafe bool IsUnmounting() => **(byte**)(clientState.LocalPlayer!.Address + 1432) == 1; + private unsafe bool IsUnmounting() + { + IPlayerCharacter? localPlayer = clientState.LocalPlayer; + if (localPlayer != null) + { + BattleChara* battleChara = (BattleChara*) localPlayer.Address; + return (battleChara->Mount.Flags & 1) == 1; + } + + return false; + } } public enum EMountIf diff --git a/Questionable/Data/GatheringData.cs b/Questionable/Data/GatheringData.cs index 1d11a1ba..41a6631b 100644 --- a/Questionable/Data/GatheringData.cs +++ b/Questionable/Data/GatheringData.cs @@ -36,8 +36,8 @@ internal sealed class GatheringData } _itemIdToCollectability = dataManager.GetSubrowExcelSheet() + .Flatten() .Where(x => x.RowId > 0) - .SelectMany(x => x) .Where(x => x.Slot is 2) .Select(x => new { @@ -50,8 +50,8 @@ internal sealed class GatheringData _npcForCustomDeliveries = dataManager.GetExcelSheet() .Where(x => x.RowId > 0) .SelectMany(x => dataManager.GetSubrowExcelSheet() + .Flatten() .Where(y => y.RowId == x.SatisfactionNpcParams.Last().SupplyIndex) - .SelectMany(y => y) .Select(y => new { ItemId = y.Item.RowId, diff --git a/Questionable/Data/QuestData.cs b/Questionable/Data/QuestData.cs index b055a7d7..0bc96b55 100644 --- a/Questionable/Data/QuestData.cs +++ b/Questionable/Data/QuestData.cs @@ -6,7 +6,6 @@ using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game.UI; using LLib.GameData; using Lumina.Excel.Sheets; -using Questionable.Data.Sheets; using Questionable.Model; using Questionable.Model.Questing; using Quest = Lumina.Excel.Sheets.Quest; @@ -55,7 +54,7 @@ internal sealed class QuestData List quests = [ - ..dataManager.GetExcelSheet() + ..dataManager.GetExcelSheet() .Where(x => x.RowId > 0) .Where(x => x.IssuerLocation.RowId > 0) .Select(x => new QuestInfo(x, questChapters.GetValueOrDefault(x.RowId), diff --git a/Questionable/Data/Sheets/QuestEx.cs b/Questionable/Data/Sheets/QuestEx.cs deleted file mode 100644 index 2dc47b8e..00000000 --- a/Questionable/Data/Sheets/QuestEx.cs +++ /dev/null @@ -1,46 +0,0 @@ -using Lumina.Excel; -using Lumina.Excel.Sheets; -using Lumina.Text.ReadOnly; - -namespace Questionable.Data.Sheets; - -// TODO Remove once fixed in dalamud -[Sheet("Quest", 0x1F8C7430)] -public readonly unsafe struct QuestEx(ExcelPage page, uint offset, uint row) : IExcelRow -{ - public uint RowId => row; - - public Quest Original { get; } = new(page, offset, row); - - public readonly ReadOnlySeString Id => page.ReadString(offset + 2420, offset); - public RowRef IssuerStart => RowRef.GetFirstValidRowOrUntyped(page.Module, page.ReadUInt32(offset + 2456), [typeof(EObjName), typeof(ENpcResident)], 882056187, page.Language); - public RowRef IssuerLocation => new(page.Module, page.ReadUInt32(offset + 2460), page.Language); - public RowRef JournalGenre => new(page.Module, page.ReadUInt32(offset + 2468), page.Language); - public ushort SortKey => page.ReadUInt16(offset + 2502); - public readonly RowRef Expansion => new(page.Module, (uint)page.ReadUInt8(offset + 2504), page.Language); - public readonly byte PreviousQuestJoin => page.ReadUInt8(offset + 2508); - public readonly RowRef ClassJobCategory0 => new(page.Module, (uint)page.ReadUInt8(offset + 2505), page.Language); - public readonly RowRef ClassJobCategory1 => new(page.Module, (uint)page.ReadUInt8(offset + 2507), page.Language); - public readonly RowRef Festival => new(page.Module, (uint)page.ReadUInt8(offset + 2517), page.Language); - public readonly byte Unknown7 => page.ReadUInt8(offset + 2509); - public readonly byte QuestLockJoin => page.ReadUInt8(offset + 2510); - public readonly RowRef GrandCompany => new(page.Module, (uint)page.ReadUInt8(offset + 2514), page.Language); - public readonly byte InstanceContentJoin => page.ReadUInt8(offset + 2516); - public readonly RowRef BeastTribe => new(page.Module, (uint)page.ReadUInt8(offset + 2520), page.Language); - public bool IsRepeatable => page.ReadPackedBool(offset + 2535, 1); - - public readonly Collection> PreviousQuest => new(page, offset, offset, &PreviousQuestCtor, 3); - private static RowRef PreviousQuestCtor(ExcelPage page, uint parentOffset, uint offset, uint i) => new(page.Module, page.ReadUInt32(offset + 2424 + i * 4), page.Language); - - public readonly Collection> QuestLock => new(page, offset, offset, &QuestLockCtor, 2); - private static RowRef QuestLockCtor(ExcelPage page, uint parentOffset, uint offset, uint i) => new(page.Module, page.ReadUInt32(offset + 2436 + i * 4), page.Language); - - public readonly Collection ClassJobLevel => new(page, offset, offset, &ClassJobLevelCtor, 2); - private static ushort ClassJobLevelCtor(ExcelPage page, uint parentOffset, uint offset, uint i) => page.ReadUInt16(offset + 2484 + i * 2); - - public Collection> InstanceContent => new(page, offset, offset, &InstanceContentCtor, 3); - private static RowRef InstanceContentCtor(ExcelPage page, uint parentOffset, uint offset, uint i) => new(page.Module, page.ReadUInt32(offset + 2444 + i * 4), page.Language); - - static QuestEx IExcelRow.Create(ExcelPage page, uint offset, uint row) => - new(page, offset, row); -} diff --git a/Questionable/Functions/ExcelFunctions.cs b/Questionable/Functions/ExcelFunctions.cs index 3109f942..48a9d105 100644 --- a/Questionable/Functions/ExcelFunctions.cs +++ b/Questionable/Functions/ExcelFunctions.cs @@ -3,13 +3,10 @@ using System.Linq; using Dalamud.Plugin.Services; using Dalamud.Utility; using LLib; -using Lumina.Excel; using Lumina.Excel.Exceptions; using Lumina.Excel.Sheets; -using Lumina.Text; using Lumina.Text.ReadOnly; using Microsoft.Extensions.Logging; -using Questionable.Data.Sheets; using Questionable.Model; using Quest = Questionable.Model.Quest; using GimmickYesNo = Lumina.Excel.Sheets.GimmickYesNo; @@ -41,7 +38,7 @@ internal sealed class ExcelFunctions if (currentQuest != null && excelSheetName == null) { var questRow = - _dataManager.GetExcelSheet().GetRowOrDefault((uint)currentQuest.Id.Value + + _dataManager.GetExcelSheet().GetRowOrDefault((uint)currentQuest.Id.Value + 0x10000); if (questRow == null) { diff --git a/Questionable/Model/QuestInfo.cs b/Questionable/Model/QuestInfo.cs index cca29890..bc766b67 100644 --- a/Questionable/Model/QuestInfo.cs +++ b/Questionable/Model/QuestInfo.cs @@ -4,14 +4,14 @@ using System.Collections.Immutable; using System.Linq; using FFXIVClientStructs.FFXIV.Client.UI.Agent; using LLib.GameData; -using Questionable.Data.Sheets; using Questionable.Model.Questing; +using ExcelQuest = Lumina.Excel.Sheets.Quest; namespace Questionable.Model; internal sealed class QuestInfo : IQuestInfo { - public QuestInfo(QuestEx quest, uint newGamePlusChapter, byte startingCity) + public QuestInfo(ExcelQuest quest, uint newGamePlusChapter, byte startingCity) { QuestId = new QuestId((ushort)(quest.RowId & 0xFFFF)); @@ -33,7 +33,7 @@ internal sealed class QuestInfo : IQuestInfo _ => "", }; - Name = $"{quest.Original.Name}{suffix}"; + Name = $"{quest.Name}{suffix}"; Level = quest.ClassJobLevel[0]; IssuerDataId = quest.IssuerStart.RowId; IsRepeatable = quest.IsRepeatable; @@ -55,7 +55,7 @@ internal sealed class QuestInfo : IQuestInfo JournalGenre = quest.JournalGenre.ValueNullable?.RowId; SortKey = quest.SortKey; IsMainScenarioQuest = quest.JournalGenre.ValueNullable?.JournalCategory.ValueNullable?.JournalSection.ValueNullable?.RowId is 0 or 1; - CompletesInstantly = quest.Original.TodoParams[0].ToDoCompleteSeq == 0; + CompletesInstantly = quest.TodoParams[0].ToDoCompleteSeq == 0; PreviousInstanceContent = quest.InstanceContent.Select(x => (ushort)x.RowId).Where(x => x != 0).ToList(); PreviousInstanceContentJoin = (EQuestJoin)quest.InstanceContentJoin; GrandCompany = (GrandCompany)quest.GrandCompany.RowId; From bd7025cc39ca2968b24bc44b4afacfd72766a144 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 17 Nov 2024 19:52:24 +0100 Subject: [PATCH 60/95] Version bump --- Directory.Build.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 1d114280..38a3a911 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,5 +1,5 @@ - 3.13 + 4.0 From af545ea29bc99db2635a6e8b3076c61e72673644 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 17 Nov 2024 20:36:32 +0100 Subject: [PATCH 61/95] Rebuild in VS --- GatheringPathRenderer/packages.lock.json | 8 ++++---- Questionable/packages.lock.json | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/GatheringPathRenderer/packages.lock.json b/GatheringPathRenderer/packages.lock.json index aae9abba..523f6969 100644 --- a/GatheringPathRenderer/packages.lock.json +++ b/GatheringPathRenderer/packages.lock.json @@ -4,9 +4,9 @@ "net8.0-windows7.0": { "DalamudPackager": { "type": "Direct", - "requested": "[2.1.13, )", - "resolved": "2.1.13", - "contentHash": "rMN1omGe8536f4xLMvx9NwfvpAc9YFFfeXJ1t4P4PE6Gu8WCIoFliR1sh07hM+bfODmesk/dvMbji7vNI+B/pQ==" + "requested": "[11.0.0, )", + "resolved": "11.0.0", + "contentHash": "bjT7XUlhIJSmsE/O76b7weUX+evvGQctbQB8aKXt94o+oPWxHpCepxAGMs7Thow3AzCyqWs7cOpp9/2wcgRRQA==" }, "DotNet.ReproducibleBuilds": { "type": "Direct", @@ -87,7 +87,7 @@ "llib": { "type": "Project", "dependencies": { - "DalamudPackager": "[2.1.13, )" + "DalamudPackager": "[11.0.0, )" } }, "questionable.model": { diff --git a/Questionable/packages.lock.json b/Questionable/packages.lock.json index eb9b1d2c..b358da6e 100644 --- a/Questionable/packages.lock.json +++ b/Questionable/packages.lock.json @@ -13,9 +13,9 @@ }, "DalamudPackager": { "type": "Direct", - "requested": "[2.1.13, )", - "resolved": "2.1.13", - "contentHash": "rMN1omGe8536f4xLMvx9NwfvpAc9YFFfeXJ1t4P4PE6Gu8WCIoFliR1sh07hM+bfODmesk/dvMbji7vNI+B/pQ==" + "requested": "[11.0.0, )", + "resolved": "11.0.0", + "contentHash": "bjT7XUlhIJSmsE/O76b7weUX+evvGQctbQB8aKXt94o+oPWxHpCepxAGMs7Thow3AzCyqWs7cOpp9/2wcgRRQA==" }, "DotNet.ReproducibleBuilds": { "type": "Direct", @@ -174,13 +174,13 @@ "gatheringpaths": { "type": "Project", "dependencies": { - "Questionable.Model": "[3.12.0, )" + "Questionable.Model": "[4.0.0, )" } }, "llib": { "type": "Project", "dependencies": { - "DalamudPackager": "[2.1.13, )" + "DalamudPackager": "[11.0.0, )" } }, "notificationmasterapi": { @@ -195,7 +195,7 @@ "questpaths": { "type": "Project", "dependencies": { - "Questionable.Model": "[3.12.0, )" + "Questionable.Model": "[4.0.0, )" } } } From 6342da8348260e45d0ba6fdaa88ee8c6fa98ebc0 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 17 Nov 2024 20:39:37 +0100 Subject: [PATCH 62/95] Version bump --- Directory.Build.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 38a3a911..ae3c9a42 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,5 +1,5 @@ - 4.0 + 4.1 From 993d6918eca3dbd08d9f26a675b1a1f31f6b05b5 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 18 Nov 2024 17:46:31 +0100 Subject: [PATCH 63/95] Add one of the missing weekly NieR quests --- .../4052_How to Catch an Automaton.json | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 QuestPaths/6.x - Endwalker/Alliance Raid Quests/4052_How to Catch an Automaton.json diff --git a/QuestPaths/6.x - Endwalker/Alliance Raid Quests/4052_How to Catch an Automaton.json b/QuestPaths/6.x - Endwalker/Alliance Raid Quests/4052_How to Catch an Automaton.json new file mode 100644 index 00000000..580c10a4 --- /dev/null +++ b/QuestPaths/6.x - Endwalker/Alliance Raid Quests/4052_How to Catch an Automaton.json @@ -0,0 +1,70 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1036044, + "Position": { + "X": 652.7046, + "Y": 297.47797, + "Z": -171.03839 + }, + "TerritoryId": 814, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Kholusia - Tomra", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_LUCKTA523_04052_Q1_000_000", + "Answer": "TEXT_LUCKTA523_04052_A1_000_001" + } + ] + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 552.4747, + "Y": 294.7846, + "Z": -137.54712 + }, + "TerritoryId": 814, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "KillEnemyDataIds": [ + 10391 + ], + "CombatItemUse": { + "ItemId": 2003071, + "Condition": "Health%", + "Value": 30 + }, + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1036044, + "Position": { + "X": 652.7046, + "Y": 297.47797, + "Z": -171.03839 + }, + "TerritoryId": 814, + "InteractionType": "CompleteQuest", + "Fly": true + } + ] + } + ] +} From a540fd8b8628a3f3f9b2005dfd2c9293bbbba7e3 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 18 Nov 2024 17:46:45 +0100 Subject: [PATCH 64/95] Add additional waypoint to 'Growing as a Guide' --- .../Pelupelu/Dailies/5205_Growing as a Guide.json | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5205_Growing as a Guide.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5205_Growing as a Guide.json index c576165f..6bb3e303 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5205_Growing as a Guide.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5205_Growing as a Guide.json @@ -31,9 +31,20 @@ "Sequence": 1, "Steps": [ { + "Position": { + "X": -165.49648, + "Y": 8.736965, + "Z": -401.72836 + }, "TerritoryId": 1188, - "InteractionType": "None", - "AetheryteShortcut": "Kozama'uka - Ok'hanu" + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Ok'hanu", + "Fly": true, + "SkipConditions": { + "StepIf": { + "Flying": "Locked" + } + } }, { "DataId": 1052307, From 0d7263604b6ce2afa5f2d0a0714d534792e9992e Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 18 Nov 2024 18:21:36 +0100 Subject: [PATCH 65/95] Updated Pelupelu quests to allow for multiple quests to be turned in at once --- ...1_Ferocious Foliage, Fearful Tourists.json | 16 ++++++- ...5202_Community Outreach in Kozanuakiy.json | 16 ++++++- .../Dailies/5203_Preventative Measures.json | 32 +++++++++++++- .../Dailies/5204_Burden of Beasts.json | 32 +++++++++++++- .../5210_The Rudiments of Fiend Removal.json | 16 ++++++- .../Dailies/5212_Starting from Scrap.json | 16 ++++++- .../Dailies/5218_The Hand That Feeds.json | 16 ++++++- Questionable/Functions/QuestFunctions.cs | 43 ++++++++++++++++--- 8 files changed, 173 insertions(+), 14 deletions(-) diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5201_Ferocious Foliage, Fearful Tourists.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5201_Ferocious Foliage, Fearful Tourists.json index 056eab0b..933c123d 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5201_Ferocious Foliage, Fearful Tourists.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5201_Ferocious Foliage, Fearful Tourists.json @@ -53,7 +53,21 @@ null, null, null - ] + ], + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "TerritoryId": 1188, + "MaximumDistance": 300 + } + } + } }, { "DataId": 2014481, diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5202_Community Outreach in Kozanuakiy.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5202_Community Outreach in Kozanuakiy.json index 87cadfa6..eb50d2c3 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5202_Community Outreach in Kozanuakiy.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5202_Community Outreach in Kozanuakiy.json @@ -39,7 +39,21 @@ }, "TerritoryId": 1188, "InteractionType": "Interact", - "Fly": true + "Fly": true, + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "TerritoryId": 1188, + "MaximumDistance": 300 + } + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.json index 262ce23e..cb54fe59 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5203_Preventative Measures.json @@ -48,7 +48,21 @@ null, null, 64 - ] + ], + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "TerritoryId": 1188, + "MaximumDistance": 300 + } + } + } }, { "DataId": 2014485, @@ -101,7 +115,21 @@ }, "TerritoryId": 1188, "InteractionType": "WalkTo", - "Fly": true + "Fly": true, + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "TerritoryId": 1188, + "MaximumDistance": 300 + } + } + } }, { "DataId": 1051711, diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json index 549951cf..f5bcdb6f 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json @@ -39,7 +39,21 @@ }, "TerritoryId": 1188, "InteractionType": "Interact", - "Fly": true + "Fly": true, + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "TerritoryId": 1188, + "MaximumDistance": 300 + } + } + } } ] }, @@ -85,7 +99,21 @@ }, "TerritoryId": 1188, "InteractionType": "WalkTo", - "Fly": true + "Fly": true, + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "TerritoryId": 1188, + "MaximumDistance": 300 + } + } + } }, { "DataId": 1051711, diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json index 1203c94c..eb5c727e 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json @@ -40,7 +40,21 @@ }, "TerritoryId": 1188, "InteractionType": "Interact", - "Fly": true + "Fly": true, + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "TerritoryId": 1188, + "MaximumDistance": 300 + } + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5212_Starting from Scrap.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5212_Starting from Scrap.json index f4add830..264ed756 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5212_Starting from Scrap.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5212_Starting from Scrap.json @@ -47,7 +47,21 @@ null, null, 128 - ] + ], + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "TerritoryId": 1188, + "MaximumDistance": 300 + } + } + } }, { "DataId": 2014495, diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5218_The Hand That Feeds.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5218_The Hand That Feeds.json index 1b751760..744e96ea 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5218_The Hand That Feeds.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5218_The Hand That Feeds.json @@ -38,7 +38,21 @@ }, "TerritoryId": 1188, "InteractionType": "WalkTo", - "Fly": true + "Fly": true, + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "TerritoryId": 1188, + "MaximumDistance": 300 + } + } + } }, { "DataId": 1052331, diff --git a/Questionable/Functions/QuestFunctions.cs b/Questionable/Functions/QuestFunctions.cs index 9211514d..fa837cac 100644 --- a/Questionable/Functions/QuestFunctions.cs +++ b/Questionable/Functions/QuestFunctions.cs @@ -122,6 +122,7 @@ internal sealed unsafe class QuestFunctions // do the MSQ; if a side quest is the first item do that side quest. // // If no quests are marked as 'priority', accepting a new quest adds it to the top of the list. + List<(ElementId Quest, byte Sequence)> trackedQuests = []; for (int i = questManager->TrackedQuests.Length - 1; i >= 0; --i) { ElementId currentQuest; @@ -129,22 +130,40 @@ internal sealed unsafe class QuestFunctions switch (trackedQuest.QuestType) { default: - continue; + break; case 1: // normal quest currentQuest = new QuestId(questManager->NormalQuests[trackedQuest.Index].QuestId); if (_questRegistry.IsKnownQuest(currentQuest)) - return (currentQuest, QuestManager.GetQuestSequence(currentQuest.Value)); - continue; + trackedQuests.Add((currentQuest, QuestManager.GetQuestSequence(currentQuest.Value))); + break; case 2: // leve currentQuest = new LeveId(questManager->LeveQuests[trackedQuest.Index].LeveId); if (_questRegistry.IsKnownQuest(currentQuest)) - return (currentQuest, questManager->GetLeveQuestById(currentQuest.Value)->Sequence); - continue; + trackedQuests.Add((currentQuest, questManager->GetLeveQuestById(currentQuest.Value)->Sequence)); + break; } } + if (trackedQuests.Count > 0) + { + // if we have multiple quests to turn in for an allied society, try and complete all of them + var (firstTrackedQuest, firstTrackedSequence) = trackedQuests.First(); + EAlliedSociety firstTrackedAlliedSociety = GetCommonAlliedSocietyTurnIn(firstTrackedQuest); + if (firstTrackedAlliedSociety != EAlliedSociety.None && firstTrackedSequence == 255) + { + foreach (var (quest, sequence) in trackedQuests.Skip(1)) + { + // only if the other quest isn't ready to be turned in + if (GetCommonAlliedSocietyTurnIn(quest) == firstTrackedAlliedSociety && sequence != 255) + return (quest, sequence); + } + } + + return (firstTrackedQuest, firstTrackedSequence); + } + ElementId? priorityQuest = GetNextPriorityQuestThatCanBeAccepted(); if (priorityQuest != null) { @@ -221,6 +240,20 @@ internal sealed unsafe class QuestFunctions return (currentQuest, QuestManager.GetQuestSequence(currentQuest.Value)); } + private static EAlliedSociety GetCommonAlliedSocietyTurnIn(ElementId elementId) + { + if (elementId is QuestId questId) + { + return questId.Value switch + { + >= 5199 and <= 5226 => EAlliedSociety.Pelupelu, + _ => EAlliedSociety.None, + }; + } + + return EAlliedSociety.None; + } + public QuestProgressInfo? GetQuestProgressInfo(ElementId elementId) { if (elementId is QuestId questId) From 3b1bfcaadeb7d900a6fd10f40c71dcfb6364f0a1 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 18 Nov 2024 19:02:01 +0100 Subject: [PATCH 66/95] Add 'Every Anden of the Rainbow' --- .../4716_Every Anden of the Rainbow.json | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4716_Every Anden of the Rainbow.json diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4716_Every Anden of the Rainbow.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4716_Every Anden of the Rainbow.json new file mode 100644 index 00000000..d0744923 --- /dev/null +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4716_Every Anden of the Rainbow.json @@ -0,0 +1,83 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1044547, + "Position": { + "X": -241.68768, + "Y": 51.058994, + "Z": 620.8744 + }, + "TerritoryId": 816, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Il Mheg - Lydha Lran", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_SUBCTS681_04716_Q1_000_003", + "Answer": "TEXT_SUBCTS681_04716_A1_000_001" + } + ] + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1044560, + "Position": { + "X": -241.68768, + "Y": 51.058994, + "Z": 620.8744 + }, + "TerritoryId": 816, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2013247, + "Position": { + "X": 428.15283, + "Y": 3.2196045, + "Z": 23.483582 + }, + "TerritoryId": 817, + "InteractionType": "Interact", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1044560, + "Position": { + "X": -241.68768, + "Y": 51.058994, + "Z": 620.8744 + }, + "TerritoryId": 816, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Il Mheg - Lydha Lran", + "Fly": true + } + ] + } + ] +} From d4c1b4b3aca6a7b6b7039b029cedff4307bea3b6 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 18 Nov 2024 19:05:12 +0100 Subject: [PATCH 67/95] Add 'A Labor of Leaf' --- .../4716_Every Anden of the Rainbow.json | 3 +- .../Anden/4717_A Labor of Leaf.json | 44 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4717_A Labor of Leaf.json diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4716_Every Anden of the Rainbow.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4716_Every Anden of the Rainbow.json index d0744923..83810e3c 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4716_Every Anden of the Rainbow.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4716_Every Anden of the Rainbow.json @@ -75,7 +75,8 @@ "TerritoryId": 816, "InteractionType": "CompleteQuest", "AetheryteShortcut": "Il Mheg - Lydha Lran", - "Fly": true + "Fly": true, + "NextQuestId": 4717 } ] } diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4717_A Labor of Leaf.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4717_A Labor of Leaf.json new file mode 100644 index 00000000..d40d2af4 --- /dev/null +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/4717_A Labor of Leaf.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1044550, + "Position": { + "X": -239.70398, + "Y": 51.05899, + "Z": 622.2477 + }, + "StopDistance": 5, + "TerritoryId": 816, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Il Mheg - Lydha Lran", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1044562, + "Position": { + "X": -294.97223, + "Y": 67.46317, + "Z": 603.6621 + }, + "TerritoryId": 816, + "InteractionType": "CompleteQuest", + "Fly": true + } + ] + } + ] +} From ed4d279432373bd234b8893eedeb094a2b49780d Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 18 Nov 2024 19:05:22 +0100 Subject: [PATCH 68/95] Fix gathering for tribal quests --- Questionable/Controller/MiniTaskController.cs | 4 + Questionable/Controller/Steps/ETaskResult.cs | 5 + .../Controller/Steps/Shared/Gather.cs | 110 ++++++++++-------- Questionable/Controller/Steps/TaskExecutor.cs | 7 ++ Questionable/Controller/Steps/TaskQueue.cs | 5 + Questionable/QuestionablePlugin.cs | 3 +- 6 files changed, 86 insertions(+), 48 deletions(-) diff --git a/Questionable/Controller/MiniTaskController.cs b/Questionable/Controller/MiniTaskController.cs index 06850818..06e5d874 100644 --- a/Questionable/Controller/MiniTaskController.cs +++ b/Questionable/Controller/MiniTaskController.cs @@ -120,11 +120,15 @@ internal abstract class MiniTaskController return; case ETaskResult.TaskComplete: + case ETaskResult.CreateNewTasks: _logger.LogInformation("{Task} → {Result}, remaining tasks: {RemainingTaskCount}", _taskQueue.CurrentTaskExecutor.CurrentTask, result, _taskQueue.RemainingTasks.Count()); OnTaskComplete(_taskQueue.CurrentTaskExecutor.CurrentTask); + if (result == ETaskResult.CreateNewTasks && _taskQueue.CurrentTaskExecutor is IExtraTaskCreator extraTaskCreator) + _taskQueue.EnqueueAll(extraTaskCreator.CreateExtraTasks()); + _taskQueue.CurrentTaskExecutor = null; // handled in next update diff --git a/Questionable/Controller/Steps/ETaskResult.cs b/Questionable/Controller/Steps/ETaskResult.cs index 647e6ae1..6ecfcba6 100644 --- a/Questionable/Controller/Steps/ETaskResult.cs +++ b/Questionable/Controller/Steps/ETaskResult.cs @@ -11,6 +11,11 @@ internal enum ETaskResult /// SkipRemainingTasksForStep, + /// + /// Assumes the task executor implements . + /// + CreateNewTasks, + NextStep, End, } diff --git a/Questionable/Controller/Steps/Shared/Gather.cs b/Questionable/Controller/Steps/Shared/Gather.cs index 13671d8d..73dd8d12 100644 --- a/Questionable/Controller/Steps/Shared/Gather.cs +++ b/Questionable/Controller/Steps/Shared/Gather.cs @@ -4,7 +4,6 @@ using System.Linq; using Dalamud.Game.Text; using Dalamud.Game.Text.SeStringHandling; using Dalamud.Plugin.Services; -using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions; using FFXIVClientStructs.FFXIV.Client.Game; using LLib.GameData; using Microsoft.Extensions.DependencyInjection; @@ -19,14 +18,7 @@ namespace Questionable.Controller.Steps.Shared; internal static class Gather { - internal sealed class Factory( - IServiceProvider serviceProvider, - MovementController movementController, - GatheringPointRegistry gatheringPointRegistry, - IClientState clientState, - GatheringData gatheringData, - TerritoryData territoryData, - ILogger logger) : ITaskFactory + internal sealed class Factory : ITaskFactory { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { @@ -35,46 +27,70 @@ internal static class Gather foreach (var itemToGather in step.ItemsToGather) { - EClassJob currentClassJob = (EClassJob)clientState.LocalPlayer!.ClassJob.RowId; - if (!gatheringData.TryGetGatheringPointId(itemToGather.ItemId, currentClassJob, - out GatheringPointId? gatheringPointId)) - throw new TaskException($"No gathering point found for item {itemToGather.ItemId}"); - - if (!gatheringPointRegistry.TryGetGatheringPoint(gatheringPointId, out GatheringRoot? gatheringRoot)) - throw new TaskException($"No path found for gathering point {gatheringPointId}"); - - if (HasRequiredItems(itemToGather)) - continue; - - using (var _ = logger.BeginScope("Gathering(inner)")) - { - 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 WaitAtEnd.NextStep) - yield return new SkipMarker(); - else - yield return task; - } - } - - ushort territoryId = gatheringRoot.Steps.Last().TerritoryId; - yield return new WaitCondition.Task(() => clientState.TerritoryType == territoryId, - $"Wait(territory: {territoryData.GetNameAndId(territoryId)})"); - - yield return new WaitCondition.Task(() => movementController.IsNavmeshReady, - "Wait(navmesh ready)"); - - yield return new GatheringTask(gatheringPointId, itemToGather); - yield return new WaitAtEnd.WaitDelay(); + yield return new DelayedGatheringTask(itemToGather, quest); } } + } + + internal sealed record DelayedGatheringTask(GatheredItem GatheredItem, Quest Quest) : ITask + { + public override string ToString() => $"Gathering(pending for {GatheredItem.ItemId})"; + } + + internal sealed class DelayedGatheringExecutor( + MovementController movementController, + GatheringData gatheringData, + GatheringPointRegistry gatheringPointRegistry, + TerritoryData territoryData, + IClientState clientState, + IServiceProvider serviceProvider, + ILogger logger) : TaskExecutor, IExtraTaskCreator + { + protected override bool Start() => true; + + public override ETaskResult Update() => ETaskResult.CreateNewTasks; + + public IEnumerable CreateExtraTasks() + { + EClassJob currentClassJob = (EClassJob)clientState.LocalPlayer!.ClassJob.RowId; + if (!gatheringData.TryGetGatheringPointId(Task.GatheredItem.ItemId, currentClassJob, + out GatheringPointId? gatheringPointId)) + throw new TaskException($"No gathering point found for item {Task.GatheredItem.ItemId}"); + + if (!gatheringPointRegistry.TryGetGatheringPoint(gatheringPointId, out GatheringRoot? gatheringRoot)) + throw new TaskException($"No path found for gathering point {gatheringPointId}"); + + if (HasRequiredItems(Task.GatheredItem)) + yield break; + + using (var _ = logger.BeginScope("Gathering(inner)")) + { + QuestSequence gatheringSequence = new QuestSequence + { + Sequence = 0, + Steps = gatheringRoot.Steps + }; + foreach (var gatheringStep in gatheringSequence.Steps) + { + foreach (var task in serviceProvider.GetRequiredService() + .CreateTasks(Task.Quest, gatheringSequence, gatheringStep)) + if (task is WaitAtEnd.NextStep) + yield return new SkipMarker(); + else + yield return task; + } + } + + ushort territoryId = gatheringRoot.Steps.Last().TerritoryId; + yield return new WaitCondition.Task(() => clientState.TerritoryType == territoryId, + $"Wait(territory: {territoryData.GetNameAndId(territoryId)})"); + + yield return new WaitCondition.Task(() => movementController.IsNavmeshReady, + "Wait(navmesh ready)"); + + yield return new GatheringTask(gatheringPointId, Task.GatheredItem); + yield return new WaitAtEnd.WaitDelay(); + } private unsafe bool HasRequiredItems(GatheredItem itemToGather) { diff --git a/Questionable/Controller/Steps/TaskExecutor.cs b/Questionable/Controller/Steps/TaskExecutor.cs index 9f1873f6..d0315dbc 100644 --- a/Questionable/Controller/Steps/TaskExecutor.cs +++ b/Questionable/Controller/Steps/TaskExecutor.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using Questionable.Model; namespace Questionable.Controller.Steps; @@ -16,6 +18,11 @@ internal interface ITaskExecutor ETaskResult Update(); } +internal interface IExtraTaskCreator : ITaskExecutor +{ + IEnumerable CreateExtraTasks(); +} + internal abstract class TaskExecutor : ITaskExecutor where T : class, ITask { diff --git a/Questionable/Controller/Steps/TaskQueue.cs b/Questionable/Controller/Steps/TaskQueue.cs index 7d30706a..04cb273c 100644 --- a/Questionable/Controller/Steps/TaskQueue.cs +++ b/Questionable/Controller/Steps/TaskQueue.cs @@ -18,6 +18,11 @@ internal sealed class TaskQueue _tasks.Add(task); } + public void EnqueueAll(IEnumerable tasks) + { + _tasks.InsertRange(0, tasks); + } + public bool TryDequeue([NotNullWhen(true)] out ITask? task) { task = _tasks.FirstOrDefault(); diff --git a/Questionable/QuestionablePlugin.cs b/Questionable/QuestionablePlugin.cs index ea0eefca..7e9fb3f5 100644 --- a/Questionable/QuestionablePlugin.cs +++ b/Questionable/QuestionablePlugin.cs @@ -147,7 +147,6 @@ public sealed class QuestionablePlugin : IDalamudPlugin .AddTaskFactoryAndExecutor(); serviceCollection.AddTaskFactory(); - serviceCollection.AddTaskFactoryAndExecutor(); serviceCollection.AddTaskExecutor(); serviceCollection .AddTaskFactoryAndExecutor(); serviceCollection .AddTaskFactoryAndExecutor(); + serviceCollection.AddTaskFactoryAndExecutor(); + serviceCollection.AddTaskExecutor(); serviceCollection .AddTaskFactoryAndExecutor(); From c65da42cd11817083ab550c0165e3825d5c8411e Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 18 Nov 2024 19:35:53 +0100 Subject: [PATCH 69/95] Add 'A Present from the Present' --- .../Raid Quests/4760_Guided by the Past.json | 16 ++- .../5252_A Present from the Present.json | 126 ++++++++++++++++++ 2 files changed, 139 insertions(+), 3 deletions(-) create mode 100644 QuestPaths/6.x - Endwalker/Raid Quests/5252_A Present from the Present.json diff --git a/QuestPaths/6.x - Endwalker/Raid Quests/4760_Guided by the Past.json b/QuestPaths/6.x - Endwalker/Raid Quests/4760_Guided by the Past.json index 3a34daf7..76d7ed85 100644 --- a/QuestPaths/6.x - Endwalker/Raid Quests/4760_Guided by the Past.json +++ b/QuestPaths/6.x - Endwalker/Raid Quests/4760_Guided by the Past.json @@ -21,6 +21,17 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": 807.9048, + "Y": 152.2857, + "Z": -243.60707 + }, + "TerritoryId": 961, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Elpis - Anagnorisis", + "Fly": true + }, { "DataId": 2012293, "Position": { @@ -30,8 +41,6 @@ }, "TerritoryId": 961, "InteractionType": "Interact", - "AetheryteShortcut": "Elpis - Anagnorisis", - "Fly": true, "TargetTerritoryId": 1025 }, { @@ -120,7 +129,8 @@ "Z": 301.9912 }, "TerritoryId": 956, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 5252 } ] } diff --git a/QuestPaths/6.x - Endwalker/Raid Quests/5252_A Present from the Present.json b/QuestPaths/6.x - Endwalker/Raid Quests/5252_A Present from the Present.json new file mode 100644 index 00000000..ef09a272 --- /dev/null +++ b/QuestPaths/6.x - Endwalker/Raid Quests/5252_A Present from the Present.json @@ -0,0 +1,126 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1048609, + "Position": { + "X": -10.696594, + "Y": 2.4000525, + "Z": -31.174255 + }, + "TerritoryId": 962, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Old Sharlayan", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1045332, + "Position": { + "X": -639.704, + "Y": -27.177149, + "Z": 301.9912 + }, + "TerritoryId": 956, + "InteractionType": "Interact", + "AetheryteShortcut": "Labyrinthos - Aporia" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": 807.9048, + "Y": 152.2857, + "Z": -243.60707 + }, + "TerritoryId": 961, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Elpis - Anagnorisis", + "Fly": true + }, + { + "DataId": 2012293, + "Position": { + "X": 809.9336, + "Y": 151.81189, + "Z": -243.42719 + }, + "TerritoryId": 961, + "InteractionType": "Interact", + "TargetTerritoryId": 1025 + }, + { + "DataId": 1048610, + "Position": { + "X": 93.94971, + "Y": -1E-11, + "Z": 61.020752 + }, + "TerritoryId": 1025, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2014542, + "Position": { + "X": 104.57007, + "Y": -0.015319824, + "Z": 46.25 + }, + "TerritoryId": 1025, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1048610, + "Position": { + "X": 93.94971, + "Y": -1E-11, + "Z": 61.020752 + }, + "TerritoryId": 1025, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1045332, + "Position": { + "X": -639.704, + "Y": -27.177149, + "Z": 301.9912 + }, + "TerritoryId": 956, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Labyrinthos - Aporia" + } + ] + } + ] +} From f71ddeddfa90f4563fe1ff732cc5ea0f20b238c1 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 18 Nov 2024 19:59:57 +0100 Subject: [PATCH 70/95] Add extra waypoint to attune to Dock Poga aetheryte during first pelupelu quest --- .../Story/5193_An Intrepid New Enterprise.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5193_An Intrepid New Enterprise.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5193_An Intrepid New Enterprise.json index 7376bf28..f662907f 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5193_An Intrepid New Enterprise.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5193_An Intrepid New Enterprise.json @@ -163,6 +163,21 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 780.3438, + "Y": 13.823656, + "Z": -238.32625 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "Fly": true, + "SkipConditions": { + "StepIf": { + "AetheryteUnlocked": "Kozama'uka - Dock Poga" + } + } + }, { "TerritoryId": 1188, "InteractionType": "AttuneAetheryte", From 3ab1069ab760dc7b97e378536bd105e45843df28 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 18 Nov 2024 20:51:49 +0100 Subject: [PATCH 71/95] Fix item use in 'Strange Bedfellows' and 'Combat Evolved' --- .../Labyrinthos/4326_Seeing Red.json | 62 +++++++++++++++++++ .../Controller/CombatModules/ItemUseModule.cs | 3 +- 2 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 QuestPaths/6.x - Endwalker/Side Quests/Labyrinthos/4326_Seeing Red.json diff --git a/QuestPaths/6.x - Endwalker/Side Quests/Labyrinthos/4326_Seeing Red.json b/QuestPaths/6.x - Endwalker/Side Quests/Labyrinthos/4326_Seeing Red.json new file mode 100644 index 00000000..d3e3e1ed --- /dev/null +++ b/QuestPaths/6.x - Endwalker/Side Quests/Labyrinthos/4326_Seeing Red.json @@ -0,0 +1,62 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1037575, + "Position": { + "X": 6.454529, + "Y": -31.530432, + "Z": -78.14148 + }, + "TerritoryId": 956, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 379.89767, + "Y": 68.15723, + "Z": -169.26231 + }, + "TerritoryId": 956, + "InteractionType": "Combat", + "EnemySpawnType": "OverworldEnemies", + "KillEnemyDataIds": [ + 13415 + ], + "CombatItemUse": { + "ItemId": 2003316, + "Condition": "Health%", + "Value": 50 + }, + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1037575, + "Position": { + "X": 6.454529, + "Y": -31.530432, + "Z": -78.14148 + }, + "TerritoryId": 956, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet", + "Fly": true + } + ] + } + ] +} diff --git a/Questionable/Controller/CombatModules/ItemUseModule.cs b/Questionable/Controller/CombatModules/ItemUseModule.cs index b5b6fd28..1693edd5 100644 --- a/Questionable/Controller/CombatModules/ItemUseModule.cs +++ b/Questionable/Controller/CombatModules/ItemUseModule.cs @@ -142,8 +142,7 @@ internal sealed class ItemUseModule : ICombatModule { BattleChara* battleChara = (BattleChara*)gameObject.Address; if (_combatData.CombatItemUse.Condition == ECombatItemUseCondition.Incapacitated) - //return (byte)(((nint)battleChara + 0x1C68) & 0x40) != 0; // FIXME 7.1 - return false; + return (*(byte*)((nint)battleChara + 0x1C68) & 0x40) != 0; if (_combatData.CombatItemUse.Condition == ECombatItemUseCondition.HealthPercent) return (100f * battleChara->Health / battleChara->MaxHealth) < _combatData.CombatItemUse.Value; From 28795e68e47c0c6a3768fd9905a874363fea5d20 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 18 Nov 2024 20:56:13 +0100 Subject: [PATCH 72/95] Version bump, remove redundant nullability checks, minor cleanup --- Directory.Build.targets | 2 +- LLib | 2 +- .../Controller/GameUi/InteractionUiController.cs | 6 +++--- Questionable/Data/AetherCurrentData.cs | 2 +- Questionable/Data/QuestData.cs | 2 +- Questionable/Functions/ChatFunctions.cs | 2 +- Questionable/Functions/QuestFunctions.cs | 7 ++----- Questionable/Model/SatisfactionSupplyInfo.cs | 2 +- .../JournalComponents/GatheringJournalComponent.cs | 10 +++++----- 9 files changed, 16 insertions(+), 19 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index ae3c9a42..ca80e97a 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,5 +1,5 @@ - 4.1 + 4.2 diff --git a/LLib b/LLib index 70b0bef2..e4bbc05e 160000 --- a/LLib +++ b/LLib @@ -1 +1 @@ -Subproject commit 70b0bef2459898a70f7b34b4d196bbaeb72397b1 +Subproject commit e4bbc05ede6f6f01e7028b24614ed8cb333e909c diff --git a/Questionable/Controller/GameUi/InteractionUiController.cs b/Questionable/Controller/GameUi/InteractionUiController.cs index 797093dd..1ea84928 100644 --- a/Questionable/Controller/GameUi/InteractionUiController.cs +++ b/Questionable/Controller/GameUi/InteractionUiController.cs @@ -756,12 +756,12 @@ internal sealed class InteractionUiController : IDisposable private bool TryFindWarp(ushort targetTerritoryId, string actualPrompt, [NotNullWhen(true)] out uint? warpId, [NotNullWhen(true)] out string? warpText) { - var warps = _dataManager.GetExcelSheet()! + var warps = _dataManager.GetExcelSheet() .Where(x => x.RowId > 0 && x.TerritoryType.RowId == targetTerritoryId); foreach (var entry in warps) { - string? excelName = entry.Name.ToString(); - string? excelQuestion = entry.Question.ToString(); + string excelName = entry.Name.ToString(); + string excelQuestion = entry.Question.ToString(); if (!string.IsNullOrEmpty(excelQuestion) && GameFunctions.GameStringEquals(excelQuestion, actualPrompt)) { diff --git a/Questionable/Data/AetherCurrentData.cs b/Questionable/Data/AetherCurrentData.cs index 04bb7c37..ac9bb414 100644 --- a/Questionable/Data/AetherCurrentData.cs +++ b/Questionable/Data/AetherCurrentData.cs @@ -11,7 +11,7 @@ internal sealed class AetherCurrentData public AetherCurrentData(IDataManager dataManager) { - _overworldCurrents = dataManager.GetExcelSheet()! + _overworldCurrents = dataManager.GetExcelSheet() .Where(x => x.RowId > 0) .Where(x => x.Territory.IsValid) .ToImmutableDictionary( diff --git a/Questionable/Data/QuestData.cs b/Questionable/Data/QuestData.cs index 0bc96b55..77b20e01 100644 --- a/Questionable/Data/QuestData.cs +++ b/Questionable/Data/QuestData.cs @@ -40,7 +40,7 @@ internal sealed class QuestData public QuestData(IDataManager dataManager) { Dictionary questChapters = - dataManager.GetExcelSheet()! + dataManager.GetExcelSheet() .Where(x => x.RowId > 0 && x.Quest.RowId > 0) .ToDictionary(x => x.Quest.RowId, x => x.Redo.RowId); diff --git a/Questionable/Functions/ChatFunctions.cs b/Questionable/Functions/ChatFunctions.cs index d53ed9be..a0f935ab 100644 --- a/Questionable/Functions/ChatFunctions.cs +++ b/Questionable/Functions/ChatFunctions.cs @@ -46,7 +46,7 @@ internal sealed unsafe class ChatFunctions .Where(x => x.TextCommand.IsValid) .Select(x => (x.RowId, Command: x.TextCommand.Value.Command.ToString())) .Where(x => !string.IsNullOrEmpty(x.Command) && x.Command.StartsWith('/')) - .ToDictionary(x => (EEmote)x.RowId, x => x.Command!) + .ToDictionary(x => (EEmote)x.RowId, x => x.Command) .AsReadOnly(); } diff --git a/Questionable/Functions/QuestFunctions.cs b/Questionable/Functions/QuestFunctions.cs index fa837cac..1ef56c4e 100644 --- a/Questionable/Functions/QuestFunctions.cs +++ b/Questionable/Functions/QuestFunctions.cs @@ -129,9 +129,6 @@ internal sealed unsafe class QuestFunctions var trackedQuest = questManager->TrackedQuests[i]; switch (trackedQuest.QuestType) { - default: - break; - case 1: // normal quest currentQuest = new QuestId(questManager->NormalQuests[trackedQuest.Index].QuestId); if (_questRegistry.IsKnownQuest(currentQuest)) @@ -629,7 +626,7 @@ internal sealed unsafe class QuestFunctions public bool IsClassJobUnlocked(EClassJob classJob) { - var classJobRow = _dataManager.GetExcelSheet()!.GetRow((uint)classJob)!; + var classJobRow = _dataManager.GetExcelSheet().GetRow((uint)classJob); var questId = (ushort)classJobRow.UnlockQuest.RowId; if (questId != 0) return IsQuestComplete(new QuestId(questId)); @@ -640,7 +637,7 @@ internal sealed unsafe class QuestFunctions public bool IsJobUnlocked(EClassJob classJob) { - var classJobRow = _dataManager.GetExcelSheet()!.GetRow((uint)classJob)!; + var classJobRow = _dataManager.GetExcelSheet().GetRow((uint)classJob); return IsClassJobUnlocked((EClassJob)classJobRow.ClassJobParent.RowId); } diff --git a/Questionable/Model/SatisfactionSupplyInfo.cs b/Questionable/Model/SatisfactionSupplyInfo.cs index e2c25ad8..21c92936 100644 --- a/Questionable/Model/SatisfactionSupplyInfo.cs +++ b/Questionable/Model/SatisfactionSupplyInfo.cs @@ -15,7 +15,7 @@ internal sealed class SatisfactionSupplyInfo : IQuestInfo IssuerDataId = npc.Npc.RowId; Level = npc.LevelUnlock; SortKey = QuestId.Value; - Expansion = (EExpansionVersion)npc.QuestRequired.Value!.Expansion.RowId; + Expansion = (EExpansionVersion)npc.QuestRequired.Value.Expansion.RowId; PreviousQuests = [new PreviousQuestInfo(new QuestId((ushort)(npc.QuestRequired.RowId & 0xFFFF)))]; } diff --git a/Questionable/Windows/JournalComponents/GatheringJournalComponent.cs b/Questionable/Windows/JournalComponents/GatheringJournalComponent.cs index 53b1576e..daac30a4 100644 --- a/Questionable/Windows/JournalComponents/GatheringJournalComponent.cs +++ b/Questionable/Windows/JournalComponents/GatheringJournalComponent.cs @@ -108,9 +108,9 @@ internal sealed class GatheringJournalComponent .GroupBy(x => x.GatheringPointId) .ToDictionary(x => x.Key, x => x.First()); - var itemSheet = dataManager.GetExcelSheet()!; + var itemSheet = dataManager.GetExcelSheet(); - _gatheringItems = dataManager.GetExcelSheet()! + _gatheringItems = dataManager.GetExcelSheet() .Where(x => x.RowId != 0 && x.GatheringItemLevel.RowId != 0) .Select(x => new { @@ -120,7 +120,7 @@ internal sealed class GatheringJournalComponent .Where(x => !string.IsNullOrEmpty(x.Name)) .ToDictionary(x => x.GatheringItemId, x => x.Name!); - _gatheringPointsByExpansion = dataManager.GetExcelSheet()! + _gatheringPointsByExpansion = dataManager.GetExcelSheet() .Where(x => x.GatheringPointBase.RowId != 0) .Where(x => x.GatheringPointBase.RowId is < 653 or > 680) // exclude ishgard restoration phase 1 .DistinctBy(x => x.GatheringPointBase.RowId) @@ -128,7 +128,7 @@ internal sealed class GatheringJournalComponent { GatheringPointId = x.RowId, Point = new DefaultGatheringPoint(new GatheringPointId((ushort)x.GatheringPointBase.RowId), - x.GatheringPointBase.Value!.GatheringType.RowId switch + x.GatheringPointBase.Value.GatheringType.RowId switch { 0 or 1 => EClassJob.Miner, 2 or 3 => EClassJob.Botanist, @@ -159,7 +159,7 @@ internal sealed class GatheringJournalComponent _gatheringPointRegistry.TryGetGatheringPoint(x.Point.Id, out GatheringRoot? gatheringRoot)) { // for some reason the game doesn't know where this gathering location is - var territoryType = territoryTypeSheet.GetRow(gatheringRoot.Steps.Last().TerritoryId)!; + var territoryType = territoryTypeSheet.GetRow(gatheringRoot.Steps.Last().TerritoryId); return x.Point with { Expansion = (EExpansionVersion)territoryType.ExVersion.RowId, From 03f4c39ba8fa5e997eb15f964040d496f1118360 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Tue, 19 Nov 2024 15:57:15 +0100 Subject: [PATCH 73/95] Update Renderer utility to API 11 --- GatheringPathRenderer/EditorCommands.cs | 20 ++++++++----------- GatheringPathRenderer/RendererPlugin.cs | 2 +- GatheringPathRenderer/Windows/EditorWindow.cs | 11 +++++----- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/GatheringPathRenderer/EditorCommands.cs b/GatheringPathRenderer/EditorCommands.cs index 2e9edad5..ae0247ae 100644 --- a/GatheringPathRenderer/EditorCommands.cs +++ b/GatheringPathRenderer/EditorCommands.cs @@ -3,16 +3,12 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Numerics; -using System.Text.Json; -using System.Text.Json.Nodes; -using System.Text.Json.Serialization; -using System.Text.Json.Serialization.Metadata; using Dalamud.Game.ClientState.Objects; using Dalamud.Game.ClientState.Objects.Enums; using Dalamud.Game.ClientState.Objects.Types; using Dalamud.Game.Command; using Dalamud.Plugin.Services; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Questionable.Model; using Questionable.Model.Gathering; using Questionable.Model.Questing; @@ -70,14 +66,14 @@ internal sealed class EditorCommands : IDisposable if (target == null || target.ObjectKind != ObjectKind.GatheringPoint) throw new Exception("No valid target"); - var gatheringPoint = _dataManager.GetExcelSheet()!.GetRow(target.DataId); + var gatheringPoint = _dataManager.GetExcelSheet().GetRowOrDefault(target.DataId); if (gatheringPoint == null) throw new Exception("Invalid gathering point"); FileInfo targetFile; GatheringRoot root; var locationsInTerritory = _plugin.GetLocationsInTerritory(_clientState.TerritoryType).ToList(); - var location = locationsInTerritory.SingleOrDefault(x => x.Id == gatheringPoint.GatheringPointBase.Row); + var location = locationsInTerritory.SingleOrDefault(x => x.Id == gatheringPoint.Value.GatheringPointBase.RowId); if (location != null) { targetFile = location.File; @@ -96,7 +92,7 @@ internal sealed class EditorCommands : IDisposable } else { - (targetFile, root) = CreateNewFile(gatheringPoint, target); + (targetFile, root) = CreateNewFile(gatheringPoint.Value, target); _chatGui.Print($"Creating new file under {targetFile.FullName}", "qG"); } @@ -174,16 +170,16 @@ internal sealed class EditorCommands : IDisposable ?.File.Directory; if (targetFolder == null) { - var territoryInfo = _dataManager.GetExcelSheet()!.GetRow(_clientState.TerritoryType)!; + var territoryInfo = _dataManager.GetExcelSheet().GetRow(_clientState.TerritoryType); targetFolder = _plugin.PathsDirectory - .CreateSubdirectory(ExpansionData.ExpansionFolders[(EExpansionVersion)territoryInfo.ExVersion.Row]) - .CreateSubdirectory(territoryInfo.PlaceName.Value!.Name.ToString()); + .CreateSubdirectory(ExpansionData.ExpansionFolders[(EExpansionVersion)territoryInfo.ExVersion.RowId]) + .CreateSubdirectory(territoryInfo.PlaceName.Value.Name.ToString()); } FileInfo targetFile = new FileInfo( Path.Combine(targetFolder.FullName, - $"{gatheringPoint.GatheringPointBase.Row}_{gatheringPoint.PlaceName.Value!.Name}_{(_clientState.LocalPlayer!.ClassJob.Id == 16 ? "MIN" : "BTN")}.json")); + $"{gatheringPoint.GatheringPointBase.RowId}_{gatheringPoint.PlaceName.Value.Name}_{(_clientState.LocalPlayer!.ClassJob.RowId == 16 ? "MIN" : "BTN")}.json")); var root = new GatheringRoot { Author = [_configuration.AuthorName], diff --git a/GatheringPathRenderer/RendererPlugin.cs b/GatheringPathRenderer/RendererPlugin.cs index dbad1715..5ef430ea 100644 --- a/GatheringPathRenderer/RendererPlugin.cs +++ b/GatheringPathRenderer/RendererPlugin.cs @@ -59,7 +59,7 @@ public sealed class RendererPlugin : IDalamudPlugin _editorWindow = new EditorWindow(this, _editorCommands, dataManager, targetManager, clientState, objectTable) { IsOpen = true }; _windowSystem.AddWindow(_editorWindow); - _currentClassJob = (EClassJob?)_clientState.LocalPlayer?.ClassJob.Id ?? EClassJob.Adventurer; + _currentClassJob = (EClassJob?)_clientState.LocalPlayer?.ClassJob.RowId ?? EClassJob.Adventurer; _pluginInterface.GetIpcSubscriber("Questionable.ReloadData") .Subscribe(Reload); diff --git a/GatheringPathRenderer/Windows/EditorWindow.cs b/GatheringPathRenderer/Windows/EditorWindow.cs index 55f9a5c2..1150558f 100644 --- a/GatheringPathRenderer/Windows/EditorWindow.cs +++ b/GatheringPathRenderer/Windows/EditorWindow.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Globalization; -using System.IO; using System.Linq; using System.Numerics; using Dalamud.Game.ClientState.Objects; @@ -11,7 +10,7 @@ using Dalamud.Interface.Colors; using Dalamud.Interface.Windowing; using Dalamud.Plugin.Services; using ImGuiNET; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using Questionable.Model.Gathering; namespace GatheringPathRenderer.Windows; @@ -205,12 +204,12 @@ internal sealed class EditorWindow : Window } else if (_target != null) { - var gatheringPoint = _dataManager.GetExcelSheet()!.GetRow(_target.DataId); + var gatheringPoint = _dataManager.GetExcelSheet().GetRowOrDefault(_target.DataId); if (gatheringPoint == null) return; var locationsInTerritory = _plugin.GetLocationsInTerritory(_clientState.TerritoryType).ToList(); - var location = locationsInTerritory.SingleOrDefault(x => x.Id == gatheringPoint.GatheringPointBase.Row); + var location = locationsInTerritory.SingleOrDefault(x => x.Id == gatheringPoint.Value.GatheringPointBase.RowId); if (location != null) { var targetFile = location.File; @@ -234,9 +233,9 @@ internal sealed class EditorWindow : Window } else { - if (ImGui.Button($"Create location ({gatheringPoint.GatheringPointBase.Row})")) + if (ImGui.Button($"Create location ({gatheringPoint.Value.GatheringPointBase.RowId})")) { - var (targetFile, root) = _editorCommands.CreateNewFile(gatheringPoint, _target); + var (targetFile, root) = _editorCommands.CreateNewFile(gatheringPoint.Value, _target); _plugin.Save(targetFile, root); } } From 472aeac04a0c5143c3c2d8f2916bd92fdad64e25 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Tue, 19 Nov 2024 17:15:11 +0100 Subject: [PATCH 74/95] Add missing RNG spawn in 'The Rudiments of Fiend Removal' --- .../5210_The Rudiments of Fiend Removal.json | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json index eb5c727e..342e16cf 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5210_The Rudiments of Fiend Removal.json @@ -1,7 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "liza", - "Comment": "TODO untested how many RNG states this has", "QuestSequence": [ { "Sequence": 0, @@ -112,6 +111,32 @@ null, null ] + }, + { + "DataId": 2014490, + "Position": { + "X": 485.6183, + "Y": 10.8185425, + "Z": -281.7884 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18173 + ], + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 3 + } + ], + null, + null, + null + ] } ] }, From 1d9198eacd56da6025521de7240b6fdf277e5a38 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Tue, 19 Nov 2024 19:01:53 +0100 Subject: [PATCH 75/95] Use Lifestream for firmament teleporting --- .../GameUi/InteractionUiController.cs | 42 ------------------- .../Steps/Shared/AethernetShortcut.cs | 14 ++----- Questionable/External/LifestreamIpc.cs | 33 +++++++++++---- 3 files changed, 29 insertions(+), 60 deletions(-) diff --git a/Questionable/Controller/GameUi/InteractionUiController.cs b/Questionable/Controller/GameUi/InteractionUiController.cs index 1ea84928..20148073 100644 --- a/Questionable/Controller/GameUi/InteractionUiController.cs +++ b/Questionable/Controller/GameUi/InteractionUiController.cs @@ -98,7 +98,6 @@ internal sealed class InteractionUiController : IDisposable _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "PointMenu", PointMenuPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "HousingSelectBlock", HousingSelectBlockPostSetup); - _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "TelepotTown", TeleportTownPostSetup); unsafe { @@ -848,46 +847,6 @@ internal sealed class InteractionUiController : IDisposable addon->FireCallbackInt(0); } - private void TeleportTownPostSetup(AddonEvent type, AddonArgs args) - { - if (ShouldHandleUiInteractions && - _questController.HasCurrentTaskMatching(out AethernetShortcut.Task? 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) @@ -905,7 +864,6 @@ internal sealed class InteractionUiController : IDisposable public void Dispose() { - _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "TelepotTown", TeleportTownPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "HousingSelectBlock", HousingSelectBlockPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "PointMenu", PointMenuPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup); diff --git a/Questionable/Controller/Steps/Shared/AethernetShortcut.cs b/Questionable/Controller/Steps/Shared/AethernetShortcut.cs index a1a066f0..bfb2cc3f 100644 --- a/Questionable/Controller/Steps/Shared/AethernetShortcut.cs +++ b/Questionable/Controller/Steps/Shared/AethernetShortcut.cs @@ -205,17 +205,9 @@ internal static class AethernetShortcut private void DoTeleport() { - if (Task.From.IsFirmamentAetheryte()) - { - logger.LogInformation("Using manual teleport interaction"); - _teleported = gameFunctions.InteractWith((uint)Task.From, ObjectKind.EventObj); - } - else - { - logger.LogInformation("Using lifestream to teleport to {Destination}", Task.To); - lifestreamIpc.Teleport(Task.To); - _teleported = true; - } + logger.LogInformation("Using lifestream to teleport to {Destination}", Task.To); + lifestreamIpc.Teleport(Task.To); + _teleported = true; } public override ETaskResult Update() diff --git a/Questionable/External/LifestreamIpc.cs b/Questionable/External/LifestreamIpc.cs index f5bd4544..443d1409 100644 --- a/Questionable/External/LifestreamIpc.cs +++ b/Questionable/External/LifestreamIpc.cs @@ -1,5 +1,9 @@ -using Dalamud.Plugin; +using System.Collections.Generic; +using Dalamud.Plugin; using Dalamud.Plugin.Ipc; +using Dalamud.Plugin.Services; +using Lumina.Excel.Sheets; +using Microsoft.Extensions.Logging; using Questionable.Data; using Questionable.Model.Common; @@ -8,25 +12,40 @@ namespace Questionable.External; internal sealed class LifestreamIpc { private readonly AetheryteData _aetheryteData; + private readonly IDataManager _dataManager; + private readonly ILogger _logger; private readonly ICallGateSubscriber _aethernetTeleport; - public LifestreamIpc(IDalamudPluginInterface pluginInterface, AetheryteData aetheryteData) + public LifestreamIpc(IDalamudPluginInterface pluginInterface, AetheryteData aetheryteData, IDataManager dataManager, ILogger logger) { _aetheryteData = aetheryteData; + _dataManager = dataManager; + _logger = logger; _aethernetTeleport = pluginInterface.GetIpcSubscriber("Lifestream.AethernetTeleport"); } public bool Teleport(EAetheryteLocation aetheryteLocation) { - if (aetheryteLocation == EAetheryteLocation.IshgardFirmament) + string? name = aetheryteLocation switch { - // TODO does this even work on non-EN clients? - return _aethernetTeleport.InvokeFunc("Firmament"); - } + EAetheryteLocation.IshgardFirmament => "Firmament", + EAetheryteLocation.FirmamentMendicantsCourt => GetPlaceName(3436), + EAetheryteLocation.FirmamentMattock => GetPlaceName(3473), + EAetheryteLocation.FirmamentNewNest => GetPlaceName(3475), + EAetheryteLocation.FirmanentSaintRoellesDais => GetPlaceName(3474), + EAetheryteLocation.FirmamentFeatherfall => GetPlaceName(3525), + EAetheryteLocation.FirmamentHoarfrostHall => GetPlaceName(3528), + EAetheryteLocation.FirmamentWesternRisensongQuarter => GetPlaceName(3646), + EAetheryteLocation.FIrmamentEasternRisensongQuarter => GetPlaceName(3645), + _ => _aetheryteData.AethernetNames.GetValueOrDefault(aetheryteLocation), + }; - if (!_aetheryteData.AethernetNames.TryGetValue(aetheryteLocation, out string? name)) + if (name == null) return false; + _logger.LogInformation("Teleporting to '{Name}'", name); return _aethernetTeleport.InvokeFunc(name); } + + private string GetPlaceName(uint rowId) => _dataManager.GetExcelSheet().GetRow(rowId).Name.ToString(); } From 4d397022b9310c81090b3a4dcd893e8b71633b8e Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Wed, 20 Nov 2024 03:28:13 +0100 Subject: [PATCH 76/95] Add waypoint before Vath turn-in counter to simplify navigation for all daily quests --- .../Vath/Dailies/2261_Getting the Shaft.json | 13 +- .../Dailies/2262_Breath of Fresh Air.json | 26 +- .../Vath/Dailies/2263_Bugging the Bugs.json | 15 +- .../Vath/Dailies/2264_Too Much to Bear.json | 15 +- .../2265_The Foodstuff of Champions.json | 15 +- .../Vath/Dailies/2266_A Long Shot.json | 15 +- .../2267_Where the Silver Dew Grows.json | 15 +- .../2268_The Caelumtree Wine Spree.json | 15 +- .../Vath/Dailies/2269_Ploughing Ahead.json | 219 ++++++------ .../Vath/Dailies/2270_At Full Pelt.json | 338 +++++++++--------- .../2272_Shoo Fly, Don't Bother Me.json | 15 +- .../Vath/Dailies/2273_All about the Eggs.json | 13 +- .../Dailies/2274_Smells Like Trouble.json | 15 +- .../Dailies/2277_Fifty Shades of Yellow.json | 13 +- .../2278_A Romp around the Foothills.json | 13 +- .../Dailies/2279_Neighborhood Squabbles.json | 15 +- .../2280_Not for the Faint of Heart.json | 13 +- 17 files changed, 463 insertions(+), 320 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2261_Getting the Shaft.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2261_Getting the Shaft.json index a509b5de..4db1e824 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2261_Getting the Shaft.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2261_Getting the Shaft.json @@ -62,6 +62,16 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1016803, "Position": { @@ -70,8 +80,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2262_Breath of Fresh Air.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2262_Breath of Fresh Air.json index a1b358a6..56d4017d 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2262_Breath of Fresh Air.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2262_Breath of Fresh Air.json @@ -58,6 +58,16 @@ { "Sequence": 2, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1016803, "Position": { @@ -66,8 +76,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "Interact", - "Fly": true + "InteractionType": "Interact" } ] }, @@ -102,6 +111,16 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1016803, "Position": { @@ -110,8 +129,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2263_Bugging the Bugs.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2263_Bugging the Bugs.json index 933aa250..60dec3fb 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2263_Bugging the Bugs.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2263_Bugging the Bugs.json @@ -98,6 +98,17 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + }, { "DataId": 1016803, "Position": { @@ -106,9 +117,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2264_Too Much to Bear.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2264_Too Much to Bear.json index 06661865..898f4c5a 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2264_Too Much to Bear.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2264_Too Much to Bear.json @@ -62,6 +62,17 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + }, { "DataId": 1016803, "Position": { @@ -70,9 +81,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2265_The Foodstuff of Champions.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2265_The Foodstuff of Champions.json index 1f84b37b..effa35f5 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2265_The Foodstuff of Champions.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2265_The Foodstuff of Champions.json @@ -91,6 +91,17 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + }, { "DataId": 1016803, "Position": { @@ -99,9 +110,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2266_A Long Shot.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2266_A Long Shot.json index 4d1ca779..1922f2a4 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2266_A Long Shot.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2266_A Long Shot.json @@ -91,6 +91,17 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + }, { "DataId": 1016803, "Position": { @@ -99,9 +110,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2267_Where the Silver Dew Grows.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2267_Where the Silver Dew Grows.json index 78bfc835..f45c4d72 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2267_Where the Silver Dew Grows.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2267_Where the Silver Dew Grows.json @@ -73,6 +73,17 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + }, { "DataId": 1016803, "Position": { @@ -81,9 +92,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2268_The Caelumtree Wine Spree.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2268_The Caelumtree Wine Spree.json index f2ce7b2e..14ace44a 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2268_The Caelumtree Wine Spree.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2268_The Caelumtree Wine Spree.json @@ -58,6 +58,17 @@ { "Sequence": 2, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + }, { "DataId": 1016803, "Position": { @@ -66,9 +77,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "Interact", - "Fly": true, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + "InteractionType": "Interact" } ] }, diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2269_Ploughing Ahead.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2269_Ploughing Ahead.json index 90040ebf..37734254 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2269_Ploughing Ahead.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2269_Ploughing Ahead.json @@ -1,114 +1,113 @@ { - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "AnimaMachinae", - "QuestSequence": [ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ { - "Sequence": 0, - "Steps": [ - { - "DataId": 1016803, - "Position": { - "X": 57.297607, - "Y": -47.842846, - "Z": -174.63953 - }, - "TerritoryId": 398, - "InteractionType": "AcceptQuest" - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1017031, - "Position": { - "X": 74.20459, - "Y": -48.533592, - "Z": -171.12994 - }, - "TerritoryId": 398, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 2006915, - "Position": { - "X": 96.45227, - "Y": -66.2395, - "Z": 616.6017 - }, - "TerritoryId": 398, - "InteractionType": "Action", - "Action": "Fumigate", - "Fly": true - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "DataId": 2006916, - "Position": { - "X": -149.95044, - "Y": -55.25299, - "Z": 541.37476 - }, - "TerritoryId": 398, - "InteractionType": "Action", - "Action": "Fumigate", - "Fly": true - } - ] - }, - { - "Sequence": 4, - "Steps": [ - { - "DataId": 2006917, - "Position": { - "X": -625.0859, - "Y": -49.94281, - "Z": 491.02002 - }, - "TerritoryId": 398, - "InteractionType": "Action", - "Action": "Fumigate", - "Fly": true - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "Position": { - "X": 59.511234, - "Y": -48, - "Z": -171.35385 - }, - "TerritoryId": 398, - "InteractionType": "WalkTo", - "Fly": true, - "Land": true, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" - }, - { - "DataId": 1016803, - "Position": { - "X": 57.297607, - "Y": -47.842846, - "Z": -174.63953 - }, - "TerritoryId": 398, - "InteractionType": "CompleteQuest" - } - ] + "DataId": 1016803, + "Position": { + "X": 57.297607, + "Y": -47.842846, + "Z": -174.63953 + }, + "TerritoryId": 398, + "InteractionType": "AcceptQuest" } - ] + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1017031, + "Position": { + "X": 74.20459, + "Y": -48.533592, + "Z": -171.12994 + }, + "TerritoryId": 398, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2006915, + "Position": { + "X": 96.45227, + "Y": -66.2395, + "Z": 616.6017 + }, + "TerritoryId": 398, + "InteractionType": "Action", + "Action": "Fumigate", + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2006916, + "Position": { + "X": -149.95044, + "Y": -55.25299, + "Z": 541.37476 + }, + "TerritoryId": 398, + "InteractionType": "Action", + "Action": "Fumigate", + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 2006917, + "Position": { + "X": -625.0859, + "Y": -49.94281, + "Z": 491.02002 + }, + "TerritoryId": 398, + "InteractionType": "Action", + "Action": "Fumigate", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + }, + { + "DataId": 1016803, + "Position": { + "X": 57.297607, + "Y": -47.842846, + "Z": -174.63953 + }, + "TerritoryId": 398, + "InteractionType": "CompleteQuest" + } + ] + } + ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2270_At Full Pelt.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2270_At Full Pelt.json index 799fae82..af0f9f2d 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2270_At Full Pelt.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2270_At Full Pelt.json @@ -1,173 +1,173 @@ { - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "AnimaMachinae", - "QuestSequence": [ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AnimaMachinae", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ { - "Sequence": 0, - "Steps": [ - { - "DataId": 1016803, - "Position": { - "X": 57.297607, - "Y": -47.842846, - "Z": -174.63953 - }, - "TerritoryId": 398, - "InteractionType": "AcceptQuest" - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "Position": { - "X": 449.65012, - "Y": -51.141403, - "Z": 106.932205 - }, - "TerritoryId": 398, - "InteractionType": "WalkTo", - "Fly": true, - "Land": true, - "AetheryteShortcut": "The Dravanian Forelands - Tailfeather" - }, - { - "DataId": 1011922, - "Position": { - "X": 448.56934, - "Y": -51.141407, - "Z": 108.93408 - }, - "TerritoryId": 398, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 2006918, - "Position": { - "X": 475.69995, - "Y": -44.174927, - "Z": -231.46417 - }, - "TerritoryId": 398, - "InteractionType": "Combat", - "EnemySpawnType": "AfterItemUse", - "ItemId": 2001961, - "KillEnemyDataIds": [ - 71224 - ], - "Fly": true, - "Land": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - 128 - ] - }, - { - "DataId": 2006920, - "Position": { - "X": 329.4879, - "Y": -45.487183, - "Z": -262.13477 - }, - "TerritoryId": 398, - "InteractionType": "Combat", - "EnemySpawnType": "AfterItemUse", - "ItemId": 2001961, - "KillEnemyDataIds": [ - 5548 - ], - "Fly": true, - "Land": true, - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - 32 - ] - }, - { - "DataId": 2006919, - "Position": { - "X": 535.45435, - "Y": -32.39496, - "Z": -410.60504 - }, - "TerritoryId": 398, - "InteractionType": "Combat", - "EnemySpawnType": "AfterItemUse", - "ItemId": 2001961, - "KillEnemyDataIds": [ - 71224 - ], - "Fly": true, - "Land": true - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "Position": { - "X": 449.65012, - "Y": -51.141403, - "Z": 106.932205 - }, - "TerritoryId": 398, - "InteractionType": "WalkTo", - "Fly": true, - "Land": true, - "AetheryteShortcut": "The Dravanian Forelands - Tailfeather" - }, - { - "DataId": 1011922, - "Position": { - "X": 448.56934, - "Y": -51.141407, - "Z": 108.93408 - }, - "TerritoryId": 398, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "Position": { - "X": 59.511234, - "Y": -48, - "Z": -171.35385 - }, - "TerritoryId": 398, - "InteractionType": "WalkTo", - "Fly": true, - "Land": true - }, - { - "DataId": 1016803, - "Position": { - "X": 57.297607, - "Y": -47.842846, - "Z": -174.63953 - }, - "TerritoryId": 398, - "InteractionType": "CompleteQuest" - } - ] + "DataId": 1016803, + "Position": { + "X": 57.297607, + "Y": -47.842846, + "Z": -174.63953 + }, + "TerritoryId": 398, + "InteractionType": "AcceptQuest" } - ] + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 449.65012, + "Y": -51.141403, + "Z": 106.932205 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "Land": true, + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather" + }, + { + "DataId": 1011922, + "Position": { + "X": 448.56934, + "Y": -51.141407, + "Z": 108.93408 + }, + "TerritoryId": 398, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2006918, + "Position": { + "X": 475.69995, + "Y": -44.174927, + "Z": -231.46417 + }, + "TerritoryId": 398, + "InteractionType": "Combat", + "EnemySpawnType": "AfterItemUse", + "ItemId": 2001961, + "KillEnemyDataIds": [ + 71224 + ], + "Fly": true, + "Land": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 2006920, + "Position": { + "X": 329.4879, + "Y": -45.487183, + "Z": -262.13477 + }, + "TerritoryId": 398, + "InteractionType": "Combat", + "EnemySpawnType": "AfterItemUse", + "ItemId": 2001961, + "KillEnemyDataIds": [ + 5548 + ], + "Fly": true, + "Land": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 2006919, + "Position": { + "X": 535.45435, + "Y": -32.39496, + "Z": -410.60504 + }, + "TerritoryId": 398, + "InteractionType": "Combat", + "EnemySpawnType": "AfterItemUse", + "ItemId": 2001961, + "KillEnemyDataIds": [ + 71224 + ], + "Fly": true, + "Land": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "Position": { + "X": 449.65012, + "Y": -51.141403, + "Z": 106.932205 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "Land": true, + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather" + }, + { + "DataId": 1011922, + "Position": { + "X": 448.56934, + "Y": -51.141407, + "Z": 108.93408 + }, + "TerritoryId": 398, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + }, + { + "DataId": 1016803, + "Position": { + "X": 57.297607, + "Y": -47.842846, + "Z": -174.63953 + }, + "TerritoryId": 398, + "InteractionType": "CompleteQuest" + } + ] + } + ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2272_Shoo Fly, Don't Bother Me.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2272_Shoo Fly, Don't Bother Me.json index fc74eb4d..bd5f3cd7 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2272_Shoo Fly, Don't Bother Me.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2272_Shoo Fly, Don't Bother Me.json @@ -78,6 +78,17 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + }, { "DataId": 1016803, "Position": { @@ -86,9 +97,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2273_All about the Eggs.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2273_All about the Eggs.json index 21824e8a..cc58ed56 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2273_All about the Eggs.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2273_All about the Eggs.json @@ -55,6 +55,16 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1016803, "Position": { @@ -63,8 +73,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2274_Smells Like Trouble.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2274_Smells Like Trouble.json index 095c273c..53e90158 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2274_Smells Like Trouble.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2274_Smells Like Trouble.json @@ -91,6 +91,17 @@ { "Sequence": 2, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + }, { "DataId": 1016803, "Position": { @@ -99,9 +110,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "Interact", - "Fly": true, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + "InteractionType": "Interact" } ] }, diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2277_Fifty Shades of Yellow.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2277_Fifty Shades of Yellow.json index 1f83afd0..f6de1949 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2277_Fifty Shades of Yellow.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2277_Fifty Shades of Yellow.json @@ -101,6 +101,16 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1016803, "Position": { @@ -109,8 +119,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2278_A Romp around the Foothills.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2278_A Romp around the Foothills.json index 5c5fa317..cca54432 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2278_A Romp around the Foothills.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2278_A Romp around the Foothills.json @@ -100,6 +100,16 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1016803, "Position": { @@ -108,8 +118,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2279_Neighborhood Squabbles.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2279_Neighborhood Squabbles.json index e21d83f5..072e6d39 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2279_Neighborhood Squabbles.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2279_Neighborhood Squabbles.json @@ -73,6 +73,17 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + }, { "DataId": 1016803, "Position": { @@ -81,9 +92,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true, - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2280_Not for the Faint of Heart.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2280_Not for the Faint of Heart.json index e1d7ae5d..507d5e94 100644 --- a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2280_Not for the Faint of Heart.json +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2280_Not for the Faint of Heart.json @@ -101,6 +101,16 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1016803, "Position": { @@ -109,8 +119,7 @@ "Z": -174.63953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest", - "Fly": true + "InteractionType": "CompleteQuest" } ] } From 6e1ee729dada716e7aa5bb773353e61b23d1356c Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Wed, 20 Nov 2024 03:28:35 +0100 Subject: [PATCH 77/95] Add 'When Hunting Goes Wrong' Vath quest --- .../Dailies/2275_When Hunting Goes Wrong.json | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2275_When Hunting Goes Wrong.json diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2275_When Hunting Goes Wrong.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2275_When Hunting Goes Wrong.json new file mode 100644 index 00000000..b98bcdbb --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vath/Dailies/2275_When Hunting Goes Wrong.json @@ -0,0 +1,125 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1016803, + "Position": { + "X": 57.297607, + "Y": -47.842846, + "Z": -174.63953 + }, + "TerritoryId": 398, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1016865, + "Position": { + "X": -272.23627, + "Y": -35.408485, + "Z": 219.07373 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 1016864, + "Position": { + "X": -452.32324, + "Y": -35.352047, + "Z": 174.30371 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1016866, + "Position": { + "X": -397.05505, + "Y": -34.192406, + "Z": 243.12195 + }, + "TerritoryId": 398, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 5551 + ], + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1016866, + "Position": { + "X": -397.05505, + "Y": -34.192406, + "Z": 243.12195 + }, + "TerritoryId": 398, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 58.39701, + "Y": -48.000008, + "Z": -172.36507 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 1016803, + "Position": { + "X": 57.297607, + "Y": -47.842846, + "Z": -174.63953 + }, + "TerritoryId": 398, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} From c1aadb8c9cd77d4f0db7212a049ad3790a7b2cb5 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Wed, 20 Nov 2024 16:29:57 +0100 Subject: [PATCH 78/95] Add 'Sanuwa Samba' Vanu Vanu quest --- .../Vanu Vanu/Dailies/2178_Sanuwa Samba.json | 118 ++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2178_Sanuwa Samba.json diff --git a/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2178_Sanuwa Samba.json b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2178_Sanuwa Samba.json new file mode 100644 index 00000000..bec537bc --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Allied Societies/Vanu Vanu/Dailies/2178_Sanuwa Samba.json @@ -0,0 +1,118 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1016089, + "Position": { + "X": -799.46594, + "Y": -133.2695, + "Z": -404.1352 + }, + "TerritoryId": 401, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1016093, + "Position": { + "X": -776.0281, + "Y": -133.35559, + "Z": -414.32825 + }, + "TerritoryId": 401, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1016219, + "Position": { + "X": 14.389221, + "Y": -111.05486, + "Z": 413.71777 + }, + "TerritoryId": 401, + "InteractionType": "Action", + "Action": "Buffet (Sanuwa)", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 1016217, + "Position": { + "X": 97.48987, + "Y": -86.45681, + "Z": 466.57495 + }, + "TerritoryId": 401, + "InteractionType": "Action", + "Action": "Buffet (Sanuwa)", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1016218, + "Position": { + "X": 137.95679, + "Y": -87.380325, + "Z": 434.62268 + }, + "TerritoryId": 401, + "InteractionType": "Action", + "Action": "Buffet (Sanuwa)", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1016089, + "Position": { + "X": -799.46594, + "Y": -133.2695, + "Z": -404.1352 + }, + "TerritoryId": 401, + "InteractionType": "CompleteQuest", + "Fly": true, + "AetheryteShortcut": "The Sea of Clouds - Ok' Zundu" + } + ] + } + ] +} From 07c5faa781f1370cb25917d9a7269d27a07f8dca Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Wed, 20 Nov 2024 18:39:30 +0100 Subject: [PATCH 79/95] Add Respected Pelupelu quests --- Directory.Build.targets | 2 +- .../Dailies/5213_Advisor vs Predator.json | 88 ++++++++++++++++- .../5214_Let Mobbie Be Your Guide.json | 69 +++++++++++++- .../5215_The Popularity of Punutiys.json | 94 ++++++++++++++++++- .../Dailies/5219_Born to Run Away.json | 81 +++++++++++++++- QuestPaths/quest-v1.json | 3 +- .../Questing/Converter/ActionConverter.cs | 1 + Questionable.Model/Questing/EAction.cs | 4 +- Questionable/Functions/QuestFunctions.cs | 1 + 9 files changed, 335 insertions(+), 8 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index ca80e97a..ba0f6f9d 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,5 +1,5 @@ - 4.2 + 4.3 diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5213_Advisor vs Predator.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5213_Advisor vs Predator.json index f7b53cd4..95e55858 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5213_Advisor vs Predator.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5213_Advisor vs Predator.json @@ -1,7 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "liza", - "Disabled": true, "QuestSequence": [ { "Sequence": 0, @@ -28,6 +27,93 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014497, + "Position": { + "X": -130.7851, + "Y": 114.39685, + "Z": 240.31421 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18174 + ], + "AetheryteShortcut": "Kozama'uka - Earthenshire", + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 1 + } + ], + null, + null, + null + ] + }, + { + "DataId": 2014498, + "Position": { + "X": -56.565247, + "Y": 111.77234, + "Z": 172.62524 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18174 + ], + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 2 + } + ], + null, + null, + null + ] + }, + { + "DataId": 2014499, + "Position": { + "X": -84.18408, + "Y": 111.436646, + "Z": 268.05518 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18174 + ], + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 3 + } + ], + null, + null, + null + ] + } + ] + }, { "Sequence": 255, "Steps": [ diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5214_Let Mobbie Be Your Guide.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5214_Let Mobbie Be Your Guide.json index f7b53cd4..58a270a1 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5214_Let Mobbie Be Your Guide.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5214_Let Mobbie Be Your Guide.json @@ -1,7 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "liza", - "Disabled": true, "QuestSequence": [ { "Sequence": 0, @@ -28,6 +27,74 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052324, + "Position": { + "X": -248.18805, + "Y": 110.17465, + "Z": 189.01343 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Earthenshire", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1052326, + "Position": { + "X": -304.61584, + "Y": 110.20639, + "Z": 725.39856 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "RequiredQuestVariables": [ + null, + [ + { + "High": 2 + } + ], + null, + null, + null, + null + ] + }, + { + "DataId": 1052435, + "Position": { + "X": 505.76025, + "Y": 115.10293, + "Z": 205.7373 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Many Fires", + "RequiredQuestVariables": [ + null, + [ + { + "High": 1 + } + ], + null, + null, + null, + null + ] + } + ] + }, { "Sequence": 255, "Steps": [ diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5215_The Popularity of Punutiys.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5215_The Popularity of Punutiys.json index f7b53cd4..4bd9620a 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5215_The Popularity of Punutiys.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5215_The Popularity of Punutiys.json @@ -1,7 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "liza", - "Disabled": true, "QuestSequence": [ { "Sequence": 0, @@ -28,6 +27,99 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1051798, + "Position": { + "X": 897.734, + "Y": 6.8223433, + "Z": -285.1759 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1052328, + "Position": { + "X": 171.6792, + "Y": 16.762953, + "Z": -112.44379 + }, + "TerritoryId": 1188, + "InteractionType": "Action", + "Action": "Bosom Brook", + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 1 + } + ], + null, + null, + null + ] + }, + { + "DataId": 1052329, + "Position": { + "X": 216.7544, + "Y": 16.31888, + "Z": -99.687195 + }, + "TerritoryId": 1188, + "InteractionType": "Action", + "Action": "Bosom Brook", + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 2 + } + ], + null, + null, + null + ] + }, + { + "DataId": 1052327, + "Position": { + "X": 186.38892, + "Y": 21.742897, + "Z": -74.47931 + }, + "TerritoryId": 1188, + "InteractionType": "Action", + "Action": "Bosom Brook", + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 3 + } + ], + null, + null, + null + ] + } + ] + }, { "Sequence": 255, "Steps": [ diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5219_Born to Run Away.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5219_Born to Run Away.json index f7b53cd4..f93bd50d 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5219_Born to Run Away.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5219_Born to Run Away.json @@ -1,7 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "liza", - "Disabled": true, "QuestSequence": [ { "Sequence": 0, @@ -28,6 +27,84 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1052333, + "Position": { + "X": 775.1736, + "Y": 12.871736, + "Z": -196.0022 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1052335, + "Position": { + "X": 867.76526, + "Y": 14.402381, + "Z": -171.31305 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 1052334, + "Position": { + "X": 864.5609, + "Y": 15.056413, + "Z": -256.27533 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1052336, + "Position": { + "X": 838.4375, + "Y": 14.301746, + "Z": -222.06458 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, { "Sequence": 255, "Steps": [ @@ -39,7 +116,7 @@ }, "TerritoryId": 1188, "InteractionType": "WalkTo", - "AetheryteShortcut": "Kozama'uka - Dock Poga" + "Fly": true }, { "DataId": 1051711, diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 72ee6318..0564a3a3 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -965,7 +965,8 @@ "Katon", "Raiton", "Hide", - "Slug Shot" + "Slug Shot", + "Bosom Brook" ] } }, diff --git a/Questionable.Model/Questing/Converter/ActionConverter.cs b/Questionable.Model/Questing/Converter/ActionConverter.cs index 86a1800b..2af9cfa8 100644 --- a/Questionable.Model/Questing/Converter/ActionConverter.cs +++ b/Questionable.Model/Questing/Converter/ActionConverter.cs @@ -41,5 +41,6 @@ public sealed class ActionConverter() : EnumConverter(Values) { EAction.Katon, "Katon" }, { EAction.Raiton, "Raiton" }, { EAction.SlugShot, "Slug Shot" }, + { EAction.BosomBrook, "Bosom Brook" }, }; } diff --git a/Questionable.Model/Questing/EAction.cs b/Questionable.Model/Questing/EAction.cs index 4f798797..0f72ecc6 100644 --- a/Questionable.Model/Questing/EAction.cs +++ b/Questionable.Model/Questing/EAction.cs @@ -47,6 +47,7 @@ public enum EAction Raiton = 2267, RabbitMedium = 2272, SlugShot = 7412, + BosomBrook = 37173, CollectMiner = 240, ScourMiner = 22182, @@ -84,6 +85,7 @@ public static class EActionExtensions or EAction.YellowGulal or EAction.BlueGulal or EAction.ElectrixFlux - or EAction.HopStep; + or EAction.HopStep + or EAction.BosomBrook; } } diff --git a/Questionable/Functions/QuestFunctions.cs b/Questionable/Functions/QuestFunctions.cs index 1ef56c4e..dc507a0a 100644 --- a/Questionable/Functions/QuestFunctions.cs +++ b/Questionable/Functions/QuestFunctions.cs @@ -243,6 +243,7 @@ internal sealed unsafe class QuestFunctions { return questId.Value switch { + 5215 => EAlliedSociety.None, >= 5199 and <= 5226 => EAlliedSociety.Pelupelu, _ => EAlliedSociety.None, }; From 6c1c66971da93296ef8d703caf3720c30e18552a Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 21 Nov 2024 16:26:42 +0100 Subject: [PATCH 80/95] Add waypoints in 'Burden of Beasts' to (hopefully) avoid combat --- .../Dailies/5204_Burden of Beasts.json | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json index f5bcdb6f..3543a9dc 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5204_Burden of Beasts.json @@ -76,6 +76,42 @@ { "Sequence": 3, "Steps": [ + { + "Position": { + "X": 548.1944, + "Y": 6.15866, + "Z": -196.99664 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "Position": { + "X": 610.0975, + "Y": 7.8043165, + "Z": -228.70596 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "Position": { + "X": 680.4834, + "Y": 10.053757, + "Z": -263.73697 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, + { + "Position": { + "X": 743.98376, + "Y": 9.793373, + "Z": -263.45914 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" + }, { "DataId": 1052306, "Position": { From 145a989a0717ba01109679a30ecfcd101a879455 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 22 Nov 2024 02:12:56 +0100 Subject: [PATCH 81/95] Use ActorControlFlags to check item use in battles --- Questionable/Controller/CombatModules/ItemUseModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Questionable/Controller/CombatModules/ItemUseModule.cs b/Questionable/Controller/CombatModules/ItemUseModule.cs index 1693edd5..56da033f 100644 --- a/Questionable/Controller/CombatModules/ItemUseModule.cs +++ b/Questionable/Controller/CombatModules/ItemUseModule.cs @@ -142,7 +142,7 @@ internal sealed class ItemUseModule : ICombatModule { BattleChara* battleChara = (BattleChara*)gameObject.Address; if (_combatData.CombatItemUse.Condition == ECombatItemUseCondition.Incapacitated) - return (*(byte*)((nint)battleChara + 0x1C68) & 0x40) != 0; + return (battleChara->ActorControlFlags & 0x40) != 0; if (_combatData.CombatItemUse.Condition == ECombatItemUseCondition.HealthPercent) return (100f * battleChara->Health / battleChara->MaxHealth) < _combatData.CombatItemUse.Value; From 73e030b620690f7e5cd7a9c8ac3e53828d5fc633 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 22 Nov 2024 21:04:55 +0100 Subject: [PATCH 82/95] Add 'Recruitment Drive' Pelupelu quest --- .../Story/5196_Recruitment Drive.json | 171 ++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5196_Recruitment Drive.json diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5196_Recruitment Drive.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5196_Recruitment Drive.json new file mode 100644 index 00000000..98bdf1d1 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Story/5196_Recruitment Drive.json @@ -0,0 +1,171 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 809.655, + "Y": 17.004526, + "Z": -257.89868 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + }, + { + "DataId": 1051710, + "Position": { + "X": 822.629, + "Y": 17.102613, + "Z": -263.20288 + }, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1051733, + "Position": { + "X": 553.06323, + "Y": 115.84422, + "Z": 173.32715 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Many Fires" + }, + { + "DataId": 1051734, + "Position": { + "X": 588.7998, + "Y": 116.71518, + "Z": 216.84595 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 1051735, + "Position": { + "X": 614.9232, + "Y": 119.49004, + "Z": 172.16748 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1051736, + "Position": { + "X": 573.3883, + "Y": 116, + "Z": 202.62451 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2014432, + "Position": { + "X": 663.569, + "Y": 117.50964, + "Z": 647.9437 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1051738, + "Position": { + "X": 661.7991, + "Y": 117.68325, + "Z": 646.6925 + }, + "StopDistance": 5, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1051739, + "Position": { + "X": 410.39136, + "Y": 122.23778, + "Z": 797.5432 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1051738, + "Position": { + "X": 661.7991, + "Y": 117.68325, + "Z": 646.6925 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1051710, + "Position": { + "X": 822.629, + "Y": 17.102613, + "Z": -263.20288 + }, + "TerritoryId": 1188, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + } + ] + } + ] +} From 0265fcc0aeef351925c9efb5d04675adb0a835b1 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 22 Nov 2024 21:52:35 +0100 Subject: [PATCH 83/95] Remove 'Automatically complete snipe tasks' --- Questionable/Configuration.cs | 3 +- .../Steps/Common/SendNotification.cs | 4 +- .../Controller/Steps/Interactions/Interact.cs | 5 +- .../Controller/Utils/AutoSnipeHandler.cs | 48 ---------- Questionable/External/AutomatonIpc.cs | 40 ++++++++ Questionable/QuestionablePlugin.cs | 4 +- Questionable/Windows/ConfigWindow.cs | 12 --- Questionable/Windows/OneTimeSetupWindow.cs | 93 +++++++++++++------ 8 files changed, 113 insertions(+), 96 deletions(-) delete mode 100644 Questionable/Controller/Utils/AutoSnipeHandler.cs create mode 100644 Questionable/External/AutomatonIpc.cs diff --git a/Questionable/Configuration.cs b/Questionable/Configuration.cs index 238e4a51..29358b34 100644 --- a/Questionable/Configuration.cs +++ b/Questionable/Configuration.cs @@ -7,7 +7,7 @@ namespace Questionable; internal sealed class Configuration : IPluginConfiguration { - public const int PluginSetupVersion = 1; + public const int PluginSetupVersion = 2; public int Version { get; set; } =1 ; public int PluginSetupCompleteVersion { get; set; } @@ -28,7 +28,6 @@ internal sealed class Configuration : IPluginConfiguration public bool HideInAllInstances { get; set; } = true; public bool UseEscToCancelQuesting { get; set; } = true; public bool ShowIncompleteSeasonalEvents { get; set; } = true; - public bool AutomaticallyCompleteSnipeTasks { get; set; } public bool ConfigureTextAdvance { get; set; } = true; } diff --git a/Questionable/Controller/Steps/Common/SendNotification.cs b/Questionable/Controller/Steps/Common/SendNotification.cs index 5edb743c..7334ca07 100644 --- a/Questionable/Controller/Steps/Common/SendNotification.cs +++ b/Questionable/Controller/Steps/Common/SendNotification.cs @@ -12,14 +12,14 @@ namespace Questionable.Controller.Steps.Common; internal static class SendNotification { internal sealed class Factory( - Configuration configuration, + AutomatonIpc automatonIpc, TerritoryData territoryData) : SimpleTaskFactory { public override ITask? CreateTask(Quest quest, QuestSequence sequence, QuestStep step) { return step.InteractionType switch { - EInteractionType.Snipe when !configuration.General.AutomaticallyCompleteSnipeTasks => + EInteractionType.Snipe when !automatonIpc.IsAutoSnipeEnabled => new Task(step.InteractionType, step.Comment), EInteractionType.Duty => new Task(step.InteractionType, step.ContentFinderConditionId.HasValue diff --git a/Questionable/Controller/Steps/Interactions/Interact.cs b/Questionable/Controller/Steps/Interactions/Interact.cs index ac8f5109..0ca70c11 100644 --- a/Questionable/Controller/Steps/Interactions/Interact.cs +++ b/Questionable/Controller/Steps/Interactions/Interact.cs @@ -8,6 +8,7 @@ using FFXIVClientStructs.FFXIV.Client.Game; using Microsoft.Extensions.Logging; using Questionable.Controller.Steps.Shared; using Questionable.Controller.Utils; +using Questionable.External; using Questionable.Functions; using Questionable.Model; using Questionable.Model.Questing; @@ -16,7 +17,7 @@ namespace Questionable.Controller.Steps.Interactions; internal static class Interact { - internal sealed class Factory(Configuration configuration) : ITaskFactory + internal sealed class Factory(AutomatonIpc automatonIpc) : ITaskFactory { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { @@ -43,7 +44,7 @@ internal static class Interact } else if (step.InteractionType == EInteractionType.Snipe) { - if (!configuration.General.AutomaticallyCompleteSnipeTasks) + if (!automatonIpc.IsAutoSnipeEnabled) yield break; } else if (step.InteractionType != EInteractionType.Interact) diff --git a/Questionable/Controller/Utils/AutoSnipeHandler.cs b/Questionable/Controller/Utils/AutoSnipeHandler.cs deleted file mode 100644 index dc48c3ac..00000000 --- a/Questionable/Controller/Utils/AutoSnipeHandler.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using Dalamud.Hooking; -using Dalamud.Plugin.Services; -using FFXIVClientStructs.FFXIV.Client.Game.Event; -using FFXIVClientStructs.FFXIV.Common.Lua; - -namespace Questionable.Controller.Utils; - -internal sealed unsafe class AutoSnipeHandler : IDisposable -{ - private readonly QuestController _questController; - private readonly Configuration _configuration; - private readonly Hook _enqueueSnipeTaskHook; - - private delegate ulong EnqueueSnipeTaskDelegate(EventSceneModuleImplBase* scene, lua_State* state); - - public AutoSnipeHandler(QuestController questController, Configuration configuration, IGameInteropProvider gameInteropProvider) - { - _questController = questController; - _configuration = configuration; - - _enqueueSnipeTaskHook = - gameInteropProvider.HookFromSignature( - "48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 50 48 8B F1 48 8D 4C 24 ?? E8 ?? ?? ?? ?? 48 8B 4C 24 ??", - EnqueueSnipeTask); - } - - public void Enable() => _enqueueSnipeTaskHook.Enable(); - - private ulong EnqueueSnipeTask(EventSceneModuleImplBase* scene, lua_State* state) - { - if (_configuration.General.AutomaticallyCompleteSnipeTasks && _questController.IsRunning) - { - var val = state->top; - val->tt = 3; - val->value.n = 1; - state->top += 1; - return 1; - } - else - return _enqueueSnipeTaskHook.Original.Invoke(scene, state); - } - - public void Dispose() - { - _enqueueSnipeTaskHook.Dispose(); - } -} diff --git a/Questionable/External/AutomatonIpc.cs b/Questionable/External/AutomatonIpc.cs new file mode 100644 index 00000000..69e94678 --- /dev/null +++ b/Questionable/External/AutomatonIpc.cs @@ -0,0 +1,40 @@ +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; +using Dalamud.Plugin.Ipc.Exceptions; +using Microsoft.Extensions.Logging; + +namespace Questionable.External; + +internal sealed class AutomatonIpc +{ + private readonly ILogger _logger; + private readonly ICallGateSubscriber _isTweakEnabled; + private bool _loggedIpcError; + + public AutomatonIpc(IDalamudPluginInterface pluginInterface, ILogger logger) + { + _logger = logger; + _isTweakEnabled = pluginInterface.GetIpcSubscriber("Automaton.IsTweakEnabled"); + logger.LogWarning("Automaton x {IsTweakEnabled}", IsAutoSnipeEnabled); + } + + public bool IsAutoSnipeEnabled + { + get + { + try + { + return _isTweakEnabled.InvokeFunc("AutoSnipeQuests"); + } + catch (IpcError e) + { + if (!_loggedIpcError) + { + _loggedIpcError = true; + _logger.LogWarning(e, "Could not query automaton for tweak status, probably not installed"); + } + return false; + } + } + } +} diff --git a/Questionable/QuestionablePlugin.cs b/Questionable/QuestionablePlugin.cs index 7e9fb3f5..8cc59d16 100644 --- a/Questionable/QuestionablePlugin.cs +++ b/Questionable/QuestionablePlugin.cs @@ -112,7 +112,6 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); @@ -128,6 +127,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); } private static void AddTaskFactories(ServiceCollection serviceCollection) @@ -300,8 +300,8 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceProvider.GetRequiredService(); serviceProvider.GetRequiredService(); serviceProvider.GetRequiredService(); - serviceProvider.GetRequiredService().Enable(); serviceProvider.GetRequiredService(); + serviceProvider.GetRequiredService(); } public void Dispose() diff --git a/Questionable/Windows/ConfigWindow.cs b/Questionable/Windows/ConfigWindow.cs index 97847de5..27c968a0 100644 --- a/Questionable/Windows/ConfigWindow.cs +++ b/Questionable/Windows/ConfigWindow.cs @@ -115,18 +115,6 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig _configuration.General.ConfigureTextAdvance = configureTextAdvance; Save(); } - - if (ImGui.CollapsingHeader("Cheats")) - { - ImGui.TextColored(ImGuiColors.DalamudRed, - "This setting will be removed in a future version, and will be\navailable through TextAdvance instead."); - bool automaticallyCompleteSnipeTasks = _configuration.General.AutomaticallyCompleteSnipeTasks; - if (ImGui.Checkbox("Automatically complete snipe tasks", ref automaticallyCompleteSnipeTasks)) - { - _configuration.General.AutomaticallyCompleteSnipeTasks = automaticallyCompleteSnipeTasks; - Save(); - } - } } private void DrawNotificationsTab() diff --git a/Questionable/Windows/OneTimeSetupWindow.cs b/Questionable/Windows/OneTimeSetupWindow.cs index 2ec22702..f1c71552 100644 --- a/Questionable/Windows/OneTimeSetupWindow.cs +++ b/Questionable/Windows/OneTimeSetupWindow.cs @@ -10,10 +10,11 @@ using ImGuiNET; using LLib; using LLib.ImGui; using Microsoft.Extensions.Logging; +using Questionable.External; namespace Questionable.Windows; -internal sealed class OneTimeSetupWindow : LWindow, IDisposable +internal sealed class OneTimeSetupWindow : LWindow { private static readonly IReadOnlyList RequiredPlugins = [ @@ -22,35 +23,24 @@ internal sealed class OneTimeSetupWindow : LWindow, IDisposable vnavmesh handles the navigation within a zone, moving your character to the next quest-related objective. """, - new Uri("https://github.com/awgil/ffxiv_navmesh/")), + new Uri("https://github.com/awgil/ffxiv_navmesh/"), + new Uri("https://puni.sh/api/repository/veyn")), new("Lifestream", """ Used to travel to aethernet shards in cities. """, - new Uri("https://github.com/NightmareXIV/Lifestream")), + new Uri("https://github.com/NightmareXIV/Lifestream"), + new Uri("https://github.com/NightmareXIV/MyDalamudPlugins/raw/main/pluginmaster.json")), new("TextAdvance", """ Automatically accepts and turns in quests, skips cutscenes and dialogue. """, - new Uri("https://github.com/NightmareXIV/TextAdvance")), + new Uri("https://github.com/NightmareXIV/TextAdvance"), + new Uri("https://github.com/NightmareXIV/MyDalamudPlugins/raw/main/pluginmaster.json")), ]; - private static readonly IReadOnlyList RecommendedPlugins = - [ - new("Rotation Solver Reborn", - """ - Automatically handles most combat interactions you encounter - during quests, including being interrupted by mobs. - """, - new Uri("https://github.com/FFXIV-CombatReborn/RotationSolverReborn")), - new("NotificationMaster", - """ - Sends a configurable out-of-game notification if a quest - requires manual actions. - """, - new Uri("https://github.com/NightmareXIV/NotificationMaster")), - ]; + private readonly IReadOnlyList _recommendedPlugins; private readonly Configuration _configuration; private readonly IDalamudPluginInterface _pluginInterface; @@ -59,7 +49,7 @@ internal sealed class OneTimeSetupWindow : LWindow, IDisposable private readonly ILogger _logger; public OneTimeSetupWindow(Configuration configuration, IDalamudPluginInterface pluginInterface, UiUtils uiUtils, - DalamudReflector dalamudReflector, ILogger logger) + DalamudReflector dalamudReflector, ILogger logger, AutomatonIpc automatonIpc) : base("Questionable Setup###QuestionableOneTimeSetup", ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoSavedSettings, true) { @@ -69,6 +59,33 @@ internal sealed class OneTimeSetupWindow : LWindow, IDisposable _dalamudReflector = dalamudReflector; _logger = logger; + _recommendedPlugins = + [ + new("Rotation Solver Reborn", + """ + Automatically handles most combat interactions you encounter + during quests, including being interrupted by mobs. + """, + new Uri("https://github.com/FFXIV-CombatReborn/RotationSolverReborn"), + new Uri( + "https://raw.githubusercontent.com/FFXIV-CombatReborn/CombatRebornRepo/main/pluginmaster.json")), + new PluginInfo("Automaton", + """ + Automaton is a collection of automation-related tweaks. + The 'Sniper no sniping' tweak can complete snipe tasks automatically. + """, + new Uri("https://github.com/Jaksuhn/Automaton"), + new Uri("https://puni.sh/api/repository/croizat"), + [new PluginDetailInfo("'Sniper no sniping' enabled", () => automatonIpc.IsAutoSnipeEnabled)]), + new("NotificationMaster", + """ + Sends a configurable out-of-game notification if a quest + requires manual actions. + """, + new Uri("https://github.com/NightmareXIV/NotificationMaster"), + null), + ]; + RespectCloseHotkey = false; ShowCloseButton = false; AllowPinning = false; @@ -101,7 +118,7 @@ internal sealed class OneTimeSetupWindow : LWindow, IDisposable ImGui.Text("The following plugins are recommended, but not required:"); using (ImRaii.PushIndent()) { - foreach (var plugin in RecommendedPlugins) + foreach (var plugin in _recommendedPlugins) DrawPlugin(plugin, checklistPadding); } @@ -149,8 +166,28 @@ internal sealed class OneTimeSetupWindow : LWindow, IDisposable using (ImRaii.PushIndent(checklistPadding)) { ImGui.TextUnformatted(plugin.Details); - if (!isInstalled && ImGui.Button("Open Repository")) - Util.OpenLink(plugin.Uri.ToString()); + if (plugin.DetailsToCheck != null) + { + foreach (var detail in plugin.DetailsToCheck) + _uiUtils.ChecklistItem(detail.DisplayName, isInstalled && detail.Predicate()); + } + + ImGui.Spacing(); + + if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Globe, "Open Website")) + Util.OpenLink(plugin.WebsiteUri.ToString()); + + ImGui.SameLine(); + if (plugin.DalamudRepositoryUri != null) + { + if (ImGuiComponents.IconButtonWithText(FontAwesomeIcon.Code, "Open Repository")) + Util.OpenLink(plugin.DalamudRepositoryUri.ToString()); + } + else + { + ImGui.AlignTextToFramePadding(); + ImGuiComponents.HelpMarker("Available on official Dalamud Repository"); + } } } @@ -162,12 +199,12 @@ internal sealed class OneTimeSetupWindow : LWindow, IDisposable return _dalamudReflector.TryGetDalamudPlugin(internalName, out _, suppressErrors: true, ignoreCache: true); } - public void Dispose() - { - } - private sealed record PluginInfo( string DisplayName, string Details, - Uri Uri); + Uri WebsiteUri, + Uri? DalamudRepositoryUri, + List? DetailsToCheck = null); + + private sealed record PluginDetailInfo(string DisplayName, Func Predicate); } From 5da2dc9f8e91175cfd96f7dc25e348506b97b7bd Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 22 Nov 2024 22:22:53 +0100 Subject: [PATCH 84/95] Add some Honored Pelupelu quests --- Directory.Build.targets | 2 +- .../Dailies/5223_In Time for Lunch.json | 57 +++++++++- .../Dailies/5224_His Swarm Enemy.json | 104 ++++++++++++++++- .../Dailies/5225_Seasoned Adventurer.json | 107 +++++++++++++++++- 4 files changed, 265 insertions(+), 5 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index ba0f6f9d..cff821d5 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,5 +1,5 @@ - 4.3 + 4.4 diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5223_In Time for Lunch.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5223_In Time for Lunch.json index f7b53cd4..52c6f2e7 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5223_In Time for Lunch.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5223_In Time for Lunch.json @@ -1,7 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "liza", - "Disabled": true, "QuestSequence": [ { "Sequence": 0, @@ -28,6 +27,62 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 746.76465, + "Y": 15.431515, + "Z": -201.92921 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "TerritoryId": 1188, + "MaximumDistance": 300 + } + } + } + }, + { + "DataId": 1051741, + "Position": { + "X": 744.19763, + "Y": 15.431515, + "Z": -199.17603 + }, + "StopDistance": 7, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1052341, + "Position": { + "X": 239.49023, + "Y": 111.689354, + "Z": 699.3667 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "AetheryteShortcut": "Kozama'uka - Many Fires", + "Fly": true + } + ] + }, { "Sequence": 255, "Steps": [ diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5224_His Swarm Enemy.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5224_His Swarm Enemy.json index f7b53cd4..c528538a 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5224_His Swarm Enemy.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5224_His Swarm Enemy.json @@ -1,7 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "liza", - "Disabled": true, "QuestSequence": [ { "Sequence": 0, @@ -28,6 +27,109 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014508, + "Position": { + "X": 566.1554, + "Y": 123.552246, + "Z": 700.4043 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18177 + ], + "AetheryteShortcut": "Kozama'uka - Many Fires", + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 1 + } + ], + null, + null, + null + ] + }, + { + "DataId": 2014509, + "Position": { + "X": 557.94604, + "Y": 124.65088, + "Z": 778.56104 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18177 + ], + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 2 + } + ], + null, + null, + null + ] + }, + { + "DataId": 2014507, + "Position": { + "X": 721.8584, + "Y": 123.09448, + "Z": 729.9762 + }, + "TerritoryId": 1188, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 18177 + ], + "Fly": true, + "RequiredQuestVariables": [ + null, + null, + [ + { + "High": 3 + } + ], + null, + null, + null + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1052443, + "Position": { + "X": 641.8097, + "Y": 122.10785, + "Z": 730.70874 + }, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true + } + ] + }, { "Sequence": 255, "Steps": [ diff --git a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5225_Seasoned Adventurer.json b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5225_Seasoned Adventurer.json index f7b53cd4..a26b0bfd 100644 --- a/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5225_Seasoned Adventurer.json +++ b/QuestPaths/7.x - Dawntrail/Allied Societies/Pelupelu/Dailies/5225_Seasoned Adventurer.json @@ -1,7 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "liza", - "Disabled": true, "QuestSequence": [ { "Sequence": 0, @@ -28,6 +27,96 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2014511, + "Position": { + "X": 226.85583, + "Y": 2.9450073, + "Z": -199.6643 + }, + "StopDistance": 1, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 2014510, + "Position": { + "X": 218.1582, + "Y": 2.2124634, + "Z": -184.92413 + }, + "StopDistance": 1, + "TerritoryId": 1188, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 2014512, + "Position": { + "X": 61.53955, + "Y": 8.102478, + "Z": -230.79272 + }, + "StopDistance": 1, + "TerritoryId": 1188, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": 746.76465, + "Y": 15.431515, + "Z": -201.92921 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Kozama'uka - Dock Poga" + }, + { + "DataId": 1051741, + "Position": { + "X": 744.19763, + "Y": 15.431515, + "Z": -199.17603 + }, + "StopDistance": 7, + "TerritoryId": 1188, + "InteractionType": "Interact" + } + ] + }, { "Sequence": 255, "Steps": [ @@ -39,7 +128,21 @@ }, "TerritoryId": 1188, "InteractionType": "WalkTo", - "AetheryteShortcut": "Kozama'uka - Dock Poga" + "Fly": true, + "AetheryteShortcut": "Kozama'uka - Dock Poga", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 770.7179, + "Y": 12.84657, + "Z": -263.99634 + }, + "TerritoryId": 1188, + "MaximumDistance": 300 + } + } + } }, { "DataId": 1051711, From c86f9955f75780cee7d263ba9fd2d2834e7870b8 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 22 Nov 2024 22:25:06 +0100 Subject: [PATCH 85/95] Update dependencies --- LLib | 2 +- vendor/ECommons | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/LLib b/LLib index e4bbc05e..783fea97 160000 --- a/LLib +++ b/LLib @@ -1 +1 @@ -Subproject commit e4bbc05ede6f6f01e7028b24614ed8cb333e909c +Subproject commit 783fea977a2524dd63e717367fc026c52efe6c23 diff --git a/vendor/ECommons b/vendor/ECommons index 71ee09f7..6ea40a9e 160000 --- a/vendor/ECommons +++ b/vendor/ECommons @@ -1 +1 @@ -Subproject commit 71ee09f7cc2230a73503b945422760da1368405c +Subproject commit 6ea40a9eea2e805f2f566fe0493749c7c0639ea3 From 92b97a7caabcba804260295d47c1414290d1a4f8 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 22 Nov 2024 22:30:52 +0100 Subject: [PATCH 86/95] Update inspection exclusion paths --- Questionable.sln.DotSettings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Questionable.sln.DotSettings b/Questionable.sln.DotSettings index 3c6b4ec8..830879e0 100644 --- a/Questionable.sln.DotSettings +++ b/Questionable.sln.DotSettings @@ -1,5 +1,5 @@  - ExplicitlyExcluded + ExplicitlyExcluded True True True From 9dfe110d38b2525a3033de5702600364792a24f0 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Sat, 23 Nov 2024 18:13:19 +0800 Subject: [PATCH 87/95] Add final story quest - "Glory Be to the Scree" --- .../Story/3799_Glory Be to the Scree.json | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3799_Glory Be to the Scree.json diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3799_Glory Be to the Scree.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3799_Glory Be to the Scree.json new file mode 100644 index 00000000..5296246e --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3799_Glory Be to the Scree.json @@ -0,0 +1,103 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1032659, + "Position": { + "X": 802.79236, + "Y": -45.91779, + "Z": -218.58557 + }, + "TerritoryId": 817, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1027716, + "Position": { + "X": 494.9873, + "Y": -6.555339, + "Z": -224.93329 + }, + "TerritoryId": 817, + "InteractionType": "Interact", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1032732, + "Position": { + "X": -26.93219, + "Y": -24.638563, + "Z": 319.35608 + }, + "TerritoryId": 817, + "InteractionType": "Interact", + "AetheryteShortcut": "Rak'tika - Slitherbough", + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1032750, + "Position": { + "X": -523.827, + "Y": 0.143766, + "Z": 227.55774 + }, + "TerritoryId": 817, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1032750, + "Position": { + "X": -523.827, + "Y": 0.143766, + "Z": 227.55774 + }, + "TerritoryId": 817, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1032660, + "Position": { + "X": 804.4098, + "Y": -45.9255, + "Z": -216.41876 + }, + "TerritoryId": 817, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + } + ] + } + ] +} From ccf077ed6bc37a64aa2c86aa44b8c41b6238ce42 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Sat, 23 Nov 2024 18:36:49 +0800 Subject: [PATCH 88/95] Updated a few daily quests - A Real Pearler - You Have the Rite --- .../Kojin/Dailies/2980_A Real Pearler.json | 25 ++++++++----------- .../Kojin/Dailies/2981_You Have the Rite.json | 8 +++--- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2980_A Real Pearler.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2980_A Real Pearler.json index ae49b316..0d35b0dd 100644 --- a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2980_A Real Pearler.json +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2980_A Real Pearler.json @@ -22,9 +22,9 @@ "Steps": [ { "Position": { - "X": 291.9449, - "Y": -62.62814, - "Z": -214.1033 + "X": 318.06195, + "Y": -83.027016, + "Z": -226.5931 }, "TerritoryId": 613, "InteractionType": "WalkTo", @@ -153,16 +153,6 @@ { "Sequence": 2, "Steps": [ - { - "Position": { - "X": 804.21405, - "Y": 1.4000988, - "Z": 720.92487 - }, - "TerritoryId": 613, - "InteractionType": "WalkTo", - "Fly": true - }, { "DataId": 1024460, "Position": { @@ -172,6 +162,11 @@ }, "TerritoryId": 613, "InteractionType": "Interact", + "AetheryteShortcut": "Kugane", + "AethernetShortcut": [ + "[Kugane] Aetheryte Plaza", + "[Kugane] The Ruby Price" + ], "Fly": true } ] @@ -187,8 +182,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "Fly": true, - "AetheryteShortcut": "Ruby Sea - Tamamizu" + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "Fly": true }, { "DataId": 1024217, diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2981_You Have the Rite.json b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2981_You Have the Rite.json index 8cafa32b..8ad07b43 100644 --- a/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2981_You Have the Rite.json +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Kojin/Dailies/2981_You Have the Rite.json @@ -28,6 +28,7 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", + "RestartNavigationIfCancelled": false, "Fly": true }, { @@ -38,6 +39,7 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", + "RestartNavigationIfCancelled": false, "Fly": true }, { @@ -58,9 +60,9 @@ "Steps": [ { "Position": { - "X": 368.39856, - "Y": -116.624695, - "Z": -291.34058 + "X": 367.17773, + "Y": -119.94679, + "Z": -292.3781 }, "TerritoryId": 613, "InteractionType": "UseItem", From 501a2bd06d012990d2de3b7697e6b887097c3000 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Sat, 23 Nov 2024 19:43:42 +0800 Subject: [PATCH 89/95] Added new daily quest: Hard to Port --- .../Amalj'aa/Dailies/1240_Hard to Port.json | 213 ++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1240_Hard to Port.json diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1240_Hard to Port.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1240_Hard to Port.json new file mode 100644 index 00000000..ca56da83 --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1240_Hard to Port.json @@ -0,0 +1,213 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1005551, + "Position": { + "X": 98.924194, + "Y": 15.29447, + "Z": -349.4469 + }, + "TerritoryId": 146, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1005745, + "Position": { + "X": 22.720581, + "Y": 4.240738, + "Z": -443.07623 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": -126.48953, + "Y": 27.57419, + "Z": 138.61473 + }, + "TerritoryId": 146, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 2003048, + "Position": { + "X": -136.85822, + "Y": 18.753235, + "Z": 116.50256 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [1, 2], null, null, null], + "Mount": true + }, + { + "DataId": 2003049, + "Position": { + "X": -121.78229, + "Y": 28.732666, + "Z": 140.33716 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [3], null, null, null], + "Mount": true + }, + { + "DataId": 2003050, + "Position": { + "X": -91.96619, + "Y": 43.07617, + "Z": 156.84741 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [4], null, null, null], + "Mount": true + }, + { + "DataId": 2003051, + "Position": { + "X": -55.40558, + "Y": 42.526855, + "Z": 192.18738 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [1, 3, 4], null, null, null], + "Mount": true + }, + { + "DataId": 2003052, + "Position": { + "X": 6.668152, + "Y": 36.9115, + "Z": 207.01917 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [2], null, null, null], + "Mount": true + }, + { + "DataId": 2003053, + "Position": { + "X": 73.31958, + "Y": 31.784546, + "Z": 153.76514 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [1], null, null, null], + "Mount": true + }, + { + "DataId": 2003054, + "Position": { + "X": 79.42322, + "Y": 25.802979, + "Z": 208.66711 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [2, 4], null, null, null], + "Mount": true + }, + { + "DataId": 2003055, + "Position": { + "X": 106.889404, + "Y": 14.602844, + "Z": 147.53943 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, null, [3], null, null, null], + "Mount": true + }, + { + "Position": { + "X": 135.42383, + "Y": 8.102478, + "Z": 178.36267 + }, + "TerritoryId": 146, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [2456], + "Mount": true + }, + { + "DataId": 2003056, + "Position": { + "X": 135.42383, + "Y": 8.102478, + "Z": 178.36267 + }, + "TerritoryId": 146, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "Position": { + "X": -63.849556, + "Y": 26.409807, + "Z": -383.9894 + }, + "TerritoryId": 146, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Southern Thanalan - Little Ala Mhigo", + "Mount": true + }, + { + "DataId": 1005745, + "Position": { + "X": 22.720581, + "Y": 4.240738, + "Z": -443.07623 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1005551, + "Position": { + "X": 98.924194, + "Y": 15.29447, + "Z": -349.4469 + }, + "TerritoryId": 146, + "InteractionType": "CompleteQuest", + "Fly": true + } + ] + } + ] +} From 0e71d374240dba1da9ba8922bd51c8111dc521c2 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Sat, 23 Nov 2024 19:44:44 +0800 Subject: [PATCH 90/95] Disabled incomplete daily quests add and committed by mistake. These are all currently WIP. - Smothering Instinct - Forged in Flame - Beacon Keepers --- .../Dailies/1227_Smothering Instinct.json | 1 + .../Dailies/1234_Forged in Flame.json | 111 ++++++++++++++++++ .../Amalj'aa/Dailies/1235_Beacon Keepers.json | 1 + 3 files changed, 113 insertions(+) diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1227_Smothering Instinct.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1227_Smothering Instinct.json index 538e8a4d..2fbacffc 100644 --- a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1227_Smothering Instinct.json +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1227_Smothering Instinct.json @@ -1,6 +1,7 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "plogon_enjoyer", + "Disabled": true, "QuestSequence": [ { "Sequence": 0, diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1234_Forged in Flame.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1234_Forged in Flame.json index f489f265..8ef09f16 100644 --- a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1234_Forged in Flame.json +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1234_Forged in Flame.json @@ -1,6 +1,8 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "plogon_enjoyer", + "Disabled": true, + "Comment": "WIP too many cases", "QuestSequence": [ { "Sequence": 0, @@ -17,9 +19,118 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": -175.15483, + "Y": 40, + "Z": 159.05237 + }, + "TerritoryId": 146, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 2003019, + "Position": { + "X": -88.059875, + "Y": 43.503418, + "Z": 149.00427 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [4], null, null, null, null], + "Mount": true + }, + { + "DataId": 2003022, + "Position": { + "X": -170.85535, + "Y": 39.993896, + "Z": 135.45422 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [5], null, null, null, null], + "Mount": true + }, + { + "DataId": 2003017, + "Position": { + "X": -97.48993, + "Y": 45.792236, + "Z": 197.28381 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [20], null, null, null, null], + "Mount": true + }, + { + "DataId": 2003020, + "Position": { + "X": -77.836365, + "Y": 43.4729, + "Z": 155.50464 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [21], null, null, null, null], + "Mount": true + }, + { + "DataId": 2003015, + "Position": { + "X": 133.62317, + "Y": 13.961914, + "Z": 152.26978 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [36], null, null, null, null], + "Mount": true + }, + { + "DataId": 2003018, + "Position": { + "X": -100.572266, + "Y": 45.76172, + "Z": 211.04749 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [37], null, null, null, null], + "Mount": true + }, + { + "DataId": 2003016, + "Position": { + "X": 185.19873, + "Y": 13.992493, + "Z": 231.89136 + }, + "TerritoryId": 146, + "InteractionType": "Interact", + "RequiredQuestVariables": [null, [52, 53], null, null, null, null], + "Mount": true + } + ] + }, { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 30.256956, + "Y": 38.639523, + "Z": 145.03891 + }, + "TerritoryId": 146, + "InteractionType": "WalkTo", + "Mount": true + }, { "DataId": 1005551, "Position": { diff --git a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1235_Beacon Keepers.json b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1235_Beacon Keepers.json index f489f265..1cedb0ed 100644 --- a/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1235_Beacon Keepers.json +++ b/QuestPaths/2.x - A Realm Reborn/Allied Societies/Amalj'aa/Dailies/1235_Beacon Keepers.json @@ -1,6 +1,7 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "plogon_enjoyer", + "Disabled": true, "QuestSequence": [ { "Sequence": 0, From 70a7d22afc0e73db177dd2ac6a5fa7437e5ae47d Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Sat, 23 Nov 2024 22:23:38 +0800 Subject: [PATCH 91/95] Added Crystalline Mean quest for Facet of Nourishing - Where We Belong --- .../3234_Where We Belong.json | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Nourishing/3234_Where We Belong.json diff --git a/QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Nourishing/3234_Where We Belong.json b/QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Nourishing/3234_Where We Belong.json new file mode 100644 index 00000000..fca5a4c6 --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Nourishing/3234_Where We Belong.json @@ -0,0 +1,133 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1027235, + "Position": { + "X": -19.516357, + "Y": 20.186, + "Z": -130.1748 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1028484, + "Position": { + "X": -129.35083, + "Y": 0, + "Z": -62.912964 + }, + "TerritoryId": 819, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Crystarium] The Crystalline Mean", + "[Crystarium] Temenos Rookery" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1028484, + "Position": { + "X": -129.35083, + "Y": 0, + "Z": -62.912964 + }, + "TerritoryId": 819, + "InteractionType": "Say", + "ChatMessage": { + "Key": "TEXT_LUCKLA302_03234_SAYTODO_000_013" + } + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "TerritoryId": 819, + "InteractionType": "Craft", + "ItemId": 27253, + "ItemCount": 1 + }, + { + "DataId": 1030659, + "Position": { + "X": -131.15137, + "Y": 0, + "Z": -65.53754 + }, + "TerritoryId": 819, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1028485, + "Position": { + "X": -492.3934, + "Y": 69.70277, + "Z": 570.18384 + }, + "TerritoryId": 816, + "InteractionType": "Interact", + "AetheryteShortcut": "Il Mheg - Lydha Lran", + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1028487, + "Position": { + "X": 337.84998, + "Y": 87.30014, + "Z": -710.65845 + }, + "TerritoryId": 816, + "InteractionType": "Interact", + "AetheryteShortcut": "Il Mheg - Wolekdorf", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1027235, + "Position": { + "X": -19.516357, + "Y": 20.186, + "Z": -130.1748 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Crystalline Mean" + ] + } + ] + } + ] +} From ba54a1601c161e6adde8a47188d6c387d7047789 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Sat, 23 Nov 2024 22:52:20 +0800 Subject: [PATCH 92/95] Added new quest "Healing Old Wounds" --- .../3235_Healing Old Wounds.json | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Nourishing/3235_Healing Old Wounds.json diff --git a/QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Nourishing/3235_Healing Old Wounds.json b/QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Nourishing/3235_Healing Old Wounds.json new file mode 100644 index 00000000..8339a029 --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Nourishing/3235_Healing Old Wounds.json @@ -0,0 +1,131 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1027235, + "Position": { + "X": -19.516357, + "Y": 20.186, + "Z": -130.1748 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1030659, + "Position": { + "X": -131.15137, + "Y": 0, + "Z": -65.53754 + }, + "TerritoryId": 819, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Crystarium] The Crystalline Mean", + "[Crystarium] Temenos Rookery" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "TerritoryId": 819, + "InteractionType": "Craft", + "ItemId": 27255, + "ItemCount": 1 + }, + { + "DataId": 1030659, + "Position": { + "X": -131.15137, + "Y": 0, + "Z": -65.53754 + }, + "TerritoryId": 819, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1028489, + "Position": { + "X": 355.42847, + "Y": 3.8289368, + "Z": 224.17017 + }, + "TerritoryId": 813, + "InteractionType": "Interact", + "AetheryteShortcut": "Lakeland - Fort Jobb", + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1028491, + "Position": { + "X": 29.251465, + "Y": 36.20521, + "Z": -207.38544 + }, + "TerritoryId": 819, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1030659, + "Position": { + "X": -131.15137, + "Y": 0, + "Z": -65.53754 + }, + "TerritoryId": 819, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Crystarium] The Amaro Launch", + "[Crystarium] Temenos Rookery" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1027235, + "Position": { + "X": -19.516357, + "Y": 20.186, + "Z": -130.1748 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AethernetShortcut": [ + "[Crystarium] Temenos Rookery", + "[Crystarium] The Crystalline Mean" + ] + } + ] + } + ] +} From 260a9c1d30cf5028477c164f7f2bc40eb53dd415 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Sat, 23 Nov 2024 23:13:37 +0800 Subject: [PATCH 93/95] Added the final quest for Facet of Crafting - The Notes of Bond Restoring --- .../3232_The Notes of Bond Restoring.json | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Crafting/3232_The Notes of Bond Restoring.json diff --git a/QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Crafting/3232_The Notes of Bond Restoring.json b/QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Crafting/3232_The Notes of Bond Restoring.json new file mode 100644 index 00000000..15b7c2be --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Crystalline Mean Quests/Facet of Crafting/3232_The Notes of Bond Restoring.json @@ -0,0 +1,117 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1027234, + "Position": { + "X": 10.2387085, + "Y": 20.185999, + "Z": -138.2315 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1028326, + "Position": { + "X": 10.940674, + "Y": 20.186, + "Z": -142.53455 + }, + "TerritoryId": 819, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Prompt": "TEXT_LUCKLA203_03232_Q1_000_000", + "Type": "List", + "Answer": "TEXT_LUCKLA203_03232_A1_000_001" + } + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "TerritoryId": 819, + "InteractionType": "Craft", + "ItemId": 27247, + "ItemCount": 1 + }, + { + "DataId": 1027234, + "Position": { + "X": 10.2387085, + "Y": 20.185999, + "Z": -138.2315 + }, + "TerritoryId": 819, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1028438, + "Position": { + "X": -55.832825, + "Y": 3.9998174, + "Z": 198.6571 + }, + "TerritoryId": 819, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Crystarium] The Crystalline Mean", + "[Crystarium] Musica Universalis Markets" + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1028438, + "Position": { + "X": -55.832825, + "Y": 3.9998174, + "Z": 198.6571 + }, + "TerritoryId": 819, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1027234, + "Position": { + "X": 10.2387085, + "Y": 20.185999, + "Z": -138.2315 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AethernetShortcut": [ + "[Crystarium] Musica Universalis Markets", + "[Crystarium] The Crystalline Mean" + ] + } + ] + } + ] +} From 61c160ecfb92edf53c9841a30269c5dc7a3b1ede Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 24 Nov 2024 01:03:00 +0100 Subject: [PATCH 94/95] Add 'Where Worries Melt Away' --- .../4794_Where Worries Melt Away.json | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 QuestPaths/6.x - Endwalker/Side Stories/Island Sanctuary/4794_Where Worries Melt Away.json diff --git a/QuestPaths/6.x - Endwalker/Side Stories/Island Sanctuary/4794_Where Worries Melt Away.json b/QuestPaths/6.x - Endwalker/Side Stories/Island Sanctuary/4794_Where Worries Melt Away.json new file mode 100644 index 00000000..a1440668 --- /dev/null +++ b/QuestPaths/6.x - Endwalker/Side Stories/Island Sanctuary/4794_Where Worries Melt Away.json @@ -0,0 +1,123 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1044156, + "Position": { + "X": -276.3562, + "Y": 39.993896, + "Z": 224.26172 + }, + "TerritoryId": 1055, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2013553, + "Position": { + "X": -389.82227, + "Y": 3.250122, + "Z": 238.02539 + }, + "TerritoryId": 1055, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1046221, + "Position": { + "X": -303.12048, + "Y": 39.993896, + "Z": 244.80042 + }, + "TerritoryId": 1055, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1046279, + "Position": { + "X": -147.17328, + "Y": 48.330666, + "Z": 164.38538 + }, + "TerritoryId": 1055, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1046281, + "Position": { + "X": -118.21167, + "Y": 91.550545, + "Z": 398.79456 + }, + "TerritoryId": 1055, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1046221, + "Position": { + "X": -303.12048, + "Y": 39.993896, + "Z": 244.80042 + }, + "TerritoryId": 1055, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1046284, + "Position": { + "X": -402.2431, + "Y": 1.7196094, + "Z": 226.4591 + }, + "StopDistance": 5, + "TerritoryId": 1055, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} From 71a34e7b2121a3d00a73fa652e6e559a5e9084ac Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 24 Nov 2024 03:18:33 +0100 Subject: [PATCH 95/95] Add 'Like Sire Like Fledgling' --- .../576_Like Sire Like Fledgling.json | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/576_Like Sire Like Fledgling.json diff --git a/QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/576_Like Sire Like Fledgling.json b/QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/576_Like Sire Like Fledgling.json new file mode 100644 index 00000000..10fa32ff --- /dev/null +++ b/QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/576_Like Sire Like Fledgling.json @@ -0,0 +1,37 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1011030, + "Position": { + "X": 7.522644, + "Y": -1.7667189E-06, + "Z": -68.589294 + }, + "TerritoryId": 388, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1010472, + "Position": { + "X": -53.26935, + "Y": 0.3093315, + "Z": 69.41321 + }, + "TerritoryId": 148, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Central Shroud - Bentbranch Meadows" + } + ] + } + ] +}