From f59b136d28cbfc0b9de9bced637845ce35345d95 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 21 一月 2026 20:04:26 +0800
Subject: [PATCH] 125 战斗 处理卡死问题

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

diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index a8c44a3..336772a 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -15,6 +15,8 @@
     };
 
     private Dictionary<Spine.TrackEntry, Action> trackEntryCallbacks = new Dictionary<Spine.TrackEntry, Action>();
+
+    private Dictionary<int, SkillBase> skillTrackDict = new Dictionary<int, SkillBase>();
     public Action OnAttackAnimationComplete;
     public Action OnHitAnimationComplete;
     private List<Action> runningActions = new List<Action>();
@@ -89,6 +91,7 @@
         currentTrack = null;
         playingSkill = false;
         playingSkillWithAnim = false;
+        skillTrackDict.Clear();
     }
 
     public virtual Spine.TrackEntry PlayAnimation(MotionName motionName, bool loop, Action onComplete = null)
@@ -181,7 +184,6 @@
     private Spine.TrackEntry ExecuteSkillAnim(SkillConfig skillConfig, SkillBase skillBase, Action onComplete,
         Spine.Animation targetAnim, bool hasAnim, bool isSubSkill)
     {
-        bool isPangdeSkill = 1003020 == skillConfig.SkillID;
 
         int loopCount = skillConfig.LoopCount;
         //  鍓嶆憞
@@ -224,7 +226,8 @@
         
         if (hasAnim)
         {
-            if (null != skillTrack)
+            // 妫�鏌ヨ建閬撴槸鍚﹀凡琚崰鐢紙淇锛氬師鏉ユ鏌� null != skillTrack 姘歌繙涓� false锛�
+            if (activeSkillTracks.ContainsKey(trackIndex) || skillTrackDict.ContainsKey(trackIndex))
             {
                 //绛夊緟涓婁竴鎶�鑳藉姩鐢荤粨鏉� 鏆傛椂澶勭悊鍔炴硶
                 UniTaskExtension.DelayFrames((GameObject)null, 1, () =>
@@ -250,6 +253,14 @@
                 }
                 return null;
             }
+
+            if (skillTrackDict.ContainsKey(trackIndex))
+            {
+                skillBase.ForceFinished();
+                skillTrackDict.Remove(trackIndex);
+            }
+
+            skillTrackDict[trackIndex] = skillBase;
             
             // 鍙湁涓绘妧鑳芥墠鏇存柊 currentTrack
             if (!isSubSkill)
@@ -279,6 +290,7 @@
         {
             if (skillBase.IsFinished())
             {
+                skillTrackDict.Remove(trackIndex);
                 // 娓呯悊骞堕��鍑猴紙淇濊瘉鐘舵�佷竴鑷达級
                 if (skillTrack != null && activeSkillTracks.ContainsKey(trackIndex))
                 {
@@ -332,6 +344,8 @@
                 // 妫�鏌ュ綋鍓嶈建閬撴槸鍚﹁鏂版妧鑳借鐩�
                 if (!activeSkillTracks.ContainsKey(trackIndex) || activeSkillTracks[trackIndex] != skillTrack)
                 {
+                    skillTrackDict[trackIndex].ForceFinished();
+                    skillTrackDict.Remove(trackIndex);
                     Debug.LogError("鎶�鑳藉姩鐢昏鎵撴柇锛屽己鍒剁粨鏉� " + skillConfig.SkillID);
                     skillBase.ForceFinished();
 
@@ -471,6 +485,8 @@
                     {
                         playingSkill = false;
                     }
+
+                    skillTrackDict.Remove(trackIndex);
 
                     RemoveAction(frameHandler);
                     onComplete?.Invoke();
@@ -627,6 +643,13 @@
         runningActions.Clear();
         activeSkillTracks.Clear();
         
+        // 寮哄埗缁撴潫鎵�鏈夋鍦ㄦ墽琛岀殑鎶�鑳�
+        foreach (var kv in skillTrackDict)
+        {
+            kv.Value?.ForceFinished();
+        }
+        skillTrackDict.Clear();
+        
         // 閲嶇疆瀛愭妧鑳借建閬撴睜
         if (availableSubTracks == null)
             availableSubTracks = new Queue<int>();
@@ -659,6 +682,13 @@
         
         activeSkillTracks.Clear();
         
+        // 寮哄埗缁撴潫鎵�鏈夋鍦ㄦ墽琛岀殑鎶�鑳斤紙澶嶆椿鏃堕渶瑕佹竻鐞嗘墍鏈夋妧鑳界姸鎬侊級
+        foreach (var kv in skillTrackDict)
+        {
+            kv.Value?.ForceFinished();
+        }
+        skillTrackDict.Clear();
+        
         // 3. 閲嶇疆瀛愭妧鑳借建閬撴睜
         if (availableSubTracks == null)
             availableSubTracks = new Queue<int>();

--
Gitblit v1.8.0