Add EnemySpawnType - AfterAction

This commit is contained in:
Liza 2024-09-01 14:21:26 +02:00
parent 86f764aca3
commit d7aa4243d7
Signed by: liza
GPG Key ID: 7199F8D727D55F67
5 changed files with 24 additions and 2 deletions

View File

@ -584,6 +584,7 @@
"AutoOnEnterArea",
"AfterInteraction",
"AfterItemUse",
"AfterAction",
"OverworldEnemies"
]
},

View File

@ -9,6 +9,7 @@ public sealed class EnemySpawnTypeConverter() : EnumConverter<EEnemySpawnType>(V
{
{ EEnemySpawnType.AfterInteraction, "AfterInteraction" },
{ EEnemySpawnType.AfterItemUse, "AfterItemUse" },
{ EEnemySpawnType.AfterAction, "AfterAction" },
{ EEnemySpawnType.AutoOnEnterArea, "AutoOnEnterArea" },
{ EEnemySpawnType.OverworldEnemies, "OverworldEnemies" },
};

View File

@ -9,6 +9,7 @@ public enum EEnemySpawnType
None = 0,
AfterInteraction,
AfterItemUse,
AfterAction,
AutoOnEnterArea,
OverworldEnemies,
}

View File

@ -24,13 +24,18 @@ internal static class Action
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(

View File

@ -18,6 +18,7 @@ internal static class Combat
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)
@ -58,6 +59,19 @@ internal static class Combat
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));