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); } }