From e04bdf37efb16e7e423441c6800e7ab948c3e850 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=82ngelo=20Tadeucci?= Date: Tue, 22 Jul 2025 21:36:48 -0300 Subject: [PATCH] Fix: npc animations Fix npcs switching between idle and playing a constant animation Fix npcs stuck in animation when they should be playing death animation --- .../MovementStateStates/MovementState.Emote.cs | 5 +++++ .../MovementStateTasks/MovementState.StandbyTask.cs | 1 + Maple2.Server.Game/Model/Field/Actor/FieldNpc.cs | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Maple2.Server.Game/Model/Field/Actor/ActorStateComponent/MovementStateStates/MovementState.Emote.cs b/Maple2.Server.Game/Model/Field/Actor/ActorStateComponent/MovementStateStates/MovementState.Emote.cs index 7cd3c5614..801689c7e 100644 --- a/Maple2.Server.Game/Model/Field/Actor/ActorStateComponent/MovementStateStates/MovementState.Emote.cs +++ b/Maple2.Server.Game/Model/Field/Actor/ActorStateComponent/MovementStateStates/MovementState.Emote.cs @@ -4,6 +4,7 @@ namespace Maple2.Server.Game.Model.ActorStateComponent; public partial class MovementState { private long emoteLimitTick; + private bool dontIdleOnStateEnd; private void EmoteStateUpdate(long tickCount, long tickDelta) { if (tickCount >= emoteLimitTick && emoteLimitTick != 0) { @@ -23,6 +24,10 @@ public void StateEmoteEvent(string keyName) { emoteActionTask?.Completed(); + if (dontIdleOnStateEnd) { + return; + } + Idle(); break; 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 92de48a69..bc3c14549 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 @@ -25,6 +25,7 @@ protected override void TaskResumed() { private void Standby(NpcTask task, IActor? target, bool isIdle, string sequence) { Idle(sequence); + dontIdleOnStateEnd = isIdle; if (target is null) { return; diff --git a/Maple2.Server.Game/Model/Field/Actor/FieldNpc.cs b/Maple2.Server.Game/Model/Field/Actor/FieldNpc.cs index 992607070..371261ff6 100644 --- a/Maple2.Server.Game/Model/Field/Actor/FieldNpc.cs +++ b/Maple2.Server.Game/Model/Field/Actor/FieldNpc.cs @@ -181,7 +181,7 @@ public override void Update(long tickCount) { playersListeningToDebug = playersListeningToDebugNow; - if (SendControl) { + if (SendControl && !IsDead) { SequenceCounter++; Field.BroadcastNpcControl(this); SendControl = false;