yyl
4 天以前 b75bf9422e886b9bda37d5e3e2acf975b304ffc4
Main/System/Battle/Skill/SkillBase.cs
@@ -421,6 +421,9 @@
    // 命中目标回调:处理所有被命中的目标
    protected virtual void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList)
    {
        //  造成伤害前先处理血量刷新包
        HandleRefreshHP();
        foreach (var hurt in hitList)
        {
            BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
@@ -458,7 +461,7 @@
        // 计算总伤害和分段伤害列表
        long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
        List<long> damageList = BattleUtility.DivideDamageToList(damageDivide.ToArray(), totalDamage);
        List<long> damageList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, totalDamage);
        // ============ 第二步:刷新实际血量 ============
        long fromHp = target.teamHero.curHp;
@@ -474,7 +477,7 @@
        // 更新目标血量
        target.teamHero.curHp = toHp;
#if UNITY_EDITOR
        BattleDebug.LogError(
            (caster.Camp == BattleCamp.Red ? "【红方行动】" : "【蓝方行动】") + "\n" +
@@ -485,13 +488,9 @@
            $"血量变化: {fromHp} -> {toHp}"
        );
#endif
        
        // 只在最后一击时同步HP刷新包
        bool isLastHit = _hitIndex >= skillConfig.DamageDivide.Length - 1;
        if (isLastHit)
        {
            HandleRefreshHP(hurt);
        }
        // ============ 第三步:获取临时数据(掉落、死亡等) ============
        int objID = (int)target.ObjID;
@@ -507,7 +506,7 @@
    }
    // 处理HP刷新包(简化逻辑)
    private void HandleRefreshHP(HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
    private void HandleRefreshHP()
    {
        // 查找HP刷新包
        HB419_tagSCObjHPRefresh refreshPack = BattleUtility.FindObjHPRefreshPack(packList);