Add diving condition to skip.StepIf
authorLiza Carvelli <liza@carvel.li>
Tue, 3 Dec 2024 13:00:20 +0000 (14:00 +0100)
committerLiza Carvelli <liza@carvel.li>
Tue, 3 Dec 2024 13:00:20 +0000 (14:00 +0100)
QuestPathGenerator/RoslynElements/SkipConditionsExtensions.cs
QuestPaths/quest-v1.json
Questionable.Model/Questing/SkipStepConditions.cs
Questionable/Controller/Steps/Shared/SkipCondition.cs

index e904e0f78bbf1582481a9a840619eddf06305d81..01106bdab3441a9732354883857ce0b4515f5221 100644 (file)
@@ -48,6 +48,9 @@ internal static class SkipConditionsExtensions
                             Assignment(nameof(SkipStepConditions.Flying), skipStepConditions.Flying,
                                     emptyStep.Flying)
                                 .AsSyntaxNodeOrToken(),
+                            Assignment(nameof(SkipStepConditions.Diving), skipStepConditions.Diving,
+                                    emptyStep.Diving)
+                                .AsSyntaxNodeOrToken(),
                             Assignment(nameof(SkipStepConditions.Chocobo), skipStepConditions.Chocobo,
                                     emptyStep.Chocobo)
                                 .AsSyntaxNodeOrToken(),
index a4975e39c47911a37dc3465c983af4f35cbe69cb..af5811474549f1024ce9b521b594edc5a8a4d16f 100644 (file)
                     "Unlocked"
                   ]
                 },
+                "Diving": {
+                  "type": ["boolean", "null"]
+                },
                 "NotTargetable": {
                   "type": "boolean"
                 },
index 25c1a46b138ab9cd6f922b433d6dab92497e5bdb..08d5c2684dfc666437b6b66e1b74bacdb563ec1a 100644 (file)
@@ -12,6 +12,7 @@ public sealed class SkipStepConditions
     public IList<QuestWorkValue?> CompletionQuestVariablesFlags { get; set; } = new List<QuestWorkValue?>();
     public ELockedSkipCondition? Flying { get; set; }
     public ELockedSkipCondition? Chocobo { get; set; }
+    public bool? Diving { get; set; }
     public bool NotTargetable { get; set; }
     public List<ushort> InTerritory { get; set; } = [];
     public List<ushort> NotInTerritory { get; set; } = [];
@@ -37,6 +38,7 @@ public sealed class SkipStepConditions
         return (CompletionQuestVariablesFlags.Count > 0 && CompletionQuestVariablesFlags.Any(x => x != null)) ||
                Flying != null ||
                Chocobo != null ||
+               Diving != null ||
                NotTargetable ||
                InTerritory.Count > 0 ||
                NotInTerritory.Count > 0 ||
@@ -53,6 +55,6 @@ public sealed class SkipStepConditions
     public override string ToString()
     {
         return
-            $"{nameof(Never)}: {Never}, {nameof(CompletionQuestVariablesFlags)}: {CompletionQuestVariablesFlags}, {nameof(Flying)}: {Flying}, {nameof(Chocobo)}: {Chocobo}, {nameof(NotTargetable)}: {NotTargetable}, {nameof(InTerritory)}: {string.Join(" ", InTerritory)}, {nameof(NotInTerritory)}: {string.Join(" ", NotInTerritory)}, {nameof(Item)}: {Item}, {nameof(QuestsAccepted)}: {string.Join(" ", QuestsAccepted)}, {nameof(QuestsCompleted)}: {string.Join(" ", QuestsCompleted)}, {nameof(NotNamePlateIconId)}: {string.Join(" ", NotNamePlateIconId)}, {nameof(NearPosition)}: {NearPosition}, {nameof(ExtraCondition)}: {ExtraCondition}";
+            $"{nameof(Never)}: {Never}, {nameof(CompletionQuestVariablesFlags)}: {CompletionQuestVariablesFlags}, {nameof(Flying)}: {Flying}, {nameof(Chocobo)}: {Chocobo}, {nameof(Diving)}: {Diving}, {nameof(NotTargetable)}: {NotTargetable}, {nameof(InTerritory)}: {string.Join(" ", InTerritory)}, {nameof(NotInTerritory)}: {string.Join(" ", NotInTerritory)}, {nameof(Item)}: {Item}, {nameof(QuestsAccepted)}: {string.Join(" ", QuestsAccepted)}, {nameof(QuestsCompleted)}: {string.Join(" ", QuestsCompleted)}, {nameof(NotNamePlateIconId)}: {string.Join(" ", NotNamePlateIconId)}, {nameof(NearPosition)}: {NearPosition}, {nameof(ExtraCondition)}: {ExtraCondition}";
     }
 }
index 68297c4ed2c96f6d43a9b4c0d6ee17c83c1262ca..5abab059423ce88d1b2adeab388a4fdff8b108b0 100644 (file)
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Numerics;
+using Dalamud.Game.ClientState.Conditions;
 using Dalamud.Game.ClientState.Objects.Types;
 using Dalamud.Plugin.Services;
 using FFXIVClientStructs.FFXIV.Client.Game;
@@ -54,7 +55,8 @@ internal static class SkipCondition
         AetheryteFunctions aetheryteFunctions,
         GameFunctions gameFunctions,
         QuestFunctions questFunctions,
-        IClientState clientState) : TaskExecutor<SkipTask>
+        IClientState clientState,
+        ICondition condition) : TaskExecutor<SkipTask>
     {
         protected override unsafe bool Start()
         {
@@ -85,6 +87,18 @@ internal static class SkipCondition
                 return true;
             }
 
+            if (skipConditions.Diving == true && condition[ConditionFlag.Diving])
+            {
+                logger.LogInformation("Skipping step, as you're currently diving underwater");
+                return true;
+            }
+
+            if (skipConditions.Diving == false && !condition[ConditionFlag.Diving])
+            {
+                logger.LogInformation("Skipping step, as you're not currently diving underwater");
+                return true;
+            }
+
             if (skipConditions.InTerritory.Count > 0 &&
                 skipConditions.InTerritory.Contains(clientState.TerritoryType))
             {