From b07625c18ff8afed8c9530b16c731fcdc6640810 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 19 Aug 2024 22:57:12 +0200 Subject: [PATCH] Add Kurenai unlock quests --- .../Kurenai/2704_Fathoms Below.json | 75 +++++++ .../Kurenai/2705_A Part of Your World.json | 105 ++++++++++ .../Kurenai/2706_The Elixir of Life.json | 183 ++++++++++++++++++ ...707_The Two Princesses of Sui-no-Sato.json | 61 ++++++ .../3139_The Seaweed Is Always Greener.json | 42 ++++ .../Custom Deliveries/Kurenai/S3_Kurenai.json | 13 +- .../Steps/Shared/AetheryteShortcut.cs | 10 +- .../Controller/Steps/Shared/WaitAtEnd.cs | 6 + 8 files changed, 489 insertions(+), 6 deletions(-) create mode 100644 QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json create mode 100644 QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json create mode 100644 QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json create mode 100644 QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2707_The Two Princesses of Sui-no-Sato.json create mode 100644 QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/3139_The Seaweed Is Always Greener.json diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json new file mode 100644 index 000000000..ef577617b --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2704_Fathoms Below.json @@ -0,0 +1,75 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 322.1539, + "Y": -121.22571, + "Z": -314.2446 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "Position": { + "X": 22.288645, + "Y": -196.2301, + "Z": -155.5739 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "$": "Sui-no-Sato, NE outside" + }, + { + "DataId": 1023280, + "Position": { + "X": -62.790894, + "Y": -198.96509, + "Z": -64.34735 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest", + "Fly": true + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1023281, + "Position": { + "X": -9.597961, + "Y": -196.98103, + "Z": -82.383545 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1023280, + "Position": { + "X": -62.790894, + "Y": -198.96509, + "Z": -64.34735 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest", + "Fly": true, + "NextQuestId": 2705 + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json new file mode 100644 index 000000000..834a2cc13 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2705_A Part of Your World.json @@ -0,0 +1,105 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1023280, + "Position": { + "X": -62.790894, + "Y": -198.96509, + "Z": -64.34735 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1023282, + "Position": { + "X": -32.791687, + "Y": 0.5718597, + "Z": -554.7723 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "AetheryteShortcut": "Ruby Sea - Onokoro", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_STMBDZ309_02705_Q1_100_091", + "Answer": "TEXT_STMBDZ309_02705_A1_101_091" + } + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1023285, + "Position": { + "X": 119.493286, + "Y": 5.006782, + "Z": -862.6078 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_STMBDZ309_02705_Q2_100_151", + "Answer": "TEXT_STMBDZ309_02705_A2_101_151" + } + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 322.1539, + "Y": -121.22571, + "Z": -314.2446 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Ruby Sea - Tamamizu" + }, + { + "Position": { + "X": 22.288645, + "Y": -196.2301, + "Z": -155.5739 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "$": "Sui-no-Sato, NE outside" + }, + { + "DataId": 1023280, + "Position": { + "X": -62.790894, + "Y": -198.96509, + "Z": -64.34735 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest", + "Fly": true, + "NextQuestId": 2706 + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json new file mode 100644 index 000000000..fed711ae5 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2706_The Elixir of Life.json @@ -0,0 +1,183 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1023280, + "Position": { + "X": -62.790894, + "Y": -198.96509, + "Z": -64.34735 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1023287, + "Position": { + "X": 422.11023, + "Y": -98.96063, + "Z": -223.22424 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_STMBDZ310_02706_Q1_000_100", + "Answer": "TEXT_STMBDZ310_02706_A1_000_102" + } + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1023288, + "Position": { + "X": 350.515, + "Y": -120.581055, + "Z": -316.76202 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_STMBDZ310_02706_Q2_000_160", + "Answer": "TEXT_STMBDZ310_02706_A2_000_161" + }, + { + "Type": "List", + "Prompt": "TEXT_STMBDZ310_02706_Q3_000_200", + "Answer": "TEXT_STMBDZ310_02706_A3_000_201" + } + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "Position": { + "X": 322.1539, + "Y": -121.22571, + "Z": -314.2446 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Mount": true + }, + { + "Position": { + "X": 198.4342, + "Y": -162.28119, + "Z": 115.91883 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "$": "Exile, outside", + "Fly": true + }, + { + "DataId": 1023290, + "Position": { + "X": 222.33911, + "Y": -165.19557, + "Z": 137.89575 + }, + "TerritoryId": 613, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 2008809, + "Position": { + "X": 163.43933, + "Y": -172.01501, + "Z": 262.0736 + }, + "TerritoryId": 613, + "InteractionType": "Combat", + "EnemySpawnType": "AfterItemUse", + "ItemId": 2002332, + "KillEnemyDataIds": [ + 7824 + ], + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1023290, + "Position": { + "X": 222.33911, + "Y": -165.19557, + "Z": 137.89575 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 200.64441, + "Y": -165.55836, + "Z": 116.97804 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "Mount": true + }, + { + "Position": { + "X": -96.41638, + "Y": -199.01863, + "Z": -68.85027 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "$": "Sui-no-Sato, SW outside", + "Fly": true + }, + { + "DataId": 1023280, + "Position": { + "X": -62.790894, + "Y": -198.96509, + "Z": -64.34735 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest", + "NextQuestId": 2707 + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2707_The Two Princesses of Sui-no-Sato.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2707_The Two Princesses of Sui-no-Sato.json new file mode 100644 index 000000000..6bad83b20 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/2707_The Two Princesses of Sui-no-Sato.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1023280, + "Position": { + "X": -62.790894, + "Y": -198.96509, + "Z": -64.34735 + }, + "TerritoryId": 613, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1023281, + "Position": { + "X": -9.597961, + "Y": -196.98103, + "Z": -82.383545 + }, + "TerritoryId": 613, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1023291, + "Position": { + "X": 8.46875, + "Y": -198.34206, + "Z": -157.15265 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest", + "Fly": true, + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_STMBDZ311_02707_Q1_000_160", + "Answer": "TEXT_STMBDZ311_02707_A1_000_162" + } + ], + "NextQuestId": 3139 + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/3139_The Seaweed Is Always Greener.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/3139_The Seaweed Is Always Greener.json new file mode 100644 index 000000000..19389c513 --- /dev/null +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/3139_The Seaweed Is Always Greener.json @@ -0,0 +1,42 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1025965, + "Position": { + "X": -52.0791, + "Y": -2.9, + "Z": -64.4389 + }, + "TerritoryId": 628, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Kugane", + "AethernetShortcut": [ + "[Kugane] Aetheryte Plaza", + "[Kugane] Shiokaze Hostelry" + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1025878, + "Position": { + "X": 343.984, + "Y": -120.32947, + "Z": -306.0197 + }, + "TerritoryId": 613, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Ruby Sea - Tamamizu" + } + ] + } + ] +} diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/S3_Kurenai.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/S3_Kurenai.json index 3fef30bea..93d55255e 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/S3_Kurenai.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/S3_Kurenai.json @@ -5,6 +5,17 @@ { "Sequence": 0, "Steps": [ + { + "Position": { + "X": 344.12048, + "Y": -120.3312, + "Z": -303.85397 + }, + "TerritoryId": 613, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Ruby Sea - Tamamizu", + "RequiredGatheredItems": [] + }, { "DataId": 1025878, "Position": { @@ -14,8 +25,6 @@ }, "TerritoryId": 613, "InteractionType": "Interact", - "RequiredGatheredItems": [], - "AetheryteShortcut": "Ruby Sea - Tamamizu", "DialogueChoices": [ { "Type": "List", diff --git a/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs b/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs index e48aaec63..52bb26b69 100644 --- a/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs +++ b/Questionable/Controller/Steps/Shared/AetheryteShortcut.cs @@ -19,16 +19,18 @@ internal static class AetheryteShortcut { internal sealed class Factory( IServiceProvider serviceProvider, - AetheryteData aetheryteData) : SimpleTaskFactory + AetheryteData aetheryteData) : ITaskFactory { - public override ITask? CreateTask(Quest quest, QuestSequence sequence, QuestStep step) + public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { if (step.AetheryteShortcut == null) - return null; + yield break; - return serviceProvider.GetRequiredService() + yield return serviceProvider.GetRequiredService() .With(step, quest.Id, step.AetheryteShortcut.Value, aetheryteData.TerritoryIds[step.AetheryteShortcut.Value]); + yield return serviceProvider.GetRequiredService() + .With(TimeSpan.FromSeconds(0.5)); } } diff --git a/Questionable/Controller/Steps/Shared/WaitAtEnd.cs b/Questionable/Controller/Steps/Shared/WaitAtEnd.cs index a1d29c423..faa36e004 100644 --- a/Questionable/Controller/Steps/Shared/WaitAtEnd.cs +++ b/Questionable/Controller/Steps/Shared/WaitAtEnd.cs @@ -144,6 +144,12 @@ internal static class WaitAtEnd internal sealed class WaitDelay() : AbstractDelayedTask(TimeSpan.FromSeconds(1)) { + public ITask With(TimeSpan delay) + { + Delay = delay; + return this; + } + protected override bool StartInternal() => true; public override string ToString() => $"Wait(seconds: {Delay.TotalSeconds})";