Pick up DT aether current quests (first four zones) during the MSQ
authorLiza Carvelli <liza@carvel.li>
Sun, 25 Aug 2024 17:23:15 +0000 (19:23 +0200)
committerLiza Carvelli <liza@carvel.li>
Sun, 25 Aug 2024 17:23:15 +0000 (19:23 +0200)
24 files changed:
QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs
QuestPaths/7.x - Dawntrail/Aether Currents/Kozama'uka/5085_All Good Potpacts Must Come to an End.json
QuestPaths/7.x - Dawntrail/Aether Currents/Shaaloani/5138_Rroneek Seeker.json
QuestPaths/7.x - Dawntrail/Aether Currents/Shaaloani/5140_When the Bill Comes Due.json
QuestPaths/7.x - Dawntrail/Aether Currents/Yak T'el/5094_Secrets in the Cinderfield.json
QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4868_A Well-mannered Shipwright.json
QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4870_Knowing the Hanuhanu.json
QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4872_Traders of Happiness.json
QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4877_Knowing the Pelupelu.json
QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4878_The Success of Others.json
QuestPaths/7.x - Dawntrail/MSQ/A-Kozama'uka1-Urqopacha1/4879_For All Turali.json
QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4884_The Shape of Peace.json
QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4889_History's Keepers.json
QuestPaths/7.x - Dawntrail/MSQ/B-Kozama'uka2-Urqopacha2/4896_The Promise of Peace.json
QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4903_Into the Traverse.json
QuestPaths/7.x - Dawntrail/MSQ/C-Yak T'el/4909_Road to the Golden City.json
QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4919_And the Land Would Tremble.json
QuestPaths/7.x - Dawntrail/MSQ/D-Shaaloani-HeritageFound1/4923_In Yyasulani's Shadow.json
QuestPaths/quest-v1.json
Questionable.Model/Questing/Converter/ElementIdListConverter.cs [new file with mode: 0644]
Questionable.Model/Questing/SkipAetheryteCondition.cs
Questionable.Model/Questing/SkipStepConditions.cs
Questionable/Controller/Steps/Shared/AethernetShortcut.cs
Questionable/Controller/Steps/Shared/AetheryteShortcut.cs

index 87d5e0a26cc5b61e67293c91d39956e528ed13c5..6307020f3f1c88442408fe9b04e194a0ed7c5ef1 100644 (file)
@@ -128,6 +128,10 @@ internal static class SkipConditionsExtensions
                                 skipAetheryteCondition.InSameTerritory, emptyAetheryte.InSameTerritory),
                             AssignmentList(nameof(SkipAetheryteCondition.InTerritory),
                                 skipAetheryteCondition.InTerritory),
+                            AssignmentList(nameof(SkipAetheryteCondition.QuestsAccepted),
+                                skipAetheryteCondition.QuestsAccepted),
+                            AssignmentList(nameof(skipAetheryteCondition.QuestsCompleted),
+                                skipAetheryteCondition.QuestsCompleted),
                             Assignment(nameof(SkipAetheryteCondition.AetheryteLocked),
                                     skipAetheryteCondition.AetheryteLocked, emptyAetheryte.AetheryteLocked)
                                 .AsSyntaxNodeOrToken(),
index dfb621258a30a9a342a47cd4814aee7fbe549c1f..8e4b42da9f62eed872c69646aa297b1b56630d8f 100644 (file)
             "Z": 342.85498
           },
           "TerritoryId": 1188,
-          "InteractionType": "CompleteQuest"
+          "InteractionType": "CompleteQuest",
+          "Mount": true
         }
       ]
     }
index 9db9564ad6b46c454c53dbfb01e98200b674a4bd..92d92c8f782fbb86f23ee699b4a08cfd34e7def4 100644 (file)
     {
       "Sequence": 1,
       "Steps": [
+        {
+          "Position": {
+            "X": 323.5058,
+            "Y": -16.330368,
+            "Z": -254.18399
+          },
+          "TerritoryId": 1190,
+          "InteractionType": "WalkTo"
+        },
         {
           "DataId": 1050656,
           "Position": {
index 49204d8c36033732389165422b9e61a9bd19fd37..912043e1885317712f0e8400941c29a12ba409b2 100644 (file)
@@ -28,7 +28,8 @@
             "Z": 427.2068
           },
           "TerritoryId": 1190,
-          "InteractionType": "Interact"
+          "InteractionType": "Interact",
+          "Mount": true
         }
       ]
     },
     {
       "Sequence": 3,
       "Steps": [
+        {
+          "Position": {
+            "X": 369.3906,
+            "Y": 5.9371996,
+            "Z": 417.16574
+          },
+          "TerritoryId": 1190,
+          "InteractionType": "WalkTo",
+          "$": "Shaaloani Hhusatahwi Saloon Stairs (top)"
+        },
+        {
+          "Position": {
+            "X": 359.11545,
+            "Y": 1.9823306,
+            "Z": 419.5714
+          },
+          "TerritoryId": 1190,
+          "InteractionType": "WalkTo",
+          "$": "Shaaloani Hhusatahwi Saloon Stairs (bottom)",
+          "DisableNavmesh": true
+        },
         {
           "DataId": 1051286,
           "Position": {
index 4357cd5de892ca5ea294677e0577b351b5ba5d30..a3e6ab87475fd9c068615812a83eff6951386c28 100644 (file)
     {
       "Sequence": 255,
       "Steps": [
+        {
+          "DataId": 2013948,
+          "Position": {
+            "X": 610.7728,
+            "Y": 9.597839,
+            "Z": 233.05103
+          },
+          "TerritoryId": 1189,
+          "InteractionType": "AttuneAetherCurrent",
+          "AetherCurrentId": 2818440
+        },
         {
           "DataId": 1051073,
           "Position": {
index 4a550c01fbd1689afbb350aeb9862a0a615a75ff..28bd626b14949a8bc08ff2ecff2ab7ff6ab84778 100644 (file)
       "Steps": [
         {
           "Position": {
-            "X": -510.96463,
-            "Y": -0.47684515,
-            "Z": -305.96155
+            "X": -510.37933,
+            "Y": -0.39999998,
+            "Z": -277.78192
           },
           "TerritoryId": 1188,
-          "InteractionType": "WalkTo",
-          "Comment": "Waypoint after swimming through the river"
+          "InteractionType": "WalkTo"
+        },
+        {
+          "Position": {
+            "X": -521.0261,
+            "Y": -0.40000004,
+            "Z": -329.19336
+          },
+          "TerritoryId": 1188,
+          "InteractionType": "WalkTo"
         },
         {
           "DataId": 2013936,
index 83eb0953a9273a0c0e67c94c157d0a123ffdb804..d54e499a1c3b11a39211dc308dc3a8118a259a42 100644 (file)
@@ -12,7 +12,7 @@
             "Y": 9.773315,
             "Z": -533.135
           },
-          "StopDistance": 5,
+          "StopDistance": 7,
           "TerritoryId": 1188,
           "InteractionType": "AcceptQuest"
         }
     {
       "Sequence": 255,
       "Steps": [
+        {
+          "DataId": 1048782,
+          "Position": {
+            "X": -68.52832,
+            "Y": 6.536739,
+            "Z": -486.53394
+          },
+          "TerritoryId": 1188,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5064
+        },
+        {
+          "DataId": 1051237,
+          "Position": {
+            "X": -251.20929,
+            "Y": 5.5572896,
+            "Z": -554.89435
+          },
+          "TerritoryId": 1188,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5081
+        },
         {
           "DataId": 1046537,
           "Position": {
index 7ce2e342a7243645f0afac760e3b70d113206d36..d1e8367e59eff7becc0afbd2206940a009f4b3fb 100644 (file)
     {
       "Sequence": 1,
       "Steps": [
+        {
+          "TerritoryId": 1187,
+          "InteractionType": "AttuneAetheryte",
+          "Aetheryte": "Urqopacha - Wachunpelo"
+        },
         {
           "DataId": 1046557,
           "Position": {
             128
           ]
         },
-        {
-          "TerritoryId": 1187,
-          "InteractionType": "AttuneAetheryte",
-          "Aetheryte": "Urqopacha - Wachunpelo"
-        },
         {
           "DataId": 1046559,
           "Position": {
index 7166e4a68e185d6dec8ba9c19cb3c1d6530da756..879ca7506a8440b33627ba6d8fd61a05d09d0f3d 100644 (file)
     {
       "Sequence": 255,
       "Steps": [
+        {
+          "DataId": 1050684,
+          "Position": {
+            "X": 391.37854,
+            "Y": -156.07434,
+            "Z": -388.50995
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5039,
+          "Comment": "Traveler to the Rescue"
+        },
+        {
+          "DataId": 1051195,
+          "Position": {
+            "X": 383.29138,
+            "Y": -154.50243,
+            "Z": -420.49292
+          },
+          "TerritoryId": 1187,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5051,
+          "Comment": "Crisis of Corruption"
+        },
         {
           "DataId": 1046537,
           "Position": {
index 3d40ae970bc2b64cfbf26ae63ffca43dee8bce2c..b6f50a5ce45f7509e7788f67c6ddb9497dcdc59b 100644 (file)
             "Y": -19.725424,
             "Z": 203.72314
           },
-          "StopDistance": 5,
+          "StopDistance": 7,
           "TerritoryId": 1185,
           "InteractionType": "CompleteQuest"
         }
index 7c8031809e745f0533b93f001432aaa5244a22a3..9a9839434d2e1a30f193b10b2ca106dc0b904bae 100644 (file)
@@ -15,6 +15,7 @@
             "Y": -19.725424,
             "Z": 203.72314
           },
+          "StopDistance": 7,
           "TerritoryId": 1185,
           "InteractionType": "AcceptQuest"
         }
index e5d6be1ec901ceedf0633b664fab1cf202389bba..32e96d54873e59393e64d59f37da2a3a2070f410 100644 (file)
     {
       "Sequence": 3,
       "Steps": [
+        {
+          "DataId": 1051263,
+          "Position": {
+            "X": -521.0193,
+            "Y": 121.63345,
+            "Z": 319.38647
+          },
+          "TerritoryId": 1188,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5085
+        },
+        {
+          "DataId": 1048855,
+          "Position": {
+            "X": -491.63043,
+            "Y": 121.63846,
+            "Z": 271.50366
+          },
+          "TerritoryId": 1188,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5074
+        },
         {
           "DataId": 1046876,
           "Position": {
index eb22764c801cb0668d045650d097d77b7e85e285..60df90002f606423366998838a957b49e9308bff 100644 (file)
@@ -12,6 +12,7 @@
             "Y": 119.49004,
             "Z": 190.72253
           },
+          "StopDistance": 5,
           "TerritoryId": 1188,
           "InteractionType": "AcceptQuest"
         }
@@ -29,7 +30,8 @@
           },
           "TerritoryId": 1188,
           "InteractionType": "Interact",
-          "AetheryteShortcut": "Kozama'uka - Earthenshire"
+          "AetheryteShortcut": "Kozama'uka - Earthenshire",
+          "Fly": true
         }
       ]
     },
@@ -44,7 +46,8 @@
           },
           "TerritoryId": 1188,
           "InteractionType": "WalkTo",
-          "TargetTerritoryId": 1187
+          "TargetTerritoryId": 1187,
+          "Fly": true
         },
         {
           "DataId": 1046814,
index 300238e9a433606455c3f5be49d652abacd7632a..03eed811cbb140966960b4c66dc77117bec43799 100644 (file)
     {
       "Sequence": 1,
       "Steps": [
+        {
+          "DataId": 1051207,
+          "Position": {
+            "X": 425.07043,
+            "Y": 118.935005,
+            "Z": 606.13403
+          },
+          "StopDistance": 5,
+          "TerritoryId": 1187,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5055
+        },
+        {
+          "DataId": 1048730,
+          "Position": {
+            "X": 399.0692,
+            "Y": 122.53533,
+            "Z": 542.9922
+          },
+          "StopDistance": 5,
+          "TerritoryId": 1187,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5047
+        },
         {
           "DataId": 1046926,
           "Position": {
index 52a6b9a8a6d1883b054dab5230acf115d0c0673c..f6cca46ee68101fd154ee84859426b1a638591b0 100644 (file)
     {
       "Sequence": 1,
       "Steps": [
+        {
+          "DataId": 1050872,
+          "Position": {
+            "X": -408.71295,
+            "Y": 20.420113,
+            "Z": -398.8861
+          },
+          "TerritoryId": 1189,
+          "InteractionType": "AcceptQuest",
+          "DialogueChoices": [
+            {
+              "Type": "List",
+              "ExcelSheet": "quest/051/KinGzd201_05110",
+              "Prompt": "TEXT_KINGZD201_05110_Q1_000_000",
+              "Answer": "TEXT_KINGZD201_05110_A1_000_001"
+            }
+          ],
+          "PickUpQuestId": 5110
+        },
+        {
+          "DataId": 1051073,
+          "Position": {
+            "X": 41.09253,
+            "Y": 8.205902,
+            "Z": -629.8467
+          },
+          "TerritoryId": 1189,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5094
+        },
         {
           "DataId": 1047577,
           "Position": {
     {
       "Sequence": 2,
       "Steps": [
-        {
-          "DataId": 2013948,
-          "Position": {
-            "X": 610.7728,
-            "Y": 9.597839,
-            "Z": 233.05103
-          },
-          "TerritoryId": 1189,
-          "InteractionType": "AttuneAetherCurrent",
-          "AetherCurrentId": 2818440
-        },
-        {
-          "Position": {
-            "X": 614.25964,
-            "Y": -29.554798,
-            "Z": 202.75368
-          },
-          "TerritoryId": 1189,
-          "InteractionType": "WalkTo",
-          "DisableNavmesh": true,
-          "Mount": false
-        },
         {
           "DataId": 1048230,
           "Position": {
@@ -66,8 +74,7 @@
             "Z": 214.83167
           },
           "TerritoryId": 1189,
-          "InteractionType": "Interact",
-          "DisableNavmesh": true
+          "InteractionType": "Interact"
         }
       ]
     },
index c959a428fc6dea32e195414b7cac672e04b32c8a..39387ac54edb793c3e78f6f957e60ffa4fe914cc 100644 (file)
     {
       "Sequence": 1,
       "Steps": [
+        {
+          "DataId": 1051052,
+          "Position": {
+            "X": 585.90063,
+            "Y": -142.49187,
+            "Z": 510.21594
+          },
+          "TerritoryId": 1189,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5103
+        },
+        {
+          "DataId": 1050884,
+          "Position": {
+            "X": 531.0597,
+            "Y": -142.49185,
+            "Z": 492.0271
+          },
+          "TerritoryId": 1189,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5114
+        },
         {
           "DataId": 1047701,
           "Position": {
index 16c8605fd918d25f40392c000f1f81e26939fbfa..30d005a1856fb100c8131989fe83ec5efaf7594a 100644 (file)
     {
       "Sequence": 3,
       "Steps": [
+        {
+          "DataId": 1050655,
+          "Position": {
+            "X": 289.02112,
+            "Y": -15.566031,
+            "Z": -478.78235
+          },
+          "TerritoryId": 1190,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5138
+        },
+        {
+          "Position": {
+            "X": 386.84927,
+            "Y": -0.84392637,
+            "Z": 435.0579
+          },
+          "TerritoryId": 1190,
+          "InteractionType": "WalkTo",
+          "AetheryteShortcut": "Shaaloani - Hhusatahwi",
+          "SkipConditions": {
+            "StepIf": {
+              "QuestsCompleted": [
+                5140
+              ]
+            },
+            "AetheryteShortcutIf": {
+              "QuestsCompleted": [
+                5140
+              ]
+            }
+          }
+        },
+        {
+          "DataId": 1051283,
+          "Position": {
+            "X": 374.19702,
+            "Y": -0.24794838,
+            "Z": 437.2472
+          },
+          "StopDistance": 6,
+          "TerritoryId": 1190,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5140
+        },
+        {
+          "DataId": 1049324,
+          "Position": {
+            "X": -108.659546,
+            "Y": 4.055336,
+            "Z": 319.5697
+          },
+          "TerritoryId": 1190,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5130
+        },
         {
           "DataId": 1047001,
           "Position": {
           },
           "TerritoryId": 1190,
           "InteractionType": "Interact",
+          "AetheryteShortcut": "Shaaloani - Sheshenewezi Springs",
           "DialogueChoices": [
             {
               "Type": "YesNo",
index edaedfc9306e15f1ff624311648571ba8eefe7e9..1bf3b8397e87cffa5a9da79d766077bdd6233f93 100644 (file)
     {
       "Sequence": 7,
       "Steps": [
+        {
+          "DataId": 1051316,
+          "Position": {
+            "X": -380.30066,
+            "Y": 18.718708,
+            "Z": -114.24432
+          },
+          "TerritoryId": 1190,
+          "InteractionType": "AcceptQuest",
+          "PickUpQuestId": 5144
+        },
         {
           "DataId": 1047082,
           "Position": {
index ff535a8ff584130a4c7b915eba0f1f2ca80adedf..93efd3c0212a7a7cb4629b585ea95c23ed3c19e1 100644 (file)
                 "QuestsAccepted": {
                   "type": "array",
                   "items": {
-                    "type": "number"
+                    "type": ["number", "string"]
                   }
                 },
                 "QuestsCompleted": {
                   "type": "array",
                   "items": {
-                    "type": "number"
+                    "type": ["number", "string"]
                   }
                 },
                 "AetheryteLocked": {
                     "type": "integer"
                   }
                 },
+                "QuestsAccepted": {
+                  "type": "array",
+                  "items": {
+                    "type": ["number", "string"]
+                  }
+                },
+                "QuestsCompleted": {
+                  "type": "array",
+                  "items": {
+                    "type": ["number", "string"]
+                  }
+                },
                 "AetheryteLocked": {
                   "$ref": "https://git.carvel.li/liza/Questionable/raw/branch/master/Questionable.Model/common-schema.json#/$defs/Aetheryte"
                 },
diff --git a/Questionable.Model/Questing/Converter/ElementIdListConverter.cs b/Questionable.Model/Questing/Converter/ElementIdListConverter.cs
new file mode 100644 (file)
index 0000000..25dd688
--- /dev/null
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace Questionable.Model.Questing.Converter;
+
+public sealed class ElementIdListConverter : JsonConverter<List<ElementId>>
+{
+    public override List<ElementId> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+    {
+        if (reader.TokenType != JsonTokenType.StartArray)
+            throw new JsonException();
+
+        reader.Read();
+
+        List<ElementId> values = [];
+        while (reader.TokenType != JsonTokenType.EndArray)
+        {
+
+            if (reader.TokenType == JsonTokenType.Number)
+                values.Add(new QuestId(reader.GetUInt16()));
+            else
+                values.Add(ElementId.FromString(reader.GetString() ?? throw new JsonException()));
+
+            reader.Read();
+        }
+
+        return values;
+    }
+
+    public override void Write(Utf8JsonWriter writer, List<ElementId> value, JsonSerializerOptions options)
+    {
+        throw new NotImplementedException();
+    }
+}
index 573c3e2ec5b65155bf34752a79c1b412a6375899..70e134747ea5cfb0193aeb7c5732b6caca72bcd2 100644 (file)
@@ -1,5 +1,7 @@
 using System.Collections.Generic;
+using System.Text.Json.Serialization;
 using Questionable.Model.Common;
+using Questionable.Model.Questing.Converter;
 
 namespace Questionable.Model.Questing;
 
@@ -8,6 +10,13 @@ public sealed class SkipAetheryteCondition
     public bool Never { get; set; }
     public bool InSameTerritory { get; set; }
     public List<ushort> InTerritory { get; set; } = new();
+
+    [JsonConverter(typeof(ElementIdListConverter))]
+    public List<ElementId> QuestsAccepted { get; set; } = new();
+
+    [JsonConverter(typeof(ElementIdListConverter))]
+    public List<ElementId> QuestsCompleted { get; set; } = new();
+
     public EAetheryteLocation? AetheryteLocked { get; set; }
     public EAetheryteLocation? AetheryteUnlocked { get; set; }
     public bool RequiredQuestVariablesNotMet { get; set; }
index 323a0dc074bddba562556ded59acfd0625b0db07..bfb8fcfc71626ea5fc155b713be27839aa7d7c70 100644 (file)
@@ -1,6 +1,8 @@
 using System.Collections.Generic;
 using System.Linq;
+using System.Text.Json.Serialization;
 using Questionable.Model.Common;
+using Questionable.Model.Questing.Converter;
 
 namespace Questionable.Model.Questing;
 
@@ -14,8 +16,13 @@ public sealed class SkipStepConditions
     public List<ushort> InTerritory { get; set; } = new();
     public List<ushort> NotInTerritory { get; set; } = new();
     public SkipItemConditions? Item { get; set; }
+
+    [JsonConverter(typeof(ElementIdListConverter))]
     public List<ElementId> QuestsAccepted { get; set; } = new();
+
+    [JsonConverter(typeof(ElementIdListConverter))]
     public List<ElementId> QuestsCompleted { get; set; } = new();
+
     public EAetheryteLocation? AetheryteLocked { get; set; }
     public EAetheryteLocation? AetheryteUnlocked { get; set; }
     public NearPositionCondition? NearPosition { get; set; }
index 9297297e763c8457d7d17739fcc8a7ea4108cb6e..29c76f0c52fa9805253ab0f579058d2dae12ef8e 100644 (file)
@@ -24,6 +24,7 @@ internal static class AethernetShortcut
         MovementController movementController,
         AetheryteFunctions aetheryteFunctions,
         GameFunctions gameFunctions,
+        QuestFunctions questFunctions,
         IClientState clientState,
         AetheryteData aetheryteData,
         TerritoryData territoryData,
@@ -46,8 +47,8 @@ internal static class AethernetShortcut
         public ITask Use(EAetheryteLocation from, EAetheryteLocation to, SkipAetheryteCondition? skipConditions = null)
         {
             return new UseAethernetShortcut(from, to, skipConditions ?? new(),
-                loggerFactory.CreateLogger<UseAethernetShortcut>(), aetheryteFunctions, gameFunctions, clientState,
-                aetheryteData, territoryData, lifestreamIpc, movementController, condition);
+                loggerFactory.CreateLogger<UseAethernetShortcut>(), aetheryteFunctions, gameFunctions, questFunctions,
+                clientState, aetheryteData, territoryData, lifestreamIpc, movementController, condition);
         }
     }
 
@@ -58,6 +59,7 @@ internal static class AethernetShortcut
         ILogger<UseAethernetShortcut> logger,
         AetheryteFunctions aetheryteFunctions,
         GameFunctions gameFunctions,
+        QuestFunctions questFunctions,
         IClientState clientState,
         AetheryteData aetheryteData,
         TerritoryData territoryData,
@@ -90,6 +92,20 @@ internal static class AethernetShortcut
                     return false;
                 }
 
+                if (skipConditions.QuestsCompleted.Count > 0 &&
+                    skipConditions.QuestsCompleted.All(questFunctions.IsQuestComplete))
+                {
+                    logger.LogInformation("Skipping aethernet shortcut, all prequisite quests are complete");
+                    return true;
+                }
+
+                if (skipConditions.QuestsAccepted.Count > 0 &&
+                    skipConditions.QuestsAccepted.All(questFunctions.IsQuestAccepted))
+                {
+                    logger.LogInformation("Skipping aethernet shortcut, all prequisite quests are accepted");
+                    return true;
+                }
+
                 if (skipConditions.AetheryteLocked != null &&
                     !aetheryteFunctions.IsAetheryteUnlocked(skipConditions.AetheryteLocked.Value))
                 {
index 2d72afd1a6be0c89c8150703194a6d8985eb874e..0b12bb3fc36c334fcd6b3255d970036b09e75793 100644 (file)
@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using System.Numerics;
 using Dalamud.Plugin.Services;
 using FFXIVClientStructs.FFXIV.Application.Network.WorkDefinitions;
@@ -93,6 +94,20 @@ internal static class AetheryteShortcut
                         return true;
                     }
 
+                    if (skipConditions.QuestsCompleted.Count > 0 &&
+                        skipConditions.QuestsCompleted.All(questFunctions.IsQuestComplete))
+                    {
+                        logger.LogInformation("Skipping aetheryte, all prequisite quests are complete");
+                        return true;
+                    }
+
+                    if (skipConditions.QuestsAccepted.Count > 0 &&
+                        skipConditions.QuestsAccepted.All(questFunctions.IsQuestAccepted))
+                    {
+                        logger.LogInformation("Skipping aetheryte, all prequisite quests are accepted");
+                        return true;
+                    }
+
                     if (skipConditions.AetheryteLocked != null &&
                         !aetheryteFunctions.IsAetheryteUnlocked(skipConditions.AetheryteLocked.Value))
                     {