Exemplo n.º 1
0
        /// <summary>
        /// Calculates the dodge amount for the class at a specific level and Agility.
        /// TODO: Find the constant that can be used to get 1 agi = X % dodge (diminishing returns)
        /// http://wowwiki.com/Dodge
        /// </summary>
        /// <param name="level">the player's level</param>
        /// <param name="agility">the player's Agility</param>
        /// <returns>the total dodge amount</returns>
        public virtual float CalculateDodge(int level, int agility, int baseAgility, int defenseSkill, int dodgeRating, int defenseRating)
        {
            var dodge = GameTables.BaseDodge[(int)Id] + agility * GameTables.BaseMeleeCritChance[(int)Id - 1];

            dodge += GameTables.GetUnModifiedClassMeleeCritChanceValue(level, Id) / GameTables.CritAgiMod[(int)Id];
            return(dodge);

            // Diminished dodge (by level) prototype

            /*
             * //Not correct because CritAgiMod is scales per level
             * var baseDodge = baseAgility / (1f / (GameTables.BaseMeleeCritChance[(int)Id] * GameTables.CritAgiMod[(int)Id - 1])) + (defenseSkill - level * 5) * 0.04f;
             * var dodgeFromGearAgi = (agility - baseAgility) / GameTables.BaseMeleeCritChance[(int)Id - 1] * GameTables.CritAgiMod[(int)Id];
             * var dodgeFromRating = dodgeRating / GameTables.GetCRTable(CombatRating.Dodge)[level - 1];
             * var dodgeFromDef = defenseRating / GameTables.GetCRTable(CombatRating.DefenseSkill)[level - 1] * 0.04f;
             *
             * var preDiminishedDodge = dodgeFromDef + dodgeFromGearAgi + dodgeFromRating;
             * var diminishedDodge = (preDiminishedDodge * GameTables.StatCap[(int)Id]) /
             *                    (preDiminishedDodge +
             *                     GameTables.DiminisherConstant[(int)Id] * GameTables.StatCap[(int)Id]);
             * dodge += baseDodge + diminishedDodge;
             * //return dodge;
             *
             * var aAgi = agility - baseAgility;
             */
        }
Exemplo n.º 2
0
        /// <summary>
        /// TODO: Ranged Crit Chance
        /// http://www.wowwiki.com/Formulas:Critical_hit_chance
        /// http://www.wowwiki.com/Formulas:Agility
        /// </summary>
        public float CalculateRangedCritChance(int level, int agility)
        {
            var baseCrit    = GameTables.BaseMeleeCritChance[((int)Id) - 1] * 100;
            var critFromAgi = agility / (GameTables.GetClassMeleeCritChanceValue(level, Id));
            var crit        = baseCrit + critFromAgi;

            return(crit > 5 ? crit : 5);    // Naked crit is always at least 5%
        }
Exemplo n.º 3
0
        /// <summary>
        /// Calculates the magic critical chance for the class at a specific level, base Intellect and added Intellect.
        /// </summary>
        /// <param name="level">the player's level</param>
        /// <returns>the total magic critical chance</returns>
        public virtual float CalculateMagicCritChance(int level, int intellect)
        {
            //if(level == 80)
            //{
            //    return (float) (((intellect / 166.6667) + classConstant) + (critRating/45.91));
            //}
            //return (intellect/80f);
            var critBase = GameTables.BaseSpellCritChance[(int)Id - 1] * 100;
            var critMod  = GameTables.GetClassSpellCritChanceValue(level, Id);

            return(critBase + intellect / critMod);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Calculates the parry chance from parry rating.
 /// </summary>
 /// <param name="level"></param>
 /// <param name="parryRating"></param>
 /// <param name="str">Strength, used for DKs</param>
 /// <returns></returns>
 public virtual float CalculateParry(int level, int parryRating, int str)
 {
     return(parryRating / GameTables.GetCRTable(CombatRating.Parry)[level - 1]);
 }