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