diff --git a/Maple2.Server.Game/Model/Field/Actor/ActorStateComponent/MovementStateTasks/MovementState.StandbyTask.cs b/Maple2.Server.Game/Model/Field/Actor/ActorStateComponent/MovementStateTasks/MovementState.StandbyTask.cs index 5b8ee9f2f..92de48a69 100644 --- a/Maple2.Server.Game/Model/Field/Actor/ActorStateComponent/MovementStateTasks/MovementState.StandbyTask.cs +++ b/Maple2.Server.Game/Model/Field/Actor/ActorStateComponent/MovementStateTasks/MovementState.StandbyTask.cs @@ -8,12 +8,14 @@ public partial class MovementState { public class NpcStandbyTask : NpcTask { private readonly MovementState movement; public IActor? Target { get; init; } - public string Sequence { get; init; } = string.Empty; - public bool IsIdle { get; init; } + private string Sequence { get; init; } + private bool IsIdle { get; init; } public override bool CancelOnInterrupt => true; public NpcStandbyTask(TaskState taskState, MovementState movement, string sequence, NpcTaskPriority priority, bool isIdle) : base(taskState, priority) { this.movement = movement; + Sequence = sequence; + IsIdle = isIdle; } protected override void TaskResumed() { diff --git a/Maple2.Server.Game/Model/Field/Actor/FieldNpc.cs b/Maple2.Server.Game/Model/Field/Actor/FieldNpc.cs index 85f4a9b39..688fb04a1 100644 --- a/Maple2.Server.Game/Model/Field/Actor/FieldNpc.cs +++ b/Maple2.Server.Game/Model/Field/Actor/FieldNpc.cs @@ -76,7 +76,7 @@ public short SequenceId { public readonly AnimationSequenceMetadata? JumpSequence; public readonly AnimationSequenceMetadata? WalkSequence; public readonly AnimationSequenceMetadata? FlySequence; - public readonly AnimationSequenceMetadata? SpawnSequence; + public readonly string? SpawnAnimation; private readonly WeightedSet defaultRoutines; public readonly AiState AiState; public readonly MovementState MovementState; @@ -100,7 +100,7 @@ public FieldNpc(FieldManager field, int objectId, DtCrowdAgent? agent, Npc npc, JumpSequence = npc.Animations.GetValueOrDefault("Jump_A") ?? npc.Animations.GetValueOrDefault("Jump_B"); WalkSequence = npc.Animations.GetValueOrDefault("Walk_A"); FlySequence = npc.Animations.GetValueOrDefault("Fly_A"); - SpawnSequence = npc.Animations.GetValueOrDefault(spawnAnimation); + SpawnAnimation = spawnAnimation; defaultRoutines = new WeightedSet(); foreach (NpcAction action in Value.Metadata.Action.Actions) { defaultRoutines.Add(action.Name, action.Probability); @@ -250,7 +250,7 @@ public override void KeyframeEvent(string keyName) { if (!Value.Animations.TryGetValue(routineName, out AnimationSequenceMetadata? animationSequence)) { break; } - return MovementState.TryEmote(animationSequence.Name, SpawnSequence is not null); + return MovementState.TryEmote(animationSequence.Name, SpawnAnimation is not null); } Logger.Warning("Unhandled routine: {Routine} for npc {NpcId}", routineName, Value.Metadata.Id); @@ -337,7 +337,7 @@ public virtual void Animate(string sequenceName, float duration = -1f) { } public void Talk() { - if (SpawnSequence is not null) { + if (SpawnAnimation is not null) { return; } idleTask = MovementState.TryTalk(); diff --git a/Maple2.Server.Game/Trigger/TriggerContext.Npc.cs b/Maple2.Server.Game/Trigger/TriggerContext.Npc.cs index a8a5888b8..14907a4be 100644 --- a/Maple2.Server.Game/Trigger/TriggerContext.Npc.cs +++ b/Maple2.Server.Game/Trigger/TriggerContext.Npc.cs @@ -22,7 +22,7 @@ public void ChangeMonster(int removeSpawnId, int addSpawnId) { public void SpawnMonster(int[] spawnIds, bool spawnAnimation, int arg3) { WarnLog("[CreateMonster] spawnIds:{SpawnIds}, spawnAnimation:{SpawnAnimation}, arg3:{Arg3}", string.Join(", ", spawnIds), spawnAnimation, arg3); foreach (int spawnId in spawnIds) { - SpawnNpc(spawnId); + SpawnNpc(spawnId, spawnAnimation); } } @@ -277,7 +277,7 @@ private IEnumerable NpcsInBox(params int[] boxIds) { return Field.EnumerateNpcs().Where(mob => boxes.Any(box => box.Contains(mob.Position))); } - private void SpawnNpc(int spawnId) { + private void SpawnNpc(int spawnId, bool useSpawnAnimation = false) { if (!Field.Entities.EventNpcSpawns.TryGetValue(spawnId, out EventSpawnPointNPC? spawn)) { logger.Error("[SpawnNpc] Invalid spawnId:{SpawnId}", spawnId); return; @@ -290,7 +290,11 @@ private void SpawnNpc(int spawnId) { } for (int i = 0; i < entry.Count; i++) { - FieldNpc? fieldNpc = Field.SpawnNpc(npc, spawn.Position, spawn.Rotation, spawnAnimation: spawn.SpawnAnimation); + string spawnAnimationString = string.Empty; + if (!string.IsNullOrEmpty(spawn.SpawnAnimation) && useSpawnAnimation) { + spawnAnimationString = spawn.SpawnAnimation; + } + FieldNpc? fieldNpc = Field.SpawnNpc(npc, spawn.Position, spawn.Rotation, spawnAnimation: spawnAnimationString); if (fieldNpc == null) { logger.Error("[SpawnNpc] Failed to spawn npcId:{NpcId}", entry.NpcId); continue;