-using Dalamud.Game.Text;
+using System.Collections.Generic;
+using Dalamud.Game.Text;
using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Plugin.Services;
+using Questionable.Data;
using Questionable.External;
+using Questionable.Model;
using Questionable.Model.Questing;
namespace Questionable.Controller.Steps.Common;
internal static class SendNotification
{
+ internal sealed class Factory(
+ Configuration configuration,
+ TerritoryData territoryData) : SimpleTaskFactory
+ {
+ public override ITask? CreateTask(Quest quest, QuestSequence sequence, QuestStep step)
+ {
+ return step.InteractionType switch
+ {
+ EInteractionType.Snipe when !configuration.General.AutomaticallyCompleteSnipeTasks =>
+ new Task(step.InteractionType, step.Comment),
+ EInteractionType.Duty =>
+ new Task(step.InteractionType, step.ContentFinderConditionId.HasValue
+ ? territoryData.GetContentFinderConditionName(step.ContentFinderConditionId.Value)
+ : step.Comment),
+ EInteractionType.SinglePlayerDuty => new Task(step.InteractionType, quest.Info.Name),
+ _ => null,
+ };
+ }
+ }
+
internal sealed record Task(EInteractionType InteractionType, string? Comment) : ITask
{
public override string ToString() => "SendNotification";
using Dalamud.Game.ClientState.Conditions;
using Dalamud.Plugin.Services;
using Questionable.Controller.Steps.Common;
-using Questionable.Controller.Steps.Interactions;
using Questionable.Controller.Utils;
using Questionable.Data;
using Questionable.Functions;
internal sealed class Factory(
IClientState clientState,
ICondition condition,
- TerritoryData territoryData,
- Configuration configuration)
+ TerritoryData territoryData)
: ITaskFactory
{
public IEnumerable<ITask> CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step)
case EInteractionType.WaitForManualProgress:
case EInteractionType.Instruction:
- return [new WaitNextStepOrSequence()];
-
case EInteractionType.Snipe:
- if (configuration.General.AutomaticallyCompleteSnipeTasks)
- return [new WaitNextStepOrSequence()];
- else
- return [
- new SendNotification.Task(step.InteractionType, step.Comment),
- new WaitNextStepOrSequence()
- ];
+ return [new WaitNextStepOrSequence()];
case EInteractionType.Duty:
- return [
- new SendNotification.Task(step.InteractionType, step.ContentFinderConditionId.HasValue ? territoryData.GetContentFinderConditionName(step.ContentFinderConditionId.Value) : step.Comment),
- new EndAutomation(),
- ];
-
case EInteractionType.SinglePlayerDuty:
- return [
- new SendNotification.Task(step.InteractionType, quest.Info.Name),
- new EndAutomation()
- ];
+ return [new EndAutomation()];
case EInteractionType.WalkTo:
case EInteractionType.Jump:
serviceCollection.AddTaskFactoryAndExecutor<MoveTo.MoveTask, MoveTo.Factory, MoveTo.MoveExecutor>();
serviceCollection.AddTaskExecutor<MoveTo.WaitForNearDataId, MoveTo.WaitForNearDataIdExecutor>();
serviceCollection.AddTaskExecutor<MoveTo.LandTask, MoveTo.LandExecutor>();
+ serviceCollection
+ .AddTaskFactoryAndExecutor<SendNotification.Task, SendNotification.Factory, SendNotification.Executor>();
serviceCollection
.AddTaskFactoryAndExecutor<NextQuest.SetQuestTask, NextQuest.Factory, NextQuest.NextQuestExecutor>();
serviceCollection.AddTaskExecutor<InitiateLeve.Initiate, InitiateLeve.InitiateExecutor>();
serviceCollection.AddTaskExecutor<InitiateLeve.SelectDifficulty, InitiateLeve.SelectDifficultyExecutor>();
- serviceCollection.AddTaskExecutor<SendNotification.Task, SendNotification.Executor>();
serviceCollection.AddTaskExecutor<WaitCondition.Task, WaitCondition.WaitConditionExecutor>();
serviceCollection.AddTaskFactory<WaitAtEnd.Factory>();
serviceCollection.AddTaskExecutor<WaitAtEnd.WaitDelay, WaitAtEnd.WaitDelayExecutor>();