Handle some interruption/error

This commit is contained in:
Liza 2025-03-01 17:40:15 +01:00
parent bb9dd90878
commit 3ce82ec585
Signed by: liza
GPG Key ID: 2C41B84815CF6445

View File

@ -28,6 +28,7 @@ internal abstract class MiniTaskController<T> : IDisposable
private readonly ILogger<T> _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<T> : IDisposable
_interruptHandler = interruptHandler;
_condition = condition;
_eventCanceledText = dataManager.GetString<LogMessage>(1318, x => x.Text)!;
_actionCanceledText = dataManager.GetString<LogMessage>(1314, x => x.Text)!;
_cantExecuteDueToStatusText = dataManager.GetString<LogMessage>(7728, x => x.Text)!;
_interruptHandler.Interrupted += HandleInterruption;
@ -189,12 +191,15 @@ internal abstract class MiniTaskController<T> : IDisposable
}
private void InterruptWithoutCombat()
{
if (_taskQueue.CurrentTaskExecutor is not SinglePlayerDuty.WaitSinglePlayerDutyExecutor)
{
_logger.LogWarning("Interrupted, attempting to redo previous tasks (not in combat)");
_taskQueue.InterruptWith([new WaitAtEnd.WaitDelay()]);
_taskQueue.InterruptWith([new WaitAtEnd.WaitDelay()]);
LogTasksAfterInterruption();
}
}
private void LogTasksAfterInterruption()
{
@ -219,7 +224,8 @@ internal abstract class MiniTaskController<T> : 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();
}
}