예제 #1
0
        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();
            }
        }
예제 #3
0
파일: Lookup.cs 프로젝트: edekk/rawr-2.3.23
 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)));
     }
 }
예제 #4
0
        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);
        }
예제 #5
0
파일: Lookup.cs 프로젝트: rakot/rawr
        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)));
            }
        }
예제 #6
0
파일: Lookup.cs 프로젝트: edekk/rawr-2.3.23
        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;
             */
        }
예제 #7
0
        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());
            }
        }
예제 #8
0
파일: Lookup.cs 프로젝트: edekk/rawr-2.3.23
 public static float AvoidanceChance(Character character, Stats stats, HitResult avoidanceType, int targetLevel)
 {
     return(StatConversion.GetDRAvoidanceChance(character, stats, avoidanceType, targetLevel));
 }