示例#1
0
    void RunProcess()
    {
        if (m_attacker.OnAttackDamageProcessStart != null)
        {
            m_attacker.OnAttackDamageProcessStart(this);
        }
        if (m_target.OnRecieveDamageProcessStart != null)
        {
            m_target.OnRecieveDamageProcessStart(this);
        }

        //Calculate Damage from the ability parameters
        CalculateTotalDamage(out m_attackDamage, out m_abilityDamage);
        if (m_attackDamage != 0 || m_abilityDamage != 0)
        {
            //Apply Damage Modifiers Before Resistance
            m_attackDamage  *= m_adBResMod;
            m_abilityDamage *= m_apBResMod;

            //Apply Damage Resistances
            m_attackDamage  = CalculateDamageAfterResistance(m_attackDamage);
            m_abilityDamage = CalculateAbilityAfterResistance(m_abilityDamage);

            //Calculate final Damage and apply Damage Modifiers After Resistance
            m_target.DealDamage((m_attackDamage * m_adAResMod) + (m_abilityDamage * m_apAResMod), this);
        }

        //Apply side effects
        if (!m_target.Dead)
        {
            m_target.EntityAbilities.ApplyAbilityEffects(m_ability, m_attacker);
        }
    }