コード例 #1
0
        public void Calculate()
        {
            float attackSpeed         = ParryModel.BossAttackSpeed;   // Options.BossAttackSpeed;
            float armorReduction      = (1.0f - Lookup.ArmorReduction(Character, Stats));
            float baseDamagePerSecond = Options.BossAttackValue / Options.BossAttackSpeed;
            float guaranteedReduction = (Lookup.StanceDamageReduction(Character, Stats) * armorReduction);

            DamagePerHit   = Options.BossAttackValue * guaranteedReduction;
            DamagePerCrit  = 2.0f * DamagePerHit;
            DamagePerBlock =
                (Math.Max(0.0f, DamagePerHit - Stats.BlockValue) * (1.0f - Character.WarriorTalents.CriticalBlock * 0.1f)) +
                (Math.Max(0.0f, DamagePerHit - (Stats.BlockValue * 2.0f)) * (Character.WarriorTalents.CriticalBlock * 0.1f));

            AverageDamagePerHit =
                DamagePerHit * (DefendTable.Hit / DefendTable.AnyHit) +
                DamagePerCrit * (DefendTable.Critical / DefendTable.AnyHit) +
                DamagePerBlock * (DefendTable.Block / DefendTable.AnyHit);
            AverageDamagePerAttack =
                DamagePerHit * DefendTable.Hit +
                DamagePerCrit * DefendTable.Critical +
                DamagePerBlock * DefendTable.Block;

            DamagePerSecond     = AverageDamagePerAttack / attackSpeed;
            Mitigation          = (1.0f - (DamagePerSecond / baseDamagePerSecond));
            TankPoints          = (Stats.Health / (1.0f - Mitigation));
            EffectiveHealth     = (Stats.Health / guaranteedReduction);
            GuaranteedReduction = (1.0f - guaranteedReduction);

            double a = Convert.ToDouble(DefendTable.AnyMiss);
            double h = Convert.ToDouble(Stats.Health);
            double H = Convert.ToDouble(AverageDamagePerHit);
            double s = Convert.ToDouble(ParryModel.BossAttackSpeed / Options.BossAttackSpeed);

            BurstTime = Convert.ToSingle((1.0d / a) * ((1.0d / Math.Pow(1.0d - a, h / H)) - 1.0d) * s);
        }
コード例 #2
0
ファイル: DefendModel.cs プロジェクト: rakot/rawr
        public void Calculate()
        {
            float armorReduction      = (1.0f - Lookup.ArmorReduction(Player));
            float guaranteedReduction = (1.0f - Lookup.StanceDamageReduction(Player)) * armorReduction;
            float baseDamagePerSecond = Player.BossOpts.DefaultMeleeAttack.DamagePerHit / Player.BossOpts.DefaultMeleeAttack.AttackSpeed;
            float baseAttack          = Player.BossOpts.DefaultMeleeAttack.DamagePerHit * guaranteedReduction;

            DamagePerHit       = baseAttack * (1.0f - Player.Stats.PhysicalDamageTakenReductionMultiplier) * (1.0f - Player.Stats.BossPhysicalDamageDealtReductionMultiplier);
            DamagePerCrit      = DamagePerHit * 2.0f;
            DamagePerBlock     = DamagePerHit * (1.0f - (0.3f + Player.Stats.BonusBlockValueMultiplier));
            DamagePerCritBlock = DamagePerHit * (1.0f - ((0.3f + Player.Stats.BonusBlockValueMultiplier) * 2.0f));

            AverageDamagePerHit =
                DamagePerHit * (DefendTable.Hit / DefendTable.AnyHit) +
                DamagePerCrit * (DefendTable.Critical / DefendTable.AnyHit) +
                DamagePerBlock * (DefendTable.Block / DefendTable.AnyHit) +
                DamagePerCritBlock * (DefendTable.CriticalBlock / DefendTable.AnyHit);
            AverageDamagePerAttack =
                DamagePerHit * DefendTable.Hit +
                DamagePerCrit * DefendTable.Critical +
                DamagePerBlock * DefendTable.Block +
                DamagePerCritBlock * DefendTable.CriticalBlock;

            DamagePerSecond     = AverageDamagePerAttack / AttackSpeed;
            Mitigation          = (1.0f - (DamagePerSecond / baseDamagePerSecond));
            EffectiveHealth     = (Player.Stats.Health / guaranteedReduction);
            GuaranteedReduction = (1.0f - guaranteedReduction);

            double a = Convert.ToDouble(DefendTable.AnyMiss);
            double h = Convert.ToDouble(Player.Stats.Health);
            double H = Convert.ToDouble(AverageDamagePerHit);
            double s = Convert.ToDouble(AttackSpeed);

            BurstTime = Convert.ToSingle((1.0d / a) * ((1.0d / Math.Pow(1.0d - a, h / H)) - 1.0d) * s);
        }
コード例 #3
0
ファイル: Lookup.cs プロジェクト: edekk/rawr-2.3.23
        public static float MagicReduction(Character character, Stats stats, DamageType school)
        {
            CalculationOptionsProtWarr calcOpts = character.CalculationOptions as CalculationOptionsProtWarr;
            float damageReduction = Lookup.StanceDamageReduction(character, stats, school);
            float totalResist     = stats.AllResist;
            float resistScale     = 0.0f;

            switch (school)
            {
            case DamageType.Arcane: totalResist += stats.ArcaneResistance; break;

            case DamageType.Fire: totalResist += stats.FireResistance; break;

            case DamageType.Frost: totalResist += stats.FrostResistance; break;

            case DamageType.Nature: totalResist += stats.NatureResistance; break;

            case DamageType.Shadow: totalResist += stats.ShadowResistance; break;
            }

            if ((calcOpts.TargetLevel - character.Level) < 3)
            {
                resistScale = 400.0f;
            }
            else
            {
                // This number is still being tested by many and may be slightly higher
                resistScale = 510.0f;
            }

            return(Math.Max(0.0f, (1.0f - (totalResist / (resistScale + totalResist))) * damageReduction));
        }
コード例 #4
0
ファイル: Lookup.cs プロジェクト: rakot/rawr
        public static float MagicReduction(Player player, DamageType school)
        {
            float totalResist = 0.0f;

            switch (school)
            {
            case DamageType.Arcane: totalResist = player.Stats.ArcaneResistance; break;

            case DamageType.Fire: totalResist = player.Stats.FireResistance; break;

            case DamageType.Frost: totalResist = player.Stats.FrostResistance; break;

            case DamageType.Nature: totalResist = player.Stats.NatureResistance; break;

            case DamageType.Shadow: totalResist = player.Stats.ShadowResistance; break;
            }

            float damageReduction   = Lookup.StanceDamageReduction(player, school);
            float averageResistance = StatConversion.GetAverageResistance(player.BossOpts.Level, player.Character.Level, totalResist, 0.0f);

            return(Math.Max(0.0f, (1.0f - averageResistance) * (1f - damageReduction)));
        }
コード例 #5
0
ファイル: Lookup.cs プロジェクト: edekk/rawr-2.3.23
        public static float MagicReduction(Character character, Stats stats, DamageType school, int targetLevel)
        {
            float totalResist = 0.0f;

            switch (school)
            {
            case DamageType.Arcane: totalResist = stats.ArcaneResistance; break;

            case DamageType.Fire: totalResist = stats.FireResistance; break;

            case DamageType.Frost: totalResist = stats.FrostResistance; break;

            case DamageType.Nature: totalResist = stats.NatureResistance; break;

            case DamageType.Shadow: totalResist = stats.ShadowResistance; break;
            }

            float damageReduction   = Lookup.StanceDamageReduction(character, stats, school);
            float averageResistance = StatConversion.GetAverageResistance(targetLevel, character.Level, totalResist, 0.0f);

            return(Math.Max(0.0f, (1.0f - averageResistance) * damageReduction));
        }