Stop AD when questionable is currently running an AD dungeon/trial
authorLiza Carvelli <liza@carvel.li>
Fri, 7 Feb 2025 23:21:18 +0000 (00:21 +0100)
committerLiza Carvelli <liza@carvel.li>
Fri, 7 Feb 2025 23:21:18 +0000 (00:21 +0100)
Questionable/Controller/QuestController.cs
Questionable/Controller/Steps/Interactions/Duty.cs
Questionable/Controller/Steps/TaskExecutor.cs

index def1c297a95f0e9a4fa29b6420706ed1db0da97c..331b1d61e2f1ab8b41b780b7702c38f2b02678f7 100644 (file)
@@ -473,6 +473,9 @@ internal sealed class QuestController : MiniTaskController<QuestController>
     private void ClearTasksInternal()
     {
         //_logger.LogDebug("Clearing task (internally)");
+        if (_taskQueue.CurrentTaskExecutor is IStoppableTaskExecutor stoppableTaskExecutor)
+            stoppableTaskExecutor.StopNow();
+
         _taskQueue.Reset();
 
         _yesAlreadyIpc.RestoreYesAlready();
index b59f8ce7047c00012670c66469ec12724a8c0740..f40c4671da73b17891ae41f2ad152e31b381fc80 100644 (file)
@@ -49,7 +49,7 @@ internal static class Duty
         TerritoryData territoryData,
         IClientState clientState,
         IChatGui chatGui,
-        SendNotification.Executor sendNotificationExecutor) : TaskExecutor<StartAutoDutyTask>
+        SendNotification.Executor sendNotificationExecutor) : TaskExecutor<StartAutoDutyTask>, IStoppableTaskExecutor
     {
         protected override bool Start()
         {
@@ -94,6 +94,8 @@ internal static class Duty
                 : ETaskResult.StillRunning;
         }
 
+        public void StopNow() => autoDutyIpc.Stop();
+
         public override bool ShouldInterruptOnDamage() => false;
     }
 
@@ -105,7 +107,7 @@ internal static class Duty
     internal sealed class WaitAutoDutyExecutor(
         AutoDutyIpc autoDutyIpc,
         TerritoryData territoryData,
-        IClientState clientState) : TaskExecutor<WaitAutoDutyTask>
+        IClientState clientState) : TaskExecutor<WaitAutoDutyTask>, IStoppableTaskExecutor
     {
         protected override bool Start() => true;
 
@@ -120,6 +122,8 @@ internal static class Duty
                 : ETaskResult.StillRunning;
         }
 
+        public void StopNow() => autoDutyIpc.Stop();
+
         public override bool ShouldInterruptOnDamage() => false;
     }
 
index 30e10b643f37154c28617b5ba59adecba65b3c9d..d96dce2f9e2db009f590e395929fed4ddca97573 100644 (file)
@@ -25,6 +25,11 @@ internal interface IExtraTaskCreator : ITaskExecutor
     IEnumerable<ITask> CreateExtraTasks();
 }
 
+internal interface IStoppableTaskExecutor : ITaskExecutor
+{
+    void StopNow();
+}
+
 internal abstract class TaskExecutor<T> : ITaskExecutor
     where T : class, ITask
 {