From 3ce82ec585ce2707fe83f2b1faf5365730a75d5c Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 1 Mar 2025 17:40:15 +0100 Subject: [PATCH] Handle some interruption/error --- Questionable/Controller/MiniTaskController.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Questionable/Controller/MiniTaskController.cs b/Questionable/Controller/MiniTaskController.cs index 4099a17d..a62a5e6d 100644 --- a/Questionable/Controller/MiniTaskController.cs +++ b/Questionable/Controller/MiniTaskController.cs @@ -28,6 +28,7 @@ internal abstract class MiniTaskController : IDisposable private readonly ILogger _logger; private readonly string _actionCanceledText; + private readonly string _eventCanceledText; private readonly string _cantExecuteDueToStatusText; protected MiniTaskController(IChatGui chatGui, ICondition condition, IServiceProvider serviceProvider, @@ -39,6 +40,7 @@ internal abstract class MiniTaskController : IDisposable _interruptHandler = interruptHandler; _condition = condition; + _eventCanceledText = dataManager.GetString(1318, x => x.Text)!; _actionCanceledText = dataManager.GetString(1314, x => x.Text)!; _cantExecuteDueToStatusText = dataManager.GetString(7728, x => x.Text)!; _interruptHandler.Interrupted += HandleInterruption; @@ -190,10 +192,13 @@ internal abstract class MiniTaskController : IDisposable private void InterruptWithoutCombat() { - _logger.LogWarning("Interrupted, attempting to redo previous tasks (not in combat)"); - _taskQueue.InterruptWith([new WaitAtEnd.WaitDelay()]); + if (_taskQueue.CurrentTaskExecutor is not SinglePlayerDuty.WaitSinglePlayerDutyExecutor) + { + _logger.LogWarning("Interrupted, attempting to redo previous tasks (not in combat)"); - LogTasksAfterInterruption(); + _taskQueue.InterruptWith([new WaitAtEnd.WaitDelay()]); + LogTasksAfterInterruption(); + } } private void LogTasksAfterInterruption() @@ -219,7 +224,8 @@ internal abstract class MiniTaskController : IDisposable !_condition[ConditionFlag.InFlight] && _taskQueue.CurrentTaskExecutor?.ShouldInterruptOnDamage() == true) InterruptQueueWithCombat(); - else if (GameFunctions.GameStringEquals(_cantExecuteDueToStatusText, message.TextValue)) + else if (GameFunctions.GameStringEquals(_cantExecuteDueToStatusText, message.TextValue) || + GameFunctions.GameStringEquals(_eventCanceledText, message.TextValue)) InterruptWithoutCombat(); } }