Fix interrupts in interactions

This commit is contained in:
Liza 2025-02-22 23:11:08 +01:00
parent 224825b071
commit 71b40496fb
Signed by: liza
GPG Key ID: 2C41B84815CF6445

View File

@ -96,6 +96,12 @@ internal static class Interact
private EInteractionState _interactionState = EInteractionState.None; private EInteractionState _interactionState = EInteractionState.None;
private DateTime _continueAt = DateTime.MinValue; private DateTime _continueAt = DateTime.MinValue;
/// <summary>
/// A slight delay when we think an interaction has ended, to make sure that we're processing "Action cancelled"
/// prior to the next step (in case we're attacked).
/// </summary>
private bool delayedFinalCheck;
public Quest? Quest => Task.Quest; public Quest? Quest => Task.Quest;
public EInteractionType InteractionType { get; set; } public EInteractionType InteractionType { get; set; }
@ -179,7 +185,14 @@ internal static class Interact
return ETaskResult.StillRunning; return ETaskResult.StillRunning;
else if (ProgressContext.WasSuccessful() || else if (ProgressContext.WasSuccessful() ||
_interactionState == EInteractionState.InteractionConfirmed) _interactionState == EInteractionState.InteractionConfirmed)
return ETaskResult.TaskComplete; {
if (delayedFinalCheck)
return ETaskResult.TaskComplete;
_continueAt = DateTime.Now.AddSeconds(0.2);
delayedFinalCheck = true;
return ETaskResult.StillRunning;
}
} }
IGameObject? gameObject = gameFunctions.FindObjectByDataId(Task.DataId); IGameObject? gameObject = gameFunctions.FindObjectByDataId(Task.DataId);