From 6d2304d5ae39a4d78b30204dfa8ad9db2f054336 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期日, 14 九月 2025 10:35:45 +0800
Subject: [PATCH] 125 【战斗】战斗系统 修复技能播放偶尔会出现死循环的bug

---
 Main/System/Battle/BattleObject/BattleObject.cs |   11 +++++++----
 Main/System/Battle/Skill/SkillBase.cs           |   11 ++++++-----
 Main/System/Battle/Motion/MotionBase.cs         |   29 ++++++++++++++++++++++++++---
 3 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 54572e5..dfe291d 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -265,10 +265,12 @@
 
     public virtual void Hurt(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
     {
-        PopDamage(damageValues, _totalDamage, hurt, skillConfig);
+        BattleDmgInfo dmgInfo = PopDamage(damageValues, _totalDamage, hurt, skillConfig);
 
-        motionBase.PlayAnimation(MotionName.hit, false);
-
+        if (dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage())
+        {
+            motionBase.PlayAnimation(MotionName.hit, false);
+        }
     }       
 
     public void SuckHp(uint suckHP, SkillConfig skillConfig)
@@ -334,7 +336,7 @@
     }
 
     // 浼ゅ杩樿鐪� 鏄惁闂伩 鏆村嚮 and so on 闇�瑕佹湁涓�涓狣amageType 鏈嶅姟鍣ㄥ簲璇ヤ細缁�
-    protected virtual void PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
+    protected virtual BattleDmgInfo PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
     {
         BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, damageValues, this, hurt, skillConfig);
 
@@ -356,6 +358,7 @@
 
         // YYL TODO 鏄惁闇�瑕佹寕鍦ㄥ湪鑷韩鐨刦ollow鐐逛笂
         EventBroadcast.Instance.Broadcast(EventName.BATTLE_DAMAGE_TAKEN, battleDmgInfo);
+        return battleDmgInfo;
     }
 
     public RectTransform GetAliasTeamNode()
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index b5fb81b..40d4d06 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -118,8 +118,8 @@
         {
             if (trackEntryCompleteDict.TryGetValue(currentTrackEntry, out var __onComplete))
             {
-                __onComplete?.Invoke();
                 trackEntryCompleteDict.Remove(currentTrackEntry);
+                __onComplete?.Invoke();
             }
             currentTrackEntry = null;
         }
@@ -336,8 +336,8 @@
         // 鍙皟鐢ㄦ湰娆rackEntry鐨勫洖璋�
         if (trackEntryCompleteDict.TryGetValue(trackEntry, out var cb))
         {
-            cb?.Invoke();
             trackEntryCompleteDict.Remove(trackEntry);
+            cb?.Invoke();
         }
     }
 
@@ -345,10 +345,33 @@
 
     public virtual void Run()
     {
+// #if UNITY_EDITOR
+//         List<int> removeIndex = new List<int>();
+// #endif
         for (int i = runActionList.Count - 1; i >= 0; i--)
         {
-            runActionList[i]?.Invoke();
+// #if UNITY_EDITOR
+//             try
+//             {
+// #endif
+                runActionList[i]?.Invoke();
+// #if UNITY_EDITOR
+//             }
+//             catch (System.Exception ex)
+//             {
+//                 removeIndex.Add(i);
+//                 BattleDebug.LogError($"鎵цRunAction鏃跺彂鐢熷紓甯�: {ex.Message}\n{ex.StackTrace}");
+//             }
+// #endif
         }
+
+// #if UNITY_EDITOR
+//         // 绉婚櫎澶辫触鐨凙ction
+//         for (int i = 0; i < removeIndex.Count; i++)
+//         {
+//             runActionList.RemoveAt(removeIndex[i]);
+//         }
+// #endif
     }
 
     public virtual void Pause()
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index cd4c91d..2ce14ec 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -151,12 +151,12 @@
 		// battleField.battleTweenMgr.OnPlayTween(tweener);
 	}
 
-	protected void MoveToTarget(RectTransform target, Vector2 offset, Action onComplete = null)
+	protected void MoveToTarget(RectTransform target, Vector2 offset, Action _onComplete = null)
 	{
 		//	鍘熷湴閲婃斁
 		if (skillConfig.CastDistance >= 9999)
 		{
-			onComplete?.Invoke();
+			_onComplete?.Invoke();
 			return;
 		}
 
@@ -164,7 +164,7 @@
 		var tweener = BattleUtility.MoveToTarget(caster.heroRectTrans, target, offset, () =>
 		{
 			caster.motionBase.PlayAnimation(MotionName.idle, true);
-			onComplete?.Invoke();
+			_onComplete?.Invoke();
 		});
 		battleField.battleTweenMgr.OnPlayTween(tweener);
 	}
@@ -236,9 +236,9 @@
 					TurnBack(
 						() =>
 						{
+							RectTransform rectTransform = battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum);
 							//	鍥炲埌鍘熸潵鐨勪綅缃�
-							MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, 
-								OnAttackFinish);
+							MoveToTarget(rectTransform, Vector2.zero, OnAttackFinish);
 						}
 					, -1f);
 				});
@@ -404,6 +404,7 @@
 	protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
 	{
 		// 浼ゅ鍒嗗竷 (涓囧垎姣�)
+		// Debug.LogError("skillConfig.DamageDivide.Count " + skillConfig.DamageDivide.Length + " _hitIndex " + _hitIndex);
 		int[] damageDivide = skillConfig.DamageDivide[_hitIndex];
 
 		long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);

--
Gitblit v1.8.0