1
0
Fork 0
forked from aly/qstbak
qstbak/Questionable/Questionable.Controller.Steps.Shared/SkipMissingObject.cs
2026-08-17 20:29:32 +10:00

48 lines
1.3 KiB
C#

using System;
using Microsoft.Extensions.Logging;
using Questionable.Functions;
using Questionable.Model.Questing;
namespace Questionable.Controller.Steps.Shared;
internal static class SkipMissingObject
{
internal sealed record Task(uint DataId, ElementId ElementId, int Sequence) : ITask
{
public override string ToString()
{
return $"SkipMissingObject({DataId})";
}
}
internal sealed class Executor(GameFunctions gameFunctions, QuestController questController, ILogger<Executor> logger) : TaskExecutor<Task>()
{
private long _skipAt;
protected override bool Start()
{
_skipAt = Environment.TickCount64 + 500;
return true;
}
public override ETaskResult Update()
{
if (gameFunctions.FindObjectByDataId(base.Task.DataId, null, warnIfMissing: false) != null)
{
return ETaskResult.TaskComplete;
}
if (Environment.TickCount64 < _skipAt)
{
return ETaskResult.StillRunning;
}
logger.LogInformation("Skipping simulated actions because GameObject {DataId} is not present", base.Task.DataId);
questController.IncreaseStepCount(base.Task.ElementId, base.Task.Sequence, shouldContinue: true);
return ETaskResult.SkipRemainingTasksForStep;
}
public override bool ShouldInterruptOnDamage()
{
return false;
}
}
}