From: Liza Carvelli Date: Fri, 7 Feb 2025 23:21:18 +0000 (+0100) Subject: Stop AD when questionable is currently running an AD dungeon/trial X-Git-Tag: v4.20~20 X-Git-Url: https://git.jacobcasper.com/?a=commitdiff_plain;h=48cc37dd05f0ed6f79c3997dea21ac9edb0c50de;p=Questionable.git Stop AD when questionable is currently running an AD dungeon/trial --- diff --git a/Questionable/Controller/QuestController.cs b/Questionable/Controller/QuestController.cs index def1c297..331b1d61 100644 --- a/Questionable/Controller/QuestController.cs +++ b/Questionable/Controller/QuestController.cs @@ -473,6 +473,9 @@ internal sealed class QuestController : MiniTaskController private void ClearTasksInternal() { //_logger.LogDebug("Clearing task (internally)"); + if (_taskQueue.CurrentTaskExecutor is IStoppableTaskExecutor stoppableTaskExecutor) + stoppableTaskExecutor.StopNow(); + _taskQueue.Reset(); _yesAlreadyIpc.RestoreYesAlready(); diff --git a/Questionable/Controller/Steps/Interactions/Duty.cs b/Questionable/Controller/Steps/Interactions/Duty.cs index b59f8ce7..f40c4671 100644 --- a/Questionable/Controller/Steps/Interactions/Duty.cs +++ b/Questionable/Controller/Steps/Interactions/Duty.cs @@ -49,7 +49,7 @@ internal static class Duty TerritoryData territoryData, IClientState clientState, IChatGui chatGui, - SendNotification.Executor sendNotificationExecutor) : TaskExecutor + SendNotification.Executor sendNotificationExecutor) : TaskExecutor, 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 + IClientState clientState) : TaskExecutor, 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; } diff --git a/Questionable/Controller/Steps/TaskExecutor.cs b/Questionable/Controller/Steps/TaskExecutor.cs index 30e10b64..d96dce2f 100644 --- a/Questionable/Controller/Steps/TaskExecutor.cs +++ b/Questionable/Controller/Steps/TaskExecutor.cs @@ -25,6 +25,11 @@ internal interface IExtraTaskCreator : ITaskExecutor IEnumerable CreateExtraTasks(); } +internal interface IStoppableTaskExecutor : ITaskExecutor +{ + void StopNow(); +} + internal abstract class TaskExecutor : ITaskExecutor where T : class, ITask {