From a38e02687f52e6d81e6fb6c1dcbf85ee76938325 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 24 十二月 2025 14:23:43 +0800
Subject: [PATCH] 125 战斗 修复因为自己技能造成自身死亡的卡死问题

---
 Main/System/Battle/Skill/SkillBase.cs |   35 +++++++++++++++++++++++++++++++++++
 1 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index ab7da14..ef7132f 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -27,6 +27,9 @@
     protected List<SkillRecordAction> otherSkillActionList = new List<SkillRecordAction>();
     protected List<H0704_tagRolePackRefresh> dropPackList = new List<H0704_tagRolePackRefresh>();
     protected List<HB405_tagMCAddExp> expPackList = new List<HB405_tagMCAddExp>();
+
+    protected List<BattleDeadPack> endDeadPackList = new List<BattleDeadPack>();
+
     protected bool moveFinished = false;
     public SkillBase fromSkill;
     public bool isPlay = false;
@@ -48,6 +51,12 @@
         tagUseSkillAttack = vNetData;
         battleField = _battleField;
         packList = _packList;
+
+        // 娉ㄥ唽姝e湪閲婃斁鐨勬妧鑳�
+        if (battleField != null && caster != null)
+        {
+            battleField.AddCastingSkill(caster.ObjID, this);
+        }
 
         SafetyCheck();
 #if UNITY_EDITOR
@@ -711,6 +720,12 @@
         tempDropList.TryGetValue(objID, out BattleDrops battleDrops);
         tempDeadPackList.TryGetValue(objID, out BattleDeadPack deadPack);
 
+        // 濡傛灉鐩爣姝e湪閲婃斁鎶�鑳斤紝璺宠繃姝讳骸澶勭悊锛堝欢杩熷埌鎶�鑳界粨鏉燂級
+        if (battleField != null && battleField.IsCastingSkill(target.ObjID))
+        {
+            deadPack = null;
+        }
+
         bool clearSuckHp = tagUseSkillAttack.HurtList.ToList().IndexOf(hurt) != 0;
 
         // ============ 鍙傛暟鎵撳寘 ============
@@ -736,8 +751,14 @@
         // ============ 鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
         int objID = (int)target.ObjID;
         tempDropList.TryGetValue(objID, out BattleDrops battleDrops);
+
         tempDeadPackList.TryGetValue(objID, out BattleDeadPack deadPack);
 
+        // 濡傛灉鐩爣姝e湪閲婃斁鎶�鑳斤紝璺宠繃姝讳骸澶勭悊锛堝欢杩熷埌鎶�鑳界粨鏉燂級
+        if (battleField != null && battleField.IsCastingSkill(target.ObjID))
+        {
+            deadPack = null;
+        }
         // ============ 鍙傛暟鎵撳寘锛堝皢 tagSCUseSkillHurtEx 杞崲涓� tagSCUseSkillHurt锛�============
         HB427_tagSCUseSkill.tagSCUseSkillHurt hurt = new HB427_tagSCUseSkill.tagSCUseSkillHurt
         {
@@ -1062,6 +1083,14 @@
                 return false;
             }
 
+            // 鎶�鑳藉畬鍏ㄧ粨鏉燂紝绉婚櫎鎶�鑳芥敞鍐屽苟瑙﹀彂寤惰繜鐨勬浜″垽瀹�
+            if (battleField != null && caster != null)
+            {
+                battleField.RemoveCastingSkill(caster.ObjID, this);
+                
+                battleField.OnObjsDead(new List<BattleDeadPack>(tempDeadPackList.Values));
+            }
+
             return true;
         }
 
@@ -1075,6 +1104,12 @@
         if (isFinished)
             return;
 
+        // 绉婚櫎鎶�鑳芥敞鍐�
+        if (battleField != null && caster != null)
+        {
+            battleField.RemoveCastingSkill(caster.ObjID, this);
+        }
+
         // 1. 寮哄埗缁撴潫鎶�鑳芥晥鏋�
         skillEffect?.ForceFinished();
         skillEffect = null;

--
Gitblit v1.8.0