From 802642221571f5586999bd3504689171cd607284 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 21 一月 2026 10:54:40 +0800
Subject: [PATCH] 125 战斗 漏传部分

---
 Main/System/Battle/Skill/SkillBase.cs |  287 ++++++++++++++++++++++-----------------------------------
 1 files changed, 111 insertions(+), 176 deletions(-)

diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 369de65..f95cfa8 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -24,7 +24,9 @@
     protected RectTransform targetNode = null; // 鐩爣鑺傜偣
     public BattleObject caster = null; // 鏂芥硶鑰�
     protected List<GameNetPackBasic> packList;
-    protected List<SkillRecordAction> otherSkillActionList = new List<SkillRecordAction>();
+
+    protected List<RecordAction> currentWaitingSkill = new List<RecordAction>();
+
     protected List<H0704_tagRolePackRefresh> dropPackList = new List<H0704_tagRolePackRefresh>();
     protected List<HB405_tagMCAddExp> expPackList = new List<HB405_tagMCAddExp>();
 
@@ -63,6 +65,11 @@
         }
 
         SafetyCheck();
+    }
+
+    public virtual void AfterAddToQueue()
+    {
+        
     }
 
     //  璁剧疆鐖禦ecordAction
@@ -187,22 +194,7 @@
             return;
         }
 
-        if (otherSkillActionList.Count > 0)
-        {
-            for (int i = otherSkillActionList.Count - 1; i >= 0; i--)
-            {
-                var action = otherSkillActionList[i];
-                if (action.IsFinished())
-                {
-                    otherSkillActionList.RemoveAt(i);
-                    OnSkillFinished();
-                }
-                else if (moveFinished)
-                {
-                    action.Run();
-                }
-            }
-        }
+
     }
 
     protected void ShadowIllutionCreate(bool create)
@@ -492,11 +484,13 @@
             return;
         }
 
+        ProcessSubSkill();
+
         HandleDead();
 
         skillEffect = SkillEffectFactory.CreateSkillEffect(this, caster, skillConfig, tagUseSkillAttack);
         skillEffect.Play(OnHitTargets);
-        ProcessSubSkill();
+        
 
         isPlay = true;
     }
@@ -506,53 +500,52 @@
         // 鎸塸ackUID鎺掑簭鎵�鏈夊瓙鎶�鑳�
         var allSubSkills = new List<(ulong packUID, SkillRecordAction action)>();
         
-        foreach (var subSkillPack in tagUseSkillAttack.subSkillList)
+        List<GameNetPackBasic> removePackList = new List<GameNetPackBasic>();
+
+        foreach (var pack in packList)
         {
-            SkillRecordAction recordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, new List<GameNetPackBasic>() { subSkillPack });
-            if (recordAction != null)
+            if (pack is HB427_tagSCUseSkill skillPack)
             {
-                recordAction.fromSkill = this;
-                allSubSkills.Add((subSkillPack.packUID, recordAction));
+                SkillConfig ssc = SkillConfig.Get((int)skillPack.SkillID);
+                if (!string.IsNullOrEmpty(ssc.SkillMotionName))
+                {
+                    break;
+                }
+                SkillRecordAction skillRecordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, new List<GameNetPackBasic> { skillPack });
+                allSubSkills.Add((skillPack.packUID, skillRecordAction));
+                removePackList.Add(pack);
+            }
+            else if (pack is HB422_tagMCTurnFightObjDead dead)
+            {
+                break;
+            }
+            else if (pack is CustomHB426CombinePack combinePack)
+            {
+                HB427_tagSCUseSkill sp = combinePack.GetMainHB427SkillPack();
+                SkillConfig ssc = SkillConfig.Get((int)sp.SkillID);
+
+                if (!string.IsNullOrEmpty(ssc.SkillMotionName))
+                {
+                    break;
+                }
+                SkillRecordAction skillRecordAction = combinePack.CreateSkillAction();
+                allSubSkills.Add((sp.packUID, skillRecordAction));
+                removePackList.Add(pack);
             }
         }
-        tagUseSkillAttack.subSkillList.Clear();
-        
-        foreach (var subCombinePack in tagUseSkillAttack.subSkillCombinePackList)
+
+        for (int i = 0; i < removePackList.Count; i++)
         {
-            SkillRecordAction recordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, subCombinePack.packList);
-            if (recordAction != null)
-            {
-                recordAction.fromSkill = this;
-                ulong packUID = subCombinePack.packList.Count > 0 ? GetPackUID(subCombinePack.packList[0]) : 0;
-                allSubSkills.Add((packUID, recordAction));
-            }
+            packList.Remove(removePackList[i]);
         }
-        tagUseSkillAttack.subSkillCombinePackList.Clear();
 
         // 鎸塸ackUID鎺掑簭
         allSubSkills.Sort((a, b) => a.packUID.CompareTo(b.packUID));
 
-        // 渚濇娣诲姞鍒皉ecordPlayer锛屾瘡涓瓑寰呭墠涓�涓畬鎴�
-        RecordAction waitingRecordAction = null;
         foreach (var (packUID, recordAction) in allSubSkills)
         {
-            // 銆愪娇鐢� BattleField.recordPlayer銆�
-            // 鍘熷洜锛氬瓙鎶�鑳芥槸鐙珛鐨凷killRecordAction锛屽簲璇ユ槸椤跺眰RecordAction锛岀敱BattleField鐨勪富RecordPlayer绠$悊
-            // 閫氳繃璁剧疆鐖跺瓙鍏崇郴鍜學aitingPlay锛屽彲浠ユ帶鍒跺瓙鎶�鑳界殑鎵ц鏃舵満
-            if (waitingRecordAction != null)
-            {
-                //  姣忎釜閮藉簲璇ョ瓑鍓嶄竴涓粨鏉熷悗
-                battleField.recordPlayer.ImmediatelyPlay(recordAction, waitingRecordAction, true);
-            }
-            else
-            {
-                battleField.recordPlayer.ImmediatelyPlay(recordAction, parentRecordAction, true);
-            }
-
-            if (recordAction.IsNeedWaiting())
-            {
-                waitingRecordAction = recordAction;
-            }
+            battleField.recordPlayer.ImmediatelyPlay(recordAction);
+            currentWaitingSkill.Add(recordAction);
         }
     }
 
@@ -815,7 +808,14 @@
 #endif
 
         // 鍏堣皟鐢ㄧ洰鏍囧彈浼�
-        target.Hurt(hurtParam, parentRecordAction);
+        var recordAc = target.Hurt(hurtParam, parentRecordAction);
+
+        if (null != recordAc)
+        {
+            tempDeadPackList.Remove(hurtParam.hurter.hurtObj.ObjID);
+            battleField.recordPlayer.ImmediatelyPlay(recordAc, parentRecordAction, true);
+            currentWaitingSkill.Add(recordAc);
+        }
         
         // 鍐嶈皟鐢ㄦ柦娉曡�呭惛琛�/鍙嶄激
         caster.OnHurtTarget(hurtParam);
@@ -965,66 +965,6 @@
             foreach (var pack in packsToRemove)
             {
                 packList.Remove(pack);
-            }
-            
-            // 2. 鏀堕泦 subSkillList 涓� packUID 澶т簬姝讳骸鍖呯殑瀛愭妧鑳�
-            if (tagUseSkillAttack.subSkillList != null && tagUseSkillAttack.subSkillList.Count > 0)
-            {
-                var subSkillsToRemove = new List<HB427_tagSCUseSkill>();
-                foreach (var subSkillPack in tagUseSkillAttack.subSkillList)
-                {
-                    ulong subSkillUID = GetPackUID(subSkillPack);
-                    if (subSkillUID > maxDeathPackUID)
-                    {
-                        BattleDebug.LogError($"SkillBase.HandleDead: 浠巗ubSkillList鏀堕泦姝讳骸鍚庣殑鍖� - Type: {subSkillPack.GetType().Name}, UID: {subSkillUID}");
-                        foreach (var deadPack in deadPackList)
-                        {
-                            deadPack.packListAfterDeath.Add(subSkillPack);
-                        }
-                        subSkillsToRemove.Add(subSkillPack);
-                    }
-                }
-                
-                // 浠� subSkillList 涓Щ闄よ繖浜涘瓙鎶�鑳�
-                foreach (var subSkill in subSkillsToRemove)
-                {
-                    tagUseSkillAttack.subSkillList.Remove(subSkill);
-                }
-            }
-            
-            // 3. 鏀堕泦 subSkillCombinePackList 涓� packUID 澶т簬姝讳骸鍖呯殑缁勫悎鍖�
-            if (tagUseSkillAttack.subSkillCombinePackList != null && tagUseSkillAttack.subSkillCombinePackList.Count > 0)
-            {
-                var combinePacksToRemove = new List<CustomHB426CombinePack>();
-                foreach (var subCombinePack in tagUseSkillAttack.subSkillCombinePackList)
-                {
-                    // 鎵惧埌缁勫悎鍖呬腑鐨勬渶灏� packUID锛堢粍鍚堝寘鐨� packUID 浠ョ涓�涓寘涓哄噯锛�
-                    ulong combinePackUID = 0;
-                    if (subCombinePack.packList != null && subCombinePack.packList.Count > 0)
-                    {
-                        combinePackUID = GetPackUID(subCombinePack.packList[0]);
-                    }
-                    
-                    if (combinePackUID > maxDeathPackUID)
-                    {
-                        BattleDebug.LogError($"SkillBase.HandleDead: 浠巗ubSkillCombinePackList鏀堕泦姝讳骸鍚庣殑鍖� - UID: {combinePackUID}, 鍖呭惈 {subCombinePack.packList.Count} 涓瓙鍖�");
-                        // 灏嗙粍鍚堝寘涓殑鎵�鏈夊寘閮芥坊鍔犲埌 packListAfterDeath
-                        foreach (var pack in subCombinePack.packList)
-                        {
-                            foreach (var deadPack in deadPackList)
-                            {
-                                deadPack.packListAfterDeath.Add(pack);
-                            }
-                        }
-                        combinePacksToRemove.Add(subCombinePack);
-                    }
-                }
-                
-                // 浠� subSkillCombinePackList 涓Щ闄よ繖浜涚粍鍚堝寘
-                foreach (var combinePack in combinePacksToRemove)
-                {
-                    tagUseSkillAttack.subSkillCombinePackList.Remove(combinePack);
-                }
             }
         }
 
@@ -1242,12 +1182,17 @@
             if (!skillEffect.IsFinished()) return false;
         }
 
-        if (otherSkillActionList.Count > 0)
+        if (currentWaitingSkill.Count > 0)
         {
-            foreach (var action in otherSkillActionList)
+            if (currentWaitingSkill.Any(s => !s.IsFinished()))
             {
-                if (!action.IsFinishedForJudge()) return false;
+                return false;
             }
+        }
+        
+        if (parentRecordAction != null && parentRecordAction.GetInnerRecordPlayer().IsPlaying())
+        {
+            return false;
         }
 
         if (isFinished && moveFinished)
@@ -1290,18 +1235,14 @@
         }
 
         // 妫�鏌ュ叾浠栨妧鑳藉姩浣滄槸鍚﹀畬鎴�
-        if (otherSkillActionList.Count > 0)
+        if (currentWaitingSkill.Count > 0)
         {
-            for (int i = otherSkillActionList.Count - 1; i >= 0; i--)
+            if (currentWaitingSkill.Any(s => s.IsFinished()))
             {
-                var action = otherSkillActionList[i];
-                if (action.IsFinished())
-                {
-                    otherSkillActionList.RemoveAt(i);
-                    OnSkillFinished();
-                }
+                currentWaitingSkill.RemoveAll(s => s.IsFinished());
+                OnSkillFinished();
             }
-            if (otherSkillActionList.Count > 0)
+            else
             {
                 tempRetValue = false;
             }
@@ -1312,6 +1253,9 @@
             return false;
         }
 
+
+
+
         // 妫�鏌ユ渶缁堝畬鎴愮姸鎬�
         if (isFinished && moveFinished)
         {
@@ -1321,13 +1265,24 @@
                 return false;
             }
 
+            //  濡傛灉鑷繁鍐呴儴鐨剅ecora action鐨� inner record player杩樻湁娌℃墽琛屽畬鐨勫寘 涔熸槸杩斿洖false
+            if (parentRecordAction != null && parentRecordAction.GetInnerRecordPlayer().IsPlaying())
+            {
+                return false;
+            }
+
             // 鎶�鑳藉畬鍏ㄧ粨鏉燂紝绉婚櫎鎶�鑳芥敞鍐屽苟瑙﹀彂寤惰繜鐨勬浜″垽瀹�
             if (battleField != null && caster != null)
             {
                 battleField.RemoveCastingSkill(caster.ObjID, this);
                 
                 //  浼犻�抪arentRecordAction锛岃姝讳骸鎶�鑳界瓑寰呭綋鍓嶆妧鑳藉畬鎴�
-                battleField.OnObjsDead(new List<BattleDeadPack>(tempDeadPackList.Values));
+                DeathRecordAction recordAction = battleField.OnObjsDead(new List<BattleDeadPack>(tempDeadPackList.Values));
+                if (null != recordAction)
+                {
+                    parentRecordAction.GetInnerRecordPlayer().ImmediatelyPlay(recordAction, parentRecordAction, true);
+                    return false;
+                }
             }
 
             return true;
@@ -1350,39 +1305,25 @@
         }
 
         //  浼犻�抪arentRecordAction锛岃姝讳骸鎶�鑳界瓑寰呭綋鍓嶆妧鑳藉畬鎴�
-        battleField.OnObjsDead(new List<BattleDeadPack>(tempDeadPackList.Values));
+        RecordAction rc = battleField.OnObjsDead(new List<BattleDeadPack>(tempDeadPackList.Values));
+        if (null != rc)
+        {
+            parentRecordAction.GetInnerRecordPlayer().ImmediatelyPlay(rc);
+        }
 
         // 1. 寮哄埗缁撴潫鎶�鑳芥晥鏋�
         skillEffect?.ForceFinished();
         skillEffect = null;
-
-        foreach (var subSkillPack in tagUseSkillAttack.subSkillList)
-        {
-            SkillRecordAction recordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, new List<GameNetPackBasic>() { subSkillPack });
-            recordAction.fromSkill = this;
-            otherSkillActionList.Add(recordAction);
-            
-            // 銆愪娇鐢� BattleField.recordPlayer銆�
-            // 鍘熷洜锛氬嵆浣垮湪ForceFinished涓紝瀛愭妧鑳戒篃鏄《灞俁ecordAction锛屽簲璇ョ敱涓籖ecordPlayer绠$悊
-            // 杩欎簺瀛愭妧鑳戒細绔嬪嵆琚獸orceFinish锛屼絾浠嶉渶瑕佹纭殑鎾斁鍣ㄤ笂涓嬫枃
-            battleField.recordPlayer.ImmediatelyPlay(recordAction, parentRecordAction, true);
-        }
-        tagUseSkillAttack.subSkillList.Clear();
-        foreach (var subCombinePack in tagUseSkillAttack.subSkillCombinePackList)
-        {
-            SkillRecordAction recordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, subCombinePack.packList);
-            recordAction.fromSkill = this;
-            otherSkillActionList.Add(recordAction);
-            
-            // 銆愪娇鐢� BattleField.recordPlayer銆�
-            // 鍘熷洜锛氬嵆浣垮湪ForceFinished涓紝瀛愭妧鑳戒篃鏄《灞俁ecordAction锛屽簲璇ョ敱涓籖ecordPlayer绠$悊
-            battleField.recordPlayer.ImmediatelyPlay(recordAction, parentRecordAction, true);
-        }
-        tagUseSkillAttack.subSkillCombinePackList.Clear();
         
         // 2. 寮哄埗缁撴潫鎵�鏈夊瓙鎶�鑳藉姩浣�
-        otherSkillActionList.ForEach(action => action.ForceFinish());
-        otherSkillActionList.Clear();
+        if (currentWaitingSkill.Count > 0)
+        {
+            foreach (var skill in currentWaitingSkill)
+            {
+                skill.ForceFinish();
+            }
+            currentWaitingSkill.Clear();
+        }
 
         // 3. 娓呯悊 DOTween 鍔ㄧ敾锛堥槻姝㈢Щ鍔ㄥ洖璋冨湪鎴樻枟缁撴潫鍚庢墽琛岋級
         if (caster != null && caster.heroRectTrans != null)
@@ -1464,8 +1405,6 @@
             }
             else
             {
-                if (pack is CustomB421ActionPack actionPack)
-                    actionPack.Distribute();
                 // 銆愪娇鐢� parentRecordAction.innerRecordPlayer銆�
                 // 鍘熷洜锛欶orceFinished鏃跺墿浣欑殑鍖呬篃鏄妧鑳藉唴閮ㄤ骇鐢熺殑锛屽簲璇ョ敱innerRecordPlayer绠$悊
                 // 杩欐牱鍙互纭繚鍗充娇寮哄埗缁撴潫锛屽寘鐨勫鐞嗕篃鍦ㄦ纭殑涓婁笅鏂囦腑
@@ -1493,20 +1432,14 @@
             }
 
             // 楠岃瘉鍏朵粬鎶�鑳藉姩浣滄槸鍚﹀畬鎴�
-            if (otherSkillActionList.Count > 0)
+            if (currentWaitingSkill.Count > 0)
             {
-                bool hasFinishedAction = false;
-                for (int i = otherSkillActionList.Count - 1; i >= 0; i--)
-                {
-                    var action = otherSkillActionList[i];
-                    if (action.IsFinished())
-                    {
-                        otherSkillActionList.RemoveAt(i);
-                        hasFinishedAction = true;
-                    }
-                }
+                bool hasFinishedAction = currentWaitingSkill.All(s => s.IsFinished());
+
                 if (hasFinishedAction)
                 {
+                    // 淇姝诲惊鐜細瀹屾垚鍚庨渶瑕佹竻绌� currentWaitingSkill
+                    currentWaitingSkill.Clear();
                     continue; // 浣跨敤continue浠f浛閫掑綊璋冪敤
                 }
                 return;
@@ -1534,17 +1467,24 @@
     
     protected virtual bool ResolvePackList()
     {
+        if (currentWaitingSkill.Count > 0)
+        {
+            return false;
+        }
+
         while (packList.Count > 0)
         {
             var pack = packList[0];
             packList.RemoveAt(0);
 
+
             if (pack is CustomHB426CombinePack combinePack && combinePack.startTag.Tag.StartsWith("Skill_"))
             {
                 BattleDebug.LogError("other skill casting " + combinePack.startTag.Tag);
-                var otherSkillAction = combinePack.CreateSkillAction();
-                otherSkillAction.fromSkill = this;
-                otherSkillActionList.Add(otherSkillAction);
+                var skillRecordAction = combinePack.CreateSkillAction();
+                skillRecordAction.fromSkill = this;
+                currentWaitingSkill.Add(skillRecordAction);
+                parentRecordAction.GetInnerRecordPlayer().PlayRecord(skillRecordAction);
                 return false;
             }
             else if (IsBuffPack(pack))
@@ -1572,11 +1512,6 @@
                 buffPackCollections.Clear();
                 continue;
             }
-
-            if (pack is CustomB421ActionPack actionPack)
-            {
-                actionPack.Distribute();
-            }
             else
             {
                 // 銆愪娇鐢� parentRecordAction.innerRecordPlayer銆�
@@ -1594,7 +1529,7 @@
     {
         tempDropList?.Clear();
         tempDeadPackList?.Clear();
-        otherSkillActionList?.Clear();
+        currentWaitingSkill?.Clear();
         dropPackList?.Clear();
         expPackList?.Clear();
         buffPackCollections?.Clear();

--
Gitblit v1.8.0