From cc8f326d7ea10afefcb0d5a8e7ae5dae99ba9ea1 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Mon, 4 Nov 2024 17:19:49 +0100 Subject: [PATCH] Handle how required classes are configured for individual quest steps + gathering --- LLib | 2 +- .../RoslynElements/GatheredItemExtensions.cs | 4 - .../RoslynElements/QuestStepExtensions.cs | 6 ++ .../3852_Prudence at This Junction.json | 81 ++++++++++++++++++- .../Qitari/Dailies/3806_A Tool's Errand.json | 16 +++- .../3807_Where the Sun Don't Shine.json | 16 +++- .../Qitari/Dailies/3808_A Touch of Home.json | 16 +++- .../Qitari/Dailies/3809_Mother's Recipe.json | 16 +++- .../Dailies/3811_Rational Thinking.json | 16 +++- .../Qitari/Dailies/3812_Making Scents.json | 16 +++- .../Dailies/3814_Prayers and Poison.json | 16 +++- .../Qitari/Dailies/3815_Salve Our Souls.json | 16 +++- .../Qitari/Dailies/3816_Rings of Pattern.json | 16 +++- .../Qitari/Dailies/3817_You Dirty Rats.json | 16 +++- .../Dailies/3818_If It's Broke, Fix It.json | 16 +++- .../3820_The Qitari Book of Records.json | 16 +++- .../Qitari/Dailies/3821_Meat and Greet.json | 16 +++- .../Dailies/3822_I Have Never Exploded.json | 16 +++- .../Qitari/Dailies/3824_Rock 'n Ronka.json | 16 +++- ...5_There's No Clean Like Qhoterl Clean.json | 16 +++- .../Dailies/3827_Her Splendid Materials.json | 16 +++- .../Qitari/Dailies/3828_Splendid Eats.json | 17 +++- .../Dailies/3830_Safety Is No Accident.json | 16 +++- ...Fish, Two Fish, Bread Fish, Stew Fish.json | 16 +++- .../Story/3795_Wisdom of the Night.json | 16 +++- .../Qitari/Story/3796_Delving Deeper.json | 16 +++- .../Qitari/Story/3797_A Chilling Fate.json | 16 +++- .../Story/3798_What Ails the Forest.json | 16 +++- .../Dailies/4607_Signs of the Past.json | 16 +++- .../Dailies/4609_Well Below Standard.json | 16 +++- .../Dailies/4611_Grounds for Improvement.json | 16 +++- .../Dailies/4612_A Fertile Blend.json | 16 +++- .../Dailies/4614_The Robot and the Sea.json | 16 +++- .../Dailies/4615_Using Their Heads.json | 19 +++-- .../Dailies/4617_I'll Fish It Myself.json | 16 +++- .../Omicrons/Dailies/4618_Sold Out.json | 16 +++- .../Dailies/4620_A Taste of the Sea.json | 16 +++- .../Omicrons/Dailies/4622_Ea Epicurious.json | 16 +++- .../Omicrons/Dailies/4623_I, Omicron.json | 16 +++- ...25_Corporeal Hand to Proverbial Mouth.json | 16 +++- .../Dailies/4626_Mush for Miw Miisv.json | 16 +++- .../Dailies/4627_Corporeal Comforts.json | 16 +++- .../Dailies/4629_A Light in the Dark.json | 16 +++- .../4630_Reclaiming the Taste of Home.json | 16 +++- .../Omicrons/Dailies/4631_Not Forgotten.json | 16 +++- .../Dailies/4632_Checking for Cavities.json | 17 +++- .../Omicrons/Dailies/4634_The Lost World.json | 16 +++- ...1_The Café at the End of the Universe.json | 16 +++- .../4602_Longing So for All the Fish.json | 16 +++- .../Story/4603_And Another Question.json | 19 +++-- ...estaurateur's Guide to the Dragonstar.json | 16 +++- .../Omicrons/Story/4605_Mostly Heartless.json | 16 +++- QuestPaths/quest-v1.json | 21 +++-- .../Questing/Converter/ClassJobConverter.cs | 26 ------ .../Converter/ExtendedClassJobConverter.cs | 57 +++++++++++++ .../Questing/EExtendedClassJob.cs | 55 +++++++++++++ Questionable.Model/Questing/GatheredItem.cs | 6 -- Questionable.Model/Questing/QuestStep.cs | 2 + Questionable.Model/common-schema.json | 51 ++++++++++++ .../Controller/ContextMenuController.cs | 5 +- .../Controller/Steps/Shared/Gather.cs | 27 +------ .../Controller/Steps/Shared/SkipCondition.cs | 41 +++++++++- Questionable/Data/ClassJobUtils.cs | 66 +++++++++++++++ 63 files changed, 1000 insertions(+), 226 deletions(-) delete mode 100644 Questionable.Model/Questing/Converter/ClassJobConverter.cs create mode 100644 Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs create mode 100644 Questionable.Model/Questing/EExtendedClassJob.cs create mode 100644 Questionable/Data/ClassJobUtils.cs diff --git a/LLib b/LLib index 912a7b04..fde09c70 160000 --- a/LLib +++ b/LLib @@ -1 +1 @@ -Subproject commit 912a7b04ce180e337af9beeef2d1393b040c1ba8 +Subproject commit fde09c705b648f03c287814191a554f0a4b92cc4 diff --git a/QuestPathGenerator/RoslynElements/GatheredItemExtensions.cs b/QuestPathGenerator/RoslynElements/GatheredItemExtensions.cs index 179c7a66..cad92fac 100644 --- a/QuestPathGenerator/RoslynElements/GatheredItemExtensions.cs +++ b/QuestPathGenerator/RoslynElements/GatheredItemExtensions.cs @@ -29,10 +29,6 @@ internal static class GatheredItemExtensions .AsSyntaxNodeOrToken(), Assignment(nameof(GatheredItem.Collectability), gatheredItem.Collectability, emptyItem.Collectability) - .AsSyntaxNodeOrToken(), - Assignment(nameof(GatheredItem.QuestAcceptedAsClass), - gatheredItem.QuestAcceptedAsClass, - emptyItem.QuestAcceptedAsClass) .AsSyntaxNodeOrToken())))); } } diff --git a/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs b/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs index d65ca794..ecfea639 100644 --- a/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs +++ b/QuestPathGenerator/RoslynElements/QuestStepExtensions.cs @@ -120,6 +120,12 @@ internal static class QuestStepExtensions AssignmentList(nameof(QuestStep.RequiredQuestVariables), step.RequiredQuestVariables) .AsSyntaxNodeOrToken(), + AssignmentList(nameof(QuestStep.RequiredCurrentJob), + step.RequiredCurrentJob) + .AsSyntaxNodeOrToken(), + AssignmentList(nameof(QuestStep.RequiredQuestAcceptedJob), + step.RequiredQuestAcceptedJob) + .AsSyntaxNodeOrToken(), AssignmentList(nameof(QuestStep.ItemsToGather), step.ItemsToGather), AssignmentList(nameof(QuestStep.CompletionQuestVariablesFlags), diff --git a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/3852_Prudence at This Junction.json b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/3852_Prudence at This Junction.json index 50722a12..e2e944e9 100644 --- a/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/3852_Prudence at This Junction.json +++ b/QuestPaths/2.x - A Realm Reborn/MSQ-1/Ul'dah/3852_Prudence at This Junction.json @@ -40,10 +40,88 @@ { "Sequence": 255, "Steps": [ + { + "Position": { + "X": -12.223117, + "Y": -2.0482793, + "Z": -145.75566 + }, + "TerritoryId": 141, + "InteractionType": "WalkTo" + }, { "TerritoryId": 141, "InteractionType": "EquipRecommended" }, + { + "DataId": 1001564, + "Position": { + "X": -9.689575, + "Y": -2.0480804, + "Z": -145.09808 + }, + "TerritoryId": 141, + "InteractionType": "PurchaseItem", + "PurchaseMenu": { + "ExcelSheet": "GilShop", + "Key": 262186 + }, + "ItemId": 2654, + "ItemCount": 1, + "RequiredCurrentJob": [ + "DoW" + ], + "SkipConditions": { + "StepIf": { + "Item": { + "NotInInventory": false + } + } + } + }, + { + "DataId": 1001564, + "Position": { + "X": -9.689575, + "Y": -2.0480804, + "Z": -145.09808 + }, + "TerritoryId": 141, + "InteractionType": "PurchaseItem", + "PurchaseMenu": { + "ExcelSheet": "GilShop", + "Key": 262186 + }, + "ItemId": 2655, + "ItemCount": 1, + "RequiredCurrentJob": [ + "DoM" + ] + }, + { + "TerritoryId": 141, + "InteractionType": "EquipItem", + "ItemId": 2654, + "SkipConditions": { + "StepIf": { + "Item": { + "NotInInventory": true + } + } + } + }, + { + "TerritoryId": 141, + "InteractionType": "EquipItem", + "ItemId": 2655, + "SkipConditions": { + "StepIf": { + "Item": { + "NotInInventory": true + } + } + } + }, { "DataId": 1001447, "Position": { @@ -52,8 +130,7 @@ "Z": -148.51611 }, "TerritoryId": 141, - "InteractionType": "CompleteQuest", - "Comment": "All starting gear (except the hat) is ilvl 5 already" + "InteractionType": "CompleteQuest" } ] } 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 3a11c275..95347389 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29517, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29543, "ItemCount": 3 } 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 194836db..88b96f98 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29518, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29544, "ItemCount": 3 } 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 5fa818a8..8c2898f5 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29519, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29545, "ItemCount": 3 } 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 e0e1def3..001da099 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29520, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29546, "ItemCount": 3 } 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 1e420bdf..1d5c1c12 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29521, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29547, "ItemCount": 3 } 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 6b0ac904..277bd959 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29522, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29548, "ItemCount": 3 } 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 6fa2638b..3805b7a9 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29523, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29549, "ItemCount": 3 } 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 1a63219d..43379d50 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29524, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29550, "ItemCount": 3 } 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 bac8bfae..dfe3de3b 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29525, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29551, "ItemCount": 3 } 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 f0198739..8d18783e 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29526, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29552, "ItemCount": 3 } 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 8d0ac16d..6e2d4ab0 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29527, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29553, "ItemCount": 3 } 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 204ea239..f3b347cb 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29528, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29554, "ItemCount": 3 } 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 ffa6ff83..afc170ee 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29529, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29555, "ItemCount": 3 } 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 dec082cd..b78b3195 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29530, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29556, "ItemCount": 3 } 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 7746ab7a..89faa318 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29531, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29557, "ItemCount": 3 } 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 b5e71d0b..02b0e4ea 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29532, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29558, "ItemCount": 3 } 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 6b71e791..d694fed1 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29533, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29559, "ItemCount": 3 } 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 9442335f..5e2e49e4 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 @@ -23,14 +23,25 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29534, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ + { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29560, "ItemCount": 3 } 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 8f3976ed..8e05db5e 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29535, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29561, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3831_One Fish, Two Fish, Bread Fish, Stew Fish.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Dailies/3831_One Fish, Two Fish, Bread Fish, Stew Fish.json index f2761f62..255ac549 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 @@ -23,14 +23,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29536, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29562, "ItemCount": 3 } 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 84db90fd..5cd42198 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 @@ -40,14 +40,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29513, "ItemCount": 1 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29539, "ItemCount": 1 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3796_Delving Deeper.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3796_Delving Deeper.json index be8eb6d4..7e573e1f 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3796_Delving Deeper.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3796_Delving Deeper.json @@ -55,14 +55,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29514, "ItemCount": 1 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29540, "ItemCount": 1 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3797_A Chilling Fate.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3797_A Chilling Fate.json index 4118fec3..1b253615 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3797_A Chilling Fate.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3797_A Chilling Fate.json @@ -38,14 +38,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29515, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29541, "ItemCount": 3 } diff --git a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3798_What Ails the Forest.json b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3798_What Ails the Forest.json index e7e98bf5..f5f60b1b 100644 --- a/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3798_What Ails the Forest.json +++ b/QuestPaths/5.x - Shadowbringers/Allied Societies/Qitari/Story/3798_What Ails the Forest.json @@ -85,14 +85,24 @@ { "TerritoryId": 817, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 29516, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 817, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 29542, "ItemCount": 3 } 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 e70487a8..8a8c5c65 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 @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38281, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38305, "ItemCount": 3 } 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 c50c4a58..e66130f8 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 @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38282, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38306, "ItemCount": 3 } 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 9cdb099a..a6c457b9 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 @@ -34,14 +34,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38284, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38308, "ItemCount": 3 } 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 0635180f..a98f9a30 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 @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38283, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38307, "ItemCount": 3 } 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 71875e68..24595739 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 @@ -34,14 +34,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38285, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38309, "ItemCount": 3 } 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 dece67eb..7da759d5 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 @@ -23,19 +23,28 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38286, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38310, "ItemCount": 3 } - ], - "Fly": true + ] }, { "DataId": 2013072, 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 513129c6..03704516 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 @@ -35,14 +35,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38287, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38311, "ItemCount": 3 } diff --git a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4618_Sold Out.json b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4618_Sold Out.json index 4b83ed9d..901356f3 100644 --- a/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4618_Sold Out.json +++ b/QuestPaths/6.x - Endwalker/Allied Societies/Omicrons/Dailies/4618_Sold Out.json @@ -35,14 +35,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38288, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38312, "ItemCount": 3 } 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 94328961..75083d05 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 @@ -49,14 +49,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38289, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38313, "ItemCount": 3 } 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 9662a58c..6bcca2ff 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 @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38290, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38314, "ItemCount": 3 } 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 6d818a49..b3526732 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 @@ -35,14 +35,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38291, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38315, "ItemCount": 3 } 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 b1fc3e92..547e110f 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 @@ -34,14 +34,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38292, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38316, "ItemCount": 3 } 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 1faf2416..9e32671b 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 @@ -34,14 +34,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38293, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38317, "ItemCount": 3 } 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 f8be57ec..9be8d45f 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 @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38294, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38318, "ItemCount": 3 } 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 9ba18a23..a2599e52 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 @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38295, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38319, "ItemCount": 3 } 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 6e075fa8..a519f509 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 @@ -49,14 +49,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38296, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38320, "ItemCount": 3 } 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 f3eca745..c6fcbdde 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 @@ -23,14 +23,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38297, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38321, "ItemCount": 3 } 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 bf720251..2f609cbf 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 @@ -24,14 +24,25 @@ "TerritoryId": 960, "InteractionType": "Gather", "AetheryteShortcut": "Ultima Thule - Reah Tahra", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38299, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "AetheryteShortcut": "Ultima Thule - Reah Tahra", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38323, "ItemCount": 3 } 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 89f6b44c..f7439140 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 @@ -34,14 +34,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38298, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38322, "ItemCount": 3 } 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 d1eb587c..ede9e73d 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 @@ -116,14 +116,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38276, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "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 ffafc60f..281566ab 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 @@ -172,14 +172,24 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38277, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38301, "ItemCount": 3 } 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 9170a9ed..9b21672e 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 @@ -140,19 +140,28 @@ { "TerritoryId": 960, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38278, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 960, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38302, "ItemCount": 3 } - ], - "Fly": true + ] }, { "DataId": 2013072, 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 0cdbce56..a6d019d9 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 @@ -92,14 +92,24 @@ { "TerritoryId": 398, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38279, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 398, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38303, "ItemCount": 3 } 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 32571b61..b499112b 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 @@ -157,14 +157,24 @@ { "TerritoryId": 1073, "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Miner" + ], "ItemsToGather": [ { - "QuestAcceptedAsClass": "Miner", "ItemId": 38280, "ItemCount": 3 - }, + } + ] + }, + { + "TerritoryId": 1073, + "InteractionType": "Gather", + "RequiredQuestAcceptedJob": [ + "Botanist" + ], + "ItemsToGather": [ { - "QuestAcceptedAsClass": "Botanist", "ItemId": 38304, "ItemCount": 3 } diff --git a/QuestPaths/quest-v1.json b/QuestPaths/quest-v1.json index a1d9aa33..5ef7ce77 100644 --- a/QuestPaths/quest-v1.json +++ b/QuestPaths/quest-v1.json @@ -422,6 +422,20 @@ } } }, + "RequiredCurrentJob": { + "description": "Which class or job you are using whenever this step gets executed", + "type": "array", + "items": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/ClassJob" + } + }, + "RequiredQuestAcceptedJob": { + "description": "Which class or job you were using when accepting this quest (e.g. for beast tribes)", + "type": "array", + "items": { + "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/ClassJob" + } + }, "DelaySecondsAtStart": { "description": "Time to wait before starting", "type": [ @@ -1313,13 +1327,6 @@ "type": "number", "minimum": 0, "maximum": 1000 - }, - "QuestAcceptedAsClass": { - "type": "string", - "enum": [ - "Miner", - "Botanist" - ] } }, "required": [ diff --git a/Questionable.Model/Questing/Converter/ClassJobConverter.cs b/Questionable.Model/Questing/Converter/ClassJobConverter.cs deleted file mode 100644 index 4beb8e93..00000000 --- a/Questionable.Model/Questing/Converter/ClassJobConverter.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace Questionable.Model.Questing.Converter; - -internal sealed class ClassJobConverter : JsonConverter -{ - public override uint Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - if (reader.TokenType != JsonTokenType.String) - throw new JsonException(); - - return reader.GetString() switch - { - "Miner" => 16, - "Botanist" => 17, - _ => throw new JsonException("Unsupported value for classjob"), - }; - } - - public override void Write(Utf8JsonWriter writer, uint value, JsonSerializerOptions options) - { - throw new NotImplementedException(); - } -} diff --git a/Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs b/Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs new file mode 100644 index 00000000..c92ca0bc --- /dev/null +++ b/Questionable.Model/Questing/Converter/ExtendedClassJobConverter.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using Questionable.Model.Common.Converter; + +namespace Questionable.Model.Questing.Converter; + +internal sealed class ExtendedClassJobConverter() : EnumConverter(Values) +{ + private static readonly Dictionary Values = new() + { + { EExtendedClassJob.Gladiator, "Gladiator" }, + { EExtendedClassJob.Pugilist, "Pugilist" }, + { EExtendedClassJob.Marauder, "Marauder" }, + { EExtendedClassJob.Lancer, "Lancer" }, + { EExtendedClassJob.Archer, "Archer" }, + { EExtendedClassJob.Conjurer, "Conjurer" }, + { EExtendedClassJob.Thaumaturge, "Thaumaturge" }, + { EExtendedClassJob.Carpenter, "Carpenter" }, + { EExtendedClassJob.Blacksmith, "Blacksmith" }, + { EExtendedClassJob.Armorer, "Armorer" }, + { EExtendedClassJob.Goldsmith, "Goldsmith" }, + { EExtendedClassJob.Leatherworker, "Leatherworker" }, + { EExtendedClassJob.Weaver, "Weaver" }, + { EExtendedClassJob.Alchemist, "Alchemist" }, + { EExtendedClassJob.Culinarian, "Culinarian" }, + { EExtendedClassJob.Miner, "Miner" }, + { EExtendedClassJob.Botanist, "Botanist" }, + { EExtendedClassJob.Fisher, "Fisher" }, + { EExtendedClassJob.Paladin, "Paladin" }, + { EExtendedClassJob.Monk, "Monk" }, + { EExtendedClassJob.Warrior, "Warrior" }, + { EExtendedClassJob.Dragoon, "Dragoon" }, + { EExtendedClassJob.Bard, "Bard" }, + { EExtendedClassJob.WhiteMage, "White Mage" }, + { EExtendedClassJob.BlackMage, "Black Mage" }, + { EExtendedClassJob.Arcanist, "Arcanist" }, + { EExtendedClassJob.Summoner, "Summoner" }, + { EExtendedClassJob.Scholar, "Scholar" }, + { EExtendedClassJob.Rogue, "Rogue" }, + { EExtendedClassJob.Ninja, "Ninja" }, + { EExtendedClassJob.Machinist, "Machinist" }, + { EExtendedClassJob.DarkKnight, "Dark Knight" }, + { EExtendedClassJob.Astrologian, "Astrologian" }, + { EExtendedClassJob.Samurai, "Samurai" }, + { EExtendedClassJob.RedMage, "Red Mage" }, + { EExtendedClassJob.BlueMage, "Blue Mage" }, + { EExtendedClassJob.Gunbreaker, "Gunbreaker" }, + { EExtendedClassJob.Dancer, "Dancer" }, + { EExtendedClassJob.Reaper, "Reaper" }, + { EExtendedClassJob.Sage, "Sage" }, + { EExtendedClassJob.Viper, "Viper" }, + { EExtendedClassJob.Pictomancer, "Pictomancer" }, + { EExtendedClassJob.DoW, "DoW" }, + { EExtendedClassJob.DoM, "DoM" }, + { EExtendedClassJob.DoH, "DoH" }, + { EExtendedClassJob.DoL, "DoL" }, + }; +} diff --git a/Questionable.Model/Questing/EExtendedClassJob.cs b/Questionable.Model/Questing/EExtendedClassJob.cs new file mode 100644 index 00000000..79c771d1 --- /dev/null +++ b/Questionable.Model/Questing/EExtendedClassJob.cs @@ -0,0 +1,55 @@ +using System.Text.Json.Serialization; +using Questionable.Model.Questing.Converter; + +namespace Questionable.Model.Questing; + +[JsonConverter(typeof(ExtendedClassJobConverter))] +public enum EExtendedClassJob +{ + Gladiator, + Pugilist, + Marauder, + Lancer, + Archer, + Conjurer, + Thaumaturge, + Carpenter, + Blacksmith, + Armorer, + Goldsmith, + Leatherworker, + Weaver, + Alchemist, + Culinarian, + Miner, + Botanist, + Fisher, + Paladin, + Monk, + Warrior, + Dragoon, + Bard, + WhiteMage, + BlackMage, + Arcanist, + Summoner, + Scholar, + Rogue, + Ninja, + Machinist, + DarkKnight, + Astrologian, + Samurai, + RedMage, + BlueMage, + Gunbreaker, + Dancer, + Reaper, + Sage, + Viper, + Pictomancer, + DoW, + DoM, + DoH, + DoL, +} diff --git a/Questionable.Model/Questing/GatheredItem.cs b/Questionable.Model/Questing/GatheredItem.cs index 8d2239ff..81247180 100644 --- a/Questionable.Model/Questing/GatheredItem.cs +++ b/Questionable.Model/Questing/GatheredItem.cs @@ -9,10 +9,4 @@ public sealed class GatheredItem public uint AlternativeItemId { get; set; } public int ItemCount { get; set; } public ushort Collectability { get; set; } - - /// - /// Either miner or botanist; null if it is irrelevant (prefers current class/job, then any unlocked ones). - /// - [JsonConverter(typeof(ClassJobConverter))] - public uint? QuestAcceptedAsClass { get; set; } } diff --git a/Questionable.Model/Questing/QuestStep.cs b/Questionable.Model/Questing/QuestStep.cs index 5a699818..df2b7b12 100644 --- a/Questionable.Model/Questing/QuestStep.cs +++ b/Questionable.Model/Questing/QuestStep.cs @@ -76,6 +76,8 @@ public sealed class QuestStep public SkipConditions? SkipConditions { get; set; } public List?> RequiredQuestVariables { get; set; } = new(); + public List RequiredCurrentJob { get; set; } = []; + public List RequiredQuestAcceptedJob { get; set; } = []; public List ItemsToGather { get; set; } = []; public List CompletionQuestVariablesFlags { get; set; } = []; public List DialogueChoices { get; set; } = []; diff --git a/Questionable.Model/common-schema.json b/Questionable.Model/common-schema.json index d3c974ec..97d1474e 100644 --- a/Questionable.Model/common-schema.json +++ b/Questionable.Model/common-schema.json @@ -282,6 +282,57 @@ "[Solution Nine] Scanning Port Nine (Heritage Found)" ] }, + "ClassJob": { + "type": "string", + "enum": [ + "Gladiator", + "Pugilist", + "Marauder", + "Lancer", + "Archer", + "Conjurer", + "Thaumaturge", + "Carpenter", + "Blacksmith", + "Armorer", + "Goldsmith", + "Leatherworker", + "Weaver", + "Alchemist", + "Culinarian", + "Miner", + "Botanist", + "Fisher", + "Paladin", + "Monk", + "Warrior", + "Dragoon", + "Bard", + "White Mage", + "Black Mage", + "Arcanist", + "Summoner", + "Scholar", + "Rogue", + "Ninja", + "Machinist", + "Dark Knight", + "Astrologian", + "Samurai", + "Red Mage", + "Blue Mage", + "Gunbreaker", + "Dancer", + "Reaper", + "Sage", + "Viper", + "Pictomancer", + "DoW", + "DoM", + "DoH", + "DoL" + ] + }, "CompletionFlags": { "type": "array", "description": "Quest Variables that dictate whether or not this step is skipped: null is don't check, positive values need to be set, negative values need to be unset", diff --git a/Questionable/Controller/ContextMenuController.cs b/Questionable/Controller/ContextMenuController.cs index 819d8b25..f35e8343 100644 --- a/Questionable/Controller/ContextMenuController.cs +++ b/Questionable/Controller/ContextMenuController.cs @@ -123,12 +123,12 @@ internal sealed class ContextMenuController : IDisposable Prefix = SeIconChar.Hyadelyn, PrefixColor = 52, Name = name, - OnClicked = _ => StartGathering(npcId, itemId, quantityToGather, collectability, classJob), + OnClicked = _ => StartGathering(npcId, itemId, quantityToGather, collectability), IsEnabled = string.IsNullOrEmpty(lockedReasonn), }); } - private void StartGathering(uint npcId, uint itemId, int quantity, ushort collectability, EClassJob classJob) + private void StartGathering(uint npcId, uint itemId, int quantity, ushort collectability) { var info = (SatisfactionSupplyInfo)_questData.GetAllByIssuerDataId(npcId) .Single(x => x is SatisfactionSupplyInfo); @@ -142,7 +142,6 @@ internal sealed class ContextMenuController : IDisposable ItemId = itemId, ItemCount = quantity, Collectability = collectability, - QuestAcceptedAsClass = (uint)classJob, } ]; _questController.SetGatheringQuest(quest); diff --git a/Questionable/Controller/Steps/Shared/Gather.cs b/Questionable/Controller/Steps/Shared/Gather.cs index ee5c50a0..5724a209 100644 --- a/Questionable/Controller/Steps/Shared/Gather.cs +++ b/Questionable/Controller/Steps/Shared/Gather.cs @@ -36,26 +36,13 @@ internal static class Gather foreach (var itemToGather in step.ItemsToGather) { EClassJob currentClassJob = (EClassJob)clientState.LocalPlayer!.ClassJob.Id; - EClassJob classJob = currentClassJob; - if (itemToGather.QuestAcceptedAsClass != null) - { - classJob = (EClassJob)itemToGather.QuestAcceptedAsClass.Value; - if (!IsClassJobQuestWasAcceptedWith(quest.Id, classJob)) - continue; - } - - if (!gatheringData.TryGetGatheringPointId(itemToGather.ItemId, classJob, + if (!gatheringData.TryGetGatheringPointId(itemToGather.ItemId, currentClassJob, out GatheringPointId? gatheringPointId)) 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}"); - if (classJob != currentClassJob) - { - yield return new SwitchClassJob.Task(classJob); - } - if (HasRequiredItems(itemToGather)) continue; @@ -89,18 +76,6 @@ internal static class Gather } } - private unsafe bool IsClassJobQuestWasAcceptedWith(ElementId questId, EClassJob expectedClassJob) - { - if (questId is not QuestId) - return true; - - QuestWork* questWork = QuestManager.Instance()->GetQuestById(questId.Value); - if (questWork->AcceptClassJob != 0) - return (EClassJob)questWork->AcceptClassJob == expectedClassJob; - - return true; - } - private unsafe bool HasRequiredItems(GatheredItem itemToGather) { InventoryManager* inventoryManager = InventoryManager.Instance(); diff --git a/Questionable/Controller/Steps/Shared/SkipCondition.cs b/Questionable/Controller/Steps/Shared/SkipCondition.cs index c1efdbde..2951d8d8 100644 --- a/Questionable/Controller/Steps/Shared/SkipCondition.cs +++ b/Questionable/Controller/Steps/Shared/SkipCondition.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Numerics; using Dalamud.Game.ClientState.Objects.Types; @@ -6,8 +7,10 @@ using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game.Object; using FFXIVClientStructs.FFXIV.Client.Game.UI; +using LLib.GameData; using Microsoft.Extensions.Logging; using Questionable.Controller.Utils; +using Questionable.Data; using Questionable.Functions; using Questionable.Model; using Questionable.Model.Common; @@ -29,7 +32,9 @@ internal static class SkipCondition !QuestWorkUtils.HasCompletionFlags(step.CompletionQuestVariablesFlags) && step.RequiredQuestVariables.Count == 0 && step.PickUpQuestId == null && - step.NextQuestId == null) + step.NextQuestId == null && + step.RequiredCurrentJob.Count == 0 && + step.RequiredQuestAcceptedJob.Count == 0) return null; return new SkipTask(step, skipConditions ?? new(), quest.Id); @@ -136,7 +141,8 @@ internal static class SkipCondition GameObject* gameObject = (GameObject*)target.Address; if (!skipConditions.NotNamePlateIconId.Contains(gameObject->NamePlateIconId)) { - logger.LogInformation("Skipping step, object has icon id {IconId}", gameObject->NamePlateIconId); + logger.LogInformation("Skipping step, object has icon id {IconId}", + gameObject->NamePlateIconId); return true; } } @@ -213,6 +219,34 @@ internal static class SkipCondition return true; } } + + if (step is { RequiredQuestAcceptedJob.Count: > 0 }) + { + List expectedJobs = step.RequiredQuestAcceptedJob + .SelectMany(ClassJobUtils.AsIndividualJobs).ToList(); + EClassJob questJob = questWork.ClassJob; + logger.LogInformation("Checking quest job {QuestJob} against {ExpectedJobs}", questJob, + string.Join(",", expectedJobs)); + if (questJob != EClassJob.Adventurer && !expectedJobs.Contains(questJob)) + { + logger.LogInformation("Skipping step, as quest was accepted on a different job"); + return true; + } + } + } + + if (step is { RequiredCurrentJob.Count: > 0 }) + { + List expectedJobs = + step.RequiredCurrentJob.SelectMany(ClassJobUtils.AsIndividualJobs).ToList(); + EClassJob currentJob = (EClassJob)clientState.LocalPlayer!.ClassJob.Id; + logger.LogInformation("Checking current job {CurrentJob} against {ExpectedJobs}", currentJob, + string.Join(",", expectedJobs)); + if (!expectedJobs.Contains(currentJob)) + { + logger.LogInformation("Skipping step, as step requires a different job"); + return true; + } } if (skipConditions.NearPosition is { } nearPosition && @@ -231,7 +265,8 @@ internal static class SkipCondition var position = clientState.LocalPlayer?.Position; if (position != null && clientState.TerritoryType != 0 && - MatchesExtraCondition(skipConditions.ExtraCondition.Value, position.Value, clientState.TerritoryType)) + MatchesExtraCondition(skipConditions.ExtraCondition.Value, position.Value, + clientState.TerritoryType)) { logger.LogInformation("Skipping step, extra condition {} matches", skipConditions.ExtraCondition); return true; diff --git a/Questionable/Data/ClassJobUtils.cs b/Questionable/Data/ClassJobUtils.cs new file mode 100644 index 00000000..8346d9ec --- /dev/null +++ b/Questionable/Data/ClassJobUtils.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using LLib.GameData; +using Questionable.Model.Questing; + +namespace Questionable.Data; + +public static class ClassJobUtils +{ + public static IEnumerable AsIndividualJobs(EExtendedClassJob classJob) + { + return classJob switch + { + EExtendedClassJob.Gladiator => [EClassJob.Gladiator], + EExtendedClassJob.Pugilist => [EClassJob.Pugilist], + EExtendedClassJob.Marauder => [EClassJob.Marauder], + EExtendedClassJob.Lancer => [EClassJob.Lancer], + EExtendedClassJob.Archer => [EClassJob.Archer], + EExtendedClassJob.Conjurer => [EClassJob.Conjurer], + EExtendedClassJob.Thaumaturge => [EClassJob.Thaumaturge], + EExtendedClassJob.Carpenter => [EClassJob.Carpenter], + EExtendedClassJob.Blacksmith => [EClassJob.Blacksmith], + EExtendedClassJob.Armorer => [EClassJob.Armorer], + EExtendedClassJob.Goldsmith => [EClassJob.Goldsmith], + EExtendedClassJob.Leatherworker => [EClassJob.Leatherworker], + EExtendedClassJob.Weaver => [EClassJob.Weaver], + EExtendedClassJob.Alchemist => [EClassJob.Alchemist], + EExtendedClassJob.Culinarian => [EClassJob.Culinarian], + EExtendedClassJob.Miner => [EClassJob.Miner], + EExtendedClassJob.Botanist => [EClassJob.Botanist], + EExtendedClassJob.Fisher => [EClassJob.Fisher], + EExtendedClassJob.Paladin => [EClassJob.Paladin], + EExtendedClassJob.Monk => [EClassJob.Monk], + EExtendedClassJob.Warrior => [EClassJob.Warrior], + EExtendedClassJob.Dragoon => [EClassJob.Dragoon], + EExtendedClassJob.Bard => [EClassJob.Bard], + EExtendedClassJob.WhiteMage => [EClassJob.WhiteMage], + EExtendedClassJob.BlackMage => [EClassJob.BlackMage], + EExtendedClassJob.Arcanist => [EClassJob.Arcanist], + EExtendedClassJob.Summoner => [EClassJob.Summoner], + EExtendedClassJob.Scholar => [EClassJob.Scholar], + EExtendedClassJob.Rogue => [EClassJob.Rogue], + EExtendedClassJob.Ninja => [EClassJob.Ninja], + EExtendedClassJob.Machinist => [EClassJob.Machinist], + EExtendedClassJob.DarkKnight => [EClassJob.DarkKnight], + EExtendedClassJob.Astrologian => [EClassJob.Astrologian], + EExtendedClassJob.Samurai => [EClassJob.Samurai], + EExtendedClassJob.RedMage => [EClassJob.RedMage], + EExtendedClassJob.BlueMage => [EClassJob.BlueMage], + EExtendedClassJob.Gunbreaker => [EClassJob.Gunbreaker], + EExtendedClassJob.Dancer => [EClassJob.Dancer], + EExtendedClassJob.Reaper => [EClassJob.Reaper], + EExtendedClassJob.Sage => [EClassJob.Sage], + EExtendedClassJob.Viper => [EClassJob.Viper], + EExtendedClassJob.Pictomancer => [EClassJob.Pictomancer], + + EExtendedClassJob.DoW => Enum.GetValues().Where(x => x.DealsPhysicalDamage()), + EExtendedClassJob.DoM => Enum.GetValues().Where(x => x.DealsMagicDamage()), + EExtendedClassJob.DoH => Enum.GetValues().Where(x => x.IsCrafter()), + EExtendedClassJob.DoL => Enum.GetValues().Where(x => x.IsGatherer()), + + _ => throw new ArgumentOutOfRangeException(nameof(classJob), classJob, null) + }; + } +}