From 9bbfbc54d390d35e2861497c5a60dcfb673a2b50 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 6 Jun 2024 18:49:49 +0200 Subject: [PATCH] Mini-YA --- ...4313_The Perks of Being a Lost Flower.json | 9 +- .../4232_Children Are Our Future.json | 9 +- .../4359_Hitting the Books.json | 45 ++++ .../4360_A Seat at the Last Stand.json | 27 +- .../4372_The Great Work.json | 6 +- .../4374_A Boys Errand.json | 18 +- .../4375_Tipping the Scale.json | 9 +- .../4377_In the Dark of the Tower.json | 3 + .../4379_The Color of Joy.json | 9 +- .../MSQ/B-Garlemald/4381_A Capital Idea.json | 9 +- .../B-Garlemald/4382_Best of the Best.json | 59 ++++- .../B-Garlemald/4383_A Frosty Reception.json | 14 +- .../B-Garlemald/4384_Tracks in the Snow.json | 10 +- .../4385_How the Mighty Are Fallen.json | 119 ++++++++- .../MSQ/B-Garlemald/4387_A Way Forward.json | 9 +- .../B-Garlemald/4389_Personae non Gratae.json | 50 +++- .../MSQ/B-Garlemald/4392_Alea Iacta Est.json | 36 ++- .../B-Garlemald/4393_Strange Bedfellows.json | 33 ++- .../B-Garlemald/4394_In from the Cold.json | 13 +- .../B-Garlemald/4395_Gateway of the Gods.json | 13 +- .../B-Garlemald/4396_A Trip to the Moon.json | 9 +- .../MSQ/B-Garlemald/4398_The Martyr.json | 18 +- .../C-MareLamentorum/4400_Helping Hands.json | 9 +- .../4401_A Harey Situation.json | 10 + .../4402_A Taste of the Moon.json | 40 ++- .../C-MareLamentorum/4403_Styled a Hero.json | 23 +- .../4404_Alls Vale That Endsvale.json | 9 +- .../4405_Back to Old Tricks.json | 4 +- .../4406_Settiing Things Straight.json | 11 +- .../4407_Heart of the Matter.json | 5 +- .../C-MareLamentorum/4408_Returning Home.json | 19 +- .../MSQ/D-Thavnair2/4409_Skies Aflame.json | 3 + .../4410_The Blasphemy Unmasked.json | 24 ++ .../D-Thavnair2/4413_That We Might Live.json | 9 +- .../4414_When All Hope Seems Lost.json | 24 ++ .../D-Thavnair2/4416_Simple Pleasures.json | 31 ++- .../MSQ/D-Thavnair2/4418_At Worlds End.json | 16 +- .../4419_Return to the Crystarium.json | 25 +- .../MSQ/E-Elpis/4420_Hope Upon a Flower.json | 59 ++++- .../MSQ/E-Elpis/4422_In Search of Hermes.json | 9 +- .../4423_Ponder Warrant Cherish Welcome.json | 27 +- .../4425_Their Greatest Contribution.json | 9 +- .../MSQ/E-Elpis/4427_A Sentimental Gift.json | 27 +- .../4429_Travelers at the Crossroads.json | 9 +- .../4430_A Past Not Yet Come to Pass.json | 49 +++- .../4431_Witness to the Spectacle.json | 9 +- .../4433_A Flower upon Your Return.json | 18 +- .../E-Elpis/4434_Hunger in the Garden.json | 9 +- .../4438_Thou Must Live Die and Know.json | 9 +- .../4441_Going Underground.json | 18 +- .../F-Labyrinthos2/4442_No Job Too Small.json | 26 +- .../MSQ/F-Labyrinthos2/4443_Wise Guides.json | 6 +- .../4444_Agriculture Shock.json | 18 +- .../MSQ/F-Labyrinthos2/4445_Sage Council.json | 65 +++++ .../4448_Bonds of Adamantite.json | 18 +- QuestPaths/quest-v1.json | 39 ++- Questionable/Controller/GameUiController.cs | 246 ++++++++++++++---- Questionable/Controller/MovementController.cs | 6 +- Questionable/Controller/QuestController.cs | 7 +- Questionable/External/NavmeshIpc.cs | 4 +- Questionable/GameFunctions.cs | 11 +- .../Converter/DialogueChoiceTypeConverter.cs | 2 + Questionable/Model/V1/DialogueChoice.cs | 2 +- Questionable/Model/V1/EDialogChoiceType.cs | 4 +- Questionable/QuestionablePlugin.cs | 7 +- Questionable/Windows/DebugWindow.cs | 15 +- 66 files changed, 1352 insertions(+), 165 deletions(-) diff --git a/QuestPaths/Endwalker/AetherCurrents/Elpis/4313_The Perks of Being a Lost Flower.json b/QuestPaths/Endwalker/AetherCurrents/Elpis/4313_The Perks of Being a Lost Flower.json index 67f2dd3da..bf362d072 100644 --- a/QuestPaths/Endwalker/AetherCurrents/Elpis/4313_The Perks of Being a Lost Flower.json +++ b/QuestPaths/Endwalker/AetherCurrents/Elpis/4313_The Perks of Being a Lost Flower.json @@ -29,7 +29,14 @@ }, "TerritoryId": 961, "InteractionType": "Interact", - "AetheryteShortcut": "Elpis - Anagnorisis" + "AetheryteShortcut": "Elpis - Anagnorisis", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKZH018_04313_Q1_000_100", + "Answer": "TEXT_AKTKZH018_04313_A2_000_100" + } + ] } ] }, diff --git a/QuestPaths/Endwalker/AetherCurrents/Garlemald/4232_Children Are Our Future.json b/QuestPaths/Endwalker/AetherCurrents/Garlemald/4232_Children Are Our Future.json index 70d69c967..9e895ffcf 100644 --- a/QuestPaths/Endwalker/AetherCurrents/Garlemald/4232_Children Are Our Future.json +++ b/QuestPaths/Endwalker/AetherCurrents/Garlemald/4232_Children Are Our Future.json @@ -90,7 +90,14 @@ }, "StopDistance": 7, "TerritoryId": 958, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKZD008_04232_Q1_000_000", + "Answer": "TEXT_AKTKZD008_04232_A1_000_002" + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json index 641b2ced4..13f6043fb 100644 --- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json +++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4359_Hitting the Books.json @@ -75,6 +75,21 @@ }, "TerritoryId": 962, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ], + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMA103_04359_Q5_000_071", + "Yes": true + } + ], "$.0": "[1]", "$.2": "QuestVariables if done after [3]: 2 0 0 0 0 96" }, @@ -87,6 +102,21 @@ }, "TerritoryId": 962, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMA103_04359_Q2_000_049", + "Yes": true + } + ], "$.0": "[2]" }, { @@ -98,6 +128,21 @@ }, "TerritoryId": 962, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ], + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMA103_04359_Q3_000_055", + "Yes": true + } + ], "$.0": "[3]", "$.2": "QuestVariables if used first: 1 0 0 0 0 64" } diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4360_A Seat at the Last Stand.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4360_A Seat at the Last Stand.json index 6e75b26ad..c7ed8c7d1 100644 --- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4360_A Seat at the Last Stand.json +++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4360_A Seat at the Last Stand.json @@ -88,7 +88,14 @@ "Z": 130.47986 }, "TerritoryId": 962, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMA104_04360_Q3_000_130", + "Answer": "TEXT_AKTKMA104_04360_A3_000_131" + } + ] } ] }, @@ -103,7 +110,14 @@ "Z": 141.1001 }, "TerritoryId": 962, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMA104_04360_Q5_000_150", + "Answer": "TEXT_AKTKMA104_04360_A5_000_151" + } + ] } ] }, @@ -118,7 +132,14 @@ "Z": 148.11926 }, "TerritoryId": 962, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMA104_04360_Q6_000_170", + "Answer": "TEXT_AKTKMA104_04360_A6_000_171" + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4372_The Great Work.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4372_The Great Work.json index 19fbf200f..988d57d34 100644 --- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4372_The Great Work.json +++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4372_The Great Work.json @@ -101,9 +101,9 @@ }, { "Position": { - "X": -425.43683, - "Y": 38.413155, - "Z": 160.11292 + "X": -436.3368, + "Y": 38.647118, + "Z": 166.13683 }, "TerritoryId": 957, "InteractionType": "WalkTo" diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4374_A Boys Errand.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4374_A Boys Errand.json index 9c2b153f2..8d9fb6ed3 100644 --- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4374_A Boys Errand.json +++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4374_A Boys Errand.json @@ -43,7 +43,14 @@ "Z": 28.244385 }, "TerritoryId": 957, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMA118_04374_Q1_000_041", + "Yes": true + } + ] } ] }, @@ -108,7 +115,14 @@ "Z": -555.04694 }, "TerritoryId": 957, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMA118_04374_Q2_000_141", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4375_Tipping the Scale.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4375_Tipping the Scale.json index 21c598587..34840010c 100644 --- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4375_Tipping the Scale.json +++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4375_Tipping the Scale.json @@ -105,7 +105,14 @@ "Z": -565.0569 }, "TerritoryId": 957, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMA119_04375_Q1_000_056", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4377_In the Dark of the Tower.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4377_In the Dark of the Tower.json index 709a45aea..482feffeb 100644 --- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4377_In the Dark of the Tower.json +++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4377_In the Dark of the Tower.json @@ -1,6 +1,9 @@ { "$schema": "https://carvel.li/questionable/quest-1.0", "Author": "liza", + "TerritoryBlacklist": [ + 952 + ], "QuestSequence": [ { "Sequence": 0, diff --git a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4379_The Color of Joy.json b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4379_The Color of Joy.json index 6473b6130..3eae20ee8 100644 --- a/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4379_The Color of Joy.json +++ b/QuestPaths/Endwalker/MSQ/A-Thavnair1-Labyrinthos1/4379_The Color of Joy.json @@ -119,7 +119,14 @@ }, "StopDistance": 6, "TerritoryId": 962, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMA123_04379_Q1_000_163", + "Yes": true + } + ] } ] } diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4381_A Capital Idea.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4381_A Capital Idea.json index fa6d6a21d..e968456a4 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4381_A Capital Idea.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4381_A Capital Idea.json @@ -59,7 +59,14 @@ }, "TerritoryId": 129, "InteractionType": "Interact", - "AetheryteShortcut": "Limsa Lominsa" + "AetheryteShortcut": "Limsa Lominsa", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMB102_04381_Q1_000_067", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4382_Best of the Best.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4382_Best of the Best.json index 7d10000e6..6eae9fa62 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4382_Best of the Best.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4382_Best of the Best.json @@ -30,7 +30,14 @@ }, "StopDistance": 7, "TerritoryId": 621, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMB103_04382_Q1_000_052", + "Yes": true + } + ] } ] }, @@ -62,7 +69,15 @@ "StopDistance": 7, "TerritoryId": 737, "InteractionType": "Interact", - "Comment": "A-Ruhn-Senna" + "Comment": "A-Ruhn-Senna", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 1038812, @@ -74,7 +89,15 @@ "StopDistance": 7, "TerritoryId": 737, "InteractionType": "Interact", - "Comment": "Sicard" + "Comment": "Sicard", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 1038813, @@ -86,7 +109,15 @@ "StopDistance": 7, "TerritoryId": 737, "InteractionType": "Interact", - "Comment": "Lyse" + "Comment": "Lyse", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] }, { "DataId": 1038814, @@ -98,7 +129,15 @@ "StopDistance": 7, "TerritoryId": 737, "InteractionType": "Interact", - "Comment": "Lucia" + "Comment": "Lucia", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] }, { "DataId": 1038815, @@ -110,7 +149,15 @@ "StopDistance": 7, "TerritoryId": 737, "InteractionType": "Interact", - "Comment": "Cirina" + "Comment": "Cirina", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 8 + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4383_A Frosty Reception.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4383_A Frosty Reception.json index 345a81a0c..1d54df363 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4383_A Frosty Reception.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4383_A Frosty Reception.json @@ -32,7 +32,19 @@ }, "TerritoryId": 621, "InteractionType": "SinglePlayerDuty", - "Comment": "A Frosty Reception" + "Comment": "A Frosty Reception", + "DialogueChoices": [ + { + "Type": "ContentTalkList", + "Prompt": "264", + "Answer": "267" + }, + { + "Type": "ContentTalkYesNo", + "Prompt": "268", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4384_Tracks in the Snow.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4384_Tracks in the Snow.json index d8b23832f..e16247092 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4384_Tracks in the Snow.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4384_Tracks in the Snow.json @@ -45,10 +45,11 @@ }, { "Position": { - "X": -188.58397, - "Y": 20.625948, - "Z": 408.3002 + "X": -188.84349, + "Y": 20.31553, + "Z": 406.13293 }, + "StopDistance": 1, "TerritoryId": 958, "InteractionType": "WalkTo", "DisableNavmesh": true, @@ -75,6 +76,7 @@ "Y": 3.426586, "Z": 360.1115 }, + "StopDistance": 1, "TerritoryId": 958, "InteractionType": "WalkTo", "DisableNavmesh": true, @@ -158,7 +160,7 @@ "Z": 159.10571 }, "TerritoryId": 958, - "InteractionType": "Interact" + "InteractionType": "WalkTo" } ] }, diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4385_How the Mighty Are Fallen.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4385_How the Mighty Are Fallen.json index 711b3ec24..94d98301a 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4385_How the Mighty Are Fallen.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4385_How the Mighty Are Fallen.json @@ -110,14 +110,123 @@ }, { "Position": { - "X": 393.71204, - "Y": 4.142438, - "Z": 251.71986 + "X": 394.97046, + "Y": 3.652959, + "Z": 254.77034 }, "TerritoryId": 958, - "InteractionType": "ShouldBeAJump", + "InteractionType": "Jump", "DisableNavmesh": true, - "Comment": "Jump on Pipeline and move near the Aether Current" + "JumpDestination": { + "Position": { + "X": 405.0264, + "Y": -2.2185562, + "Z": 267.40506 + }, + "StopDistance": 3 + } + }, + { + "Position": { + "X": 405.01987, + "Y": -2.2185562, + "Z": 298.9302 + }, + "TerritoryId": 958, + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": 405.01382, + "Y": -2.2185562, + "Z": 308.17484 + }, + "StopDistance": 3 + } + }, + { + "Position": { + "X": 404.9343, + "Y": -2.2185562, + "Z": 338.46368 + }, + "TerritoryId": 958, + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": 404.9452, + "Y": -2.2185562, + "Z": 347.15533 + }, + "StopDistance": 3 + } + }, + { + "Position": { + "X": 405.0104, + "Y": -2.2185562, + "Z": 379.0302 + }, + "TerritoryId": 958, + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": 404.98633, + "Y": -2.2185562, + "Z": 388.4368 + }, + "StopDistance": 3 + } + }, + { + "Position": { + "X": 405.02594, + "Y": -2.2185562, + "Z": 419.30426 + }, + "TerritoryId": 958, + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": 405.00076, + "Y": -2.2185562, + "Z": 427.6698 + }, + "StopDistance": 3 + } + }, + { + "Position": { + "X": 405.03207, + "Y": -2.2185562, + "Z": 457.66095 + }, + "TerritoryId": 958, + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": 404.94934, + "Y": -2.2185562, + "Z": 467.3867 + }, + "StopDistance": 3 + } + }, + { + "Position": { + "X": 405.04044, + "Y": -2.2185562, + "Z": 498.37363 + }, + "TerritoryId": 958, + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": 405.158, + "Y": -2.2185564, + "Z": 508.9487 + }, + "StopDistance": 3 + } }, { "DataId": 2012003, diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4387_A Way Forward.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4387_A Way Forward.json index 8cc0d700b..6e96c3c55 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4387_A Way Forward.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4387_A Way Forward.json @@ -78,7 +78,14 @@ }, "TerritoryId": 958, "InteractionType": "WaitForManualProgress", - "Comment": "Follow Alphinaud and Alisaie" + "Comment": "Follow Alphinaud and Alisaie", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMB108_04387_Q1_000_161", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4389_Personae non Gratae.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4389_Personae non Gratae.json index d0383fa8a..81827ee08 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4389_Personae non Gratae.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4389_Personae non Gratae.json @@ -30,6 +30,14 @@ "TerritoryId": 958, "InteractionType": "Interact", "Comment": "Caeso", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ], "$.0": "[1]", "$.1": "QuestVariables if done first: 17 0 0 0 0 64" }, @@ -43,6 +51,14 @@ "TerritoryId": 958, "InteractionType": "Interact", "Comment": "Octavia", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ], "$.0": "[2]", "$.2": "QuestVariables if done after [1]: 33 1 0 0 0 80" }, @@ -53,7 +69,15 @@ "Z": -178.38684 }, "TerritoryId": 958, - "InteractionType": "WalkTo" + "InteractionType": "WalkTo", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 1037715, @@ -65,6 +89,14 @@ "TerritoryId": 958, "InteractionType": "Interact", "Comment": "Sabinianus", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], "$.0": "[3]", "$.2": "QuestVariables if done after [1, 2]: 49 1 16 0 0 206" }, @@ -78,6 +110,14 @@ "TerritoryId": 958, "InteractionType": "Interact", "Comment": "Marcellinus", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ], "$.0": "[4]", "$.2": "QuestVariables if done after [1, 2, 3]: 65 17 16 0 0 240" }, @@ -91,6 +131,14 @@ "TerritoryId": 958, "InteractionType": "Interact", "Comment": "Magitek Radio", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 8 + ], "$.0": "[5]" } ] diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4392_Alea Iacta Est.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4392_Alea Iacta Est.json index 81aed27d9..d84e07be6 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4392_Alea Iacta Est.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4392_Alea Iacta Est.json @@ -31,6 +31,14 @@ "TerritoryId": 958, "InteractionType": "Interact", "Comment": "Marcellinus", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], "$.1": "QuestVariables if done first: 16 16 0 0 0 128" }, { @@ -42,7 +50,15 @@ }, "TerritoryId": 958, "InteractionType": "Interact", - "Comment": "Octavia" + "Comment": "Octavia", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] } ] }, @@ -57,7 +73,14 @@ "Z": -422.62915 }, "TerritoryId": 958, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMB113_04392_Q1_000_031", + "Answer": "TEXT_AKTKMB113_04392_A1_000_032" + } + ] } ] }, @@ -72,7 +95,14 @@ "Z": -232.98999 }, "TerritoryId": 958, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMB113_04392_Q2_000_051", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json index 116ea21f7..c6c583019 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4393_Strange Bedfellows.json @@ -215,6 +215,14 @@ "KillEnemyDataIds": [ 14078 ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ], "$.0": "[1]", "$.1": "QuestVariables if done first: (before) 0 0 2 0 0 0 (after) 16 16 2 0 0 64" }, @@ -234,6 +242,14 @@ "Comment": "TODO Needs item use?", "ItemId": 2003231, "ItemUseHealthMaxPercent": 10, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ], "$.0": "[2]", "$.1": "QuestVariables if done after [1]: 32 17 1 0 0 96" }, @@ -246,7 +262,14 @@ }, "TerritoryId": 958, "InteractionType": "Interact", - "Comment": "TODO Maybe move the train station aether current interaction before this", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], "$.0": "[3]", "$.1": "QuestVariables if done after [1, 2]: 49 17 1 0 0 224" }, @@ -266,6 +289,14 @@ "Comment": "TODO Needs item use?", "ItemId": 2003231, "ItemUseHealthMaxPercent": 10, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ], "$.0": "[4]" } ] diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4394_In from the Cold.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4394_In from the Cold.json index 25b94232a..e99a2460c 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4394_In from the Cold.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4394_In from the Cold.json @@ -1,6 +1,9 @@ { "$schema": "https://carvel.li/questionable/quest-1.0", "Author": "liza", + "TerritoryBlacklist": [ + 1011 + ], "QuestSequence": [ { "Sequence": 0, @@ -29,7 +32,14 @@ }, "TerritoryId": 958, "InteractionType": "SinglePlayerDuty", - "Comment": "In from the Cold" + "Comment": "In from the Cold", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMB115_04394_Q1_000_042", + "Yes": true + } + ] } ] }, @@ -43,6 +53,7 @@ "Y": 22.20836, "Z": 403.76892 }, + "StopDistance": 5, "TerritoryId": 958, "InteractionType": "Interact" } diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4395_Gateway of the Gods.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4395_Gateway of the Gods.json index c3ac84662..85247d7e5 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4395_Gateway of the Gods.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4395_Gateway of the Gods.json @@ -1,6 +1,9 @@ { "$schema": "https://carvel.li/questionable/quest-1.0", "Author": "liza", + "TerritoryBlacklist": [ + 969 + ], "QuestSequence": [ { "Sequence": 0, @@ -80,7 +83,14 @@ "Z": -677.4243 }, "TerritoryId": 958, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMB116_04395_Q3_000_206", + "Yes": true + } + ] }, { "DataId": 2012112, @@ -114,6 +124,7 @@ "Y": 0, "Z": 33.585083 }, + "StopDistance": 4, "TerritoryId": 1024, "InteractionType": "Interact" } diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4396_A Trip to the Moon.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4396_A Trip to the Moon.json index 3e5fbbefd..05c47368e 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4396_A Trip to the Moon.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4396_A Trip to the Moon.json @@ -28,7 +28,14 @@ "Z": -0.00103838 }, "TerritoryId": 1024, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMB117_04396_Q1_000_060", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/B-Garlemald/4398_The Martyr.json b/QuestPaths/Endwalker/MSQ/B-Garlemald/4398_The Martyr.json index 51e28375d..8512b2e40 100644 --- a/QuestPaths/Endwalker/MSQ/B-Garlemald/4398_The Martyr.json +++ b/QuestPaths/Endwalker/MSQ/B-Garlemald/4398_The Martyr.json @@ -16,7 +16,14 @@ "Z": 467.46008 }, "TerritoryId": 959, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMB119_04398_Q1_000_001", + "Answer": "TEXT_AKTKMB119_04398_A1_000_002" + } + ] } ] }, @@ -31,7 +38,14 @@ "Z": 467.46008 }, "TerritoryId": 959, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMB119_04398_Q2_000_010", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4400_Helping Hands.json b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4400_Helping Hands.json index 6fe492444..e47ddb6fe 100644 --- a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4400_Helping Hands.json +++ b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4400_Helping Hands.json @@ -137,7 +137,14 @@ }, "StopDistance": 5, "TerritoryId": 959, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMC102_04400_Q1_000_151", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4401_A Harey Situation.json b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4401_A Harey Situation.json index e29218484..edaf5084f 100644 --- a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4401_A Harey Situation.json +++ b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4401_A Harey Situation.json @@ -1,6 +1,7 @@ { "$schema": "https://carvel.li/questionable/quest-1.0", "Author": "liza", + "Comment": "TODO add aether current (2818368) here since it can't be reached later with mount speed 0", "QuestSequence": [ { "Sequence": 0, @@ -97,6 +98,15 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": -9.783533, + "Y": -49.589592, + "Z": -339.60205 + }, + "TerritoryId": 959, + "InteractionType": "WalkTo" + }, { "Position": { "X": -72.39724, diff --git a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4402_A Taste of the Moon.json b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4402_A Taste of the Moon.json index 8f90639fa..ed304e3a8 100644 --- a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4402_A Taste of the Moon.json +++ b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4402_A Taste of the Moon.json @@ -81,7 +81,20 @@ { "DataId": 2012178, "TerritoryId": 959, + "StopDistance": 3, "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMC104_04402_Q1_000_071", + "Answer": "TEXT_AKTKMC104_04402_A1_000_074" + }, + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMC104_04402_Q2_000_081", + "Yes": true + } + ], "Comment": "Navmesh can't jump" } ] @@ -102,10 +115,33 @@ }, { "DataId": 1038912, - "StopDistance": 5, + "Position": { + "X": -462.06528, + "Y": -155.5629, + "Z": -625.5277 + }, + "TerritoryId": 959, + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": -453.99258, + "Y": -168, + "Z": -618.5703 + }, + "StopDistance": 8 + } + }, + { + "DataId": 1038912, + "Position": { + "X": -455.40552, + "Y": -168, + "Z": -620.05035 + }, "TerritoryId": 959, "InteractionType": "Interact", - "Comment": "Navmesh can't jump" + "DialogueChoices": [ + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4403_Styled a Hero.json b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4403_Styled a Hero.json index 3223e91a8..f48c68c2e 100644 --- a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4403_Styled a Hero.json +++ b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4403_Styled a Hero.json @@ -49,6 +49,13 @@ "StopDistance": 5, "TerritoryId": 959, "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMC105_04403_Q1_000_073", + "Answer": "TEXT_AKTKMC105_04403_A1_000_075" + } + ], "Comment": "Navmesh can't jump" } ] @@ -70,6 +77,13 @@ "StopDistance": 5, "TerritoryId": 959, "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMC105_04403_Q1_000_118", + "Answer": "TEXT_AKTKMC105_04403_A1_000_120" + } + ], "Comment": "Navmesh can't jump" } ] @@ -116,7 +130,14 @@ }, "TerritoryId": 959, "InteractionType": "Interact", - "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow" + "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMC105_04403_SYSTEM_000_215", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4404_Alls Vale That Endsvale.json b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4404_Alls Vale That Endsvale.json index 4293bb8f6..201cd1886 100644 --- a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4404_Alls Vale That Endsvale.json +++ b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4404_Alls Vale That Endsvale.json @@ -64,7 +64,14 @@ "Z": -494.13293 }, "TerritoryId": 959, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMC106_04404_Q1_000_021", + "Answer": "TEXT_AKTKMC106_04404_A1_000_022" + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4405_Back to Old Tricks.json b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4405_Back to Old Tricks.json index 6131425d9..a75f5f0e8 100644 --- a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4405_Back to Old Tricks.json +++ b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4405_Back to Old Tricks.json @@ -46,7 +46,7 @@ }, "TerritoryId": 959, "InteractionType": "SinglePlayerDuty", - "Comment": "Follow Urianger" + "Comment": "Follow Urianger (TODO is this sequence used?)" } ] }, @@ -62,7 +62,7 @@ }, "TerritoryId": 959, "InteractionType": "SinglePlayerDuty", - "Comment": "Follow Urianger (but you failed the first time)" + "Comment": "Follow Urianger" } ] }, diff --git a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4406_Settiing Things Straight.json b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4406_Settiing Things Straight.json index ed498ea1f..f84dcfd58 100644 --- a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4406_Settiing Things Straight.json +++ b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4406_Settiing Things Straight.json @@ -136,9 +136,16 @@ "Z": -558.8681 }, "TerritoryId": 959, - "InteractionType": "ShouldBeAJump", + "InteractionType": "Jump", "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow", - "Comment": "Navmesh can't jump" + "JumpDestination": { + "Position": { + "X": 307.72073, + "Y": -143.15913, + "Z": -563.4788 + }, + "StopDistance": 5 + } }, { "DataId": 2012012, diff --git a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4407_Heart of the Matter.json b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4407_Heart of the Matter.json index dbd2af4da..a417052bf 100644 --- a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4407_Heart of the Matter.json +++ b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4407_Heart of the Matter.json @@ -31,7 +31,10 @@ "TerritoryId": 959, "InteractionType": "Interact", "AetheryteShortcut": "Mare Lamentorum - Bestways Burrow", - "Comment": "Teleporter" + "TargetTerritoryId": 959, + "SkipIf": [ + "Never" + ] }, { "Position": { diff --git a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4408_Returning Home.json b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4408_Returning Home.json index b0e712a66..0c584860f 100644 --- a/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4408_Returning Home.json +++ b/QuestPaths/Endwalker/MSQ/C-MareLamentorum/4408_Returning Home.json @@ -39,7 +39,8 @@ "Z": 728.96924 }, "TerritoryId": 959, - "InteractionType": "Interact" + "InteractionType": "Interact", + "TargetTerritoryId": 1024 }, { "DataId": 1038960, @@ -111,7 +112,14 @@ "Z": -5.081299 }, "TerritoryId": 987, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMC110_04408_Q3_000_170", + "Yes": true + } + ] } ] }, @@ -130,6 +138,13 @@ "AethernetShortcut": [ "[Old Sharlayan] Aetheryte Plaza", "[Old Sharlayan] The Baldesion Annex" + ], + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMC110_04408_Q4_000_204", + "Yes": true + } ] } ] diff --git a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4409_Skies Aflame.json b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4409_Skies Aflame.json index 069e95df9..ef589423a 100644 --- a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4409_Skies Aflame.json +++ b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4409_Skies Aflame.json @@ -1,6 +1,9 @@ { "$schema": "https://carvel.li/questionable/quest-1.0", "Author": "liza", + "TerritoryBlacklist": [ + 970 + ], "QuestSequence": [ { "Sequence": 0, diff --git a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json index a72c9042c..a23d73f86 100644 --- a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json +++ b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4410_The Blasphemy Unmasked.json @@ -60,6 +60,14 @@ }, "TerritoryId": 963, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], "Comment": "Varsra" }, { @@ -71,6 +79,14 @@ }, "TerritoryId": 963, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ], "Comment": "Zeytahnur" }, { @@ -82,6 +98,14 @@ }, "TerritoryId": 963, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ], "Comment": "Rahdvira" } ] diff --git a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4413_That We Might Live.json b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4413_That We Might Live.json index 7cc177668..82f83cbe7 100644 --- a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4413_That We Might Live.json +++ b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4413_That We Might Live.json @@ -66,7 +66,14 @@ "Z": -330.46472 }, "TerritoryId": 957, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMD105_04413_Q1_000_095", + "Answer": "TEXT_AKTKMD105_04413_A1_000_096" + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4414_When All Hope Seems Lost.json b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4414_When All Hope Seems Lost.json index a540b3e63..3e6c3e564 100644 --- a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4414_When All Hope Seems Lost.json +++ b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4414_When All Hope Seems Lost.json @@ -140,6 +140,14 @@ "KillEnemyDataIds": [ 13987 ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], "$.0": "[1]", "$.1": "QuestVariables if done first: 16 1 0 0 0 128" }, @@ -155,6 +163,14 @@ "KillEnemyDataIds": [ 13986 ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ], "$.0": "[2]", "$.1": "QuestVariables if done after [1]: 33 1 0 0 0 192", "$.2": "QuestVariables if done after [3]: 33 32 0 0 0 96" @@ -172,6 +188,14 @@ 13985, 13984 ], + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ], "$.0": "[3]", "$.2": "QuestVariables if done first: 16 32 0 0 0 32" } diff --git a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4416_Simple Pleasures.json b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4416_Simple Pleasures.json index a045b5ac9..2b93258da 100644 --- a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4416_Simple Pleasures.json +++ b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4416_Simple Pleasures.json @@ -52,6 +52,7 @@ }, { "Sequence": 3, + "Comment": "TODO Check flags", "Steps": [ { "DataId": 1037628, @@ -61,7 +62,15 @@ "Z": -243.76288 }, "TerritoryId": 957, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 1040449, @@ -71,7 +80,15 @@ "Z": -238.3612 }, "TerritoryId": 957, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 1037629, @@ -81,7 +98,15 @@ "Z": -200.85455 }, "TerritoryId": 957, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4418_At Worlds End.json b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4418_At Worlds End.json index 51f9e948c..c1eea5b6e 100644 --- a/QuestPaths/Endwalker/MSQ/D-Thavnair2/4418_At Worlds End.json +++ b/QuestPaths/Endwalker/MSQ/D-Thavnair2/4418_At Worlds End.json @@ -95,7 +95,14 @@ "Z": -87.90729 }, "TerritoryId": 963, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMD110_04418_Q2_000_172", + "Answer": "TEXT_AKTKMD110_04418_A2_000_173" + } + ] } ] }, @@ -114,6 +121,13 @@ "AethernetShortcut": [ "[Radz-at-Han] Hall of the Radiant Host", "[Radz-at-Han] Mehryde's Meyhane" + ], + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMD110_04418_Q3_000_223", + "Answer": "TEXT_AKTKMD110_04418_A3_000_225" + } ] } ] diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4419_Return to the Crystarium.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4419_Return to the Crystarium.json index ceab4a96f..de65b0a50 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4419_Return to the Crystarium.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4419_Return to the Crystarium.json @@ -50,12 +50,33 @@ "Z": -210.52875 }, "TerritoryId": 819, - "InteractionType": "WaitForManualProgress", - "Comment": "Cutscene Interaction needed", + "InteractionType": "Interact", "AetheryteShortcut": "Crystarium", "AethernetShortcut": [ "[Crystarium] Aetheryte Plaza", "[Crystarium] The Cabinet of Curiosity" + ], + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKME101_04419_Q2_000_071", + "Yes": true + }, + { + "Type": "List", + "Prompt": "TEXT_AKTKME101_04419_Q3_000_083", + "Answer": "TEXT_AKTKME101_04419_A3_000_087" + }, + { + "Type": "List", + "Prompt": "TEXT_AKTKME101_04419_Q4_000_113", + "Answer": "TEXT_AKTKME101_04419_A4_000_114" + }, + { + "Type": "List", + "Prompt": "TEXT_AKTKME101_04419_Q5_000_129", + "Answer": "TEXT_AKTKME101_04419_A5_000_131" + } ] } ] diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4420_Hope Upon a Flower.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4420_Hope Upon a Flower.json index 5630fd9ff..41e2d48e9 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4420_Hope Upon a Flower.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4420_Hope Upon a Flower.json @@ -33,7 +33,9 @@ "AethernetShortcut": [ "[Crystarium] The Cabinet of Curiosity", "[Crystarium] The Dossal Gate" - ] + ], + "Comment": "TODO Check target territory id", + "TargetTerritoryId": 844 } ] }, @@ -47,13 +49,40 @@ "Z": -4.654831 }, "TerritoryId": 1031, - "InteractionType": "WalkTo" + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": -1.5539734, + "Y": 3.6164591, + "Z": -1.1141448 + } + }, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] }, { "DataId": 2012128, + "Position": { + "X": -0.001528129, + "Y": 4.931927, + "Z": 0.01416349 + }, "TerritoryId": 1031, "InteractionType": "Interact", - "Comment": "Interact with Aetheryte (Navmesh can't jump)", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ], "$.0": "[1]", "$.1": "QuestVariables if done first: 16 0 16 0 0 16" }, @@ -66,6 +95,14 @@ }, "TerritoryId": 1031, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], "$.0": "[2]", "$": "QuestVariables after: 32 1 16 0 0 144" }, @@ -78,6 +115,14 @@ }, "TerritoryId": 1031, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ], "$.0": "[3]", "$.1": "QuestVariables after: 49 1 16 0 0 208" }, @@ -90,6 +135,14 @@ }, "TerritoryId": 1031, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ], "$.0": "[4]", "$.2": "QuestVariables if done first: 16 16 0 0 0 32" } diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4422_In Search of Hermes.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4422_In Search of Hermes.json index a8d89fff0..5b33b5f06 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4422_In Search of Hermes.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4422_In Search of Hermes.json @@ -58,7 +58,14 @@ "Z": 157.61035 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKME104_04422_Q1_000_094", + "Answer": "TEXT_AKTKME104_04422_A1_000_095" + } + ] } ] } diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4423_Ponder Warrant Cherish Welcome.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4423_Ponder Warrant Cherish Welcome.json index b9d0e5d28..09b962e25 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4423_Ponder Warrant Cherish Welcome.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4423_Ponder Warrant Cherish Welcome.json @@ -85,7 +85,14 @@ "Z": 73.258545 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKME105_04423_Q1_000_106", + "Answer": "TEXT_AKTKME105_04423_A1_000_107" + } + ] } ] }, @@ -100,7 +107,14 @@ "Z": 121.47705 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKME105_04423_Q4_000_178", + "Answer": "TEXT_AKTKME105_04423_A4_000_180" + } + ] } ] }, @@ -130,7 +144,14 @@ "Z": 107.133545 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKME105_04423_Q7_000_313", + "Answer": "TEXT_AKTKME105_04423_A7_000_314" + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4425_Their Greatest Contribution.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4425_Their Greatest Contribution.json index 39be27cde..3de56d84a 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4425_Their Greatest Contribution.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4425_Their Greatest Contribution.json @@ -13,7 +13,14 @@ "Z": 63.70642 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKME107_04425_Q1_000_024", + "Answer": "TEXT_AKTKME107_04425_A1_000_025" + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4427_A Sentimental Gift.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4427_A Sentimental Gift.json index 9bb363bc1..6c61e46bf 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4427_A Sentimental Gift.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4427_A Sentimental Gift.json @@ -46,6 +46,14 @@ }, "TerritoryId": 961, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], "$.1": "QuestVariables if done first: 1 0 0 0 0 128" }, { @@ -56,7 +64,15 @@ "Z": 543.572 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] } ] }, @@ -116,7 +132,14 @@ "Z": 460.77673 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKME109_04427_Q3_000_163", + "Answer": "TEXT_AKTKME109_04427_A3_000_164" + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4429_Travelers at the Crossroads.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4429_Travelers at the Crossroads.json index f2751646a..7a220579a 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4429_Travelers at the Crossroads.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4429_Travelers at the Crossroads.json @@ -102,7 +102,14 @@ "Z": -113.81708 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKME111_04429_Q2_000_094", + "Answer": "TEXT_AKTKME111_04429_A2_000_096" + } + ] } ] } diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4430_A Past Not Yet Come to Pass.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4430_A Past Not Yet Come to Pass.json index 3d7482549..3bcc5a97f 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4430_A Past Not Yet Come to Pass.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4430_A Past Not Yet Come to Pass.json @@ -84,8 +84,29 @@ "Z": -173.75458 }, "TerritoryId": 961, - "InteractionType": "WaitForManualProgress", - "Comment": "Talk (1, 2, 1)" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKME112_04430_Q1_000_072", + "Yes": true + }, + { + "Type": "List", + "Prompt": "TEXT_AKTKME112_04430_Q2_000_076", + "Answer": "TEXT_AKTKME112_04430_A2_000_077" + }, + { + "Type": "List", + "Prompt": "TEXT_AKTKME112_04430_Q3_000_089", + "Answer": "TEXT_AKTKME112_04430_A3_000_091" + }, + { + "Type": "List", + "Prompt": "TEXT_AKTKME112_04430_Q4_000_098", + "Answer": "TEXT_AKTKME112_04430_A4_000_099" + } + ] } ] }, @@ -125,7 +146,29 @@ "Z": -155.5047 }, "TerritoryId": 961, - "InteractionType": "WaitForManualProgress", + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKME112_04430_Q5_000_152", + "Yes": true + }, + { + "Type": "List", + "Prompt": "TEXT_AKTKME112_04430_Q6_000_154", + "Answer": "TEXT_AKTKME112_04430_A6_000_156" + }, + { + "Type": "List", + "Prompt": "TEXT_AKTKME112_04430_Q7_000_168", + "Answer": "TEXT_AKTKME112_04430_A7_000_170" + }, + { + "Type": "List", + "Prompt": "TEXT_AKTKME112_04430_Q8_000_181", + "Answer": "TEXT_AKTKME112_04430_A8_000_182" + } + ], "Comment": "Talk (2, 2, 1)" } ] diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4431_Witness to the Spectacle.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4431_Witness to the Spectacle.json index 277b19a02..55965d8b2 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4431_Witness to the Spectacle.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4431_Witness to the Spectacle.json @@ -13,7 +13,14 @@ "Z": -175.24994 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKME113_04431_Q1_000_014", + "Answer": "TEXT_AKTKME113_04431_A1_000_016" + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4433_A Flower upon Your Return.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4433_A Flower upon Your Return.json index fdf7b81c4..2cb8c3836 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4433_A Flower upon Your Return.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4433_A Flower upon Your Return.json @@ -40,7 +40,14 @@ "Z": 198.68762 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKME115_04433_Q1_000_021", + "Yes": true + } + ] } ] }, @@ -82,7 +89,14 @@ "Z": -367.48303 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKME115_04433_Q2_000_062", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4434_Hunger in the Garden.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4434_Hunger in the Garden.json index 7850888ca..c6b7e18de 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4434_Hunger in the Garden.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4434_Hunger in the Garden.json @@ -29,7 +29,14 @@ "Z": -653.13196 }, "TerritoryId": 961, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKME116_04434_Q1_000_021", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/E-Elpis/4438_Thou Must Live Die and Know.json b/QuestPaths/Endwalker/MSQ/E-Elpis/4438_Thou Must Live Die and Know.json index d21a65b01..049921280 100644 --- a/QuestPaths/Endwalker/MSQ/E-Elpis/4438_Thou Must Live Die and Know.json +++ b/QuestPaths/Endwalker/MSQ/E-Elpis/4438_Thou Must Live Die and Know.json @@ -30,7 +30,14 @@ }, "TerritoryId": 961, "InteractionType": "Interact", - "Fly": true + "Fly": true, + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKME120_04438_Q1_000_008", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4441_Going Underground.json b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4441_Going Underground.json index 95764d141..d587d581d 100644 --- a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4441_Going Underground.json +++ b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4441_Going Underground.json @@ -45,7 +45,14 @@ "Z": -393.36237 }, "TerritoryId": 956, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMF103_04441_Q1_000_096", + "Yes": true + } + ] }, { "DataId": 1039711, @@ -85,7 +92,14 @@ "Z": 302.11328 }, "TerritoryId": 956, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMF103_04441_Q1_000_181", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4442_No Job Too Small.json b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4442_No Job Too Small.json index cd00f5c78..14dea50cd 100644 --- a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4442_No Job Too Small.json +++ b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4442_No Job Too Small.json @@ -65,6 +65,14 @@ }, "TerritoryId": 956, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ], "$.0": "[1] Navmesh navigates here first, even if you feed it [2]", "$.1": "QuestVariables if done first: 1 0 0 0 0 64" }, @@ -77,6 +85,14 @@ }, "TerritoryId": 956, "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ], "$.0": "[2]", "$.1": "QuestVariables after: 2 0 0 0 0 192" }, @@ -88,7 +104,15 @@ "Z": -14.450317 }, "TerritoryId": 956, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] } ] }, diff --git a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4443_Wise Guides.json b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4443_Wise Guides.json index 38c2dbaf7..05ca4eb27 100644 --- a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4443_Wise Guides.json +++ b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4443_Wise Guides.json @@ -110,7 +110,11 @@ "Z": 298.72583 }, "TerritoryId": 956, - "InteractionType": "Interact" + "InteractionType": "Interact", + "TargetTerritoryId": 956, + "SkipIf": [ + "Never" + ] }, { "DataId": 1040397, diff --git a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4444_Agriculture Shock.json b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4444_Agriculture Shock.json index f0b1fc983..e43a5ca71 100644 --- a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4444_Agriculture Shock.json +++ b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4444_Agriculture Shock.json @@ -60,7 +60,14 @@ }, "StopDistance": 0.25, "TerritoryId": 956, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMF106_04444_Q3_000_125", + "Answer": "TEXT_AKTKMF106_04444_A3_000_126" + } + ] } ] }, @@ -138,7 +145,14 @@ "Z": 299.8855 }, "TerritoryId": 956, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_AKTKMF106_04444_Q4_000_272", + "Answer": "TEXT_AKTKMF106_04444_A4_000_273" + } + ] } ] } diff --git a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4445_Sage Council.json b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4445_Sage Council.json index 23f73707e..93cc272c5 100644 --- a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4445_Sage Council.json +++ b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4445_Sage Council.json @@ -72,6 +72,14 @@ "TerritoryId": 956, "InteractionType": "Interact", "Comment": "Distracted Researcher", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + 2, + null + ], "$.0": "[1]", "$.1": "QuestVariables if done first: 1 0 0 0 2 0" }, @@ -85,6 +93,14 @@ "TerritoryId": 956, "InteractionType": "Interact", "Comment": "Hyperventilating Engineer", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + 128, + null + ], "$.0": "[2]", "$.1": "QuestVariables if done after [1]: 2 0 0 0 130 0" }, @@ -98,6 +114,14 @@ "TerritoryId": 956, "InteractionType": "Interact", "Comment": "Harried Aetherologist", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + 8, + null + ], "$.0": "[3]", "$.1": "QuestVariables if done after [2]: 3 0 0 0 138 0" }, @@ -111,6 +135,15 @@ "TerritoryId": 956, "InteractionType": "Interact", "Comment": "Grimacing Naturalist", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + 4, + null + ], + "Mount": true, "$.0": "[4]", "$.1": "QuestVariables if done after [3]: 4 0 0 0 142 0" }, @@ -124,6 +157,14 @@ "TerritoryId": 956, "InteractionType": "Interact", "Comment": "Ponderous Mathematician", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + 64, + null + ], "$.0": "[5]", "$.1": "QuestVariables if done after [4]: 5 0 0 0 206 0" }, @@ -137,6 +178,14 @@ "TerritoryId": 956, "InteractionType": "Interact", "Comment": "Despondent Engineer", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + 32, + null + ], "Mount": true, "$.0": "[6]", "$.1": "QuestVariables if done after [5]: 6 0 0 0 238 0" @@ -151,6 +200,14 @@ "TerritoryId": 956, "InteractionType": "Interact", "Comment": "Skeptical Researcher", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + 1, + null + ], "Mount": true, "$.0": "[7]", "$.1": "QuestVariables if done after [6]: 7 0 0 0 239 0" @@ -165,6 +222,14 @@ "TerritoryId": 956, "InteractionType": "Interact", "Comment": "Anxious Engineer", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + 16, + null + ], "$.0": "[8]", "$.2": "QuestVariables if done first: 1 0 0 0 16 0" } diff --git a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4448_Bonds of Adamantite.json b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4448_Bonds of Adamantite.json index 4574f6d0b..d0dae4ea3 100644 --- a/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4448_Bonds of Adamantite.json +++ b/QuestPaths/Endwalker/MSQ/F-Labyrinthos2/4448_Bonds of Adamantite.json @@ -39,7 +39,14 @@ "Z": -81.28485 }, "TerritoryId": 956, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMF110_04448_Q1_000_031", + "Yes": true + } + ] } ] }, @@ -85,7 +92,14 @@ "Z": 302.17432 }, "TerritoryId": 956, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "Prompt": "TEXT_AKTKMF110_04448_Q2_000_111", + "Yes": true + } + ] } ] }, diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index ff33740aa..58c989077 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -647,7 +647,17 @@ "if": { "properties": { "InteractionType": { - "const": "Interact" + "anyOf": [ + { + "const": "Interact" + }, + { + "const": "SinglePlayerDuty" + }, + { + "const": "WaitForManualProgress" + } + ] } } }, @@ -662,14 +672,19 @@ "type": "string", "enum": [ "YesNo", - "List" + "List", + "ContentTalkYesNo", + "ContentTalkList" ] }, "ExcelSheet": { "type": "string" }, "Prompt": { - "type": "string" + "type": [ + "string", + "null" + ] } }, "required": [ @@ -681,7 +696,14 @@ "if": { "properties": { "Type": { - "const": "YesNo" + "anyOf": [ + { + "const": "YesNo" + }, + { + "const": "ContentTalkYesNo" + } + ] } } }, @@ -701,7 +723,14 @@ "if": { "properties": { "Type": { - "const": "List" + "anyOf": [ + { + "const": "List" + }, + { + "const": "ContentTalkList" + } + ] } } }, diff --git a/Questionable/Controller/GameUiController.cs b/Questionable/Controller/GameUiController.cs index 63884ed37..fc15fb0b6 100644 --- a/Questionable/Controller/GameUiController.cs +++ b/Questionable/Controller/GameUiController.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Globalization; using System.Linq; using Dalamud.Game.Addon.Lifecycle; using Dalamud.Game.Addon.Lifecycle.AddonArgTypes; @@ -19,110 +21,216 @@ internal sealed class GameUiController : IDisposable private readonly IDataManager _dataManager; private readonly GameFunctions _gameFunctions; private readonly QuestController _questController; + private readonly IGameGui _gameGui; private readonly IPluginLog _pluginLog; public GameUiController(IClientState clientState, IAddonLifecycle addonLifecycle, IDataManager dataManager, - GameFunctions gameFunctions, QuestController questController, IPluginLog pluginLog) + GameFunctions gameFunctions, QuestController questController, IGameGui gameGui, IPluginLog pluginLog) { _clientState = clientState; _addonLifecycle = addonLifecycle; _dataManager = dataManager; _gameFunctions = gameFunctions; _questController = questController; + _gameGui = gameGui; _pluginLog = pluginLog; _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectString", SelectStringPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "CutSceneSelectString", CutsceneSelectStringPostSetup); + _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectIconString", SelectIconStringPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "Credit", CreditPostSetup); _addonLifecycle.RegisterListener(AddonEvent.PostSetup, "AkatsukiNote", UnendingCodexPostSetup); } + internal unsafe void HandleCurrentDialogueChoices() + { + if (_gameGui.TryGetAddonByName("SelectString", out AddonSelectString* addonSelectString)) + { + _pluginLog.Information("SelectString window is open"); + SelectStringPostSetup(addonSelectString); + } + + if (_gameGui.TryGetAddonByName("CutSceneSelectString", + out AddonCutSceneSelectString* addonCutSceneSelectString)) + { + _pluginLog.Information("CutSceneSelectString window is open"); + CutsceneSelectStringPostSetup(addonCutSceneSelectString); + } + + if (_gameGui.TryGetAddonByName("SelectIconString", out AddonSelectIconString* addonSelectIconString)) + { + _pluginLog.Information("SelectIconString window is open"); + SelectIconStringPostSetup(addonSelectIconString); + } + + if (_gameGui.TryGetAddonByName("SelectYesno", out AddonSelectYesno* addonSelectYesno)) + { + _pluginLog.Information("SelectYesno window is open"); + SelectYesnoPostSetup(addonSelectYesno); + } + } + private unsafe void SelectStringPostSetup(AddonEvent type, AddonArgs args) { AddonSelectString* addonSelectString = (AddonSelectString*)args.Addon; + SelectStringPostSetup(addonSelectString); + } + + private unsafe void SelectStringPostSetup(AddonSelectString* addonSelectString) + { string? actualPrompt = addonSelectString->AtkUnitBase.AtkValues[2].ReadAtkString(); if (actualPrompt == null) return; - var currentQuest = _questController.CurrentQuest; - if (currentQuest == null) - return; + List answers = new(); + for (ushort i = 7; i < addonSelectString->AtkUnitBase.AtkValuesCount; ++i) + answers.Add(addonSelectString->AtkUnitBase.AtkValues[i].ReadAtkString()); - var quest = currentQuest.Quest; - var step = quest.FindSequence(currentQuest.Sequence)?.FindStep(currentQuest.Step); - if (step == null) - return; - - foreach (var dialogueChoice in step.DialogueChoices) + int? answer = HandleListChoice(actualPrompt, answers); + if (answer != null) { - if (dialogueChoice.Answer == null) - continue; - - string? excelPrompt = - _gameFunctions.GetExcelString(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt); - string? excelAnswer = - _gameFunctions.GetExcelString(quest, dialogueChoice.ExcelSheet, dialogueChoice.Answer); - if (excelPrompt == null || actualPrompt != excelPrompt) - continue; - - for (ushort i = 7; i <= addonSelectString->AtkUnitBase.AtkValuesCount; ++i) - { - string? actualAnswer = addonSelectString->AtkUnitBase.AtkValues[i].ReadAtkString(); - if (actualAnswer == null || actualAnswer != excelAnswer) - continue; - - _questController.IncreaseDialogueChoicesSelected(); - addonSelectString->AtkUnitBase.FireCallbackInt(i - 7); - return; - } + _questController.IncreaseDialogueChoicesSelected(); + addonSelectString->AtkUnitBase.FireCallbackInt(answer.Value); } } private unsafe void CutsceneSelectStringPostSetup(AddonEvent type, AddonArgs args) { AddonCutSceneSelectString* addonCutSceneSelectString = (AddonCutSceneSelectString*)args.Addon; + CutsceneSelectStringPostSetup(addonCutSceneSelectString); + } + + private unsafe void CutsceneSelectStringPostSetup(AddonCutSceneSelectString* addonCutSceneSelectString) + { string? actualPrompt = addonCutSceneSelectString->AtkUnitBase.AtkValues[2].ReadAtkString(); if (actualPrompt == null) return; + List answers = new(); + for (int i = 5; i < addonCutSceneSelectString->AtkUnitBase.AtkValuesCount; ++i) + answers.Add(addonCutSceneSelectString->AtkUnitBase.AtkValues[i].ReadAtkString()); + + int? answer = HandleListChoice(actualPrompt, answers); + if (answer != null) + { + _questController.IncreaseDialogueChoicesSelected(); + addonCutSceneSelectString->AtkUnitBase.FireCallbackInt(answer.Value); + } + } + + private unsafe void SelectIconStringPostSetup(AddonEvent type, AddonArgs args) + { + AddonSelectIconString* addonSelectIconString = (AddonSelectIconString*)args.Addon; + SelectIconStringPostSetup(addonSelectIconString); + } + + private unsafe void SelectIconStringPostSetup(AddonSelectIconString* addonSelectIconString) + { + string? actualPrompt = addonSelectIconString->AtkUnitBase.AtkValues[3].ReadAtkString(); + if (string.IsNullOrEmpty(actualPrompt)) + actualPrompt = null; + + List answers = new(); + for (ushort i = 0; i < addonSelectIconString->AtkUnitBase.AtkValues[5].Int; i++) + answers.Add(addonSelectIconString->AtkUnitBase.AtkValues[i * 3 + 7].ReadAtkString()); + + int? answer = HandleListChoice(actualPrompt, answers); + if (answer != null) + { + _questController.IncreaseDialogueChoicesSelected(); + addonSelectIconString->AtkUnitBase.FireCallbackInt(answer.Value); + } + } + + + private int? HandleListChoice(string? actualPrompt, List answers) + { var currentQuest = _questController.CurrentQuest; if (currentQuest == null) - return; + { + _pluginLog.Information("Ignoring list choice, no active quest"); + return null; + } var quest = currentQuest.Quest; var step = quest.FindSequence(currentQuest.Sequence)?.FindStep(currentQuest.Step); if (step == null) - return; + { + _pluginLog.Information("Ignoring list choice, no active step"); + return null; + } - foreach (DialogueChoice dialogueChoice in step.DialogueChoices) + foreach (var dialogueChoice in step.DialogueChoices) { if (dialogueChoice.Answer == null) - continue; - - string? excelPrompt = - _gameFunctions.GetExcelString(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt); - string? excelAnswer = - _gameFunctions.GetExcelString(quest, dialogueChoice.ExcelSheet, dialogueChoice.Answer); - if (excelPrompt == null || actualPrompt != excelPrompt) - continue; - - for (int i = 5; i < addonCutSceneSelectString->AtkUnitBase.AtkValuesCount; ++i) { - string? actualAnswer = addonCutSceneSelectString->AtkUnitBase.AtkValues[i].ReadAtkString(); - if (actualAnswer == null || actualAnswer != excelAnswer) - continue; + _pluginLog.Information("Ignoring entry in DialogueChoices, no answer"); + continue; + } - _questController.IncreaseDialogueChoicesSelected(); - addonCutSceneSelectString->AtkUnitBase.FireCallbackInt(i - 5); - return; + string? excelPrompt = null, excelAnswer; + switch (dialogueChoice.Type) + { + case EDialogChoiceType.ContentTalkList: + if (dialogueChoice.Prompt != null) + { + excelPrompt = + _gameFunctions.GetContentTalk(uint.Parse(dialogueChoice.Prompt, + CultureInfo.InvariantCulture)); + } + + excelAnswer = + _gameFunctions.GetContentTalk(uint.Parse(dialogueChoice.Answer, CultureInfo.InvariantCulture)); + break; + case EDialogChoiceType.List: + if (dialogueChoice.Prompt != null) + { + excelPrompt = + _gameFunctions.GetDialogueText(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt); + } + + excelAnswer = + _gameFunctions.GetDialogueText(quest, dialogueChoice.ExcelSheet, dialogueChoice.Answer); + break; + default: + continue; + } + + if (actualPrompt == null && !string.IsNullOrEmpty(excelPrompt)) + { + _pluginLog.Information($"Unexpected excelPrompt: {excelPrompt}"); + continue; + } + + if (actualPrompt != null && (excelPrompt == null || !GameStringEquals(actualPrompt, excelPrompt))) + { + _pluginLog.Information($"Unexpected excelPrompt: {excelPrompt}, actualPrompt: {actualPrompt}"); + continue; + } + + for (int i = 0; i < answers.Count; ++i) + { + if (GameStringEquals(answers[i], excelAnswer)) + { + _pluginLog.Information($"Returning {i}: '{answers[i]}' for '{actualPrompt}'"); + return i; + } } } + + _pluginLog.Information($"No matching answer found for {actualPrompt}."); + return null; } private unsafe void SelectYesnoPostSetup(AddonEvent type, AddonArgs args) { AddonSelectYesno* addonSelectYesno = (AddonSelectYesno*)args.Addon; + SelectYesnoPostSetup(addonSelectYesno); + } + + private unsafe void SelectYesnoPostSetup(AddonSelectYesno* addonSelectYesno) + { string? actualPrompt = addonSelectYesno->AtkUnitBase.AtkValues[0].ReadAtkString(); if (actualPrompt == null) return; @@ -147,9 +255,22 @@ internal sealed class GameUiController : IDisposable _pluginLog.Verbose($"DefaultYesNo: Choice count: {step.DialogueChoices.Count}"); foreach (var dialogueChoice in step.DialogueChoices) { - string? excelPrompt = - _gameFunctions.GetExcelString(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt); - if (excelPrompt == null || actualPrompt != excelPrompt) + string? excelPrompt; + switch (dialogueChoice.Type) + { + case EDialogChoiceType.ContentTalkYesNo: + excelPrompt = + _gameFunctions.GetContentTalk(uint.Parse(dialogueChoice.Prompt, CultureInfo.InvariantCulture)); + break; + case EDialogChoiceType.YesNo: + excelPrompt = + _gameFunctions.GetDialogueText(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt); + break; + default: + continue; + } + + if (excelPrompt == null || !GameStringEquals(actualPrompt, excelPrompt)) continue; addonSelectYesno->AtkUnitBase.FireCallbackInt(dialogueChoice.Yes ? 0 : 1); @@ -174,7 +295,7 @@ internal sealed class GameUiController : IDisposable if (step != null) _pluginLog.Verbose($"Current step: {step.TerritoryId}, {step.TargetTerritoryId}"); - if (step == null || step.TargetTerritoryId == null || step.TerritoryId != _clientState.TerritoryType) + if (step == null || step.TargetTerritoryId == null) { _pluginLog.Verbose("TravelYesNo: Checking previous step..."); step = sequence.FindStep(currentQuest.Step == 255 ? (sequence.Steps.Count - 1) : (currentQuest.Step - 1)); @@ -184,7 +305,7 @@ internal sealed class GameUiController : IDisposable _pluginLog.Verbose($"Previous step: {step.TerritoryId}, {step.TargetTerritoryId}"); } - if (step == null || step.TargetTerritoryId == null || step.TerritoryId != _clientState.TerritoryType) + if (step == null || step.TargetTerritoryId == null) { _pluginLog.Verbose("TravelYesNo: Not found"); return false; @@ -196,7 +317,7 @@ internal sealed class GameUiController : IDisposable foreach (var entry in warps) { string? excelPrompt = entry.Question?.ToString(); - if (excelPrompt == null || excelPrompt != actualPrompt) + if (excelPrompt == null || !GameStringEquals(excelPrompt, actualPrompt)) { _pluginLog.Information($"Ignoring prompt '{excelPrompt}'"); continue; @@ -229,11 +350,26 @@ internal sealed class GameUiController : IDisposable } } + /// + /// Ensures characters like '-' are handled equally in both strings. + /// + private bool GameStringEquals(string? a, string? b) + { + if (a == null) + return b == null; + + if (b == null) + return false; + + return a.ReplaceLineEndings().Replace('\u2013', '-') == b.ReplaceLineEndings().Replace('\u2013', '-'); + } + public void Dispose() { _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "AkatsukiNote", UnendingCodexPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "Credit", CreditPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectYesno", SelectYesnoPostSetup); + _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectIconString", SelectIconStringPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "CutSceneSelectString", CutsceneSelectStringPostSetup); _addonLifecycle.UnregisterListener(AddonEvent.PostSetup, "SelectString", SelectStringPostSetup); } diff --git a/Questionable/Controller/MovementController.cs b/Questionable/Controller/MovementController.cs index 7b7bbee99..839ac4531 100644 --- a/Questionable/Controller/MovementController.cs +++ b/Questionable/Controller/MovementController.cs @@ -88,7 +88,7 @@ internal sealed class MovementController : IDisposable } } - _navmeshIpc.MoveTo(navPoints); + _navmeshIpc.MoveTo(navPoints, Destination.IsFlying); ResetPathfinding(); } else if (_pathfindTask.IsCompleted) @@ -166,6 +166,7 @@ internal sealed class MovementController : IDisposable public void NavigateTo(EMovementType type, uint? dataId, Vector3 to, bool fly, bool sprint, float? stopDistance = null) { + fly |= _condition[ConditionFlag.Diving]; PrepareNavigation(type, dataId, to, fly, sprint, stopDistance); _pluginLog.Information($"Pathfinding to {Destination}"); @@ -177,10 +178,11 @@ internal sealed class MovementController : IDisposable public void NavigateTo(EMovementType type, uint? dataId, List to, bool fly, bool sprint, float? stopDistance) { + fly |= _condition[ConditionFlag.Diving]; PrepareNavigation(type, dataId, to.Last(), fly, sprint, stopDistance); _pluginLog.Information($"Moving to {Destination}"); - _navmeshIpc.MoveTo(to); + _navmeshIpc.MoveTo(to, fly); } public void ResetPathfinding() diff --git a/Questionable/Controller/QuestController.cs b/Questionable/Controller/QuestController.cs index 03425ba14..07d45f425 100644 --- a/Questionable/Controller/QuestController.cs +++ b/Questionable/Controller/QuestController.cs @@ -513,11 +513,6 @@ internal sealed class QuestController // navmesh won't move close enough if (actualDistance > distance) { - // picking up Mehvan's baby, not sure if navmesh ignores y distance but it thinks you're close - // enough - if (step.DataId == 2012208) - distance /= 2; - _movementController.NavigateTo(EMovementType.Quest, step.DataId, [step.Position.Value], fly: step.Fly == true && _gameFunctions.IsFlyingUnlocked(_clientState.TerritoryType), sprint: step.Sprint != false, @@ -670,7 +665,7 @@ internal sealed class QuestController if (step.ChatMessage != null) { - string? excelString = _gameFunctions.GetExcelString(CurrentQuest.Quest, step.ChatMessage.ExcelSheet, + string? excelString = _gameFunctions.GetDialogueText(CurrentQuest.Quest, step.ChatMessage.ExcelSheet, step.ChatMessage.Key); if (excelString == null) return; diff --git a/Questionable/External/NavmeshIpc.cs b/Questionable/External/NavmeshIpc.cs index 0433f33c9..38dc1ddca 100644 --- a/Questionable/External/NavmeshIpc.cs +++ b/Questionable/External/NavmeshIpc.cs @@ -60,11 +60,11 @@ internal sealed class NavmeshIpc return _navPathfind.InvokeFunc(localPlayerPosition, targetPosition, fly, cancellationToken); } - public void MoveTo(List position) + public void MoveTo(List position, bool fly) { Stop(); - _pathMoveTo.InvokeAction(position, false); + _pathMoveTo.InvokeAction(position, fly); } public Vector3? GetPointOnFloor(Vector3 position) diff --git a/Questionable/GameFunctions.cs b/Questionable/GameFunctions.cs index 6a276159e..e07c22bfa 100644 --- a/Questionable/GameFunctions.cs +++ b/Questionable/GameFunctions.cs @@ -10,6 +10,7 @@ using Dalamud.Game; using Dalamud.Game.ClientState.Conditions; using Dalamud.Game.ClientState.Objects; using Dalamud.Plugin.Services; +using Dalamud.Utility; using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions; using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game.Control; @@ -474,7 +475,7 @@ internal sealed unsafe class GameFunctions _pluginLog.Error($"Could not find content for content finder condition (cf: {contentFinderConditionId})"); } - public string? GetExcelString(Quest currentQuest, string? excelSheetName, string key) + public string? GetDialogueText(Quest currentQuest, string? excelSheetName, string key) { if (excelSheetName == null) { @@ -495,6 +496,12 @@ internal sealed unsafe class GameFunctions return null; } - return excelSheet.FirstOrDefault(x => x.Key == key)?.Value?.ToString(); + return excelSheet.FirstOrDefault(x => x.Key == key)?.Value?.ToDalamudString().ToString(); + } + + public string? GetContentTalk(uint rowId) + { + var questRow = _dataManager.GetExcelSheet()!.GetRow(rowId); + return questRow?.Text?.ToString(); } } diff --git a/Questionable/Model/V1/Converter/DialogueChoiceTypeConverter.cs b/Questionable/Model/V1/Converter/DialogueChoiceTypeConverter.cs index ea832cace..5e35917f4 100644 --- a/Questionable/Model/V1/Converter/DialogueChoiceTypeConverter.cs +++ b/Questionable/Model/V1/Converter/DialogueChoiceTypeConverter.cs @@ -8,5 +8,7 @@ public sealed class DialogueChoiceTypeConverter() : EnumConverter _gameUiController.HandleCurrentDialogueChoices(), TimeSpan.FromMilliseconds(200)); } private void FrameworkUpdate(IFramework framework) diff --git a/Questionable/Windows/DebugWindow.cs b/Questionable/Windows/DebugWindow.cs index b3c684500..34169e70b 100644 --- a/Questionable/Windows/DebugWindow.cs +++ b/Questionable/Windows/DebugWindow.cs @@ -1,4 +1,5 @@ -using System.Globalization; +using System; +using System.Globalization; using System.Numerics; using Dalamud.Game.ClientState.Objects; using Dalamud.Interface; @@ -21,18 +22,22 @@ internal sealed class DebugWindow : Window private readonly QuestController _questController; private readonly GameFunctions _gameFunctions; private readonly IClientState _clientState; + private readonly IFramework _framework; private readonly ITargetManager _targetManager; + private readonly GameUiController _gameUiController; public DebugWindow(MovementController movementController, QuestController questController, - GameFunctions gameFunctions, IClientState clientState, - ITargetManager targetManager) + GameFunctions gameFunctions, IClientState clientState, IFramework framework, + ITargetManager targetManager, GameUiController gameUiController) : base("Questionable", ImGuiWindowFlags.AlwaysAutoResize) { _movementController = movementController; _questController = questController; _gameFunctions = gameFunctions; _clientState = clientState; + _framework = framework; _targetManager = targetManager; + _gameUiController = gameUiController; IsOpen = true; SizeConstraints = new WindowSizeConstraints @@ -230,6 +235,10 @@ internal sealed class DebugWindow : Window ImGui.EndDisabled(); if (ImGui.Button("Reload Data")) + { _questController.Reload(); + _framework.RunOnTick(() => _gameUiController.HandleCurrentDialogueChoices(), + TimeSpan.FromMilliseconds(200)); + } } }