Add 'EquipRecommended' task
authorLiza Carvelli <liza@carvel.li>
Sat, 10 Aug 2024 16:14:15 +0000 (18:14 +0200)
committerLiza Carvelli <liza@carvel.li>
Sat, 10 Aug 2024 16:15:00 +0000 (18:15 +0200)
QuestPaths/quest-v1.json
Questionable.Model/Questing/Converter/InteractionTypeConverter.cs
Questionable.Model/Questing/EInteractionType.cs
Questionable/Controller/Steps/Interactions/EquipRecommended.cs [new file with mode: 0644]
Questionable/QuestionablePlugin.cs

index 25d083b6c20faa84bf72add11063a6fd9a65e54b..e703cd5653d0b0293e99a1697fd1037c34f5a673 100644 (file)
                     "Combat",
                     "UseItem",
                     "EquipItem",
+                    "EquipRecommended",
                     "Say",
                     "Emote",
                     "Action",
index 2343676dc867b0276eb42e41af48c69cd5859ad0..a7c8106108f18e7c2cecbf11af310d9f0d1a7af2 100644 (file)
@@ -16,6 +16,7 @@ public sealed class InteractionTypeConverter() : EnumConverter<EInteractionType>
         { EInteractionType.Combat, "Combat" },
         { EInteractionType.UseItem, "UseItem" },
         { EInteractionType.EquipItem, "EquipItem" },
+        { EInteractionType.EquipRecommended, "EquipRecommended" },
         { EInteractionType.Say, "Say" },
         { EInteractionType.Emote, "Emote" },
         { EInteractionType.Action, "Action" },
index 144861b752c76b7d5ceb385250bbd9d5ba5b8398..b52458caf93f76c128d81f365e4a7d963f93ebad 100644 (file)
@@ -15,6 +15,7 @@ public enum EInteractionType
     Combat,
     UseItem,
     EquipItem,
+    EquipRecommended,
     Say,
     Emote,
     Action,
diff --git a/Questionable/Controller/Steps/Interactions/EquipRecommended.cs b/Questionable/Controller/Steps/Interactions/EquipRecommended.cs
new file mode 100644 (file)
index 0000000..26af42f
--- /dev/null
@@ -0,0 +1,50 @@
+using System;
+using Dalamud.Plugin.Services;
+using FFXIVClientStructs.FFXIV.Client.UI.Misc;
+using Microsoft.Extensions.DependencyInjection;
+using Questionable.Model;
+using Questionable.Model.Questing;
+
+namespace Questionable.Controller.Steps.Interactions;
+
+internal static class EquipRecommended
+{
+    internal sealed class Factory(IServiceProvider serviceProvider) : ITaskFactory
+    {
+        public ITask? CreateTask(Quest quest, QuestSequence sequence, QuestStep step)
+        {
+            if (step.InteractionType != EInteractionType.EquipRecommended)
+                return null;
+
+            return serviceProvider.GetRequiredService<DoEquipRecommended>();
+        }
+    }
+
+    internal sealed unsafe class DoEquipRecommended(IClientState clientState) : ITask
+    {
+        private bool _equipped;
+
+        public bool Start()
+        {
+            RecommendEquipModule.Instance()->SetupForClassJob((byte)clientState.LocalPlayer!.ClassJob.Id);
+            return true;
+        }
+
+        public ETaskResult Update()
+        {
+            if (RecommendEquipModule.Instance()->IsUpdating)
+                return ETaskResult.StillRunning;
+
+            if (!_equipped)
+            {
+                RecommendEquipModule.Instance()->EquipRecommendedGear();
+                _equipped = true;
+                return ETaskResult.StillRunning;
+            }
+
+            return ETaskResult.TaskComplete;
+        }
+
+        public override string ToString() => "EquipRecommended";
+    }
+}
index df2fb35757733cf7c20aa0c896f0956bdfd9316b..2e88cb19c9456f96195f9e12abe7faabc988c782 100644 (file)
@@ -151,6 +151,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin
             .AddTaskWithFactory<UseItem.Factory, UseItem.UseOnGround, UseItem.UseOnObject, UseItem.Use,
                 UseItem.UseOnPosition>();
         serviceCollection.AddTaskWithFactory<EquipItem.Factory, EquipItem.DoEquip>();
+        serviceCollection.AddTaskWithFactory<EquipRecommended.Factory, EquipRecommended.DoEquipRecommended>();
         serviceCollection.AddTaskWithFactory<TurnInDelivery.Factory, TurnInDelivery.SatisfactionSupplyTurnIn>();
         serviceCollection
             .AddTaskWithFactory<SinglePlayerDuty.Factory, SinglePlayerDuty.DisableYesAlready,