public void GetDRAvoidanceChanceTest_Warr_TestTableDef10000() { const float testValue = 10000f; ItemInstance[] IIArray = new ItemInstance[1]; Character toon = new Character("TestWarrior", "Malygos", CharacterRegion.US, CharacterRace.Human, new BossOptions(), IIArray, new System.Collections.Generic.List <Buff>(), "ProtWarr"); // TODO: Initialize to an appropriate value Assert.IsNotNull(toon); //toon.Level = 80; //Asumption here. toon.Class = CharacterClass.Warrior; Stats stats = new Stats(); stats += BaseStats.GetBaseStats(toon); stats.Defense = 400; stats.DefenseRating = testValue; uint TargetLevel = 80; //float levelDiff = 0.006f; float[] expected = new float[HitResultCount]; expected[(int)HitResult.Miss] = 0.16f; expected[(int)HitResult.Dodge] = 0.7650f; expected[(int)HitResult.Parry] = 0.4700f; // Miss test float actual = (float)System.Math.Round((double)StatConversion.GetDRAvoidanceChance(toon, stats, HitResult.Miss, TargetLevel), 4); Assert.AreEqual(expected[(int)HitResult.Miss], actual, HitResult.Miss.ToString()); // Dodge Test actual = (float)System.Math.Round((double)StatConversion.GetDRAvoidanceChance(toon, stats, HitResult.Dodge, TargetLevel), 4); Assert.AreEqual(expected[(int)HitResult.Dodge], actual, HitResult.Dodge.ToString()); // Parry Test actual = (float)System.Math.Round((double)StatConversion.GetDRAvoidanceChance(toon, stats, HitResult.Parry, TargetLevel), 4); Assert.AreEqual(expected[(int)HitResult.Parry], actual, HitResult.Parry.ToString()); }
private void comboBoxBoss_SelectedIndexChanged(object sender, EventArgs e) { if (!_loadingCalculationOptions) { _loadingCalculationOptions = true; CalculationsEnhance calcs = new CalculationsEnhance(); BossHandler boss = bosslist.GetBossFromBetterName(comboBoxBoss.Text); _calcOpts.SetBoss(boss); CB_TargLvl.Text = _calcOpts.TargetLevel.ToString(); CB_TargArmor.Text = _calcOpts.TargetArmor.ToString(); cmbLength.Value = (int)_calcOpts.FightLength; CK_InBack.Checked = _calcOpts.InBack; CB_InBackPerc.Value = _calcOpts.InBackPerc; CK_MultiTargs.Checked = _calcOpts.MultipleTargets; CB_MultiTargsMax.Enabled = CK_MultiTargs.Checked; CB_MultiTargsPerc.Enabled = CK_MultiTargs.Checked; CB_MultiTargsMax.Value = _calcOpts.AdditionalTargets; CB_MultiTargsPerc.Value = (int)(_calcOpts.AdditionalTargetPercent * 100 + .001f); Stats stats = calcs.GetCharacterStats(Character, null); TB_BossInfo.Text = boss.GenInfoString( 0, // The Boss' Damage bonuses against you (meaning YOU are debuffed) StatConversion.GetArmorDamageReduction(_calcOpts.TargetLevel, stats.Armor, 0, 0, 0), // Your Armor's resulting Damage Reduction StatConversion.GetDRAvoidanceChance(Character, stats, HitResult.Miss, _calcOpts.TargetLevel), // Your chance for Boss to Miss you StatConversion.GetDRAvoidanceChance(Character, stats, HitResult.Dodge, _calcOpts.TargetLevel), // Your chance Dodge StatConversion.GetDRAvoidanceChance(Character, stats, HitResult.Parry, _calcOpts.TargetLevel), // Your chance Parry 0, // Your Chance to Block 0); // How much you Block when you Block // Save the new names _loadingCalculationOptions = false; Character.OnCalculationsInvalidated(); } }
public static float AvoidanceChance(Character character, Stats stats, HitResult avoidanceType, int targetLevel) { if (avoidanceType == HitResult.Crit) { return(StatConversion.GetDRAvoidanceChance(character, stats, avoidanceType, targetLevel)); } else { return(Math.Max(0.0f, StatConversion.GetDRAvoidanceChance(character, stats, avoidanceType, targetLevel))); } }
public static float AvoidanceChance(Character character, Stats stats, HitResult avoidanceType, int targetLevel) { float avoidanceChance = StatConversion.GetDRAvoidanceChance(character, stats, avoidanceType, targetLevel); if (avoidanceType == HitResult.Block) { avoidanceChance += (8f + StatConversion.GetMasteryFromRating(stats.MasteryRating, CharacterClass.Paladin)) * 0.0225f; } return(avoidanceChance); }
public static float AvoidanceChance(Player player, HitResult avoidanceType) { switch (avoidanceType) { case HitResult.Crit: return(StatConversion.GetDRAvoidanceChance(player.Character, player.Stats, avoidanceType, player.BossOpts.Level) + (player.Talents.BastionOfDefense * 0.03f)); case HitResult.CritBlock: return(Lookup.BonusMasteryBlockPercentage(player) + player.Stats.CriticalBlock); default: return(Math.Max(0.0f, StatConversion.GetDRAvoidanceChance(player.Character, player.Stats, avoidanceType, player.BossOpts.Level))); } }
public static float AvoidanceChance(Character character, Stats stats, HitResult avoidanceType) { CalculationOptionsProtWarr calcOpts = character.CalculationOptions as CalculationOptionsProtWarr; return(StatConversion.GetDRAvoidanceChance(character, stats, avoidanceType, calcOpts.TargetLevel)); /* * float defSkill = (float)Math.Floor(stats.DefenseRating * ProtWarr.DefenseRatingToDefense); * float baseAvoid = 0.0f; * float modifiedAvoid = 0.0f; * * switch (avoidanceType) * { * case HitResult.Dodge: * baseAvoid = stats.Dodge + (stats.BaseAgility * ProtWarr.AgilityToDodge) - LevelModifier(character); * modifiedAvoid = ((stats.Agility - stats.BaseAgility) * ProtWarr.AgilityToDodge) + * (stats.DodgeRating * ProtWarr.DodgeRatingToDodge) + (defSkill * ProtWarr.DefenseToDodge); * modifiedAvoid = 1.0f / (1.0f / 88.129021f + 0.9560f / modifiedAvoid); * break; * case HitResult.Parry: * baseAvoid = stats.Parry - LevelModifier(character); * modifiedAvoid = (stats.ParryRating * ProtWarr.ParryRatingToParry) + (defSkill * ProtWarr.DefenseToParry); * modifiedAvoid = 1.0f / (1.0f / 47.003525f + 0.9560f / modifiedAvoid); * break; * case HitResult.Miss: * baseAvoid = stats.Miss * 100f - LevelModifier(character); * modifiedAvoid = (defSkill * ProtWarr.DefenseToMiss); * modifiedAvoid = 1.0f / (1.0f / 16.0f + 0.9560f / modifiedAvoid); * break; * case HitResult.Block: * // The 5% base block should be moved into stats.Block as a base value like the others * baseAvoid = 5.0f + stats.Block - LevelModifier(character); * modifiedAvoid = (stats.BlockRating * ProtWarr.BlockRatingToBlock) + (defSkill * ProtWarr.DefenseToBlock); * break; * case HitResult.Crit: * modifiedAvoid = (defSkill * ProtWarr.DefenseToCritReduction) + (stats.Resilience * ProtWarr.ResilienceRatingToCritReduction); * break; * } * * // Many of the base values are whole numbers, so need to get it back to decimal. * // May want to look at making this more consistant in the future. * return (baseAvoid + modifiedAvoid) / 100.0f; */ }
public void GetDRAvoidanceChanceTest_DK_TestFromForums() { ItemInstance[] IIArray = new ItemInstance[1]; Character toon = new Character("TestDK", "Malygos", CharacterRegion.US, CharacterRace.Human, new BossOptions(), IIArray, new System.Collections.Generic.List <Buff>(), "TankDK"); // TODO: Initialize to an appropriate value Assert.IsNotNull(toon); //toon.Level = 80; //Asumption here. toon.Class = CharacterClass.DeathKnight; Stats stats = new Stats(); stats += BaseStats.GetBaseStats(toon); stats.Miss += .03f; // 3% Miss from talents stats.Defense = 425; // 25 Def from SSG rune stats.Dodge += .05f; // 5% dodge from talents. stats.DefenseRating = 566f; uint TargetLevel = 83; //float levelDiff = 0.006f; float[] expected = new float[HitResultCount]; expected[(int)HitResult.Miss] = 0.121f; expected[(int)HitResult.Dodge] = 0.134f; expected[(int)HitResult.Parry] = 0.098f; expected[(int)HitResult.Block] = .05f; expected[(int)HitResult.Crit] = .05f; expected[(int)HitResult.AnyMiss] = 0; expected[(int)HitResult.AnyHit] = 0; expected[(int)HitResult.Glance] = .05f; expected[(int)HitResult.Resist] = .05f; expected[(int)HitResult.Hit] = .05f; // Iterate through the hit result types. for (HitResult i = 0; i < (HitResult)HitResultCount; i++) { float actual = (float)System.Math.Round((double)StatConversion.GetDRAvoidanceChance(toon, stats, i, TargetLevel), 3); Assert.AreEqual(expected[(int)i], actual, i.ToString()); } }
public static float AvoidanceChance(Character character, Stats stats, HitResult avoidanceType, int targetLevel) { return(StatConversion.GetDRAvoidanceChance(character, stats, avoidanceType, targetLevel)); }