예제 #1
0
        /// <summary>
        /// Re-calculates the mainhand melee damage of this Unit
        /// References:
        /// http://www.wowwiki.com/Attack_power
        /// </summary>
        internal static void UpdateMainDamage(this Unit unit)
        {
            float        num1       = 0.0f;
            float        num2       = 0.0f;
            float        num3       = 0.0f;
            float        num4       = 0.0f;
            IAsda2Weapon mainWeapon = unit.MainWeapon;

            foreach (DamageInfo damage in mainWeapon.Damages)
            {
                if (damage.School == DamageSchoolMask.Magical)
                {
                    num3 += UnitUpdates.CalcMagicDamage(unit, damage.Minimum);
                    num4 += UnitUpdates.CalcMagicDamage(unit, damage.Maximum);
                }
                else
                {
                    num1 += UnitUpdates.GetModifiedDamage(unit, damage.Minimum);
                    num2 += UnitUpdates.GetModifiedDamage(unit, damage.Maximum);
                }
            }

            unit.MinDamage      = num1 + (float)mainWeapon.BonusDamage;
            unit.MaxDamage      = num2 + (float)mainWeapon.BonusDamage;
            unit.MinMagicDamage = (int)num3;
            unit.MaxMagicDamage = (int)num4;
            Character character = unit as Character;

            if (character == null)
            {
                return;
            }
            Asda2CharacterHandler.SendUpdateStatsResponse(character.Client);
        }
예제 #2
0
        private static float GetModifiedDamage(Unit unit, float dmg)
        {
            float psysicalDamageBonus =
                CharacterFormulas.CalculatePsysicalDamageBonus(unit.Level, unit.Asda2Agility, unit.Asda2Strength,
                                                               unit.Class);

            return(UnitUpdates.GetMultiMod(unit.FloatMods[10], dmg + (float)unit.IntMods[25] + psysicalDamageBonus));
        }
예제 #3
0
        /// <summary>
        /// Updates the amount of Health regenerated per regen-tick
        /// </summary>
        internal static void UpdateNormalHealthRegen(this Unit unit)
        {
            int num = (!(unit is Character) ? 0 : ((Character)unit).Archetype.Class.CalculateHealthRegen(unit)) +
                      (unit.IntMods[3] + unit.IntMods[5]);
            int multiMod = UnitUpdates.GetMultiMod((float)(int)unit.FloatMods[3], num);

            unit.HealthRegenPerTickNoCombat = multiMod;
        }
예제 #4
0
        /// <summary>Re-calculates the mainhand melee damage of this Unit</summary>
        internal static void UpdateMainAttackTime(this Unit unit)
        {
            int attackTime = unit.MainWeapon.AttackTime;
            int num        = UnitUpdates.GetMultiMod(
                unit.FloatMods[1] -
                CharacterFormulas.CalculateAtackTimeReduce(unit.Level, unit.Class, unit.Asda2Agility), attackTime);

            if (num < 30)
            {
                num = 30;
            }
            unit.MainHandAttackTime = num;
        }
예제 #5
0
 /// <summary>
 /// Updates the amount of Power regenerated per regen-tick
 /// </summary>
 internal static void UpdatePowerRegen(this Unit unit)
 {
     if (unit.IsSitting)
     {
         unit.PowerRegenPerTickActual = (float)unit.MaxPower * 0.009f;
     }
     else
     {
         float num      = 0.0f + (float)unit.Asda2Spirit * CharacterFormulas.ManaPointsPerOneSpirit;
         float multiMod = UnitUpdates.GetMultiMod(unit.FloatMods[32], num);
         unit.PowerRegenPerTickActual = (double)multiMod < 0.300000011920929 ? 0.3f : multiMod;
     }
 }
예제 #6
0
        internal static void UpdateDodgeChance(this Unit unit)
        {
            Character character = unit as Character;

            if (character == null)
            {
                return;
            }
            float num1 = 0.0f;

            if (character.Asda2Agility == 0)
            {
                return;
            }
            float num2 = num1 + ((float)unit.IntMods[13] +
                                 CharacterFormulas.CalcDodgeChanceBonus(unit.Level, unit.Class, unit.Asda2Agility));
            double multiMod = (double)UnitUpdates.GetMultiMod(unit.FloatMods[30], num2);

            character.DodgeChance = num2;
        }
예제 #7
0
 private static float CalcMagicDamage(Unit unit, float dmg)
 {
     return(UnitUpdates.GetMultiMod(unit.FloatMods[11],
                                    dmg + (float)unit.IntMods[24] +
                                    CharacterFormulas.CalculateMagicDamageBonus(unit.Level, unit.Class, unit.Asda2Intellect)));
 }