From cfce2591db3b6e4b66af502de5aac84acbb7bcf4 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 25 Aug 2024 11:15:05 +0200 Subject: [PATCH 01/69] Add missing dialogue option for 'Sustenance for the Soul' --- .../Pixies/Story/3684_Sustenance for the Soul.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Pixies/Story/3684_Sustenance for the Soul.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Pixies/Story/3684_Sustenance for the Soul.json index a60a9eb8..75b26eac 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Pixies/Story/3684_Sustenance for the Soul.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Pixies/Story/3684_Sustenance for the Soul.json @@ -88,7 +88,14 @@ "TerritoryId": 814, "InteractionType": "Interact", "AetheryteShortcut": "Kholusia - Wright", - "Fly": true + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANPIX002_03684_Q1_000_000", + "Answer": "TEXT_BANPIX002_03684_A1_000_001" + } + ] } ] }, From 9430ca62da0f314739e4f6bb1ca793b388dd4098 Mon Sep 17 00:00:00 2001 From: cacahuetes Date: Sun, 25 Aug 2024 10:52:42 +0000 Subject: [PATCH 02/69] Upload files to "QuestPaths/3.x - Heavensward/Class Quests/WHM" --- .../WHM/1719_Taint Misbehaving.json | 215 ++++++++++++++++++ .../WHM/1720_A Journey of Purification.json | 91 ++++++++ .../1721_The Girl with the Dragon Tissue.json | 158 +++++++++++++ .../WHM/1722_The Dark Blight Writhes.json | 103 +++++++++ 4 files changed, 567 insertions(+) create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/WHM/1720_A Journey of Purification.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/WHM/1722_The Dark Blight Writhes.json diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json new file mode 100644 index 00000000..8715345a --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json @@ -0,0 +1,215 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": -146.86935, + "Y": 8.006159, + "Z": 268.78055 + }, + "StopDistance": 0.25, + "TerritoryId": 153, + "AetheryteShortcut": "South Shroud - Camp Tranquil", + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": -137.77051, + "Y": 7.7094107, + "Z": 275.28036 + }, + "DelaySeconds": 0.75 + }, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + }, + "StepIf": { + "Flying": "Unlocked", + "NearPosition": { + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "MaximumDistance": 3 + } + } + } + }, + { + "Position": { + "X": -139.04318, + "Y": 8.522301, + "Z": 280.0128 + }, + "TerritoryId": 153, + "InteractionType": "WalkTo", + "Fly": true, + "SkipConditions": { + "StepIf": { + "Flying": "Locked" + } + } + }, + { + "DataId": 1006751, + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "TerritoryId": 153, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013606, + "Position": { + "X": -317.1283, + "Y": 21.686531, + "Z": 183.03198 + }, + "TerritoryId": 148, + "Fly": true, + "InteractionType": "Interact", + "AetheryteShortcut": "Central Shroud - Bentbranch Meadows" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1006245, + "Position": { + "X": 4.9591064, + "Y": -46.518013, + "Z": 248.49304 + }, + "TerritoryId": 154, + "InteractionType": "Interact", + "AetheryteShortcut": "North Shroud - Fallgourd Float" + }, + { + "DataId": 1007092, + "Position": { + "X": -59.31189, + "Y": -40.90982, + "Z": 232.62378 + }, + "TerritoryId": 154, + "InteractionType": "Interact" + }, + { + "DataId": 1002804, + "Position": { + "X": -26.260803, + "Y": -40.705082, + "Z": 172.74731 + }, + "TerritoryId": 154, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "Position": { + "X": 108.506836, + "Y": 7.167203, + "Z": -47.01306 + }, + "Fly": true, + "TerritoryId": 154, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [4683] + }, + { + "DataId": 1013605, + "Position": { + "X": 108.506836, + "Y": 7.167203, + "Z": -47.01306 + }, + "TerritoryId": 154, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1013605, + "Position": { + "X": 108.506836, + "Y": 7.167203, + "Z": -47.01306 + }, + "TerritoryId": 154, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1013606, + "Position": { + "X": -317.1283, + "Y": 21.686531, + "Z": 183.03198 + }, + "TerritoryId": 148, + "Fly": true, + "InteractionType": "Interact", + "AetheryteShortcut": "Central Shroud - Bentbranch Meadows" + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1013608, + "Position": { + "X": -314.9615, + "Y": 21.609262, + "Z": 182.8794 + }, + "TerritoryId": 148, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1013609, + "Position": { + "X": -44.480103, + "Y": -40.949986, + "Z": 187.7622 + }, + "AetheryteShortcut": "North Shroud - Fallgourd Float", + "TerritoryId": 154, + "InteractionType": "CompleteQuest", + "NextQuestId": 1720 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1720_A Journey of Purification.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1720_A Journey of Purification.json new file mode 100644 index 00000000..510520eb --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1720_A Journey of Purification.json @@ -0,0 +1,91 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1013609, + "Position": { + "X": -44.480103, + "Y": -40.949986, + "Z": 187.7622 + }, + "AetheryteShortcut": "North Shroud - Fallgourd Float", + "TerritoryId": 154, + "InteractionType": "AcceptQuest", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013610, + "Position": { + "X": 209.21643, + "Y": 302, + "Z": -204.85242 + }, + "TerritoryId": 155, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013663, + "Position": { + "X": 161.91345, + "Y": 275.37952, + "Z": 16.403442 + }, + "TerritoryId": 155, + "Fly": true, + "InteractionType": "SinglePlayerDuty" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2005889, + "Position": { + "X": 143.78564, + "Y": 280.0183, + "Z": 19.882507 + }, + "TerritoryId": 155, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1013610, + "Position": { + "X": 209.21643, + "Y": 302, + "Z": -204.85242 + }, + "TerritoryId": 155, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "NextQuestId": 1721 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json new file mode 100644 index 00000000..f825f825 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json @@ -0,0 +1,158 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1013610, + "Position": { + "X": 209.21643, + "Y": 302, + "Z": -204.85242 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013613, + "Position": { + "X": 479.91138, + "Y": 226.62401, + "Z": 817.0442 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1011232, + "Position": { + "X": 506.8589, + "Y": 217.95148, + "Z": 792.4772 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + }, + { + "DataId": 1011237, + "Position": { + "X": 447.3181, + "Y": 212.53984, + "Z": 725.00183 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1013614, + "Position": { + "X": 463.5232, + "Y": 200.23772, + "Z": 651.911 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1013617, + "Position": { + "X": -513.0846, + "Y": 101.57904, + "Z": -653.3456 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "Fly": true + }, + { + "Position": { + "X": -336.4157, + "Y": 89.00586, + "Z": -586.5721 + }, + "TerritoryId": 397, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [4677] + } + ] + }, + + { + "Sequence": 5, + "Steps": [ + { + "DataId": 2005855, + "Position": { + "X": -336.4157, + "Y": 89.00586, + "Z": -586.5721 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1013618, + "Position": { + "X": -402.12103, + "Y": 90.9028, + "Z": -688.53284 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1013614, + "Position": { + "X": 463.5232, + "Y": 200.23772, + "Z": 651.911 + }, + "TerritoryId": 397, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "NextQuestId": 1722 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1722_The Dark Blight Writhes.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1722_The Dark Blight Writhes.json new file mode 100644 index 00000000..2a1a2d05 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1722_The Dark Blight Writhes.json @@ -0,0 +1,103 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1013614, + "Position": { + "X": 463.5232, + "Y": 200.23772, + "Z": 651.911 + }, + "TerritoryId": 397, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013619, + "Position": { + "X": -274.49457, + "Y": 125.33218, + "Z": -13.870483 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1013620, + "Position": { + "X": -275.2575, + "Y": 125.596924, + "Z": -11.215393 + }, + "TerritoryId": 397, + "InteractionType": "WaitForManualProgress", + "$": "Cure II needs to be added to list of actions" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2005857, + "Position": { + "X": -336.4157, + "Y": 89.00586, + "Z": -586.5721 + }, + "TerritoryId": 397, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [4690] + }, + { + "DataId": 2005857, + "Position": { + "X": -336.4157, + "Y": 89.00586, + "Z": -586.5721 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1013623, + "Position": { + "X": 486.93054, + "Y": -51.1414, + "Z": 25.986084 + }, + "TerritoryId": 398, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather", + "NextQuestId": 1723 + } + ] + } + ] +} From 11132beb227c80d1344c7873c1eb38e248bd6bca Mon Sep 17 00:00:00 2001 From: cacahuetes Date: Sun, 25 Aug 2024 10:53:03 +0000 Subject: [PATCH 03/69] Upload files to "QuestPaths/3.x - Heavensward/Class Quests/WHM" --- .../WHM/1723_In the Wake of Death.json | 136 +++++++++ .../WHM/1724_Trials of the Padjals.json | 93 ++++++ .../WHM/1725_Hands of Healing.json | 280 ++++++++++++++++++ 3 files changed, 509 insertions(+) create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/WHM/1723_In the Wake of Death.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json create mode 100644 QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1723_In the Wake of Death.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1723_In the Wake of Death.json new file mode 100644 index 00000000..1c433969 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1723_In the Wake of Death.json @@ -0,0 +1,136 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1013623, + "Position": { + "X": 486.93054, + "Y": -51.1414, + "Z": 25.986084 + }, + "TerritoryId": 398, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013624, + "Position": { + "X": -183.61182, + "Y": -104.708206, + "Z": 505.60767 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": -561.82196, + "Y": -46.707886, + "Z": 300.46533 + }, + "TerritoryId": 398, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [4691, 4692], + "Fly": true + }, + { + "DataId": 2005859, + "Position": { + "X": -561.82196, + "Y": -46.707886, + "Z": 300.46533 + }, + "TerritoryId": 398, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1013625, + "Position": { + "X": -679.9573, + "Y": -100.52397, + "Z": 775.1736 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1013625, + "Position": { + "X": -679.9573, + "Y": -100.52397, + "Z": 775.1736 + }, + "TerritoryId": 398, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [4690, 4691] + }, + { + "DataId": 2005861, + "Position": { + "X": -678.4009, + "Y": -100.60278, + "Z": 778.13367 + }, + "TerritoryId": 398, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1013625, + "Position": { + "X": -679.9573, + "Y": -100.52397, + "Z": 775.1736 + }, + "TerritoryId": 398, + "InteractionType": "CompleteQuest", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_JOBWHM580_01723_Q1_000_000", + "Answer": "TEXT_JOBWHM580_01723_A1_000_001" + } + ], + "NextQuestId": 1724 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json new file mode 100644 index 00000000..637c7e44 --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json @@ -0,0 +1,93 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1013627, + "Position": { + "X": -679.9573, + "Y": -100.52397, + "Z": 775.1736 + }, + "TerritoryId": 398, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": -146.86935, + "Y": 8.006159, + "Z": 268.78055 + }, + "StopDistance": 0.25, + "TerritoryId": 153, + "AetheryteShortcut": "South Shroud - Camp Tranquil", + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": -137.77051, + "Y": 7.7094107, + "Z": 275.28036 + }, + "DelaySeconds": 0.75 + }, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + }, + "StepIf": { + "Flying": "Unlocked", + "NearPosition": { + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "MaximumDistance": 3 + } + } + } + }, + { + "Position": { + "X": -139.04318, + "Y": 8.522301, + "Z": 280.0128 + }, + "TerritoryId": 153, + "InteractionType": "WalkTo", + "Fly": true, + "SkipConditions": { + "StepIf": { + "Flying": "Locked" + } + } + }, + { + "DataId": 1006751, + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "TerritoryId": 153, + "InteractionType": "CompleteQuest", + "NextQuestId": 1725 + } + ] + } + ] +} diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json new file mode 100644 index 00000000..3543774e --- /dev/null +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json @@ -0,0 +1,280 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": -146.86935, + "Y": 8.006159, + "Z": 268.78055 + }, + "StopDistance": 0.25, + "TerritoryId": 153, + "AetheryteShortcut": "South Shroud - Camp Tranquil", + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": -137.77051, + "Y": 7.7094107, + "Z": 275.28036 + }, + "DelaySeconds": 0.75 + }, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + }, + "StepIf": { + "Flying": "Unlocked", + "NearPosition": { + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "MaximumDistance": 3 + } + } + } + }, + { + "Position": { + "X": -139.04318, + "Y": 8.522301, + "Z": 280.0128 + }, + "TerritoryId": 153, + "InteractionType": "WalkTo", + "Fly": true, + "SkipConditions": { + "StepIf": { + "Flying": "Locked" + } + } + }, + { + "DataId": 1006751, + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "TerritoryId": 153, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013609, + "Position": { + "X": -44.480103, + "Y": -40.949986, + "Z": 187.7622 + }, + "TerritoryId": 154, + "InteractionType": "Interact", + "AetheryteShortcut": "North Shroud - Fallgourd Float" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": -146.86935, + "Y": 8.006159, + "Z": 268.78055 + }, + "StopDistance": 0.25, + "TerritoryId": 153, + "AetheryteShortcut": "South Shroud - Camp Tranquil", + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": -137.77051, + "Y": 7.7094107, + "Z": 275.28036 + }, + "DelaySeconds": 0.75 + }, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + }, + "StepIf": { + "Flying": "Unlocked", + "NearPosition": { + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "MaximumDistance": 3 + } + } + } + }, + { + "Position": { + "X": -139.04318, + "Y": 8.522301, + "Z": 280.0128 + }, + "TerritoryId": 153, + "InteractionType": "WalkTo", + "Fly": true, + "SkipConditions": { + "StepIf": { + "Flying": "Locked" + } + } + }, + { + "DataId": 1006751, + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "TerritoryId": 153, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1013632, + "Position": { + "X": 491.38623, + "Y": -51.091385, + "Z": 34.561646 + }, + "TerritoryId": 398, + "InteractionType": "Interact", + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1013635, + "Position": { + "X": -122.453674, + "Y": 0.72138774, + "Z": -615.80835 + }, + "TerritoryId": 398, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1013639, + "Position": { + "X": -120.74469, + "Y": 0.555462, + "Z": -616.6323 + }, + "TerritoryId": 398, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1013639, + "Position": { + "X": -120.74469, + "Y": 0.555462, + "Z": -616.6323 + }, + "TerritoryId": 398, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": -146.86935, + "Y": 8.006159, + "Z": 268.78055 + }, + "StopDistance": 0.25, + "TerritoryId": 153, + "AetheryteShortcut": "South Shroud - Camp Tranquil", + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": -137.77051, + "Y": 7.7094107, + "Z": 275.28036 + }, + "DelaySeconds": 0.75 + }, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + }, + "StepIf": { + "Flying": "Unlocked", + "NearPosition": { + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "MaximumDistance": 3 + } + } + } + }, + { + "Position": { + "X": -139.04318, + "Y": 8.522301, + "Z": 280.0128 + }, + "TerritoryId": 153, + "InteractionType": "WalkTo", + "Fly": true, + "SkipConditions": { + "StepIf": { + "Flying": "Locked" + } + } + }, + { + "DataId": 1006751, + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "TerritoryId": 153, + "InteractionType": "CompleteQuest", + "NextQuestId": 1725 + } + ] + } + ] +} From abee323d2bf41a8bd3ce127b36b3881f757401df Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 25 Aug 2024 13:45:57 +0200 Subject: [PATCH 04/69] Add IsUnmounting condition to UnmountTask --- Questionable/Controller/Steps/Common/Mount.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Questionable/Controller/Steps/Common/Mount.cs b/Questionable/Controller/Steps/Common/Mount.cs index 144de5ba..9502455c 100644 --- a/Questionable/Controller/Steps/Common/Mount.cs +++ b/Questionable/Controller/Steps/Common/Mount.cs @@ -29,7 +29,7 @@ internal static class Mount public ITask Unmount() { - return new UnmountTask(condition, loggerFactory.CreateLogger(), gameFunctions); + return new UnmountTask(condition, loggerFactory.CreateLogger(), gameFunctions, clientState); } } @@ -119,7 +119,11 @@ internal static class Mount public override string ToString() => "Mount"; } - private sealed class UnmountTask(ICondition condition, ILogger logger, GameFunctions gameFunctions) + private sealed class UnmountTask( + ICondition condition, + ILogger logger, + GameFunctions gameFunctions, + IClientState clientState) : ITask { private bool _unmountTriggered; @@ -148,6 +152,9 @@ internal static class Mount if (_continueAt >= DateTime.Now) return ETaskResult.StillRunning; + if (IsUnmounting()) + return ETaskResult.StillRunning; + if (!_unmountTriggered) { // if still flying, we still need to land @@ -172,6 +179,8 @@ internal static class Mount : ETaskResult.TaskComplete; } + private unsafe bool IsUnmounting() => **(byte**)(clientState.LocalPlayer!.Address + 1432) == 1; + public override string ToString() => "Unmount"; } From d310c9ff1bb259dcabad2f7ff2c1aa8ae3e3d560 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 25 Aug 2024 14:45:08 +0200 Subject: [PATCH 05/69] Handle quests that are unlocked when a previous quest isn't complete yet --- Questionable/Data/QuestData.cs | 5 ++-- Questionable/Functions/QuestFunctions.cs | 17 +++++++++++- Questionable/Model/LeveInfo.cs | 4 +-- Questionable/Model/QuestInfo.cs | 27 ++++++++++++------- Questionable/Model/QuestInfoUtils.cs | 6 ++--- .../QuestComponents/QuestTooltipComponent.cs | 23 +++++++++++----- 6 files changed, 57 insertions(+), 25 deletions(-) diff --git a/Questionable/Data/QuestData.cs b/Questionable/Data/QuestData.cs index 3a5f64ac..c2a8aba3 100644 --- a/Questionable/Data/QuestData.cs +++ b/Questionable/Data/QuestData.cs @@ -8,7 +8,8 @@ using LLib.GameData; using Lumina.Excel.GeneratedSheets; using Questionable.Model; using Questionable.Model.Questing; -using Quest = Lumina.Excel.GeneratedSheets.Quest; +using Leve = Lumina.Excel.GeneratedSheets2.Leve; +using Quest = Lumina.Excel.GeneratedSheets2.Quest; namespace Questionable.Data; @@ -62,7 +63,7 @@ internal sealed class QuestData // workaround because the game doesn't require completion of the CT questline through normal means QuestInfo aTimeToEveryPurpose = (QuestInfo)_quests[new QuestId(425)]; - aTimeToEveryPurpose.AddPreviousQuest(new QuestId(495)); + aTimeToEveryPurpose.AddPreviousQuest(new QuestInfo.PreviousQuestInfo(new QuestId(495))); } public IQuestInfo GetQuestInfo(ElementId elementId) diff --git a/Questionable/Functions/QuestFunctions.cs b/Questionable/Functions/QuestFunctions.cs index 7e360cd6..15a2dec1 100644 --- a/Questionable/Functions/QuestFunctions.cs +++ b/Questionable/Functions/QuestFunctions.cs @@ -494,7 +494,8 @@ internal sealed unsafe class QuestFunctions if (questInfo.PreviousQuests.Count == 0) return true; - var completedQuests = questInfo.PreviousQuests.Count(x => IsQuestComplete(x) || x.Equals(extraCompletedQuest)); + var completedQuests = questInfo.PreviousQuests.Count(x => + HasEnoughProgressOnPreviousQuest(x) || x.QuestId.Equals(extraCompletedQuest)); if (questInfo.PreviousQuestJoin == QuestInfo.QuestJoin.All && questInfo.PreviousQuests.Count == completedQuests) return true; @@ -504,6 +505,20 @@ internal sealed unsafe class QuestFunctions return false; } + private bool HasEnoughProgressOnPreviousQuest(QuestInfo.PreviousQuestInfo previousQuestInfo) + { + if (IsQuestComplete(previousQuestInfo.QuestId)) + return true; + + if (previousQuestInfo.Sequence != 0 && IsQuestAccepted(previousQuestInfo.QuestId)) + { + var progress = GetQuestProgressInfo(previousQuestInfo.QuestId); + return progress != null && progress.Sequence >= previousQuestInfo.Sequence; + } + + return false; + } + private static bool HasCompletedPreviousInstances(QuestInfo questInfo) { if (questInfo.PreviousInstanceContent.Count == 0) diff --git a/Questionable/Model/LeveInfo.cs b/Questionable/Model/LeveInfo.cs index b446da9a..d50ac82e 100644 --- a/Questionable/Model/LeveInfo.cs +++ b/Questionable/Model/LeveInfo.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using LLib.GameData; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.GeneratedSheets2; using Questionable.Model.Questing; namespace Questionable.Model; @@ -14,7 +14,7 @@ internal sealed class LeveInfo : IQuestInfo Level = leve.ClassJobLevel; JournalGenre = leve.JournalGenre.Row; SortKey = QuestId.Value; - IssuerDataId = leve.LevelLevemete.Value!.Object; + IssuerDataId = leve.LevelLevemete.Value!.Object.Row; ClassJobs = QuestInfoUtils.AsList(leve.ClassJobCategory.Value!); Expansion = (EExpansionVersion)leve.LevelLevemete.Value.Territory.Value!.ExVersion.Row; } diff --git a/Questionable/Model/QuestInfo.cs b/Questionable/Model/QuestInfo.cs index 2c9c2951..d78838fc 100644 --- a/Questionable/Model/QuestInfo.cs +++ b/Questionable/Model/QuestInfo.cs @@ -5,7 +5,7 @@ using FFXIVClientStructs.FFXIV.Client.UI.Agent; using JetBrains.Annotations; using LLib.GameData; using Questionable.Model.Questing; -using ExcelQuest = Lumina.Excel.GeneratedSheets.Quest; +using ExcelQuest = Lumina.Excel.GeneratedSheets2.Quest; namespace Questionable.Model; @@ -31,13 +31,18 @@ internal sealed class QuestInfo : IQuestInfo }; Name = $"{quest.Name}{suffix}"; - Level = quest.ClassJobLevel0; - IssuerDataId = quest.IssuerStart; + Level = quest.ClassJobLevel[0]; + IssuerDataId = quest.IssuerStart.Row; IsRepeatable = quest.IsRepeatable; - PreviousQuests = quest.PreviousQuest - .Select(x => new QuestId((ushort)(x.Row & 0xFFFF))) - .Where(x => x.Value != 0) - .ToImmutableList(); + 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[1].Row & 0xFFFF))) + } + .Where(x => x.QuestId.Value != 0) + .ToImmutableList(); PreviousQuestJoin = (QuestJoin)quest.PreviousQuestJoin; QuestLocks = quest.QuestLock .Select(x => new QuestId((ushort)(x.Row & 0xFFFFF))) @@ -47,7 +52,7 @@ internal sealed class QuestInfo : IQuestInfo JournalGenre = quest.JournalGenre?.Row; SortKey = quest.SortKey; IsMainScenarioQuest = quest.JournalGenre?.Value?.JournalCategory?.Value?.JournalSection?.Row is 0 or 1; - CompletesInstantly = quest.ToDoCompleteSeq[0] == 0; + CompletesInstantly = quest.TodoParams[0].ToDoCompleteSeq == 0; PreviousInstanceContent = quest.InstanceContent.Select(x => (ushort)x.Row).Where(x => x != 0).ToList(); PreviousInstanceContentJoin = (QuestJoin)quest.InstanceContentJoin; GrandCompany = (GrandCompany)quest.GrandCompany.Row; @@ -64,7 +69,7 @@ internal sealed class QuestInfo : IQuestInfo public ushort Level { get; } public uint IssuerDataId { get; } public bool IsRepeatable { get; } - public ImmutableList PreviousQuests { get; set; } + public ImmutableList PreviousQuests { get; set; } public QuestJoin PreviousQuestJoin { get; } public ImmutableList QuestLocks { get; } public QuestJoin QuestLockJoin { get; } @@ -89,8 +94,10 @@ internal sealed class QuestInfo : IQuestInfo AtLeastOne = 2, } - public void AddPreviousQuest(QuestId questId) + public void AddPreviousQuest(PreviousQuestInfo questId) { PreviousQuests = [..PreviousQuests, questId]; } + + public sealed record PreviousQuestInfo(QuestId QuestId, byte Sequence = 0); } diff --git a/Questionable/Model/QuestInfoUtils.cs b/Questionable/Model/QuestInfoUtils.cs index 68845884..4f44fd4a 100644 --- a/Questionable/Model/QuestInfoUtils.cs +++ b/Questionable/Model/QuestInfoUtils.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Linq; using LLib.GameData; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.GeneratedSheets2; namespace Questionable.Model; @@ -57,8 +57,8 @@ internal static class QuestInfoUtils { EClassJob.Dancer, classJobCategory.DNC }, { EClassJob.Reaper, classJobCategory.RPR }, { EClassJob.Sage, classJobCategory.SGE }, - { EClassJob.Viper, classJobCategory.VPR }, - { EClassJob.Pictomancer, classJobCategory.PCT } + { EClassJob.Viper, classJobCategory.Unknown1 }, + { EClassJob.Pictomancer, classJobCategory.Unknown2 } } .Where(y => y.Value) .Select(y => y.Key) diff --git a/Questionable/Windows/QuestComponents/QuestTooltipComponent.cs b/Questionable/Windows/QuestComponents/QuestTooltipComponent.cs index d181d45a..cda7636c 100644 --- a/Questionable/Windows/QuestComponents/QuestTooltipComponent.cs +++ b/Questionable/Windows/QuestComponents/QuestTooltipComponent.cs @@ -19,19 +19,22 @@ internal sealed class QuestTooltipComponent private readonly TerritoryData _territoryData; private readonly QuestFunctions _questFunctions; private readonly UiUtils _uiUtils; + private readonly Configuration _configuration; public QuestTooltipComponent( QuestRegistry questRegistry, QuestData questData, TerritoryData territoryData, QuestFunctions questFunctions, - UiUtils uiUtils) + UiUtils uiUtils, + Configuration configuration) { _questRegistry = questRegistry; _questData = questData; _territoryData = territoryData; _questFunctions = questFunctions; _uiUtils = uiUtils; + _configuration = configuration; } public void Draw(IQuestInfo quest) @@ -105,13 +108,13 @@ internal sealed class QuestTooltipComponent foreach (var q in quest.PreviousQuests) { - if (_questData.TryGetQuestInfo(q, out var qInfo)) + if (_questData.TryGetQuestInfo(q.QuestId, out var qInfo)) { - var (iconColor, icon, _) = _uiUtils.GetQuestStyle(q); + var (iconColor, icon, _) = _uiUtils.GetQuestStyle(q.QuestId); if (!_questRegistry.IsKnownQuest(qInfo.QuestId)) iconColor = ImGuiColors.DalamudGrey; - _uiUtils.ChecklistItem(FormatQuestUnlockName(qInfo), iconColor, icon); + _uiUtils.ChecklistItem(FormatQuestUnlockName(qInfo, _questFunctions.IsQuestComplete(q.QuestId) ? byte.MinValue : q.Sequence), iconColor, icon); if (qInfo is QuestInfo qstInfo && (counter <= 2 || icon != FontAwesomeIcon.Check)) DrawQuestUnlocks(qstInfo, counter + 1); @@ -188,11 +191,17 @@ internal sealed class QuestTooltipComponent ImGui.Unindent(); } - private static string FormatQuestUnlockName(IQuestInfo questInfo) + private string FormatQuestUnlockName(IQuestInfo questInfo, byte sequence = 0) { + string name = questInfo.Name; + if (_configuration.Advanced.AdditionalStatusInformation && sequence != 0) + name += $" {SeIconChar.ItemLevel.ToIconString()}"; + if (questInfo.IsMainScenarioQuest) - return $"{questInfo.Name} ({questInfo.QuestId}, MSQ)"; + name += $" ({questInfo.QuestId}, MSQ)"; else - return $"{questInfo.Name} ({questInfo.QuestId})"; + name += $" {questInfo.Name} ({questInfo.QuestId})"; + + return name; } } From ca4bc07eeb610ca020424750933ed55494f863f9 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 25 Aug 2024 16:01:02 +0200 Subject: [PATCH 06/69] Allow weekly delivery turn-in while in duty queue --- Questionable/Functions/GameFunctions.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Questionable/Functions/GameFunctions.cs b/Questionable/Functions/GameFunctions.cs index fda0c60d..360e882d 100644 --- a/Questionable/Functions/GameFunctions.cs +++ b/Questionable/Functions/GameFunctions.cs @@ -431,7 +431,8 @@ internal sealed unsafe class GameFunctions if (!AgentSatisfactionSupply.Instance()->IsAgentActive()) return false; - var flags = _condition.AsReadOnlySet(); + var flags = _condition.AsReadOnlySet().ToHashSet(); + flags.Remove(ConditionFlag.InDutyQueue); // irrelevant return flags.Count == 2 && flags.Contains(ConditionFlag.NormalConditions) && flags.Contains(ConditionFlag.OccupiedInQuestEvent); From 0ac2fae4b960b2bd8946a4979772ff3e764874ce Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 25 Aug 2024 16:24:54 +0200 Subject: [PATCH 07/69] Add default combat delay to all non-overworld enemy encounters --- Questionable/Controller/Steps/Interactions/Combat.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Questionable/Controller/Steps/Interactions/Combat.cs b/Questionable/Controller/Steps/Interactions/Combat.cs index 8776280a..10875126 100644 --- a/Questionable/Controller/Steps/Interactions/Combat.cs +++ b/Questionable/Controller/Steps/Interactions/Combat.cs @@ -41,6 +41,7 @@ internal static class Combat ArgumentNullException.ThrowIfNull(step.DataId); yield return interactFactory.Interact(step.DataId.Value, quest, EInteractionType.None, true); + yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2)); yield return CreateTask(quest, sequence, step); break; } @@ -52,11 +53,15 @@ internal static class Combat yield return useItemFactory.OnObject(quest.Id, step.DataId.Value, step.ItemId.Value, step.CompletionQuestVariablesFlags, true); + yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2)); yield return CreateTask(quest, sequence, step); break; } case EEnemySpawnType.AutoOnEnterArea: + if (step.CombatDelaySecondsAtStart == null) + yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2)); + // automatically triggered when entering area, i.e. only unmount yield return CreateTask(quest, sequence, step); break; From 6a15daa4e6c66e72ecabf9e470754cec5fc00d91 Mon Sep 17 00:00:00 2001 From: cacahuetes Date: Sun, 25 Aug 2024 15:50:27 +0000 Subject: [PATCH 08/69] Interact after combat was put into a separate sequence by accident --- .../1721_The Girl with the Dragon Tissue.json | 310 +++++++++--------- 1 file changed, 152 insertions(+), 158 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json index f825f825..54b94a98 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json @@ -1,158 +1,152 @@ -{ - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "Cacahuetes", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "DataId": 1013610, - "Position": { - "X": 209.21643, - "Y": 302, - "Z": -204.85242 - }, - "TerritoryId": 155, - "InteractionType": "AcceptQuest", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 1013613, - "Position": { - "X": 479.91138, - "Y": 226.62401, - "Z": 817.0442 - }, - "TerritoryId": 397, - "InteractionType": "Interact", - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 1011232, - "Position": { - "X": 506.8589, - "Y": 217.95148, - "Z": 792.4772 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - }, - { - "DataId": 1011237, - "Position": { - "X": 447.3181, - "Y": 212.53984, - "Z": 725.00183 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "DataId": 1013614, - "Position": { - "X": 463.5232, - "Y": 200.23772, - "Z": 651.911 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 4, - "Steps": [ - { - "DataId": 1013617, - "Position": { - "X": -513.0846, - "Y": 101.57904, - "Z": -653.3456 - }, - "TerritoryId": 397, - "InteractionType": "Interact", - "Fly": true - }, - { - "Position": { - "X": -336.4157, - "Y": 89.00586, - "Z": -586.5721 - }, - "TerritoryId": 397, - "InteractionType": "Combat", - "EnemySpawnType": "AutoOnEnterArea", - "KillEnemyDataIds": [4677] - } - ] - }, - - { - "Sequence": 5, - "Steps": [ - { - "DataId": 2005855, - "Position": { - "X": -336.4157, - "Y": 89.00586, - "Z": -586.5721 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 6, - "Steps": [ - { - "DataId": 1013618, - "Position": { - "X": -402.12103, - "Y": 90.9028, - "Z": -688.53284 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "DataId": 1013614, - "Position": { - "X": 463.5232, - "Y": 200.23772, - "Z": 651.911 - }, - "TerritoryId": 397, - "InteractionType": "CompleteQuest", - "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", - "NextQuestId": 1722 - } - ] - } - ] -} +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1013610, + "Position": { + "X": 209.21643, + "Y": 302, + "Z": -204.85242 + }, + "TerritoryId": 155, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1013613, + "Position": { + "X": 479.91138, + "Y": 226.62401, + "Z": 817.0442 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1011232, + "Position": { + "X": 506.8589, + "Y": 217.95148, + "Z": 792.4772 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + }, + { + "DataId": 1011237, + "Position": { + "X": 447.3181, + "Y": 212.53984, + "Z": 725.00183 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1013614, + "Position": { + "X": 463.5232, + "Y": 200.23772, + "Z": 651.911 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1013617, + "Position": { + "X": -513.0846, + "Y": 101.57904, + "Z": -653.3456 + }, + "TerritoryId": 397, + "InteractionType": "Interact", + "Fly": true + }, + { + "Position": { + "X": -336.4157, + "Y": 89.00586, + "Z": -586.5721 + }, + "TerritoryId": 397, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [4677] + }, + { + "DataId": 2005855, + "Position": { + "X": -336.4157, + "Y": 89.00586, + "Z": -586.5721 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1013618, + "Position": { + "X": -402.12103, + "Y": 90.9028, + "Z": -688.53284 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1013614, + "Position": { + "X": 463.5232, + "Y": 200.23772, + "Z": 651.911 + }, + "TerritoryId": 397, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Coerthas Western Highlands - Falcon's Nest", + "NextQuestId": 1722 + } + ] + } + ] +} From 5bfc60d6ed6c11070382e1a3dd2d3f980e719166 Mon Sep 17 00:00:00 2001 From: cacahuetes Date: Sun, 25 Aug 2024 15:53:43 +0000 Subject: [PATCH 09/69] Upload files to "QuestPaths/4.x - Stormblood/Class Quests/WHM" --- .../WHM/2414_Unease in East End.json | 155 ++++++++++++++++++ .../WHM/2415_An Aura for Trouble.json | 105 ++++++++++++ .../WHM/2416_A Beacon for Bad Things.json | 111 +++++++++++++ .../WHM/2417_The Problem with Padjals.json | 100 +++++++++++ .../WHM/2418_What She Always Wanted.json | 128 +++++++++++++++ 5 files changed, 599 insertions(+) create mode 100644 QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json create mode 100644 QuestPaths/4.x - Stormblood/Class Quests/WHM/2415_An Aura for Trouble.json create mode 100644 QuestPaths/4.x - Stormblood/Class Quests/WHM/2416_A Beacon for Bad Things.json create mode 100644 QuestPaths/4.x - Stormblood/Class Quests/WHM/2417_The Problem with Padjals.json create mode 100644 QuestPaths/4.x - Stormblood/Class Quests/WHM/2418_What She Always Wanted.json diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json new file mode 100644 index 00000000..34e97ad7 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json @@ -0,0 +1,155 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": -146.86935, + "Y": 8.006159, + "Z": 268.78055 + }, + "StopDistance": 0.25, + "TerritoryId": 153, + "AetheryteShortcut": "South Shroud - Camp Tranquil", + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": -137.77051, + "Y": 7.7094107, + "Z": 275.28036 + }, + "DelaySeconds": 0.75 + }, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + }, + "StepIf": { + "Flying": "Unlocked", + "NearPosition": { + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "MaximumDistance": 3 + } + } + } + }, + { + "Position": { + "X": -139.04318, + "Y": 8.522301, + "Z": 280.0128 + }, + "TerritoryId": 153, + "InteractionType": "WalkTo", + "Fly": true, + "SkipConditions": { + "StepIf": { + "Flying": "Locked" + } + } + }, + { + "DataId": 1006751, + "Position": { + "X": -139.45221, + "Y": 8.712891, + "Z": 281.69678 + }, + "TerritoryId": 153, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1000692, + "Position": { + "X": -258.8083, + "Y": -5.7735243, + "Z": -27.267883 + }, + "TerritoryId": 133, + "InteractionType": "Interact", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Conjurers' Guild" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1018744, + "Position": { + "X": 87.96814, + "Y": 5.9457893, + "Z": 490.56213 + }, + "TerritoryId": 152, + "InteractionType": "Interact", + "AetheryteShortcut": "East Shroud - Hawthorne Hut" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1018746, + "Position": { + "X": -651.3619, + "Y": 130, + "Z": -527.8248 + }, + "TerritoryId": 612, + "InteractionType": "Interact", + "AetheryteShortcut": "Fringes - Castrum Oriens" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 2007687, + "Position": { + "X": -640.8331, + "Y": 120.3479, + "Z": -291.52362 + }, + "TerritoryId": 612, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1018752, + "Position": { + "X": -622.5834, + "Y": 130.26505, + "Z": -473.7469 + }, + "TerritoryId": 612, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Fringes - Castrum Oriens", + "NextQuestId": 2415 + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2415_An Aura for Trouble.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2415_An Aura for Trouble.json new file mode 100644 index 00000000..195ca167 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2415_An Aura for Trouble.json @@ -0,0 +1,105 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1018753, + "Position": { + "X": -623.621, + "Y": 130.24214, + "Z": -474.72345 + }, + "TerritoryId": 612, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Fringes - Castrum Oriens", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1018757, + "Position": { + "X": -437.2168, + "Y": 73.07981, + "Z": -100.23657 + }, + "TerritoryId": 612, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": -586.0533, + "Y": 54.95936, + "Z": 204.82178 + }, + "TerritoryId": 612, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [7214] + }, + { + "DataId": 1018758, + "Position": { + "X": -586.0533, + "Y": 54.95936, + "Z": 204.82178 + }, + "TerritoryId": 612, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1000692, + "Position": { + "X": -258.8083, + "Y": -5.7735243, + "Z": -27.267883 + }, + "TerritoryId": 133, + "InteractionType": "Interact", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Conjurers' Guild" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1018753, + "Position": { + "X": -623.621, + "Y": 130.24214, + "Z": -474.72345 + }, + "TerritoryId": 612, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Fringes - Castrum Oriens", + "NextQuestId": 2416 + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2416_A Beacon for Bad Things.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2416_A Beacon for Bad Things.json new file mode 100644 index 00000000..cb49dcfe --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2416_A Beacon for Bad Things.json @@ -0,0 +1,111 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1018753, + "Position": { + "X": -623.621, + "Y": 130.24214, + "Z": -474.72345 + }, + "TerritoryId": 612, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Fringes - Castrum Oriens", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2007711, + "Position": { + "X": -488.0293, + "Y": 50.94983, + "Z": 86.96118 + }, + "TerritoryId": 612, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2007712, + "Position": { + "X": -461.63123, + "Y": 57.14502, + "Z": 186.08374 + }, + "TerritoryId": 612, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2007713, + "Position": { + "X": -529.9306, + "Y": 36.88098, + "Z": 451.16345 + }, + "TerritoryId": 612, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1019090, + "Position": { + "X": -638.3002, + "Y": 38.30705, + "Z": 374.92932 + }, + "TerritoryId": 612, + "InteractionType": "SinglePlayerDuty" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1018753, + "Position": { + "X": -623.621, + "Y": 130.24214, + "Z": -474.72345 + }, + "TerritoryId": 612, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Fringes - Castrum Oriens", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_JOBWHM650_02416_Q1_000_000", + "Answer": "TEXT_JOBWHM650_02416_A1_000_001" + } + ], + "NextQuestId": 2417 + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2417_The Problem with Padjals.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2417_The Problem with Padjals.json new file mode 100644 index 00000000..12c95bf9 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2417_The Problem with Padjals.json @@ -0,0 +1,100 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1018753, + "Position": { + "X": -623.621, + "Y": 130.24214, + "Z": -474.72345 + }, + "TerritoryId": 612, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Fringes - Castrum Oriens", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1019125, + "Position": { + "X": -651.81964, + "Y": 40.067055, + "Z": 370.80945 + }, + "TerritoryId": 612, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": -175.06683, + "Y": 59.779804, + "Z": -558.8312 + }, + "TerritoryId": 612, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [7215], + "AetheryteShortcut": "Fringes - Castrum Oriens" + }, + { + "DataId": 1019128, + "Position": { + "X": -175.06683, + "Y": 59.779804, + "Z": -558.8312 + }, + "TerritoryId": 612, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1019131, + "Position": { + "X": -663.7522, + "Y": 43.594555, + "Z": 363.75977 + }, + "TerritoryId": 612, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1019132, + "Position": { + "X": -655.02405, + "Y": 40.43195, + "Z": 375.96704 + }, + "TerritoryId": 612, + "InteractionType": "CompleteQuest", + "NextQuestId": 2418 + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2418_What She Always Wanted.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2418_What She Always Wanted.json new file mode 100644 index 00000000..53a0fd4f --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2418_What She Always Wanted.json @@ -0,0 +1,128 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1019132, + "Position": { + "X": -655.02405, + "Y": 40.43195, + "Z": 375.96704 + }, + "TerritoryId": 612, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Fringes - Castrum Oriens", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1018759, + "Position": { + "X": -636.8048, + "Y": 130, + "Z": -528.6183 + }, + "TerritoryId": 612, + "InteractionType": "Interact", + "AetheryteShortcut": "Fringes - Castrum Oriens" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1019130, + "Position": { + "X": -665.3696, + "Y": 43.594574, + "Z": 364.40063 + }, + "TerritoryId": 612, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1019130, + "Position": { + "X": -665.3696, + "Y": 43.594574, + "Z": 364.40063 + }, + "TerritoryId": 612, + "InteractionType": "Emote", + "Emote": "soothe", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_JOBWHM700_02418_Q1_000_000", + "Answer": "TEXT_JOBWHM700_02418_A1_000_001" + } + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "Position": { + "X": -381.88757, + "Y": 40.283813, + "Z": 484.82483 + }, + "TerritoryId": 612, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [7216] + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1019127, + "Position": { + "X": -381.88757, + "Y": 40.283813, + "Z": 484.82483 + }, + "TerritoryId": 612, + "InteractionType": "UseItem", + "ItemId": 2002053 + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1019588, + "Position": { + "X": -382.71155, + "Y": 40.275818, + "Z": 484.36694 + }, + "TerritoryId": 612, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} From 6eddca69312787e3aa60e5bccde8575488163abb Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 25 Aug 2024 19:23:15 +0200 Subject: [PATCH 10/69] Pick up DT aether current quests (first four zones) during the MSQ --- .../SkipConditionsExtensions.cs | 4 ++ ...All Good Potpacts Must Come to an End.json | 3 +- .../Shaaloani/5138_Rroneek Seeker.json | 9 +++ .../5140_When the Bill Comes Due.json | 24 +++++++- .../5094_Secrets in the Cinderfield.json | 11 ++++ .../4868_A Well-mannered Shipwright.json | 18 ++++-- .../4870_Knowing the Hanuhanu.json | 24 +++++++- .../4872_Traders of Happiness.json | 10 ++-- .../4877_Knowing the Pelupelu.json | 24 ++++++++ .../4878_The Success of Others.json | 2 +- .../4879_For All Turali.json | 1 + .../4884_The Shape of Peace.json | 22 +++++++ .../4889_History's Keepers.json | 7 ++- .../4896_The Promise of Peace.json | 24 ++++++++ .../C-Yak T'el/4903_Into the Traverse.json | 55 ++++++++++-------- .../4909_Road to the Golden City.json | 22 +++++++ .../4919_And the Land Would Tremble.json | 57 +++++++++++++++++++ .../4923_In Yyasulani's Shadow.json | 11 ++++ QuestPaths/quest-v1.json | 16 +++++- .../Converter/ElementIdListConverter.cs | 36 ++++++++++++ .../Questing/SkipAetheryteCondition.cs | 9 +++ .../Questing/SkipStepConditions.cs | 7 +++ .../Steps/Shared/AethernetShortcut.cs | 20 ++++++- .../Steps/Shared/AetheryteShortcut.cs | 15 +++++ 24 files changed, 387 insertions(+), 44 deletions(-) create mode 100644 Questionable.Model/Questing/Converter/ElementIdListConverter.cs diff --git a/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs b/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs index 87d5e0a2..6307020f 100644 --- a/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs +++ b/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs @@ -128,6 +128,10 @@ internal static class SkipConditionsExtensions skipAetheryteCondition.InSameTerritory, emptyAetheryte.InSameTerritory), AssignmentList(nameof(SkipAetheryteCondition.InTerritory), skipAetheryteCondition.InTerritory), + AssignmentList(nameof(SkipAetheryteCondition.QuestsAccepted), + skipAetheryteCondition.QuestsAccepted), + AssignmentList(nameof(skipAetheryteCondition.QuestsCompleted), + skipAetheryteCondition.QuestsCompleted), Assignment(nameof(SkipAetheryteCondition.AetheryteLocked), skipAetheryteCondition.AetheryteLocked, emptyAetheryte.AetheryteLocked) .AsSyntaxNodeOrToken(), diff --git a/QuestPaths/7.x - Dawntrail/Aether Currents/Kozama'uka/5085_All Good Potpacts Must Come to an End.json b/QuestPaths/7.x - Dawntrail/Aether Currents/Kozama'uka/5085_All Good Potpacts Must Come to an End.json index dfb62125..8e4b42da 100644 --- a/QuestPaths/7.x - Dawntrail/Aether Currents/Kozama'uka/5085_All Good Potpacts Must Come to an End.json +++ b/QuestPaths/7.x - Dawntrail/Aether Currents/Kozama'uka/5085_All Good Potpacts Must Come to an End.json @@ -102,7 +102,8 @@ "Z": 342.85498 }, "TerritoryId": 1188, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "Mount": true } ] } diff --git a/QuestPaths/7.x - Dawntrail/Aether Currents/Shaaloani/5138_Rroneek Seeker.json b/QuestPaths/7.x - Dawntrail/Aether Currents/Shaaloani/5138_Rroneek Seeker.json index 9db9564a..92d92c8f 100644 --- a/QuestPaths/7.x - Dawntrail/Aether Currents/Shaaloani/5138_Rroneek Seeker.json +++ b/QuestPaths/7.x - Dawntrail/Aether Currents/Shaaloani/5138_Rroneek Seeker.json @@ -20,6 +20,15 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": 323.5058, + "Y": -16.330368, + "Z": -254.18399 + }, + "TerritoryId": 1190, + "InteractionType": "WalkTo" + }, { "DataId": 1050656, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/Aether Currents/Shaaloani/5140_When the Bill Comes Due.json b/QuestPaths/7.x - Dawntrail/Aether Currents/Shaaloani/5140_When the Bill Comes Due.json index 49204d8c..912043e1 100644 --- a/QuestPaths/7.x - Dawntrail/Aether Currents/Shaaloani/5140_When the Bill Comes Due.json +++ b/QuestPaths/7.x - Dawntrail/Aether Currents/Shaaloani/5140_When the Bill Comes Due.json @@ -28,7 +28,8 @@ "Z": 427.2068 }, "TerritoryId": 1190, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Mount": true } ] }, @@ -50,6 +51,27 @@ { "Sequence": 3, "Steps": [ + { + "Position": { + "X": 369.3906, + "Y": 5.9371996, + "Z": 417.16574 + }, + "TerritoryId": 1190, + "InteractionType": "WalkTo", + "$": "Shaaloani Hhusatahwi Saloon Stairs (top)" + }, + { + "Position": { + "X": 359.11545, + "Y": 1.9823306, + "Z": 419.5714 + }, + "TerritoryId": 1190, + "InteractionType": "WalkTo", + "$": "Shaaloani Hhusatahwi Saloon Stairs (bottom)", + "DisableNavmesh": true + }, { "DataId": 1051286, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/Aether Currents/Yak T'el/5094_Secrets in the Cinderfield.json b/QuestPaths/7.x - Dawntrail/Aether Currents/Yak T'el/5094_Secrets in the Cinderfield.json index 4357cd5d..a3e6ab87 100644 --- a/QuestPaths/7.x - Dawntrail/Aether Currents/Yak T'el/5094_Secrets in the Cinderfield.json +++ b/QuestPaths/7.x - Dawntrail/Aether Currents/Yak T'el/5094_Secrets in the Cinderfield.json @@ -174,6 +174,17 @@ { "Sequence": 255, "Steps": [ + { + "DataId": 2013948, + "Position": { + "X": 610.7728, + "Y": 9.597839, + "Z": 233.05103 + }, + "TerritoryId": 1189, + "InteractionType": "AttuneAetherCurrent", + "AetherCurrentId": 2818440 + }, { "DataId": 1051073, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4868_A Well-mannered Shipwright.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4868_A Well-mannered Shipwright.json index 4a550c01..28bd626b 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4868_A Well-mannered Shipwright.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4868_A Well-mannered Shipwright.json @@ -151,13 +151,21 @@ "Steps": [ { "Position": { - "X": -510.96463, - "Y": -0.47684515, - "Z": -305.96155 + "X": -510.37933, + "Y": -0.39999998, + "Z": -277.78192 }, "TerritoryId": 1188, - "InteractionType": "WalkTo", - "Comment": "Waypoint after swimming through the river" + "InteractionType": "WalkTo" + }, + { + "Position": { + "X": -521.0261, + "Y": -0.40000004, + "Z": -329.19336 + }, + "TerritoryId": 1188, + "InteractionType": "WalkTo" }, { "DataId": 2013936, diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4870_Knowing the Hanuhanu.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4870_Knowing the Hanuhanu.json index 83eb0953..d54e499a 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4870_Knowing the Hanuhanu.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4870_Knowing the Hanuhanu.json @@ -12,7 +12,7 @@ "Y": 9.773315, "Z": -533.135 }, - "StopDistance": 5, + "StopDistance": 7, "TerritoryId": 1188, "InteractionType": "AcceptQuest" } @@ -135,6 +135,28 @@ { "Sequence": 255, "Steps": [ + { + "DataId": 1048782, + "Position": { + "X": -68.52832, + "Y": 6.536739, + "Z": -486.53394 + }, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5064 + }, + { + "DataId": 1051237, + "Position": { + "X": -251.20929, + "Y": 5.5572896, + "Z": -554.89435 + }, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5081 + }, { "DataId": 1046537, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4872_Traders of Happiness.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4872_Traders of Happiness.json index 7ce2e342..d1e8367e 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4872_Traders of Happiness.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4872_Traders of Happiness.json @@ -21,6 +21,11 @@ { "Sequence": 1, "Steps": [ + { + "TerritoryId": 1187, + "InteractionType": "AttuneAetheryte", + "Aetheryte": "Urqopacha - Wachunpelo" + }, { "DataId": 1046557, "Position": { @@ -39,11 +44,6 @@ 128 ] }, - { - "TerritoryId": 1187, - "InteractionType": "AttuneAetheryte", - "Aetheryte": "Urqopacha - Wachunpelo" - }, { "DataId": 1046559, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4877_Knowing the Pelupelu.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4877_Knowing the Pelupelu.json index 7166e4a6..879ca750 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4877_Knowing the Pelupelu.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4877_Knowing the Pelupelu.json @@ -52,6 +52,30 @@ { "Sequence": 255, "Steps": [ + { + "DataId": 1050684, + "Position": { + "X": 391.37854, + "Y": -156.07434, + "Z": -388.50995 + }, + "TerritoryId": 1187, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5039, + "Comment": "Traveler to the Rescue" + }, + { + "DataId": 1051195, + "Position": { + "X": 383.29138, + "Y": -154.50243, + "Z": -420.49292 + }, + "TerritoryId": 1187, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5051, + "Comment": "Crisis of Corruption" + }, { "DataId": 1046537, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4878_The Success of Others.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4878_The Success of Others.json index 3d40ae97..b6f50a5c 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4878_The Success of Others.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4878_The Success of Others.json @@ -100,7 +100,7 @@ "Y": -19.725424, "Z": 203.72314 }, - "StopDistance": 5, + "StopDistance": 7, "TerritoryId": 1185, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4879_For All Turali.json b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4879_For All Turali.json index 7c803180..9a983943 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4879_For All Turali.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4879_For All Turali.json @@ -15,6 +15,7 @@ "Y": -19.725424, "Z": 203.72314 }, + "StopDistance": 7, "TerritoryId": 1185, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4884_The Shape of Peace.json b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4884_The Shape of Peace.json index e5d6be1e..32e96d54 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4884_The Shape of Peace.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4884_The Shape of Peace.json @@ -63,6 +63,28 @@ { "Sequence": 3, "Steps": [ + { + "DataId": 1051263, + "Position": { + "X": -521.0193, + "Y": 121.63345, + "Z": 319.38647 + }, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5085 + }, + { + "DataId": 1048855, + "Position": { + "X": -491.63043, + "Y": 121.63846, + "Z": 271.50366 + }, + "TerritoryId": 1188, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5074 + }, { "DataId": 1046876, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4889_History's Keepers.json b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4889_History's Keepers.json index eb22764c..60df9000 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4889_History's Keepers.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4889_History's Keepers.json @@ -12,6 +12,7 @@ "Y": 119.49004, "Z": 190.72253 }, + "StopDistance": 5, "TerritoryId": 1188, "InteractionType": "AcceptQuest" } @@ -29,7 +30,8 @@ }, "TerritoryId": 1188, "InteractionType": "Interact", - "AetheryteShortcut": "Kozama'uka - Earthenshire" + "AetheryteShortcut": "Kozama'uka - Earthenshire", + "Fly": true } ] }, @@ -44,7 +46,8 @@ }, "TerritoryId": 1188, "InteractionType": "WalkTo", - "TargetTerritoryId": 1187 + "TargetTerritoryId": 1187, + "Fly": true }, { "DataId": 1046814, diff --git a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4896_The Promise of Peace.json b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4896_The Promise of Peace.json index 300238e9..03eed811 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4896_The Promise of Peace.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4896_The Promise of Peace.json @@ -21,6 +21,30 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1051207, + "Position": { + "X": 425.07043, + "Y": 118.935005, + "Z": 606.13403 + }, + "StopDistance": 5, + "TerritoryId": 1187, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5055 + }, + { + "DataId": 1048730, + "Position": { + "X": 399.0692, + "Y": 122.53533, + "Z": 542.9922 + }, + "StopDistance": 5, + "TerritoryId": 1187, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5047 + }, { "DataId": 1046926, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4903_Into the Traverse.json b/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4903_Into the Traverse.json index 52a6b9a8..f6cca46e 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4903_Into the Traverse.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4903_Into the Traverse.json @@ -21,6 +21,36 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1050872, + "Position": { + "X": -408.71295, + "Y": 20.420113, + "Z": -398.8861 + }, + "TerritoryId": 1189, + "InteractionType": "AcceptQuest", + "DialogueChoices": [ + { + "Type": "List", + "ExcelSheet": "quest/051/KinGzd201_05110", + "Prompt": "TEXT_KINGZD201_05110_Q1_000_000", + "Answer": "TEXT_KINGZD201_05110_A1_000_001" + } + ], + "PickUpQuestId": 5110 + }, + { + "DataId": 1051073, + "Position": { + "X": 41.09253, + "Y": 8.205902, + "Z": -629.8467 + }, + "TerritoryId": 1189, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5094 + }, { "DataId": 1047577, "Position": { @@ -36,28 +66,6 @@ { "Sequence": 2, "Steps": [ - { - "DataId": 2013948, - "Position": { - "X": 610.7728, - "Y": 9.597839, - "Z": 233.05103 - }, - "TerritoryId": 1189, - "InteractionType": "AttuneAetherCurrent", - "AetherCurrentId": 2818440 - }, - { - "Position": { - "X": 614.25964, - "Y": -29.554798, - "Z": 202.75368 - }, - "TerritoryId": 1189, - "InteractionType": "WalkTo", - "DisableNavmesh": true, - "Mount": false - }, { "DataId": 1048230, "Position": { @@ -66,8 +74,7 @@ "Z": 214.83167 }, "TerritoryId": 1189, - "InteractionType": "Interact", - "DisableNavmesh": true + "InteractionType": "Interact" } ] }, diff --git a/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4909_Road to the Golden City.json b/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4909_Road to the Golden City.json index c959a428..39387ac5 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4909_Road to the Golden City.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4909_Road to the Golden City.json @@ -24,6 +24,28 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1051052, + "Position": { + "X": 585.90063, + "Y": -142.49187, + "Z": 510.21594 + }, + "TerritoryId": 1189, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5103 + }, + { + "DataId": 1050884, + "Position": { + "X": 531.0597, + "Y": -142.49185, + "Z": 492.0271 + }, + "TerritoryId": 1189, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5114 + }, { "DataId": 1047701, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4919_And the Land Would Tremble.json b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4919_And the Land Would Tremble.json index 16c8605f..30d005a1 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4919_And the Land Would Tremble.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4919_And the Land Would Tremble.json @@ -52,6 +52,62 @@ { "Sequence": 3, "Steps": [ + { + "DataId": 1050655, + "Position": { + "X": 289.02112, + "Y": -15.566031, + "Z": -478.78235 + }, + "TerritoryId": 1190, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5138 + }, + { + "Position": { + "X": 386.84927, + "Y": -0.84392637, + "Z": 435.0579 + }, + "TerritoryId": 1190, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Shaaloani - Hhusatahwi", + "SkipConditions": { + "StepIf": { + "QuestsCompleted": [ + 5140 + ] + }, + "AetheryteShortcutIf": { + "QuestsCompleted": [ + 5140 + ] + } + } + }, + { + "DataId": 1051283, + "Position": { + "X": 374.19702, + "Y": -0.24794838, + "Z": 437.2472 + }, + "StopDistance": 6, + "TerritoryId": 1190, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5140 + }, + { + "DataId": 1049324, + "Position": { + "X": -108.659546, + "Y": 4.055336, + "Z": 319.5697 + }, + "TerritoryId": 1190, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5130 + }, { "DataId": 1047001, "Position": { @@ -61,6 +117,7 @@ }, "TerritoryId": 1190, "InteractionType": "Interact", + "AetheryteShortcut": "Shaaloani - Sheshenewezi Springs", "DialogueChoices": [ { "Type": "YesNo", diff --git a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4923_In Yyasulani's Shadow.json b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4923_In Yyasulani's Shadow.json index edaedfc9..1bf3b839 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4923_In Yyasulani's Shadow.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4923_In Yyasulani's Shadow.json @@ -161,6 +161,17 @@ { "Sequence": 7, "Steps": [ + { + "DataId": 1051316, + "Position": { + "X": -380.30066, + "Y": 18.718708, + "Z": -114.24432 + }, + "TerritoryId": 1190, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5144 + }, { "DataId": 1047082, "Position": { diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index ff535a8f..93efd3c0 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -234,13 +234,13 @@ "QuestsAccepted": { "type": "array", "items": { - "type": "number" + "type": ["number", "string"] } }, "QuestsCompleted": { "type": "array", "items": { - "type": "number" + "type": ["number", "string"] } }, "AetheryteLocked": { @@ -290,6 +290,18 @@ "type": "integer" } }, + "QuestsAccepted": { + "type": "array", + "items": { + "type": ["number", "string"] + } + }, + "QuestsCompleted": { + "type": "array", + "items": { + "type": ["number", "string"] + } + }, "AetheryteLocked": { "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte" }, diff --git a/Questionable.Model/Questing/Converter/ElementIdListConverter.cs b/Questionable.Model/Questing/Converter/ElementIdListConverter.cs new file mode 100644 index 00000000..25dd688d --- /dev/null +++ b/Questionable.Model/Questing/Converter/ElementIdListConverter.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Questionable.Model.Questing.Converter; + +public sealed class ElementIdListConverter : JsonConverter> +{ + public override List Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType != JsonTokenType.StartArray) + throw new JsonException(); + + reader.Read(); + + List values = []; + while (reader.TokenType != JsonTokenType.EndArray) + { + + if (reader.TokenType == JsonTokenType.Number) + values.Add(new QuestId(reader.GetUInt16())); + else + values.Add(ElementId.FromString(reader.GetString() ?? throw new JsonException())); + + reader.Read(); + } + + return values; + } + + public override void Write(Utf8JsonWriter writer, List value, JsonSerializerOptions options) + { + throw new NotImplementedException(); + } +} diff --git a/Questionable.Model/Questing/SkipAetheryteCondition.cs b/Questionable.Model/Questing/SkipAetheryteCondition.cs index 573c3e2e..70e13474 100644 --- a/Questionable.Model/Questing/SkipAetheryteCondition.cs +++ b/Questionable.Model/Questing/SkipAetheryteCondition.cs @@ -1,5 +1,7 @@ using System.Collections.Generic; +using System.Text.Json.Serialization; using Questionable.Model.Common; +using Questionable.Model.Questing.Converter; namespace Questionable.Model.Questing; @@ -8,6 +10,13 @@ public sealed class SkipAetheryteCondition public bool Never { get; set; } public bool InSameTerritory { get; set; } public List InTerritory { get; set; } = new(); + + [JsonConverter(typeof(ElementIdListConverter))] + public List QuestsAccepted { get; set; } = new(); + + [JsonConverter(typeof(ElementIdListConverter))] + public List QuestsCompleted { get; set; } = new(); + public EAetheryteLocation? AetheryteLocked { get; set; } public EAetheryteLocation? AetheryteUnlocked { get; set; } public bool RequiredQuestVariablesNotMet { get; set; } diff --git a/Questionable.Model/Questing/SkipStepConditions.cs b/Questionable.Model/Questing/SkipStepConditions.cs index 323a0dc0..bfb8fcfc 100644 --- a/Questionable.Model/Questing/SkipStepConditions.cs +++ b/Questionable.Model/Questing/SkipStepConditions.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; using System.Linq; +using System.Text.Json.Serialization; using Questionable.Model.Common; +using Questionable.Model.Questing.Converter; namespace Questionable.Model.Questing; @@ -14,8 +16,13 @@ public sealed class SkipStepConditions public List InTerritory { get; set; } = new(); public List NotInTerritory { get; set; } = new(); public SkipItemConditions? Item { get; set; } + + [JsonConverter(typeof(ElementIdListConverter))] public List QuestsAccepted { get; set; } = new(); + + [JsonConverter(typeof(ElementIdListConverter))] public List QuestsCompleted { get; set; } = new(); + public EAetheryteLocation? AetheryteLocked { get; set; } public EAetheryteLocation? AetheryteUnlocked { get; set; } public NearPositionCondition? NearPosition { get; set; } diff --git a/Questionable/Controller/Steps/Shared/AethernetShortcut.cs b/Questionable/Controller/Steps/Shared/AethernetShortcut.cs index 9297297e..29c76f0c 100644 --- a/Questionable/Controller/Steps/Shared/AethernetShortcut.cs +++ b/Questionable/Controller/Steps/Shared/AethernetShortcut.cs @@ -24,6 +24,7 @@ internal static class AethernetShortcut MovementController movementController, AetheryteFunctions aetheryteFunctions, GameFunctions gameFunctions, + QuestFunctions questFunctions, IClientState clientState, AetheryteData aetheryteData, TerritoryData territoryData, @@ -46,8 +47,8 @@ internal static class AethernetShortcut public ITask Use(EAetheryteLocation from, EAetheryteLocation to, SkipAetheryteCondition? skipConditions = null) { return new UseAethernetShortcut(from, to, skipConditions ?? new(), - loggerFactory.CreateLogger(), aetheryteFunctions, gameFunctions, clientState, - aetheryteData, territoryData, lifestreamIpc, movementController, condition); + loggerFactory.CreateLogger(), aetheryteFunctions, gameFunctions, questFunctions, + clientState, aetheryteData, territoryData, lifestreamIpc, movementController, condition); } } @@ -58,6 +59,7 @@ internal static class AethernetShortcut ILogger logger, AetheryteFunctions aetheryteFunctions, GameFunctions gameFunctions, + QuestFunctions questFunctions, IClientState clientState, AetheryteData aetheryteData, TerritoryData territoryData, @@ -90,6 +92,20 @@ internal static class AethernetShortcut return false; } + if (skipConditions.QuestsCompleted.Count > 0 && + skipConditions.QuestsCompleted.All(questFunctions.IsQuestComplete)) + { + logger.LogInformation("Skipping aethernet shortcut, all prequisite quests are complete"); + return true; + } + + if (skipConditions.QuestsAccepted.Count > 0 && + skipConditions.QuestsAccepted.All(questFunctions.IsQuestAccepted)) + { + logger.LogInformation("Skipping aethernet shortcut, all prequisite quests are accepted"); + return true; + } + if (skipConditions.AetheryteLocked != null && !aetheryteFunctions.IsAetheryteUnlocked(skipConditions.AetheryteLocked.Value)) { diff --git a/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs b/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs index 2d72afd1..0b12bb3f 100644 --- a/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs +++ b/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Numerics; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions; @@ -93,6 +94,20 @@ internal static class AetheryteShortcut return true; } + if (skipConditions.QuestsCompleted.Count > 0 && + skipConditions.QuestsCompleted.All(questFunctions.IsQuestComplete)) + { + logger.LogInformation("Skipping aetheryte, all prequisite quests are complete"); + return true; + } + + if (skipConditions.QuestsAccepted.Count > 0 && + skipConditions.QuestsAccepted.All(questFunctions.IsQuestAccepted)) + { + logger.LogInformation("Skipping aetheryte, all prequisite quests are accepted"); + return true; + } + if (skipConditions.AetheryteLocked != null && !aetheryteFunctions.IsAetheryteUnlocked(skipConditions.AetheryteLocked.Value)) { From 15c97d55f763905bee0dfb5b9a991503b38dfba5 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 25 Aug 2024 19:23:29 +0200 Subject: [PATCH 11/69] Minor starting quest adjustments --- .../190_So You Want to Be an Alchemist.json | 2 +- .../ARM/186_So You Want to Be an Armorer.json | 2 +- .../ARM/273_Way of the Armorer.json | 3 +- .../183_So You Want to Be a Thaumaturge.json | 2 +- .../BRD/1085_A Song of Bards and Bowmen.json | 2 +- .../BSM/291_Way of the Blacksmith.json | 2 +- .../BTN/3_Way of the Botanist.json | 3 +- .../191_So You Want to Be a Culinarian.json | 2 +- .../CUL/271_Way of the Culinarian.json | 3 +- .../DRG/180_So You Want to Be a Lancer.json | 2 +- .../FSH/1107_Way of the Fisher.json | 2 +- .../FSH/1134_So You Want to Be a Fisher.json | 16 -------- .../187_So You Want to Be a Goldsmith.json | 2 +- .../GSM/608_Way of the Goldsmith.json | 3 +- .../LTW/105_Way of the Leatherworker.json | 3 +- ...188_So You Want to Be a Leatherworker.json | 2 +- .../MNK/178_So You Want to Be a Pugilist.json | 2 +- .../451_So You Want to Be an Arcanist.json | 38 +++++++++---------- .../WAR/179_So You Want to Be a Marauder.json | 2 +- .../WAR/310_Way of the Marauder.json | 2 +- .../WVR/189_So You Want to Be a Weaver.json | 2 +- .../WVR/534_Way of the Weaver.json | 3 +- 22 files changed, 39 insertions(+), 61 deletions(-) diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/ALC/190_So You Want to Be an Alchemist.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/ALC/190_So You Want to Be an Alchemist.json index e53954bb..0c9c4a30 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/ALC/190_So You Want to Be an Alchemist.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/ALC/190_So You Want to Be an Alchemist.json @@ -13,7 +13,7 @@ "Z": 118.88306 }, "TerritoryId": 131, - "InteractionType": "Interact", + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Ul'dah", "AethernetShortcut": [ "[Ul'dah] Aetheryte Plaza", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/ARM/186_So You Want to Be an Armorer.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/ARM/186_So You Want to Be an Armorer.json index 7cd043fc..872c6267 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/ARM/186_So You Want to Be an Armorer.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/ARM/186_So You Want to Be an Armorer.json @@ -13,7 +13,7 @@ "Z": 190.41736 }, "TerritoryId": 128, - "InteractionType": "Interact", + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Limsa Lominsa", "AethernetShortcut": [ "[Limsa Lominsa] Aetheryte Plaza", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/ARM/273_Way of the Armorer.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/ARM/273_Way of the Armorer.json index 93fef75b..955356e2 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/ARM/273_Way of the Armorer.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/ARM/273_Way of the Armorer.json @@ -35,8 +35,7 @@ "Prompt": "TEXT_CLSARM011_00273_Q1_000_1", "Yes": true } - ], - "NextQuestId": 273 + ] } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/183_So You Want to Be a Thaumaturge.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/183_So You Want to Be a Thaumaturge.json index fbd68169..e4f58a84 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/183_So You Want to Be a Thaumaturge.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/BLM/183_So You Want to Be a Thaumaturge.json @@ -13,7 +13,7 @@ "Z": 59.952637 }, "TerritoryId": 130, - "InteractionType": "Interact", + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Ul'dah", "AethernetShortcut": [ "[Ul'dah] Aetheryte Plaza", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BRD/1085_A Song of Bards and Bowmen.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BRD/1085_A Song of Bards and Bowmen.json index 196337ec..e22e5d58 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/BRD/1085_A Song of Bards and Bowmen.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/BRD/1085_A Song of Bards and Bowmen.json @@ -122,7 +122,7 @@ "TerritoryId": 153, "InteractionType": "CompleteQuest", "Fly": true, - "NextQuestId": 1085 + "NextQuestId": 1086 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BSM/291_Way of the Blacksmith.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BSM/291_Way of the Blacksmith.json index 8430dab8..087d1faa 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/BSM/291_Way of the Blacksmith.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/BSM/291_Way of the Blacksmith.json @@ -30,7 +30,7 @@ "DialogueChoices": [ { "Type": "YesNo", - "Prompt": "TEXT_CLSBSM001_00185_Q1_000_1", + "Prompt": "TEXT_CLSBSM011_00291_Q1_000_1", "Yes": true } ] diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/3_Way of the Botanist.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/3_Way of the Botanist.json index aa2443e8..23abee99 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/3_Way of the Botanist.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/3_Way of the Botanist.json @@ -35,8 +35,7 @@ "Prompt": "TEXT_CLSHRV001_00003_Q1_000_1", "Yes": true } - ], - "NextQuestId": 3 + ] } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/CUL/191_So You Want to Be a Culinarian.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/CUL/191_So You Want to Be a Culinarian.json index 95d5ecf9..7a46a5c5 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/CUL/191_So You Want to Be a Culinarian.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/CUL/191_So You Want to Be a Culinarian.json @@ -13,7 +13,7 @@ "Z": -164.0498 }, "TerritoryId": 128, - "InteractionType": "Interact", + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Limsa Lominsa", "AethernetShortcut": [ "[Limsa Lominsa] Aetheryte Plaza", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/CUL/271_Way of the Culinarian.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/CUL/271_Way of the Culinarian.json index 2a7bd1a3..500efc80 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/CUL/271_Way of the Culinarian.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/CUL/271_Way of the Culinarian.json @@ -35,8 +35,7 @@ "Prompt": "TEXT_CLSCUL011_00271_Q1_000_1", "Yes": true } - ], - "NextQuestId": 271 + ] } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/DRG/180_So You Want to Be a Lancer.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/DRG/180_So You Want to Be a Lancer.json index f1b94278..fa199bd5 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/DRG/180_So You Want to Be a Lancer.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/DRG/180_So You Want to Be a Lancer.json @@ -24,7 +24,7 @@ "Yes": true } ], - "InteractionType": "Interact" + "InteractionType": "AcceptQuest" } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/FSH/1107_Way of the Fisher.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/FSH/1107_Way of the Fisher.json index 3cc4d179..5a771ddd 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/FSH/1107_Way of the Fisher.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/FSH/1107_Way of the Fisher.json @@ -13,7 +13,7 @@ "Z": 150.04187 }, "TerritoryId": 129, - "InteractionType": "Interact", + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Limsa Lominsa", "AethernetShortcut": [ "[Limsa Lominsa] Aetheryte Plaza", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/FSH/1134_So You Want to Be a Fisher.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/FSH/1134_So You Want to Be a Fisher.json index d9fcf3c1..3b810ba4 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/FSH/1134_So You Want to Be a Fisher.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/FSH/1134_So You Want to Be a Fisher.json @@ -38,22 +38,6 @@ "InteractionType": "AcceptQuest" } ] - }, - { - "Sequence": 255, - "Steps": [ - { - "DataId": 1000857, - "Position": { - "X": -165.27051, - "Y": 5.2500057, - "Z": 164.29382 - }, - "TerritoryId": 129, - "InteractionType": "CompleteQuest", - "NextQuestId": 1108 - } - ] } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/GSM/187_So You Want to Be a Goldsmith.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/GSM/187_So You Want to Be a Goldsmith.json index a66a332f..bb79e28f 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/GSM/187_So You Want to Be a Goldsmith.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/GSM/187_So You Want to Be a Goldsmith.json @@ -13,7 +13,7 @@ "Z": 97.24573 }, "TerritoryId": 131, - "InteractionType": "Interact", + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Ul'dah", "AethernetShortcut": [ "[Ul'dah] Aetheryte Plaza", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/GSM/608_Way of the Goldsmith.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/GSM/608_Way of the Goldsmith.json index 2ba0018c..3e9017a1 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/GSM/608_Way of the Goldsmith.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/GSM/608_Way of the Goldsmith.json @@ -35,8 +35,7 @@ "Prompt": "TEXT_CLSGLD011_00608_A1_000_1", "Yes": true } - ], - "NextQuestId": 608 + ] } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/LTW/105_Way of the Leatherworker.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/LTW/105_Way of the Leatherworker.json index c263bfda..101c9595 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/LTW/105_Way of the Leatherworker.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/LTW/105_Way of the Leatherworker.json @@ -35,8 +35,7 @@ "Prompt": "TEXT_CLSTAN000_00105_Q1_000_1", "Yes": true } - ], - "NextQuestId": 105 + ] } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/LTW/188_So You Want to Be a Leatherworker.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/LTW/188_So You Want to Be a Leatherworker.json index 4412c8f6..6928be6d 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/LTW/188_So You Want to Be a Leatherworker.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/LTW/188_So You Want to Be a Leatherworker.json @@ -13,7 +13,7 @@ "Z": -147.41742 }, "TerritoryId": 133, - "InteractionType": "Interact", + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Gridania", "AethernetShortcut": [ "[Gridania] Aetheryte Plaza", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/178_So You Want to Be a Pugilist.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/178_So You Want to Be a Pugilist.json index 8494b698..b75d1e75 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/178_So You Want to Be a Pugilist.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/178_So You Want to Be a Pugilist.json @@ -13,7 +13,7 @@ "Z": -51.163513 }, "TerritoryId": 130, - "InteractionType": "Interact", + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Ul'dah", "SkipConditions": { "AetheryteShortcutIf": { 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 b134aff7..4c4c38fc 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 @@ -1,18 +1,19 @@ { - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "Cacahuetes", - "QuestSequence": [ - { - "Sequence": 255, - "Steps": [ - { "DataId": 1000895, -"Position": { - "X": -335.74432, - "Y": 12.899764, - "Z": 1.3884888 -}, -"TerritoryId": 129, -"InteractionType": "AcceptQuest", + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1000895, + "Position": { + "X": -335.74432, + "Y": 12.899764, + "Z": 1.3884888 + }, + "TerritoryId": 129, + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Limsa Lominsa", "AethernetShortcut": [ "[Limsa Lominsa] Aetheryte Plaza", @@ -35,8 +36,7 @@ ], "NextQuestId": 452 } - ] - } - ] - } - \ No newline at end of file + ] + } + ] +} diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/179_So You Want to Be a Marauder.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/179_So You Want to Be a Marauder.json index eaa718ee..b9522c79 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/179_So You Want to Be a Marauder.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/179_So You Want to Be a Marauder.json @@ -13,7 +13,7 @@ "Z": -245.80762 }, "TerritoryId": 128, - "InteractionType": "Interact", + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Limsa Lominsa", "AethernetShortcut": [ "[Limsa Lominsa] Aetheryte Plaza", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/310_Way of the Marauder.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/310_Way of the Marauder.json index e2cb02fc..fd759a6a 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/310_Way of the Marauder.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WAR/310_Way of the Marauder.json @@ -28,7 +28,7 @@ "Z": -255.8786 }, "TerritoryId": 128, - "InteractionType": "AcceptQuest", + "InteractionType": "CompleteQuest", "DialogueChoices": [ { "Type": "YesNo", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WVR/189_So You Want to Be a Weaver.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WVR/189_So You Want to Be a Weaver.json index 66ab5a05..50cad2af 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WVR/189_So You Want to Be a Weaver.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WVR/189_So You Want to Be a Weaver.json @@ -13,7 +13,7 @@ "Z": 98.039185 }, "TerritoryId": 131, - "InteractionType": "Interact", + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Ul'dah", "AethernetShortcut": [ "[Ul'dah] Aetheryte Plaza", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WVR/534_Way of the Weaver.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WVR/534_Way of the Weaver.json index 0388389f..8e517afb 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WVR/534_Way of the Weaver.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WVR/534_Way of the Weaver.json @@ -35,8 +35,7 @@ "Prompt": "TEXT_CLSWVR011_00534_SYSTEM_Q0", "Yes": true } - ], - "NextQuestId": 534 + ] } ] } From db39e76e4bf8df0f674930979b89e1d1a36a0d3a Mon Sep 17 00:00:00 2001 From: cacahuetes Date: Sun, 25 Aug 2024 17:59:24 +0000 Subject: [PATCH 12/69] Upload files to "QuestPaths/5.x - Shadowbringers/Role Quests/Healer" --- .../Healer/3268_Affronts and Allies.json | 118 +++++++++++++++++ .../Healer/3269_The Scientific Method.json | 121 ++++++++++++++++++ .../Healer/3270_The Lost and the Found.json | 118 +++++++++++++++++ .../Healer/3271_Never to Return.json | 77 +++++++++++ .../Healer/3272_The Soul of Temperance.json | 113 ++++++++++++++++ 5 files changed, 547 insertions(+) create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3268_Affronts and Allies.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3269_The Scientific Method.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3270_The Lost and the Found.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3271_Never to Return.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3268_Affronts and Allies.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3268_Affronts and Allies.json new file mode 100644 index 00000000..268e2b12 --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3268_Affronts and Allies.json @@ -0,0 +1,118 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1031158, + "Position": { + "X": -26.657532, + "Y": 3.999815, + "Z": 209.88782 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { "InSameTerritory": true } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1030004, + "Position": { + "X": 689.1127, + "Y": 30.11682, + "Z": 278.85852 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "AetheryteShortcut": "Kholusia - Stilltide" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2009999, + "Position": { + "X": 529.3812, + "Y": 11.9782715, + "Z": 370.83997 + }, + "TerritoryId": 814, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [10866] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2010000, + "Position": { + "X": 342.48877, + "Y": 16.55597, + "Z": 454.24573 + }, + "TerritoryId": 814, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [10867] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1030006, + "Position": { + "X": 181.59753, + "Y": 33.636906, + "Z": 177.47766 + }, + "TerritoryId": 814, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1031158, + "Position": { + "X": -26.657532, + "Y": 3.999815, + "Z": 209.88782 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { "InSameTerritory": true } + }, + "NextQuestId": 3269 + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3269_The Scientific Method.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3269_The Scientific Method.json new file mode 100644 index 00000000..19c40685 --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3269_The Scientific Method.json @@ -0,0 +1,121 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1031158, + "Position": { + "X": -26.657532, + "Y": 3.999815, + "Z": 209.88782 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { "InSameTerritory": true } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1030012, + "Position": { + "X": 279.469, + "Y": 1.4685827, + "Z": -281.94098 + }, + "TerritoryId": 815, + "InteractionType": "Interact", + "AetheryteShortcut": "Amh Araeng - Mord Souq" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2010002, + "Position": { + "X": 279.65198, + "Y": 1.4800415, + "Z": -282.7345 + }, + "TerritoryId": 815, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_LUCKBA221_03269_Q1_000_000", + "Answer": "TEXT_LUCKBA221_03269_A1_000_002" + } + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1030013, + "Position": { + "X": 612.3292, + "Y": -25.655535, + "Z": -36.66742 + }, + "TerritoryId": 815, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1030014, + "Position": { + "X": 614.46545, + "Y": -25.7535, + "Z": -35.6604 + }, + "TerritoryId": 815, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1031158, + "Position": { + "X": -26.657532, + "Y": 3.999815, + "Z": 209.88782 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { "InSameTerritory": true } + }, + "NextQuestId": 3270 + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3270_The Lost and the Found.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3270_The Lost and the Found.json new file mode 100644 index 00000000..215bc044 --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3270_The Lost and the Found.json @@ -0,0 +1,118 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AUTHOR", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1031158, + "Position": { + "X": -26.657532, + "Y": 3.999815, + "Z": 209.88782 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { "InSameTerritory": true } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1030015, + "Position": { + "X": -83.05487, + "Y": -19.061518, + "Z": 309.83435 + }, + "TerritoryId": 817, + "InteractionType": "Interact", + "AetheryteShortcut": "Rak'tika - Slitherbough" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2010003, + "Position": { + "X": 263.9048, + "Y": 12.436096, + "Z": 103.990234 + }, + "TerritoryId": 817, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [10950] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2010004, + "Position": { + "X": 446.0669, + "Y": 8.041443, + "Z": 123.03345 + }, + "TerritoryId": 817, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [10869] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1030017, + "Position": { + "X": 633.99695, + "Y": 24.12675, + "Z": 59.861084 + }, + "TerritoryId": 817, + "InteractionType": "SinglePlayerDuty" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1031158, + "Position": { + "X": -26.657532, + "Y": 3.999815, + "Z": 209.88782 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { "InSameTerritory": true } + }, + "NextQuestId": 3271 + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3271_Never to Return.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3271_Never to Return.json new file mode 100644 index 00000000..f0e75da0 --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3271_Never to Return.json @@ -0,0 +1,77 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "AUTHOR", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1031158, + "Position": { + "X": -26.657532, + "Y": 3.999815, + "Z": 209.88782 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { "InSameTerritory": true } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1030021, + "Position": { + "X": -456.6568, + "Y": 417.12558, + "Z": -597.1008 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "AetheryteShortcut": "Kholusia - Tomra" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1030022, + "Position": { + "X": -355.55048, + "Y": 415.2497, + "Z": -677.9431 + }, + "TerritoryId": 814, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1030021, + "Position": { + "X": -456.6568, + "Y": 417.12558, + "Z": -597.1008 + }, + "TerritoryId": 814, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Kholusia - Tomra", + "NextQuestId": 3272 + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json new file mode 100644 index 00000000..b3d5cf1d --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json @@ -0,0 +1,113 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1030021, + "Position": { + "X": -456.6568, + "Y": 417.12558, + "Z": -597.1008 + }, + "TerritoryId": 814, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Kholusia - Tomra", + "NextQuestId": 3272, + "SkipConditions": { + "AethernetShortcutIf": { "InSameTerritory": true } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2010006, + "Position": { + "X": -115.31244, + "Y": 428.18335, + "Z": -621.4542 + }, + "TerritoryId": 814, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [10870] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2010007, + "Position": { + "X": 21.194763, + "Y": 348.89746, + "Z": -251.88074 + }, + "TerritoryId": 814, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [10871] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1030035, + "Position": { + "X": -650.35474, + "Y": 352.45102, + "Z": -129.01508 + }, + "TerritoryId": 814, + "InteractionType": "SinglePlayerDuty" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1030038, + "Position": { + "X": -650.35474, + "Y": 352.45102, + "Z": -129.01508 + }, + "TerritoryId": 814, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1030039, + "Position": { + "X": -26.657532, + "Y": 3.999815, + "Z": 209.88782 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { "InSameTerritory": true } + } + } + ] + } + ] +} From d4f122dda030054e3b8e1f1084b34b6e99d07697 Mon Sep 17 00:00:00 2001 From: cacahuetes Date: Sun, 25 Aug 2024 18:00:13 +0000 Subject: [PATCH 13/69] Update QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3267_Traditions and Travails.json --- .../Healer/3267_Traditions and Travails.json | 84 ++++++++++++++++++- 1 file changed, 81 insertions(+), 3 deletions(-) diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3267_Traditions and Travails.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3267_Traditions and Travails.json index 10e0e76d..8e04de51 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3267_Traditions and Travails.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3267_Traditions and Travails.json @@ -1,7 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "liza", - "Disabled": true, + "Author": "Cacahuetes", "QuestSequence": [ { "Sequence": 0, @@ -14,7 +13,86 @@ "Z": 209.88782 }, "TerritoryId": 819, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { "InSameTerritory": true } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1029999, + "Position": { + "X": 346.66968, + "Y": 3.2878497, + "Z": 177.17249 + }, + "TerritoryId": 813, + "InteractionType": "Interact", + "AetheryteShortcut": "Lakeland - Fort Jobb" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": 340.6667, + "Y": 3.0521033, + "Z": 208.3552 + }, + "TerritoryId": 813, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [10865] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1030000, + "Position": { + "X": 341.02393, + "Y": 3.5819468, + "Z": 198.32141 + }, + "TerritoryId": 813, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1031158, + "Position": { + "X": -26.657532, + "Y": 3.999815, + "Z": 209.88782 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { "InSameTerritory": true } + }, + "NextQuestId": 3268 } ] } From f4475d64caf867e2eaf6f3236d59658910c54de1 Mon Sep 17 00:00:00 2001 From: cacahuetes Date: Sun, 25 Aug 2024 18:21:29 +0000 Subject: [PATCH 14/69] Update QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json --- .../Healer/3272_The Soul of Temperance.json | 241 ++++++++++-------- 1 file changed, 128 insertions(+), 113 deletions(-) diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json index b3d5cf1d..24d7c9d6 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json @@ -1,113 +1,128 @@ -{ - "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "Cacahuetes", - "QuestSequence": [ - { - "Sequence": 0, - "Steps": [ - { - "DataId": 1030021, - "Position": { - "X": -456.6568, - "Y": 417.12558, - "Z": -597.1008 - }, - "TerritoryId": 814, - "InteractionType": "CompleteQuest", - "AetheryteShortcut": "Kholusia - Tomra", - "NextQuestId": 3272, - "SkipConditions": { - "AethernetShortcutIf": { "InSameTerritory": true } - } - } - ] - }, - { - "Sequence": 1, - "Steps": [ - { - "DataId": 2010006, - "Position": { - "X": -115.31244, - "Y": 428.18335, - "Z": -621.4542 - }, - "TerritoryId": 814, - "InteractionType": "Combat", - "EnemySpawnType": "AfterInteraction", - "KillEnemyDataIds": [10870] - } - ] - }, - { - "Sequence": 2, - "Steps": [ - { - "DataId": 2010007, - "Position": { - "X": 21.194763, - "Y": 348.89746, - "Z": -251.88074 - }, - "TerritoryId": 814, - "InteractionType": "Combat", - "EnemySpawnType": "AfterInteraction", - "KillEnemyDataIds": [10871] - } - ] - }, - { - "Sequence": 3, - "Steps": [ - { - "DataId": 1030035, - "Position": { - "X": -650.35474, - "Y": 352.45102, - "Z": -129.01508 - }, - "TerritoryId": 814, - "InteractionType": "SinglePlayerDuty" - } - ] - }, - { - "Sequence": 4, - "Steps": [ - { - "DataId": 1030038, - "Position": { - "X": -650.35474, - "Y": 352.45102, - "Z": -129.01508 - }, - "TerritoryId": 814, - "InteractionType": "Interact" - } - ] - }, - { - "Sequence": 255, - "Steps": [ - { - "DataId": 1030039, - "Position": { - "X": -26.657532, - "Y": 3.999815, - "Z": 209.88782 - }, - "TerritoryId": 819, - "InteractionType": "CompleteQuest", - "AetheryteShortcut": "Crystarium", - "AethernetShortcut": [ - "[Crystarium] Aetheryte Plaza", - "[Crystarium] Musica Universalis Markets" - ], - "SkipConditions": { - "AetheryteShortcutIf": { "InSameTerritory": true } - } - } - ] - } - ] -} +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Cacahuetes", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1030021, + "Position": { + "X": -456.6568, + "Y": 417.12558, + "Z": -597.1008 + }, + "TerritoryId": 814, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Kholusia - Tomra", + "NextQuestId": 3272, + "SkipConditions": { + "AethernetShortcutIf": { "InSameTerritory": true } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2010006, + "Position": { + "X": -115.31244, + "Y": 428.18335, + "Z": -621.4542 + }, + "TerritoryId": 814, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [10870] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2010007, + "Position": { + "X": 21.194763, + "Y": 348.89746, + "Z": -251.88074 + }, + "TerritoryId": 814, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [10871] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1030035, + "Position": { + "X": -650.35474, + "Y": 352.45102, + "Z": -129.01508 + }, + "TerritoryId": 814, + "InteractionType": "SinglePlayerDuty" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1030038, + "Position": { + "X": -650.35474, + "Y": 352.45102, + "Z": -129.01508 + }, + "TerritoryId": 814, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1030038, + "Position": { + "X": -650.35474, + "Y": 352.45102, + "Z": -129.01508 + }, + "TerritoryId": 814, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1030039, + "Position": { + "X": -26.657532, + "Y": 3.999815, + "Z": 209.88782 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { "InSameTerritory": true } + } + } + ] + } + ] +} From 3a54dd109186e9aa8da557092afab6d734d2f608 Mon Sep 17 00:00:00 2001 From: cacahuetes Date: Sun, 25 Aug 2024 18:33:30 +0000 Subject: [PATCH 15/69] Update QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json --- .../1721_The Girl with the Dragon Tissue.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json index 54b94a98..cd08a4e0 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json @@ -116,6 +116,22 @@ } ] }, + + { + "Sequence": 5, + "Steps": [ + { + "DataId": 2005855, + "Position": { + "X": -336.4157, + "Y": 89.00586, + "Z": -586.5721 + }, + "TerritoryId": 397, + "InteractionType": "Interact" + } + ] + }, { "Sequence": 6, "Steps": [ From 2a4ce09cda15ad09f7431c92271c7119d2c279a5 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 26 Aug 2024 11:11:44 +0200 Subject: [PATCH 16/69] Handle specific dialogue interactions while in a duty --- .../Controller/GameUi/InteractionUiController.cs | 7 ++++++- Questionable/Data/TerritoryData.cs | 10 ++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Questionable/Controller/GameUi/InteractionUiController.cs b/Questionable/Controller/GameUi/InteractionUiController.cs index 64c17832..e630d7d6 100644 --- a/Questionable/Controller/GameUi/InteractionUiController.cs +++ b/Questionable/Controller/GameUi/InteractionUiController.cs @@ -42,6 +42,7 @@ internal sealed class InteractionUiController : IDisposable private readonly GatheringPointRegistry _gatheringPointRegistry; private readonly QuestRegistry _questRegistry; private readonly QuestData _questData; + private readonly TerritoryData _territoryData; private readonly IGameGui _gameGui; private readonly ITargetManager _targetManager; private readonly IClientState _clientState; @@ -61,6 +62,7 @@ internal sealed class InteractionUiController : IDisposable GatheringPointRegistry gatheringPointRegistry, QuestRegistry questRegistry, QuestData questData, + TerritoryData territoryData, IGameGui gameGui, ITargetManager targetManager, IPluginLog pluginLog, @@ -77,6 +79,7 @@ internal sealed class InteractionUiController : IDisposable _gatheringPointRegistry = gatheringPointRegistry; _questRegistry = questRegistry; _questData = questData; + _territoryData = territoryData; _gameGui = gameGui; _targetManager = targetManager; _clientState = clientState; @@ -101,7 +104,9 @@ internal sealed class InteractionUiController : IDisposable } } - private bool ShouldHandleUiInteractions => _isInitialCheck || _questController.IsRunning; + private bool ShouldHandleUiInteractions => _isInitialCheck || + _questController.IsRunning || + _territoryData.IsQuestBattleInstance(_clientState.TerritoryType); internal unsafe void HandleCurrentDialogueChoices() { diff --git a/Questionable/Data/TerritoryData.cs b/Questionable/Data/TerritoryData.cs index 0175cf6d..0b20d9a9 100644 --- a/Questionable/Data/TerritoryData.cs +++ b/Questionable/Data/TerritoryData.cs @@ -12,7 +12,7 @@ internal sealed class TerritoryData { private readonly ImmutableDictionary _territoryNames; private readonly ImmutableHashSet _territoriesWithMount; - private readonly ImmutableHashSet _dutyTerritories; + private readonly ImmutableDictionary _dutyTerritories; private readonly ImmutableDictionary _instanceNames; public TerritoryData(IDataManager dataManager) @@ -35,8 +35,7 @@ internal sealed class TerritoryData _dutyTerritories = dataManager.GetExcelSheet()! .Where(x => x.RowId > 0 && x.ContentFinderCondition.Row != 0) - .Select(x => (ushort)x.RowId) - .ToImmutableHashSet(); + .ToImmutableDictionary(x => (ushort)x.RowId, x => x.ContentFinderCondition.Value!.ContentType.Row); _instanceNames = dataManager.GetExcelSheet()! .Where(x => x.RowId > 0 && x.Content != 0 && x.ContentLinkType == 1 && x.ContentType.Row != 6) @@ -56,7 +55,10 @@ internal sealed class TerritoryData public bool CanUseMount(ushort territoryId) => _territoriesWithMount.Contains(territoryId); - public bool IsDutyInstance(ushort territoryId) => _dutyTerritories.Contains(territoryId); + public bool IsDutyInstance(ushort territoryId) => _dutyTerritories.ContainsKey(territoryId); + + public bool IsQuestBattleInstance(ushort territoryId) => + _dutyTerritories.TryGetValue(territoryId, out uint contentType) && contentType == 7; public string? GetInstanceName(ushort instanceId) => _instanceNames.GetValueOrDefault(instanceId); } From 477b7cb44642cba7c4f0a8c8e5b5529034c734e0 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 26 Aug 2024 11:14:26 +0200 Subject: [PATCH 17/69] Update positions for S9 aetheryte interactions --- Questionable/Controller/Steps/Shared/AethernetShortcut.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Questionable/Controller/Steps/Shared/AethernetShortcut.cs b/Questionable/Controller/Steps/Shared/AethernetShortcut.cs index 29c76f0c..8df6c49a 100644 --- a/Questionable/Controller/Steps/Shared/AethernetShortcut.cs +++ b/Questionable/Controller/Steps/Shared/AethernetShortcut.cs @@ -142,10 +142,10 @@ internal static class AethernetShortcut logger.LogInformation("Moving to S9 aetheryte"); List nearbyPoints = [ - new(7.225532f, 8.467899f, -7.1670876f), - new(7.177844f, 8.467899f, 7.2216787f), - new(-7.0762224f, 8.467898f, 7.1924725f), - new(-7.1289554f, 8.467898f, -7.0594683f) + new(0, 8.442986f, 9), + new(9, 8.442986f, 0), + new(-9, 8.442986f, 0), + new(0, 8.442986f, -9), ]; Vector3 closestPoint = nearbyPoints.MinBy(x => (playerPosition - x).Length()); From e6ee91c19c5e9d270ffb769f1e43230dc042ef42 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 26 Aug 2024 15:58:14 +0200 Subject: [PATCH 18/69] Fix interactions in 'A Knight of Alexandria' --- Questionable/Controller/Steps/Interactions/Interact.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Questionable/Controller/Steps/Interactions/Interact.cs b/Questionable/Controller/Steps/Interactions/Interact.cs index 0482d88b..c826fef5 100644 --- a/Questionable/Controller/Steps/Interactions/Interact.cs +++ b/Questionable/Controller/Steps/Interactions/Interact.cs @@ -174,6 +174,14 @@ internal static class Interact logger.LogInformation("Interaction was most likely triggered"); _interactionState = EInteractionState.InteractionConfirmed; } + else if (dataId is >= 1047901 and <= 1047905 && + condition[ConditionFlag.Disguised] && + flag == ConditionFlag.Mounting71 && // why the fuck is this the flag that's used, instead of OccupiedIn[Quest]Event + value) + { + logger.LogInformation("(A Knight of Alexandria) Interaction was most likely triggered"); + _interactionState = EInteractionState.InteractionConfirmed; + } } private enum EInteractionState From a840a9f42e3f2d7d2fbe1011869f6d445b3e37fa Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 26 Aug 2024 16:01:07 +0200 Subject: [PATCH 19/69] Pick up DT aether current quests (HF/LM) during the MSQ --- .../Shaaloani/978_Pyariyoanaan Plain_MIN.json | 10 +++-- .../Urqopacha/974_Chabameki_MIN.json | 6 +-- .../Heritage Found/5159_He Who Remembers.json | 9 +++++ .../5160_Auntie Knows Best.json | 18 +++++++++ .../4932_Embracing Oblivion.json | 1 + .../4933_Solution Nine.json | 31 ++++++++++++++- .../4941_At a Crossroads.json | 22 +++++++++++ .../4945_The Resilient Son.json | 3 +- .../4951_The Land of Dreams.json | 11 ++++++ .../4953_The Sanctuary of the Strong.json | 35 +++++++++++++++++ .../4956_An Explorer's Delight.json | 38 +++++++++++++++++++ .../MSQ/F-Living Memory/4959_Dawntrail.json | 11 ++++-- Questionable/Controller/QuestController.cs | 4 +- .../Controller/Steps/Interactions/Combat.cs | 6 +-- 14 files changed, 189 insertions(+), 16 deletions(-) diff --git a/GatheringPaths/7.x - Dawntrail/Shaaloani/978_Pyariyoanaan Plain_MIN.json b/GatheringPaths/7.x - Dawntrail/Shaaloani/978_Pyariyoanaan Plain_MIN.json index ef7c642e..fbb7675a 100644 --- a/GatheringPaths/7.x - Dawntrail/Shaaloani/978_Pyariyoanaan Plain_MIN.json +++ b/GatheringPaths/7.x - Dawntrail/Shaaloani/978_Pyariyoanaan Plain_MIN.json @@ -42,14 +42,18 @@ "X": 419.309, "Y": -10.25133, "Z": -784.8259 - } + }, + "MinimumAngle": -25, + "MaximumAngle": 85 }, { "Position": { "X": 410.6989, "Y": -10.9656, "Z": -790.8315 - } + }, + "MinimumAngle": -20, + "MaximumAngle": 95 } ] } @@ -156,4 +160,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/GatheringPaths/7.x - Dawntrail/Urqopacha/974_Chabameki_MIN.json b/GatheringPaths/7.x - Dawntrail/Urqopacha/974_Chabameki_MIN.json index 7dff5fe8..d103a9ea 100644 --- a/GatheringPaths/7.x - Dawntrail/Urqopacha/974_Chabameki_MIN.json +++ b/GatheringPaths/7.x - Dawntrail/Urqopacha/974_Chabameki_MIN.json @@ -52,8 +52,8 @@ "Y": -47.86026, "Z": -394.9654 }, - "MinimumAngle": -120, - "MaximumAngle": 120 + "MinimumAngle": -145, + "MaximumAngle": -95 } ] } @@ -160,4 +160,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/QuestPaths/7.x - Dawntrail/Aether Currents/Heritage Found/5159_He Who Remembers.json b/QuestPaths/7.x - Dawntrail/Aether Currents/Heritage Found/5159_He Who Remembers.json index 55270650..7fdb2f05 100644 --- a/QuestPaths/7.x - Dawntrail/Aether Currents/Heritage Found/5159_He Who Remembers.json +++ b/QuestPaths/7.x - Dawntrail/Aether Currents/Heritage Found/5159_He Who Remembers.json @@ -20,6 +20,15 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": -392.35907, + "Y": -14.000012, + "Z": 635.3141 + }, + "TerritoryId": 1191, + "InteractionType": "WalkTo" + }, { "Position": { "X": -415.87146, diff --git a/QuestPaths/7.x - Dawntrail/Aether Currents/Heritage Found/5160_Auntie Knows Best.json b/QuestPaths/7.x - Dawntrail/Aether Currents/Heritage Found/5160_Auntie Knows Best.json index 47d856fe..6957d154 100644 --- a/QuestPaths/7.x - Dawntrail/Aether Currents/Heritage Found/5160_Auntie Knows Best.json +++ b/QuestPaths/7.x - Dawntrail/Aether Currents/Heritage Found/5160_Auntie Knows Best.json @@ -55,6 +55,24 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": 184.68884, + "Y": 99.24859, + "Z": -171.97504 + }, + "TerritoryId": 1191, + "InteractionType": "WalkTo" + }, + { + "Position": { + "X": 148.14713, + "Y": 100.07344, + "Z": -135.20776 + }, + "TerritoryId": 1191, + "InteractionType": "WalkTo" + }, { "DataId": 2013966, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4932_Embracing Oblivion.json b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4932_Embracing Oblivion.json index a039a85a..0bdf93e8 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4932_Embracing Oblivion.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4932_Embracing Oblivion.json @@ -69,6 +69,7 @@ "Y": 0.003171, "Z": 1.296936 }, + "StopDistance": 5, "TerritoryId": 1171, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4933_Solution Nine.json b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4933_Solution Nine.json index 67d31b9b..747faf16 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4933_Solution Nine.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4933_Solution Nine.json @@ -21,6 +21,34 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1049443, + "Position": { + "X": -177.56934, + "Y": 29.999998, + "Z": -601.15967 + }, + "TerritoryId": 1191, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5153, + "AetheryteShortcut": "Heritage Found - The Outskirts", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + }, + { + "DataId": 1050805, + "Position": { + "X": -153.09375, + "Y": 34.946026, + "Z": -581.0178 + }, + "TerritoryId": 1191, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5160 + }, { "DataId": 1048053, "Position": { @@ -29,8 +57,7 @@ "Z": -828.58014 }, "TerritoryId": 1191, - "InteractionType": "Interact", - "AetheryteShortcut": "Heritage Found - The Outskirts" + "InteractionType": "Interact" } ] }, diff --git a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4941_At a Crossroads.json b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4941_At a Crossroads.json index 08e1e1a9..b48c78ef 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4941_At a Crossroads.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4941_At a Crossroads.json @@ -37,6 +37,17 @@ { "Sequence": 2, "Steps": [ + { + "DataId": 1049505, + "Position": { + "X": -209.85736, + "Y": 7.49638, + "Z": 595.9104 + }, + "TerritoryId": 1191, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5159 + }, { "DataId": 1048099, "Position": { @@ -53,6 +64,17 @@ { "Sequence": 3, "Steps": [ + { + "DataId": 1049501, + "Position": { + "X": -592.7062, + "Y": -2.4803436, + "Z": -489.28055 + }, + "TerritoryId": 1191, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5156 + }, { "DataId": 1048116, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4945_The Resilient Son.json b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4945_The Resilient Son.json index b912c8bd..bb4681d7 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4945_The Resilient Son.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/E-SolutionNine-HeritageFound2/4945_The Resilient Son.json @@ -32,7 +32,8 @@ "Z": -565.48413 }, "TerritoryId": 1191, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, diff --git a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4951_The Land of Dreams.json b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4951_The Land of Dreams.json index ae4ec158..15de1328 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4951_The Land of Dreams.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4951_The Land of Dreams.json @@ -21,6 +21,17 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1050617, + "Position": { + "X": -631.4031, + "Y": 2.9305653E-07, + "Z": 497.12354 + }, + "TerritoryId": 1192, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5174 + }, { "DataId": 1047884, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4953_The Sanctuary of the Strong.json b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4953_The Sanctuary of the Strong.json index 3c29861a..5f5a5c57 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4953_The Sanctuary of the Strong.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4953_The Sanctuary of the Strong.json @@ -21,6 +21,41 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1048243, + "Position": { + "X": 57.87744, + "Y": 53.200012, + "Z": 772.03015 + }, + "TerritoryId": 1192, + "InteractionType": "Interact", + "AetheryteShortcut": "Living Memory - Leynode Mnemo", + "TargetTerritoryId": 1192, + "SkipConditions": { + "StepIf": { + "QuestsCompleted": [ + 5176 + ] + }, + "AetheryteShortcutIf": { + "QuestsCompleted": [ + 5176 + ] + } + } + }, + { + "DataId": 1050621, + "Position": { + "X": 477.1344, + "Y": -0.034497976, + "Z": 711.6654 + }, + "TerritoryId": 1192, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5176 + }, { "DataId": 1047917, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4956_An Explorer's Delight.json b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4956_An Explorer's Delight.json index 146b118c..2c708162 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4956_An Explorer's Delight.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4956_An Explorer's Delight.json @@ -21,6 +21,44 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1050625, + "Position": { + "X": 628.6869, + "Y": 24.99949, + "Z": -283.3753 + }, + "TerritoryId": 1192, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5178, + "AetheryteShortcut": "Living Memory - Leynode Pyro", + "SkipConditions": { + "AetheryteShortcutIf": { + "QuestsCompleted": [ + 5178 + ] + } + } + }, + { + "DataId": 1050632, + "Position": { + "X": 538.9944, + "Y": 25.001822, + "Z": -194.3847 + }, + "TerritoryId": 1192, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 5179, + "AetheryteShortcut": "Living Memory - Leynode Pyro", + "SkipConditions": { + "AetheryteShortcutIf": { + "QuestsCompleted": [ + 5179 + ] + } + } + }, { "DataId": 1047971, "Position": { diff --git a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4959_Dawntrail.json b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4959_Dawntrail.json index 87c4c82b..68e4c7bf 100644 --- a/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4959_Dawntrail.json +++ b/QuestPaths/7.x - Dawntrail/MSQ/F-Living Memory/4959_Dawntrail.json @@ -33,8 +33,12 @@ }, "TerritoryId": 1192, "InteractionType": "WalkTo", - "AetheryteShortcut": "Living Memory - Leynode Mnemo", - "$": "Leynode Mnemo to Meso Terminal waypoint" + "$": "Leynode Mnemo to Meso Terminal waypoint", + "SkipConditions": { + "StepIf": { + "Flying": "Unlocked" + } + } }, { "DataId": 1048014, @@ -44,7 +48,8 @@ "Z": 363.05774 }, "TerritoryId": 1192, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, diff --git a/Questionable/Controller/QuestController.cs b/Questionable/Controller/QuestController.cs index 529b4603..70512f8a 100644 --- a/Questionable/Controller/QuestController.cs +++ b/Questionable/Controller/QuestController.cs @@ -735,7 +735,9 @@ internal sealed class QuestController : MiniTaskController, IDi return false; QuestStep? currentStep = currentSequence?.FindStep(currentQuest.Step); - return currentStep?.AetheryteShortcut != null; + return currentStep?.AetheryteShortcut != null && + (currentStep.SkipConditions?.AetheryteShortcutIf?.QuestsCompleted.Count ?? 0) == 0 && + (currentStep.SkipConditions?.AetheryteShortcutIf?.QuestsAccepted.Count ?? 0) == 0; } public bool TryPickPriorityQuest() diff --git a/Questionable/Controller/Steps/Interactions/Combat.cs b/Questionable/Controller/Steps/Interactions/Combat.cs index 10875126..39909c56 100644 --- a/Questionable/Controller/Steps/Interactions/Combat.cs +++ b/Questionable/Controller/Steps/Interactions/Combat.cs @@ -41,7 +41,7 @@ internal static class Combat ArgumentNullException.ThrowIfNull(step.DataId); yield return interactFactory.Interact(step.DataId.Value, quest, EInteractionType.None, true); - yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2)); + yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1)); yield return CreateTask(quest, sequence, step); break; } @@ -53,14 +53,14 @@ internal static class Combat yield return useItemFactory.OnObject(quest.Id, step.DataId.Value, step.ItemId.Value, step.CompletionQuestVariablesFlags, true); - yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2)); + yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1)); yield return CreateTask(quest, sequence, step); break; } case EEnemySpawnType.AutoOnEnterArea: if (step.CombatDelaySecondsAtStart == null) - yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(2)); + yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1)); // automatically triggered when entering area, i.e. only unmount yield return CreateTask(quest, sequence, step); From 24f95d58fe9100e97a1f8b851b33b2af93bc7325 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 26 Aug 2024 16:07:39 +0200 Subject: [PATCH 20/69] Version bump --- Directory.Build.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 4531c415..8fe0a236 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,5 +1,5 @@ - 2.15 + 2.16 From 2c2e95682bb4ccd10a59bf0146c3221889f6bffb Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 26 Aug 2024 16:13:17 +0200 Subject: [PATCH 21/69] Fix previous quest requirement --- Questionable/Model/QuestInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Questionable/Model/QuestInfo.cs b/Questionable/Model/QuestInfo.cs index d78838fc..9b1214b9 100644 --- a/Questionable/Model/QuestInfo.cs +++ b/Questionable/Model/QuestInfo.cs @@ -39,7 +39,7 @@ internal sealed class QuestInfo : IQuestInfo { 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[1].Row & 0xFFFF))) + new(new QuestId((ushort)(quest.PreviousQuest[2].Row & 0xFFFF))) } .Where(x => x.QuestId.Value != 0) .ToImmutableList(); From 21c9e2fcac3c575a1b5960614b65b656a2dfe9fd Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 26 Aug 2024 16:13:27 +0200 Subject: [PATCH 22/69] Fix quest tooltips including quest name twice --- Questionable/Windows/QuestComponents/QuestTooltipComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Questionable/Windows/QuestComponents/QuestTooltipComponent.cs b/Questionable/Windows/QuestComponents/QuestTooltipComponent.cs index cda7636c..4fac3f95 100644 --- a/Questionable/Windows/QuestComponents/QuestTooltipComponent.cs +++ b/Questionable/Windows/QuestComponents/QuestTooltipComponent.cs @@ -200,7 +200,7 @@ internal sealed class QuestTooltipComponent if (questInfo.IsMainScenarioQuest) name += $" ({questInfo.QuestId}, MSQ)"; else - name += $" {questInfo.Name} ({questInfo.QuestId})"; + name += $" ({questInfo.QuestId})"; return name; } From 7fe85a49f2f14530d83c4cc2ad10ec00a275af8e Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Mon, 26 Aug 2024 03:18:44 +0800 Subject: [PATCH 23/69] Added Omicron story quest 'And Another Question'. Also added required gathering points. --- .../Ultima Thule/909__MIN.json | 61 +++++ .../Ultima Thule/912__BTN.json | 61 +++++ .../Story/4603_And Another Question.json | 229 ++++++++++++++++++ 3 files changed, 351 insertions(+) create mode 100644 GatheringPaths/6.x - Endwalker/Ultima Thule/909__MIN.json create mode 100644 GatheringPaths/6.x - Endwalker/Ultima Thule/912__BTN.json create mode 100644 QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4603_And Another Question.json diff --git a/GatheringPaths/6.x - Endwalker/Ultima Thule/909__MIN.json b/GatheringPaths/6.x - Endwalker/Ultima Thule/909__MIN.json new file mode 100644 index 00000000..8343042a --- /dev/null +++ b/GatheringPaths/6.x - Endwalker/Ultima Thule/909__MIN.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", + "Author": "plogon_enjoyer", + "Steps": [ + { + "TerritoryId": 960, + "InteractionType": "None", + "AetheryteShortcut": "Ultima Thule - Reah Tahra" + } + ], + "Groups": [ + { + "Nodes": [ + { + "DataId": 34376, + "Locations": [ + { + "Position": { + "X": -586.0029, + "Y": 84.39367, + "Z": 568.1448 + } + } + ] + } + ] + }, + { + "Nodes": [ + { + "DataId": 34377, + "Locations": [ + { + "Position": { + "X": -578.2748, + "Y": 86.34826, + "Z": 567.2876 + } + } + ] + } + ] + }, + { + "Nodes": [ + { + "DataId": 34378, + "Locations": [ + { + "Position": { + "X": -600.2446, + "Y": 86.01588, + "Z": 557.4477 + } + } + ] + } + ] + } + ] +} diff --git a/GatheringPaths/6.x - Endwalker/Ultima Thule/912__BTN.json b/GatheringPaths/6.x - Endwalker/Ultima Thule/912__BTN.json new file mode 100644 index 00000000..0f22e432 --- /dev/null +++ b/GatheringPaths/6.x - Endwalker/Ultima Thule/912__BTN.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/GatheringPaths/gatheringlocation-v1.json", + "Author": "plogon_enjoyer", + "Steps": [ + { + "TerritoryId": 960, + "InteractionType": "None", + "AetheryteShortcut": "Ultima Thule - Reah Tahra" + } + ], + "Groups": [ + { + "Nodes": [ + { + "DataId": 34385, + "Locations": [ + { + "Position": { + "X": 27.77994, + "Y": 73.57088, + "Z": 695.2364 + } + } + ] + } + ] + }, + { + "Nodes": [ + { + "DataId": 34386, + "Locations": [ + { + "Position": { + "X": 23.20134, + "Y": 70.90392, + "Z": 698.6194 + } + } + ] + } + ] + }, + { + "Nodes": [ + { + "DataId": 34387, + "Locations": [ + { + "Position": { + "X": 30.69294, + "Y": 75.43362, + "Z": 688.8371 + } + } + ] + } + ] + } + ] +} 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 new file mode 100644 index 00000000..7d907484 --- /dev/null +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4603_And Another Question.json @@ -0,0 +1,229 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1043951, + "Position": { + "X": 303.8529, + "Y": 481.99442, + "Z": 154.83325 + }, + "TerritoryId": 960, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1043865, + "Position": { + "X": 301.8081, + "Y": 482.13644, + "Z": 165.02625 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_BANOMI003_04603_Q9_000_000", + "Yes": true + } + ], + "Mount": true + }, + { + "DataId": 1043539, + "Position": { + "X": 205.92041, + "Y": 566, + "Z": 257.2517 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1043547, + "Position": { + "X": 110.30737, + "Y": 269.03677, + "Z": -626.7338 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "AetheryteShortcut": "Ultima Thule - Abode of the Ea", + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1043552, + "Position": { + "X": 103.837524, + "Y": 269.41934, + "Z": -514.6105 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "Fly": true + }, + { + "DataId": 1043549, + "Position": { + "X": 46.219482, + "Y": 269.597, + "Z": -474.60138 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1043547, + "Position": { + "X": 110.30737, + "Y": 269.03677, + "Z": -626.7338 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1043549, + "Position": { + "X": 46.219482, + "Y": 269.597, + "Z": -474.60138 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "Fly": true, + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_BANOMI003_04603_Q2_000_000", + "Yes": true + } + ] + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "TerritoryId": 960, + "InteractionType": "None", + "RequiredGatheredItems": [ + { + "QuestAcceptedAsClass": "Miner", + "ItemId": 38278, + "ItemCount": 3 + }, + { + "QuestAcceptedAsClass": "Botanist", + "ItemId": 38302, + "ItemCount": 3 + } + ], + "Fly": true + }, + { + "DataId": 2013072, + "Position": { + "X": 456.65674, + "Y": 438.04077, + "Z": 310.2312 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "AetheryteShortcut": "Ultima Thule - Base Omicron", + "TargetTerritoryId": 960, + "Mount": true + }, + { + "DataId": 1043865, + "Position": { + "X": 301.8081, + "Y": 482.13644, + "Z": 165.02625 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "TargetTerritoryId": 960, + "Fly": true + }, + { + "DataId": 1043585, + "Position": { + "X": 203.84521, + "Y": 567.4998, + "Z": 246.87573 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1043864, + "Position": { + "X": 244.83093, + "Y": 564.8203, + "Z": 261.76843 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "Fly": true, + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_BANOMI003_04603_Q8_000_000", + "Yes": true + } + ] + }, + { + "DataId": 1043951, + "Position": { + "X": 303.8529, + "Y": 481.99442, + "Z": 154.83325 + }, + "TerritoryId": 960, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} From 99499415dbfc17028efcf6afc35136752fef3994 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Tue, 27 Aug 2024 00:44:30 +0800 Subject: [PATCH 24/69] Updated Omicron daily quest 'I, Omicron' --- .../Omicrons/Dailies/4623_I, Omicron.json | 61 ++++++++++++++++++- 1 file changed, 58 insertions(+), 3 deletions(-) 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 368803c3..ee549563 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 @@ -1,7 +1,6 @@ -{ +{ "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "liza", - "Disabled": true, + "Author": "plogon_enjoyer", "QuestSequence": [ { "Sequence": 0, @@ -18,9 +17,65 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2013074, + "Position": { + "X": 304.3412, + "Y": 483.48206, + "Z": 143.11438 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "TargetTerritoryId": 1073, + "$": "Without this step, there are times where it doesn't confirm automatically" + }, + { + "TerritoryId": 1073, + "InteractionType": "None", + "RequiredGatheredItems": [ + { + "QuestAcceptedAsClass": "Miner", + "ItemId": 38291, + "ItemCount": 3 + }, + { + "QuestAcceptedAsClass": "Botanist", + "ItemId": 38315, + "ItemCount": 3 + } + ] + }, + { + "DataId": 1044065, + "Position": { + "X": 478.9348, + "Y": 437.0016, + "Z": 340.505 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "AetheryteShortcut": "Ultima Thule - Base Omicron" + } + ] + }, { "Sequence": 255, "Steps": [ + { + "DataId": 2013072, + "Position": { + "X": 456.65674, + "Y": 438.04077, + "Z": 310.2312 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "TargetTerritoryId": 960, + "Mount": true + }, { "DataId": 1043417, "Position": { From 2f4313c9da951bcacdb2a7adad0348ac7febf7b0 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Tue, 27 Aug 2024 00:44:45 +0800 Subject: [PATCH 25/69] Updated Omicron daily quest 'Guardians of the Galaxy' --- .../Dailies/4624_Guardians of the Galaxy.json | 78 ++++++++++++++++++- 1 file changed, 74 insertions(+), 4 deletions(-) diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4624_Guardians of the Galaxy.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4624_Guardians of the Galaxy.json index 368803c3..780945ad 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4624_Guardians of the Galaxy.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4624_Guardians of the Galaxy.json @@ -1,7 +1,6 @@ -{ +{ "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "liza", - "Disabled": true, + "Author": "plogon_enjoyer", "QuestSequence": [ { "Sequence": 0, @@ -18,9 +17,79 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2013073, + "Position": { + "X": 334.37085, + "Y": 483.17688, + "Z": 158.28174 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "TargetTerritoryId": 960, + "Mount": true + }, + { + "DataId": 1044066, + "Position": { + "X": 493.58362, + "Y": 436.99985, + "Z": 317.09766 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1044068, + "Position": { + "X": 638.5748, + "Y": 438.6276, + "Z": 260.3341 + }, + "TerritoryId": 960, + "InteractionType": "Action", + "Action": "Electric Flux", + "Fly": true + }, + { + "DataId": 1044069, + "Position": { + "X": 668.0552, + "Y": 440.4633, + "Z": 360.79956 + }, + "TerritoryId": 960, + "InteractionType": "Action", + "Action": "Electric Flux", + "Fly": true + } + ] + }, { "Sequence": 255, "Steps": [ + { + "DataId": 2013072, + "Position": { + "X": 456.65674, + "Y": 438.04077, + "Z": 310.2312 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "TargetTerritoryId": 960, + "AetheryteShortcut": "Ultima Thule - Base Omicron", + "Mount": true + }, { "DataId": 1043417, "Position": { @@ -29,7 +98,8 @@ "Z": 148.11926 }, "TerritoryId": 960, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "Mount": true } ] } From b9061b31909d0171d64c4e066276926e60823021 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Tue, 27 Aug 2024 21:14:22 +0200 Subject: [PATCH 26/69] Support 'ChatMessage' in CompleteQuest steps --- Questionable/Controller/Steps/Interactions/Interact.cs | 3 +++ Questionable/Controller/Steps/Interactions/Say.cs | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Questionable/Controller/Steps/Interactions/Interact.cs b/Questionable/Controller/Steps/Interactions/Interact.cs index c826fef5..b79fa904 100644 --- a/Questionable/Controller/Steps/Interactions/Interact.cs +++ b/Questionable/Controller/Steps/Interactions/Interact.cs @@ -28,6 +28,9 @@ internal static class Interact if (step.Emote != null) yield break; + if (step.ChatMessage != null) + yield break; + if (step.DataId == null) yield break; } diff --git a/Questionable/Controller/Steps/Interactions/Say.cs b/Questionable/Controller/Steps/Interactions/Say.cs index 7b8855a1..3d917b33 100644 --- a/Questionable/Controller/Steps/Interactions/Say.cs +++ b/Questionable/Controller/Steps/Interactions/Say.cs @@ -17,7 +17,12 @@ internal static class Say { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { - if (step.InteractionType != EInteractionType.Say) + if (step.InteractionType is EInteractionType.AcceptQuest or EInteractionType.CompleteQuest) + { + if (step.ChatMessage == null) + return []; + } + else if (step.InteractionType != EInteractionType.Say) return []; From 0473c9b17cc4411eeaab74fba185f9b4ddc2ffeb Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Tue, 27 Aug 2024 22:00:34 +0200 Subject: [PATCH 27/69] Update code for updated dalamud --- Questionable/Controller/ContextMenuController.cs | 2 +- Questionable/Controller/Steps/Gathering/TurnInDelivery.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Questionable/Controller/ContextMenuController.cs b/Questionable/Controller/ContextMenuController.cs index f8441e63..509d8372 100644 --- a/Questionable/Controller/ContextMenuController.cs +++ b/Questionable/Controller/ContextMenuController.cs @@ -99,7 +99,7 @@ internal sealed class ContextMenuController : IDisposable if (agentSatisfactionSupply->IsAgentActive()) { int maxTurnIns = agentSatisfactionSupply->NpcInfo.SatisfactionRank == 1 ? 3 : 6; - quantityToGather = Math.Min(agentSatisfactionSupply->RemainingAllowances, + quantityToGather = Math.Min(agentSatisfactionSupply->NpcData.RemainingAllowances, ((AgentSatisfactionSupply2*)agentSatisfactionSupply)->CalculateTurnInsToNextRank(maxTurnIns)); } } diff --git a/Questionable/Controller/Steps/Gathering/TurnInDelivery.cs b/Questionable/Controller/Steps/Gathering/TurnInDelivery.cs index ca6a93d8..08da1440 100644 --- a/Questionable/Controller/Steps/Gathering/TurnInDelivery.cs +++ b/Questionable/Controller/Steps/Gathering/TurnInDelivery.cs @@ -44,7 +44,7 @@ internal static class TurnInDelivery if (addon == null || !LAddon.IsAddonReady(addon)) return ETaskResult.StillRunning; - ushort remainingAllowances = agentSatisfactionSupply->RemainingAllowances; + ushort remainingAllowances = agentSatisfactionSupply->NpcData.RemainingAllowances; if (remainingAllowances == 0) { logger.LogInformation("No remaining weekly allowances"); From 33726426df2ea3b27f8c9abc66495704ed45b49b Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Tue, 27 Aug 2024 22:02:26 +0200 Subject: [PATCH 28/69] Add Rising 2024 quests --- .../5015_Rising to the Call.json | 187 ++++++++++++++++++ ... Who Are About to Set Sail Salute You.json | 121 ++++++++++++ .../QuestComponents/EventInfoComponent.cs | 16 +- 3 files changed, 318 insertions(+), 6 deletions(-) create mode 100644 QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5015_Rising to the Call.json create mode 100644 QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5016_We Who Are About to Set Sail Salute You.json diff --git a/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5015_Rising to the Call.json b/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5015_Rising to the Call.json new file mode 100644 index 00000000..d85aa707 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5015_Rising to the Call.json @@ -0,0 +1,187 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1050998, + "Position": { + "X": 4.0131226, + "Y": 44.499996, + "Z": 126.17676 + }, + "TerritoryId": 128, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] The Aftcastle" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 128 + ] + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1050999, + "Position": { + "X": 4.837097, + "Y": 31.47563, + "Z": -256.97723 + }, + "TerritoryId": 128, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Limsa Lominsa] The Aftcastle", + "[Limsa Lominsa] Marauders' Guild" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1051000, + "Position": { + "X": -100.175476, + "Y": 18.00033, + "Z": -15.030151 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Limsa Lominsa] Marauders' Guild", + "[Limsa Lominsa] Aetheryte Plaza" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1001217, + "Position": { + "X": -140.85602, + "Y": 18.199999, + "Z": 17.013733 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 1051003, + "Position": { + "X": -188.12854, + "Y": 16, + "Z": 33.37146 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 1051002, + "Position": { + "X": -205.005, + "Y": 15.999994, + "Z": 71.97681 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1051004, + "Position": { + "X": -243.03046, + "Y": 16.199997, + "Z": 40.97046 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 2014209, + "Position": { + "X": -385.1225, + "Y": 5.996765, + "Z": 33.707153 + }, + "TerritoryId": 129, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Limsa Lominsa] Hawkers' Alley", + "[Limsa Lominsa] Arcanists' Guild" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1051001, + "Position": { + "X": 3.7994385, + "Y": 44.499992, + "Z": 126.05469 + }, + "TerritoryId": 128, + "InteractionType": "CompleteQuest", + "AethernetShortcut": [ + "[Limsa Lominsa] Arcanists' Guild", + "[Limsa Lominsa] The Aftcastle" + ] + } + ] + } + ] +} diff --git a/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5016_We Who Are About to Set Sail Salute You.json b/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5016_We Who Are About to Set Sail Salute You.json new file mode 100644 index 00000000..83300e64 --- /dev/null +++ b/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5016_We Who Are About to Set Sail Salute You.json @@ -0,0 +1,121 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1051007, + "Position": { + "X": 2.2735596, + "Y": 44.499992, + "Z": 125.200195 + }, + "StopDistance": 5, + "TerritoryId": 128, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] The Aftcastle" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 128 + ] + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1051008, + "Position": { + "X": 2.5481567, + "Y": 43.999977, + "Z": -206.71399 + }, + "TerritoryId": 128, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Limsa Lominsa] The Aftcastle", + "[Limsa Lominsa] Marauders' Guild" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1051009, + "Position": { + "X": 1.5106201, + "Y": 44, + "Z": -205.8595 + }, + "TerritoryId": 128, + "InteractionType": "Interact", + "StopDistance": 5 + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2014210, + "Position": { + "X": -176.62323, + "Y": 40.97046, + "Z": 185.35132 + }, + "TerritoryId": 128, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Limsa Lominsa] Marauders' Guild", + "[Limsa Lominsa] The Aftcastle" + ] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1051010, + "Position": { + "X": -178.11859, + "Y": 40.999958, + "Z": 184.67993 + }, + "StopDistance": 5, + "TerritoryId": 128, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1051011, + "Position": { + "X": -178.63745, + "Y": 40.999916, + "Z": 186.3584 + }, + "StopDistance": 7, + "TerritoryId": 128, + "InteractionType": "CompleteQuest" + } + ] + } + ] +} diff --git a/Questionable/Windows/QuestComponents/EventInfoComponent.cs b/Questionable/Windows/QuestComponents/EventInfoComponent.cs index 12e3f497..fa94117d 100644 --- a/Questionable/Windows/QuestComponents/EventInfoComponent.cs +++ b/Questionable/Windows/QuestComponents/EventInfoComponent.cs @@ -20,8 +20,7 @@ internal sealed class EventInfoComponent { private readonly List _eventQuests = [ - new EventQuest("Moonfire Faire", [new(5182), new(5183)], - new DateTime(new DateOnly(2024, 8, 26), new TimeOnly(14, 59), DateTimeKind.Utc)), + new("The Rising", [new(5015), new(5016)], AtDailyReset(new(2024, 9, 11))), ]; private readonly QuestData _questData; @@ -47,6 +46,11 @@ internal sealed class EventInfoComponent _pluginInterface = pluginInterface; } + private static DateTime AtDailyReset(DateOnly date) + { + return new DateTime(date, new TimeOnly(14, 59), DateTimeKind.Utc); + } + public bool ShouldDraw => _configuration.General.ShowIncompleteSeasonalEvents && _eventQuests.Any(IsIncomplete); public void Draw() @@ -75,10 +79,10 @@ internal sealed class EventInfoComponent width -= ImGui.CalcTextSize(FontAwesomeIcon.Check.ToIconString()).X; List startableQuests = eventQuest.QuestIds.Where(x => - _questRegistry.IsKnownQuest(x) && - _questFunctions.IsReadyToAcceptQuest(x) && - x != _questController.StartedQuest?.Quest.Id && - x != _questController.NextQuest?.Quest.Id) + _questRegistry.IsKnownQuest(x) && + _questFunctions.IsReadyToAcceptQuest(x) && + x != _questController.StartedQuest?.Quest.Id && + x != _questController.NextQuest?.Quest.Id) .ToList(); if (startableQuests.Count == 0) width = 0; From fe1d2d51dbb875e08d306f37c2b40f82a2982130 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Tue, 27 Aug 2024 22:16:04 +0200 Subject: [PATCH 29/69] Mark completed daily quests as unable to accept --- Questionable/Functions/QuestFunctions.cs | 3 +++ .../QuestComponents/CreationUtilsComponent.cs | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/Questionable/Functions/QuestFunctions.cs b/Questionable/Functions/QuestFunctions.cs index 15a2dec1..4bfdce00 100644 --- a/Questionable/Functions/QuestFunctions.cs +++ b/Questionable/Functions/QuestFunctions.cs @@ -360,6 +360,9 @@ internal sealed unsafe class QuestFunctions { if (IsQuestAccepted(questId)) return false; + + if (QuestManager.Instance()->IsDailyQuestCompleted(questId.Value)) + return false; } else { diff --git a/Questionable/Windows/QuestComponents/CreationUtilsComponent.cs b/Questionable/Windows/QuestComponents/CreationUtilsComponent.cs index 33fa831c..ab73c25d 100644 --- a/Questionable/Windows/QuestComponents/CreationUtilsComponent.cs +++ b/Questionable/Windows/QuestComponents/CreationUtilsComponent.cs @@ -110,6 +110,18 @@ internal sealed class CreationUtilsComponent } #endif +#if false + var questManager = QuestManager.Instance(); + if (questManager != null) + { + for (int i = 0; i < questManager->DailyQuests.Length; ++i) + { + var dailyQuest = questManager->DailyQuests[i]; + ImGui.Text($"Daily Quest {i}: {dailyQuest.QuestId}, {dailyQuest.IsCompleted}"); + } + } +#endif + #if false var director = UIState.Instance()->DirectorTodo.Director; if (director != null) From 3d7b152cd1665b24d18290cd09fde95bc1a94841 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Tue, 27 Aug 2024 22:45:31 +0200 Subject: [PATCH 30/69] Change some teleports in 'World of Wonders' --- .../Gold Saucer/435_World of Wonders.json | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/435_World of Wonders.json b/QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/435_World of Wonders.json index 71199ea0..7831f300 100644 --- a/QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/435_World of Wonders.json +++ b/QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/435_World of Wonders.json @@ -1,6 +1,9 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": ["liza", "JerryWester"], + "Author": [ + "liza", + "JerryWester" + ], "QuestSequence": [ { "Sequence": 0, @@ -95,14 +98,19 @@ "AethernetShard": "[Gold Saucer] Chocobo Square" }, { - "TerritoryId": 144, - "InteractionType": "AttuneAetheryte", - "Aetheryte": "Gold Saucer", + "TerritoryId": 388, + "InteractionType": "None", "AethernetShortcut": [ "[Gold Saucer] Chocobo Square", "[Gold Saucer] Entrance & Card Squares" ] }, + { + "TerritoryId": 144, + "InteractionType": "AttuneAetheryte", + "Aetheryte": "Gold Saucer", + "DelaySecondsAtStart": 3 + }, { "DataId": 1011080, "Position": { @@ -156,7 +164,8 @@ { "TerritoryId": 144, "InteractionType": "AttuneAethernetShard", - "AethernetShard": "[Gold Saucer] Event Square" + "AethernetShard": "[Gold Saucer] Event Square", + "DelaySecondsAtStart": 3 }, { "Position": { @@ -198,6 +207,14 @@ { "Sequence": 6, "Steps": [ + { + "TerritoryId": 144, + "InteractionType": "None", + "AethernetShortcut": [ + "[Gold Saucer] Cactpot Board", + "[Gold Saucer] Aetheryte Plaza" + ] + }, { "DataId": 1011084, "Position": { @@ -207,10 +224,7 @@ }, "TerritoryId": 144, "InteractionType": "Interact", - "AethernetShortcut": [ - "[Gold Saucer] Cactpot Board", - "[Gold Saucer] Aetheryte Plaza" - ] + "DelaySecondsAtStart": 3 } ] }, @@ -222,6 +236,14 @@ "InteractionType": "AttuneAethernetShard", "AethernetShard": "[Gold Saucer] Round Square" }, + { + "TerritoryId": 144, + "InteractionType": "None", + "AethernetShortcut": [ + "[Gold Saucer] Round Square", + "[Gold Saucer] Entrance & Card Squares" + ] + }, { "DataId": 1010448, "Position": { @@ -232,10 +254,7 @@ "StopDistance": 5, "TerritoryId": 144, "InteractionType": "CompleteQuest", - "AethernetShortcut": [ - "[Gold Saucer] Round Square", - "[Gold Saucer] Entrance & Card Squares" - ] + "DelaySecondsAtStart": 3 } ] } From 90b04677423b96455ff72c4d2933018bfde0b81b Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Tue, 27 Aug 2024 22:52:15 +0200 Subject: [PATCH 31/69] Minor gathering path adjustments --- .../6.x - Endwalker/Ultima Thule/909__MIN.json | 16 ++++++++++++---- .../6.x - Endwalker/Ultima Thule/912__BTN.json | 14 ++++++++++---- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/GatheringPaths/6.x - Endwalker/Ultima Thule/909__MIN.json b/GatheringPaths/6.x - Endwalker/Ultima Thule/909__MIN.json index 8343042a..9d3da596 100644 --- a/GatheringPaths/6.x - Endwalker/Ultima Thule/909__MIN.json +++ b/GatheringPaths/6.x - Endwalker/Ultima Thule/909__MIN.json @@ -19,7 +19,11 @@ "X": -586.0029, "Y": 84.39367, "Z": 568.1448 - } + }, + "MinimumAngle": -60, + "MaximumAngle": 75, + "MinimumDistance": 1, + "MaximumDistance": 3 } ] } @@ -35,7 +39,9 @@ "X": -578.2748, "Y": 86.34826, "Z": 567.2876 - } + }, + "MinimumAngle": -80, + "MaximumAngle": 60 } ] } @@ -51,11 +57,13 @@ "X": -600.2446, "Y": 86.01588, "Z": 557.4477 - } + }, + "MinimumAngle": -35, + "MaximumAngle": 145 } ] } ] } ] -} +} \ No newline at end of file diff --git a/GatheringPaths/6.x - Endwalker/Ultima Thule/912__BTN.json b/GatheringPaths/6.x - Endwalker/Ultima Thule/912__BTN.json index 0f22e432..1955433b 100644 --- a/GatheringPaths/6.x - Endwalker/Ultima Thule/912__BTN.json +++ b/GatheringPaths/6.x - Endwalker/Ultima Thule/912__BTN.json @@ -19,7 +19,9 @@ "X": 27.77994, "Y": 73.57088, "Z": 695.2364 - } + }, + "MinimumAngle": 0, + "MaximumAngle": 135 } ] } @@ -35,7 +37,9 @@ "X": 23.20134, "Y": 70.90392, "Z": 698.6194 - } + }, + "MinimumAngle": -10, + "MaximumAngle": 145 } ] } @@ -51,11 +55,13 @@ "X": 30.69294, "Y": 75.43362, "Z": 688.8371 - } + }, + "MinimumAngle": -5, + "MaximumAngle": 120 } ] } ] } ] -} +} \ No newline at end of file From 218dbd8febee62616d99abb76a99f2b351cfa1dd Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Tue, 27 Aug 2024 23:40:22 +0200 Subject: [PATCH 32/69] Daily quest update --- Directory.Build.targets | 2 +- .../Dwarves/Dailies/3925_Fast and Loud.json | 20 +++++- .../Qitari/Dailies/3829_Eggspotting.json | 56 ++++++++++++++-- .../Dailies/3830_Safety Is No Accident.json | 14 ++-- ...Fish, Two Fish, Bread Fish, Stew Fish.json | 14 ++-- .../4710_Clean Paws Make Good Artists.json | 23 ++++++- .../4630_Reclaiming the Taste of Home.json | 65 ++++++++++++++++++- .../Dailies/4632_Checking for Cavities.json | 41 +++++++++++- .../Steps/Shared/GatheringRequiredItems.cs | 1 + Questionable/Windows/QuestSelectionWindow.cs | 4 +- 10 files changed, 214 insertions(+), 26 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 8fe0a236..d7818760 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,5 +1,5 @@ - 2.16 + 2.17 diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Dwarves/Dailies/3925_Fast and Loud.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Dwarves/Dailies/3925_Fast and Loud.json index d73c93ee..f11fc566 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Dwarves/Dailies/3925_Fast and Loud.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Dwarves/Dailies/3925_Fast and Loud.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, @@ -30,13 +29,28 @@ { "Sequence": 1, "Steps": [ - - + { + "DataId": 1034071, + "Position": { + "X": -171.4046, + "Y": 5.779212, + "Z": -110.27698 + }, + "TerritoryId": 813, + "InteractionType": "Interact", + "Fly": true + } ] }, { "Sequence": 255, "Steps": [ + { + "TerritoryId": 813, + "InteractionType": "Craft", + "ItemId": 31179, + "ItemCount": 3 + }, { "Position": { "X": -615.73865, diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3829_Eggspotting.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3829_Eggspotting.json index 5b359ba6..6fc790bd 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3829_Eggspotting.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3829_Eggspotting.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, @@ -18,6 +17,54 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1032830, + "Position": { + "X": -134.02002, + "Y": -18.460577, + "Z": 303.5476 + }, + "TerritoryId": 817, + "InteractionType": "Interact", + "AetheryteShortcut": "Rak'tika - Slitherbough" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1032831, + "Position": { + "X": -54.795166, + "Y": 0.7328947, + "Z": 217.09009 + }, + "TerritoryId": 817, + "InteractionType": "UseItem", + "ItemId": 2002980, + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1032830, + "Position": { + "X": -134.02002, + "Y": -18.460577, + "Z": 303.5476 + }, + "TerritoryId": 817, + "InteractionType": "Interact" + } + ] + }, { "Sequence": 255, "Steps": [ @@ -30,12 +77,7 @@ "TerritoryId": 817, "InteractionType": "WalkTo", "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ - - - - ] + "Fly": true }, { "DataId": 1032643, 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 5b359ba6..deded4f5 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 @@ -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, @@ -32,9 +31,16 @@ "AetheryteShortcut": "Rak'tika - Fanow", "Fly": true, "RequiredGatheredItems": [ - - - + { + "QuestAcceptedAsClass": "Miner", + "ItemId": 29535, + "ItemCount": 3 + }, + { + "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 5b359ba6..17c44e90 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 @@ -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, @@ -32,9 +31,16 @@ "AetheryteShortcut": "Rak'tika - Fanow", "Fly": true, "RequiredGatheredItems": [ - - - + { + "QuestAcceptedAsClass": "Miner", + "ItemId": 29536, + "ItemCount": 3 + }, + { + "QuestAcceptedAsClass": "Botanist", + "ItemId": 29562, + "ItemCount": 3 + } ] }, { diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4710_Clean Paws Make Good Artists.json b/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4710_Clean Paws Make Good Artists.json index d731dcbc..4bd89209 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4710_Clean Paws Make Good Artists.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4710_Clean Paws Make Good Artists.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, @@ -30,11 +29,29 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1044610, + "Position": { + "X": 588.281, + "Y": -161.13907, + "Z": -761.0742 + }, + "TerritoryId": 959, + "InteractionType": "Interact", + "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow", + "Fly": true + } ] }, { "Sequence": 255, "Steps": [ + { + "TerritoryId": 959, + "InteractionType": "Craft", + "ItemId": 38885, + "ItemCount": 1 + }, { "Position": { "X": -201.42024, @@ -42,7 +59,9 @@ "Z": -273.68756 }, "TerritoryId": 959, - "InteractionType": "WalkTo" + "InteractionType": "WalkTo", + "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow", + "Fly": true }, { "DataId": 1044403, 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 368803c3..91ba26b4 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 @@ -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, @@ -18,9 +17,73 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2013074, + "Position": { + "X": 304.3412, + "Y": 483.48206, + "Z": 143.11438 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "TargetTerritoryId": 1073 + }, + { + "DataId": 1044075, + "Position": { + "X": -64.4389, + "Y": 493.32922, + "Z": -4.409851 + }, + "TerritoryId": 1073, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1044075, + "Position": { + "X": -64.4389, + "Y": 493.32922, + "Z": -4.409851 + }, + "TerritoryId": 1073, + "InteractionType": "Interact", + "RequiredGatheredItems": [ + { + "QuestAcceptedAsClass": "Miner", + "ItemId": 38296, + "ItemCount": 3 + }, + { + "QuestAcceptedAsClass": "Botanist", + "ItemId": 38320, + "ItemCount": 3 + } + ] + } + ] + }, { "Sequence": 255, "Steps": [ + { + "DataId": 1043421, + "Position": { + "X": 2.4261475, + "Y": 499.87805, + "Z": 46.036377 + }, + "TerritoryId": 1073, + "InteractionType": "Interact", + "TargetTerritoryId": 960 + }, { "DataId": 1043417, "Position": { 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 368803c3..fdec020c 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 @@ -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, @@ -18,9 +17,49 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1044081, + "Position": { + "X": -503.99023, + "Y": 74.16917, + "Z": 261.82947 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "AetheryteShortcut": "Ultima Thule - Reah Tahra", + "RequiredGatheredItems": [ + { + "QuestAcceptedAsClass": "Miner", + "ItemId": 38299, + "ItemCount": 3 + }, + { + "QuestAcceptedAsClass": "Botanist", + "ItemId": 38323, + "ItemCount": 3 + } + ] + } + ] + }, { "Sequence": 255, "Steps": [ + { + "DataId": 2013072, + "Position": { + "X": 456.65674, + "Y": 438.04077, + "Z": 310.2312 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "TargetTerritoryId": 960, + "AetheryteShortcut": "Ultima Thule - Base Omicron" + }, { "DataId": 1043417, "Position": { diff --git a/Questionable/Controller/Steps/Shared/GatheringRequiredItems.cs b/Questionable/Controller/Steps/Shared/GatheringRequiredItems.cs index 6e821e6a..b500046b 100644 --- a/Questionable/Controller/Steps/Shared/GatheringRequiredItems.cs +++ b/Questionable/Controller/Steps/Shared/GatheringRequiredItems.cs @@ -82,6 +82,7 @@ internal static class GatheringRequiredItems "Wait(navmesh ready)"); yield return CreateStartGatheringTask(gatheringPointId, requiredGatheredItems); + yield return new WaitAtEnd.WaitDelay(); } } diff --git a/Questionable/Windows/QuestSelectionWindow.cs b/Questionable/Windows/QuestSelectionWindow.cs index ba9b5ee1..a53b79e9 100644 --- a/Questionable/Windows/QuestSelectionWindow.cs +++ b/Questionable/Windows/QuestSelectionWindow.cs @@ -226,9 +226,7 @@ internal sealed class QuestSelectionWindow : LWindow if (knownQuest != null && knownQuest.FindSequence(0)?.LastStep()?.InteractionType is EInteractionType.AcceptQuest or EInteractionType.AcceptLeve && - !_questFunctions.IsQuestAccepted(quest.QuestId) && - !_questFunctions.IsQuestLocked(quest.QuestId) && - (quest.IsRepeatable || !_questFunctions.IsQuestAcceptedOrComplete(quest.QuestId))) + _questFunctions.IsReadyToAcceptQuest(quest.QuestId)) { ImGui.BeginDisabled(_questController.NextQuest != null || _questController.SimulatedQuest != null); From 916082ef35d5279d5ec543f4eef4522a61819970 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Wed, 28 Aug 2024 10:35:24 +0200 Subject: [PATCH 33/69] Add Rising dialogue/NextQuestId --- .../Rising (2024)/5015_Rising to the Call.json | 3 ++- .../5016_We Who Are About to Set Sail Salute You.json | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5015_Rising to the Call.json b/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5015_Rising to the Call.json index d85aa707..dc0b144b 100644 --- a/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5015_Rising to the Call.json +++ b/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5015_Rising to the Call.json @@ -179,7 +179,8 @@ "AethernetShortcut": [ "[Limsa Lominsa] Arcanists' Guild", "[Limsa Lominsa] The Aftcastle" - ] + ], + "NextQuestId": 5016 } ] } diff --git a/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5016_We Who Are About to Set Sail Salute You.json b/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5016_We Who Are About to Set Sail Salute You.json index 83300e64..3d92545a 100644 --- a/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5016_We Who Are About to Set Sail Salute You.json +++ b/QuestPaths/7.x - Dawntrail/Seasonal Events/Rising (2024)/5016_We Who Are About to Set Sail Salute You.json @@ -113,7 +113,14 @@ }, "StopDistance": 7, "TerritoryId": 128, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_FESANX002_05016_Q52_000_082", + "Yes": true + } + ] } ] } From 33774df23b518c61c9ab6db1109c7cf70b3617d7 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Wed, 28 Aug 2024 11:48:40 +0200 Subject: [PATCH 34/69] Daily quest updates --- .../Dailies/4705_Whisks for Whiskers.json | 22 ++++++- .../4706_Sets, Reps, and Loporrits.json | 37 +++++++++++- .../Dailies/4612_A Fertile Blend.json | 25 +++++++- .../Dailies/4613_The Hunger Pangs.json | 58 ++++++++++++++++++- 4 files changed, 136 insertions(+), 6 deletions(-) diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4705_Whisks for Whiskers.json b/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4705_Whisks for Whiskers.json index d731dcbc..8fc84f3e 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4705_Whisks for Whiskers.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4705_Whisks for Whiskers.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, @@ -30,11 +29,28 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1044592, + "Position": { + "X": -493.40048, + "Y": -158.89024, + "Z": -384.29846 + }, + "TerritoryId": 959, + "InteractionType": "Interact", + "Fly": true + } ] }, { "Sequence": 255, "Steps": [ + { + "TerritoryId": 959, + "InteractionType": "Craft", + "ItemId": 38879, + "ItemCount": 2 + }, { "Position": { "X": -201.42024, @@ -42,7 +58,9 @@ "Z": -273.68756 }, "TerritoryId": 959, - "InteractionType": "WalkTo" + "InteractionType": "WalkTo", + "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow", + "Fly": true }, { "DataId": 1044403, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4706_Sets, Reps, and Loporrits.json b/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4706_Sets, Reps, and Loporrits.json index d731dcbc..343a44a3 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4706_Sets, Reps, and Loporrits.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Loporrits/Dailies/4706_Sets, Reps, and Loporrits.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, @@ -30,6 +29,38 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1044412, + "Position": { + "X": -181.56714, + "Y": -49.19972, + "Z": -304.76843 + }, + "TerritoryId": 959, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "TerritoryId": 959, + "InteractionType": "Craft", + "ItemId": 38881, + "ItemCount": 1 + }, + { + "DataId": 1044602, + "Position": { + "X": 463.0349, + "Y": -167.81126, + "Z": -490.13504 + }, + "TerritoryId": 959, + "InteractionType": "Interact", + "Fly": true + } ] }, { @@ -42,7 +73,9 @@ "Z": -273.68756 }, "TerritoryId": 959, - "InteractionType": "WalkTo" + "InteractionType": "WalkTo", + "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow", + "Fly": true }, { "DataId": 1044403, 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 368803c3..298df76d 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 @@ -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, @@ -21,6 +20,30 @@ { "Sequence": 255, "Steps": [ + { + "DataId": 2013072, + "Position": { + "X": 456.65674, + "Y": 438.04077, + "Z": 310.2312 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "TargetTerritoryId": 960, + "AetheryteShortcut": "Ultima Thule - Base Omicron", + "RequiredGatheredItems": [ + { + "QuestAcceptedAsClass": "Miner", + "ItemId": 38283, + "ItemCount": 3 + }, + { + "QuestAcceptedAsClass": "Botanist", + "ItemId": 38307, + "ItemCount": 3 + } + ] + }, { "DataId": 1043417, "Position": { diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4613_The Hunger Pangs.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4613_The Hunger Pangs.json index 368803c3..e8779c33 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4613_The Hunger Pangs.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4613_The Hunger Pangs.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, @@ -18,9 +17,66 @@ } ] }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1044048, + "Position": { + "X": -347.70734, + "Y": 263.0844, + "Z": -463.73694 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "AetheryteShortcut": "Ultima Thule - Abode of the Ea", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1044049, + "Position": { + "X": -376.21124, + "Y": 266.08542, + "Z": -551.90356 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, { "Sequence": 255, "Steps": [ + { + + "DataId": 2013072, + "Position": { + "X": 456.65674, + "Y": 438.04077, + "Z": 310.2312 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "TargetTerritoryId": 960, + "AetheryteShortcut": "Ultima Thule - Base Omicron" + }, { "DataId": 1043417, "Position": { From c95a80de34cc97a7ddd0e8b74efc73f05e1697ea Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Wed, 28 Aug 2024 22:09:38 +0800 Subject: [PATCH 35/69] Added Ananta story quest 'Griffins Rampant' --- .../Ananta/Story/3037_Griffins Rampant.json | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Story/3037_Griffins Rampant.json diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Story/3037_Griffins Rampant.json b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Story/3037_Griffins Rampant.json new file mode 100644 index 00000000..aa55efd9 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Story/3037_Griffins Rampant.json @@ -0,0 +1,159 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "plogon_enjoyer", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1024771, + "Position": { + "X": 12.008789, + "Y": 55.97821, + "Z": 237.96448 + }, + "TerritoryId": 612, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1024896, + "Position": { + "X": -630.2129, + "Y": 130.26343, + "Z": -452.20117 + }, + "TerritoryId": 612, + "InteractionType": "Interact", + "AetheryteShortcut": "Fringes - Castrum Oriens", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1024897, + "Position": { + "X": -76.40198, + "Y": -5.32758e-12, + "Z": -48.233826 + }, + "TerritoryId": 635, + "InteractionType": "Interact", + "Mount": true, + "AetheryteShortcut": "Rhalgr's Reach", + "AethernetShortcut": [ + "[Rhalgr's Reach] Aetheryte Plaza", + "[Rhalgr's Reach] Western Rhalgr's Reach" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1024952, + "Position": { + "X": 12.008789, + "Y": 55.97821, + "Z": 237.96448 + }, + "TerritoryId": 612, + "InteractionType": "Interact", + "AetheryteShortcut": "Fringes - Peering Stones", + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1024900, + "Position": { + "X": -50.980408, + "Y": 56.02146, + "Z": 218.46338 + }, + "TerritoryId": 612, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1024901, + "Position": { + "X": -80.52191, + "Y": 56.021286, + "Z": 231.40308 + }, + "TerritoryId": 612, + "InteractionType": "Action", + "Action": "Buffet (Griffin)", + "Fly": true + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 1024901, + "Position": { + "X": -80.52191, + "Y": 56.021286, + "Z": 231.40308 + }, + "TerritoryId": 612, + "InteractionType": "Action", + "Action": "Buffet (Griffin)", + "Fly": true + } + ] + }, + { + "Sequence": 7, + "Steps": [ + { + "DataId": 1024901, + "Position": { + "X": -80.52191, + "Y": 56.021286, + "Z": 231.40308 + }, + "TerritoryId": 612, + "InteractionType": "Action", + "Action": "Buffet (Griffin)", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1024901, + "Position": { + "X": -80.52191, + "Y": 56.021286, + "Z": 231.40308 + }, + "TerritoryId": 612, + "InteractionType": "CompleteQuest", + "Mount": false + } + ] + } + ] +} From 1112af873f4a829d2f1c1839b6a87b7cdef5aba7 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Wed, 28 Aug 2024 22:09:59 +0800 Subject: [PATCH 36/69] Added Ananta daily quest 'A Signal for the Senses' --- .../Dailies/3050_A Signal for the Senses.json | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3050_A Signal for the Senses.json b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3050_A Signal for the Senses.json index 2ff0c260..da21fa33 100644 --- a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3050_A Signal for the Senses.json +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3050_A Signal for the Senses.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, @@ -22,7 +21,35 @@ { "Sequence": 1, "Steps": [ - + { + "DataId": 2009341, + "Position": { + "X": 333.1808, + "Y": 61.17334, + "Z": -362.41705 + }, + "TerritoryId": 612, + "InteractionType": "UseItem", + "ItemId": 2002437, + "AetheryteShortcut": "Rhalgr's Reach", + "AethernetShortcut": [ + "[Rhalgr's Reach] Aetheryte Plaza", + "[Rhalgr's Reach] Fringes Gate" + ], + "Fly": true + }, + { + "DataId": 2009340, + "Position": { + "X": 90.01294, + "Y": 74.44873, + "Z": -566.03345 + }, + "TerritoryId": 612, + "InteractionType": "UseItem", + "ItemId": 2002437, + "Fly": true + } ] }, { @@ -36,6 +63,7 @@ }, "TerritoryId": 612, "InteractionType": "WalkTo", + "AetheryteShortcut": "Fringes - Peering Stones", "Fly": true }, { From 248a636de5439c0c65821a20b07a730c641ac556 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Wed, 28 Aug 2024 22:10:10 +0800 Subject: [PATCH 37/69] Added Ananta daily quest 'Criminal Crossing' --- .../Dailies/3051_Criminal Crossings.json | 90 ++++++++++++++++++- 1 file changed, 88 insertions(+), 2 deletions(-) diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3051_Criminal Crossings.json b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3051_Criminal Crossings.json index 2ff0c260..cbd8ff8a 100644 --- a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3051_Criminal Crossings.json +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3051_Criminal Crossings.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, @@ -22,7 +21,94 @@ { "Sequence": 1, "Steps": [ - + { + "DataId": 1025062, + "Position": { + "X": -345.7237, + "Y": 43.09622, + "Z": 177.84387 + }, + "TerritoryId": 612, + "InteractionType": "Combat", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANANA402_03051_Q1_000_000", + "Answer": "TEXT_BANANA402_03051_A1_000_002" + } + ], + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [8587] + }, + { + "DataId": 1025061, + "Position": { + "X": -488.18192, + "Y": 81.128265, + "Z": -191.33289 + }, + "TerritoryId": 612, + "InteractionType": "Combat", + "SkipConditions": { + "StepIf": { + "NotTargetable": true + } + }, + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANANA402_03051_Q1_000_000", + "Answer": "TEXT_BANANA402_03051_A1_000_002" + } + ], + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [8586], + "$": "This NPC will become an enemy" + }, + { + "DataId": 1025119, + "Position": { + "X": -488.18192, + "Y": 81.128265, + "Z": -191.33289 + }, + "TerritoryId": 612, + "InteractionType": "Interact", + "SkipConditions": { + "StepIf": { + "NotTargetable": true + } + }, + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANANA402_03051_Q1_000_000", + "Answer": "TEXT_BANANA402_03051_A1_000_001" + } + ], + "$": "This NPC will not become an enemy" + }, + { + "DataId": 1025118, + "Position": { + "X": -572.96106, + "Y": 112.436066, + "Z": -229.29736 + }, + "TerritoryId": 612, + "InteractionType": "Interact", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_BANANA402_03051_Q1_000_000", + "Answer": "TEXT_BANANA402_03051_A1_000_001" + } + ] + } ] }, { From f3082d8636b49ae1eedce933de88897eb7733680 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Wed, 28 Aug 2024 22:10:22 +0800 Subject: [PATCH 38/69] Added Ananta daily quest 'When Feathers Fly' --- .../Dailies/3052_When Feathers Fly.json | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3052_When Feathers Fly.json b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3052_When Feathers Fly.json index 2ff0c260..294d2fbe 100644 --- a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3052_When Feathers Fly.json +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3052_When Feathers Fly.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, @@ -22,7 +21,30 @@ { "Sequence": 1, "Steps": [ - + { + "DataId": 1025063, + "Position": { + "X": 291.73718, + "Y": 73.622604, + "Z": -496.87955 + }, + "TerritoryId": 612, + "InteractionType": "Emote", + "Emote": "soothe", + "Fly": true + }, + { + "DataId": 1025065, + "Position": { + "X": -73.04492, + "Y": 62.044453, + "Z": -878.78235 + }, + "TerritoryId": 612, + "InteractionType": "Emote", + "Emote": "rally", + "Fly": true + } ] }, { From 7d622c4d128d63a4504e6cb6946e53068a596c53 Mon Sep 17 00:00:00 2001 From: Fifi Date: Fri, 23 Aug 2024 15:08:21 +0900 Subject: [PATCH 39/69] shb phys role quests --- .../Physical/3273_No Greater Sport.json | 120 +++++++++++++++ .../Physical/3274_Vengeance in Defeat.json | 119 +++++++++++++++ .../Physical/3275_Freedom from Privilege.json | 140 ++++++++++++++++++ .../Physical/3276_The Hunter's Legacy.json | 83 +++++++++++ .../Physical/3277_Fellowship Restored.json | 118 +++++++++++++++ .../Physical/3278_Courage Born of Fear.json | 122 +++++++++++++++ 6 files changed, 702 insertions(+) create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3273_No Greater Sport.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3274_Vengeance in Defeat.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3275_Freedom from Privilege.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3276_The Hunter's Legacy.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3277_Fellowship Restored.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3278_Courage Born of Fear.json diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3273_No Greater Sport.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3273_No Greater Sport.json new file mode 100644 index 00000000..12fd2520 --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3273_No Greater Sport.json @@ -0,0 +1,120 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Fifi", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1030126, + "Position": { + "X": -18.143005, + "Y": 3.9998174, + "Z": 235.40088 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1030127, + "Position": { + "X": 200.12195, + "Y": -0.39141315, + "Z": 389.45593 + }, + "TerritoryId": 813, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Crystarium] The Pendants", + "[Crystarium] Tessellation (Lakeland)" + ], + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2010396, + "Position": { + "X": 195.48328, + "Y": -0.7477417, + "Z": 370.93152 + }, + "TerritoryId": 813, + "InteractionType": "UseItem", + "ItemId": 2002718 + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2010397, + "Position": { + "X": 203.90625, + "Y": -0.5340576, + "Z": 389.82214 + }, + "TerritoryId": 813, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [10872] + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1031013, + "Position": { + "X": 200.09155, + "Y": -0.39049676, + "Z": 389.4254 + }, + "TerritoryId": 813, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1030964, + "Position": { + "X": -18.143005, + "Y": 3.9998174, + "Z": 235.40088 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "NextQuestId": 3274, + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ] + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3274_Vengeance in Defeat.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3274_Vengeance in Defeat.json new file mode 100644 index 00000000..b99fbbff --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3274_Vengeance in Defeat.json @@ -0,0 +1,119 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Fifi", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1030964, + "Position": { + "X": -18.143005, + "Y": 3.9998174, + "Z": 235.40088 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1030130, + "Position": { + "X": 469.0775, + "Y": -32.782784, + "Z": -288.44135 + }, + "TerritoryId": 815, + "InteractionType": "Interact", + "AetheryteShortcut": "Amh Araeng - Mord Souq", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2010399, + "Position": { + "X": 613.39734, + "Y": -33.585205, + "Z": -180.95679 + }, + "TerritoryId": 815, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2010400, + "Position": { + "X": 536.9192, + "Y": -33.737732, + "Z": 38.83423 + }, + "TerritoryId": 815, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [10873], + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 2010401, + "Position": { + "X": 469.0775, + "Y": -32.791687, + "Z": -288.44135 + }, + "TerritoryId": 815, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1030964, + "Position": { + "X": -18.143005, + "Y": 3.9998174, + "Z": 235.40088 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "NextQuestId": 3275, + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ] + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3275_Freedom from Privilege.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3275_Freedom from Privilege.json new file mode 100644 index 00000000..8ee624bf --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3275_Freedom from Privilege.json @@ -0,0 +1,140 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Fifi", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1030964, + "Position": { + "X": -18.143005, + "Y": 3.9998174, + "Z": 235.40088 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1030135, + "Position": { + "X": -251.42291, + "Y": 22.19962, + "Z": 325.7953 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "AetheryteShortcut": "Kholusia - Wright", + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2010402, + "Position": { + "X": -550.7744, + "Y": 29.160034, + "Z": 363.4851 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 2010403, + "Position": { + "X": -550.98804, + "Y": 41.33667, + "Z": 252.24683 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1030136, + "Position": { + "X": -192.58417, + "Y": 26.771265, + "Z": 248.46265 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1030140, + "Position": { + "X": 67.64319, + "Y": 82.001656, + "Z": -53.330322 + }, + "TerritoryId": 820, + "InteractionType": "Interact", + "AetheryteShortcut": "Eulmore" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1030964, + "Position": { + "X": -18.143005, + "Y": 3.9998174, + "Z": 235.40088 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ], + "NextQuestId": 3276, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_LUCKBA321_03275_Q1_000_000", + "Answer": "TEXT_LUCKBA321_03275_A1_000_001" + } + ] + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3276_The Hunter's Legacy.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3276_The Hunter's Legacy.json new file mode 100644 index 00000000..011fde1c --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3276_The Hunter's Legacy.json @@ -0,0 +1,83 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Fifi", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1030964, + "Position": { + "X": -18.143005, + "Y": 3.9998174, + "Z": 235.40088 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1030144, + "Position": { + "X": 94.68213, + "Y": 37.377014, + "Z": 611.1085 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "Fly": true, + "AetheryteShortcut": "Kholusia - Wright" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1030146, + "Position": { + "X": -190.1427, + "Y": 12.748831, + "Z": 591.6686 + }, + "TerritoryId": 817, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Rak'tika - Slitherbough", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1030144, + "Position": { + "X": 94.68213, + "Y": 37.377014, + "Z": 611.1085 + }, + "TerritoryId": 814, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Kholusia - Wright", + "Fly": true, + "NextQuestId": 3277 + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3277_Fellowship Restored.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3277_Fellowship Restored.json new file mode 100644 index 00000000..4e825eae --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3277_Fellowship Restored.json @@ -0,0 +1,118 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Fifi", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1030145, + "Position": { + "X": 93.461426, + "Y": 37.43559, + "Z": 611.50525 + }, + "TerritoryId": 814, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Kholusia - Wright", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "Fly": true + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 2010405, + "Position": { + "X": -33.707214, + "Y": 3.982544, + "Z": 205.70679 + }, + "TerritoryId": 819, + "InteractionType": "Interact", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1027323, + "Position": { + "X": -42.893127, + "Y": 3.9998171, + "Z": 242.08435 + }, + "TerritoryId": 819, + "InteractionType": "Interact" + }, + { + "DataId": 1027238, + "Position": { + "X": -15.487976, + "Y": 3.9998171, + "Z": 215.3811 + }, + "TerritoryId": 819, + "InteractionType": "Interact" + }, + { + "DataId": 1030147, + "Position": { + "X": 0.59503174, + "Y": 3.9998174, + "Z": 209.27734 + }, + "TerritoryId": 819, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1030148, + "Position": { + "X": -246.57056, + "Y": 10.152376, + "Z": 678.21765 + }, + "TerritoryId": 817, + "InteractionType": "Interact", + "AetheryteShortcut": "Rak'tika - Slitherbough", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1030145, + "Position": { + "X": 93.461426, + "Y": 37.43559, + "Z": 611.50525 + }, + "TerritoryId": 814, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Kholusia - Wright", + "Fly": true, + "NextQuestId": 3278 + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3278_Courage Born of Fear.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3278_Courage Born of Fear.json new file mode 100644 index 00000000..342e2ade --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3278_Courage Born of Fear.json @@ -0,0 +1,122 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "Fifi", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1030144, + "Position": { + "X": 94.68213, + "Y": 37.377014, + "Z": 611.1085 + }, + "TerritoryId": 814, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Kholusia - Wright", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, + "Fly": true + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1027253, + "Position": { + "X": 17.502075, + "Y": 19.999794, + "Z": -190.41736 + }, + "TerritoryId": 819, + "InteractionType": "Interact", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Crystalline Mean" + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 2010406, + "Position": { + "X": -17.013855, + "Y": 4.470825, + "Z": 234.97363 + }, + "TerritoryId": 819, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Crystarium] The Crystalline Mean", + "[Crystarium] The Pendants" + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1030990, + "Position": { + "X": -246.57056, + "Y": 10.152376, + "Z": 678.21765 + }, + "TerritoryId": 817, + "InteractionType": "SinglePlayerDuty", + "AetheryteShortcut": "Rak'tika - Slitherbough", + "Fly": true + } + ] + }, + { "Sequence": 4, "Steps": [] }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1030145, + "Position": { + "X": 93.461426, + "Y": 37.43559, + "Z": 611.50525 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "Fly": true, + "AetheryteShortcut": "Kholusia - Wright" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1030964, + "Position": { + "X": -18.143005, + "Y": 3.9998174, + "Z": 235.40088 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ] + } + ] + } + ] +} From 1a9f870987946867c45afae8fc191f99edfeb089 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 29 Aug 2024 09:05:07 +0200 Subject: [PATCH 40/69] Fix pathing for first kholusia aether current --- .../MSQ/A2-Kholusia 1/3283_A Still Tide.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/QuestPaths/5.x - Shadowbringers/MSQ/A2-Kholusia 1/3283_A Still Tide.json b/QuestPaths/5.x - Shadowbringers/MSQ/A2-Kholusia 1/3283_A Still Tide.json index e5761913..d83e144c 100644 --- a/QuestPaths/5.x - Shadowbringers/MSQ/A2-Kholusia 1/3283_A Still Tide.json +++ b/QuestPaths/5.x - Shadowbringers/MSQ/A2-Kholusia 1/3283_A Still Tide.json @@ -23,9 +23,9 @@ "Steps": [ { "Position": { - "X": 643.7624, - "Y": 0.35477543, - "Z": 541.9913 + "X": 639.3296, + "Y": 0.52189386, + "Z": 533.5061 }, "TerritoryId": 814, "InteractionType": "WalkTo" From 6a01cd4f83ed68a00944c46f50f24a6604de6d71 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 29 Aug 2024 09:11:25 +0200 Subject: [PATCH 41/69] Adjust Open Arms, Closed Gate --- .../3284_Open Arms, Closed Gate.json | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/QuestPaths/5.x - Shadowbringers/MSQ/A2-Kholusia 1/3284_Open Arms, Closed Gate.json b/QuestPaths/5.x - Shadowbringers/MSQ/A2-Kholusia 1/3284_Open Arms, Closed Gate.json index ced10209..9bb25b11 100644 --- a/QuestPaths/5.x - Shadowbringers/MSQ/A2-Kholusia 1/3284_Open Arms, Closed Gate.json +++ b/QuestPaths/5.x - Shadowbringers/MSQ/A2-Kholusia 1/3284_Open Arms, Closed Gate.json @@ -35,6 +35,21 @@ }, { "Sequence": 2, + "Steps": [ + { + "Position": { + "X": 338.49463, + "Y": 31.93622, + "Z": 203.53125 + }, + "StopDistance": 1, + "TerritoryId": 814, + "InteractionType": "WalkTo" + } + ] + }, + { + "Sequence": 3, "Steps": [ { "Position": { @@ -48,8 +63,7 @@ "EnemySpawnType": "AutoOnEnterArea", "KillEnemyDataIds": [ 10859 - ], - "Comment": "TODO Either this step is incorrect OR the next one is missing" + ] } ] }, From c57395fbfd2981e270f8e7a34784a1b3cbe0749e Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 29 Aug 2024 09:20:51 +0200 Subject: [PATCH 42/69] Use fixed-size icons for validation issue button --- .../QuickAccessButtonsComponent.cs | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/Questionable/Windows/QuestComponents/QuickAccessButtonsComponent.cs b/Questionable/Windows/QuestComponents/QuickAccessButtonsComponent.cs index 6704b594..4860f687 100644 --- a/Questionable/Windows/QuestComponents/QuickAccessButtonsComponent.cs +++ b/Questionable/Windows/QuestComponents/QuickAccessButtonsComponent.cs @@ -7,6 +7,7 @@ using Dalamud.Interface.Colors; using Dalamud.Interface.Components; using Dalamud.Interface.Utility; using Dalamud.Interface.Utility.Raii; +using Dalamud.Plugin; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.UI.Agent; using ImGuiNET; @@ -28,6 +29,7 @@ internal sealed class QuickAccessButtonsComponent private readonly IClientState _clientState; private readonly ICondition _condition; private readonly ICommandManager _commandManager; + private readonly IDalamudPluginInterface _pluginInterface; public QuickAccessButtonsComponent( MovementController movementController, @@ -39,7 +41,8 @@ internal sealed class QuickAccessButtonsComponent JournalProgressWindow journalProgressWindow, IClientState clientState, ICondition condition, - ICommandManager commandManager) + ICommandManager commandManager, + IDalamudPluginInterface pluginInterface) { _movementController = movementController; _gameFunctions = gameFunctions; @@ -51,6 +54,7 @@ internal sealed class QuickAccessButtonsComponent _clientState = clientState; _condition = condition; _commandManager = commandManager; + _pluginInterface = pluginInterface; } public event EventHandler? Reload; @@ -109,12 +113,14 @@ internal sealed class QuickAccessButtonsComponent int partsToRender = errorCount == 0 || infoCount == 0 ? 1 : 2; using var id = ImRaii.PushId("validationissues"); - ImGui.PushFont(UiBuilder.IconFont); var icon1 = FontAwesomeIcon.TimesCircle; var icon2 = FontAwesomeIcon.InfoCircle; - Vector2 iconSize1 = errorCount > 0 ? ImGui.CalcTextSize(icon1.ToIconString()) : Vector2.Zero; - Vector2 iconSize2 = infoCount > 0 ? ImGui.CalcTextSize(icon2.ToIconString()) : Vector2.Zero; - ImGui.PopFont(); + Vector2 iconSize1, iconSize2; + using (var _ = _pluginInterface.UiBuilder.IconFontFixedWidthHandle.Push()) + { + iconSize1 = errorCount > 0 ? ImGui.CalcTextSize(icon1.ToIconString()) : Vector2.Zero; + iconSize2 = infoCount > 0 ? ImGui.CalcTextSize(icon2.ToIconString()) : Vector2.Zero; + } string text1 = errorCount > 0 ? errorCount.ToString(CultureInfo.InvariantCulture) : string.Empty; string text2 = infoCount > 0 ? infoCount.ToString(CultureInfo.InvariantCulture) : string.Empty; @@ -136,9 +142,11 @@ internal sealed class QuickAccessButtonsComponent cursor.Y + ImGui.GetStyle().FramePadding.Y); if (errorCount > 0) { - ImGui.PushFont(UiBuilder.IconFont); - dl.AddText(position, ImGui.GetColorU32(ImGuiColors.DalamudRed), icon1.ToIconString()); - ImGui.PopFont(); + using (var _ = _pluginInterface.UiBuilder.IconFontFixedWidthHandle.Push()) + { + dl.AddText(position, ImGui.GetColorU32(ImGuiColors.DalamudRed), icon1.ToIconString()); + } + position = position with { X = position.X + iconSize1.X + iconPadding }; // Draw the text on the window drawlist @@ -148,9 +156,11 @@ internal sealed class QuickAccessButtonsComponent if (infoCount > 0) { - ImGui.PushFont(UiBuilder.IconFont); - dl.AddText(position, ImGui.GetColorU32(ImGuiColors.ParsedBlue), icon2.ToIconString()); - ImGui.PopFont(); + using (var _ = _pluginInterface.UiBuilder.IconFontFixedWidthHandle.Push()) + { + dl.AddText(position, ImGui.GetColorU32(ImGuiColors.ParsedBlue), icon2.ToIconString()); + } + position = position with { X = position.X + iconSize2.X + iconPadding }; // Draw the text on the window drawlist From 977ac6d144a30c6925e95cd30ef848c83105841e Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 29 Aug 2024 09:59:09 +0200 Subject: [PATCH 43/69] Minor path updates --- .../Role Quests/Physical/3273_No Greater Sport.json | 1 + .../Role Quests/Physical/3277_Fellowship Restored.json | 1 + 2 files changed, 2 insertions(+) diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3273_No Greater Sport.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3273_No Greater Sport.json index 12fd2520..7d69c7c5 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3273_No Greater Sport.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3273_No Greater Sport.json @@ -90,6 +90,7 @@ "Y": -0.39049676, "Z": 389.4254 }, + "StopDistance": 5, "TerritoryId": 813, "InteractionType": "Interact" } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3277_Fellowship Restored.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3277_Fellowship Restored.json index 4e825eae..d020cd4c 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3277_Fellowship Restored.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Physical/3277_Fellowship Restored.json @@ -106,6 +106,7 @@ "Y": 37.43559, "Z": 611.50525 }, + "StopDistance": 1, "TerritoryId": 814, "InteractionType": "CompleteQuest", "AetheryteShortcut": "Kholusia - Wright", From ee20ab996b27168e18a6e58fc84e49a78adb8129 Mon Sep 17 00:00:00 2001 From: Plogon Enjoyer Date: Thu, 29 Aug 2024 18:11:30 +0800 Subject: [PATCH 44/69] Updated Author --- .../Ananta/Dailies/3050_A Signal for the Senses.json | 2 +- .../Ananta/Dailies/3051_Criminal Crossings.json | 2 +- .../Allied Societies/Ananta/Dailies/3052_When Feathers Fly.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3050_A Signal for the Senses.json b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3050_A Signal for the Senses.json index da21fa33..2c59b09b 100644 --- a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3050_A Signal for the Senses.json +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3050_A Signal for the Senses.json @@ -1,6 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "liza", + "Author": "plogon_enjoyer", "QuestSequence": [ { "Sequence": 0, diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3051_Criminal Crossings.json b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3051_Criminal Crossings.json index cbd8ff8a..2283a975 100644 --- a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3051_Criminal Crossings.json +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3051_Criminal Crossings.json @@ -1,6 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "liza", + "Author": "plogon_enjoyer", "QuestSequence": [ { "Sequence": 0, diff --git a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3052_When Feathers Fly.json b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3052_When Feathers Fly.json index 294d2fbe..85e5f32c 100644 --- a/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3052_When Feathers Fly.json +++ b/QuestPaths/4.x - Stormblood/Allied Societies/Ananta/Dailies/3052_When Feathers Fly.json @@ -1,6 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", - "Author": "liza", + "Author": "plogon_enjoyer", "QuestSequence": [ { "Sequence": 0, From e4b5ccec366a46b723774800817700b9530eb6ca Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 29 Aug 2024 15:45:16 +0200 Subject: [PATCH 45/69] Update movement logic to handle cases where you're stopped too far away --- .../2632_The Palace of Lost Souls.json | 6 +++-- .../Kurenai/2704_Fathoms Below.json | 3 ++- .../Kurenai/2705_A Part of Your World.json | 3 ++- .../Kurenai/2706_The Elixir of Life.json | 2 ++ .../2484_In Soroban We Trust.json | 3 ++- .../2486_In Darkness the Magatama Dreams.json | 3 ++- QuestPaths/quest-v1.json | 4 ++++ Questionable.Model/Questing/QuestStep.cs | 1 + Questionable/Controller/MovementController.cs | 2 +- .../Controller/Steps/Shared/MoveTo.cs | 24 ++++++++++++++++--- Questionable/Functions/GameFunctions.cs | 15 +++++------- 11 files changed, 47 insertions(+), 19 deletions(-) diff --git a/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2632_The Palace of Lost Souls.json b/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2632_The Palace of Lost Souls.json index 7425f2d3..fe72918a 100644 --- a/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2632_The Palace of Lost Souls.json +++ b/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2632_The Palace of Lost Souls.json @@ -50,7 +50,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "$": "Sui-no-Sato, NE inside" + "$": "Sui-no-Sato, NE inside", + "RestartNavigationIfCancelled": false }, { "Position": { @@ -122,7 +123,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "$": "Sui-no-Sato, NE outside" + "$": "Sui-no-Sato, NE outside", + "RestartNavigationIfCancelled": false }, { "DataId": 1023280, diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json index ef577617..75966772 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json @@ -23,7 +23,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "$": "Sui-no-Sato, NE outside" + "$": "Sui-no-Sato, NE outside", + "RestartNavigationIfCancelled": false }, { "DataId": 1023280, diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json index 834a2cc1..1fe63872 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json @@ -85,7 +85,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "$": "Sui-no-Sato, NE outside" + "$": "Sui-no-Sato, NE outside", + "RestartNavigationIfCancelled": false }, { "DataId": 1023280, diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json index fed711ae..738d856d 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json @@ -91,6 +91,7 @@ "TerritoryId": 613, "InteractionType": "WalkTo", "$": "Exile, outside", + "RestartNavigationIfCancelled": false, "Fly": true }, { @@ -164,6 +165,7 @@ "TerritoryId": 613, "InteractionType": "WalkTo", "$": "Sui-no-Sato, SW outside", + "RestartNavigationIfCancelled": false, "Fly": true }, { diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2484_In Soroban We Trust.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2484_In Soroban We Trust.json index b3a2e566..6664fb25 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2484_In Soroban We Trust.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2484_In Soroban We Trust.json @@ -49,7 +49,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "$": "Sui-no-Sato, NE outside" + "$": "Sui-no-Sato, NE outside", + "RestartNavigationIfCancelled": false }, { "DataId": 1019970, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2486_In Darkness the Magatama Dreams.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2486_In Darkness the Magatama Dreams.json index 9b97dfe0..933b8b9e 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2486_In Darkness the Magatama Dreams.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2486_In Darkness the Magatama Dreams.json @@ -28,7 +28,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "$": "Sui-no-Sato, NE inside" + "$": "Sui-no-Sato, NE inside", + "RestartNavigationIfCancelled": false }, { "DataId": 1019978, diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 93efd3c0..09e47075 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -92,6 +92,10 @@ "type": "boolean", "description": "Most interactions with objects are checked for a Y (height) difference of 2 in-game units. If set to true, the game won't attempt to get any closer if the height difference is larger than this." }, + "RestartNavigationIfCancelled": { + "type": "boolean", + "description": "For some specific loading screen transitions (e.g. when entering/leaving the water through the portals in the ruby sea), setting this to 'false' means it won't re-attempt to move to the portal after the loading animation" + }, "TerritoryId": { "type": "integer", "description": "The territory id associated with the location", diff --git a/Questionable.Model/Questing/QuestStep.cs b/Questionable.Model/Questing/QuestStep.cs index a09386bc..5a23e6e4 100644 --- a/Questionable.Model/Questing/QuestStep.cs +++ b/Questionable.Model/Questing/QuestStep.cs @@ -36,6 +36,7 @@ public sealed class QuestStep public bool? Land { get; set; } public bool? Sprint { get; set; } public bool? IgnoreDistanceToObject { get; set; } + public bool? RestartNavigationIfCancelled { get; set; } public string? Comment { get; set; } /// diff --git a/Questionable/Controller/MovementController.cs b/Questionable/Controller/MovementController.cs index 6809c9f1..676d51d0 100644 --- a/Questionable/Controller/MovementController.cs +++ b/Questionable/Controller/MovementController.cs @@ -151,7 +151,7 @@ internal sealed class MovementController : IDisposable if (IsPathRunning && Destination != null) { - if (_gameFunctions.IsLoadingScreenVisible(false)) + if (_gameFunctions.IsLoadingScreenVisible()) { _logger.LogInformation("Stopping movement, loading screen visible"); Stop(); diff --git a/Questionable/Controller/Steps/Shared/MoveTo.cs b/Questionable/Controller/Steps/Shared/MoveTo.cs index a24fb2f0..33192674 100644 --- a/Questionable/Controller/Steps/Shared/MoveTo.cs +++ b/Questionable/Controller/Steps/Shared/MoveTo.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Numerics; using Dalamud.Game.ClientState.Conditions; @@ -67,7 +68,7 @@ internal static class MoveTo public ITask Move(MoveParams moveParams) { return new MoveInternal(moveParams, movementController, gameFunctions, - loggerFactory.CreateLogger(), condition, dataManager); + loggerFactory.CreateLogger(), condition, clientState, dataManager); } public ITask Land() @@ -163,20 +164,24 @@ internal static class MoveTo private readonly MovementController _movementController; private readonly ILogger _logger; private readonly ICondition _condition; + private readonly IClientState _clientState; private readonly Action _startAction; private readonly Vector3 _destination; + private readonly MoveParams _moveParams; public MoveInternal(MoveParams moveParams, MovementController movementController, GameFunctions gameFunctions, ILogger logger, ICondition condition, + IClientState clientState, IDataManager dataManager) { _movementController = movementController; _logger = logger; _condition = condition; + _clientState = clientState; _cannotExecuteAtThisTime = dataManager.GetString(579, x => x.Text)!; _destination = moveParams.Destination; @@ -206,6 +211,8 @@ internal static class MoveTo ignoreDistanceToObject: moveParams.IgnoreDistanceToObject, land: moveParams.Land); } + + _moveParams = moveParams; } public bool Start() @@ -224,6 +231,15 @@ internal static class MoveTo if (movementStartedAt == DateTime.MaxValue || movementStartedAt.AddSeconds(2) >= DateTime.Now) return ETaskResult.StillRunning; + if (_moveParams.RestartNavigation && + Vector3.Distance(_clientState.LocalPlayer!.Position, _destination) > + (_moveParams.StopDistance ?? QuestStep.DefaultStopDistance) + 5f) + { + _logger.LogInformation("Looks like movement was interrupted, re-attempting to move"); + _startAction(); + return ETaskResult.StillRunning; + } + return ETaskResult.TaskComplete; } @@ -248,7 +264,8 @@ internal static class MoveTo bool Sprint = true, bool Fly = false, bool Land = false, - bool IgnoreDistanceToObject = false) + bool IgnoreDistanceToObject = false, + bool RestartNavigation = true) { public MoveParams(QuestStep step, Vector3 destination) : this(step.TerritoryId, @@ -259,7 +276,8 @@ internal static class MoveTo step.Sprint != false, step.Fly == true, step.Land == true, - step.IgnoreDistanceToObject == true) + step.IgnoreDistanceToObject == true, + step.RestartNavigationIfCancelled != false) { } } diff --git a/Questionable/Functions/GameFunctions.cs b/Questionable/Functions/GameFunctions.cs index 360e882d..51795705 100644 --- a/Questionable/Functions/GameFunctions.cs +++ b/Questionable/Functions/GameFunctions.cs @@ -398,7 +398,7 @@ internal sealed unsafe class GameFunctions if (!_clientState.IsLoggedIn || _clientState.LocalPlayer == null) return true; - if (IsLoadingScreenVisible(true)) + if (IsLoadingScreenVisible()) return true; if (_condition[ConditionFlag.Crafting]) @@ -438,19 +438,16 @@ internal sealed unsafe class GameFunctions flags.Contains(ConditionFlag.OccupiedInQuestEvent); } - public bool IsLoadingScreenVisible(bool all) + public bool IsLoadingScreenVisible() { if (_gameGui.TryGetAddonByName("FadeMiddle", out AtkUnitBase* fade) && LAddon.IsAddonReady(fade) && fade->IsVisible) return true; - if (all) - { - if (_gameGui.TryGetAddonByName("FadeBack", out fade) && LAddon.IsAddonReady(fade) && fade->IsVisible) - return true; + if (_gameGui.TryGetAddonByName("FadeBack", out fade) && LAddon.IsAddonReady(fade) && fade->IsVisible) + return true; - if (_gameGui.TryGetAddonByName("NowLoading", out fade) && LAddon.IsAddonReady(fade) && fade->IsVisible) - return true; - } + if (_gameGui.TryGetAddonByName("NowLoading", out fade) && LAddon.IsAddonReady(fade) && fade->IsVisible) + return true; return false; } From 34e1f62ea99ca47f438d1a9687bcaae9d7ddaf48 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 29 Aug 2024 16:29:21 +0200 Subject: [PATCH 46/69] Add Cure II as action --- QuestPaths/quest-v1.json | 1 + Questionable.Model/Questing/Converter/ActionConverter.cs | 1 + Questionable.Model/Questing/EAction.cs | 1 + 3 files changed, 3 insertions(+) diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 09e47075..c7ebd5fa 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -856,6 +856,7 @@ "Heavy Swing", "Heavy Shot", "Cure", + "Cure II", "Esuna", "Physick", "Buffet (Sanuwa)", diff --git a/Questionable.Model/Questing/Converter/ActionConverter.cs b/Questionable.Model/Questing/Converter/ActionConverter.cs index 42e6e384..5c6bea0a 100644 --- a/Questionable.Model/Questing/Converter/ActionConverter.cs +++ b/Questionable.Model/Questing/Converter/ActionConverter.cs @@ -10,6 +10,7 @@ public sealed class ActionConverter() : EnumConverter(Values) { EAction.HeavySwing, "Heavy Swing" }, { EAction.HeavyShot, "Heavy Shot" }, { EAction.Cure, "Cure" }, + { EAction.Cure2, "Cure II" }, { EAction.Esuna, "Esuna" }, { EAction.Physick, "Physick" }, { EAction.BuffetSanuwa, "Buffet (Sanuwa)" }, diff --git a/Questionable.Model/Questing/EAction.cs b/Questionable.Model/Questing/EAction.cs index 15e7f842..5ca20daf 100644 --- a/Questionable.Model/Questing/EAction.cs +++ b/Questionable.Model/Questing/EAction.cs @@ -9,6 +9,7 @@ public enum EAction HeavySwing = 31, HeavyShot = 97, Cure = 120, + Cure2 = 135, Esuna = 7568, Physick = 190, BuffetSanuwa = 4931, From 4ecff4a43335802d982faf6c61bf25329e48341f Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 29 Aug 2024 16:55:04 +0200 Subject: [PATCH 47/69] Minor WHM quest adjustments --- .../WHM/1719_Taint Misbehaving.json | 40 +++++++++++-- .../WHM/1720_A Journey of Purification.json | 3 +- .../1721_The Girl with the Dragon Tissue.json | 59 ++++++++++++------- .../WHM/1722_The Dark Blight Writhes.json | 16 ++++- .../WHM/1723_In the Wake of Death.json | 10 +++- .../WHM/1725_Hands of Healing.json | 5 +- .../WHM/2414_Unease in East End.json | 6 +- .../WHM/2415_An Aura for Trouble.json | 7 ++- .../WHM/2416_A Beacon for Bad Things.json | 12 ++-- .../WHM/2417_The Problem with Padjals.json | 16 ++++- .../WHM/2418_What She Always Wanted.json | 13 +++- 11 files changed, 144 insertions(+), 43 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json index 8715345a..fe8075f0 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json @@ -96,7 +96,15 @@ }, "TerritoryId": 154, "InteractionType": "Interact", - "AetheryteShortcut": "North Shroud - Fallgourd Float" + "AetheryteShortcut": "North Shroud - Fallgourd Float", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 1007092, @@ -106,7 +114,15 @@ "Z": 232.62378 }, "TerritoryId": 154, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 1002804, @@ -116,7 +132,15 @@ "Z": 172.74731 }, "TerritoryId": 154, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] } ] }, @@ -133,7 +157,15 @@ "TerritoryId": 154, "InteractionType": "Combat", "EnemySpawnType": "AutoOnEnterArea", - "KillEnemyDataIds": [4683] + "KillEnemyDataIds": [4683], + "CompletionQuestVariablesFlags": [ + 2, + null, + null, + null, + null, + null + ] }, { "DataId": 1013605, diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1720_A Journey of Purification.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1720_A Journey of Purification.json index 510520eb..be678168 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1720_A Journey of Purification.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1720_A Journey of Purification.json @@ -35,7 +35,8 @@ }, "TerritoryId": 155, "InteractionType": "Interact", - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead" + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "Mount": true } ] }, diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json index cd08a4e0..c219c397 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1721_The Girl with the Dragon Tissue.json @@ -50,7 +50,15 @@ "Z": 792.4772 }, "TerritoryId": 397, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 1011237, @@ -60,7 +68,15 @@ "Z": 725.00183 }, "TerritoryId": 397, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] } ] }, @@ -92,7 +108,12 @@ "TerritoryId": 397, "InteractionType": "Interact", "Fly": true - }, + } + ] + }, + { + "Sequence": 5, + "Steps": [ { "Position": { "X": -336.4157, @@ -102,7 +123,18 @@ "TerritoryId": 397, "InteractionType": "Combat", "EnemySpawnType": "AutoOnEnterArea", - "KillEnemyDataIds": [4677] + "KillEnemyDataIds": [ + 4677 + ], + "Fly": true, + "CompletionQuestVariablesFlags": [ + 2, + null, + null, + null, + null, + null + ] }, { "DataId": 2005855, @@ -116,22 +148,6 @@ } ] }, - - { - "Sequence": 5, - "Steps": [ - { - "DataId": 2005855, - "Position": { - "X": -336.4157, - "Y": 89.00586, - "Z": -586.5721 - }, - "TerritoryId": 397, - "InteractionType": "Interact" - } - ] - }, { "Sequence": 6, "Steps": [ @@ -143,7 +159,8 @@ "Z": -688.53284 }, "TerritoryId": 397, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1722_The Dark Blight Writhes.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1722_The Dark Blight Writhes.json index 2a1a2d05..8cc13327 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1722_The Dark Blight Writhes.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1722_The Dark Blight Writhes.json @@ -49,9 +49,10 @@ "Y": 125.596924, "Z": -11.215393 }, + "StopDistance": 5, "TerritoryId": 397, - "InteractionType": "WaitForManualProgress", - "$": "Cure II needs to be added to list of actions" + "InteractionType": "Action", + "Action": "Cure II" } ] }, @@ -68,7 +69,16 @@ "TerritoryId": 397, "InteractionType": "Combat", "EnemySpawnType": "AutoOnEnterArea", - "KillEnemyDataIds": [4690] + "KillEnemyDataIds": [4690], + "Fly": true, + "CompletionQuestVariablesFlags": [ + 4, + null, + null, + null, + null, + null + ] }, { "DataId": 2005857, diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1723_In the Wake of Death.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1723_In the Wake of Death.json index 1c433969..d96e1d70 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1723_In the Wake of Death.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1723_In the Wake of Death.json @@ -52,7 +52,15 @@ "InteractionType": "Combat", "EnemySpawnType": "AutoOnEnterArea", "KillEnemyDataIds": [4691, 4692], - "Fly": true + "Fly": true, + "CompletionQuestVariablesFlags": [ + 4, + null, + null, + null, + null, + null + ] }, { "DataId": 2005859, diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json index 3543774e..1a7b66ca 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json @@ -176,7 +176,8 @@ }, "TerritoryId": 398, "InteractionType": "SinglePlayerDuty", - "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine", + "Fly": true } ] }, @@ -272,7 +273,7 @@ }, "TerritoryId": 153, "InteractionType": "CompleteQuest", - "NextQuestId": 1725 + "NextQuestId": 2414 } ] } diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json index 34e97ad7..35041f7a 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json @@ -99,7 +99,8 @@ }, "TerritoryId": 152, "InteractionType": "Interact", - "AetheryteShortcut": "East Shroud - Hawthorne Hut" + "AetheryteShortcut": "East Shroud - Hawthorne Hut", + "Fly": true } ] }, @@ -130,7 +131,8 @@ "Z": -291.52362 }, "TerritoryId": 612, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2415_An Aura for Trouble.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2415_An Aura for Trouble.json index 195ca167..ce6f9b65 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2415_An Aura for Trouble.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2415_An Aura for Trouble.json @@ -34,7 +34,8 @@ "Z": -100.23657 }, "TerritoryId": 612, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, @@ -47,10 +48,12 @@ "Y": 54.95936, "Z": 204.82178 }, + "StopDistance": 0.5, "TerritoryId": 612, "InteractionType": "Combat", "EnemySpawnType": "AutoOnEnterArea", - "KillEnemyDataIds": [7214] + "KillEnemyDataIds": [7214], + "Fly": true }, { "DataId": 1018758, diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2416_A Beacon for Bad Things.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2416_A Beacon for Bad Things.json index cb49dcfe..b9e8d1b6 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2416_A Beacon for Bad Things.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2416_A Beacon for Bad Things.json @@ -34,7 +34,8 @@ "Z": 86.96118 }, "TerritoryId": 612, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, @@ -49,7 +50,8 @@ "Z": 186.08374 }, "TerritoryId": 612, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, @@ -64,7 +66,8 @@ "Z": 451.16345 }, "TerritoryId": 612, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, @@ -79,7 +82,8 @@ "Z": 374.92932 }, "TerritoryId": 612, - "InteractionType": "SinglePlayerDuty" + "InteractionType": "SinglePlayerDuty", + "Fly": true } ] }, diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2417_The Problem with Padjals.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2417_The Problem with Padjals.json index 12c95bf9..b34f17f2 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2417_The Problem with Padjals.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2417_The Problem with Padjals.json @@ -34,7 +34,8 @@ "Z": 370.80945 }, "TerritoryId": 612, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, @@ -51,7 +52,8 @@ "InteractionType": "Combat", "EnemySpawnType": "AutoOnEnterArea", "KillEnemyDataIds": [7215], - "AetheryteShortcut": "Fringes - Castrum Oriens" + "AetheryteShortcut": "Fringes - Castrum Oriens", + "Fly": true }, { "DataId": 1019128, @@ -68,6 +70,16 @@ { "Sequence": 3, "Steps": [ + { + "Position": { + "X": -650.58673, + "Y": 39.856243, + "Z": 371.54846 + }, + "TerritoryId": 612, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1019131, "Position": { diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2418_What She Always Wanted.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2418_What She Always Wanted.json index 53a0fd4f..eec344e8 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2418_What She Always Wanted.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2418_What She Always Wanted.json @@ -42,6 +42,16 @@ { "Sequence": 2, "Steps": [ + { + "Position": { + "X": -650.58673, + "Y": 39.856243, + "Z": 371.54846 + }, + "TerritoryId": 612, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1019130, "Position": { @@ -89,7 +99,8 @@ "TerritoryId": 612, "InteractionType": "Combat", "EnemySpawnType": "AutoOnEnterArea", - "KillEnemyDataIds": [7216] + "KillEnemyDataIds": [7216], + "Fly": true } ] }, From 0a49da168227c1ae50e86c4a89f45558eda73026 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 29 Aug 2024 21:33:07 +0200 Subject: [PATCH 48/69] Minor healer quest adjustments --- .../Healer/3267_Traditions and Travails.json | 3 ++- .../Role Quests/Healer/3268_Affronts and Allies.json | 9 ++++++--- .../Healer/3269_The Scientific Method.json | 5 ++++- .../Healer/3270_The Lost and the Found.json | 9 ++++++--- .../Role Quests/Healer/3271_Never to Return.json | 3 ++- .../Healer/3272_The Soul of Temperance.json | 12 +++++++----- 6 files changed, 27 insertions(+), 14 deletions(-) diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3267_Traditions and Travails.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3267_Traditions and Travails.json index 8e04de51..15fc4534 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3267_Traditions and Travails.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3267_Traditions and Travails.json @@ -37,7 +37,8 @@ }, "TerritoryId": 813, "InteractionType": "Interact", - "AetheryteShortcut": "Lakeland - Fort Jobb" + "AetheryteShortcut": "Lakeland - Fort Jobb", + "Fly": true } ] }, diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3268_Affronts and Allies.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3268_Affronts and Allies.json index 268e2b12..ad7d1e23 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3268_Affronts and Allies.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3268_Affronts and Allies.json @@ -54,7 +54,8 @@ "TerritoryId": 814, "InteractionType": "Combat", "EnemySpawnType": "AfterInteraction", - "KillEnemyDataIds": [10866] + "KillEnemyDataIds": [10866], + "Fly": true } ] }, @@ -71,7 +72,8 @@ "TerritoryId": 814, "InteractionType": "Combat", "EnemySpawnType": "AfterInteraction", - "KillEnemyDataIds": [10867] + "KillEnemyDataIds": [10867], + "Fly": true } ] }, @@ -86,7 +88,8 @@ "Z": 177.47766 }, "TerritoryId": 814, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3269_The Scientific Method.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3269_The Scientific Method.json index 19c40685..a1c6b7cb 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3269_The Scientific Method.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3269_The Scientific Method.json @@ -51,6 +51,7 @@ "Y": 1.4800415, "Z": -282.7345 }, + "StopDistance": 4, "TerritoryId": 815, "InteractionType": "Interact", "DialogueChoices": [ @@ -74,7 +75,8 @@ "Z": -36.66742 }, "TerritoryId": 815, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, @@ -88,6 +90,7 @@ "Y": -25.7535, "Z": -35.6604 }, + "StopDistance": 4, "TerritoryId": 815, "InteractionType": "Interact" } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3270_The Lost and the Found.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3270_The Lost and the Found.json index 215bc044..9fbd36cd 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3270_The Lost and the Found.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3270_The Lost and the Found.json @@ -54,7 +54,8 @@ "TerritoryId": 817, "InteractionType": "Combat", "EnemySpawnType": "AfterInteraction", - "KillEnemyDataIds": [10950] + "KillEnemyDataIds": [10950], + "Fly": true } ] }, @@ -71,7 +72,8 @@ "TerritoryId": 817, "InteractionType": "Combat", "EnemySpawnType": "AfterInteraction", - "KillEnemyDataIds": [10869] + "KillEnemyDataIds": [10869], + "Fly": true } ] }, @@ -86,7 +88,8 @@ "Z": 59.861084 }, "TerritoryId": 817, - "InteractionType": "SinglePlayerDuty" + "InteractionType": "SinglePlayerDuty", + "Fly": true } ] }, diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3271_Never to Return.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3271_Never to Return.json index f0e75da0..5e306be5 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3271_Never to Return.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3271_Never to Return.json @@ -52,7 +52,8 @@ "Z": -677.9431 }, "TerritoryId": 814, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json index 24d7c9d6..f951018d 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Healer/3272_The Soul of Temperance.json @@ -13,9 +13,8 @@ "Z": -597.1008 }, "TerritoryId": 814, - "InteractionType": "CompleteQuest", + "InteractionType": "AcceptQuest", "AetheryteShortcut": "Kholusia - Tomra", - "NextQuestId": 3272, "SkipConditions": { "AethernetShortcutIf": { "InSameTerritory": true } } @@ -35,7 +34,8 @@ "TerritoryId": 814, "InteractionType": "Combat", "EnemySpawnType": "AfterInteraction", - "KillEnemyDataIds": [10870] + "KillEnemyDataIds": [10870], + "Fly": true } ] }, @@ -52,7 +52,8 @@ "TerritoryId": 814, "InteractionType": "Combat", "EnemySpawnType": "AfterInteraction", - "KillEnemyDataIds": [10871] + "KillEnemyDataIds": [10871], + "Fly": true } ] }, @@ -67,7 +68,8 @@ "Z": -129.01508 }, "TerritoryId": 814, - "InteractionType": "SinglePlayerDuty" + "InteractionType": "SinglePlayerDuty", + "Fly": true } ] }, From 24c1e0c5d953c35b1b27b066c80cfd229844e16b Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 30 Aug 2024 09:15:46 +0200 Subject: [PATCH 49/69] Version bump --- Directory.Build.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index d7818760..6b83635a 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,5 +1,5 @@ - 2.17 + 2.18 From 47d9f090a24a43cf4fb3cb60f9bc9f5f4397c4bf Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 30 Aug 2024 13:59:33 +0200 Subject: [PATCH 50/69] Handle zone transitiions in new movement logic --- Directory.Build.targets | 2 +- Questionable/Controller/Steps/Shared/MoveTo.cs | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 6b83635a..c6651601 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,5 +1,5 @@ - 2.18 + 2.19 diff --git a/Questionable/Controller/Steps/Shared/MoveTo.cs b/Questionable/Controller/Steps/Shared/MoveTo.cs index 33192674..f9e0d690 100644 --- a/Questionable/Controller/Steps/Shared/MoveTo.cs +++ b/Questionable/Controller/Steps/Shared/MoveTo.cs @@ -169,6 +169,8 @@ internal static class MoveTo private readonly Action _startAction; private readonly Vector3 _destination; private readonly MoveParams _moveParams; + private readonly bool _isUnderwaterInitially; + private bool _canRestart; public MoveInternal(MoveParams moveParams, MovementController movementController, @@ -213,6 +215,7 @@ internal static class MoveTo } _moveParams = moveParams; + _canRestart = moveParams.RestartNavigation; } public bool Start() @@ -231,13 +234,20 @@ internal static class MoveTo if (movementStartedAt == DateTime.MaxValue || movementStartedAt.AddSeconds(2) >= DateTime.Now) return ETaskResult.StillRunning; - if (_moveParams.RestartNavigation && + if (_canRestart && Vector3.Distance(_clientState.LocalPlayer!.Position, _destination) > (_moveParams.StopDistance ?? QuestStep.DefaultStopDistance) + 5f) { - _logger.LogInformation("Looks like movement was interrupted, re-attempting to move"); - _startAction(); - return ETaskResult.StillRunning; + _canRestart = false; + if (_clientState.TerritoryType == _moveParams.TerritoryId) + { + _logger.LogInformation("Looks like movement was interrupted, re-attempting to move"); + _startAction(); + return ETaskResult.StillRunning; + } + else + _logger.LogInformation( + "Looks like movement was interrupted, do nothing since we're in a different territory now"); } return ETaskResult.TaskComplete; From ded6f6bbb296d973e457550995486faca95d4188 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 30 Aug 2024 17:10:54 +0200 Subject: [PATCH 51/69] Always hide 'Cannot execute at this time' while moving, not only during diving --- Questionable/Controller/Steps/Shared/MoveTo.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Questionable/Controller/Steps/Shared/MoveTo.cs b/Questionable/Controller/Steps/Shared/MoveTo.cs index f9e0d690..28562a0b 100644 --- a/Questionable/Controller/Steps/Shared/MoveTo.cs +++ b/Questionable/Controller/Steps/Shared/MoveTo.cs @@ -68,7 +68,7 @@ internal static class MoveTo public ITask Move(MoveParams moveParams) { return new MoveInternal(moveParams, movementController, gameFunctions, - loggerFactory.CreateLogger(), condition, clientState, dataManager); + loggerFactory.CreateLogger(), clientState, dataManager); } public ITask Land() @@ -163,26 +163,22 @@ internal static class MoveTo private readonly string _cannotExecuteAtThisTime; private readonly MovementController _movementController; private readonly ILogger _logger; - private readonly ICondition _condition; private readonly IClientState _clientState; private readonly Action _startAction; private readonly Vector3 _destination; private readonly MoveParams _moveParams; - private readonly bool _isUnderwaterInitially; private bool _canRestart; public MoveInternal(MoveParams moveParams, MovementController movementController, GameFunctions gameFunctions, ILogger logger, - ICondition condition, IClientState clientState, IDataManager dataManager) { _movementController = movementController; _logger = logger; - _condition = condition; _clientState = clientState; _cannotExecuteAtThisTime = dataManager.GetString(579, x => x.Text)!; @@ -257,8 +253,7 @@ internal static class MoveTo public bool OnErrorToast(SeString message) { - if (GameFunctions.GameStringEquals(_cannotExecuteAtThisTime, message.TextValue) && - _condition[ConditionFlag.Diving]) + if (GameFunctions.GameStringEquals(_cannotExecuteAtThisTime, message.TextValue)) return true; return false; From 308d4b8253d1b0089ea4a27ff7fc90f822ddab3d Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 30 Aug 2024 20:35:37 +0200 Subject: [PATCH 52/69] Update source gen --- QuestPathGenerator/RoslynElements/QuestStepExtensions.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs b/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs index 11cdc214..e5b8eabb 100644 --- a/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs +++ b/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs @@ -62,6 +62,9 @@ internal static class QuestStepExtensions Assignment(nameof(QuestStep.IgnoreDistanceToObject), step.IgnoreDistanceToObject, emptyStep.IgnoreDistanceToObject) .AsSyntaxNodeOrToken(), + Assignment(nameof(QuestStep.RestartNavigationIfCancelled), + step.RestartNavigationIfCancelled, emptyStep.RestartNavigationIfCancelled) + .AsSyntaxNodeOrToken(), Assignment(nameof(QuestStep.Comment), step.Comment, emptyStep.Comment) .AsSyntaxNodeOrToken(), Assignment(nameof(QuestStep.Aetheryte), step.Aetheryte, emptyStep.Aetheryte) From a5d75eb0f549de13e8166438b41adac2c926ee30 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 30 Aug 2024 20:35:53 +0200 Subject: [PATCH 53/69] Update some late ARR quests --- .../MSQ-2/E6-2.55/427_The Parting Glass.json | 1 + .../MSQ-2/E6-2.55/428_Before the Dawn.json | 1 + .../Raid Quests/1709_Legacy of Allag.json | 44 +++++++++---------- .../Gold Saucer/435_World of Wonders.json | 18 ++++++++ 4 files changed, 41 insertions(+), 23 deletions(-) diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/E6-2.55/427_The Parting Glass.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/E6-2.55/427_The Parting Glass.json index c02faa3e..28fc2c1b 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/E6-2.55/427_The Parting Glass.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/E6-2.55/427_The Parting Glass.json @@ -53,6 +53,7 @@ "Y": -0.63573146, "Z": -166.33862 }, + "StopDistance": 5, "TerritoryId": 141, "InteractionType": "Interact" } diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-2/E6-2.55/428_Before the Dawn.json b/QuestPaths/2.x - A Realm Reborn/MSQ-2/E6-2.55/428_Before the Dawn.json index a502544c..0db03bd8 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-2/E6-2.55/428_Before the Dawn.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-2/E6-2.55/428_Before the Dawn.json @@ -35,6 +35,7 @@ }, "TerritoryId": 155, "InteractionType": "CompleteQuest", + "Mount": true, "DialogueChoices": [ { "Type": "YesNo", diff --git a/QuestPaths/2.x - A Realm Reborn/Raid Quests/1709_Legacy of Allag.json b/QuestPaths/2.x - A Realm Reborn/Raid Quests/1709_Legacy of Allag.json index 687fc403..1e363fb4 100644 --- a/QuestPaths/2.x - A Realm Reborn/Raid Quests/1709_Legacy of Allag.json +++ b/QuestPaths/2.x - A Realm Reborn/Raid Quests/1709_Legacy of Allag.json @@ -337,16 +337,6 @@ "InteractionType": "WalkTo", "Fly": true }, - { - "Position": { - "X": 233.0817, - "Y": 8, - "Z": -21.83023 - }, - "TerritoryId": 146, - "InteractionType": "WalkTo", - "Fly": true - }, { "DataId": 2000077, "Position": { @@ -360,18 +350,16 @@ "KillEnemyDataIds": [ 9489 ], - "$": "0 0 0 0 0 0 -> 16 17 0 0 0 128" - }, - { - "Position": { - "X": 614.4023, - "Y": 301.81046, - "Z": -101.94888 - }, - "TerritoryId": 155, - "InteractionType": "WalkTo", - "Fly": true, - "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead" + "$": "0 0 0 0 0 0 -> 16 17 0 0 0 128", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], + "Fly": true }, { "DataId": 2000078, @@ -386,7 +374,17 @@ "KillEnemyDataIds": [ 9490 ], - "$": "16 17 0 0 0 128 -> 0 17 0 0 0 0" + "Fly": true, + "AetheryteShortcut": "Coerthas Central Highlands - Camp Dragonhead", + "$": "16 17 0 0 0 128 -> 0 17 0 0 0 0", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/435_World of Wonders.json b/QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/435_World of Wonders.json index 7831f300..f6dce677 100644 --- a/QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/435_World of Wonders.json +++ b/QuestPaths/2.x - A Realm Reborn/Unlocks/Gold Saucer/435_World of Wonders.json @@ -191,6 +191,15 @@ "AethernetShard": "[Gold Saucer] Cactpot Board", "DelaySecondsAtStart": 3 }, + { + "Position": { + "X": 111.36922, + "Y": 13.000123, + "Z": -24.209782 + }, + "TerritoryId": 144, + "InteractionType": "WalkTo" + }, { "DataId": 1011079, "Position": { @@ -207,6 +216,15 @@ { "Sequence": 6, "Steps": [ + { + "Position": { + "X": 111.36922, + "Y": 13.000123, + "Z": -24.209782 + }, + "TerritoryId": 144, + "InteractionType": "WalkTo" + }, { "TerritoryId": 144, "InteractionType": "None", From de7cf2a94fec6d2317d33d34a888d806a8e316f6 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Fri, 30 Aug 2024 21:40:42 +0200 Subject: [PATCH 54/69] Handle accepting quests via 'PickupQuestId' if NPC offers multiple quests --- .../Controller/GameUi/InteractionUiController.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Questionable/Controller/GameUi/InteractionUiController.cs b/Questionable/Controller/GameUi/InteractionUiController.cs index e630d7d6..21c95d29 100644 --- a/Questionable/Controller/GameUi/InteractionUiController.cs +++ b/Questionable/Controller/GameUi/InteractionUiController.cs @@ -235,6 +235,16 @@ internal sealed class InteractionUiController : IDisposable _logger.LogInformation("Checking if current quest {Name} is on the list", currentQuest.Quest.Info.Name); if (CheckQuestSelection(addonSelectIconString, currentQuest.Quest, answers)) return; + + var sequence = currentQuest.Quest.FindSequence(currentQuest.Sequence); + QuestStep? step = sequence?.FindStep(currentQuest.Step); + if (step is { InteractionType: EInteractionType.AcceptQuest, PickUpQuestId: not null } && + _questRegistry.TryGetQuest(step.PickUpQuestId, out Quest? pickupQuest)) + { + _logger.LogInformation("Checking if current picked-up {Name} is on the list", pickupQuest.Info.Name); + if (CheckQuestSelection(addonSelectIconString, pickupQuest, answers)) + return; + } } var nextQuest = _questController.NextQuest; From 1572ff11a8aa752e1a0f4215f0037cc3b350452b Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 31 Aug 2024 14:03:53 +0200 Subject: [PATCH 55/69] Add IPC methods IsRunning/GetCurrentQuestId --- Questionable/External/QuestionableIpc.cs | 31 ++++++++++++++++++++++++ Questionable/QuestionablePlugin.cs | 2 ++ 2 files changed, 33 insertions(+) create mode 100644 Questionable/External/QuestionableIpc.cs diff --git a/Questionable/External/QuestionableIpc.cs b/Questionable/External/QuestionableIpc.cs new file mode 100644 index 00000000..e73053ef --- /dev/null +++ b/Questionable/External/QuestionableIpc.cs @@ -0,0 +1,31 @@ +using System; +using Dalamud.Plugin; +using Dalamud.Plugin.Ipc; +using Questionable.Controller; + +namespace Questionable.External; + +internal sealed class QuestionableIpc : IDisposable +{ + private const string IpcIsRunning = "Questionable.IsRunning"; + private const string IpcGetCurrentQuestId = "Questionable.GetCurrentQuestId"; + + private readonly ICallGateProvider _isRunning; + private readonly ICallGateProvider _getCurrentQuestId; + + public QuestionableIpc(QuestController questController, IDalamudPluginInterface pluginInterface) + { + _isRunning = pluginInterface.GetIpcProvider(IpcIsRunning); + _isRunning.RegisterFunc(() => questController.IsRunning); + + _getCurrentQuestId = pluginInterface.GetIpcProvider(IpcGetCurrentQuestId); + _getCurrentQuestId.RegisterFunc(() => questController.CurrentQuest?.Quest.Id.ToString()); + } + + + public void Dispose() + { + _getCurrentQuestId.UnregisterFunc(); + _isRunning.UnregisterFunc(); + } +} diff --git a/Questionable/QuestionablePlugin.cs b/Questionable/QuestionablePlugin.cs index 207cf2b1..d1a5b543 100644 --- a/Questionable/QuestionablePlugin.cs +++ b/Questionable/QuestionablePlugin.cs @@ -120,6 +120,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); } private static void AddTaskFactories(ServiceCollection serviceCollection) @@ -235,6 +236,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceProvider.GetRequiredService(); serviceProvider.GetRequiredService(); serviceProvider.GetRequiredService(); + serviceProvider.GetRequiredService(); serviceProvider.GetRequiredService(); } From aaad336c64b583d27ff27f02056101fb4cf82375 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 31 Aug 2024 14:04:07 +0200 Subject: [PATCH 56/69] Fix next quest display --- Questionable/Windows/QuestComponents/ActiveQuestComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs b/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs index 6d4a4384..b1ffd40b 100644 --- a/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs +++ b/Questionable/Windows/QuestComponents/ActiveQuestComponent.cs @@ -177,7 +177,7 @@ internal sealed partial class ActiveQuestComponent { using var _ = ImRaii.PushColor(ImGuiCol.Text, ImGuiColors.DalamudYellow); ImGui.TextUnformatted( - $"Next Quest: {Shorten(currentQuest.Quest.Info.Name)} / {currentQuest.Sequence} / {currentQuest.Step}"); + $"Next Quest: {Shorten(nextQuest.Quest.Info.Name)} / {nextQuest.Sequence} / {nextQuest.Step}"); } } } From c193789d3c7215c42704dc012feae65526e69c92 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 31 Aug 2024 19:41:59 +0200 Subject: [PATCH 57/69] Ignore NextQuestId for job quests --- Questionable/Controller/Steps/Common/NextQuest.cs | 4 ++++ Questionable/Functions/QuestFunctions.cs | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Questionable/Controller/Steps/Common/NextQuest.cs b/Questionable/Controller/Steps/Common/NextQuest.cs index e7fd2b62..574c76ae 100644 --- a/Questionable/Controller/Steps/Common/NextQuest.cs +++ b/Questionable/Controller/Steps/Common/NextQuest.cs @@ -20,6 +20,10 @@ internal static class NextQuest if (step.NextQuestId == quest.Id) return null; + // probably irrelevant, since pick up is handled elsewhere (and, in particular, checks for aetherytes and stuff) + if (questFunctions.GetPriorityQuests().Contains(step.NextQuestId)) + return null; + return new SetQuest(step.NextQuestId, quest.Id, questRegistry, questController, questFunctions, loggerFactory.CreateLogger()); } } diff --git a/Questionable/Functions/QuestFunctions.cs b/Questionable/Functions/QuestFunctions.cs index 4bfdce00..b36e7c36 100644 --- a/Questionable/Functions/QuestFunctions.cs +++ b/Questionable/Functions/QuestFunctions.cs @@ -254,7 +254,8 @@ internal sealed unsafe class QuestFunctions InventoryManager* inventoryManager = InventoryManager.Instance(); int gil = inventoryManager->GetItemCountInContainer(1, InventoryType.Currency); - return GetPriorityQuestsThatCanBeAccepted() + return GetPriorityQuests() + .Where(IsReadyToAcceptQuest) .Where(x => { if (!_questRegistry.TryGetQuest(x, out Quest? quest)) @@ -311,7 +312,7 @@ internal sealed unsafe class QuestFunctions return 1000 * quest.AllSteps().Count(x => x.Step.AetheryteShortcut != null); } - private List GetPriorityQuestsThatCanBeAccepted() + public List GetPriorityQuests() { List priorityQuests = [ @@ -349,7 +350,6 @@ internal sealed unsafe class QuestFunctions return priorityQuests .Where(_questRegistry.IsKnownQuest) - .Where(IsReadyToAcceptQuest) .ToList(); } From d76242adfe4fec11d0d40fa949634645c216d328 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 31 Aug 2024 21:50:50 +0200 Subject: [PATCH 58/69] Fix emote use in 'Familiar Faces' once and for all --- Questionable/Controller/Steps/Interactions/Emote.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Questionable/Controller/Steps/Interactions/Emote.cs b/Questionable/Controller/Steps/Interactions/Emote.cs index 940aabb1..8a5db80e 100644 --- a/Questionable/Controller/Steps/Interactions/Emote.cs +++ b/Questionable/Controller/Steps/Interactions/Emote.cs @@ -14,7 +14,8 @@ internal static class Emote { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { - if (step.InteractionType is EInteractionType.AcceptQuest or EInteractionType.CompleteQuest) + if (step.InteractionType is EInteractionType.AcceptQuest or EInteractionType.CompleteQuest + or EInteractionType.SinglePlayerDuty) { if (step.Emote == null) return []; From 842715337c014c4b5177b9cfcacecea478681bd5 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 31 Aug 2024 22:21:36 +0200 Subject: [PATCH 59/69] Update HW paths + include aether current quests in MSQ --- .../1828_Hide Your Moogles.json | 14 +++++- .../1771_Some Bad News.json | 1 + .../1790_Stolen Munitions.json | 9 ++++ .../1797_The Hunter Becomes the Kweh.json | 1 + .../1802_A Lesson in Humility.json | 3 +- .../1945_Ebb and Aetherflow.json | 1 + .../1963_Taking Stock.json | 11 ++++ .../1909_Sleepless in Ok' Zundu.json | 9 ++++ .../WAR/588_The Bear Necessity.json | 17 ++++++- .../1580_Coming to Ishgard.json | 1 + .../1592_Meeting the Neighbors.json | 3 +- .../1593_Sense of Urgency.json | 9 ++++ .../1599_Flame General Affairs.json | 17 +++++++ .../1602_To Siege or Not to Siege.json | 2 + .../1603_Alphinaud's Way.json | 2 +- .../1604_In Search of Iceheart.json | 11 ++++ .../1608_Purple Flame, Purple Flame.json | 33 ++++++++++++ .../1609_Where the Chocobos Roam.json | 10 ++++ .../1610_Worse than Dragons.json | 11 ++++ .../1614_A Gnathic Deity.json | 11 ++++ .../1616_Lord of the Hive.json | 50 +++++++++++++++++-- .../1617_Mourn in Passing.json | 2 +- .../1620_Moghan's Trial.json | 2 +- .../1621_Mogmug's Trial.json | 11 ++++ .../1623_Moglin's Judgment.json | 2 +- .../1624_Leaving Moghome.json | 2 +- .../1625_The Road to Zenith.json | 19 +++++++ .../1627_Heart of Ice.json | 1 + .../1628_The Wyrm's Lair.json | 1 + .../1629_New Winds, Old Friends.json | 11 ++++ .../1630_A General Summons.json | 2 + .../1635_The Song Begins.json | 20 +++++++- .../1641_The Sins of Antiquity.json | 15 +++++- .../A5-Sea of Clouds/1644_Familiar Faces.json | 7 ++- .../1647_Bolt, Chain, and Island.json | 25 +++++++++- .../1648_A Difference of Opinion.json | 2 +- .../1653_Tataru's Surprise.json | 9 ++++ .../1654_Onward to Sharlayan.json | 3 +- .../1656_Golems Begone.json | 21 +++++++- .../1657_An Illuminati Incident.json | 15 ++++++ .../1658_Leaving Idyllshire.json | 11 ++++ .../1659_Matoya's Cave.json | 30 +++++++---- .../1660_Forbidden Knowledge.json | 16 +++++- .../1662_Hour of Departure.json | 1 + ...663_The First Flight of the Excelsior.json | 3 +- .../1666_Chimerical Maintenance.json | 9 ++++ 46 files changed, 425 insertions(+), 41 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json index 7d7043cf..be32d328 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Churning Mists/1828_Hide Your Moogles.json @@ -196,6 +196,17 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": -465.66104, + "Y": 43.041187, + "Z": 380.90747 + }, + "TerritoryId": 400, + "InteractionType": "WalkTo", + "Mount": true, + "DisableNavmesh": true + }, { "DataId": 1013420, "Position": { @@ -204,8 +215,7 @@ "Z": 347.0968 }, "TerritoryId": 400, - "InteractionType": "CompleteQuest", - "DisableNavmesh": true + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1771_Some Bad News.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1771_Some Bad News.json index c584f07b..e3a5e7b5 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1771_Some Bad News.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1771_Some Bad News.json @@ -111,6 +111,7 @@ }, "TerritoryId": 398, "InteractionType": "WalkTo", + "Mount": true, "SkipConditions": { "StepIf": { "CompletionQuestVariablesFlags": [ diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1790_Stolen Munitions.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1790_Stolen Munitions.json index 5e217fc9..17d022f2 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1790_Stolen Munitions.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1790_Stolen Munitions.json @@ -20,6 +20,15 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": 67.682434, + "Y": -49.685223, + "Z": -148.21802 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo" + }, { "DataId": 4001, "Position": { diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1797_The Hunter Becomes the Kweh.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1797_The Hunter Becomes the Kweh.json index 2deff7b9..1ccc2ef4 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1797_The Hunter Becomes the Kweh.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1797_The Hunter Becomes the Kweh.json @@ -118,6 +118,7 @@ }, "TerritoryId": 398, "InteractionType": "WalkTo", + "Mount": true, "SkipConditions": { "StepIf": { "CompletionQuestVariablesFlags": [ diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1802_A Lesson in Humility.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1802_A Lesson in Humility.json index 2c5c6b23..fd7ed9c5 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1802_A Lesson in Humility.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Forelands/1802_A Lesson in Humility.json @@ -152,7 +152,8 @@ "Z": 22.9953 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" } ] } diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1945_Ebb and Aetherflow.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1945_Ebb and Aetherflow.json index 64cbba1e..1d32b15e 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1945_Ebb and Aetherflow.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1945_Ebb and Aetherflow.json @@ -98,6 +98,7 @@ "Y": 205.6815, "Z": 31.631958 }, + "StopDistance": 5, "TerritoryId": 478, "InteractionType": "CompleteQuest", "AetheryteShortcut": "Idyllshire" diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1963_Taking Stock.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1963_Taking Stock.json index b67d5cd7..338a7da4 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1963_Taking Stock.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Dravanian Hinterlands/1963_Taking Stock.json @@ -30,6 +30,17 @@ "InteractionType": "WalkTo", "TargetTerritoryId": 399 }, + { + "DataId": 2006210, + "Position": { + "X": -487.48004, + "Y": 144.64026, + "Z": -285.359 + }, + "TerritoryId": 399, + "InteractionType": "AttuneAetherCurrent", + "AetherCurrentId": 2818088 + }, { "DataId": 1013651, "Position": { diff --git a/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1909_Sleepless in Ok' Zundu.json b/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1909_Sleepless in Ok' Zundu.json index e6fd0f6c..ef0f8a4a 100644 --- a/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1909_Sleepless in Ok' Zundu.json +++ b/QuestPaths/3.x - Heavensward/Aether Currents/The Sea of Clouds/1909_Sleepless in Ok' Zundu.json @@ -20,6 +20,15 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": -44.83911, + "Y": -1.6023016, + "Z": -655.73804 + }, + "TerritoryId": 401, + "InteractionType": "WalkTo" + }, { "DataId": 2005824, "Position": { diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WAR/588_The Bear Necessity.json b/QuestPaths/3.x - Heavensward/Class Quests/WAR/588_The Bear Necessity.json index f3ce1fe7..559d211e 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WAR/588_The Bear Necessity.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WAR/588_The Bear Necessity.json @@ -135,6 +135,20 @@ { "Sequence": 3, "Steps": [ + { + "Position": { + "X": 423.53406, + "Y": -26.253891, + "Z": -550.60297 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "SkipConditions": { + "StepIf": { + "Flying": "Unlocked" + } + } + }, { "DataId": 2005573, "Position": { @@ -177,7 +191,8 @@ "StepIf": { "Flying": "Unlocked" } - } + }, + "DisableNavmesh": true } ] }, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1580_Coming to Ishgard.json b/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1580_Coming to Ishgard.json index 6bd29e33..e051a689 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1580_Coming to Ishgard.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1580_Coming to Ishgard.json @@ -12,6 +12,7 @@ "Y": 0.014982708, "Z": -0.07635498 }, + "StopDistance": 7, "TerritoryId": 395, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1592_Meeting the Neighbors.json b/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1592_Meeting the Neighbors.json index c7215e44..b5ff5887 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1592_Meeting the Neighbors.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1592_Meeting the Neighbors.json @@ -114,8 +114,7 @@ "Z": 761.01306 }, "TerritoryId": 401, - "InteractionType": "CompleteQuest", - "AetheryteShortcut": "The Sea of Clouds - Camp Cloudtop" + "InteractionType": "CompleteQuest" } ] } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1593_Sense of Urgency.json b/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1593_Sense of Urgency.json index 4a8d50ac..75b0b6bb 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1593_Sense of Urgency.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A1-Coerthas Western Highlands 1, Sea of Clouds 1/1593_Sense of Urgency.json @@ -83,6 +83,15 @@ 128 ] }, + { + "Position": { + "X": -368.08698, + "Y": -185.05266, + "Z": 792.836 + }, + "TerritoryId": 401, + "InteractionType": "WalkTo" + }, { "DataId": 1012360, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/A2-Raubahn/1599_Flame General Affairs.json b/QuestPaths/3.x - Heavensward/MSQ/A2-Raubahn/1599_Flame General Affairs.json index 6dfd7035..d80572cb 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A2-Raubahn/1599_Flame General Affairs.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A2-Raubahn/1599_Flame General Affairs.json @@ -20,6 +20,23 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1011952, + "Position": { + "X": -277.63788, + "Y": -184.59735, + "Z": 741.60376 + }, + "TerritoryId": 401, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "The Sea of Clouds - Camp Cloudtop", + "PickUpQuestId": 1748, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + }, { "DataId": 1001029, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1602_To Siege or Not to Siege.json b/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1602_To Siege or Not to Siege.json index 967dc514..90526401 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1602_To Siege or Not to Siege.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1602_To Siege or Not to Siege.json @@ -47,6 +47,7 @@ "Y": 16.009666, "Z": -9.567444 }, + "StopDistance": 7, "TerritoryId": 419, "InteractionType": "Interact", "TargetTerritoryId": 433 @@ -63,6 +64,7 @@ "Y": 0.022254243, "Z": -4.409851 }, + "StopDistance": 5, "TerritoryId": 433, "InteractionType": "CompleteQuest", "DialogueChoices": [ diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1603_Alphinaud's Way.json b/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1603_Alphinaud's Way.json index 7c2298f3..05414fb3 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1603_Alphinaud's Way.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1603_Alphinaud's Way.json @@ -12,6 +12,7 @@ "Y": 0.022254243, "Z": -4.409851 }, + "StopDistance": 5, "TerritoryId": 433, "InteractionType": "AcceptQuest" } @@ -27,7 +28,6 @@ "Y": 1.1443481, "Z": 13.199036 }, - "StopDistance": 7, "TerritoryId": 433, "InteractionType": "Interact", "TargetTerritoryId": 419 diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1604_In Search of Iceheart.json b/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1604_In Search of Iceheart.json index efa5f07f..e03fc6ea 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1604_In Search of Iceheart.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1604_In Search of Iceheart.json @@ -87,6 +87,17 @@ { "Sequence": 4, "Steps": [ + { + "DataId": 1011240, + "Position": { + "X": 493.15625, + "Y": 200.2377, + "Z": 663.01965 + }, + "TerritoryId": 397, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1744 + }, { "DataId": 2005536, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1608_Purple Flame, Purple Flame.json b/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1608_Purple Flame, Purple Flame.json index 058fb527..ab4de151 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1608_Purple Flame, Purple Flame.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.1-Coerthas Western Highlands 2/1608_Purple Flame, Purple Flame.json @@ -20,6 +20,39 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1011910, + "Position": { + "X": -298.26813, + "Y": 126.67049, + "Z": -1.4191895 + }, + "TerritoryId": 397, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1759 + }, + { + "DataId": 1011907, + "Position": { + "X": -288.8686, + "Y": 127.06639, + "Z": 13.199036 + }, + "TerritoryId": 397, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1760 + }, + { + "DataId": 1011911, + "Position": { + "X": -279.56055, + "Y": 127.08131, + "Z": 13.595764 + }, + "TerritoryId": 397, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2111 + }, { "Position": { "X": -365.48965, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1609_Where the Chocobos Roam.json b/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1609_Where the Chocobos Roam.json index 82bc7486..cf8bc885 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1609_Where the Chocobos Roam.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1609_Where the Chocobos Roam.json @@ -20,6 +20,16 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": -826.9342, + "Y": 117.95439, + "Z": -642.92413 + }, + "TerritoryId": 397, + "InteractionType": "WalkTo", + "Fly": true + }, { "Position": { "X": -850.3646, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1610_Worse than Dragons.json b/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1610_Worse than Dragons.json index d1790954..18b0e19b 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1610_Worse than Dragons.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1610_Worse than Dragons.json @@ -35,6 +35,17 @@ { "Sequence": 2, "Steps": [ + { + "DataId": 1011916, + "Position": { + "X": 470.02356, + "Y": -49.89133, + "Z": 20.370789 + }, + "TerritoryId": 398, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1771 + }, { "Position": { "X": 634.0371, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1614_A Gnathic Deity.json b/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1614_A Gnathic Deity.json index 9ee5317f..766d64ac 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1614_A Gnathic Deity.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1614_A Gnathic Deity.json @@ -105,6 +105,17 @@ { "Sequence": 3, "Steps": [ + { + "DataId": 1011929, + "Position": { + "X": 70.81714, + "Y": -49.2083, + "Z": -141.55798 + }, + "TerritoryId": 398, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1790 + }, { "Position": { "X": 70.535545, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1616_Lord of the Hive.json b/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1616_Lord of the Hive.json index cf0d154e..f73fbe9b 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1616_Lord of the Hive.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1616_Lord of the Hive.json @@ -90,13 +90,52 @@ "Sequence": 255, "Steps": [ { + "DataId": 1011916, "Position": { - "X": 123.44939, - "Y": -60.88712, - "Z": -118.79085 + "X": 470.02356, + "Y": -49.89133, + "Z": 20.370789 }, "TerritoryId": 398, - "InteractionType": "WalkTo" + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1797, + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather", + "SkipConditions": { + "AetheryteShortcutIf": { + "QuestsCompleted": [ + 1797 + ] + } + } + }, + { + "DataId": 1011937, + "Position": { + "X": -305.56195, + "Y": 39.04307, + "Z": 22.9953 + }, + "TerritoryId": 398, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1802, + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine", + "SkipConditions": { + "AetheryteShortcutIf": { + "QuestsCompleted": [ + 1802 + ] + } + } + }, + { + "Position": { + "X": 22.235865, + "Y": -24.754946, + "Z": -119.65716 + }, + "TerritoryId": 398, + "InteractionType": "WalkTo", + "AetheryteShortcut": "The Dravanian Forelands - Anyx Trine" }, { "DataId": 1014544, @@ -106,7 +145,8 @@ "Z": -142.50409 }, "TerritoryId": 398, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "DisableNavmesh": true } ] } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1617_Mourn in Passing.json b/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1617_Mourn in Passing.json index 449e0aaa..78abed7d 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1617_Mourn in Passing.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.2-The Dravanian Forelands/1617_Mourn in Passing.json @@ -12,7 +12,7 @@ "Y": -50.325172, "Z": -146.95972 }, - "StopDistance": 5, + "StopDistance": 7, "TerritoryId": 398, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1620_Moghan's Trial.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1620_Moghan's Trial.json index 46aac443..284166c7 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1620_Moghan's Trial.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1620_Moghan's Trial.json @@ -12,7 +12,7 @@ "Y": -69.42934, "Z": 693.5072 }, - "StopDistance": 5, + "StopDistance": 6.5, "TerritoryId": 400, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1621_Mogmug's Trial.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1621_Mogmug's Trial.json index 89f3196d..3c314d00 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1621_Mogmug's Trial.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1621_Mogmug's Trial.json @@ -31,6 +31,17 @@ "DisableNavmesh": true, "Mount": true }, + { + "DataId": 1012284, + "Position": { + "X": 363.24097, + "Y": -73.25598, + "Z": 678.4314 + }, + "TerritoryId": 400, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1819 + }, { "Position": { "X": 286.46622, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1623_Moglin's Judgment.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1623_Moglin's Judgment.json index 3379cf91..9f9f298d 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1623_Moglin's Judgment.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1623_Moglin's Judgment.json @@ -155,7 +155,7 @@ "Y": -69.42934, "Z": 693.5072 }, - "StopDistance": 5, + "StopDistance": 7, "TerritoryId": 400, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1624_Leaving Moghome.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1624_Leaving Moghome.json index 13b0b022..6fb671d3 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1624_Leaving Moghome.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1624_Leaving Moghome.json @@ -12,7 +12,7 @@ "Y": -69.42934, "Z": 693.5072 }, - "StopDistance": 5, + "StopDistance": 7, "TerritoryId": 400, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1625_The Road to Zenith.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1625_The Road to Zenith.json index 9b3ed0f6..5b023de8 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1625_The Road to Zenith.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1625_The Road to Zenith.json @@ -58,6 +58,25 @@ { "Sequence": 255, "Steps": [ + { + "DataId": 1012285, + "Position": { + "X": 247.11987, + "Y": -42.33362, + "Z": 565.3314 + }, + "TerritoryId": 400, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1823, + "AetheryteShortcut": "The Churning Mists - Moghome", + "SkipConditions": { + "AetheryteShortcutIf": { + "QuestsCompleted": [ + 1823 + ] + } + } + }, { "DataId": 1013202, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1627_Heart of Ice.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1627_Heart of Ice.json index bfbead82..9712eb9d 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1627_Heart of Ice.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1627_Heart of Ice.json @@ -85,6 +85,7 @@ "Y": 123.72873, "Z": 210.74231 }, + "StopDistance": 7, "TerritoryId": 400, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1628_The Wyrm's Lair.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1628_The Wyrm's Lair.json index b6e26f82..31d0bfdb 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1628_The Wyrm's Lair.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1628_The Wyrm's Lair.json @@ -12,6 +12,7 @@ "Y": 123.72873, "Z": 210.74231 }, + "StopDistance": 7, "TerritoryId": 400, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1629_New Winds, Old Friends.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1629_New Winds, Old Friends.json index 61be6d80..1a39a37d 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1629_New Winds, Old Friends.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1629_New Winds, Old Friends.json @@ -20,6 +20,17 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1013434, + "Position": { + "X": 517.9064, + "Y": -1.1917055, + "Z": -354.63495 + }, + "TerritoryId": 400, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1835 + }, { "DataId": 1012720, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1630_A General Summons.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1630_A General Summons.json index 362321a5..61828e2c 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1630_A General Summons.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1630_A General Summons.json @@ -12,6 +12,7 @@ "Y": 16.979584, "Z": -37.521973 }, + "StopDistance": 7, "TerritoryId": 418, "InteractionType": "AcceptQuest" } @@ -58,6 +59,7 @@ "Y": 0, "Z": -3.1281738 }, + "StopDistance": 7, "TerritoryId": 212, "InteractionType": "Interact" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1635_The Song Begins.json b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1635_The Song Begins.json index 81bf09c6..7e8fcdb3 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1635_The Song Begins.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A3.3-The Churning Mists/1635_The Song Begins.json @@ -21,6 +21,25 @@ { "Sequence": 255, "Steps": [ + { + "DataId": 1013420, + "Position": { + "X": -511.46716, + "Y": 50, + "Z": 347.0968 + }, + "TerritoryId": 400, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "The Churning Mists - Zenith", + "PickUpQuestId": 1828, + "SkipConditions": { + "AetheryteShortcutIf": { + "QuestsCompleted": [ + 1828 + ] + } + } + }, { "DataId": 1013172, "Position": { @@ -30,7 +49,6 @@ }, "TerritoryId": 400, "InteractionType": "CompleteQuest", - "AetheryteShortcut": "The Churning Mists - Zenith", "Fly": true } ] diff --git a/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1641_The Sins of Antiquity.json b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1641_The Sins of Antiquity.json index 8450034b..c586d7d2 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1641_The Sins of Antiquity.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A4-Ishgard/1641_The Sins of Antiquity.json @@ -21,6 +21,18 @@ { "Sequence": 255, "Steps": [ + { + "DataId": 1014720, + "Position": { + "X": 13.809326, + "Y": 15.96505, + "Z": -13.870483 + }, + "StopDistance": 7, + "TerritoryId": 419, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1874 + }, { "DataId": 1011223, "Position": { @@ -37,8 +49,9 @@ "Yes": true } ], + "AetheryteShortcut": "Ishgard", "AethernetShortcut": [ - "[Ishgard] The Last Vigil", + "[Ishgard] Aetheryte Plaza", "[Ishgard] The Forgotten Knight" ] }, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1644_Familiar Faces.json b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1644_Familiar Faces.json index 822f3dde..c65d6815 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1644_Familiar Faces.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1644_Familiar Faces.json @@ -38,7 +38,7 @@ "Z": 113.54166 }, "TerritoryId": 401, - "InteractionType": "SinglePlayerDuty", + "InteractionType": "Emote", "Emote": "lookout", "StopDistance": 0.25 } @@ -54,10 +54,9 @@ "Z": 77.39858 }, "TerritoryId": 401, - "InteractionType": "Emote", + "InteractionType": "SinglePlayerDuty", "Emote": "lookout", - "StopDistance": 0.25, - "Comment": "Solo Duty triggered by emoting?" + "StopDistance": 0.25 } ] }, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1647_Bolt, Chain, and Island.json b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1647_Bolt, Chain, and Island.json index e83bee3d..25028e99 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1647_Bolt, Chain, and Island.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1647_Bolt, Chain, and Island.json @@ -20,6 +20,17 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1012069, + "Position": { + "X": -647.0283, + "Y": -51.05719, + "Z": -417.74628 + }, + "TerritoryId": 401, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1909 + }, { "DataId": 1012064, "Position": { @@ -35,6 +46,17 @@ { "Sequence": 2, "Steps": [ + { + "DataId": 1012068, + "Position": { + "X": -597.0398, + "Y": -51.05185, + "Z": -387.0451 + }, + "TerritoryId": 401, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1910 + }, { "DataId": 2006231, "Position": { @@ -68,6 +90,7 @@ "Y": -14.730623, "Z": -537.56006 }, + "StopDistance": 7, "TerritoryId": 401, "InteractionType": "Interact", "DialogueChoices": [ @@ -100,7 +123,7 @@ "Y": -14.153766, "Z": -543.0228 }, - "StopDistance": 5, + "StopDistance": 7, "TerritoryId": 401, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1648_A Difference of Opinion.json b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1648_A Difference of Opinion.json index f4924843..27c692ab 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1648_A Difference of Opinion.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A5-Sea of Clouds/1648_A Difference of Opinion.json @@ -12,7 +12,7 @@ "Y": -14.153766, "Z": -543.0228 }, - "StopDistance": 5, + "StopDistance": 7, "TerritoryId": 401, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1653_Tataru's Surprise.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1653_Tataru's Surprise.json index 9285d55a..96b7dec9 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1653_Tataru's Surprise.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1653_Tataru's Surprise.json @@ -21,6 +21,15 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": 43.620056, + "Y": -7.9655867, + "Z": 103.63884 + }, + "TerritoryId": 132, + "InteractionType": "WalkTo" + }, { "DataId": 1000691, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1654_Onward to Sharlayan.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1654_Onward to Sharlayan.json index 92e5a36f..9d70443d 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1654_Onward to Sharlayan.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1654_Onward to Sharlayan.json @@ -45,7 +45,8 @@ }, "TerritoryId": 398, "InteractionType": "CompleteQuest", - "AetheryteShortcut": "The Dravanian Forelands - Tailfeather" + "AetheryteShortcut": "The Dravanian Forelands - Tailfeather", + "Fly": true } ] } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1656_Golems Begone.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1656_Golems Begone.json index 28768729..55c9f0b5 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1656_Golems Begone.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1656_Golems Begone.json @@ -27,6 +27,7 @@ "Y": 205.62819, "Z": 26.901611 }, + "StopDistance": 7, "TerritoryId": 478, "InteractionType": "Interact" } @@ -47,7 +48,15 @@ "$": "0 0 0 0 0 0 -> 1 0 0 0 0 64", "ChatMessage": { "Key": "TEXT_HEAVNA607_01656_SAYTODO_000" - } + }, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 1012413, @@ -60,7 +69,15 @@ "InteractionType": "Say", "ChatMessage": { "Key": "TEXT_HEAVNA607_01656_SAYTODO_000" - } + }, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } ] }, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1657_An Illuminati Incident.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1657_An Illuminati Incident.json index f8924a38..9f25ebda 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1657_An Illuminati Incident.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1657_An Illuminati Incident.json @@ -20,6 +20,21 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1012287, + "Position": { + "X": -28.397034, + "Y": 100.969696, + "Z": -186.4195 + }, + "TerritoryId": 399, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1936, + "AethernetShortcut": [ + "[Idyllshire] Aetheryte Plaza", + "[Idyllshire] Epilogue Gate (Eastern Hinterlands)" + ] + }, { "DataId": 1012416, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1658_Leaving Idyllshire.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1658_Leaving Idyllshire.json index 973360b2..d4516d63 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1658_Leaving Idyllshire.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1658_Leaving Idyllshire.json @@ -20,6 +20,17 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1012102, + "Position": { + "X": 72.40405, + "Y": 205.6815, + "Z": 31.631958 + }, + "TerritoryId": 478, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1945 + }, { "DataId": 1012419, "Position": { diff --git a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1659_Matoya's Cave.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1659_Matoya's Cave.json index 3c27ba55..c13a7192 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1659_Matoya's Cave.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1659_Matoya's Cave.json @@ -21,6 +21,17 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1012133, + "Position": { + "X": -26.840637, + "Y": 206.49944, + "Z": 28.67163 + }, + "TerritoryId": 478, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1963 + }, { "Position": { "X": 71.86769, @@ -29,18 +40,15 @@ }, "TerritoryId": 478, "InteractionType": "WalkTo", - "TargetTerritoryId": 399 - }, - { - "DataId": 2006210, - "Position": { - "X": -487.48004, - "Y": 144.64026, - "Z": -285.359 + "TargetTerritoryId": 399, + "SkipConditions": { + "StepIf": { + "InTerritory": [ + 399 + ] + } }, - "TerritoryId": 399, - "InteractionType": "AttuneAetherCurrent", - "AetherCurrentId": 2818088 + "$": "Skipped if already in the Hinterlands, since 'Taking Stock' already leaves you closer to the entrance to Matoya's cave" }, { "DataId": 2006214, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1660_Forbidden Knowledge.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1660_Forbidden Knowledge.json index 1a656cdf..cf7fe15e 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1660_Forbidden Knowledge.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1660_Forbidden Knowledge.json @@ -44,7 +44,7 @@ "Y": 38.43, "Z": 3.5552979 }, - "StopDistance": 7, + "StopDistance": 6, "TerritoryId": 463, "InteractionType": "Interact" } @@ -53,6 +53,17 @@ { "Sequence": 3, "Steps": [ + { + "DataId": 1012141, + "Position": { + "X": 35.690796, + "Y": 38.43, + "Z": 12.985352 + }, + "TerritoryId": 463, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 1966 + }, { "DataId": 2005337, "Position": { @@ -114,7 +125,8 @@ }, "TerritoryId": 399, "InteractionType": "WalkTo", - "DisableNavmesh": true + "DisableNavmesh": true, + "Mount": true }, { "DataId": 2005336, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1662_Hour of Departure.json b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1662_Hour of Departure.json index ddf0e6ea..85aaee24 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1662_Hour of Departure.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A6-The Dravanian Hinterlands/1662_Hour of Departure.json @@ -28,6 +28,7 @@ "Y": -14.52896, "Z": 41.153564 }, + "StopDistance": 7, "TerritoryId": 419, "InteractionType": "Interact" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1663_The First Flight of the Excelsior.json b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1663_The First Flight of the Excelsior.json index 910a94e5..d5325ed2 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1663_The First Flight of the Excelsior.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1663_The First Flight of the Excelsior.json @@ -61,7 +61,8 @@ "Z": -659.2356 }, "TerritoryId": 402, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DisableNavmesh": true } ] }, diff --git a/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1666_Chimerical Maintenance.json b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1666_Chimerical Maintenance.json index f1727762..06fed283 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1666_Chimerical Maintenance.json +++ b/QuestPaths/3.x - Heavensward/MSQ/A7-Azys Lla/1666_Chimerical Maintenance.json @@ -35,6 +35,15 @@ { "Sequence": 2, "Steps": [ + { + "Position": { + "X": 642.1002, + "Y": -32.964188, + "Z": -532.8383 + }, + "TerritoryId": 402, + "InteractionType": "WalkTo" + }, { "DataId": 2005568, "Position": { From 86f764aca33b72de0e3fce29788f425e85764eb3 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 31 Aug 2024 22:31:06 +0200 Subject: [PATCH 60/69] Reduce the max melee distance for RSR --- .../Controller/CombatModules/RotationSolverRebornModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs b/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs index 0af5fda4..8d0484d6 100644 --- a/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs +++ b/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs @@ -85,7 +85,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 : 3f; + float maxDistance = player.ClassJob.GameData?.Role is 3 or 4 ? 20f : 2.9f; if (actualDistance - hitboxOffset >= maxDistance) { if (actualDistance - hitboxOffset <= 5) From d7aa4243d7396a591a8c858f9307017c7e351eb0 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 1 Sep 2024 14:21:26 +0200 Subject: [PATCH 61/69] Add EnemySpawnType - AfterAction --- QuestPaths/quest-v1.json | 1 + .../Questing/Converter/EnemySpawnTypeConverter.cs | 1 + Questionable.Model/Questing/EEnemySpawnType.cs | 1 + .../Controller/Steps/Interactions/Action.cs | 9 +++++++-- .../Controller/Steps/Interactions/Combat.cs | 14 ++++++++++++++ 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index c7ebd5fa..69b6c854 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -584,6 +584,7 @@ "AutoOnEnterArea", "AfterInteraction", "AfterItemUse", + "AfterAction", "OverworldEnemies" ] }, diff --git a/Questionable.Model/Questing/Converter/EnemySpawnTypeConverter.cs b/Questionable.Model/Questing/Converter/EnemySpawnTypeConverter.cs index e97faa4f..d37c5b7c 100644 --- a/Questionable.Model/Questing/Converter/EnemySpawnTypeConverter.cs +++ b/Questionable.Model/Questing/Converter/EnemySpawnTypeConverter.cs @@ -9,6 +9,7 @@ public sealed class EnemySpawnTypeConverter() : EnumConverter(V { { EEnemySpawnType.AfterInteraction, "AfterInteraction" }, { EEnemySpawnType.AfterItemUse, "AfterItemUse" }, + { EEnemySpawnType.AfterAction, "AfterAction" }, { EEnemySpawnType.AutoOnEnterArea, "AutoOnEnterArea" }, { EEnemySpawnType.OverworldEnemies, "OverworldEnemies" }, }; diff --git a/Questionable.Model/Questing/EEnemySpawnType.cs b/Questionable.Model/Questing/EEnemySpawnType.cs index 3c42b9f4..f119ea08 100644 --- a/Questionable.Model/Questing/EEnemySpawnType.cs +++ b/Questionable.Model/Questing/EEnemySpawnType.cs @@ -9,6 +9,7 @@ public enum EEnemySpawnType None = 0, AfterInteraction, AfterItemUse, + AfterAction, AutoOnEnterArea, OverworldEnemies, } diff --git a/Questionable/Controller/Steps/Interactions/Action.cs b/Questionable/Controller/Steps/Interactions/Action.cs index a91983b3..6d4da220 100644 --- a/Questionable/Controller/Steps/Interactions/Action.cs +++ b/Questionable/Controller/Steps/Interactions/Action.cs @@ -24,13 +24,18 @@ internal static class Action ArgumentNullException.ThrowIfNull(step.Action); - var task = new UseOnObject(step.DataId, step.Action.Value, gameFunctions, - loggerFactory.CreateLogger()); + var task = OnObject(step.DataId, step.Action.Value); if (step.Action.Value.RequiresMount()) return [task]; else return [mountFactory.Unmount(), task]; } + + public ITask OnObject(uint? dataId, EAction action) + { + return new UseOnObject(dataId, action, gameFunctions, + loggerFactory.CreateLogger()); + } } private sealed class UseOnObject( diff --git a/Questionable/Controller/Steps/Interactions/Combat.cs b/Questionable/Controller/Steps/Interactions/Combat.cs index 39909c56..6657da33 100644 --- a/Questionable/Controller/Steps/Interactions/Combat.cs +++ b/Questionable/Controller/Steps/Interactions/Combat.cs @@ -18,6 +18,7 @@ internal static class Combat Interact.Factory interactFactory, Mount.Factory mountFactory, UseItem.Factory useItemFactory, + Action.Factory actionFactory, QuestFunctions questFunctions) : ITaskFactory { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) @@ -58,6 +59,19 @@ internal static class Combat break; } + case EEnemySpawnType.AfterAction: + { + ArgumentNullException.ThrowIfNull(step.DataId); + ArgumentNullException.ThrowIfNull(step.Action); + + if (!step.Action.Value.RequiresMount()) + yield return mountFactory.Unmount(); + yield return actionFactory.OnObject(step.DataId.Value, step.Action.Value); + yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1)); + yield return CreateTask(quest, sequence, step); + break; + } ; + case EEnemySpawnType.AutoOnEnterArea: if (step.CombatDelaySecondsAtStart == null) yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1)); From 7f348207d3019860f1fed47abe2e620a425ff8d4 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 1 Sep 2024 15:14:28 +0200 Subject: [PATCH 62/69] Add experimental combat module for Magiteknical Failure (aether current quest) --- .../2639_Magiteknical Failure.json | 6 +- Questionable.Model/Questing/EAction.cs | 2 + Questionable/Controller/CombatController.cs | 3 + .../Controller/CombatModules/ICombatModule.cs | 2 + .../CombatModules/Mount128Module.cs | 51 +++++++++++++++++ .../RotationSolverRebornModule.cs | 2 + Questionable/Controller/CommandHandler.cs | 56 ++++++++++++++----- .../Controller/Steps/Interactions/Combat.cs | 10 ++-- Questionable/Functions/GameFunctions.cs | 18 ++++-- Questionable/QuestionablePlugin.cs | 1 + 10 files changed, 125 insertions(+), 26 deletions(-) create mode 100644 Questionable/Controller/CombatModules/Mount128Module.cs diff --git a/QuestPaths/4.x - Stormblood/Aether Currents/The Fringes/2639_Magiteknical Failure.json b/QuestPaths/4.x - Stormblood/Aether Currents/The Fringes/2639_Magiteknical Failure.json index 7f1657a2..ce26036a 100644 --- a/QuestPaths/4.x - Stormblood/Aether Currents/The Fringes/2639_Magiteknical Failure.json +++ b/QuestPaths/4.x - Stormblood/Aether Currents/The Fringes/2639_Magiteknical Failure.json @@ -49,8 +49,7 @@ }, "StopDistance": 0.5, "TerritoryId": 612, - "InteractionType": "Instruction", - "Comment": "Manual combat", + "InteractionType": "Combat", "EnemySpawnType": "AutoOnEnterArea", "KillEnemyDataIds": [ 7504 @@ -69,8 +68,7 @@ }, "StopDistance": 2, "TerritoryId": 612, - "InteractionType": "Instruction", - "Comment": "Manual combat", + "InteractionType": "Combat", "EnemySpawnType": "AutoOnEnterArea", "KillEnemyDataIds": [ 7505 diff --git a/Questionable.Model/Questing/EAction.cs b/Questionable.Model/Questing/EAction.cs index 5ca20daf..89605e87 100644 --- a/Questionable.Model/Questing/EAction.cs +++ b/Questionable.Model/Questing/EAction.cs @@ -15,6 +15,8 @@ public enum EAction BuffetSanuwa = 4931, BuffetGriffin = 4583, Fumigate = 5872, + MagitekPulse = 8624, + MagitekThunder = 8625, SiphonSnout = 18187, Cannonfire = 20121, RedGulal = 29382, diff --git a/Questionable/Controller/CombatController.cs b/Questionable/Controller/CombatController.cs index 2a7c08d9..d1ff66be 100644 --- a/Questionable/Controller/CombatController.cs +++ b/Questionable/Controller/CombatController.cs @@ -191,6 +191,9 @@ internal sealed class CombatController : IDisposable { if (gameObject is IBattleNpc battleNpc) { + if (_currentFight != null && !_currentFight.Module.CanAttack(battleNpc)) + return 0; + // TODO this works as somewhat of a delay between killing enemies if certain items/flags are checked // but also delays killing the next enemy a little if (_currentFight == null || _currentFight.Data.SpawnType != EEnemySpawnType.OverworldEnemies || diff --git a/Questionable/Controller/CombatModules/ICombatModule.cs b/Questionable/Controller/CombatModules/ICombatModule.cs index 1aec57cc..542e2d6f 100644 --- a/Questionable/Controller/CombatModules/ICombatModule.cs +++ b/Questionable/Controller/CombatModules/ICombatModule.cs @@ -13,4 +13,6 @@ internal interface ICombatModule void Update(IGameObject nextTarget); void MoveToTarget(IGameObject nextTarget); + + bool CanAttack(IBattleNpc target); } diff --git a/Questionable/Controller/CombatModules/Mount128Module.cs b/Questionable/Controller/CombatModules/Mount128Module.cs new file mode 100644 index 00000000..39ef13cc --- /dev/null +++ b/Questionable/Controller/CombatModules/Mount128Module.cs @@ -0,0 +1,51 @@ +using System; +using System.Numerics; +using Dalamud.Game.ClientState.Objects.Types; +using Questionable.Functions; +using Questionable.Model; +using Questionable.Model.Questing; + +namespace Questionable.Controller.CombatModules; + +/// +/// Commandeered Magitek Armor; used in 'Magiteknical Failure' quest. +/// +internal sealed class Mount128Module : ICombatModule +{ + public const ushort MountId = 128; + private readonly EAction[] _actions = [EAction.MagitekThunder, EAction.MagitekPulse]; + + private readonly MovementController _movementController; + private readonly GameFunctions _gameFunctions; + + + public Mount128Module(MovementController movementController, GameFunctions gameFunctions) + { + _movementController = movementController; + _gameFunctions = gameFunctions; + } + + public bool IsLoaded => _gameFunctions.GetMountId() == MountId; + + public bool Start() => true; + + public bool Stop() => true; + + public void Update(IGameObject gameObject) + { + if (_movementController.IsPathfinding || _movementController.IsPathRunning) + return; + + foreach (EAction action in _actions) + { + if (_gameFunctions.UseAction(gameObject, action, checkCanUse: false)) + return; + } + } + + public void MoveToTarget(IGameObject gameObject) + { + } + + public bool CanAttack(IBattleNpc target) => target.DataId is 7504 or 7505; +} diff --git a/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs b/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs index 8d0484d6..72e13ae7 100644 --- a/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs +++ b/Questionable/Controller/CombatModules/RotationSolverRebornModule.cs @@ -119,6 +119,8 @@ internal sealed class RotationSolverRebornModule : ICombatModule, IDisposable } } + public bool CanAttack(IBattleNpc target) => true; + public void Dispose() => Stop(); [PublicAPI] diff --git a/Questionable/Controller/CommandHandler.cs b/Questionable/Controller/CommandHandler.cs index dbf8ade5..776f615a 100644 --- a/Questionable/Controller/CommandHandler.cs +++ b/Questionable/Controller/CommandHandler.cs @@ -3,16 +3,20 @@ using System.Linq; using Dalamud.Game.ClientState.Objects; using Dalamud.Game.Command; using Dalamud.Plugin.Services; +using Lumina.Excel.GeneratedSheets; using Questionable.Functions; -using Questionable.Model; using Questionable.Model.Questing; using Questionable.Windows; using Questionable.Windows.QuestComponents; +using Quest = Questionable.Model.Quest; namespace Questionable.Controller; internal sealed class CommandHandler : IDisposable { + private const string MessageTag = "Questionable"; + private const ushort TagColor = 576; + private readonly ICommandManager _commandManager; private readonly IChatGui _chatGui; private readonly QuestController _questController; @@ -24,6 +28,8 @@ internal sealed class CommandHandler : IDisposable private readonly QuestSelectionWindow _questSelectionWindow; private readonly ITargetManager _targetManager; private readonly QuestFunctions _questFunctions; + private readonly GameFunctions _gameFunctions; + private readonly IDataManager _dataManager; public CommandHandler( ICommandManager commandManager, @@ -36,7 +42,9 @@ internal sealed class CommandHandler : IDisposable QuestWindow questWindow, QuestSelectionWindow questSelectionWindow, ITargetManager targetManager, - QuestFunctions questFunctions) + QuestFunctions questFunctions, + GameFunctions gameFunctions, + IDataManager dataManager) { _commandManager = commandManager; _chatGui = chatGui; @@ -49,6 +57,8 @@ internal sealed class CommandHandler : IDisposable _questSelectionWindow = questSelectionWindow; _targetManager = targetManager; _questFunctions = questFunctions; + _gameFunctions = gameFunctions; + _dataManager = dataManager; _commandManager.AddHandler("/qst", new CommandInfo(ProcessCommand) { @@ -108,12 +118,16 @@ internal sealed class CommandHandler : IDisposable _questSelectionWindow.OpenForCurrentZone(); break; + case "mountid": + PrintMountId(); + break; + case "": _questWindow.Toggle(); break; default: - _chatGui.PrintError($"Unknown subcommand {parts[0]}", "Questionable"); + _chatGui.PrintError($"Unknown subcommand {parts[0]}", MessageTag, TagColor); break; } } @@ -122,7 +136,7 @@ internal sealed class CommandHandler : IDisposable { if (!_debugOverlay.DrawConditions()) { - _chatGui.PrintError("[Questionable] You don't have the debug overlay enabled."); + _chatGui.PrintError("You don't have the debug overlay enabled.", MessageTag, TagColor); return; } @@ -131,15 +145,15 @@ internal sealed class CommandHandler : IDisposable if (_questRegistry.TryGetQuest(questId, out Quest? quest)) { _debugOverlay.HighlightedQuest = quest.Id; - _chatGui.Print($"[Questionable] Set highlighted quest to {questId} ({quest.Info.Name})."); + _chatGui.Print($"Set highlighted quest to {questId} ({quest.Info.Name}).", MessageTag, TagColor); } else - _chatGui.PrintError($"[Questionable] Unknown quest {questId}."); + _chatGui.PrintError($"Unknown quest {questId}.", MessageTag, TagColor); } else { _debugOverlay.HighlightedQuest = null; - _chatGui.Print("[Questionable] Cleared highlighted quest."); + _chatGui.Print("Cleared highlighted quest.", MessageTag, TagColor); } } @@ -148,21 +162,21 @@ internal sealed class CommandHandler : IDisposable if (arguments.Length >= 1 && ElementId.TryFromString(arguments[0], out ElementId? questId) && questId != null) { if (_questFunctions.IsQuestLocked(questId)) - _chatGui.PrintError($"[Questionable] Quest {questId} is locked."); + _chatGui.PrintError($"Quest {questId} is locked.", MessageTag, TagColor); else if (_questRegistry.TryGetQuest(questId, out Quest? quest)) { _questController.SetNextQuest(quest); - _chatGui.Print($"[Questionable] Set next quest to {questId} ({quest.Info.Name})."); + _chatGui.Print($"Set next quest to {questId} ({quest.Info.Name}).", MessageTag, TagColor); } else { - _chatGui.PrintError($"[Questionable] Unknown quest {questId}."); + _chatGui.PrintError($"Unknown quest {questId}.", MessageTag, TagColor); } } else { _questController.SetNextQuest(null); - _chatGui.Print("[Questionable] Cleared next quest."); + _chatGui.Print("Cleared next quest.", MessageTag, TagColor); } } @@ -173,18 +187,32 @@ internal sealed class CommandHandler : IDisposable if (_questRegistry.TryGetQuest(questId, out Quest? quest)) { _questController.SimulateQuest(quest); - _chatGui.Print($"[Questionable] Simulating quest {questId} ({quest.Info.Name})."); + _chatGui.Print($"Simulating quest {questId} ({quest.Info.Name}).", MessageTag, TagColor); } else - _chatGui.PrintError($"[Questionable] Unknown quest {questId}."); + _chatGui.PrintError($"Unknown quest {questId}.", MessageTag, TagColor); } else { _questController.SimulateQuest(null); - _chatGui.Print("[Questionable] Cleared simulated quest."); + _chatGui.Print("Cleared simulated quest.", MessageTag, TagColor); } } + private void PrintMountId() + { + ushort? mountId = _gameFunctions.GetMountId(); + if (mountId != null) + { + var row = _dataManager.GetExcelSheet()!.GetRow(mountId.Value); + _chatGui.Print( + $"Mount ID: {mountId}, Name: {row?.Singular}, Obtainable: {(row?.Order == -1 ? "No" : "Yes")}", + MessageTag, TagColor); + } + else + _chatGui.Print("You are not mounted.", MessageTag, TagColor); + } + public void Dispose() { _commandManager.RemoveHandler("/qst"); diff --git a/Questionable/Controller/Steps/Interactions/Combat.cs b/Questionable/Controller/Steps/Interactions/Combat.cs index 6657da33..eab500dd 100644 --- a/Questionable/Controller/Steps/Interactions/Combat.cs +++ b/Questionable/Controller/Steps/Interactions/Combat.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using Microsoft.Extensions.DependencyInjection; +using Questionable.Controller.CombatModules; using Questionable.Controller.Steps.Common; using Questionable.Controller.Steps.Shared; using Questionable.Controller.Utils; @@ -19,7 +19,8 @@ internal static class Combat Mount.Factory mountFactory, UseItem.Factory useItemFactory, Action.Factory actionFactory, - QuestFunctions questFunctions) : ITaskFactory + QuestFunctions questFunctions, + GameFunctions gameFunctions) : ITaskFactory { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { @@ -28,7 +29,8 @@ internal static class Combat ArgumentNullException.ThrowIfNull(step.EnemySpawnType); - yield return mountFactory.Unmount(); + if (gameFunctions.GetMountId() != Mount128Module.MountId) + yield return mountFactory.Unmount(); if (step.CombatDelaySecondsAtStart != null) { @@ -70,7 +72,7 @@ internal static class Combat yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1)); yield return CreateTask(quest, sequence, step); break; - } ; + } case EEnemySpawnType.AutoOnEnterArea: if (step.CombatDelaySecondsAtStart == null) diff --git a/Questionable/Functions/GameFunctions.cs b/Questionable/Functions/GameFunctions.cs index 51795705..90703500 100644 --- a/Questionable/Functions/GameFunctions.cs +++ b/Questionable/Functions/GameFunctions.cs @@ -81,8 +81,9 @@ internal sealed unsafe class GameFunctions if (_questFunctions.IsQuestAccepted(new QuestId(3304)) && _condition[ConditionFlag.Mounted]) { - BattleChara* battleChara = (BattleChara*)(_clientState.LocalPlayer?.Address ?? 0); - if (battleChara != null && battleChara->Mount.MountId == 198) // special quest amaro, not the normal one + // special quest amaro, not the normal one + // TODO Check if this also applies to beast tribe mounts + if (GetMountId() == 198) return true; } @@ -92,6 +93,15 @@ internal sealed unsafe class GameFunctions playerState->IsAetherCurrentZoneComplete(aetherCurrentCompFlgSet); } + public ushort? GetMountId() + { + BattleChara* battleChara = (BattleChara*)(_clientState.LocalPlayer?.Address ?? 0); + if (battleChara != null && battleChara->Mount.MountId != 0) + return battleChara->Mount.MountId; + else + return null; + } + public bool IsFlyingUnlockedInCurrentZone() => IsFlyingUnlocked(_clientState.TerritoryType); public bool IsAetherCurrentUnlocked(uint aetherCurrentId) @@ -210,10 +220,10 @@ internal sealed unsafe class GameFunctions return false; } - public bool UseAction(IGameObject gameObject, EAction action) + public bool UseAction(IGameObject gameObject, EAction action, bool checkCanUse = true) { var actionRow = _dataManager.GetExcelSheet()!.GetRow((uint)action)!; - if (!ActionManager.CanUseActionOnTarget((uint)action, (GameObject*)gameObject.Address)) + if (checkCanUse && !ActionManager.CanUseActionOnTarget((uint)action, (GameObject*)gameObject.Address)) { _logger.LogWarning("Can not use action {Action} on target {Target}", action, gameObject); return false; diff --git a/Questionable/QuestionablePlugin.cs b/Questionable/QuestionablePlugin.cs index d1a5b543..88ebc1b3 100644 --- a/Questionable/QuestionablePlugin.cs +++ b/Questionable/QuestionablePlugin.cs @@ -185,6 +185,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); } From 7c62a85a8a342f70d0a7620b44ae58cceb297b78 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 1 Sep 2024 15:44:59 +0200 Subject: [PATCH 63/69] Make sequence 0 non-interruptible, as you otherwise get quests with a lower priority than the MSQ --- Questionable/Controller/QuestController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Questionable/Controller/QuestController.cs b/Questionable/Controller/QuestController.cs index 70512f8a..2fcef5eb 100644 --- a/Questionable/Controller/QuestController.cs +++ b/Questionable/Controller/QuestController.cs @@ -724,7 +724,7 @@ internal sealed class QuestController : MiniTaskController, IDi return false; var (currentQuest, type) = details.Value; - if (type != ECurrentQuestType.Normal) + if (type != ECurrentQuestType.Normal || currentQuest.Sequence == 0) return false; if (currentQuest.Quest.Info.AlliedSociety != EAlliedSociety.None) From 272050d11b0483aba3550e32f2c9989c6b5c8ed3 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 1 Sep 2024 20:35:50 +0200 Subject: [PATCH 64/69] Don't allow debug overlay to be closed via ESC --- Questionable/Windows/DebugOverlay.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Questionable/Windows/DebugOverlay.cs b/Questionable/Windows/DebugOverlay.cs index e629fe01..c41daf60 100644 --- a/Questionable/Windows/DebugOverlay.cs +++ b/Questionable/Windows/DebugOverlay.cs @@ -45,6 +45,8 @@ internal sealed class DebugOverlay : Window Size = ImGui.GetIO().DisplaySize; SizeCondition = ImGuiCond.Always; IsOpen = true; + ShowCloseButton = false; + RespectCloseHotkey = false; } public ElementId? HighlightedQuest { get; set; } From e8b912411968fd8c3c3e6eb1aad5b17c3f52da2a Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 1 Sep 2024 20:36:06 +0200 Subject: [PATCH 65/69] Code cleanup --- Questionable/Functions/QuestFunctions.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Questionable/Functions/QuestFunctions.cs b/Questionable/Functions/QuestFunctions.cs index b36e7c36..e346822d 100644 --- a/Questionable/Functions/QuestFunctions.cs +++ b/Questionable/Functions/QuestFunctions.cs @@ -135,17 +135,14 @@ internal sealed unsafe class QuestFunctions currentQuest = new QuestId(questManager->NormalQuests[trackedQuest.Index].QuestId); if (_questRegistry.IsKnownQuest(currentQuest)) return (currentQuest, QuestManager.GetQuestSequence(currentQuest.Value)); - break; + continue; case 2: // leve currentQuest = new LeveId(questManager->LeveQuests[trackedQuest.Index].LeveId); if (_questRegistry.IsKnownQuest(currentQuest)) return (currentQuest, questManager->GetLeveQuestById(currentQuest.Value)->Sequence); - break; + continue; } - - if (_questRegistry.IsKnownQuest(currentQuest)) - return (currentQuest, QuestManager.GetQuestSequence(currentQuest.Value)); } ElementId? priorityQuest = GetNextPriorityQuestThatCanBeAccepted(); From 8848947acae44772a219620a24aec96abb2807f5 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sun, 1 Sep 2024 21:49:33 +0200 Subject: [PATCH 66/69] Update gathering paths --- .../4.x - Stormblood/The Ruby Sea/490_Rasen Kaikyo_MIN.json | 3 ++- .../4.x - Stormblood/The Ruby Sea/511_Rasen Kaikyo_BTN.json | 3 ++- .../4.x - Stormblood/The Ruby Sea/529_Rasen Kaikyo_BTN.json | 3 ++- .../The Ruby Sea/730_The Kobayashi Maru_MIN.json | 3 ++- .../The Tempest/927_The Norvrandt Slope_BTN.json | 5 +++-- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/GatheringPaths/4.x - Stormblood/The Ruby Sea/490_Rasen Kaikyo_MIN.json b/GatheringPaths/4.x - Stormblood/The Ruby Sea/490_Rasen Kaikyo_MIN.json index 81b0c73c..def9bda9 100644 --- a/GatheringPaths/4.x - Stormblood/The Ruby Sea/490_Rasen Kaikyo_MIN.json +++ b/GatheringPaths/4.x - Stormblood/The Ruby Sea/490_Rasen Kaikyo_MIN.json @@ -10,7 +10,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "AetheryteShortcut": "Ruby Sea - Tamamizu" + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "RestartNavigationIfCancelled": false }, { "TerritoryId": 613, diff --git a/GatheringPaths/4.x - Stormblood/The Ruby Sea/511_Rasen Kaikyo_BTN.json b/GatheringPaths/4.x - Stormblood/The Ruby Sea/511_Rasen Kaikyo_BTN.json index d9b9f746..ec39be55 100644 --- a/GatheringPaths/4.x - Stormblood/The Ruby Sea/511_Rasen Kaikyo_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Ruby Sea/511_Rasen Kaikyo_BTN.json @@ -10,7 +10,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "AetheryteShortcut": "Ruby Sea - Tamamizu" + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "RestartNavigationIfCancelled": false }, { "TerritoryId": 613, diff --git a/GatheringPaths/4.x - Stormblood/The Ruby Sea/529_Rasen Kaikyo_BTN.json b/GatheringPaths/4.x - Stormblood/The Ruby Sea/529_Rasen Kaikyo_BTN.json index 3a159087..5528393a 100644 --- a/GatheringPaths/4.x - Stormblood/The Ruby Sea/529_Rasen Kaikyo_BTN.json +++ b/GatheringPaths/4.x - Stormblood/The Ruby Sea/529_Rasen Kaikyo_BTN.json @@ -10,7 +10,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "AetheryteShortcut": "Ruby Sea - Tamamizu" + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "RestartNavigationIfCancelled": false }, { "TerritoryId": 613, diff --git a/GatheringPaths/4.x - Stormblood/The Ruby Sea/730_The Kobayashi Maru_MIN.json b/GatheringPaths/4.x - Stormblood/The Ruby Sea/730_The Kobayashi Maru_MIN.json index 959b1210..4d8d1589 100644 --- a/GatheringPaths/4.x - Stormblood/The Ruby Sea/730_The Kobayashi Maru_MIN.json +++ b/GatheringPaths/4.x - Stormblood/The Ruby Sea/730_The Kobayashi Maru_MIN.json @@ -10,7 +10,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "AetheryteShortcut": "Ruby Sea - Tamamizu" + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "RestartNavigationIfCancelled": false }, { "TerritoryId": 613, diff --git a/GatheringPaths/5.x - Shadowbringers/The Tempest/927_The Norvrandt Slope_BTN.json b/GatheringPaths/5.x - Shadowbringers/The Tempest/927_The Norvrandt Slope_BTN.json index 36a1044b..5eda959e 100644 --- a/GatheringPaths/5.x - Shadowbringers/The Tempest/927_The Norvrandt Slope_BTN.json +++ b/GatheringPaths/5.x - Shadowbringers/The Tempest/927_The Norvrandt Slope_BTN.json @@ -4,7 +4,8 @@ "Steps": [ { "TerritoryId": 818, - "InteractionType": "None" + "InteractionType": "None", + "AetheryteShortcut": "Tempest - Ondo Cups" } ], "Groups": [ @@ -128,4 +129,4 @@ ] } ] -} \ No newline at end of file +} From 617e1d11c388377fd8df8dc31bee80f3e08ab542 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 2 Sep 2024 21:36:34 +0200 Subject: [PATCH 67/69] Explicitly specify territoryId in NearPosition --- .../RoslynElements/SkipConditionsExtensions.cs | 3 +++ .../1080_Only You Can Prevent Forest Ire.json | 6 ++++-- .../WHM/1082_Following in His Footsteps.json | 12 ++++++++---- .../Class Quests/WHM/1083_Yearn for the Urn.json | 6 ++++-- .../WHM/1084_Heart of the Forest.json | 6 ++++-- .../Class Quests/WHM/1719_Taint Misbehaving.json | 3 ++- .../WHM/1724_Trials of the Padjals.json | 3 ++- .../Class Quests/WHM/1725_Hands of Healing.json | 9 ++++++--- .../WAR/2904_The Heart of the Problem.json | 16 +++++++++++++++- .../WHM/2414_Unease in East End.json | 3 ++- .../3624_A Voice from the Void.json | 3 ++- .../Magical Ranged/3625_Echoes of the Past.json | 3 ++- .../Magical Ranged/3626_Nyelbert's Lament.json | 3 ++- .../3627_Taynor's Training Day.json | 3 ++- .../Magical Ranged/3628_A Tearful Reunion.json | 3 ++- .../Dailies/4610_A Brewing Reputation.json | 3 ++- QuestPaths/quest-v1.json | 12 ++++++++++-- .../Questing/NearPositionCondition.cs | 1 + .../ClassQuestShouldHaveShortcutValidator.cs | 6 ++++++ 19 files changed, 79 insertions(+), 25 deletions(-) create mode 100644 Questionable/Validation/Validators/ClassQuestShouldHaveShortcutValidator.cs diff --git a/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs b/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs index 6307020f..02084db1 100644 --- a/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs +++ b/QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs @@ -109,6 +109,9 @@ internal static class SkipConditionsExtensions .AsSyntaxNodeOrToken(), Assignment(nameof(NearPositionCondition.MaximumDistance), nearPositionCondition.MaximumDistance, emptyCondition.MaximumDistance) + .AsSyntaxNodeOrToken(), + Assignment(nameof(NearPositionCondition.TerritoryId), + nearPositionCondition.TerritoryId, emptyCondition.TerritoryId) .AsSyntaxNodeOrToken())))); } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1080_Only You Can Prevent Forest Ire.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1080_Only You Can Prevent Forest Ire.json index 729b4b3f..7ebd65e2 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1080_Only You Can Prevent Forest Ire.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1080_Only You Can Prevent Forest Ire.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -150,7 +151,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1082_Following in His Footsteps.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1082_Following in His Footsteps.json index 4be0c9df..5b4cd824 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1082_Following in His Footsteps.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1082_Following in His Footsteps.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -202,7 +203,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -293,7 +295,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -409,7 +412,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1083_Yearn for the Urn.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1083_Yearn for the Urn.json index c71f25c4..af438098 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1083_Yearn for the Urn.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1083_Yearn for the Urn.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -194,7 +195,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1084_Heart of the Forest.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1084_Heart of the Forest.json index 727f1685..77a1c616 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1084_Heart of the Forest.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1084_Heart of the Forest.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -117,7 +118,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json index fe8075f0..7843c2cf 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1719_Taint Misbehaving.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json index 637c7e44..a109c03c 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1724_Trials of the Padjals.json @@ -56,7 +56,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json index 1a7b66ca..e5222cab 100644 --- a/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json +++ b/QuestPaths/3.x - Heavensward/Class Quests/WHM/1725_Hands of Healing.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -116,7 +117,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -244,7 +246,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WAR/2904_The Heart of the Problem.json b/QuestPaths/4.x - Stormblood/Class Quests/WAR/2904_The Heart of the Problem.json index c4710dc4..f3cb71d0 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/WAR/2904_The Heart of the Problem.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/WAR/2904_The Heart of the Problem.json @@ -13,7 +13,21 @@ "Z": 403.3722 }, "TerritoryId": 622, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Azim Steppe - Reunion", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 525.10876, + "Y": -19.50681, + "Z": 403.3722 + }, + "MaximumDistance": 100, + "TerritoryId": 622 + } + } + } } ] }, diff --git a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json index 35041f7a..c7385a02 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/WHM/2414_Unease in East End.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3624_A Voice from the Void.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3624_A Voice from the Void.json index c2dced21..5d58303b 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3624_A Voice from the Void.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3624_A Voice from the Void.json @@ -23,7 +23,8 @@ "Y": 7.1558266, "Z": -249.1341 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 815 } } } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3625_Echoes of the Past.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3625_Echoes of the Past.json index 9b7b8dde..2eeb073d 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3625_Echoes of the Past.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3625_Echoes of the Past.json @@ -23,7 +23,8 @@ "Y": 7.1558266, "Z": -249.1341 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 815 } } } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3626_Nyelbert's Lament.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3626_Nyelbert's Lament.json index 43368dbd..ca1f720b 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3626_Nyelbert's Lament.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3626_Nyelbert's Lament.json @@ -23,7 +23,8 @@ "Y": 7.1558266, "Z": -249.1341 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 815 } } } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3627_Taynor's Training Day.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3627_Taynor's Training Day.json index 370c4fc1..45c3f672 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3627_Taynor's Training Day.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3627_Taynor's Training Day.json @@ -23,7 +23,8 @@ "Y": 7.1558266, "Z": -249.1341 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 815 } } } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3628_A Tearful Reunion.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3628_A Tearful Reunion.json index 1895ba16..f5e70ecf 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3628_A Tearful Reunion.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3628_A Tearful Reunion.json @@ -23,7 +23,8 @@ "Y": 7.1558266, "Z": -249.1341 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 815 } } } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4610_A Brewing Reputation.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4610_A Brewing Reputation.json index 1e9036a2..8834ff36 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4610_A Brewing Reputation.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4610_A Brewing Reputation.json @@ -157,7 +157,8 @@ "Y": 437.5829, "Z": 333.63843 }, - "MaximumDistance": 100 + "MaximumDistance": 100, + "TerritoryId": 960 } } } diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 69b6c854..ad911e72 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -261,11 +261,15 @@ }, "MaximumDistance": { "type": "number" + }, + "TerritoryId": { + "type": "number" } }, "required": [ "Position", - "MaximumDistance" + "MaximumDistance", + "TerritoryId" ], "additionalProperties": false }, @@ -323,11 +327,15 @@ }, "MaximumDistance": { "type": "number" + }, + "TerritoryId": { + "type": "number" } }, "required": [ "Position", - "MaximumDistance" + "MaximumDistance", + "TerritoryId" ], "additionalProperties": false } diff --git a/Questionable.Model/Questing/NearPositionCondition.cs b/Questionable.Model/Questing/NearPositionCondition.cs index 7c5885ed..ecfba871 100644 --- a/Questionable.Model/Questing/NearPositionCondition.cs +++ b/Questionable.Model/Questing/NearPositionCondition.cs @@ -9,4 +9,5 @@ public sealed class NearPositionCondition [JsonConverter(typeof(VectorConverter))] public Vector3 Position { get; set; } public float MaximumDistance { get; set; } + public ushort TerritoryId { get; set; } } diff --git a/Questionable/Validation/Validators/ClassQuestShouldHaveShortcutValidator.cs b/Questionable/Validation/Validators/ClassQuestShouldHaveShortcutValidator.cs new file mode 100644 index 00000000..405c8f88 --- /dev/null +++ b/Questionable/Validation/Validators/ClassQuestShouldHaveShortcutValidator.cs @@ -0,0 +1,6 @@ +namespace Questionable.Validation.Validators; + +public class ClassQuestShouldHaveShortcut +{ + +} From 8638e291b1248caf088b8242949b8ef3e7e0bd6f Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 2 Sep 2024 21:49:51 +0200 Subject: [PATCH 68/69] Update SB paths + include aether current quests in MSQ (up until Azim Steppe) --- .../2163_As Goes Light, So Goes Darkness.json | 1 + .../MSQ/D-3.3/2247_Litany of Peace.json | 2 + .../MSQ/E-3.4/2348_Honorable Heroes.json | 4 ++ .../The Azim Steppe/2771_Sheep Snatcher.json | 2 +- .../2782_Forty Years and Counting.json | 53 ++++++++++++++----- .../The Fringes/2661_The Hidden Truth.json | 4 +- .../2632_The Palace of Lost Souls.json | 3 +- .../2693_The Sword in the Stone.json | 42 +++------------ .../Yanxia/2724_Something Smells.json | 11 ++++ .../Kurenai/2704_Fathoms Below.json | 3 +- .../Kurenai/2705_A Part of Your World.json | 3 +- .../Kurenai/2706_The Elixir of Life.json | 3 +- .../2453_Best Served with Cold Steel.json | 11 ++++ .../2456_The Prodigal Daughter.json | 5 +- .../2955_Death by a Thousand Rocks.json | 9 +++- .../2461_Where Men Go as One.json | 1 + .../2466_Divide and Conquer.json | 19 +++++++ .../2467_Lies, Damn Lies, and Pirates.json | 13 ++++- .../2469_Not without Incident.json | 2 +- .../2635_Future Rust, Future Dust.json | 38 ++++++------- .../2637_Ye Wayward Brothers.json | 3 +- .../A2-Kugane/2470_The Man from Ul'dah.json | 2 +- .../2475_Making the Catfish Sing.json | 1 + .../2479_To Bend with the Wind.json | 11 ++++ .../A3.1-Ruby Sea/2481_Alisaie's Stones.json | 21 +++++++- .../MSQ/A3.1-Ruby Sea/2482_Under the Sea.json | 11 ++++ .../2484_In Soroban We Trust.json | 14 ++++- .../2486_In Darkness the Magatama Dreams.json | 22 +++++++- .../2488_Breaking and Delivering.json | 23 ++++++-- .../2489_The Lord of the Revel.json | 3 +- .../2490_Tide Goes in, Imperials Go Out.json | 22 ++++++++ .../2491_A Silence in Three Parts.json | 3 +- .../2953_The Arrows of Misfortune.json | 2 + .../A3.2-Yanxia 1/2492_Life after Doma.json | 5 +- .../2494_The Ones We Leave Behind.json | 25 ++++++++- .../A3.2-Yanxia 1/2495_A New Ruby Tithe.json | 31 +++++++++-- .../A3.2-Yanxia 1/2496_The Will to Live.json | 26 ++++++++- .../2497_Daughter of the Deep.json | 16 ++++-- .../A4-Azim Steppe/2501_A Season for War.json | 6 +-- .../2502_An Impossible Dream.json | 13 ++++- .../2505_The Heart of Nations.json | 38 ++++++------- .../2506_A Trial Before the Trial.json | 13 ++++- .../2509_The Labors of Magnai.json | 36 ++++++------- .../2511_Sworn Enemies of the Sun.json | 15 +++--- .../A4-Azim Steppe/2513_A Final Peace.json | 13 ++++- .../MSQ/A4-Azim Steppe/2515_Naadam.json | 37 ++++++------- .../2517_In Crimson They Walked.json | 12 +++-- .../2518_The Hour of Reckoning.json | 2 +- .../2519_The Room Where It Happened.json | 2 +- .../A5-Yanxia 2/2520_Seeds of Despair.json | 3 +- .../2521_The Limits of Our Endurance.json | 5 +- .../2523_On the Eve of Destiny.json | 1 + .../2946_How Tataru Got Her Groove Back.json | 5 +- 53 files changed, 486 insertions(+), 185 deletions(-) diff --git a/QuestPaths/3.x - Heavensward/MSQ/B-3.1/2163_As Goes Light, So Goes Darkness.json b/QuestPaths/3.x - Heavensward/MSQ/B-3.1/2163_As Goes Light, So Goes Darkness.json index f720da44..3b1d87a7 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/B-3.1/2163_As Goes Light, So Goes Darkness.json +++ b/QuestPaths/3.x - Heavensward/MSQ/B-3.1/2163_As Goes Light, So Goes Darkness.json @@ -94,6 +94,7 @@ "Y": 0.022254243, "Z": 4.623413 }, + "StopDistance": 7, "TerritoryId": 433, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/D-3.3/2247_Litany of Peace.json b/QuestPaths/3.x - Heavensward/MSQ/D-3.3/2247_Litany of Peace.json index 192cc0cb..ee1c758c 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/D-3.3/2247_Litany of Peace.json +++ b/QuestPaths/3.x - Heavensward/MSQ/D-3.3/2247_Litany of Peace.json @@ -27,6 +27,7 @@ "Y": 24.458836, "Z": 0.62561035 }, + "StopDistance": 4, "TerritoryId": 418, "InteractionType": "Interact", "DialogueChoices": [ @@ -79,6 +80,7 @@ "Y": 0.022254243, "Z": 4.623413 }, + "StopDistance": 7, "TerritoryId": 433, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/3.x - Heavensward/MSQ/E-3.4/2348_Honorable Heroes.json b/QuestPaths/3.x - Heavensward/MSQ/E-3.4/2348_Honorable Heroes.json index e3a1b231..6be02d16 100644 --- a/QuestPaths/3.x - Heavensward/MSQ/E-3.4/2348_Honorable Heroes.json +++ b/QuestPaths/3.x - Heavensward/MSQ/E-3.4/2348_Honorable Heroes.json @@ -78,6 +78,10 @@ { "Sequence": 255, "Steps": [ + { + "TerritoryId": 146, + "InteractionType": "EquipRecommended" + }, { "DataId": 1017762, "Position": { diff --git a/QuestPaths/4.x - Stormblood/Aether Currents/The Azim Steppe/2771_Sheep Snatcher.json b/QuestPaths/4.x - Stormblood/Aether Currents/The Azim Steppe/2771_Sheep Snatcher.json index 923643c0..3d3167ab 100644 --- a/QuestPaths/4.x - Stormblood/Aether Currents/The Azim Steppe/2771_Sheep Snatcher.json +++ b/QuestPaths/4.x - Stormblood/Aether Currents/The Azim Steppe/2771_Sheep Snatcher.json @@ -28,7 +28,7 @@ "Z": -210.22363 }, "TerritoryId": 622, - "InteractionType": "WaitForManualProgress", + "InteractionType": "Instruction", "Comment": "Snipe sheep" } ] diff --git a/QuestPaths/4.x - Stormblood/Aether Currents/The Azim Steppe/2782_Forty Years and Counting.json b/QuestPaths/4.x - Stormblood/Aether Currents/The Azim Steppe/2782_Forty Years and Counting.json index 549b7566..98a16015 100644 --- a/QuestPaths/4.x - Stormblood/Aether Currents/The Azim Steppe/2782_Forty Years and Counting.json +++ b/QuestPaths/4.x - Stormblood/Aether Currents/The Azim Steppe/2782_Forty Years and Counting.json @@ -50,18 +50,15 @@ }, "TerritoryId": 622, "InteractionType": "Interact", - "$": "QW: 0 0 0 0 0 0 -> QW: 1 16 0 0 0 128" - }, - { - "DataId": 2008926, - "Position": { - "X": 27.634033, - "Y": 115.464966, - "Z": -48.05072 - }, - "TerritoryId": 622, - "InteractionType": "Interact", - "$": "QW: 1 16 0 0 0 128 -> QW: 2 32 0 0 0 192" + "$": "QW: 0 0 0 0 0 0 -> QW: 1 16 0 0 0 128", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 2008927, @@ -71,7 +68,35 @@ "Z": -49.5766 }, "TerritoryId": 622, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "DataId": 2008926, + "Position": { + "X": 27.634033, + "Y": 115.464966, + "Z": -48.05072 + }, + "StopDistance": 4, + "TerritoryId": 622, + "InteractionType": "Interact", + "$": "QW: 1 16 0 0 0 128 -> QW: 2 32 0 0 0 192", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] } ] }, @@ -91,4 +116,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/Aether Currents/The Fringes/2661_The Hidden Truth.json b/QuestPaths/4.x - Stormblood/Aether Currents/The Fringes/2661_The Hidden Truth.json index 62b1a0e5..e3c62d59 100644 --- a/QuestPaths/4.x - Stormblood/Aether Currents/The Fringes/2661_The Hidden Truth.json +++ b/QuestPaths/4.x - Stormblood/Aether Currents/The Fringes/2661_The Hidden Truth.json @@ -83,6 +83,7 @@ "Y": 74.88393, "Z": -118.30322 }, + "StopDistance": 5, "TerritoryId": 612, "InteractionType": "Interact" } @@ -98,10 +99,11 @@ "Y": 75.3867, "Z": -124.712036 }, + "StopDistance": 7, "TerritoryId": 612, "InteractionType": "CompleteQuest" } ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2632_The Palace of Lost Souls.json b/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2632_The Palace of Lost Souls.json index fe72918a..ab947e9d 100644 --- a/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2632_The Palace of Lost Souls.json +++ b/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2632_The Palace of Lost Souls.json @@ -113,7 +113,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "AetheryteShortcut": "Ruby Sea - Tamamizu" + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "RestartNavigationIfCancelled": false }, { "Position": { diff --git a/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2693_The Sword in the Stone.json b/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2693_The Sword in the Stone.json index b6c9665f..b3985897 100644 --- a/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2693_The Sword in the Stone.json +++ b/QuestPaths/4.x - Stormblood/Aether Currents/The Ruby Sea/2693_The Sword in the Stone.json @@ -20,15 +20,6 @@ { "Sequence": 1, "Steps": [ - { - "Position": { - "X": 566.1683, - "Y": -60.550995, - "Z": -134.80696 - }, - "TerritoryId": 613, - "InteractionType": "WalkTo" - }, { "DataId": 1023358, "Position": { @@ -87,9 +78,9 @@ "Steps": [ { "Position": { - "X": 617.86127, - "Y": -29.12958, - "Z": -129.81326 + "X": 617.17053, + "Y": -29.302427, + "Z": -130.22484 }, "TerritoryId": 613, "InteractionType": "Jump", @@ -137,30 +128,13 @@ "Steps": [ { "Position": { - "X": 593.3238, - "Y": -45.048393, - "Z": -152.89952 - }, - "TerritoryId": 613, - "InteractionType": "Jump", - "StopDistance": 0.25, - "JumpDestination": { - "Position": { - "X": 566.00684, - "Y": -61.995552, - "Z": -146.04814 - } - } - }, - { - "Position": { - "X": 566.1683, - "Y": -60.550995, - "Z": -134.80696 + "X": 570.09125, + "Y": -62.583626, + "Z": -145.46727 }, "TerritoryId": 613, "InteractionType": "WalkTo", - "Mount": true + "DisableNavmesh": true }, { "DataId": 1023358, @@ -175,4 +149,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/Aether Currents/Yanxia/2724_Something Smells.json b/QuestPaths/4.x - Stormblood/Aether Currents/Yanxia/2724_Something Smells.json index 7e6bc815..cab3da14 100644 --- a/QuestPaths/4.x - Stormblood/Aether Currents/Yanxia/2724_Something Smells.json +++ b/QuestPaths/4.x - Stormblood/Aether Currents/Yanxia/2724_Something Smells.json @@ -126,6 +126,17 @@ 4 ] }, + { + "Position": { + "X": 445.11514, + "Y": 40.55606, + "Z": -51.57855 + }, + "TerritoryId": 614, + "InteractionType": "WalkTo", + "DisableNavmesh": true, + "Mount": true + }, { "DataId": 2008465, "Position": { diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json index 75966772..21aa856c 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json @@ -13,7 +13,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "AetheryteShortcut": "Ruby Sea - Tamamizu" + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "RestartNavigationIfCancelled": false }, { "Position": { diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json index 1fe63872..d44e7aae 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json @@ -75,7 +75,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "AetheryteShortcut": "Ruby Sea - Tamamizu" + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "RestartNavigationIfCancelled": false }, { "Position": { diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json index 738d856d..0976654b 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json @@ -80,7 +80,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "Mount": true + "Mount": true, + "RestartNavigationIfCancelled": false }, { "Position": { diff --git a/QuestPaths/4.x - Stormblood/MSQ/A1.1-Peaks 1/2453_Best Served with Cold Steel.json b/QuestPaths/4.x - Stormblood/MSQ/A1.1-Peaks 1/2453_Best Served with Cold Steel.json index 822d5bc0..598dd113 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A1.1-Peaks 1/2453_Best Served with Cold Steel.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A1.1-Peaks 1/2453_Best Served with Cold Steel.json @@ -26,6 +26,17 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1019517, + "Position": { + "X": -653.0099, + "Y": 129.91537, + "Z": -510.67374 + }, + "TerritoryId": 612, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2639 + }, { "DataId": 2007955, "Position": { diff --git a/QuestPaths/4.x - Stormblood/MSQ/A1.2-Fringes 1/2456_The Prodigal Daughter.json b/QuestPaths/4.x - Stormblood/MSQ/A1.2-Fringes 1/2456_The Prodigal Daughter.json index dd5c736b..802baf24 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A1.2-Fringes 1/2456_The Prodigal Daughter.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A1.2-Fringes 1/2456_The Prodigal Daughter.json @@ -44,7 +44,8 @@ "Z": -730.4951 }, "TerritoryId": 620, - "InteractionType": "Interact" + "InteractionType": "Interact", + "AetheryteShortcut": "Peaks - Ala Gannha" } ] }, @@ -64,4 +65,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/MSQ/A1.2-Fringes 1/2955_Death by a Thousand Rocks.json b/QuestPaths/4.x - Stormblood/MSQ/A1.2-Fringes 1/2955_Death by a Thousand Rocks.json index 2f754049..d91c52ca 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A1.2-Fringes 1/2955_Death by a Thousand Rocks.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A1.2-Fringes 1/2955_Death by a Thousand Rocks.json @@ -34,7 +34,12 @@ "Z": -300.8011 }, "TerritoryId": 620, - "InteractionType": "Interact" + "InteractionType": "Interact", + "AetheryteShortcut": "Rhalgr's Reach", + "AethernetShortcut": [ + "[Rhalgr's Reach] Aetheryte Plaza", + "[Rhalgr's Reach] Peaks Gate" + ] } ] }, @@ -70,4 +75,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2461_Where Men Go as One.json b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2461_Where Men Go as One.json index 25a91e36..dc90a555 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2461_Where Men Go as One.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2461_Where Men Go as One.json @@ -34,6 +34,7 @@ "Y": 13.02367, "Z": -88.91437 }, + "StopDistance": 5, "TerritoryId": 635, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2466_Divide and Conquer.json b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2466_Divide and Conquer.json index b82b0faa..26c349b9 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2466_Divide and Conquer.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2466_Divide and Conquer.json @@ -46,6 +46,25 @@ { "Sequence": 2, "Steps": [ + { + "DataId": 1020841, + "Position": { + "X": 146.01355, + "Y": 118.1921, + "Z": -730.4951 + }, + "TerritoryId": 620, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2655, + "AetheryteShortcut": "Peaks - Ala Gannha", + "SkipConditions": { + "AetheryteShortcutIf": { + "QuestsCompleted": [ + 2655 + ] + } + } + }, { "DataId": 1020432, "Position": { diff --git a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2467_Lies, Damn Lies, and Pirates.json b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2467_Lies, Damn Lies, and Pirates.json index d506cfda..a60bafac 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2467_Lies, Damn Lies, and Pirates.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2467_Lies, Damn Lies, and Pirates.json @@ -26,6 +26,17 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1019519, + "Position": { + "X": -613.1228, + "Y": 130, + "Z": -529.839 + }, + "TerritoryId": 612, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2661 + }, { "DataId": 1020434, "Position": { @@ -59,4 +70,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2469_Not without Incident.json b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2469_Not without Incident.json index 31f911bf..214a764a 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2469_Not without Incident.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2469_Not without Incident.json @@ -101,7 +101,7 @@ "Y": -6.9999976, "Z": -58.884644 }, - "StopDistance": 5, + "StopDistance": 6, "TerritoryId": 628, "InteractionType": "CompleteQuest" } diff --git a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2635_Future Rust, Future Dust.json b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2635_Future Rust, Future Dust.json index e0a4faba..9ee072bd 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2635_Future Rust, Future Dust.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2635_Future Rust, Future Dust.json @@ -86,6 +86,25 @@ } } }, + { + "DataId": 1019486, + "Position": { + "X": -116.746826, + "Y": 0.6342248, + "Z": -55.832825 + }, + "TerritoryId": 635, + "InteractionType": "Interact", + "$": "2 16 0 0 0 160 -> 3 16 0 0 0 176", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] + }, { "Position": { "X": -42.27211, @@ -107,25 +126,6 @@ } } }, - { - "DataId": 1019486, - "Position": { - "X": -116.746826, - "Y": 0.6342248, - "Z": -55.832825 - }, - "TerritoryId": 635, - "InteractionType": "Interact", - "$": "2 16 0 0 0 160 -> 3 16 0 0 0 176", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - 16 - ] - }, { "DataId": 1019490, "Position": { diff --git a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2637_Ye Wayward Brothers.json b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2637_Ye Wayward Brothers.json index c19ea6c2..c4665b5c 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2637_Ye Wayward Brothers.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A1.3-Rhalgr's Reach 2/2637_Ye Wayward Brothers.json @@ -144,8 +144,9 @@ }, "TerritoryId": 635, "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Rhalgr's Reach", "AethernetShortcut": [ - "[Rhalgr's Reach] Northeastern Rhalgr's Reach", + "[Rhalgr's Reach] Aetheryte Plaza", "[Rhalgr's Reach] Western Rhalgr's Reach" ] } diff --git a/QuestPaths/4.x - Stormblood/MSQ/A2-Kugane/2470_The Man from Ul'dah.json b/QuestPaths/4.x - Stormblood/MSQ/A2-Kugane/2470_The Man from Ul'dah.json index 18ae1d01..ce42de96 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A2-Kugane/2470_The Man from Ul'dah.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A2-Kugane/2470_The Man from Ul'dah.json @@ -12,7 +12,7 @@ "Y": -6.9999976, "Z": -55.832825 }, - "StopDistance": 5, + "StopDistance": 6, "TerritoryId": 628, "InteractionType": "AcceptQuest" } diff --git a/QuestPaths/4.x - Stormblood/MSQ/A2-Kugane/2475_Making the Catfish Sing.json b/QuestPaths/4.x - Stormblood/MSQ/A2-Kugane/2475_Making the Catfish Sing.json index 138f5594..e4731239 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A2-Kugane/2475_Making the Catfish Sing.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A2-Kugane/2475_Making the Catfish Sing.json @@ -30,6 +30,7 @@ "Y": 0, "Z": -2.3041382 }, + "StopDistance": 7, "TerritoryId": 639, "InteractionType": "Interact" } diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2479_To Bend with the Wind.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2479_To Bend with the Wind.json index 991de741..178c88a4 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2479_To Bend with the Wind.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2479_To Bend with the Wind.json @@ -35,6 +35,17 @@ { "Sequence": 2, "Steps": [ + { + "DataId": 1019168, + "Position": { + "X": 501.33508, + "Y": 34.0062, + "Z": 781.70435 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2673 + }, { "Position": { "X": 553.3004, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2481_Alisaie's Stones.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2481_Alisaie's Stones.json index fbe35d07..41434e28 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2481_Alisaie's Stones.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2481_Alisaie's Stones.json @@ -56,7 +56,15 @@ 6676 ], "ItemId": 2002093, - "$": "0 2 0 0 0 0 -> 16 17 0 0 0 128" + "$": "0 2 0 0 0 0 -> 16 17 0 0 0 128", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 2007913, @@ -71,7 +79,15 @@ "KillEnemyDataIds": [ 6676 ], - "ItemId": 2002093 + "ItemId": 2002093, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] } ] }, @@ -103,6 +119,7 @@ "Y": 9.2068815, "Z": -661.21924 }, + "StopDistance": 7, "TerritoryId": 613, "InteractionType": "Interact" } diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2482_Under the Sea.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2482_Under the Sea.json index ff2d8b3d..f7c0381d 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2482_Under the Sea.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2482_Under the Sea.json @@ -26,6 +26,17 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1022102, + "Position": { + "X": 97.8866, + "Y": 2.096308, + "Z": -617.79205 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2687 + }, { "DataId": 1019951, "Position": { diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2484_In Soroban We Trust.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2484_In Soroban We Trust.json index 6664fb25..3d9e4611 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2484_In Soroban We Trust.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2484_In Soroban We Trust.json @@ -26,6 +26,17 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1023357, + "Position": { + "X": 565.0873, + "Y": -62.272896, + "Z": -147.84473 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2693 + }, { "DataId": 1019969, "Position": { @@ -34,7 +45,8 @@ "Z": -300.5265 }, "TerritoryId": 613, - "InteractionType": "Interact" + "InteractionType": "Interact", + "AetheryteShortcut": "Ruby Sea - Tamamizu" } ] }, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2486_In Darkness the Magatama Dreams.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2486_In Darkness the Magatama Dreams.json index 933b8b9e..a3179dd5 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2486_In Darkness the Magatama Dreams.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2486_In Darkness the Magatama Dreams.json @@ -20,6 +20,25 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1023280, + "Position": { + "X": -62.790894, + "Y": -198.96509, + "Z": -64.34735 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2632, + "DialogueChoices": [ + { + "ExcelSheet": "quest/026/StmBdy001_02632", + "Type": "List", + "Prompt": "TEXT_STMBDY001_02632_Q1_000_050", + "Answer": "TEXT_STMBDY001_02632_A1_000_051" + } + ] + }, { "Position": { "X": 21.067955, @@ -72,7 +91,8 @@ "Z": 221.51514 }, "TerritoryId": 613, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Mount": false } ] }, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2488_Breaking and Delivering.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2488_Breaking and Delivering.json index 9727c165..99b65195 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2488_Breaking and Delivering.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2488_Breaking and Delivering.json @@ -40,7 +40,8 @@ "Z": -314.00232 }, "TerritoryId": 613, - "InteractionType": "WalkTo" + "InteractionType": "WalkTo", + "RestartNavigationIfCancelled": false }, { "DataId": 1019981, @@ -60,14 +61,26 @@ "Steps": [ { "Position": { - "X": -659.02277, - "Y": -21.210977, - "Z": 270.70654 + "X": -583.7968, + "Y": -58.207996, + "Z": 244.92668 }, "TerritoryId": 613, "InteractionType": "WalkTo", "Fly": true, - "StopDistance": 0.25 + "Mount": true + }, + { + "Position": { + "X": -655.3086, + "Y": 0, + "Z": 270.4341 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Fly": true, + "DisableNavmesh": true, + "RestartNavigationIfCancelled": false }, { "Position": { diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2489_The Lord of the Revel.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2489_The Lord of the Revel.json index be1b52ee..18066fc0 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2489_The Lord of the Revel.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2489_The Lord of the Revel.json @@ -65,7 +65,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "DisableNavmesh": true + "DisableNavmesh": true, + "RestartNavigationIfCancelled": false }, { "DataId": 1019987, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2490_Tide Goes in, Imperials Go Out.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2490_Tide Goes in, Imperials Go Out.json index a78c4ffa..73209be2 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2490_Tide Goes in, Imperials Go Out.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2490_Tide Goes in, Imperials Go Out.json @@ -20,6 +20,27 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": -780.3967, + "Y": 7.9621, + "Z": -446.48938 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "SkipConditions": { + "StepIf": { + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + } + }, { "DataId": 1019991, "Position": { @@ -47,6 +68,7 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", + "Mount": true, "SkipConditions": { "StepIf": { "CompletionQuestVariablesFlags": [ diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2491_A Silence in Three Parts.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2491_A Silence in Three Parts.json index 07fe24aa..a61964a7 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2491_A Silence in Three Parts.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2491_A Silence in Three Parts.json @@ -29,7 +29,8 @@ }, "TerritoryId": 613, "InteractionType": "WalkTo", - "TargetTerritoryId": 614 + "TargetTerritoryId": 614, + "Fly": true } ] }, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2953_The Arrows of Misfortune.json b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2953_The Arrows of Misfortune.json index 84d1d3f5..07c4e990 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2953_The Arrows of Misfortune.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.1-Ruby Sea/2953_The Arrows of Misfortune.json @@ -61,6 +61,7 @@ "Y": 3.3707767, "Z": -534.4778 }, + "StopDistance": 7, "TerritoryId": 613, "InteractionType": "Interact" } @@ -76,6 +77,7 @@ "Y": 3.3707767, "Z": -534.4778 }, + "StopDistance": 7, "TerritoryId": 613, "InteractionType": "Interact" } diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2492_Life after Doma.json b/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2492_Life after Doma.json index 67d15aaa..35e78862 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2492_Life after Doma.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2492_Life after Doma.json @@ -99,7 +99,8 @@ "TerritoryId": 614, "InteractionType": "WalkTo", "Fly": true, - "StopDistance": 0.25 + "StopDistance": 0.25, + "RestartNavigationIfCancelled": false }, { "DataId": 1020007, @@ -114,4 +115,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2494_The Ones We Leave Behind.json b/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2494_The Ones We Leave Behind.json index c3549b73..9f7df38e 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2494_The Ones We Leave Behind.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2494_The Ones We Leave Behind.json @@ -26,6 +26,28 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1019314, + "Position": { + "X": 421.77454, + "Y": -0.3000138, + "Z": -293.9651 + }, + "TerritoryId": 614, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2724 + }, + { + "DataId": 1019263, + "Position": { + "X": 451.56018, + "Y": 58.77665, + "Z": -188.3421 + }, + "TerritoryId": 614, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2728 + }, { "Position": { "X": 508.4545, @@ -51,6 +73,7 @@ "Y": 83.5696, "Z": 94.92627 }, + "StopDistance": 7, "TerritoryId": 614, "InteractionType": "Interact" } @@ -134,4 +157,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2495_A New Ruby Tithe.json b/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2495_A New Ruby Tithe.json index 44420f7a..b86394da 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2495_A New Ruby Tithe.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2495_A New Ruby Tithe.json @@ -66,6 +66,28 @@ { "Sequence": 3, "Steps": [ + { + "DataId": 1019316, + "Position": { + "X": 434.89734, + "Y": 68.02076, + "Z": -125.01721 + }, + "TerritoryId": 614, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2733 + }, + { + "DataId": 1019313, + "Position": { + "X": 465.26282, + "Y": 58.52148, + "Z": -171.09949 + }, + "TerritoryId": 614, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2730 + }, { "DataId": 1020024, "Position": { @@ -89,7 +111,8 @@ "Z": 147.23425 }, "TerritoryId": 614, - "InteractionType": "Interact" + "InteractionType": "Instruction", + "Comment": "Snipe soldiers" } ] }, @@ -104,7 +127,8 @@ "Z": 237.04883 }, "TerritoryId": 614, - "InteractionType": "Interact" + "InteractionType": "Instruction", + "Comment": "Snipe soldiers" } ] }, @@ -134,7 +158,8 @@ "Z": 603.2959 }, "TerritoryId": 614, - "InteractionType": "Interact" + "InteractionType": "Instruction", + "Comment": "Snipe soldiers" } ] }, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2496_The Will to Live.json b/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2496_The Will to Live.json index 040ec25b..9747cd69 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2496_The Will to Live.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2496_The Will to Live.json @@ -77,6 +77,7 @@ "Y": 14.6418705, "Z": 620.35547 }, + "StopDistance": 4, "TerritoryId": 614, "InteractionType": "Interact" } @@ -92,6 +93,7 @@ "Y": 14.64187, "Z": 619.8672 }, + "StopDistance": 4, "TerritoryId": 614, "InteractionType": "Interact" } @@ -135,7 +137,15 @@ "TerritoryId": 614, "InteractionType": "Emote", "Emote": "imperialsalute", - "$": "0 0 0 0 0 0 -> 17 0 0 0 0 64" + "$": "0 0 0 0 0 0 -> 17 0 0 0 0 64", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 1020040, @@ -146,13 +156,25 @@ }, "TerritoryId": 614, "InteractionType": "Emote", - "Emote": "imperialsalute" + "Emote": "imperialsalute", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } ] }, { "Sequence": 6, "Steps": [ + { + "TerritoryId": 614, + "InteractionType": "EquipRecommended" + }, { "DataId": 1020042, "Position": { diff --git a/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2497_Daughter of the Deep.json b/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2497_Daughter of the Deep.json index 0ca80fb5..1802bb77 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2497_Daughter of the Deep.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A3.2-Yanxia 1/2497_Daughter of the Deep.json @@ -20,10 +20,6 @@ { "Sequence": 1, "Steps": [ - { - "TerritoryId": 614, - "InteractionType": "EquipRecommended" - }, { "DataId": 2008011, "Position": { @@ -35,6 +31,15 @@ "InteractionType": "AttuneAetherCurrent", "AetherCurrentId": 2818199 }, + { + "Position": { + "X": 453.69717, + "Y": 14.463846, + "Z": 663.386 + }, + "TerritoryId": 614, + "InteractionType": "WalkTo" + }, { "DataId": 1020047, "Position": { @@ -172,7 +177,8 @@ "TerritoryId": 614, "InteractionType": "WalkTo", "Fly": true, - "StopDistance": 0.25 + "StopDistance": 0.25, + "RestartNavigationIfCancelled": false }, { "DataId": 1023787, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2501_A Season for War.json b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2501_A Season for War.json index f48043a4..533d8913 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2501_A Season for War.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2501_A Season for War.json @@ -38,9 +38,9 @@ }, { "Position": { - "X": 259.30197, - "Y": 1.436653, - "Z": 337.41043 + "X": 395.68478, + "Y": -8.147073, + "Z": 299.55774 }, "TerritoryId": 622, "InteractionType": "Combat", diff --git a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2502_An Impossible Dream.json b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2502_An Impossible Dream.json index de26918f..deac66c3 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2502_An Impossible Dream.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2502_An Impossible Dream.json @@ -26,6 +26,17 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1019347, + "Position": { + "X": 575.2803, + "Y": -19.505632, + "Z": 343.74 + }, + "TerritoryId": 622, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2760 + }, { "DataId": 1020279, "Position": { @@ -54,4 +65,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2505_The Heart of Nations.json b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2505_The Heart of Nations.json index 55cb19b0..572207cb 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2505_The Heart of Nations.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2505_The Heart of Nations.json @@ -69,25 +69,6 @@ 128 ] }, - { - "DataId": 2008246, - "Position": { - "X": 641.7792, - "Y": 5.996765, - "Z": -355.6115 - }, - "TerritoryId": 622, - "InteractionType": "Interact", - "$": "1 16 0 0 0 128 -> 2 32 0 0 0 192", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - 64 - ] - }, { "DataId": 2008247, "Position": { @@ -124,6 +105,25 @@ null, 16 ] + }, + { + "DataId": 2008246, + "Position": { + "X": 641.7792, + "Y": 5.996765, + "Z": -355.6115 + }, + "TerritoryId": 622, + "InteractionType": "Interact", + "$": "1 16 0 0 0 128 -> 2 32 0 0 0 192", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] } ] }, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2506_A Trial Before the Trial.json b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2506_A Trial Before the Trial.json index 170a0045..b0302b05 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2506_A Trial Before the Trial.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2506_A Trial Before the Trial.json @@ -35,6 +35,17 @@ { "Sequence": 2, "Steps": [ + { + "DataId": 1019405, + "Position": { + "X": 343.58728, + "Y": 26.261887, + "Z": -326.55835 + }, + "TerritoryId": 622, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2771 + }, { "DataId": 1020671, "Position": { @@ -119,4 +130,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2509_The Labors of Magnai.json b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2509_The Labors of Magnai.json index 626bfa6d..7c762d51 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2509_The Labors of Magnai.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2509_The Labors of Magnai.json @@ -160,6 +160,24 @@ 16 ] }, + { + "DataId": 2008257, + "Position": { + "X": -194.2627, + "Y": -57.66388, + "Z": 105.97388 + }, + "TerritoryId": 622, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 1 + ] + }, { "DataId": 2008256, "Position": { @@ -216,24 +234,6 @@ null, 8 ] - }, - { - "DataId": 2008257, - "Position": { - "X": -194.2627, - "Y": -57.66388, - "Z": 105.97388 - }, - "TerritoryId": 622, - "InteractionType": "Interact", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - 1 - ] } ] }, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2511_Sworn Enemies of the Sun.json b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2511_Sworn Enemies of the Sun.json index 6474f1e8..8f209934 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2511_Sworn Enemies of the Sun.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2511_Sworn Enemies of the Sun.json @@ -42,15 +42,15 @@ "Sequence": 2, "Steps": [ { - "DataId": 1019424, + "DataId": 1023348, "Position": { - "X": 66.056274, - "Y": 114.904976, - "Z": -8.377258 + "X": 79.24011, + "Y": 114.90497, + "Z": 95.994385 }, "TerritoryId": 622, - "InteractionType": "Interact", - "TargetTerritoryId": 622 + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2782 }, { "Position": { @@ -61,7 +61,8 @@ "TerritoryId": 622, "InteractionType": "Emote", "Emote": "lookout", - "StopDistance": 0.25 + "StopDistance": 0.25, + "AetheryteShortcut": "Azim Steppe - Reunion" } ] }, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2513_A Final Peace.json b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2513_A Final Peace.json index 2b902ebc..894c0392 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2513_A Final Peace.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2513_A Final Peace.json @@ -20,6 +20,17 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1023193, + "Position": { + "X": -434.0429, + "Y": 2.5501096, + "Z": 650.01904 + }, + "TerritoryId": 622, + "InteractionType": "AcceptQuest", + "PickUpQuestId": 2791 + }, { "DataId": 1020280, "Position": { @@ -76,4 +87,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2515_Naadam.json b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2515_Naadam.json index c419c628..a37bb517 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2515_Naadam.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2515_Naadam.json @@ -20,6 +20,25 @@ { "Sequence": 1, "Steps": [ + { + "DataId": 1019386, + "Position": { + "X": 501.21313, + "Y": 40.836082, + "Z": -505.9129 + }, + "StopDistance": 7, + "TerritoryId": 622, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, { "DataId": 1019388, "Position": { @@ -90,24 +109,6 @@ null, 16 ] - }, - { - "DataId": 1019386, - "Position": { - "X": 501.21313, - "Y": 40.836082, - "Z": -505.9129 - }, - "TerritoryId": 622, - "InteractionType": "Interact", - "CompletionQuestVariablesFlags": [ - null, - null, - null, - null, - null, - 128 - ] } ] }, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2517_In Crimson They Walked.json b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2517_In Crimson They Walked.json index 171c5596..3ed1759e 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2517_In Crimson They Walked.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2517_In Crimson They Walked.json @@ -30,7 +30,8 @@ }, "TerritoryId": 622, "InteractionType": "Interact", - "AetheryteShortcut": "Azim Steppe - Dawn Throne" + "AetheryteShortcut": "Azim Steppe - Dawn Throne", + "Fly": true } ] }, @@ -39,13 +40,14 @@ "Steps": [ { "Position": { - "X": 51.873592, - "Y": 114.90497, - "Z": 64.512596 + "X": 12.142036, + "Y": 121, + "Z": 63.4195 }, "TerritoryId": 622, "InteractionType": "WalkTo", - "Mount": true + "Mount": true, + "Fly": true }, { "DataId": 1019424, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2518_The Hour of Reckoning.json b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2518_The Hour of Reckoning.json index 7102bd78..f9feca1a 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2518_The Hour of Reckoning.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A4-Azim Steppe/2518_The Hour of Reckoning.json @@ -75,4 +75,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2519_The Room Where It Happened.json b/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2519_The Room Where It Happened.json index b2ba2d76..58b462dd 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2519_The Room Where It Happened.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2519_The Room Where It Happened.json @@ -84,4 +84,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2520_Seeds of Despair.json b/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2520_Seeds of Despair.json index 02e832e7..f4276125 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2520_Seeds of Despair.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2520_Seeds of Despair.json @@ -34,7 +34,8 @@ "Z": -382.8031 }, "TerritoryId": 614, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, diff --git a/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2521_The Limits of Our Endurance.json b/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2521_The Limits of Our Endurance.json index af3d50b3..9dbfffe8 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2521_The Limits of Our Endurance.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2521_The Limits of Our Endurance.json @@ -34,7 +34,8 @@ "Z": -414.99963 }, "TerritoryId": 614, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, @@ -72,4 +73,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2523_On the Eve of Destiny.json b/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2523_On the Eve of Destiny.json index 1786d198..5350174a 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2523_On the Eve of Destiny.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2523_On the Eve of Destiny.json @@ -106,6 +106,7 @@ }, "TerritoryId": 614, "InteractionType": "CompleteQuest", + "Fly": true, "DialogueChoices": [ { "Type": "List", diff --git a/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2946_How Tataru Got Her Groove Back.json b/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2946_How Tataru Got Her Groove Back.json index 3b1adc94..bd5aa51e 100644 --- a/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2946_How Tataru Got Her Groove Back.json +++ b/QuestPaths/4.x - Stormblood/MSQ/A5-Yanxia 2/2946_How Tataru Got Her Groove Back.json @@ -89,9 +89,10 @@ }, "TerritoryId": 614, "InteractionType": "CompleteQuest", - "AetheryteShortcut": "Yanxia - House of the Fierce" + "AetheryteShortcut": "Yanxia - House of the Fierce", + "Fly": true } ] } ] -} \ No newline at end of file +} From 8baf287604cc46aeb3338e99e746986b832ec484 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 2 Sep 2024 22:03:29 +0200 Subject: [PATCH 69/69] Add aetheryte shortcuts to sequence 0 of class/job quests that didn't have any (and thus weren't eligible as priority quests) --- .../BRD/1086_The Archer's Anthem.json | 18 +++---- .../BTN/3_Way of the Botanist.json | 15 +++++- .../MIN/192_So You Want to Be a Miner.json | 13 +++++ .../MIN/597_Way of the Miner.json | 15 +++++- .../MIN/599_My First Pickaxe.json | 15 +++++- .../Class Quests/MIN/600_Know Thy Land.json | 15 +++++- .../MNK/532_Way of the Pugilist.json | 8 ++- .../MNK/533_Way of the Pugilist.json | 8 ++- .../PLD/1055_Paladin's Pledge.json | 1 + .../PLD/256_Kicking the Hornet's Nest.json | 15 +++++- .../SCH/1097_Forgotten but Not Gone.json | 8 ++- .../SCH/1098_The Last Remnants.json | 15 +++++- .../SCH/1099_The Consequences of Anger.json | 15 +++++- .../1100_In the Image of the Ancients.json | 15 +++++- .../SCH/1101_For Your Fellow Man.json | 15 +++++- .../SCH/1102_The Beast Within.json | 15 +++++- .../WHM/1081_O Brother, Where Art Thou.json | 6 ++- .../DNC/3250_Gamboling for Gil.json | 8 ++- .../Magical Ranged/3623_Hollow Pursuits.json | 12 ++++- .../3243_The Man with Too Many Scars.json | 12 ++++- .../PCT/4854_The Joy of Pictomancy.json | 15 +++++- .../PCT/4855_Mind over Manor.json | 4 ++ .../VPR/4848_Enter the Viper.json | 8 ++- .../VPR/4849_Fangs of the Viper.json | 13 ++++- .../Magical Ranged/4842_Power Forgotten.json | 8 ++- .../4843_A Brand of Justice.json | 8 ++- .../4844_The Seeds of Popularity.json | 8 ++- .../Magical Ranged/4845_Floundering Fame.json | 6 +++ .../Magical Ranged/4846_Behind the Helm.json | 8 ++- .../4847_Heroes and Pretenders.json | 8 ++- .../4838_Take Me to Your Leader.json | 8 ++- .../4839_The Milk of Mamool Ja Kindness.json | 8 ++- .../4840_Ally in the Alley.json | 8 ++- .../4841_The Mightiest Shield.json | 8 ++- .../Tank/4818_The Narwhal Beckons.json | 8 ++- .../Tank/4819_Sleepless in Ishgard.json | 8 ++- .../Tank/4820_Between Sleep and Death.json | 6 +++ .../Tank/4821_Beacon in the Darkness.json | 8 ++- .../Tank/4822_Awakened, not Stirred.json | 8 ++- .../Tank/4823_Dreams of a New Day.json | 8 ++- Questionable.Model/Questing/QuestStep.cs | 16 ++++++ .../Controller/Steps/Interactions/UseItem.cs | 8 ++- .../Steps/Shared/AetheryteShortcut.cs | 2 +- .../Controller/Steps/Shared/SkipCondition.cs | 2 +- Questionable/Functions/QuestFunctions.cs | 9 +--- Questionable/QuestionablePlugin.cs | 1 + Questionable/Validation/EIssueType.cs | 1 + .../ClassQuestShouldHaveShortcutValidator.cs | 51 +++++++++++++++++-- 48 files changed, 436 insertions(+), 62 deletions(-) diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BRD/1086_The Archer's Anthem.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BRD/1086_The Archer's Anthem.json index 58b792d6..cced8794 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/BRD/1086_The Archer's Anthem.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/BRD/1086_The Archer's Anthem.json @@ -8,7 +8,14 @@ { "TerritoryId": 153, "InteractionType": "EquipItem", - "ItemId": 4546 + "ItemId": 4546, + "AetheryteShortcut": "South Shroud - Quarrymill", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } }, { "TerritoryId": 153, @@ -22,14 +29,7 @@ "Z": -7.3396606 }, "TerritoryId": 153, - "InteractionType": "AcceptQuest", - "AetheryteShortcut": "South Shroud - Quarrymill", - "Fly": true, - "SkipConditions": { - "AetheryteShortcutIf": { - "InSameTerritory": true - } - } + "InteractionType": "AcceptQuest" } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/3_Way of the Botanist.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/3_Way of the Botanist.json index 23abee99..1a5f96dc 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/3_Way of the Botanist.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/BTN/3_Way of the Botanist.json @@ -13,7 +13,20 @@ "Z": -142.93127 }, "TerritoryId": 133, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Botanists' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 133 + ] + } + } } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/192_So You Want to Be a Miner.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/192_So You Want to Be a Miner.json index faaf1166..ea8b8257 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/192_So You Want to Be a Miner.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/192_So You Want to Be a Miner.json @@ -14,6 +14,19 @@ }, "TerritoryId": 131, "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ul'dah", + "AethernetShortcut": [ + "[Ul'dah] Aetheryte Plaza", + "[Ul'dah] Miners' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 131 + ] + } + }, "DialogueChoices": [ { "Type": "YesNo", diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/597_Way of the Miner.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/597_Way of the Miner.json index ab55d722..5ab37fe6 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/597_Way of the Miner.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/597_Way of the Miner.json @@ -13,7 +13,20 @@ "Z": 153.2157 }, "TerritoryId": 131, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ul'dah", + "AethernetShortcut": [ + "[Ul'dah] Aetheryte Plaza", + "[Ul'dah] Miners' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 131 + ] + } + } } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/599_My First Pickaxe.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/599_My First Pickaxe.json index c9bcf377..07dd8fbf 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/599_My First Pickaxe.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/599_My First Pickaxe.json @@ -13,7 +13,20 @@ "Z": 157.42725 }, "TerritoryId": 131, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ul'dah", + "AethernetShortcut": [ + "[Ul'dah] Aetheryte Plaza", + "[Ul'dah] Miners' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 131 + ] + } + } } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/600_Know Thy Land.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/600_Know Thy Land.json index ae8417c0..50ff25c8 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/600_Know Thy Land.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/600_Know Thy Land.json @@ -13,7 +13,20 @@ "Z": 157.42725 }, "TerritoryId": 131, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ul'dah", + "AethernetShortcut": [ + "[Ul'dah] Aetheryte Plaza", + "[Ul'dah] Miners' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 131 + ] + } + } } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/532_Way of the Pugilist.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/532_Way of the Pugilist.json index 2e25eb22..130b69e0 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/532_Way of the Pugilist.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/MNK/532_Way of the Pugilist.json @@ -13,7 +13,13 @@ "Z": -51.163513 }, "TerritoryId": 130, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ul'dah", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, 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 cbbb57c3..8c00e6a2 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 @@ -14,7 +14,13 @@ "Z": -51.163513 }, "TerritoryId": 130, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ul'dah", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/PLD/1055_Paladin's Pledge.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/PLD/1055_Paladin's Pledge.json index eba6e305..d7d54815 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/PLD/1055_Paladin's Pledge.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/PLD/1055_Paladin's Pledge.json @@ -14,6 +14,7 @@ }, "TerritoryId": 131, "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ul'dah", "AethernetShortcut": [ "[Ul'dah] Aetheryte Plaza", "[Ul'dah] Gladiators' Guild" diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/PLD/256_Kicking the Hornet's Nest.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/PLD/256_Kicking the Hornet's Nest.json index 88320c09..e12a5e43 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/PLD/256_Kicking the Hornet's Nest.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/PLD/256_Kicking the Hornet's Nest.json @@ -13,7 +13,20 @@ "Z": 39.81079 }, "TerritoryId": 131, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ul'dah", + "AethernetShortcut": [ + "[Ul'dah] Aetheryte Plaza", + "[Ul'dah] Gladiators' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 131 + ] + } + } } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1097_Forgotten but Not Gone.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1097_Forgotten but Not Gone.json index 615cf8be..5d4a5b35 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1097_Forgotten but Not Gone.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1097_Forgotten but Not Gone.json @@ -12,7 +12,13 @@ "Z": 4.017052 }, "TerritoryId": 129, - "InteractionType": "WalkTo" + "InteractionType": "WalkTo", + "AetheryteShortcut": "Limsa Lominsa", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } }, { "DataId": 1000895, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1098_The Last Remnants.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1098_The Last Remnants.json index 66e6af53..19cbfbe7 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1098_The Last Remnants.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1098_The Last Remnants.json @@ -8,7 +8,20 @@ { "TerritoryId": 128, "InteractionType": "EquipItem", - "ItemId": 4550 + "ItemId": 4550, + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Marauders' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 128 + ] + } + } }, { "DataId": 1006757, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1099_The Consequences of Anger.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1099_The Consequences of Anger.json index 2fbe65db..18257f45 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1099_The Consequences of Anger.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1099_The Consequences of Anger.json @@ -13,7 +13,20 @@ "Z": -250.56848 }, "TerritoryId": 128, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Marauders' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 128 + ] + } + } } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1100_In the Image of the Ancients.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1100_In the Image of the Ancients.json index 8e87dd8b..aa5a054f 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1100_In the Image of the Ancients.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1100_In the Image of the Ancients.json @@ -13,7 +13,20 @@ "Z": -250.56848 }, "TerritoryId": 128, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Marauders' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 128 + ] + } + } } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1101_For Your Fellow Man.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1101_For Your Fellow Man.json index a2b64690..270a798d 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1101_For Your Fellow Man.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1101_For Your Fellow Man.json @@ -13,7 +13,20 @@ "Z": -250.56848 }, "TerritoryId": 128, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Marauders' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 128 + ] + } + } } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1102_The Beast Within.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1102_The Beast Within.json index 8169dfbd..06d12fb3 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1102_The Beast Within.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/SCH/1102_The Beast Within.json @@ -13,7 +13,20 @@ "Z": -250.56848 }, "TerritoryId": 128, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "AethernetShortcut": [ + "[Limsa Lominsa] Aetheryte Plaza", + "[Limsa Lominsa] Marauders' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 128 + ] + } + } } ] }, diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1081_O Brother, Where Art Thou.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1081_O Brother, Where Art Thou.json index 48d669d2..8f55a98e 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1081_O Brother, Where Art Thou.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/WHM/1081_O Brother, Where Art Thou.json @@ -35,7 +35,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } @@ -157,7 +158,8 @@ "Y": 8.712891, "Z": 281.69678 }, - "MaximumDistance": 3 + "MaximumDistance": 3, + "TerritoryId": 153 } } } diff --git a/QuestPaths/5.x - Shadowbringers/Class Quests/DNC/3250_Gamboling for Gil.json b/QuestPaths/5.x - Shadowbringers/Class Quests/DNC/3250_Gamboling for Gil.json index 18979d0a..cc2dcd85 100644 --- a/QuestPaths/5.x - Shadowbringers/Class Quests/DNC/3250_Gamboling for Gil.json +++ b/QuestPaths/5.x - Shadowbringers/Class Quests/DNC/3250_Gamboling for Gil.json @@ -13,7 +13,13 @@ "Z": 195.94104 }, "TerritoryId": 129, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Limsa Lominsa", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3623_Hollow Pursuits.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3623_Hollow Pursuits.json index 212b5074..83dc2b97 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3623_Hollow Pursuits.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Magical Ranged/3623_Hollow Pursuits.json @@ -13,7 +13,17 @@ "Z": 201.9226 }, "TerritoryId": 819, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3243_The Man with Too Many Scars.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3243_The Man with Too Many Scars.json index be65d1d6..02adab4a 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3243_The Man with Too Many Scars.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3243_The Man with Too Many Scars.json @@ -14,7 +14,17 @@ "Z": 251.75854 }, "TerritoryId": 819, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] Musica Universalis Markets" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] } diff --git a/QuestPaths/7.x - Dawntrail/Class Quests/PCT/4854_The Joy of Pictomancy.json b/QuestPaths/7.x - Dawntrail/Class Quests/PCT/4854_The Joy of Pictomancy.json index 86f5071c..4423e4d1 100644 --- a/QuestPaths/7.x - Dawntrail/Class Quests/PCT/4854_The Joy of Pictomancy.json +++ b/QuestPaths/7.x - Dawntrail/Class Quests/PCT/4854_The Joy of Pictomancy.json @@ -20,7 +20,20 @@ "Prompt": "TEXT_KINGBB201_04854_Q1_000_000", "Answer": "TEXT_KINGBB201_04854_A1_000_002" } - ] + ], + "AetheryteShortcut": "Gridania", + "AethernetShortcut": [ + "[Gridania] Aetheryte Plaza", + "[Gridania] Conjurers' Guild" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 133 + ] + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Class Quests/PCT/4855_Mind over Manor.json b/QuestPaths/7.x - Dawntrail/Class Quests/PCT/4855_Mind over Manor.json index d134ace3..abc4342a 100644 --- a/QuestPaths/7.x - Dawntrail/Class Quests/PCT/4855_Mind over Manor.json +++ b/QuestPaths/7.x - Dawntrail/Class Quests/PCT/4855_Mind over Manor.json @@ -14,11 +14,15 @@ "TerritoryId": 132, "InteractionType": "UseItem", "ItemId": 43538, + "AetheryteShortcut": "Gridania", "SkipConditions": { "StepIf": { "Item": { "NotInInventory": true } + }, + "AetheryteShortcutIf": { + "InSameTerritory": true } } }, diff --git a/QuestPaths/7.x - Dawntrail/Class Quests/VPR/4848_Enter the Viper.json b/QuestPaths/7.x - Dawntrail/Class Quests/VPR/4848_Enter the Viper.json index 6e246198..2a3451f3 100644 --- a/QuestPaths/7.x - Dawntrail/Class Quests/VPR/4848_Enter the Viper.json +++ b/QuestPaths/7.x - Dawntrail/Class Quests/VPR/4848_Enter the Viper.json @@ -13,7 +13,13 @@ "Z": -99.321045 }, "TerritoryId": 130, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ul'dah", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Class Quests/VPR/4849_Fangs of the Viper.json b/QuestPaths/7.x - Dawntrail/Class Quests/VPR/4849_Fangs of the Viper.json index ccf61580..dec630ec 100644 --- a/QuestPaths/7.x - Dawntrail/Class Quests/VPR/4849_Fangs of the Viper.json +++ b/QuestPaths/7.x - Dawntrail/Class Quests/VPR/4849_Fangs of the Viper.json @@ -17,16 +17,27 @@ "TerritoryId": 131, "InteractionType": "UseItem", "ItemId": 43537, + "AetheryteShortcut": "Ul'dah", + "AethernetShortcut": [ + "[Ul'dah] Aetheryte Plaza", + "[Ul'dah] Weavers' Guild" + ], "SkipConditions": { "StepIf": { "Item": { "NotInInventory": true } + }, + "AetheryteShortcutIf": { + "InSameTerritory": true, + "InTerritory": [ + 131 + ] } } }, { - "TerritoryId": 131, + "TerritoryId": 131, "InteractionType": "EquipItem", "ItemId": 41808, "SkipConditions": { diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4842_Power Forgotten.json b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4842_Power Forgotten.json index 33df55b7..c04f2dc7 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4842_Power Forgotten.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4842_Power Forgotten.json @@ -13,7 +13,13 @@ "Z": 194.72034 }, "TerritoryId": 1185, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Tuliyollal", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4843_A Brand of Justice.json b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4843_A Brand of Justice.json index 6b6425ea..a26a9fca 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4843_A Brand of Justice.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4843_A Brand of Justice.json @@ -13,7 +13,13 @@ "Z": 628.3817 }, "TerritoryId": 957, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Thavnair - Yedlihmad", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4844_The Seeds of Popularity.json b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4844_The Seeds of Popularity.json index 40af8b55..5542bd4b 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4844_The Seeds of Popularity.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4844_The Seeds of Popularity.json @@ -13,7 +13,13 @@ "Z": 628.3817 }, "TerritoryId": 957, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Thavnair - Yedlihmad", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4845_Floundering Fame.json b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4845_Floundering Fame.json index cbe6d957..0150bd00 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4845_Floundering Fame.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4845_Floundering Fame.json @@ -14,6 +14,12 @@ }, "TerritoryId": 957, "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Thavnair - Yedlihmad", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, "DialogueChoices": [ { "Type": "List", diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4846_Behind the Helm.json b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4846_Behind the Helm.json index 9b581e94..49373025 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4846_Behind the Helm.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4846_Behind the Helm.json @@ -13,7 +13,13 @@ "Z": 628.3817 }, "TerritoryId": 957, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Thavnair - Yedlihmad", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4847_Heroes and Pretenders.json b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4847_Heroes and Pretenders.json index feff8b34..73a1350d 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4847_Heroes and Pretenders.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Magical Ranged/4847_Heroes and Pretenders.json @@ -16,7 +16,13 @@ "Z": 628.3817 }, "TerritoryId": 957, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Thavnair - Yedlihmad", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4838_Take Me to Your Leader.json b/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4838_Take Me to Your Leader.json index ed65c14d..9fd43410 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4838_Take Me to Your Leader.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4838_Take Me to Your Leader.json @@ -13,7 +13,13 @@ "Z": -3.6469727 }, "TerritoryId": 621, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Lochs - Porta Praetoria", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4839_The Milk of Mamool Ja Kindness.json b/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4839_The Milk of Mamool Ja Kindness.json index 90b8d6de..e51f3ef2 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4839_The Milk of Mamool Ja Kindness.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4839_The Milk of Mamool Ja Kindness.json @@ -13,7 +13,13 @@ "Z": 739.4979 }, "TerritoryId": 620, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Peaks - Ala Ghiri", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4840_Ally in the Alley.json b/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4840_Ally in the Alley.json index d73e1be9..0e23cedd 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4840_Ally in the Alley.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4840_Ally in the Alley.json @@ -13,7 +13,13 @@ "Z": 739.4979 }, "TerritoryId": 620, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Peaks - Ala Ghiri", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4841_The Mightiest Shield.json b/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4841_The Mightiest Shield.json index cba86057..599b3b17 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4841_The Mightiest Shield.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Physical Ranged/4841_The Mightiest Shield.json @@ -16,7 +16,13 @@ "Z": 618.09717 }, "TerritoryId": 621, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Lochs - Ala Mhigan Quarter", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4818_The Narwhal Beckons.json b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4818_The Narwhal Beckons.json index ab8d951a..960d2233 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4818_The Narwhal Beckons.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4818_The Narwhal Beckons.json @@ -13,7 +13,13 @@ "Z": 203.14331 }, "TerritoryId": 1185, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Tuliyollal", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4819_Sleepless in Ishgard.json b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4819_Sleepless in Ishgard.json index 69caf918..668b23af 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4819_Sleepless in Ishgard.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4819_Sleepless in Ishgard.json @@ -13,7 +13,13 @@ "Z": -48.05072 }, "TerritoryId": 418, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4820_Between Sleep and Death.json b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4820_Between Sleep and Death.json index 09bfe8e2..9b08c1c9 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4820_Between Sleep and Death.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4820_Between Sleep and Death.json @@ -14,6 +14,12 @@ }, "TerritoryId": 418, "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + }, "DialogueChoices": [ { "Type": "List", diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4821_Beacon in the Darkness.json b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4821_Beacon in the Darkness.json index 67f58ebb..4691ec7c 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4821_Beacon in the Darkness.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4821_Beacon in the Darkness.json @@ -13,7 +13,13 @@ "Z": -1.7243042 }, "TerritoryId": 418, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4822_Awakened, not Stirred.json b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4822_Awakened, not Stirred.json index 544b366f..a29c5a66 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4822_Awakened, not Stirred.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4822_Awakened, not Stirred.json @@ -14,7 +14,13 @@ }, "StopDistance": 5, "TerritoryId": 418, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4823_Dreams of a New Day.json b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4823_Dreams of a New Day.json index 1fe65e91..db15f8e2 100644 --- a/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4823_Dreams of a New Day.json +++ b/QuestPaths/7.x - Dawntrail/Role Quests/Tank/4823_Dreams of a New Day.json @@ -16,7 +16,13 @@ "Z": -48.17273 }, "TerritoryId": 418, - "InteractionType": "AcceptQuest" + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Ishgard", + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } } ] }, diff --git a/Questionable.Model/Questing/QuestStep.cs b/Questionable.Model/Questing/QuestStep.cs index 5a23e6e4..8ee496bf 100644 --- a/Questionable.Model/Questing/QuestStep.cs +++ b/Questionable.Model/Questing/QuestStep.cs @@ -12,6 +12,7 @@ namespace Questionable.Model.Questing; public sealed class QuestStep { public const float DefaultStopDistance = 3f; + public const int VesperBayAetheryteTicket = 30362; public uint? DataId { get; set; } @@ -110,4 +111,19 @@ public sealed class QuestStep else return StopDistance ?? DefaultStopDistance; } + + /// + /// Only relevant for the step 0 in sequence 0: Whether this step is valid for teleporting to it. + /// + /// + public bool IsTeleportableForPriorityQuests() + { + if (AetheryteShortcut != null) + return true; + + if (InteractionType == EInteractionType.UseItem && ItemId == VesperBayAetheryteTicket) + return true; + + return false; + } } diff --git a/Questionable/Controller/Steps/Interactions/UseItem.cs b/Questionable/Controller/Steps/Interactions/UseItem.cs index 2481e8f5..1e5d51bd 100644 --- a/Questionable/Controller/Steps/Interactions/UseItem.cs +++ b/Questionable/Controller/Steps/Interactions/UseItem.cs @@ -23,8 +23,6 @@ namespace Questionable.Controller.Steps.Interactions; internal static class UseItem { - public const int VesperBayAetheryteTicket = 30362; - internal sealed class Factory( Mount.Factory mountFactory, MoveTo.Factory moveFactory, @@ -47,7 +45,7 @@ internal static class UseItem ArgumentNullException.ThrowIfNull(step.ItemId); - if (step.ItemId == VesperBayAetheryteTicket) + if (step.ItemId == QuestStep.VesperBayAetheryteTicket) { unsafe { @@ -196,7 +194,7 @@ internal static class UseItem if (StartingCombat && condition[ConditionFlag.InCombat]) return ETaskResult.TaskComplete; - if (ItemId == VesperBayAetheryteTicket && _usedItem) + if (ItemId == QuestStep.VesperBayAetheryteTicket && _usedItem) { InventoryManager* inventoryManager = InventoryManager.Instance(); if (inventoryManager == null) @@ -228,7 +226,7 @@ internal static class UseItem private TimeSpan GetRetryDelay() { - if (ItemId == VesperBayAetheryteTicket) + if (ItemId == QuestStep.VesperBayAetheryteTicket) return TimeSpan.FromSeconds(11); else return TimeSpan.FromSeconds(5); diff --git a/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs b/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs index 0b12bb3f..0ac347a2 100644 --- a/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs +++ b/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs @@ -137,7 +137,7 @@ internal static class AetheryteShortcut if (skipConditions.NearPosition is { } nearPosition && - clientState.TerritoryType == step.TerritoryId) + clientState.TerritoryType == nearPosition.TerritoryId) { if (Vector3.Distance(nearPosition.Position, clientState.LocalPlayer!.Position) <= nearPosition.MaximumDistance) diff --git a/Questionable/Controller/Steps/Shared/SkipCondition.cs b/Questionable/Controller/Steps/Shared/SkipCondition.cs index 1d2420cf..1c8a3fa3 100644 --- a/Questionable/Controller/Steps/Shared/SkipCondition.cs +++ b/Questionable/Controller/Steps/Shared/SkipCondition.cs @@ -204,7 +204,7 @@ internal static class SkipCondition } } - if (skipConditions.NearPosition is { } nearPosition && clientState.TerritoryType == step.TerritoryId) + if (skipConditions.NearPosition is { } nearPosition && clientState.TerritoryType == nearPosition.TerritoryId) { if (Vector3.Distance(nearPosition.Position, clientState.LocalPlayer!.Position) <= nearPosition.MaximumDistance) diff --git a/Questionable/Functions/QuestFunctions.cs b/Questionable/Functions/QuestFunctions.cs index e346822d..3f48db39 100644 --- a/Questionable/Functions/QuestFunctions.cs +++ b/Questionable/Functions/QuestFunctions.cs @@ -262,14 +262,7 @@ internal sealed unsafe class QuestFunctions if (firstStep == null) return false; - if (firstStep.AetheryteShortcut != null) - return true; - - if (firstStep is - { InteractionType: EInteractionType.UseItem, ItemId: UseItem.VesperBayAetheryteTicket }) - return true; - - return false; + return firstStep.IsTeleportableForPriorityQuests(); }) .FirstOrDefault(x => { diff --git a/Questionable/QuestionablePlugin.cs b/Questionable/QuestionablePlugin.cs index 88ebc1b3..5c74c00b 100644 --- a/Questionable/QuestionablePlugin.cs +++ b/Questionable/QuestionablePlugin.cs @@ -223,6 +223,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(sp => sp.GetRequiredService()); } diff --git a/Questionable/Validation/EIssueType.cs b/Questionable/Validation/EIssueType.cs index 0f51ce6b..75512481 100644 --- a/Questionable/Validation/EIssueType.cs +++ b/Questionable/Validation/EIssueType.cs @@ -17,4 +17,5 @@ public enum EIssueType UnexpectedCompleteQuestStep, InvalidAethernetShortcut, InvalidExcelRef, + ClassQuestWithoutAetheryteShortcut, } diff --git a/Questionable/Validation/Validators/ClassQuestShouldHaveShortcutValidator.cs b/Questionable/Validation/Validators/ClassQuestShouldHaveShortcutValidator.cs index 405c8f88..680ef124 100644 --- a/Questionable/Validation/Validators/ClassQuestShouldHaveShortcutValidator.cs +++ b/Questionable/Validation/Validators/ClassQuestShouldHaveShortcutValidator.cs @@ -1,6 +1,51 @@ -namespace Questionable.Validation.Validators; +using System.Collections.Generic; +using LLib.GameData; +using Questionable.Data; +using Questionable.Model; +using Questionable.Model.Questing; -public class ClassQuestShouldHaveShortcut +namespace Questionable.Validation.Validators; + +internal sealed class ClassQuestShouldHaveShortcutValidator : IQuestValidator { - + private readonly HashSet _classJobQuests = []; + + public ClassQuestShouldHaveShortcutValidator(QuestData questData) + { + foreach (EClassJob classJob in typeof(EClassJob).GetEnumValues()) + { + if (classJob == EClassJob.Adventurer) + continue; + + foreach (var questInfo in questData.GetClassJobQuests(classJob)) + { + // TODO maybe remove the level check + if (questInfo.Level > 1) + _classJobQuests.Add(questInfo.QuestId); + } + } + } + + public IEnumerable Validate(Quest quest) + { + if (!_classJobQuests.Contains(quest.Id)) + yield break; + + var firstStep = quest.FindSequence(0)?.FindStep(0); + if (firstStep == null) + yield break; + + if (firstStep.IsTeleportableForPriorityQuests()) + yield break; + + yield return new ValidationIssue + { + ElementId = quest.Id, + Sequence = 0, + Step = 0, + Type = EIssueType.ClassQuestWithoutAetheryteShortcut, + Severity = EIssueSeverity.Error, + Description = "Class quest should have an aetheryte shortcut to be done automatically", + }; + } }