yyl
7 天以前 6a4a7304eac4b599d9d41eb18dfa12abfbb16c40
125 战斗 修复了重复多次计算吸血的问题
4个文件已修改
50 ■■■■■ 已修改文件
Main/System/Battle/BattleUtility.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Skill/MountBuffSkill.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Skill/RebornSkill.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/Skill/SkillBase.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleUtility.cs
@@ -342,7 +342,7 @@
    }
    public static BattleHurtParam CalcBattleHurtParam(SkillBase skillBase, int hitIndex, BattleObject target, 
        HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, BattleDrops battleDrops, BattleDeadPack deadPack)
        HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, BattleDrops battleDrops, BattleDeadPack deadPack, bool bSuckHp = true)
    {
        long suckHp = GetSuckHp(skillBase.tagUseSkillAttack);
        SkillConfig skillConfig = skillBase.skillConfig;
@@ -355,7 +355,8 @@
        // 计算吸血分段
        long currentHitSuckHp = 0;
        List<long> suckHpList = DivideDamageToList(skillConfig.DamageDivide, hitIndex, suckHp, ref currentHitSuckHp);
        List<long> suckHpList = bSuckHp ?
            DivideDamageToList(skillConfig.DamageDivide, hitIndex, suckHp, ref currentHitSuckHp) : new List<long>();
        // 计算反伤分段
        long currentHitReflectHp = 0;
Main/System/Battle/Skill/MountBuffSkill.cs
@@ -27,7 +27,7 @@
        OnSkillFinished();
    }
    protected override void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
    protected override void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, bool bSuckHp)
    {
        //    什么都不做 只等buff
    }
Main/System/Battle/Skill/RebornSkill.cs
@@ -26,6 +26,8 @@
            }
        }
        bool vValue = true;
        // 处理主目标列表
        foreach (var hurt in hitList)
        { 
@@ -35,20 +37,10 @@
                Debug.LogError("目标为空 target == null ObjId : " + hurt.ObjID);
                continue;
            }
            OnHitEachTarget(_hitIndex, target, hurt);
            OnHitEachTarget(_hitIndex, target, hurt, vValue);
            vValue = false;
        }
    }
    protected override void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
    {
        BattleHurtParam hurtParam = BattleUtility.CalcBattleHurtParam(this, _hitIndex, target, hurt, null, null);
        // 先调用目标受伤
        target.Hurt(hurtParam);
        // 再调用施法者吸血/反伤
        caster.OnHurtTarget(hurtParam);
    }
    public override void Cast()
    {
Main/System/Battle/Skill/SkillBase.cs
@@ -609,7 +609,6 @@
        battleField.battleRootNode.skillMaskNode.SetActive(true);
    }
    protected long suckHp = 0;
    // 命中目标回调:处理所有被命中的目标(包括主目标、弹射目标、溅射目标)
    protected virtual void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList)
@@ -619,13 +618,7 @@
        //  造成伤害前先处理血量刷新包
        HandleRefreshHP();
        suckHp = 0;
        // 统计吸血总量(主目标)
        foreach (var hurt in hitList)
        {
            suckHp += hurt.SuckHP;
        }
        bool suckHp = true;
        // 处理主目标列表
        foreach (var hurt in hitList)
@@ -637,7 +630,9 @@
                continue;
            }
            OnHitEachTarget(_hitIndex, target, hurt);
            OnHitEachTarget(_hitIndex, target, hurt, suckHp);
            suckHp = false;
            // 处理该目标的额外目标列表(如弹射伤害的平摊目标)
            if (hurt.HurtListEx != null && hurt.HurtListEx.Length > 0)
@@ -713,7 +708,7 @@
    }
    // 处理单个目标被命中:应用伤害和施法者效果
    protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
    protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, bool suckHp)
    {
        // ============ 获取临时数据(掉落、死亡等) ============
        int objID = (int)target.ObjID;
@@ -726,14 +721,8 @@
            deadPack = null;
        }
        bool clearSuckHp = tagUseSkillAttack.HurtList.ToList().IndexOf(hurt) != 0;
        // ============ 参数打包 ============
        BattleHurtParam hurtParam = BattleUtility.CalcBattleHurtParam(this, _hitIndex, target, hurt, battleDrops, deadPack);
        if (clearSuckHp)
        {
            hurtParam.caster.suckHpList.Clear();
        }
        BattleHurtParam hurtParam = BattleUtility.CalcBattleHurtParam(this, _hitIndex, target, hurt, battleDrops, deadPack, suckHp);
#if UNITY_EDITOR
        PrintHurtParamDebugInfo(hurtParam);
#endif
@@ -768,13 +757,13 @@
            HurtHPEx = hurtEx.HurtHPEx,
            CurHP = hurtEx.CurHP,
            CurHPEx = hurtEx.CurHPEx,
            SuckHP = hurtEx.SuckHP,
            SuckHP = 0,//hurtEx.SuckHP, 获取全部吸血时已经计算过 这里就不再计算
            BounceHP = 0, // HurtEx 没有反伤字段
            HurtCountEx = 0,
            HurtListEx = null
        };
        OnHitEachTarget(_hitIndex, target, hurt);
        OnHitEachTarget(_hitIndex, target, hurt, false);//获取全部吸血时已经计算过 这里就不再计算
    }
#if UNITY_EDITOR