Exemplo n.º 1
0
        private void Calculate_Click(object sender, RoutedEventArgs e)
        {
            if (castingState == null || generator == null)
            {
                return;
            }
            string name = generator.ConvertCycleNameEasyToInternal(ControlString.Text);

            if (name.Length != generator.ControlOptions.Length)
            {
                return;
            }

            for (int i = 0; i < generator.ControlOptions.Length; i++)
            {
                generator.ControlValue[i] = int.Parse(name[i].ToString());
            }

            try
            {
                GenericCycle generic = new GenericCycle(name, castingState, generator.StateList, true);

                StringBuilder sb = new StringBuilder();

                sb.AppendLine(generic.DamagePerSecond + " Dps");
                sb.AppendLine(generic.ManaPerSecond + " Mps");
                sb.AppendLine(generic.ThreatPerSecond + " Tps");
                sb.AppendLine(generic.DpsPerSpellPower + " Dps per Spell Power");
                sb.AppendLine(generic.DpsPerMastery + " Dps per Mastery");
                sb.AppendLine((generic.DpsPerCrit / 100) + " Dps per Crit");
                sb.AppendLine((generic.CastProcs / generic.CastTime) + " Cast Procs / Sec");
                sb.AppendLine((generic.HitProcs / generic.CastTime) + " Hit Procs / Sec");
                sb.AppendLine((generic.CritProcs / generic.CastTime) + " Crit Procs / Sec");
                sb.AppendLine((generic.DamageProcs / generic.CastTime) + " Damage Procs / Sec");
                sb.AppendLine((generic.DotProcs / generic.CastTime) + " Dot Procs / Sec");

                sb.AppendLine();

                sb.AppendLine(generic.SpellDistribution);

                Result.Text = sb.ToString();
            }
            catch (OutOfMemoryException /*ex*/)
            {
                Result.Text = "State Space too complex to solve, please select a different cycle solver.";
            }
        }
Exemplo n.º 2
0
        private void Calculate_Click(object sender, RoutedEventArgs e)
        {
            if (castingState == null || generator == null)
            {
                return;
            }
            string name = ControlString.Text;

            if (name.Length != generator.ControlOptions.Length)
            {
                return;
            }

            for (int i = 0; i < generator.ControlOptions.Length; i++)
            {
                generator.ControlValue[i] = int.Parse(name[i].ToString());
            }

            try
            {
                GenericCycle generic = new GenericCycle(name, castingState, generator.StateList, true);

                StringBuilder sb = new StringBuilder();

                sb.AppendLine(generic.DamagePerSecond + " Dps");
                sb.AppendLine(generic.ManaPerSecond + " Mps");
                sb.AppendLine(generic.ThreatPerSecond + " Tps");

                sb.AppendLine();

                sb.AppendLine(generic.SpellDistribution);

                Result.Text = sb.ToString();
            }
            catch (OutOfMemoryException /*ex*/)
            {
                Result.Text = "State Space too complex to solve, please select a different cycle solver.";
            }
        }
        private void HotStreakUtilization_Click(object sender, RoutedEventArgs e)
        {
            string armor = "Molten Armor";
            CalculationOptionsMage calculationOptions = Character.CalculationOptions as CalculationOptionsMage;
            CalculationsMage       calculations       = (CalculationsMage)Calculations.Instance;
            Solver solver = new Solver(Character, calculationOptions, false, false, false, 0, armor, false, false, true, false);

            solver.Initialize(null);
            CastingState baseState = new CastingState(solver, 0, false, 0);

            FireCycleGenerator generator = new FireCycleGenerator(baseState);

            GenericCycle c1 = new GenericCycle("test", baseState, generator.StateList, true);
            Cycle        c2 = baseState.GetCycle(CycleId.FBLBPyro);

            Dictionary <string, SpellContribution> dict1 = new Dictionary <string, SpellContribution>();
            Dictionary <string, SpellContribution> dict2 = new Dictionary <string, SpellContribution>();

            c1.AddDamageContribution(dict1, 1.0f);
            c2.AddDamageContribution(dict2, 1.0f);

            float predicted = dict2["Pyroblast"].Hits / dict2["Fireball"].Hits;
            float actual    = dict1["Pyroblast"].Hits / dict1["Fireball"].Hits;

            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Pyro/Nuke Ratio:");
            sb.AppendLine();
            sb.AppendLine("Approximation Model: " + predicted);
            sb.AppendLine("Exact Model: " + actual);
            sb.AppendLine();
            // predicted = raw * (1 - wastedold)
            // actual = raw * (1 - wasted)
            // wasted = 1 - actual / predicted * (1 - wastedold)
            sb.AppendLine("Predicted Wasted Hot Streaks: " + (1 - actual / predicted));

            MessageBox.Show(sb.ToString());
        }