From b590390b5cd5ce765416d85e819d09aee3d2a7e9 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Wed, 11 Sep 2024 23:17:39 +0200 Subject: [PATCH] Rough Hildibrand pass --- .../DialogueChoiceExtensions.cs | 4 + ...1204_The Rise and Fall of a Gentlemen.json | 9 ++- .../1205_Back in the Saddle.json | 34 +++++++- .../1206_After Her Own Heart.json | 4 +- .../1207_The Immaculate Deception.json | 77 +++++++++++++++--- .../1315_The Science of Deduction.json | 81 ++++++++++++++++--- .../Hildibrand Quests/1316_The Hammer.json | 11 ++- .../1317_Manderville Men.json | 11 ++- .../1318_The Three Collectors.json | 28 +++---- .../1438_The Business of Betrothal.json | 7 +- .../1439_A Burst of Inspiration.json | 13 ++- .../1440_Seeds of Rebellion.json | 56 +++++++++++-- .../1441_A Case of Indecency.json | 7 +- .../166_Eight-armed and Dangerous.json | 15 +++- .../202_What Price Victory.json | 19 ++++- .../203_The Trouble with Truffles.json | 61 +++++++++++++- .../204_The Coliseum Conundrum.json | 14 +++- .../490_Shades of Sil'dih.json | 3 +- .../Hildibrand Quests/491_Sibling Strife.json | 3 +- .../492_Beneath the Mask.json | 3 +- .../Hildibrand Quests/493_Truths Untold.json | 3 +- QuestPaths/quest-v1.json | 12 ++- .../Converter/EnemySpawnTypeConverter.cs | 1 + Questionable.Model/Questing/DialogueChoice.cs | 1 + .../Questing/EEnemySpawnType.cs | 1 + Questionable/Controller/CombatController.cs | 12 ++- .../GameUi/InteractionUiController.cs | 14 ++-- .../Controller/Steps/Interactions/Combat.cs | 1 + 28 files changed, 415 insertions(+), 90 deletions(-) diff --git a/QuestPathGenerator/RoslynElements/DialogueChoiceExtensions.cs b/QuestPathGenerator/RoslynElements/DialogueChoiceExtensions.cs index 18de00c17..92f6ab874 100644 --- a/QuestPathGenerator/RoslynElements/DialogueChoiceExtensions.cs +++ b/QuestPathGenerator/RoslynElements/DialogueChoiceExtensions.cs @@ -32,6 +32,10 @@ internal static class DialogueChoiceExtensions Assignment(nameof(DialogueChoice.Answer), dialogueChoice.Answer, emptyChoice.Answer) .AsSyntaxNodeOrToken(), + Assignment(nameof(DialogueChoice.PromptIsRegularExpression), + dialogueChoice.PromptIsRegularExpression, + emptyChoice.PromptIsRegularExpression) + .AsSyntaxNodeOrToken(), Assignment(nameof(DialogueChoice.AnswerIsRegularExpression), dialogueChoice.AnswerIsRegularExpression, emptyChoice.AnswerIsRegularExpression) diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1204_The Rise and Fall of a Gentlemen.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1204_The Rise and Fall of a Gentlemen.json index 5e7b072fb..32dc374c1 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1204_The Rise and Fall of a Gentlemen.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1204_The Rise and Fall of a Gentlemen.json @@ -62,8 +62,10 @@ }, "TerritoryId": 146, "InteractionType": "Combat", - "EnemySpawnType": "OverworldEnemies", - "KillEnemyDataIds": [] + "EnemySpawnType": "FateEnemies", + "KillEnemyDataIds": [ + 2390 + ] } ] }, @@ -106,7 +108,8 @@ "Prompt": "TEXT_CHRHDB101_01204_Q2_000_1", "Answer": "TEXT_CHRHDB101_01204_Q2A2_000_2" } - ] + ], + "NextQuestId": 1205 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1205_Back in the Saddle.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1205_Back in the Saddle.json index 5cecd971d..77cd80090 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1205_Back in the Saddle.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1205_Back in the Saddle.json @@ -28,8 +28,17 @@ "Y": 4.0131226, "Z": -98.95477 }, + "StopDistance": 7, "TerritoryId": 130, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] }, { "DataId": 1004331, @@ -39,7 +48,15 @@ "Z": -133.22656 }, "TerritoryId": 130, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 1001313, @@ -49,7 +66,15 @@ "Z": -106.21808 }, "TerritoryId": 130, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] } ] }, @@ -64,7 +89,8 @@ "Z": -126.51257 }, "TerritoryId": 130, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 1206 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1206_After Her Own Heart.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1206_After Her Own Heart.json index c2722df69..39548b263 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1206_After Her Own Heart.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1206_After Her Own Heart.json @@ -117,8 +117,10 @@ "Y": 12, "Z": 0.99176025 }, + "StopDistance": 4, "TerritoryId": 130, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 1207 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1207_The Immaculate Deception.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1207_The Immaculate Deception.json index c71f1ca22..1cad0dd09 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1207_The Immaculate Deception.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1207_The Immaculate Deception.json @@ -18,6 +18,7 @@ "Y": 12, "Z": -5.5390625 }, + "StopDistance": 4, "TerritoryId": 130, "InteractionType": "AcceptQuest" } @@ -54,7 +55,15 @@ "Z": -221.27112 }, "TerritoryId": 145, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] }, { "DataId": 1003940, @@ -64,7 +73,15 @@ "Z": -241.07733 }, "TerritoryId": 145, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 1003939, @@ -73,8 +90,17 @@ "Y": 4.137387, "Z": -240.98578 }, + "StopDistance": 4, "TerritoryId": 145, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } ] }, @@ -205,7 +231,15 @@ "Z": 151.87305 }, "TerritoryId": 145, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] }, { "DataId": 2003005, @@ -215,7 +249,15 @@ "Z": 166.0028 }, "TerritoryId": 145, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 2003004, @@ -225,7 +267,15 @@ "Z": 187.36548 }, "TerritoryId": 145, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } ] }, @@ -248,8 +298,16 @@ "Sequence": 255, "Steps": [ { - "Mount": true, - "Fly": true, + "Position": { + "X": -535.8004, + "Y": 5.3931885, + "Z": -252.96324 + }, + "TerritoryId": 145, + "InteractionType": "WalkTo", + "Fly": true + }, + { "DataId": 1005731, "Position": { "X": -526.8788, @@ -257,7 +315,8 @@ "Z": -246.50952 }, "TerritoryId": 145, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 1315 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1315_The Science of Deduction.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1315_The Science of Deduction.json index 24ca8f723..92e45cfe0 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1315_The Science of Deduction.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1315_The Science of Deduction.json @@ -18,6 +18,7 @@ "Y": 5.4049973, "Z": -249.25616 }, + "StopDistance": 4, "TerritoryId": 145, "InteractionType": "AcceptQuest" } @@ -43,7 +44,12 @@ "Sequence": 2, "Steps": [ { - "AetheryteShortcut": "Western Thanalan - Horizon", + "TerritoryId": 145, + "InteractionType": "UseItem", + "ItemId": 30362, + "TargetTerritoryId": 140 + }, + { "Mount": true, "DataId": 1008709, "Position": { @@ -70,7 +76,15 @@ "Z": 12.191956 }, "TerritoryId": 140, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "Mount": true, @@ -82,7 +96,15 @@ "Z": 65.384766 }, "TerritoryId": 140, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "Mount": true, @@ -94,7 +116,15 @@ "Z": 158.73962 }, "TerritoryId": 140, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] } ] }, @@ -124,7 +154,15 @@ "Z": 155.9624 }, "TerritoryId": 140, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] }, { "DataId": 2003656, @@ -134,7 +172,15 @@ "Z": 159.19727 }, "TerritoryId": 140, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 2003659, @@ -144,7 +190,15 @@ "Z": 155.90137 }, "TerritoryId": 140, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 16 + ] }, { "DataId": 2003657, @@ -154,7 +208,15 @@ "Z": 158.12915 }, "TerritoryId": 140, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] } ] }, @@ -169,7 +231,8 @@ "Z": 157.5188 }, "TerritoryId": 140, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 1316 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1316_The Hammer.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1316_The Hammer.json index 926b05fe7..2d1bdd04f 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1316_The Hammer.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1316_The Hammer.json @@ -47,7 +47,8 @@ "Z": 254.13892 }, "TerritoryId": 147, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, @@ -63,11 +64,9 @@ "Z": 121.20239 }, "TerritoryId": 147, - "InteractionType": "Interact" - }, - { - "TerritoryId": 147, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "Fly": true, + "NextQuestId": 1317 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1317_Manderville Men.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1317_Manderville Men.json index ea824bb20..89a9660db 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1317_Manderville Men.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1317_Manderville Men.json @@ -36,9 +36,13 @@ "Sequence": 2, "Steps": [ { - "AetheryteShortcut": "Western Thanalan - Horizon", + "TerritoryId": 145, + "InteractionType": "UseItem", + "ItemId": 30362, + "TargetTerritoryId": 140 + }, + { "Mount": true, - "Fly": true, "DataId": 1008730, "Position": { "X": -431.26575, @@ -61,7 +65,8 @@ "Z": -367.17786 }, "TerritoryId": 140, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 1318 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1318_The Three Collectors.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1318_The Three Collectors.json index ae735c2a1..aca0ffc47 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1318_The Three Collectors.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1318_The Three Collectors.json @@ -12,6 +12,7 @@ "Y": 23.113976, "Z": -367.8188 }, + "StopDistance": 5, "TerritoryId": 140, "InteractionType": "AcceptQuest" } @@ -77,7 +78,8 @@ "Z": 378.80518 }, "TerritoryId": 155, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, @@ -93,23 +95,14 @@ "Z": 479.69775 }, "TerritoryId": 155, - "InteractionType": "Interact" + "InteractionType": "Interact", + "Fly": true } ] }, { "Sequence": 6, "Steps": [ - { - "DataId": 2003671, - "Position": { - "X": 489.181, - "Y": 206.8937, - "Z": 479.662 - }, - "TerritoryId": 155, - "InteractionType": "Interact" - }, { "TerritoryId": 155, "InteractionType": "Duty", @@ -127,6 +120,7 @@ "Y": 207.33582, "Z": 475.33374 }, + "StopDistance": 7, "TerritoryId": 155, "InteractionType": "Interact" } @@ -136,7 +130,12 @@ "Sequence": 255, "Steps": [ { - "AetheryteShortcut": "Western Thanalan - Horizon", + "TerritoryId": 145, + "InteractionType": "UseItem", + "ItemId": 30362, + "TargetTerritoryId": 140 + }, + { "Mount": true, "Fly": true, "DataId": 1008788, @@ -146,7 +145,8 @@ "Z": -367.57465 }, "TerritoryId": 140, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 1438 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1438_The Business of Betrothal.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1438_The Business of Betrothal.json index a210caa34..b14136e87 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1438_The Business of Betrothal.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1438_The Business of Betrothal.json @@ -142,11 +142,8 @@ "Z": 525.81055 }, "TerritoryId": 137, - "InteractionType": "Interact" - }, - { - "TerritoryId": 137, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 1439 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1439_A Burst of Inspiration.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1439_A Burst of Inspiration.json index 0ee913ab5..73d05f990 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1439_A Burst of Inspiration.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1439_A Burst of Inspiration.json @@ -35,6 +35,16 @@ { "Sequence": 2, "Steps": [ + { + "Position": { + "X": 581.1095, + "Y": 14.587067, + "Z": 394.20828 + }, + "TerritoryId": 137, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1009319, "Position": { @@ -75,7 +85,8 @@ "Z": 344.71655 }, "TerritoryId": 138, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 1440 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1440_Seeds of Rebellion.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1440_Seeds of Rebellion.json index 8e1968e8f..45f4a820c 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1440_Seeds of Rebellion.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1440_Seeds of Rebellion.json @@ -37,7 +37,15 @@ "Z": 425.58936 }, "TerritoryId": 138, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] }, { "DataId": 2004325, @@ -47,7 +55,15 @@ "Z": 514.7324 }, "TerritoryId": 138, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 2004326, @@ -57,7 +73,15 @@ "Z": 596.765 }, "TerritoryId": 138, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] } ] }, @@ -73,7 +97,16 @@ "Z": 684.1992 }, "TerritoryId": 138, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DialogueChoices": [ + { + "Type": "YesNo", + "ExcelSheet": "Addon", + "Prompt": 102445, + "PromptIsRegularExpression": true, + "Yes": true + } + ] }, { "Comment": "Fight some Mandragoras", @@ -84,7 +117,7 @@ }, "TerritoryId": 138, "InteractionType": "Combat", - "EnemySpawnType": "OverworldEnemies", + "EnemySpawnType": "FateEnemies", "KillEnemyDataIds": [ 2950, 2951, @@ -100,8 +133,16 @@ "Steps": [ { "AetheryteShortcut": "Eastern La Noscea - Costa Del Sol", - "Mount": true, "Fly": true, + "Position": { + "X": 581.46533, + "Y": 14.587067, + "Z": 393.86594 + }, + "TerritoryId": 137, + "InteractionType": "WalkTo" + }, + { "DataId": 1009319, "Position": { "X": 581.3534, @@ -142,7 +183,8 @@ "Z": 10.879639 }, "TerritoryId": 137, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 1441 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1441_A Case of Indecency.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1441_A Case of Indecency.json index 28200b4df..36c6a8664 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1441_A Case of Indecency.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/1441_A Case of Indecency.json @@ -89,11 +89,8 @@ "Z": 455.2528 }, "TerritoryId": 137, - "InteractionType": "Interact" - }, - { - "TerritoryId": 137, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 166 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/166_Eight-armed and Dangerous.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/166_Eight-armed and Dangerous.json index 3884020a2..f191b9fc8 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/166_Eight-armed and Dangerous.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/166_Eight-armed and Dangerous.json @@ -104,6 +104,15 @@ "[Ul'dah] Aetheryte Plaza", "[Ul'dah] Gladiators' Guild" ], + "Position": { + "X": -71.1609, + "Y": 6.9845705, + "Z": 9.066199 + }, + "TerritoryId": 131, + "InteractionType": "WalkTo" + }, + { "DataId": 1010281, "Position": { "X": -70.96979, @@ -111,7 +120,8 @@ "Z": 3.982544 }, "TerritoryId": 131, - "InteractionType": "Interact" + "InteractionType": "Interact", + "DisableNavmesh": true } ] }, @@ -130,7 +140,8 @@ "Z": -3.9215698 }, "TerritoryId": 130, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 202 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/202_What Price Victory.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/202_What Price Victory.json index 2552df265..be98277af 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/202_What Price Victory.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/202_What Price Victory.json @@ -20,6 +20,15 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": -153.18225, + "Y": 14.005, + "Z": 43.458076 + }, + "TerritoryId": 130, + "InteractionType": "WalkTo" + }, { "AethernetShortcut": [ "[Ul'dah] Thaumaturges' Guild", @@ -83,7 +92,12 @@ "Z": 260.57825 }, "TerritoryId": 141, - "InteractionType": "Interact" + "InteractionType": "Interact", + "AetheryteShortcut": "Ul'dah", + "AethernetShortcut": [ + "[Ul'dah] Aetheryte Plaza", + "[Ul'dah] Gate of Nald (Central Thanalan)" + ] } ] }, @@ -103,7 +117,8 @@ "Z": -5.661133 }, "TerritoryId": 130, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 203 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/203_The Trouble with Truffles.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/203_The Trouble with Truffles.json index cda4ab0c8..56522def5 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/203_The Trouble with Truffles.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/203_The Trouble with Truffles.json @@ -20,6 +20,15 @@ { "Sequence": 1, "Steps": [ + { + "Position": { + "X": -153.18225, + "Y": 14.005, + "Z": 43.458076 + }, + "TerritoryId": 130, + "InteractionType": "WalkTo" + }, { "AethernetShortcut": [ "[Ul'dah] Thaumaturges' Guild", @@ -69,7 +78,24 @@ "Z": 8.255066 }, "TerritoryId": 131, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 32 + ] + }, + { + "Position": { + "X": 109.42333, + "Y": 8, + "Z": 8.92655 + }, + "TerritoryId": 131, + "InteractionType": "WalkTo" }, { "DataId": 2004900, @@ -79,7 +105,15 @@ "Z": -35.233154 }, "TerritoryId": 131, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] }, { "DataId": 2004899, @@ -89,7 +123,15 @@ "Z": -74.05206 }, "TerritoryId": 131, - "InteractionType": "Interact" + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] } ] }, @@ -120,14 +162,25 @@ "[Ul'dah] Gladiators' Guild", "[Ul'dah] Sapphire Avenue Exchange" ], + "Position": { + "X": 137.68585, + "Y": 3.9999998, + "Z": -58.555218 + }, + "TerritoryId": 131, + "InteractionType": "WalkTo" + }, + { "DataId": 1001679, "Position": { "X": 140.48975, "Y": 4.0099983, "Z": -59.80017 }, + "StopDistance": 5, "TerritoryId": 131, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 204 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/204_The Coliseum Conundrum.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/204_The Coliseum Conundrum.json index 1dcb54241..c74829154 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/204_The Coliseum Conundrum.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/204_The Coliseum Conundrum.json @@ -25,6 +25,15 @@ "[Ul'dah] Sapphire Avenue Exchange", "[Ul'dah] Gladiators' Guild" ], + "Position": { + "X": -71.1609, + "Y": 6.9845705, + "Z": 9.066199 + }, + "TerritoryId": 131, + "InteractionType": "WalkTo" + }, + { "DataId": 1010330, "Position": { "X": -69.5354, @@ -33,6 +42,7 @@ }, "TerritoryId": 131, "InteractionType": "Interact", + "DisableNavmesh": true, "DialogueChoices": [ { "Type": "YesNo", @@ -53,6 +63,7 @@ "Y": 6.9839687, "Z": -0.045776367 }, + "StopDistance": 5, "TerritoryId": 131, "InteractionType": "Interact" } @@ -117,7 +128,8 @@ "Z": 0.07623291 }, "TerritoryId": 131, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 490 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/490_Shades of Sil'dih.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/490_Shades of Sil'dih.json index 195aca4d8..7a67a9285 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/490_Shades of Sil'dih.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/490_Shades of Sil'dih.json @@ -86,7 +86,8 @@ "Z": 171.12988 }, "TerritoryId": 140, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 491 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/491_Sibling Strife.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/491_Sibling Strife.json index b5559847b..6faca6922 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/491_Sibling Strife.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/491_Sibling Strife.json @@ -129,7 +129,8 @@ "Z": 96.29968 }, "TerritoryId": 131, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 492 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/492_Beneath the Mask.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/492_Beneath the Mask.json index 2c07c416b..8ec8a564b 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/492_Beneath the Mask.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/492_Beneath the Mask.json @@ -123,7 +123,8 @@ "Z": 27.237305 }, "TerritoryId": 131, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 493 } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/493_Truths Untold.json b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/493_Truths Untold.json index d1ae76f6c..b494762bd 100644 --- a/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/493_Truths Untold.json +++ b/QuestPaths/2.x - A Realm Reborn/Hildibrand Quests/493_Truths Untold.json @@ -81,7 +81,8 @@ "Z": 29.343018 }, "TerritoryId": 131, - "InteractionType": "CompleteQuest" + "InteractionType": "CompleteQuest", + "NextQuestId": 502 } ] } diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index a3bfd6f98..6a00bb26f 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -594,7 +594,8 @@ "AfterInteraction", "AfterItemUse", "AfterAction", - "OverworldEnemies" + "OverworldEnemies", + "FateEnemies" ] }, "KillEnemyDataIds": { @@ -1020,6 +1021,9 @@ "integer" ] }, + "PromptIsRegularExpression": { + "type": "boolean" + }, "Yes": { "type": "boolean", "default": true @@ -1048,11 +1052,17 @@ "null" ] }, + "PromptIsRegularExpression": { + "type": "boolean" + }, "Answer": { "type": [ "string", "integer" ] + }, + "AnswerIsRegularExpression": { + "type": "boolean" } }, "required": [ diff --git a/Questionable.Model/Questing/Converter/EnemySpawnTypeConverter.cs b/Questionable.Model/Questing/Converter/EnemySpawnTypeConverter.cs index d37c5b7c2..4abc27395 100644 --- a/Questionable.Model/Questing/Converter/EnemySpawnTypeConverter.cs +++ b/Questionable.Model/Questing/Converter/EnemySpawnTypeConverter.cs @@ -12,5 +12,6 @@ public sealed class EnemySpawnTypeConverter() : EnumConverter(V { EEnemySpawnType.AfterAction, "AfterAction" }, { EEnemySpawnType.AutoOnEnterArea, "AutoOnEnterArea" }, { EEnemySpawnType.OverworldEnemies, "OverworldEnemies" }, + { EEnemySpawnType.FateEnemies, "FateEnemies" }, }; } diff --git a/Questionable.Model/Questing/DialogueChoice.cs b/Questionable.Model/Questing/DialogueChoice.cs index 41cb25192..a43a335c0 100644 --- a/Questionable.Model/Questing/DialogueChoice.cs +++ b/Questionable.Model/Questing/DialogueChoice.cs @@ -16,6 +16,7 @@ public sealed class DialogueChoice [JsonConverter(typeof(ExcelRefConverter))] public ExcelRef? Answer { get; set; } + public bool PromptIsRegularExpression { get; set; } public bool AnswerIsRegularExpression { get; set; } /// diff --git a/Questionable.Model/Questing/EEnemySpawnType.cs b/Questionable.Model/Questing/EEnemySpawnType.cs index f119ea08a..aaf9d7897 100644 --- a/Questionable.Model/Questing/EEnemySpawnType.cs +++ b/Questionable.Model/Questing/EEnemySpawnType.cs @@ -12,4 +12,5 @@ public enum EEnemySpawnType AfterAction, AutoOnEnterArea, OverworldEnemies, + FateEnemies, } diff --git a/Questionable/Controller/CombatController.cs b/Questionable/Controller/CombatController.cs index d1ff66bea..821dcf027 100644 --- a/Questionable/Controller/CombatController.cs +++ b/Questionable/Controller/CombatController.cs @@ -196,8 +196,9 @@ internal sealed class CombatController : IDisposable // 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 || - _currentFight.Data.ComplexCombatDatas.Count == 0) + if (_currentFight == null || + _currentFight.Data.SpawnType == EEnemySpawnType.OverworldEnemies || + (_currentFight.Data.SpawnType != EEnemySpawnType.FateEnemies && _currentFight.Data.KillEnemyDataIds.Count > 0)) { if (battleNpc.IsDead) return 0; @@ -262,6 +263,13 @@ internal sealed class CombatController : IDisposable } } + if (_currentFight?.Data.SpawnType == EEnemySpawnType.FateEnemies) + { + var gameObjectStruct = (GameObject*)gameObject.Address; + if (gameObjectStruct->FateId != 0) + return 15; + } + // stuff trying to kill us if (battleNpc.TargetObjectId == _clientState.LocalPlayer?.GameObjectId) return 10; diff --git a/Questionable/Controller/GameUi/InteractionUiController.cs b/Questionable/Controller/GameUi/InteractionUiController.cs index 21c95d29d..35f89d066 100644 --- a/Questionable/Controller/GameUi/InteractionUiController.cs +++ b/Questionable/Controller/GameUi/InteractionUiController.cs @@ -428,19 +428,19 @@ internal sealed class InteractionUiController : IDisposable continue; } - string? excelPrompt = ResolveReference(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt, false) - ?.GetString(); + StringOrRegex? excelPrompt = ResolveReference(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt, + dialogueChoice.PromptIsRegularExpression); StringOrRegex? excelAnswer = ResolveReference(quest, dialogueChoice.ExcelSheet, dialogueChoice.Answer, dialogueChoice.AnswerIsRegularExpression); - if (actualPrompt == null && !string.IsNullOrEmpty(excelPrompt)) + if (actualPrompt == null && excelPrompt != null) { _logger.LogInformation("Unexpected excelPrompt: {ExcelPrompt}", excelPrompt); continue; } if (actualPrompt != null && - (excelPrompt == null || !GameFunctions.GameStringEquals(actualPrompt, excelPrompt))) + (excelPrompt == null || !IsMatch(actualPrompt, excelPrompt))) { _logger.LogInformation("Unexpected excelPrompt: {ExcelPrompt}, actualPrompt: {ActualPrompt}", excelPrompt, actualPrompt); @@ -597,9 +597,9 @@ internal sealed class InteractionUiController : IDisposable continue; } - string? excelPrompt = ResolveReference(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt, false) - ?.GetString(); - if (excelPrompt == null || !GameFunctions.GameStringEquals(actualPrompt, excelPrompt)) + StringOrRegex? excelPrompt = ResolveReference(quest, dialogueChoice.ExcelSheet, dialogueChoice.Prompt, + dialogueChoice.PromptIsRegularExpression); + if (excelPrompt == null || !IsMatch(actualPrompt, excelPrompt)) { _logger.LogInformation("Unexpected excelPrompt: {ExcelPrompt}, actualPrompt: {ActualPrompt}", excelPrompt, actualPrompt); diff --git a/Questionable/Controller/Steps/Interactions/Combat.cs b/Questionable/Controller/Steps/Interactions/Combat.cs index eab500dde..38b622860 100644 --- a/Questionable/Controller/Steps/Interactions/Combat.cs +++ b/Questionable/Controller/Steps/Interactions/Combat.cs @@ -83,6 +83,7 @@ internal static class Combat break; case EEnemySpawnType.OverworldEnemies: + case EEnemySpawnType.FateEnemies: yield return CreateTask(quest, sequence, step); break;