From 2fc32356e1cad1d9fc5ea670928f020469ba3b6d Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 30 一月 2026 10:34:35 +0800
Subject: [PATCH] 125 战斗 死亡被错误计入activeSkillTracks 导致的技能播放状态未重置问题

---
 Main/System/Battle/Motion/MotionBase.cs |   32 +++++++++++++++++++++-----------
 1 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index f7ca6eb..d29a15d 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -28,6 +28,9 @@
     private Spine.TrackEntry currentTrack;
     private Dictionary<int, Spine.TrackEntry> activeSkillTracks = new Dictionary<int, Spine.TrackEntry>();
     
+    // 姝讳骸鍔ㄧ敾涓撶敤杞ㄩ亾绱㈠紩
+    private const int DeathTrackIndex = 9;
+    
     // 瀛愭妧鑳借建閬撴睜绠$悊锛堝湪Init涓垵濮嬪寲锛屼笉瑕佸湪杩欓噷鍒濆鍖栵級
     private Queue<int> availableSubTracks;
     private Dictionary<SkillBase, int> subSkillTrackMap = new Dictionary<SkillBase, int>();
@@ -117,10 +120,9 @@
         if (animState == null) return null;
         
         // 浣跨敤杞ㄩ亾9浣滀负姝讳骸鍔ㄧ敾涓撶敤杞ㄩ亾锛堢嫭绔嬩簬涓昏建閬�0鍜屽瓙鎶�鑳借建閬�1-8锛�
-        const int deathTrackIndex = 9;
         
         // 娓呴櫎姝讳骸杞ㄩ亾涓婄殑鍥炶皟
-        if (activeSkillTracks.TryGetValue(deathTrackIndex, out var oldDeathTrack))
+        if (activeSkillTracks.TryGetValue(DeathTrackIndex, out var oldDeathTrack))
         {
             if (trackEntryCallbacks.ContainsKey(oldDeathTrack))
                 trackEntryCallbacks.Remove(oldDeathTrack);
@@ -134,11 +136,11 @@
             return null;
         }
         
-        Spine.TrackEntry deathTrack = animState.SetAnimation(deathTrackIndex, deadAnim, false);
+        Spine.TrackEntry deathTrack = animState.SetAnimation(DeathTrackIndex, deadAnim, false);
         
         if (deathTrack != null)
         {
-            activeSkillTracks[deathTrackIndex] = deathTrack;
+            activeSkillTracks[DeathTrackIndex] = deathTrack;
             
             if (onComplete != null)
                 trackEntryCallbacks[deathTrack] = onComplete;
@@ -149,6 +151,14 @@
 
     private void AddAction(Action action) => runningActions.Add(action);
     private void RemoveAction(Action action) => runningActions.Remove(action);
+    
+    // 妫�鏌ユ槸鍚︽湁娲昏穬鐨勬妧鑳借建閬擄紙鎺掗櫎姝讳骸杞ㄩ亾锛�
+    private bool HasActiveSkillTracks()
+    {
+        if (activeSkillTracks.Count == 0) return false;
+        if (activeSkillTracks.Count == 1 && activeSkillTracks.ContainsKey(DeathTrackIndex)) return false;
+        return true;
+    }
 
     public Spine.TrackEntry PlaySkillAnimation(SkillConfig skillConfig, SkillBase skillBase, bool isSubSkill, Action onComplete = null)
     {
@@ -306,8 +316,8 @@
                     subSkillTrackMap.Remove(skillBase);
                 }
                 
-                // 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim
-                if (activeSkillTracks.Count == 0)
+                // 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim锛堟帓闄ゆ浜¤建閬擄級
+                if (!HasActiveSkillTracks())
                 {
                     playingSkillWithAnim = false;
                     playingSkill = false;
@@ -360,7 +370,7 @@
                         subSkillTrackMap.Remove(skillBase);
                     }
                     
-                    if (activeSkillTracks.Count == 0)
+                    if (!HasActiveSkillTracks())
                     {
                         playingSkill = false;
                         playingSkillWithAnim = false;
@@ -371,7 +381,7 @@
                 if (skillTrack.TrackTime == 0) failCount++;
                 if (failCount > 100)
                 {
-                    Debug.LogError("鎶�鑳藉姩鐢绘挱鏀惧け璐ワ紝寮哄埗缁撴潫 " + skillConfig.SkillID);
+                    Debug.LogError("鎶�鑳藉姩鐢绘挱鏀惧け璐ワ紝寮哄埗缁撴潫 " + skillConfig.SkillID + " is caster dead " + skillBase.caster.IsDead());
                     skillBase.ForceFinished();
                     RemoveAction(frameHandler);
                     if (activeSkillTracks.ContainsKey(trackIndex))
@@ -385,7 +395,7 @@
                         subSkillTrackMap.Remove(skillBase);
                     }
                     
-                    if (activeSkillTracks.Count == 0)
+                    if (!HasActiveSkillTracks())
                     {
                         playingSkillWithAnim = false;
                         playingSkill = false;
@@ -480,8 +490,8 @@
                         subSkillTrackMap.Remove(skillBase);
                     }
 
-                    // 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim
-                    if (activeSkillTracks.Count == 0)
+                    // 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim锛堟帓闄ゆ浜¤建閬擄級
+                    if (!HasActiveSkillTracks())
                     {
                         playingSkill = false;
                     }

--
Gitblit v1.8.0