{
{ EEnemySpawnType.AfterInteraction, "AfterInteraction" },
{ EEnemySpawnType.AfterItemUse, "AfterItemUse" },
+ { EEnemySpawnType.AfterAction, "AfterAction" },
{ EEnemySpawnType.AutoOnEnterArea, "AutoOnEnterArea" },
{ EEnemySpawnType.OverworldEnemies, "OverworldEnemies" },
};
ArgumentNullException.ThrowIfNull(step.Action);
- var task = new UseOnObject(step.DataId, step.Action.Value, gameFunctions,
- loggerFactory.CreateLogger<UseOnObject>());
+ var task = OnObject(step.DataId, step.Action.Value);
if (step.Action.Value.RequiresMount())
return [task];
else
return [mountFactory.Unmount(), task];
}
+
+ public ITask OnObject(uint? dataId, EAction action)
+ {
+ return new UseOnObject(dataId, action, gameFunctions,
+ loggerFactory.CreateLogger<UseOnObject>());
+ }
}
private sealed class UseOnObject(
Interact.Factory interactFactory,
Mount.Factory mountFactory,
UseItem.Factory useItemFactory,
+ Action.Factory actionFactory,
QuestFunctions questFunctions) : ITaskFactory
{
public IEnumerable<ITask> CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step)
break;
}
+ case EEnemySpawnType.AfterAction:
+ {
+ ArgumentNullException.ThrowIfNull(step.DataId);
+ ArgumentNullException.ThrowIfNull(step.Action);
+
+ if (!step.Action.Value.RequiresMount())
+ yield return mountFactory.Unmount();
+ yield return actionFactory.OnObject(step.DataId.Value, step.Action.Value);
+ yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1));
+ yield return CreateTask(quest, sequence, step);
+ break;
+ } ;
+
case EEnemySpawnType.AutoOnEnterArea:
if (step.CombatDelaySecondsAtStart == null)
yield return new WaitAtEnd.WaitDelay(TimeSpan.FromSeconds(1));