yyl
2025-12-25 507dfbffd0b99b3696274fee779d16c063508716
125 战斗 安全性判断及战报新增buff类别
6个文件已修改
171 ■■■■■ 已修改文件
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB430_tagSCTurnFightReport.cs 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleObject/BattleObject.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleUtility.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Buff/BattleObjectBuffMgr.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Define/BattleDmgInfo.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/UIComp/BattleHeroInfoBar.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
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)
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 ++)
                            {
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;
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;
            }
        }
    }
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等于最大packUID时才更新记录