예제 #1
0
    /** 生效伤害 */
    public virtual int takeDamage(int damageType, int damageValue, AttributeDataLogic targetAttribute, Unit target)
    {
        switch (damageType)
        {
        case SkillDamageType.PhysicsDamage:
        case SkillDamageType.MagicDamage:
        {
            int shieldType = damageType == SkillDamageType.PhysicsDamage ? AttributeType.PhysicsShield : AttributeType.MagicShield;

            int shield = targetAttribute.getAttribute(shieldType);

            if (shield > 0)
            {
                if (shield >= damageValue)
                {
                    targetAttribute.subOneAttribute(shieldType, damageValue);
                    target.fight.getBuffLogic().onShieldDamage(shieldType, damageValue);
                    damageValue = 0;
                }
                else
                {
                    targetAttribute.subOneAttribute(shieldType, shield);
                    target.fight.getBuffLogic().onShieldDamage(shieldType, shield);

                    damageValue -= shield;
                }
            }

            if (damageValue <= 0)
            {
                return(0);
            }

            return(takeRealDamage(damageValue, targetAttribute));
        }

        case SkillDamageType.HolyDamage:
        {
            return(takeRealDamage(damageValue, targetAttribute));
        }
        }

        return(0);
    }
예제 #2
0
    /** 计算对单个单位的伤害(范围伤害值) */
    public int toCalculateDamage(AttackData data, int damageType, int[] damages, int attackValue, bool isCrit, AttributeDataLogic attackerAttribute, AttributeDataLogic targetAttribute, Unit attacker, Unit target)
    {
        int damageValue;

        switch (damageType)
        {
        case SkillDamageType.PhysicsDamage:
        case SkillDamageType.MagicDamage:
        case SkillDamageType.HolyDamage:
        {
            damageValue = calculateDamage(damages, attackValue, isCrit, attackerAttribute, targetAttribute, attacker, target, data);
        }
        break;

        case SkillDamageType.HpAdd:
        {
            damageValue = attackValue;

            if (!target.fight.getStatusLogic().cantBeHeal())
            {
                int healV = targetAttribute.getAddRatioResult(AttributeType.HealAddPercent, damageValue);
                targetAttribute.addOneAttribute(AttributeType.Hp, healV);
            }
        }
        break;

        case SkillDamageType.MpAdd:
        {
            damageValue = attackValue;
            targetAttribute.addOneAttribute(AttributeType.Mp, damageValue);
        }
        break;

        case SkillDamageType.MpSub:
        {
            damageValue = attackValue;
            targetAttribute.subOneAttribute(AttributeType.Mp, damageValue);
        }
        break;

        default:
        {
            damageValue = calculateDamage(damages, attackValue, isCrit, attackerAttribute, targetAttribute, attacker, target, data);
        }
        break;
        }

        return(damageValue);
    }
예제 #3
0
    protected int takeRealDamage(int damageValue, AttributeDataLogic targetAttribute)
    {
        if (damageValue <= 0)
        {
            return(0);
        }

        int hp = targetAttribute.getAttribute(AttributeType.Hp);

        int re = damageValue > hp ? hp : damageValue;

        targetAttribute.subOneAttribute(AttributeType.Hp, damageValue);

        return(re);
    }