From 9251111b05cdf7e5f0730fe745bfd73270e79072 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 16 Sep 2024 20:22:12 +0200 Subject: [PATCH] Update gathering from 'RequiredGatheredItems' to a dedicated InteractionType; updated movement logic to only evaluate distance to target after teleports and such --- .../RoslynElements/QuestStepExtensions.cs | 4 +- .../MIN/599_My First Pickaxe.json | 18 ++- .../Class Quests/MIN/600_Know Thy Land.json | 18 ++- .../Zhloe/S1_Zhloe Aliapoh.json | 6 +- .../BTN/2622_Walking for Walker's.json | 16 +- .../BTN/2623_The White Death.json | 18 ++- .../BTN/2624_Edgyth's Winning Streak.json | 18 ++- .../Adkiragh/S4_Adkiragh.json | 6 +- .../Custom Deliveries/Kurenai/S3_Kurenai.json | 6 +- .../Custom Deliveries/M'naago/S2_M'naago.json | 6 +- .../Qitari/Dailies/3806_A Tool's Errand.json | 22 +-- .../3807_Where the Sun Don't Shine.json | 20 ++- .../Qitari/Dailies/3808_A Touch of Home.json | 22 +-- .../Qitari/Dailies/3809_Mother's Recipe.json | 22 +-- .../Dailies/3810_Power to the Vegetables.json | 4 +- .../Dailies/3811_Rational Thinking.json | 22 +-- .../Qitari/Dailies/3812_Making Scents.json | 22 +-- .../Dailies/3814_Prayers and Poison.json | 22 +-- .../Qitari/Dailies/3815_Salve Our Souls.json | 22 +-- .../Qitari/Dailies/3816_Rings of Pattern.json | 4 +- .../Qitari/Dailies/3817_You Dirty Rats.json | 4 +- .../Dailies/3818_If It's Broke, Fix It.json | 4 +- .../3820_The Qitari Book of Records.json | 22 +-- .../Qitari/Dailies/3821_Meat and Greet.json | 22 +-- .../Dailies/3822_I Have Never Exploded.json | 22 +-- .../Qitari/Dailies/3824_Rock 'n Ronka.json | 4 +- ...5_There's No Clean Like Qhoterl Clean.json | 4 +- .../Dailies/3827_Her Splendid Materials.json | 22 +-- .../Qitari/Dailies/3828_Splendid Eats.json | 22 +-- .../Dailies/3830_Safety Is No Accident.json | 22 +-- ...Fish, Two Fish, Bread Fish, Stew Fish.json | 22 +-- .../Dailies/3832_Serpent's Will Be Done.json | 4 +- .../Dailies/3833_Qhoterl's Chronicles.json | 4 +- .../Story/3794_The Stewards of Note.json | 18 ++- .../Story/3795_Wisdom of the Night.json | 24 +-- .../Kai-Shirr/S5_Kai-Shirr.json | 6 +- .../Dailies/4607_Signs of the Past.json | 4 +- .../Dailies/4609_Well Below Standard.json | 26 ++-- .../Dailies/4611_Grounds for Improvement.json | 4 +- .../Dailies/4612_A Fertile Blend.json | 24 +-- .../Dailies/4614_The Robot and the Sea.json | 4 +- .../Dailies/4615_Using Their Heads.json | 4 +- .../Dailies/4617_I'll Fish It Myself.json | 4 +- .../Dailies/4620_A Taste of the Sea.json | 20 ++- .../Omicrons/Dailies/4622_Ea Epicurious.json | 24 +-- .../Omicrons/Dailies/4623_I, Omicron.json | 4 +- ...25_Corporeal Hand to Proverbial Mouth.json | 4 +- .../Dailies/4626_Mush for Miw Miisv.json | 4 +- .../Dailies/4627_Corporeal Comforts.json | 24 +-- .../Dailies/4629_A Light in the Dark.json | 22 +-- .../4630_Reclaiming the Taste of Home.json | 20 ++- .../Omicrons/Dailies/4631_Not Forgotten.json | 24 +-- .../Dailies/4632_Checking for Cavities.json | 20 ++- .../Omicrons/Dailies/4634_The Lost World.json | 4 +- ...1_The Café at the End of the Universe.json | 28 ++-- .../4602_Longing So for All the Fish.json | 4 +- .../Story/4603_And Another Question.json | 4 +- ...estaurateur's Guide to the Dragonstar.json | 4 +- .../Omicrons/Story/4605_Mostly Heartless.json | 4 +- .../Ameliance/S8_Ameliance.json | 6 +- .../Custom Deliveries/Anden/S9_Anden.json | 6 +- .../Margrat/S10_Margrat.json | 6 +- .../MIN, BTN/4154_Cooking Up a Culture.json | 18 ++- .../4155_The Culture of Ceruleum.json | 18 ++- .../MIN, BTN/4156_The Culture of Carrots.json | 18 ++- .../MIN, BTN/4157_Hinageshi in Hingashi.json | 16 +- .../4158_The Culture of the Past.json | 18 ++- .../MIN, BTN/4159_The Culture of Love.json | 16 +- .../MIN, BTN/4990_Test of Talents.json | 16 +- .../MIN, BTN/4991_A Discerning Eye.json | 16 +- .../MIN, BTN/4992_As Nature Intends.json | 16 +- .../MIN, BTN/4993_The Cycle of Life.json | 16 +- .../MIN, BTN/4994_Digging Up the Truth.json | 16 +- .../MIN, BTN/4995_Wellspring of Tears.json | 18 ++- .../Leves/BTN/L1770_All Stars.json | 4 +- .../L1779_New Start for the Cinderfield.json | 4 +- .../Leves/MIN/L1785_Old and Bubbly.json | 4 +- .../Leves/MIN/L1794_Vestiges of War.json | 4 +- QuestPaths/quest-v1.json | 115 +++++++++------ .../Converter/InteractionTypeConverter.cs | 1 + .../Questing/EInteractionType.cs | 4 +- Questionable.Model/Questing/QuestStep.cs | 2 +- .../Controller/ContextMenuController.cs | 4 +- .../GameUi/InteractionUiController.cs | 4 +- .../Controller/GatheringController.cs | 5 +- Questionable/Controller/MiniTaskController.cs | 2 +- .../Steps/Gathering/MoveToLandingLocation.cs | 4 +- .../Controller/Steps/Interactions/Interact.cs | 2 +- .../Controller/Steps/Interactions/UseItem.cs | 2 +- .../{GatheringRequiredItems.cs => Gather.cs} | 27 ++-- .../Controller/Steps/Shared/MoveTo.cs | 137 ++++++++++-------- Questionable/QuestionablePlugin.cs | 2 +- 92 files changed, 780 insertions(+), 575 deletions(-) rename Questionable/Controller/Steps/Shared/{GatheringRequiredItems.cs => Gather.cs} (87%) diff --git a/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs b/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs index e5b8eabb9..6aca708ae 100644 --- a/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs +++ b/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs @@ -118,8 +118,8 @@ internal static class QuestStepExtensions AssignmentList(nameof(QuestStep.RequiredQuestVariables), step.RequiredQuestVariables) .AsSyntaxNodeOrToken(), - AssignmentList(nameof(QuestStep.RequiredGatheredItems), - step.RequiredGatheredItems), + AssignmentList(nameof(QuestStep.ItemsToGather), + step.ItemsToGather), AssignmentList(nameof(QuestStep.CompletionQuestVariablesFlags), step.CompletionQuestVariablesFlags) .AsSyntaxNodeOrToken(), diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/599_My First Pickaxe.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/599_My First Pickaxe.json index 07dd8fbf1..feff763bd 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/599_My First Pickaxe.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/599_My First Pickaxe.json @@ -33,6 +33,16 @@ { "Sequence": 255, "Steps": [ + { + "TerritoryId": 131, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 5106, + "ItemCount": 10 + } + ] + }, { "DataId": 1002298, "Position": { @@ -54,13 +64,7 @@ 131 ] } - }, - "RequiredGatheredItems": [ - { - "ItemId": 5106, - "ItemCount": 10 - } - ] + } } ] } diff --git a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/600_Know Thy Land.json b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/600_Know Thy Land.json index 50ff25c8c..4d15185fd 100644 --- a/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/600_Know Thy Land.json +++ b/QuestPaths/2.x - A Realm Reborn/Class Quests/MIN/600_Know Thy Land.json @@ -33,6 +33,16 @@ { "Sequence": 255, "Steps": [ + { + "TerritoryId": 131, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 5432, + "ItemCount": 10 + } + ] + }, { "DataId": 1002298, "Position": { @@ -54,13 +64,7 @@ 131 ] } - }, - "RequiredGatheredItems": [ - { - "ItemId": 5432, - "ItemCount": 10 - } - ] + } } ] } diff --git a/QuestPaths/3.x - Heavensward/Custom Deliveries/Zhloe/S1_Zhloe Aliapoh.json b/QuestPaths/3.x - Heavensward/Custom Deliveries/Zhloe/S1_Zhloe Aliapoh.json index c2154923a..1422190e1 100644 --- a/QuestPaths/3.x - Heavensward/Custom Deliveries/Zhloe/S1_Zhloe Aliapoh.json +++ b/QuestPaths/3.x - Heavensward/Custom Deliveries/Zhloe/S1_Zhloe Aliapoh.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 478, + "InteractionType": "Gather", + "ItemsToGather": [] + }, { "Position": { "X": -71.31451, @@ -13,7 +18,6 @@ }, "TerritoryId": 478, "InteractionType": "WalkTo", - "RequiredGatheredItems": [], "AetheryteShortcut": "Idyllshire" }, { diff --git a/QuestPaths/4.x - Stormblood/Class Quests/BTN/2622_Walking for Walker's.json b/QuestPaths/4.x - Stormblood/Class Quests/BTN/2622_Walking for Walker's.json index c59687c6c..185e38254 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/BTN/2622_Walking for Walker's.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/BTN/2622_Walking for Walker's.json @@ -188,6 +188,16 @@ { "Sequence": 255, "Steps": [ + { + "TerritoryId": 478, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 17946, + "ItemCount": 20 + } + ] + }, { "DataId": 1021349, "Position": { @@ -202,12 +212,6 @@ "[Idyllshire] Aetheryte Plaza", "[Idyllshire] West Idyllshire" ], - "RequiredGatheredItems": [ - { - "ItemId": 17946, - "ItemCount": 20 - } - ], "NextQuestId": 2623 } ] diff --git a/QuestPaths/4.x - Stormblood/Class Quests/BTN/2623_The White Death.json b/QuestPaths/4.x - Stormblood/Class Quests/BTN/2623_The White Death.json index fcc2e5f81..b2ef33843 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/BTN/2623_The White Death.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/BTN/2623_The White Death.json @@ -122,6 +122,16 @@ { "Sequence": 6, "Steps": [ + { + "TerritoryId": 478, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 17947, + "ItemCount": 20 + } + ] + }, { "DataId": 1017106, "Position": { @@ -131,13 +141,7 @@ }, "TerritoryId": 478, "InteractionType": "Interact", - "AetheryteShortcut": "Idyllshire", - "RequiredGatheredItems": [ - { - "ItemId": 17947, - "ItemCount": 20 - } - ] + "AetheryteShortcut": "Idyllshire" } ] }, diff --git a/QuestPaths/4.x - Stormblood/Class Quests/BTN/2624_Edgyth's Winning Streak.json b/QuestPaths/4.x - Stormblood/Class Quests/BTN/2624_Edgyth's Winning Streak.json index b682928e7..5fc30c903 100644 --- a/QuestPaths/4.x - Stormblood/Class Quests/BTN/2624_Edgyth's Winning Streak.json +++ b/QuestPaths/4.x - Stormblood/Class Quests/BTN/2624_Edgyth's Winning Streak.json @@ -156,6 +156,16 @@ { "Sequence": 255, "Steps": [ + { + "TerritoryId": 478, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 17948, + "ItemCount": 5 + } + ] + }, { "DataId": 1021349, "Position": { @@ -170,13 +180,7 @@ "[Idyllshire] Aetheryte Plaza", "[Idyllshire] West Idyllshire" ], - "Comment": "Eorzean Time: 4:00-5:59 AM/PM", - "RequiredGatheredItems": [ - { - "ItemId": 17948, - "ItemCount": 5 - } - ] + "Comment": "Eorzean Time: 4:00-5:59 AM/PM" } ] } diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/Adkiragh/S4_Adkiragh.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/Adkiragh/S4_Adkiragh.json index 3912cfc6d..99762b5b2 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/Adkiragh/S4_Adkiragh.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Adkiragh/S4_Adkiragh.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 478, + "InteractionType": "Gather", + "ItemsToGather": [] + }, { "DataId": 1018393, "Position": { @@ -14,7 +19,6 @@ }, "TerritoryId": 478, "InteractionType": "Interact", - "RequiredGatheredItems": [], "AetheryteShortcut": "Idyllshire", "DialogueChoices": [ { 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..9b1f82dc3 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/S3_Kurenai.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/Kurenai/S3_Kurenai.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 613, + "InteractionType": "Gather", + "ItemsToGather": [] + }, { "DataId": 1025878, "Position": { @@ -14,7 +19,6 @@ }, "TerritoryId": 613, "InteractionType": "Interact", - "RequiredGatheredItems": [], "AetheryteShortcut": "Ruby Sea - Tamamizu", "DialogueChoices": [ { diff --git a/QuestPaths/4.x - Stormblood/Custom Deliveries/M'naago/S2_M'naago.json b/QuestPaths/4.x - Stormblood/Custom Deliveries/M'naago/S2_M'naago.json index 1908b500c..ba9858d87 100644 --- a/QuestPaths/4.x - Stormblood/Custom Deliveries/M'naago/S2_M'naago.json +++ b/QuestPaths/4.x - Stormblood/Custom Deliveries/M'naago/S2_M'naago.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 635, + "InteractionType": "Gather", + "ItemsToGather": [] + }, { "DataId": 1020337, "Position": { @@ -14,7 +19,6 @@ }, "TerritoryId": 635, "InteractionType": "Interact", - "RequiredGatheredItems": [], "AetheryteShortcut": "Rhalgr's Reach", "AethernetShortcut": [ "[Rhalgr's Reach] Aetheryte Plaza", diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3806_A Tool's Errand.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3806_A Tool's Errand.json index d9625d0df..3a11c275a 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3806_A Tool's Errand.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3806_A Tool's Errand.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29517, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3807_Where the Sun Don't Shine.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3807_Where the Sun Don't Shine.json index 45b2176d8..194836db3 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3807_Where the Sun Don't Shine.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3807_Where the Sun Don't Shine.json @@ -21,15 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29518, @@ -42,6 +36,16 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3808_A Touch of Home.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3808_A Touch of Home.json index 5f67cc1dc..5fa818a88 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3808_A Touch of Home.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3808_A Touch of Home.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29519, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3809_Mother's Recipe.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3809_Mother's Recipe.json index 158b91004..e0e1def3c 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3809_Mother's Recipe.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3809_Mother's Recipe.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29520, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3810_Power to the Vegetables.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3810_Power to the Vegetables.json index d88da9c81..ed0114e46 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3810_Power to the Vegetables.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3810_Power to the Vegetables.json @@ -88,9 +88,7 @@ "TerritoryId": 817, "InteractionType": "WalkTo", "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ - ] + "Fly": true }, { "DataId": 1032643, diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3811_Rational Thinking.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3811_Rational Thinking.json index e81c302db..1e420bdfa 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3811_Rational Thinking.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3811_Rational Thinking.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29521, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3812_Making Scents.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3812_Making Scents.json index 86de8b472..6b0ac9041 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3812_Making Scents.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3812_Making Scents.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29522, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3814_Prayers and Poison.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3814_Prayers and Poison.json index 23a2829e9..6fa2638b1 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3814_Prayers and Poison.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3814_Prayers and Poison.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29523, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3815_Salve Our Souls.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3815_Salve Our Souls.json index 3fda4f2d7..1a63219d3 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3815_Salve Our Souls.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3815_Salve Our Souls.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29524, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3816_Rings of Pattern.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3816_Rings of Pattern.json index 76b7a64a5..bdbb16961 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3816_Rings of Pattern.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3816_Rings of Pattern.json @@ -30,9 +30,7 @@ "TerritoryId": 817, "InteractionType": "WalkTo", "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ - ] + "Fly": true }, { "DataId": 1032643, diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3817_You Dirty Rats.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3817_You Dirty Rats.json index 76b7a64a5..bdbb16961 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3817_You Dirty Rats.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3817_You Dirty Rats.json @@ -30,9 +30,7 @@ "TerritoryId": 817, "InteractionType": "WalkTo", "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ - ] + "Fly": true }, { "DataId": 1032643, diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3818_If It's Broke, Fix It.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3818_If It's Broke, Fix It.json index 76b7a64a5..bdbb16961 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3818_If It's Broke, Fix It.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3818_If It's Broke, Fix It.json @@ -30,9 +30,7 @@ "TerritoryId": 817, "InteractionType": "WalkTo", "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ - ] + "Fly": true }, { "DataId": 1032643, diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3820_The Qitari Book of Records.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3820_The Qitari Book of Records.json index 9282be656..204ea239f 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3820_The Qitari Book of Records.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3820_The Qitari Book of Records.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29528, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3821_Meat and Greet.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3821_Meat and Greet.json index 3d5f7dcbf..ffa6ff83c 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3821_Meat and Greet.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3821_Meat and Greet.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29529, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3822_I Have Never Exploded.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3822_I Have Never Exploded.json index 49588dea4..dec082cde 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3822_I Have Never Exploded.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3822_I Have Never Exploded.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29530, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3824_Rock 'n Ronka.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3824_Rock 'n Ronka.json index 76b7a64a5..bdbb16961 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3824_Rock 'n Ronka.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3824_Rock 'n Ronka.json @@ -30,9 +30,7 @@ "TerritoryId": 817, "InteractionType": "WalkTo", "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ - ] + "Fly": true }, { "DataId": 1032643, diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3825_There's No Clean Like Qhoterl Clean.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3825_There's No Clean Like Qhoterl Clean.json index 76b7a64a5..bdbb16961 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3825_There's No Clean Like Qhoterl Clean.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3825_There's No Clean Like Qhoterl Clean.json @@ -30,9 +30,7 @@ "TerritoryId": 817, "InteractionType": "WalkTo", "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ - ] + "Fly": true }, { "DataId": 1032643, diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3827_Her Splendid Materials.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3827_Her Splendid Materials.json index 0ae024dc0..6b71e791e 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3827_Her Splendid Materials.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3827_Her Splendid Materials.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29533, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3828_Splendid Eats.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3828_Splendid Eats.json index ce85c188a..9442335fa 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3828_Splendid Eats.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3828_Splendid Eats.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29534, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3830_Safety Is No Accident.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3830_Safety Is No Accident.json index deded4f53..8f3976ed9 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3830_Safety Is No Accident.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3830_Safety Is No Accident.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29535, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3831_One Fish, Two Fish, Bread Fish, Stew Fish.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3831_One Fish, Two Fish, Bread Fish, Stew Fish.json index 17c44e902..f2761f621 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3831_One Fish, Two Fish, Bread Fish, Stew Fish.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3831_One Fish, Two Fish, Bread Fish, Stew Fish.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "Position": { - "X": 788.1569, - "Y": -45.82557, - "Z": -212.9306 - }, "TerritoryId": 817, - "InteractionType": "WalkTo", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29536, @@ -43,6 +36,17 @@ } ] }, + { + "Position": { + "X": 788.1569, + "Y": -45.82557, + "Z": -212.9306 + }, + "TerritoryId": 817, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true + }, { "DataId": 1032643, "Position": { diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3832_Serpent's Will Be Done.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3832_Serpent's Will Be Done.json index 76b7a64a5..bdbb16961 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3832_Serpent's Will Be Done.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3832_Serpent's Will Be Done.json @@ -30,9 +30,7 @@ "TerritoryId": 817, "InteractionType": "WalkTo", "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ - ] + "Fly": true }, { "DataId": 1032643, diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3833_Qhoterl's Chronicles.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3833_Qhoterl's Chronicles.json index 76b7a64a5..bdbb16961 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3833_Qhoterl's Chronicles.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3833_Qhoterl's Chronicles.json @@ -30,9 +30,7 @@ "TerritoryId": 817, "InteractionType": "WalkTo", "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ - ] + "Fly": true }, { "DataId": 1032643, diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3794_The Stewards of Note.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3794_The Stewards of Note.json index e13c4ad32..9a9e070ff 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3794_The Stewards of Note.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3794_The Stewards of Note.json @@ -91,6 +91,16 @@ { "Sequence": 255, "Steps": [ + { + "TerritoryId": 817, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 29512, + "ItemCount": 1 + } + ] + }, { "DataId": 1032724, "Position": { @@ -100,13 +110,7 @@ }, "TerritoryId": 817, "InteractionType": "CompleteQuest", - "Fly": true, - "RequiredGatheredItems": [ - { - "ItemId": 29512, - "ItemCount": 1 - } - ] + "Fly": true } ] } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3795_Wisdom of the Night.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3795_Wisdom of the Night.json index 1b2c8f550..84db90fd8 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3795_Wisdom of the Night.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3795_Wisdom of the Night.json @@ -38,17 +38,9 @@ "Sequence": 2, "Steps": [ { - "DataId": 1032734, - "Position": { - "X": 802.6703, - "Y": -45.915627, - "Z": -214.70972 - }, "TerritoryId": 817, - "InteractionType": "Interact", - "AetheryteShortcut": "Rak'tika - Fanow", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 29513, @@ -60,6 +52,18 @@ "ItemCount": 1 } ] + }, + { + "DataId": 1032734, + "Position": { + "X": 802.6703, + "Y": -45.915627, + "Z": -214.70972 + }, + "TerritoryId": 817, + "InteractionType": "Interact", + "AetheryteShortcut": "Rak'tika - Fanow", + "Fly": true } ] }, diff --git a/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Kai-Shirr/S5_Kai-Shirr.json b/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Kai-Shirr/S5_Kai-Shirr.json index 325c08cd2..007020533 100644 --- a/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Kai-Shirr/S5_Kai-Shirr.json +++ b/QuestPaths/5.x - Shadowbringers/Custom Deliveries/Kai-Shirr/S5_Kai-Shirr.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 820, + "InteractionType": "Gather", + "ItemsToGather": [] + }, { "DataId": 1031801, "Position": { @@ -14,7 +19,6 @@ }, "TerritoryId": 820, "InteractionType": "Interact", - "RequiredGatheredItems": [], "AetheryteShortcut": "Eulmore", "DialogueChoices": [ { diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4607_Signs of the Past.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4607_Signs of the Past.json index e53d9af14..e70487a8a 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4607_Signs of the Past.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4607_Signs of the Past.json @@ -22,8 +22,8 @@ "Steps": [ { "TerritoryId": 960, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38281, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4609_Well Below Standard.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4609_Well Below Standard.json index 8f588d761..c50c4a581 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4609_Well Below Standard.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4609_Well Below Standard.json @@ -21,16 +21,9 @@ "Sequence": 255, "Steps": [ { - "DataId": 2013072, - "Position": { - "X": 456.65674, - "Y": 438.04077, - "Z": 310.2312 - }, "TerritoryId": 960, - "InteractionType": "Interact", - "TargetTerritoryId": 960, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38282, @@ -41,8 +34,19 @@ "ItemId": 38306, "ItemCount": 3 } - ], - "AetheryteShortcut": "Ultima Thule - Base Omicron" + ] + }, + { + "DataId": 2013072, + "Position": { + "X": 456.65674, + "Y": 438.04077, + "Z": 310.2312 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "AetheryteShortcut": "Ultima Thule - Base Omicron", + "TargetTerritoryId": 960 }, { "DataId": 1043417, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4611_Grounds for Improvement.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4611_Grounds for Improvement.json index 47d61f149..9cdb099ad 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4611_Grounds for Improvement.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4611_Grounds for Improvement.json @@ -33,8 +33,8 @@ }, { "TerritoryId": 1073, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38284, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4612_A Fertile Blend.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4612_A Fertile Blend.json index 298df76d6..0635180f2 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4612_A Fertile Blend.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4612_A Fertile Blend.json @@ -21,17 +21,9 @@ "Sequence": 255, "Steps": [ { - "DataId": 2013072, - "Position": { - "X": 456.65674, - "Y": 438.04077, - "Z": 310.2312 - }, "TerritoryId": 960, - "InteractionType": "Interact", - "TargetTerritoryId": 960, - "AetheryteShortcut": "Ultima Thule - Base Omicron", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38283, @@ -44,6 +36,18 @@ } ] }, + { + "DataId": 2013072, + "Position": { + "X": 456.65674, + "Y": 438.04077, + "Z": 310.2312 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "TargetTerritoryId": 960, + "AetheryteShortcut": "Ultima Thule - Base Omicron" + }, { "DataId": 1043417, "Position": { diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4614_The Robot and the Sea.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4614_The Robot and the Sea.json index 70ae5932a..71875e688 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4614_The Robot and the Sea.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4614_The Robot and the Sea.json @@ -33,8 +33,8 @@ }, { "TerritoryId": 1073, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38285, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4615_Using Their Heads.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4615_Using Their Heads.json index 88f3b658d..dece67eb0 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4615_Using Their Heads.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4615_Using Their Heads.json @@ -22,8 +22,8 @@ "Steps": [ { "TerritoryId": 960, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38286, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4617_I'll Fish It Myself.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4617_I'll Fish It Myself.json index 30a6cf2fc..513129c61 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4617_I'll Fish It Myself.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4617_I'll Fish It Myself.json @@ -34,8 +34,8 @@ }, { "TerritoryId": 1073, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38287, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4620_A Taste of the Sea.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4620_A Taste of the Sea.json index e06131ede..943289610 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4620_A Taste of the Sea.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4620_A Taste of the Sea.json @@ -47,15 +47,9 @@ "Sequence": 2, "Steps": [ { - "DataId": 1044059, - "Position": { - "X": -15.304871, - "Y": 494.9991, - "Z": -68.16211 - }, "TerritoryId": 1073, - "InteractionType": "Interact", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38289, @@ -67,6 +61,16 @@ "ItemCount": 3 } ] + }, + { + "DataId": 1044059, + "Position": { + "X": -15.304871, + "Y": 494.9991, + "Z": -68.16211 + }, + "TerritoryId": 1073, + "InteractionType": "Interact" } ] }, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4622_Ea Epicurious.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4622_Ea Epicurious.json index afa62fdd6..9662a58c6 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4622_Ea Epicurious.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4622_Ea Epicurious.json @@ -21,17 +21,9 @@ "Sequence": 1, "Steps": [ { - "DataId": 1044064, - "Position": { - "X": 86.503296, - "Y": 269.08234, - "Z": -515.0683 - }, "TerritoryId": 960, - "InteractionType": "Interact", - "AetheryteShortcut": "Ultima Thule - Abode of the Ea", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38290, @@ -43,6 +35,18 @@ "ItemCount": 3 } ] + }, + { + "DataId": 1044064, + "Position": { + "X": 86.503296, + "Y": 269.08234, + "Z": -515.0683 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "AetheryteShortcut": "Ultima Thule - Abode of the Ea", + "Fly": true } ] }, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4623_I, Omicron.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4623_I, Omicron.json index ee5495633..6d818a499 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4623_I, Omicron.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4623_I, Omicron.json @@ -34,8 +34,8 @@ }, { "TerritoryId": 1073, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38291, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4625_Corporeal Hand to Proverbial Mouth.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4625_Corporeal Hand to Proverbial Mouth.json index 6e64ff1c7..b1fc3e924 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4625_Corporeal Hand to Proverbial Mouth.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4625_Corporeal Hand to Proverbial Mouth.json @@ -33,8 +33,8 @@ }, { "TerritoryId": 1073, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38292, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4626_Mush for Miw Miisv.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4626_Mush for Miw Miisv.json index 940950de8..1faf24167 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4626_Mush for Miw Miisv.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4626_Mush for Miw Miisv.json @@ -33,8 +33,8 @@ }, { "TerritoryId": 1073, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38293, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4627_Corporeal Comforts.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4627_Corporeal Comforts.json index 1c319fcac..f8be57eca 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4627_Corporeal Comforts.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4627_Corporeal Comforts.json @@ -21,17 +21,9 @@ "Sequence": 1, "Steps": [ { - "DataId": 1044071, - "Position": { - "X": 46.066895, - "Y": 268.99976, - "Z": -584.77155 - }, "TerritoryId": 960, - "InteractionType": "Interact", - "AetheryteShortcut": "Ultima Thule - Abode of the Ea", - "Fly": true, - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38294, @@ -43,6 +35,18 @@ "ItemCount": 3 } ] + }, + { + "DataId": 1044071, + "Position": { + "X": 46.066895, + "Y": 268.99976, + "Z": -584.77155 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "AetheryteShortcut": "Ultima Thule - Abode of the Ea", + "Fly": true } ] }, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4629_A Light in the Dark.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4629_A Light in the Dark.json index f1d2760b4..9ba18a23c 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4629_A Light in the Dark.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4629_A Light in the Dark.json @@ -21,16 +21,9 @@ "Sequence": 1, "Steps": [ { - "DataId": 1044074, - "Position": { - "X": -585.90063, - "Y": 75.22713, - "Z": 256.67188 - }, "TerritoryId": 960, - "InteractionType": "Interact", - "AetheryteShortcut": "Ultima Thule - Reah Tahra", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38295, @@ -42,6 +35,17 @@ "ItemCount": 3 } ] + }, + { + "DataId": 1044074, + "Position": { + "X": -585.90063, + "Y": 75.22713, + "Z": 256.67188 + }, + "TerritoryId": 960, + "InteractionType": "Interact", + "AetheryteShortcut": "Ultima Thule - Reah Tahra" } ] }, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4630_Reclaiming the Taste of Home.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4630_Reclaiming the Taste of Home.json index 91ba26b49..6e075fa89 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4630_Reclaiming the Taste of Home.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4630_Reclaiming the Taste of Home.json @@ -47,15 +47,9 @@ "Sequence": 2, "Steps": [ { - "DataId": 1044075, - "Position": { - "X": -64.4389, - "Y": 493.32922, - "Z": -4.409851 - }, "TerritoryId": 1073, - "InteractionType": "Interact", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38296, @@ -67,6 +61,16 @@ "ItemCount": 3 } ] + }, + { + "DataId": 1044075, + "Position": { + "X": -64.4389, + "Y": 493.32922, + "Z": -4.409851 + }, + "TerritoryId": 1073, + "InteractionType": "Interact" } ] }, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4631_Not Forgotten.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4631_Not Forgotten.json index f68b76f5f..f3eca7450 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4631_Not Forgotten.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4631_Not Forgotten.json @@ -21,17 +21,9 @@ "Sequence": 1, "Steps": [ { - "DataId": 1044076, - "Position": { - "X": -499.96188, - "Y": 77.00467, - "Z": 241.07727 - }, - "StopDistance": 9, "TerritoryId": 960, - "InteractionType": "Interact", - "AetheryteShortcut": "Ultima Thule - Reah Tahra", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38297, @@ -43,6 +35,18 @@ "ItemCount": 3 } ] + }, + { + "DataId": 1044076, + "Position": { + "X": -499.96188, + "Y": 77.00467, + "Z": 241.07727 + }, + "StopDistance": 9, + "TerritoryId": 960, + "InteractionType": "Interact", + "AetheryteShortcut": "Ultima Thule - Reah Tahra" } ] }, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4632_Checking for Cavities.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4632_Checking for Cavities.json index fdec020c4..bf7202517 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4632_Checking for Cavities.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4632_Checking for Cavities.json @@ -21,16 +21,10 @@ "Sequence": 1, "Steps": [ { - "DataId": 1044081, - "Position": { - "X": -503.99023, - "Y": 74.16917, - "Z": 261.82947 - }, "TerritoryId": 960, - "InteractionType": "Interact", + "InteractionType": "Gather", "AetheryteShortcut": "Ultima Thule - Reah Tahra", - "RequiredGatheredItems": [ + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38299, @@ -42,6 +36,16 @@ "ItemCount": 3 } ] + }, + { + "DataId": 1044081, + "Position": { + "X": -503.99023, + "Y": 74.16917, + "Z": 261.82947 + }, + "TerritoryId": 960, + "InteractionType": "Interact" } ] }, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4634_The Lost World.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4634_The Lost World.json index 7825c3cb2..89f6b44c1 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4634_The Lost World.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4634_The Lost World.json @@ -33,8 +33,8 @@ }, { "TerritoryId": 1073, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38298, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4601_The Café at the End of the Universe.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4601_The Café at the End of the Universe.json index 34b28d3d4..d1eb587c3 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4601_The Café at the End of the Universe.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4601_The Café at the End of the Universe.json @@ -113,6 +113,22 @@ { "Sequence": 4, "Steps": [ + { + "TerritoryId": 960, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "QuestAcceptedAsClass": "Miner", + "ItemId": 38276, + "ItemCount": 3 + }, + { + "QuestAcceptedAsClass": "Botanist", + "ItemId": 38300, + "ItemCount": 3 + } + ] + }, { "DataId": 2013072, "Position": { @@ -129,18 +145,6 @@ "Prompt": "TEXT_BANOMI001_04601_Q5_000_000", "Yes": true } - ], - "RequiredGatheredItems": [ - { - "QuestAcceptedAsClass": "Miner", - "ItemId": 38276, - "ItemCount": 3 - }, - { - "QuestAcceptedAsClass": "Botanist", - "ItemId": 38300, - "ItemCount": 3 - } ] }, { diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4602_Longing So for All the Fish.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4602_Longing So for All the Fish.json index af25f7e61..ffafc60f8 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4602_Longing So for All the Fish.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4602_Longing So for All the Fish.json @@ -171,8 +171,8 @@ "Steps": [ { "TerritoryId": 960, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38277, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4603_And Another Question.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4603_And Another Question.json index 7d9074845..9170a9ed5 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4603_And Another Question.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4603_And Another Question.json @@ -139,8 +139,8 @@ "Steps": [ { "TerritoryId": 960, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38278, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4604_The Restaurateur's Guide to the Dragonstar.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4604_The Restaurateur's Guide to the Dragonstar.json index 795964570..0cdbce560 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4604_The Restaurateur's Guide to the Dragonstar.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4604_The Restaurateur's Guide to the Dragonstar.json @@ -91,8 +91,8 @@ "Steps": [ { "TerritoryId": 398, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38279, diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4605_Mostly Heartless.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4605_Mostly Heartless.json index 0fc6c53a4..32571b616 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4605_Mostly Heartless.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Story/4605_Mostly Heartless.json @@ -156,8 +156,8 @@ "Steps": [ { "TerritoryId": 1073, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "QuestAcceptedAsClass": "Miner", "ItemId": 38280, diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Ameliance/S8_Ameliance.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Ameliance/S8_Ameliance.json index 36229edda..9cd56890f 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Ameliance/S8_Ameliance.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Ameliance/S8_Ameliance.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 962, + "InteractionType": "Gather", + "ItemsToGather": [] + }, { "DataId": 1042241, "Position": { @@ -14,7 +19,6 @@ }, "TerritoryId": 962, "InteractionType": "Interact", - "RequiredGatheredItems": [], "AetheryteShortcut": "Old Sharlayan", "AethernetShortcut": [ "[Old Sharlayan] Aetheryte Plaza", diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/S9_Anden.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/S9_Anden.json index 1ac3ad73d..b36972b05 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/S9_Anden.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Anden/S9_Anden.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 816, + "InteractionType": "Gather", + "ItemsToGather": [] + }, { "DataId": 1044547, "Position": { @@ -14,7 +19,6 @@ }, "TerritoryId": 816, "InteractionType": "Interact", - "RequiredGatheredItems": [], "AetheryteShortcut": "Il Mheg - Lydha Lran", "Fly": true, "DialogueChoices": [ diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Margrat/S10_Margrat.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Margrat/S10_Margrat.json index 1d5507af0..e4d27b17c 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Margrat/S10_Margrat.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Margrat/S10_Margrat.json @@ -5,6 +5,11 @@ { "Sequence": 0, "Steps": [ + { + "TerritoryId": 956, + "InteractionType": "Gather", + "ItemsToGather": [] + }, { "Position": { "X": -44.066154, @@ -14,7 +19,6 @@ "TerritoryId": 956, "InteractionType": "WalkTo", "AetheryteShortcut": "Labyrinthos - Sharlayan Hamlet", - "RequiredGatheredItems": [], "Fly": true }, { diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4154_Cooking Up a Culture.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4154_Cooking Up a Culture.json index 307203035..8139e0c24 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4154_Cooking Up a Culture.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4154_Cooking Up a Culture.json @@ -20,6 +20,17 @@ { "Sequence": 255, "Steps": [ + { + "TerritoryId": 962, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 35600, + "ItemCount": 6, + "Collectability": 600 + } + ] + }, { "DataId": 1038501, "Position": { @@ -34,13 +45,6 @@ "[Old Sharlayan] Aetheryte Plaza", "[Old Sharlayan] The Studium" ], - "RequiredGatheredItems": [ - { - "ItemId": 35600, - "ItemCount": 6, - "Collectability": 600 - } - ], "NextQuestId": 4155 } ] diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4155_The Culture of Ceruleum.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4155_The Culture of Ceruleum.json index ca598552f..9e231382b 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4155_The Culture of Ceruleum.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4155_The Culture of Ceruleum.json @@ -20,6 +20,17 @@ { "Sequence": 255, "Steps": [ + { + "TerritoryId": 962, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 35601, + "ItemCount": 6, + "Collectability": 600 + } + ] + }, { "DataId": 1038501, "Position": { @@ -34,13 +45,6 @@ "[Old Sharlayan] Aetheryte Plaza", "[Old Sharlayan] The Studium" ], - "RequiredGatheredItems": [ - { - "ItemId": 35601, - "ItemCount": 6, - "Collectability": 600 - } - ], "NextQuestId": 4156 } ] diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4156_The Culture of Carrots.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4156_The Culture of Carrots.json index d25034d3d..1e533484f 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4156_The Culture of Carrots.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4156_The Culture of Carrots.json @@ -20,6 +20,17 @@ { "Sequence": 255, "Steps": [ + { + "TerritoryId": 962, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 35602, + "ItemCount": 6, + "Collectability": 600 + } + ] + }, { "DataId": 1038501, "Position": { @@ -34,13 +45,6 @@ "[Old Sharlayan] Aetheryte Plaza", "[Old Sharlayan] The Studium" ], - "RequiredGatheredItems": [ - { - "ItemId": 35602, - "ItemCount": 6, - "Collectability": 600 - } - ], "NextQuestId": 4157 } ] diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4157_Hinageshi in Hingashi.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4157_Hinageshi in Hingashi.json index e2ebf5530..3cf84c84f 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4157_Hinageshi in Hingashi.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4157_Hinageshi in Hingashi.json @@ -97,6 +97,16 @@ { "Sequence": 5, "Steps": [ + { + "TerritoryId": 628, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 35847, + "ItemCount": 1 + } + ] + }, { "DataId": 1038508, "Position": { @@ -110,12 +120,6 @@ "AethernetShortcut": [ "[Kugane] Aetheryte Plaza", "[Kugane] The Ruby Bazaar" - ], - "RequiredGatheredItems": [ - { - "ItemId": 35847, - "ItemCount": 1 - } ] } ] diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4158_The Culture of the Past.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4158_The Culture of the Past.json index aa12eb80f..65f4d7b1d 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4158_The Culture of the Past.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4158_The Culture of the Past.json @@ -20,6 +20,17 @@ { "Sequence": 255, "Steps": [ + { + "TerritoryId": 962, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 35603, + "ItemCount": 6, + "Collectability": 600 + } + ] + }, { "DataId": 1038501, "Position": { @@ -34,13 +45,6 @@ "[Old Sharlayan] Aetheryte Plaza", "[Old Sharlayan] The Studium" ], - "RequiredGatheredItems": [ - { - "ItemId": 35603, - "ItemCount": 6, - "Collectability": 600 - } - ], "NextQuestId": 4159 } ] diff --git a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4159_The Culture of Love.json b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4159_The Culture of Love.json index a7dd1f4ad..64daaad4c 100644 --- a/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4159_The Culture of Love.json +++ b/QuestPaths/6.x - Endwalker/Custom Deliveries/Studium/MIN, BTN/4159_The Culture of Love.json @@ -20,6 +20,16 @@ { "Sequence": 1, "Steps": [ + { + "TerritoryId": 962, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 35848, + "ItemCount": 1 + } + ] + }, { "DataId": 1038503, "Position": { @@ -33,12 +43,6 @@ "AethernetShortcut": [ "[Old Sharlayan] Aetheryte Plaza", "[Old Sharlayan] The Studium" - ], - "RequiredGatheredItems": [ - { - "ItemId": 35848, - "ItemCount": 1 - } ] } ] diff --git a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4990_Test of Talents.json b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4990_Test of Talents.json index 6a72ac375..368326b8c 100644 --- a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4990_Test of Talents.json +++ b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4990_Test of Talents.json @@ -22,18 +22,13 @@ "Steps": [ { "TerritoryId": 1185, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "ItemId": 43899, "ItemCount": 6, "Collectability": 600 } - ], - "AetheryteShortcut": "Tuliyollal", - "AethernetShortcut": [ - "[Tuliyollal] Aetheryte Plaza", - "[Tuliyollal] Wachumeqimeqi" ] }, { @@ -45,7 +40,12 @@ }, "TerritoryId": 1185, "InteractionType": "CompleteQuest", - "NextQuestId": 4991 + "NextQuestId": 4991, + "AetheryteShortcut": "Tuliyollal", + "AethernetShortcut": [ + "[Tuliyollal] Aetheryte Plaza", + "[Tuliyollal] Wachumeqimeqi" + ] } ] } diff --git a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4991_A Discerning Eye.json b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4991_A Discerning Eye.json index 7150a44ca..923cde19e 100644 --- a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4991_A Discerning Eye.json +++ b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4991_A Discerning Eye.json @@ -22,18 +22,13 @@ "Steps": [ { "TerritoryId": 1185, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "ItemId": 43900, "ItemCount": 6, "Collectability": 600 } - ], - "AetheryteShortcut": "Tuliyollal", - "AethernetShortcut": [ - "[Tuliyollal] Aetheryte Plaza", - "[Tuliyollal] Wachumeqimeqi" ] }, { @@ -45,7 +40,12 @@ }, "TerritoryId": 1185, "InteractionType": "CompleteQuest", - "NextQuestId": 4992 + "NextQuestId": 4992, + "AetheryteShortcut": "Tuliyollal", + "AethernetShortcut": [ + "[Tuliyollal] Aetheryte Plaza", + "[Tuliyollal] Wachumeqimeqi" + ] } ] } diff --git a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4992_As Nature Intends.json b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4992_As Nature Intends.json index dd99b09bb..d0769b6e4 100644 --- a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4992_As Nature Intends.json +++ b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4992_As Nature Intends.json @@ -22,18 +22,13 @@ "Steps": [ { "TerritoryId": 1185, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "ItemId": 43901, "ItemCount": 6, "Collectability": 600 } - ], - "AetheryteShortcut": "Tuliyollal", - "AethernetShortcut": [ - "[Tuliyollal] Aetheryte Plaza", - "[Tuliyollal] Wachumeqimeqi" ] }, { @@ -45,7 +40,12 @@ }, "TerritoryId": 1185, "InteractionType": "CompleteQuest", - "NextQuestId": 4993 + "NextQuestId": 4993, + "AetheryteShortcut": "Tuliyollal", + "AethernetShortcut": [ + "[Tuliyollal] Aetheryte Plaza", + "[Tuliyollal] Wachumeqimeqi" + ] } ] } diff --git a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4993_The Cycle of Life.json b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4993_The Cycle of Life.json index 9b9155ff7..806268547 100644 --- a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4993_The Cycle of Life.json +++ b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4993_The Cycle of Life.json @@ -41,17 +41,12 @@ "Steps": [ { "TerritoryId": 1185, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "ItemId": 43913, "ItemCount": 1 } - ], - "AetheryteShortcut": "Tuliyollal", - "AethernetShortcut": [ - "[Tuliyollal] Aetheryte Plaza", - "[Tuliyollal] Wachumeqimeqi" ] }, { @@ -63,7 +58,12 @@ }, "TerritoryId": 1185, "InteractionType": "CompleteQuest", - "NextQuestId": 4994 + "NextQuestId": 4994, + "AetheryteShortcut": "Tuliyollal", + "AethernetShortcut": [ + "[Tuliyollal] Aetheryte Plaza", + "[Tuliyollal] Wachumeqimeqi" + ] } ] } diff --git a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4994_Digging Up the Truth.json b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4994_Digging Up the Truth.json index 1202151ec..706b71902 100644 --- a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4994_Digging Up the Truth.json +++ b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4994_Digging Up the Truth.json @@ -22,18 +22,13 @@ "Steps": [ { "TerritoryId": 1185, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "ItemId": 43902, "ItemCount": 6, "Collectability": 600 } - ], - "AetheryteShortcut": "Tuliyollal", - "AethernetShortcut": [ - "[Tuliyollal] Aetheryte Plaza", - "[Tuliyollal] Wachumeqimeqi" ] }, { @@ -45,7 +40,12 @@ }, "TerritoryId": 1185, "InteractionType": "CompleteQuest", - "NextQuestId": 4995 + "NextQuestId": 4995, + "AetheryteShortcut": "Tuliyollal", + "AethernetShortcut": [ + "[Tuliyollal] Aetheryte Plaza", + "[Tuliyollal] Wachumeqimeqi" + ] } ] } diff --git a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4995_Wellspring of Tears.json b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4995_Wellspring of Tears.json index 03be2b822..f79bfff6c 100644 --- a/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4995_Wellspring of Tears.json +++ b/QuestPaths/7.x - Dawntrail/Custom Deliveries/Wachumeqimeqi/MIN, BTN/4995_Wellspring of Tears.json @@ -205,6 +205,16 @@ } } }, + { + "TerritoryId": 1189, + "InteractionType": "Gather", + "ItemsToGather": [ + { + "ItemId": 43914, + "ItemCount": 1 + } + ] + }, { "Position": { "X": 674.17834, @@ -213,13 +223,7 @@ }, "TerritoryId": 1189, "InteractionType": "WalkTo", - "Fly": true, - "RequiredGatheredItems": [ - { - "ItemId": 43914, - "ItemCount": 1 - } - ] + "Fly": true }, { "Position": { diff --git a/QuestPaths/7.x - Dawntrail/Leves/BTN/L1770_All Stars.json b/QuestPaths/7.x - Dawntrail/Leves/BTN/L1770_All Stars.json index 293ab4d6b..6ec5d9614 100644 --- a/QuestPaths/7.x - Dawntrail/Leves/BTN/L1770_All Stars.json +++ b/QuestPaths/7.x - Dawntrail/Leves/BTN/L1770_All Stars.json @@ -23,8 +23,8 @@ }, { "TerritoryId": 1188, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "ItemId": 2003516, "AlternativeItemId": 2003517, diff --git a/QuestPaths/7.x - Dawntrail/Leves/BTN/L1779_New Start for the Cinderfield.json b/QuestPaths/7.x - Dawntrail/Leves/BTN/L1779_New Start for the Cinderfield.json index d7abd6096..c9d872c38 100644 --- a/QuestPaths/7.x - Dawntrail/Leves/BTN/L1779_New Start for the Cinderfield.json +++ b/QuestPaths/7.x - Dawntrail/Leves/BTN/L1779_New Start for the Cinderfield.json @@ -23,8 +23,8 @@ }, { "TerritoryId": 1189, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "ItemId": 2003529, "AlternativeItemId": 2003530, diff --git a/QuestPaths/7.x - Dawntrail/Leves/MIN/L1785_Old and Bubbly.json b/QuestPaths/7.x - Dawntrail/Leves/MIN/L1785_Old and Bubbly.json index e5f1f2991..dd7d68cde 100644 --- a/QuestPaths/7.x - Dawntrail/Leves/MIN/L1785_Old and Bubbly.json +++ b/QuestPaths/7.x - Dawntrail/Leves/MIN/L1785_Old and Bubbly.json @@ -23,8 +23,8 @@ }, { "TerritoryId": 1187, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "ItemId": 2003539, "AlternativeItemId": 2003540, diff --git a/QuestPaths/7.x - Dawntrail/Leves/MIN/L1794_Vestiges of War.json b/QuestPaths/7.x - Dawntrail/Leves/MIN/L1794_Vestiges of War.json index 75e19368b..38e43e0f4 100644 --- a/QuestPaths/7.x - Dawntrail/Leves/MIN/L1794_Vestiges of War.json +++ b/QuestPaths/7.x - Dawntrail/Leves/MIN/L1794_Vestiges of War.json @@ -23,8 +23,8 @@ }, { "TerritoryId": 1189, - "InteractionType": "None", - "RequiredGatheredItems": [ + "InteractionType": "Gather", + "ItemsToGather": [ { "ItemId": 2003552, "AlternativeItemId": 2003553, diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index 4c271e1af..4282b7c9b 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -130,6 +130,7 @@ "Jump", "Dive", "Craft", + "Gather", "Snipe", "Instruction", "AcceptQuest", @@ -239,13 +240,19 @@ "QuestsAccepted": { "type": "array", "items": { - "type": ["number", "string"] + "type": [ + "number", + "string" + ] } }, "QuestsCompleted": { "type": "array", "items": { - "type": ["number", "string"] + "type": [ + "number", + "string" + ] } }, "AetheryteLocked": { @@ -302,13 +309,19 @@ "QuestsAccepted": { "type": "array", "items": { - "type": ["number", "string"] + "type": [ + "number", + "string" + ] } }, "QuestsCompleted": { "type": "array", "items": { - "type": ["number", "string"] + "type": [ + "number", + "string" + ] } }, "AetheryteLocked": { @@ -405,41 +418,6 @@ } } }, - "RequiredGatheredItems": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ItemId": { - "type": "number" - }, - "AlternativeItemId": { - "description": "For leves that allow you to gather two items with different chance percentage, this is the preferred item if the gathering chance is 100% (after buffs)", - "type": "number" - }, - "ItemCount": { - "type": "number", - "exclusiveMinimum": 0 - }, - "Collectability": { - "type": "number", - "minimum": 0, - "maximum": 1000 - }, - "QuestAcceptedAsClass": { - "type": "string", - "enum": [ - "Miner", - "Botanist" - ] - } - }, - "required": [ - "ItemId", - "ItemCount" - ] - } - }, "DelaySecondsAtStart": { "description": "Time to wait before starting", "type": [ @@ -1203,17 +1181,60 @@ "ItemCount" ] } - } - ], - "not": { - "anyOf": [ - { + }, + { + "if": { + "properties": { + "InteractionType": { + "const": "Gather" + } + } + }, + "then": { + "properties": { + "ItemsToGather": { + "type": "array", + "description": "Unlike crafting steps, which will always craft a single item id regardless of class, this allows for gathering different items depending on whether you've picked the quest up as miner or botanist", + "items": { + "type": "object", + "properties": { + "ItemId": { + "type": "number" + }, + "AlternativeItemId": { + "description": "For leves that allow you to gather two items with different chance percentage, this is the preferred item if the gathering chance is 100% (after buffs)", + "type": "number" + }, + "ItemCount": { + "type": "number", + "exclusiveMinimum": 0 + }, + "Collectability": { + "type": "number", + "minimum": 0, + "maximum": 1000 + }, + "QuestAcceptedAsClass": { + "type": "string", + "enum": [ + "Miner", + "Botanist" + ] + } + }, + "required": [ + "ItemId", + "ItemCount" + ] + } + } + }, "required": [ - "SkipIf" + "ItemsToGather" ] } - ] - } + } + ] } } } diff --git a/Questionable.Model/Questing/Converter/InteractionTypeConverter.cs b/Questionable.Model/Questing/Converter/InteractionTypeConverter.cs index bf856da99..34320633c 100644 --- a/Questionable.Model/Questing/Converter/InteractionTypeConverter.cs +++ b/Questionable.Model/Questing/Converter/InteractionTypeConverter.cs @@ -27,6 +27,7 @@ public sealed class InteractionTypeConverter() : EnumConverter { EInteractionType.Jump, "Jump" }, { EInteractionType.Dive, "Dive" }, { EInteractionType.Craft, "Craft" }, + { EInteractionType.Gather, "Gather" }, { EInteractionType.Snipe, "Snipe" }, { EInteractionType.Instruction, "Instruction" }, { EInteractionType.AcceptQuest, "AcceptQuest" }, diff --git a/Questionable.Model/Questing/EInteractionType.cs b/Questionable.Model/Questing/EInteractionType.cs index f251b5aee..d9942ef45 100644 --- a/Questionable.Model/Questing/EInteractionType.cs +++ b/Questionable.Model/Questing/EInteractionType.cs @@ -26,6 +26,7 @@ public enum EInteractionType Jump, Dive, Craft, + Gather, Snipe, /// @@ -38,7 +39,4 @@ public enum EInteractionType AcceptLeve, InitiateLeve, CompleteLeve, - - // unmapped extra types below - InternalGather, } diff --git a/Questionable.Model/Questing/QuestStep.cs b/Questionable.Model/Questing/QuestStep.cs index 8ee496bfc..da851c834 100644 --- a/Questionable.Model/Questing/QuestStep.cs +++ b/Questionable.Model/Questing/QuestStep.cs @@ -74,7 +74,7 @@ public sealed class QuestStep public SkipConditions? SkipConditions { get; set; } public List?> RequiredQuestVariables { get; set; } = new(); - public List RequiredGatheredItems { get; set; } = []; + public List ItemsToGather { get; set; } = []; public List CompletionQuestVariablesFlags { get; set; } = []; public List DialogueChoices { get; set; } = []; public List PointMenuChoices { get; set; } = []; diff --git a/Questionable/Controller/ContextMenuController.cs b/Questionable/Controller/ContextMenuController.cs index 509d83729..819d8b257 100644 --- a/Questionable/Controller/ContextMenuController.cs +++ b/Questionable/Controller/ContextMenuController.cs @@ -134,8 +134,8 @@ internal sealed class ContextMenuController : IDisposable .Single(x => x is SatisfactionSupplyInfo); if (_questRegistry.TryGetQuest(info.QuestId, out Quest? quest)) { - var step = quest.FindSequence(0)!.FindStep(0)!; - step.RequiredGatheredItems = + var step = quest.FindSequence(0)!.Steps.Single(x => x.InteractionType == EInteractionType.Gather); + step.ItemsToGather = [ new GatheredItem { diff --git a/Questionable/Controller/GameUi/InteractionUiController.cs b/Questionable/Controller/GameUi/InteractionUiController.cs index 35f89d066..ce083331e 100644 --- a/Questionable/Controller/GameUi/InteractionUiController.cs +++ b/Questionable/Controller/GameUi/InteractionUiController.cs @@ -658,9 +658,9 @@ internal sealed class InteractionUiController : IDisposable step.TargetTerritoryId); if (step != null && (step.TerritoryId != _clientState.TerritoryType || step.TargetTerritoryId == null) && - step.RequiredGatheredItems.Count > 0) + step.InteractionType == EInteractionType.Gather) { - if (_gatheringData.TryGetGatheringPointId(step.RequiredGatheredItems[0].ItemId, + if (_gatheringData.TryGetGatheringPointId(step.ItemsToGather[0].ItemId, (EClassJob?)_clientState.LocalPlayer?.ClassJob.Id ?? EClassJob.Adventurer, out GatheringPointId? gatheringPointId) && _gatheringPointRegistry.TryGetGatheringPoint(gatheringPointId, out GatheringRoot? root)) diff --git a/Questionable/Controller/GatheringController.cs b/Questionable/Controller/GatheringController.cs index ffa012440..77860f7e7 100644 --- a/Questionable/Controller/GatheringController.cs +++ b/Questionable/Controller/GatheringController.cs @@ -186,14 +186,13 @@ internal sealed unsafe class GatheringController : MiniTaskController())); _taskQueue.Enqueue(_mountFactory.Unmount()); - _taskQueue.Enqueue(_interactFactory.Interact(currentNode.DataId, null, EInteractionType.InternalGather, true)); + _taskQueue.Enqueue(_interactFactory.Interact(currentNode.DataId, null, EInteractionType.Gather, true)); QueueGatherNode(currentNode); } diff --git a/Questionable/Controller/MiniTaskController.cs b/Questionable/Controller/MiniTaskController.cs index 63dfba106..8d905b952 100644 --- a/Questionable/Controller/MiniTaskController.cs +++ b/Questionable/Controller/MiniTaskController.cs @@ -81,7 +81,7 @@ internal abstract class MiniTaskController while (_taskQueue.TryDequeue(out ITask? nextTask)) { - if (nextTask is ILastTask or GatheringRequiredItems.SkipMarker) + if (nextTask is ILastTask or Gather.SkipMarker) { _currentTask = nextTask; return; diff --git a/Questionable/Controller/Steps/Gathering/MoveToLandingLocation.cs b/Questionable/Controller/Steps/Gathering/MoveToLandingLocation.cs index 5694d65ec..a9ebe4a5d 100644 --- a/Questionable/Controller/Steps/Gathering/MoveToLandingLocation.cs +++ b/Questionable/Controller/Steps/Gathering/MoveToLandingLocation.cs @@ -41,8 +41,8 @@ internal sealed class MoveToLandingLocation( target.ToString("G", CultureInfo.InvariantCulture), degrees, range); bool fly = flyBetweenNodes && gameFunctions.IsFlyingUnlocked(territoryId); - _moveTask = moveFactory.Move(new MoveTo.MoveParams(territoryId, target, 0.25f, DataId: gatheringNode.DataId, - Fly: fly, IgnoreDistanceToObject: true)); + _moveTask = moveFactory.Move(new MoveTo.MoveParams(territoryId, target, null, 0.25f, + DataId: gatheringNode.DataId, Fly: fly, IgnoreDistanceToObject: true)); return _moveTask.Start(); } diff --git a/Questionable/Controller/Steps/Interactions/Interact.cs b/Questionable/Controller/Steps/Interactions/Interact.cs index e233bfde3..a88e6dda5 100644 --- a/Questionable/Controller/Steps/Interactions/Interact.cs +++ b/Questionable/Controller/Steps/Interactions/Interact.cs @@ -162,7 +162,7 @@ internal static class Interact if (_interactionState == EInteractionState.InteractionConfirmed) return ETaskResult.TaskComplete; - if (interactionType == EInteractionType.InternalGather && condition[ConditionFlag.Gathering]) + if (interactionType == EInteractionType.Gather && condition[ConditionFlag.Gathering]) return ETaskResult.TaskComplete; } diff --git a/Questionable/Controller/Steps/Interactions/UseItem.cs b/Questionable/Controller/Steps/Interactions/UseItem.cs index 358c30d93..8ca5f40af 100644 --- a/Questionable/Controller/Steps/Interactions/UseItem.cs +++ b/Questionable/Controller/Steps/Interactions/UseItem.cs @@ -72,7 +72,7 @@ internal static class UseItem mountFactory.Mount(140, nextPosition != null ? Mount.EMountIf.AwayFromPosition : Mount.EMountIf.Always, nextPosition), - moveFactory.Move(new MoveTo.MoveParams(140, new(-408.92343f, 23.167036f, -351.16223f), 0.25f, + moveFactory.Move(new MoveTo.MoveParams(140, new(-408.92343f, 23.167036f, -351.16223f), null, 0.25f, DataId: null, DisableNavMesh: true, Sprint: false, Fly: false)) ]; } diff --git a/Questionable/Controller/Steps/Shared/GatheringRequiredItems.cs b/Questionable/Controller/Steps/Shared/Gather.cs similarity index 87% rename from Questionable/Controller/Steps/Shared/GatheringRequiredItems.cs rename to Questionable/Controller/Steps/Shared/Gather.cs index 48ad33bbe..cc5d9cfac 100644 --- a/Questionable/Controller/Steps/Shared/GatheringRequiredItems.cs +++ b/Questionable/Controller/Steps/Shared/Gather.cs @@ -16,7 +16,7 @@ using Questionable.Model.Questing; namespace Questionable.Controller.Steps.Shared; -internal static class GatheringRequiredItems +internal static class Gather { internal sealed class Factory( IServiceProvider serviceProvider, @@ -30,20 +30,23 @@ internal static class GatheringRequiredItems { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { - foreach (var requiredGatheredItems in step.RequiredGatheredItems) + if (step.InteractionType != EInteractionType.Gather) + yield break; + + foreach (var itemToGather in step.ItemsToGather) { EClassJob currentClassJob = (EClassJob)clientState.LocalPlayer!.ClassJob.Id; EClassJob classJob = currentClassJob; - if (requiredGatheredItems.QuestAcceptedAsClass != null) + if (itemToGather.QuestAcceptedAsClass != null) { - classJob = (EClassJob)requiredGatheredItems.QuestAcceptedAsClass.Value; + classJob = (EClassJob)itemToGather.QuestAcceptedAsClass.Value; if (!IsClassJobQuestWasAcceptedWith(quest.Id, classJob)) continue; } - if (!gatheringData.TryGetGatheringPointId(requiredGatheredItems.ItemId, classJob, + if (!gatheringData.TryGetGatheringPointId(itemToGather.ItemId, classJob, out GatheringPointId? gatheringPointId)) - throw new TaskException($"No gathering point found for item {requiredGatheredItems.ItemId}"); + throw new TaskException($"No gathering point found for item {itemToGather.ItemId}"); if (!gatheringPointRegistry.TryGetGatheringPoint(gatheringPointId, out GatheringRoot? gatheringRoot)) throw new TaskException($"No path found for gathering point {gatheringPointId}"); @@ -53,7 +56,7 @@ internal static class GatheringRequiredItems yield return new SwitchClassJob(classJob, clientState); } - if (HasRequiredItems(requiredGatheredItems)) + if (HasRequiredItems(itemToGather)) continue; using (var _ = logger.BeginScope("Gathering(inner)")) @@ -81,7 +84,7 @@ internal static class GatheringRequiredItems yield return new WaitConditionTask(() => movementController.IsNavmeshReady, "Wait(navmesh ready)"); - yield return CreateStartGatheringTask(gatheringPointId, requiredGatheredItems); + yield return CreateStartGatheringTask(gatheringPointId, itemToGather); yield return new WaitAtEnd.WaitDelay(); } } @@ -98,13 +101,13 @@ internal static class GatheringRequiredItems return true; } - private unsafe bool HasRequiredItems(GatheredItem requiredGatheredItems) + private unsafe bool HasRequiredItems(GatheredItem itemToGather) { InventoryManager* inventoryManager = InventoryManager.Instance(); return inventoryManager != null && - inventoryManager->GetInventoryItemCount(requiredGatheredItems.ItemId, - minCollectability: (short)requiredGatheredItems.Collectability) >= - requiredGatheredItems.ItemCount; + inventoryManager->GetInventoryItemCount(itemToGather.ItemId, + minCollectability: (short)itemToGather.Collectability) >= + itemToGather.ItemCount; } private StartGathering CreateStartGatheringTask(GatheringPointId gatheringPointId, GatheredItem gatheredItem) diff --git a/Questionable/Controller/Steps/Shared/MoveTo.cs b/Questionable/Controller/Steps/Shared/MoveTo.cs index ba76a6875..cf905a650 100644 --- a/Questionable/Controller/Steps/Shared/MoveTo.cs +++ b/Questionable/Controller/Steps/Shared/MoveTo.cs @@ -67,7 +67,7 @@ internal static class MoveTo public ITask Move(MoveParams moveParams) { - return new MoveInternal(moveParams, movementController, gameFunctions, + return new MoveInternal(moveParams, movementController, mountFactory, gameFunctions, loggerFactory.CreateLogger(), clientState, dataManager); } @@ -95,74 +95,18 @@ internal static class MoveTo $"Wait(territory: {territoryData.GetNameAndId(step.TerritoryId)})"); if (!step.DisableNavmesh) + { yield return new WaitConditionTask(() => movementController.IsNavmeshReady, "Wait(navmesh ready)"); - float stopDistance = step.CalculateActualStopDistance(); - Vector3? position = clientState.LocalPlayer?.Position; - float actualDistance = position == null ? float.MaxValue : Vector3.Distance(position.Value, destination); - - // if we teleport to a different zone, assume we always need to move; this is primarily relevant for cases - // where you're e.g. in Lakeland, and the step navigates via Crystarium → Tesselation back into the same - // zone. - // - // Side effects of this check being broken include: - // - mounting when near the target npc (if you spawn close enough for the next step) - // - trying to fly when near the target npc (if close enough where no movement is required) - if (step.AetheryteShortcut != null && - aetheryteData.TerritoryIds[step.AetheryteShortcut.Value] != step.TerritoryId) - { - logger.LogDebug("Aetheryte: Changing distance to max, previous distance: {Distance}", actualDistance); - actualDistance = float.MaxValue; - } - - // Fixes a case where you're initiating the gathering step when standing next to the NPC already - // TODO maybe this should be delayed up until starting movement - if (questId is SatisfactionSupplyNpcId) - { - logger.LogDebug("SatisfactionSupply: Changing distance to max, previous distance: {Distance}", - actualDistance); - actualDistance = float.MaxValue; - } - - if (step.Mount == true) - yield return mountFactory.Mount(step.TerritoryId, Mount.EMountIf.Always); - else if (step.Mount == false) - yield return mountFactory.Unmount(); - - if (!step.DisableNavmesh) - { - if (step.Mount == null) - { - Mount.EMountIf mountIf = - actualDistance > stopDistance && step.Fly == true && - gameFunctions.IsFlyingUnlocked(step.TerritoryId) - ? Mount.EMountIf.Always - : Mount.EMountIf.AwayFromPosition; - yield return mountFactory.Mount(step.TerritoryId, mountIf, destination); - } - - if (actualDistance > stopDistance) - { - yield return Move(step, destination); - } - else - logger.LogInformation("Skipping move task, distance: {ActualDistance} < {StopDistance}", - actualDistance, stopDistance); + yield return Move(step, destination); } else { - // navmesh won't move close enough - if (actualDistance > stopDistance) - { - yield return Move(step, destination); - } - else - logger.LogInformation("Skipping move task, distance: {ActualDistance} < {StopDistance}", - actualDistance, stopDistance); + yield return Move(step, destination); } - if (step.Fly == true && step.Land == true) + if (step is { Fly: true, Land: true }) yield return Land(); } } @@ -171,6 +115,8 @@ internal static class MoveTo { private readonly string _cannotExecuteAtThisTime; private readonly MovementController _movementController; + private readonly Mount.Factory _mountFactory; + private readonly GameFunctions _gameFunctions; private readonly ILogger _logger; private readonly IClientState _clientState; @@ -178,15 +124,19 @@ internal static class MoveTo private readonly Vector3 _destination; private readonly MoveParams _moveParams; private bool _canRestart; + private ITask? _mountTask; public MoveInternal(MoveParams moveParams, MovementController movementController, + Mount.Factory mountFactory, GameFunctions gameFunctions, ILogger logger, IClientState clientState, IDataManager dataManager) { _movementController = movementController; + _mountFactory = mountFactory; + _gameFunctions = gameFunctions; _logger = logger; _clientState = clientState; _cannotExecuteAtThisTime = dataManager.GetString(579, x => x.Text)!; @@ -225,13 +175,65 @@ internal static class MoveTo public bool Start() { - _logger.LogInformation("Moving to {Destination}", _destination.ToString("G", CultureInfo.InvariantCulture)); - _startAction(); + float stopDistance = _moveParams.StopDistance ?? QuestStep.DefaultStopDistance; + Vector3? position = _clientState.LocalPlayer?.Position; + float actualDistance = position == null ? float.MaxValue : Vector3.Distance(position.Value, _destination); + + if (_moveParams.Mount == true) + { + var mountTask = _mountFactory.Mount(_moveParams.TerritoryId, Mount.EMountIf.Always); + if (mountTask.Start()) + { + _mountTask = mountTask; + return true; + } + } + else if (_moveParams.Mount == false) + { + var mountTask = _mountFactory.Unmount(); + if (mountTask.Start()) + { + _mountTask = mountTask; + return true; + } + } + + if (!_moveParams.DisableNavMesh) + { + if (_moveParams.Mount == null) + { + Mount.EMountIf mountIf = + actualDistance > stopDistance && _moveParams.Fly && + _gameFunctions.IsFlyingUnlocked(_moveParams.TerritoryId) + ? Mount.EMountIf.Always + : Mount.EMountIf.AwayFromPosition; + var mountTask = _mountFactory.Mount(_moveParams.TerritoryId, mountIf, _destination); + if (mountTask.Start()) + { + _mountTask = mountTask; + return true; + } + } + } + + _mountTask = new NoOpTask(); return true; } public ETaskResult Update() { + if (_mountTask != null) + { + if (_mountTask.Update() == ETaskResult.TaskComplete) + { + _mountTask = null; + + _logger.LogInformation("Moving to {Destination}", _destination.ToString("G", CultureInfo.InvariantCulture)); + _startAction(); + } + return ETaskResult.StillRunning; + } + if (_movementController.IsPathfinding || _movementController.IsPathRunning) return ETaskResult.StillRunning; @@ -269,9 +271,17 @@ internal static class MoveTo } } + private sealed class NoOpTask : ITask + { + public bool Start() => true; + + public ETaskResult Update() => ETaskResult.TaskComplete; + } + internal sealed record MoveParams( ushort TerritoryId, Vector3 Destination, + bool? Mount = null, float? StopDistance = null, uint? DataId = null, bool DisableNavMesh = false, @@ -284,6 +294,7 @@ internal static class MoveTo public MoveParams(QuestStep step, Vector3 destination) : this(step.TerritoryId, destination, + step.Mount, step.CalculateActualStopDistance(), step.DataId, step.DisableNavmesh, diff --git a/Questionable/QuestionablePlugin.cs b/Questionable/QuestionablePlugin.cs index b5be5760c..b58783535 100644 --- a/Questionable/QuestionablePlugin.cs +++ b/Questionable/QuestionablePlugin.cs @@ -137,7 +137,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin // task factories serviceCollection.AddTaskFactory(); serviceCollection.AddTaskFactory(); - serviceCollection.AddTaskFactory(); + serviceCollection.AddTaskFactory(); serviceCollection.AddTaskFactory(); serviceCollection.AddTaskFactory(); serviceCollection.AddTaskFactory();