{ EInteractionType.Combat, "Combat" },
{ EInteractionType.UseItem, "UseItem" },
{ EInteractionType.EquipItem, "EquipItem" },
+ { EInteractionType.EquipRecommended, "EquipRecommended" },
{ EInteractionType.Say, "Say" },
{ EInteractionType.Emote, "Emote" },
{ EInteractionType.Action, "Action" },
--- /dev/null
+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";
+ }
+}
.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,