yyl
4 天以前 39f07767d2d7d1533ef07f384d35da75517d5f65
Main/System/Battle/Define/BattleDmgInfo.cs
@@ -16,12 +16,14 @@
{
    public string battleFieldGuid { get; private set; }
    public List<long> damageList { get; private set; }
    public BattleObject hurtObj { get; private set; }
    public HB427_tagSCUseSkill.tagSCUseSkillHurt hurt { get; private set; }
    public BattleHurtParam battleHurtParam { get; private set; }
    public List<long> damageList { get { return battleHurtParam.damageList; } }
    public BattleObject hurtObj { get { return battleHurtParam.hurtObj; } }
    public SkillConfig skillConfig { get; private set; }
    public HB427_tagSCUseSkill.tagSCUseSkillHurt hurt { get { return battleHurtParam.hurt; } }
    public SkillConfig skillConfig { get { return battleHurtParam.skillConfig; } }
    //  是否被格挡了
    public bool isBlocked = false;
@@ -30,14 +32,11 @@
    public List<BattleDmg> battleDamageList = new List<BattleDmg>();
    public BattleDmgInfo(string battleFieldGuid, List<long> damageList, BattleObject hurtObj, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig, bool isLastHit)
    public BattleDmgInfo(string battleFieldGuid, BattleHurtParam battleHurtParam)
    {
        this.battleFieldGuid = battleFieldGuid;
        this.damageList = damageList;
        this.hurtObj = hurtObj;
        this.hurt = hurt;
        this.skillConfig = skillConfig;
        this.isLastHit = isLastHit;
        this.battleHurtParam = battleHurtParam;
        this.isLastHit = battleHurtParam.hitIndex >= battleHurtParam.skillConfig.DamageDivide.Length - 1;
        HandleDamageType();
        HandleAttackTypeAndDamage();
    }
@@ -62,10 +61,40 @@
        int rawAttackType = (int)hurt.AttackTypes;
        float blockRatio = GeneralDefine.blockRatio; // 格挡减伤率
        // 处理每一段伤害及其对应的反伤和吸血
        for (int i = 0; i < damageList.Count; i++)
        {
            long actualDamage = damageList[i];
            // ============ 1. 先处理当前段对应的反伤 ============
            if (battleHurtParam.reflectHpList != null && i < battleHurtParam.reflectHpList.Count)
            {
                long reflectHp = battleHurtParam.reflectHpList[i];
                if (reflectHp > 0)
                {
                    battleDamageList.Add(new BattleDmg
                    {
                        damage = reflectHp,
                        attackType = (int)DamageType.Reflect
                    });
                }
            }
            // ============ 2. 然后处理当前段对应的吸血 ============
            if (battleHurtParam.suckHpList != null && i < battleHurtParam.suckHpList.Count)
            {
                long suckHp = battleHurtParam.suckHpList[i];
                if (suckHp > 0)
                {
                    battleDamageList.Add(new BattleDmg
                    {
                        damage = suckHp,
                        attackType = (int)DamageType.SuckHP
                    });
                }
            }
            // ============ 3. 最后处理主要伤害 ============
            // 格挡处理
            if (isBlocked)
            {
@@ -82,21 +111,22 @@
                {
                    int showAttackType = (int)DamageType.Realdamage + (IsCrit() ? (int)DamageType.Crit : 0);
                    battleDamageList.Add(new BattleDmg { damage = actualDamage, attackType = showAttackType });
                    continue;
                }
                // 普通伤害/治疗处理
                if (DamageNumConfig.Get(attackType) == null)
                else
                {
                    UnityEngine.Debug.LogError($"服务器给的伤害类型不对,强制转换为普通伤害/治疗, attackType: {attackType}");
                    if ((attackType & (int)DamageType.Damage) != 0)
                        attackType = (int)DamageType.Damage;
                    else if ((attackType & (int)DamageType.Recovery) != 0)
                        attackType = (int)DamageType.Recovery;
                    else
                        UnityEngine.Debug.LogError($"强制转换失败,该类型不是治疗也不是伤害 {attackType}");
                    // 普通伤害/治疗处理
                    if (DamageNumConfig.Get(attackType) == null)
                    {
                        UnityEngine.Debug.LogError($"服务器给的伤害类型不对,强制转换为普通伤害/治疗, attackType: {attackType}");
                        if ((attackType & (int)DamageType.Damage) != 0)
                            attackType = (int)DamageType.Damage;
                        else if ((attackType & (int)DamageType.Recovery) != 0)
                            attackType = (int)DamageType.Recovery;
                        else
                            UnityEngine.Debug.LogError($"强制转换失败,该类型不是治疗也不是伤害 {attackType}");
                    }
                    battleDamageList.Add(new BattleDmg { damage = actualDamage, attackType = attackType });
                }
                battleDamageList.Add(new BattleDmg { damage = actualDamage, attackType = attackType });
            }
            else
            {
@@ -107,21 +137,22 @@
                {
                    int showAttackType = (int)DamageType.Realdamage + (IsCrit() ? (int)DamageType.Crit : 0);
                    battleDamageList.Add(new BattleDmg { damage = actualDamage, attackType = showAttackType });
                    continue;
                }
                // 普通伤害/治疗处理
                if (DamageNumConfig.Get(attackType) == null)
                else
                {
                    UnityEngine.Debug.LogError($"服务器给的伤害类型不对,强制转换为普通伤害/治疗, attackType: {attackType}");
                    if ((attackType & (int)DamageType.Damage) != 0)
                        attackType = (int)DamageType.Damage;
                    else if ((attackType & (int)DamageType.Recovery) != 0)
                        attackType = (int)DamageType.Recovery;
                    else
                        UnityEngine.Debug.LogError($"强制转换失败,该类型不是治疗也不是伤害 {attackType}");
                    // 普通伤害/治疗处理
                    if (DamageNumConfig.Get(attackType) == null)
                    {
                        UnityEngine.Debug.LogError($"服务器给的伤害类型不对,强制转换为普通伤害/治疗, attackType: {attackType}");
                        if ((attackType & (int)DamageType.Damage) != 0)
                            attackType = (int)DamageType.Damage;
                        else if ((attackType & (int)DamageType.Recovery) != 0)
                            attackType = (int)DamageType.Recovery;
                        else
                            UnityEngine.Debug.LogError($"强制转换失败,该类型不是治疗也不是伤害 {attackType}");
                    }
                    battleDamageList.Add(new BattleDmg { damage = actualDamage, attackType = attackType });
                }
                battleDamageList.Add(new BattleDmg { damage = actualDamage, attackType = attackType });
            }
        }
    }
@@ -146,4 +177,27 @@
        return skillConfig.HurtType / 10 == 1;
    }
}
public class BattleHurtParam
{
    public BattleObject casterObj;
    public BattleObject hurtObj;
    public List<long> damageList;
    public List<long> suckHpList;
    public List<long> reflectHpList;
    public long fromHp;
    public long toHp;
    public BattleDrops battleDrops;
    public HB427_tagSCUseSkill.tagSCUseSkillHurt hurt;
    public int hitIndex;
    public HB422_tagMCTurnFightObjDead deadPack;
    public SkillConfig skillConfig;
}