From 507dfbffd0b99b3696274fee779d16c063508716 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 25 十二月 2025 14:21:58 +0800
Subject: [PATCH] 125 战斗 安全性判断及战报新增buff类别

---
 Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs |  132 ++++++++++++++++++++++++++++++++++++++++++++
 Main/System/Battle/BattleUtility.cs                                                         |    2 
 Main/System/Battle/BattleObject/BattleObject.cs                                             |    2 
 Main/System/Battle/UIComp/BattleHeroInfoBar.cs                                              |   13 ++--
 Main/System/Battle/Buff/BattleObjectBuffMgr.cs                                              |    7 ++
 Main/System/Battle/Define/BattleDmgInfo.cs                                                  |   15 +++-
 6 files changed, 159 insertions(+), 12 deletions(-)

diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs
index 0e8a908..d3df99c 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs
@@ -3,6 +3,7 @@
 using System;
 using System.Text;
 using System.Collections.Generic;
+using System.Linq;
 // B4 30 鏌ョ湅鎴樻姤缁撴灉 #tagSCTurnFightReportRet
 
 
@@ -167,6 +168,10 @@
             }
 #endif
 
+#if UNITY_EDITOR
+            DebugingBuffStatus(vPackList);
+#endif
+
             for (int i = 0; i < vPackList.Count; i++)
             {
                 BattleManager.Instance.PushPackage(guid, vPackList[i]);
@@ -180,6 +185,133 @@
         }
     }
 
+
+#if UNITY_EDITOR
+
+    private void DebugingBuffStatus(List<GameNetPackBasic> vPackList)
+    {
+        if (!Launch.Instance.isOpenSkillLogFile)
+            return;
+
+        HB424_tagSCTurnFightInit initPack = vPackList.OfType<HB424_tagSCTurnFightInit>().FirstOrDefault();
+
+        if (initPack == null)
+        {
+            return;
+        }
+
+        Dictionary<long, string> uidNameDict = new Dictionary<long, string>();
+
+        foreach (var fightFictionList in initPack.FactionList)
+        {
+            foreach (var fightLineup in fightFictionList.LineupList)
+            {
+                foreach (var fightObj in fightLineup.ObjList)
+                {
+                    HeroConfig heroConfig = HeroConfig.Get((int)fightObj.HeroID);
+
+                    if (heroConfig != null)
+                    {
+                        uidNameDict[fightObj.ObjID] = heroConfig.Name;
+                    }
+                }
+            }
+        }
+
+        List<HB428_tagSCBuffRefresh> buffRefreshList = vPackList.OfType<HB428_tagSCBuffRefresh>().ToList();
+        List<HB429_tagSCBuffDel> buffDelList = vPackList.OfType<HB429_tagSCBuffDel>().ToList();
+
+        List<GameNetPackBasic> buffPacks = new List<GameNetPackBasic>();
+        buffPacks.AddRange(buffRefreshList);
+        buffPacks.AddRange(buffDelList);
+
+        //  packUID浠庡皬鍒板ぇ鎺掑簭
+        buffPacks.Sort((a, b) => a.packUID.CompareTo(b.packUID));
+
+        Dictionary<string, List<GameNetPackBasic>> nameAndSortedBuffPacks = new Dictionary<string, List<GameNetPackBasic>>();
+
+        string debugInfo = "Buff鐘舵�佸彉鏇存棩蹇楋細\n";
+
+        foreach (var pack in buffPacks)
+        {
+            if (pack is HB428_tagSCBuffRefresh refreshPack)
+            {
+                nameAndSortedBuffPacks.TryGetValue(uidNameDict.ContainsKey(refreshPack.ObjID) ? uidNameDict[refreshPack.ObjID] : "Unknown", out var packList);
+
+                string heroName = uidNameDict.ContainsKey(refreshPack.ObjID) ? uidNameDict[refreshPack.ObjID] : "Unknown";
+
+                if (nameAndSortedBuffPacks.TryGetValue(heroName, out var list))
+                {
+                    list.Add(pack);
+                }
+                else
+                {
+                    list = new List<GameNetPackBasic>();
+                    nameAndSortedBuffPacks[heroName] = list;
+                    list.Add(pack);
+                }
+
+                nameAndSortedBuffPacks.ContainsKey(heroName);
+
+                SkillConfig buffConfig = SkillConfig.Get((int)refreshPack.SkillID);
+
+                string buffName = buffConfig != null ? buffConfig.SkillName : refreshPack.SkillID.ToString();
+
+                debugInfo += $"[{pack.packUID}] Buff鍒锋柊 - ObjID:{refreshPack.ObjID} HeroName:{heroName} BuffID:{refreshPack.BuffID} BuffName:{buffName} IsAdd:{refreshPack.Layer}\n";
+            }
+            else if (pack is HB429_tagSCBuffDel delPack)
+            {
+                string heroName = uidNameDict.ContainsKey(delPack.ObjID) ? uidNameDict[delPack.ObjID] : "Unknown";
+
+                HB428_tagSCBuffRefresh buffPack = buffRefreshList.Find(x => x.BuffID == delPack.BuffID);
+
+                // SkillConfig buffConfig = SkillConfig.Get((int)buffPack.SkillID);
+
+                // string buffName = buffConfig != null ? buffConfig.SkillName : buffPack.SkillID.ToString();
+
+                if (nameAndSortedBuffPacks.TryGetValue(heroName, out var list))
+                {
+                    list.Add(pack);
+                }
+                else
+                {
+                    list = new List<GameNetPackBasic>();
+                    nameAndSortedBuffPacks[heroName] = list;
+                    list.Add(pack);
+                }
+
+                debugInfo += $"[{pack.packUID}] Buff鍒犻櫎 - ObjID:{delPack.ObjID} HeroName:{heroName} BuffID:{delPack.BuffID} \n\n\n\n\n\n";
+            }
+        }
+
+        foreach (var heroPackPair in nameAndSortedBuffPacks)
+        {
+            debugInfo += $"=== {heroPackPair.Key} Buff鍙樻洿璁板綍 ===\n";
+            foreach (var pack in heroPackPair.Value)
+            {
+                if (pack is HB428_tagSCBuffRefresh refreshPack)
+                {
+                    SkillConfig buffConfig = SkillConfig.Get((int)refreshPack.SkillID);
+
+                    string buffName = buffConfig != null ? buffConfig.SkillName : refreshPack.SkillID.ToString();
+
+                    debugInfo += $"[{pack.packUID}] Buff鍒锋柊 - ObjID:{refreshPack.ObjID} BuffID:{refreshPack.BuffID} BuffName:{buffName} Layer:{refreshPack.Layer}\n";
+                }
+                else if (pack is HB429_tagSCBuffDel delPack)
+                {
+                    debugInfo += $"[{pack.packUID}] Buff鍒犻櫎 - ObjID:{delPack.ObjID} BuffID:{delPack.BuffID} \n";
+                }
+            }
+            debugInfo += "\n";
+        }
+
+        string filePath = Application.dataPath + "/../BattleReport/BuffStatusChange_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";
+        System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(filePath));
+        System.IO.File.WriteAllText(filePath, debugInfo);
+    }
+
+#endif
+
     private string PrintPackListDetail(List<GameNetPackBasic> packList, int indent, string guid = "")
     {
         string result = string.Empty;
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index bc79bbf..71a9942 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -546,7 +546,7 @@
     protected virtual BattleDmgInfo PopDamageForCaster(BattleHurtParam battleHurtParam)
     {
         // 浼犲叆 isCasterView=true 琛ㄧず杩欐槸鏂芥硶鑰呰瑙�
-        BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, battleHurtParam, isCasterView: true);
+        BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, battleHurtParam, _isCasterView: true);
         
         BattleObject boss = battleField.FindBoss();
         if (boss != null && battleField.MapID == 30020 && boss.ObjID == this.ObjID)
diff --git a/Main/System/Battle/BattleUtility.cs b/Main/System/Battle/BattleUtility.cs
index 48d888b..d347236 100644
--- a/Main/System/Battle/BattleUtility.cs
+++ b/Main/System/Battle/BattleUtility.cs
@@ -693,7 +693,7 @@
                         var skillID = hB427_TagSCUseSkill.SkillID;
                         var skillConfig = SkillConfig.Get((int)skillID);
 
-                        if ((SkillTriggerTiming)skillConfig.ClientTriggerTiming == SkillTriggerTiming.Death)
+                        if (skillConfig != null && (SkillTriggerTiming)skillConfig.ClientTriggerTiming == SkillTriggerTiming.Death)
                         {
                             for (int j = 0 ; j < deadPacks.Count; j ++)
                             {
diff --git a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
index 778f281..a79473d 100644
--- a/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
+++ b/Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -32,6 +32,13 @@
         battleObject = _battleObject;
     }
 
+#if UNITY_EDITOR
+    public List<HB428_tagSCBuffRefresh> GetBuffDataList()
+    {
+        return buffDataDict.Values.ToList();
+    }
+#endif
+
     public void Release()
     {
         onBuffChanged = null;
diff --git a/Main/System/Battle/Define/BattleDmgInfo.cs b/Main/System/Battle/Define/BattleDmgInfo.cs
index c4428e3..a00a47f 100644
--- a/Main/System/Battle/Define/BattleDmgInfo.cs
+++ b/Main/System/Battle/Define/BattleDmgInfo.cs
@@ -77,11 +77,11 @@
 
     #region Initialization
 
-    public BattleDmgInfo(string battleFieldGuid, BattleHurtParam battleHurtParam, bool isCasterView = false)
+    public BattleDmgInfo(string battleFieldGuid, BattleHurtParam battleHurtParam, bool _isCasterView = false)
     {
         this.battleFieldGuid = battleFieldGuid;
         this.battleHurtParam = battleHurtParam;
-        this.isCasterView = isCasterView;
+        this.isCasterView = _isCasterView;
         this.isLastHit = battleHurtParam.hitIndex >= battleHurtParam.skillConfig.DamageDivide.Length - 1;
         this.isFirstHit = battleHurtParam.hitIndex == 0;
         
@@ -489,13 +489,20 @@
     {
         get
         {
-            return hurtObj != null ? hurtObj.teamHero.maxHp : 0;
+            if (hurtObj == null)
+                return 0;
+
+            if (hurtObj.teamHero == null)
+                return 0;
+
+            return hurtObj.teamHero.maxHp;
         }
         set
         {
             if (hurtObj != null)
             {
-                hurtObj.teamHero.maxHp = value;
+                if (hurtObj.teamHero != null)
+                    hurtObj.teamHero.maxHp = value;
             }
         }
     }
diff --git a/Main/System/Battle/UIComp/BattleHeroInfoBar.cs b/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
index 3782201..e88285a 100644
--- a/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
+++ b/Main/System/Battle/UIComp/BattleHeroInfoBar.cs
@@ -479,15 +479,16 @@
         }
         
         // 璁板綍鍙楀嚮鑰呯殑琛�閲忓彉鍖�
-        if (dmgInfo.battleHurtParam.hurter?.hurtObj != null)
+        BattleHurtObj battleHurtObj = dmgInfo.battleHurtParam.hurter;
+        if (battleHurtObj != null && battleHurtObj.hurtObj != null)
         {
-            BattleHurtObj hurter = dmgInfo.battleHurtParam.hurter;
-            long hurterID = hurter.hurtObj.ObjID;
+            BattleObject hurter = battleHurtObj.hurtObj;
+            long hurterID = hurter.ObjID;
             
             // 鑾峰彇鏃ц閲忕敤浜庤绠椾激瀹�
-            long oldHp = hpDict.ContainsKey(hurterID) ? hpDict[hurterID] : hurter.fromHp;
-            long newHp = hurter.toHp;
-            long maxHp = hurter.maxHp;
+            long oldHp = hpDict.ContainsKey(hurterID) ? hpDict[hurterID] : battleHurtObj.fromHp;
+            long newHp = battleHurtObj.toHp;
+            long maxHp = battleHurtObj.maxHp;
             long damage = oldHp - newHp;
             
             // 鍙湁褰撳墠packUID绛変簬鏈�澶ackUID鏃舵墠鏇存柊璁板綍

--
Gitblit v1.8.0