From 1f9d43e8c0d6e72b91fc0c31eef5e3fe0897bea2 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期一, 19 一月 2026 10:29:50 +0800
Subject: [PATCH] 125 修复 部分战斗卡死

---
 Main/System/Battle/Motion/MotionBase.cs                           |   54 ++++++++++++++++++++-------
 Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs |   20 ++++------
 2 files changed, 48 insertions(+), 26 deletions(-)

diff --git a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
index e6cb300..f7335ed 100644
--- a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
+++ b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
@@ -110,19 +110,15 @@
 		if (isCast)
 			return;
 
-		Played();
-
-		if (fromSkill != null)
+		if (skillBase.caster.motionBase.CanCastSkill(skillBase.skillConfig))
 		{
-			BattleDebug.LogError("cast skill from skill : " + fromSkill.skillConfig.SkillID);
+			// Debug.LogError("cast skill id is " + skillBase.skillConfig.SkillID);
+
+			skillBase.fromSkill = fromSkill;
+
+			skillBase.Cast();
+
+			isCast = true;
 		}
-
-		// Debug.LogError("cast skill id is " + skillBase.skillConfig.SkillID);
-
-		skillBase.fromSkill = fromSkill;
-
-		skillBase.Cast();
-
-		isCast = true;
 	}
 }
\ No newline at end of file
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index f8299ba..a8c44a3 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -31,7 +31,9 @@
     private Dictionary<SkillBase, int> subSkillTrackMap = new Dictionary<SkillBase, int>();
     
     private SkeletonIllusionShadow illusionShadow;
-    private bool playingSkillAnim = false;
+    private bool playingSkill = false;
+
+    private bool playingSkillWithAnim = false;
 
     private bool isUnderControl = false;
 
@@ -85,12 +87,13 @@
         skeletonAnim = null;
         skeleton = null;
         currentTrack = null;
-        playingSkillAnim = false;
+        playingSkill = false;
+        playingSkillWithAnim = false;
     }
 
     public virtual Spine.TrackEntry PlayAnimation(MotionName motionName, bool loop, Action onComplete = null)
     {
-        if (playingSkillAnim || animState == null) return null;
+        if (playingSkill || animState == null) return null;
 
         if (currentTrack != null && !currentTrack.IsComplete && trackEntryCallbacks.TryGetValue(currentTrack, out var prevCallback))
         {
@@ -253,9 +256,11 @@
                 currentTrack = skillTrack;
             
             activeSkillTracks[trackIndex] = skillTrack;
+
+            playingSkillWithAnim = true;
         }
         
-        playingSkillAnim = true;
+        playingSkill = true;
 
         int currentLoop = 0, triggerCount = 0, failCount = 0;
         bool beginTriggered = false, finalStarted = false, finalEnded = false, middleStarted = false;
@@ -291,7 +296,13 @@
                 
                 // 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim
                 if (activeSkillTracks.Count == 0)
-                    playingSkillAnim = false;
+                {
+                    playingSkillWithAnim = false;
+                    playingSkill = false;
+                }
+                    
+
+                
                 
                 RemoveAction(frameHandler);
                 return;
@@ -336,7 +347,10 @@
                     }
                     
                     if (activeSkillTracks.Count == 0)
-                        playingSkillAnim = false;
+                    {
+                        playingSkill = false;
+                        playingSkillWithAnim = false;
+                    }
                     return;
                 }
 
@@ -358,7 +372,10 @@
                     }
                     
                     if (activeSkillTracks.Count == 0)
-                        playingSkillAnim = false;
+                    {
+                        playingSkillWithAnim = false;
+                        playingSkill = false;
+                    }
                     return;
                 }
             }
@@ -451,13 +468,18 @@
 
                     // 鍙湁褰撴病鏈夊叾浠栨椿璺冩妧鑳芥椂鎵嶅浣� playingSkillAnim
                     if (activeSkillTracks.Count == 0)
-                        playingSkillAnim = false;
+                    {
+                        playingSkill = false;
+                    }
 
                     RemoveAction(frameHandler);
                     onComplete?.Invoke();
                     skillBase.OnFinalFrameEnd();
                     if (hasAnim)
+                    {
+                        playingSkillWithAnim = false;
                         skillTrack = null;
+                    }
                 }
             }
         };
@@ -533,7 +555,7 @@
         if (entry == null)
         {
             // playingSkillAnim || animState == null
-            Debug.LogError("SetControledAnimation PlayAnimation hit failed : reason : " + (playingSkillAnim ? "playingSkillAnim" : "animState == null"));
+            Debug.LogError("SetControledAnimation PlayAnimation hit failed : reason : " + (playingSkill ? "playingSkillAnim" : "animState == null"));
             return;
         }
 
@@ -618,7 +640,7 @@
         currentTrack = null;
 
         
-        playingSkillAnim = false;
+        playingSkill = false;
         PlayAnimation(MotionName.idle, true);
     }
 
@@ -651,7 +673,7 @@
         currentTrack = null;
         
         // 5. 閲嶇疆鎵�鏈夌姸鎬佹爣蹇�
-        playingSkillAnim = false;
+        playingSkill = false;
         isUnderControl = false;
         
         // 6. 閲嶇疆鏃堕棿鐩稿叧瀛楁锛堝叧閿紒锛�
@@ -694,9 +716,13 @@
         }
     }
 
-    public bool CanCastSkill()
+    public bool CanCastSkill(SkillConfig skillConfig)
     {
-        //  涓婃閲婃斁鐨勬妧鑳� 閲婃斁缁撴潫浜嗘病鏈�
-        return !playingSkillAnim;
+        return !playingSkillWithAnim || string.IsNullOrEmpty(skillConfig.SkillMotionName);
+    }
+
+    public bool CanStartDeath()
+    {
+        return !playingSkillWithAnim;
     }
 }
\ No newline at end of file

--
Gitblit v1.8.0