forked from liza/Questionable
master #4
@ -584,6 +584,7 @@
|
||||
"AutoOnEnterArea",
|
||||
"AfterInteraction",
|
||||
"AfterItemUse",
|
||||
"AfterAction",
|
||||
"OverworldEnemies"
|
||||
]
|
||||
},
|
||||
|
@ -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" },
|
||||
};
|
||||
|
@ -9,6 +9,7 @@ public enum EEnemySpawnType
|
||||
None = 0,
|
||||
AfterInteraction,
|
||||
AfterItemUse,
|
||||
AfterAction,
|
||||
AutoOnEnterArea,
|
||||
OverworldEnemies,
|
||||
}
|
||||
|
@ -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(
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user