48 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|