Ejemplo n.º 1
0
 private Cycle GetNewCycle(CycleId cycleId)
 {
     Cycle c = null;
     switch (cycleId)
     {
         case CycleId.ABSpam234AM:
             c = ABSpam234AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam34AM:
             c = ABSpam34AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam4AM:
             c = ABSpam4AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam0234AMABar:
             c = ABSpam0234AMABar.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam0234AMABABar:
             c = ABSpam0234AMABABar.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB2ABar2AMABar0AMABABar:
             c = AB2ABar2AMABar0AMABABar.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB3ABar023AM:
             c = AB3ABar023AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB23ABar023AM:
             c = AB23ABar023AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB2ABar02AMABABar:
             c = AB2ABar02AMABABar.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABABar1AM:
             c = ABABar1AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB2ABar12AMABABar:
             c = AB2ABar12AMABABar.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.Frostbolt:
             c = GetSpell(SpellId.Frostbolt);
             break;
         case CycleId.Fireball:
             c = GetSpell(SpellId.Fireball);
             break;
         case CycleId.FBPyro:
             c = FBPyro.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FBLBPyro:
             c = FBLBPyro.GetCycle(Solver.NeedsDisplayCalculations, this, 1);
             break;
         case CycleId.FFBLBPyro:
             c = FFBLBPyro.GetCycle(Solver.NeedsDisplayCalculations, this, 1);
             break;
         case CycleId.FBLB3Pyro:
             c = FBLBPyro.GetCycle(Solver.NeedsDisplayCalculations, this, Math.Min(3, CalculationOptions.AoeTargets));
             break;
         case CycleId.FFBLB3Pyro:
             c = FFBLBPyro.GetCycle(Solver.NeedsDisplayCalculations, this, Math.Min(3, CalculationOptions.AoeTargets));
             break;
         case CycleId.FBScPyro:
             c = FBScPyro.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FFBPyro:
             c = FFBPyro.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FFBScPyro:
             c = FFBScPyro.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FFBScLBPyro:
             c = FFBScLBPyro.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FrostfireBolt:
             c = GetSpell(SpellId.FrostfireBolt);
             break;
         case CycleId.ArcaneBlastSpam:
             c = GetSpell(SpellId.ArcaneBlast4);
             break;
         case CycleId.ABSpam04MBAM:
             c = ABSpam04MBAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam024MBAM:
             c = ABSpam024MBAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam034MBAM:
             c = ABSpam034MBAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam0234MBAM:
             c = ABSpam0234MBAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam4MBAM:
             c = ABSpam4MBAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam24MBAM:
             c = ABSpam24MBAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam234MBAM:
             c = ABSpam234MBAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB4AM234MBAM:
             c = AB4AM234MBAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB3AM23MBAM:
             c = AB3AM23MBAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB4AM0234MBAM:
             c = AB4AM0234MBAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB3AM023MBAM:
             c = AB3AM023MBAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABarAM:
             c = new ABarAM(Solver.NeedsDisplayCalculations, this);
             break;
         /*case CycleId.ABP:
             c = new ABP(this);
             break;*/
         case CycleId.ABAM:
             c = ABAM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpamMBAM:
             c = new ABSpamMBAM(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam3C:
             c = new ABSpam3C(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam03C:
             c = new ABSpam03C(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB2ABar3C:
             c = new AB2ABar3C(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABABar2C:
             c = new ABABar2C(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABABar2MBAM:
             c = new ABABar2MBAM(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABABar1MBAM:
             c = new ABABar1MBAM(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABABar3C:
             c = new ABABar3C(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB3ABar3MBAM:
             c = new AB3ABar3MBAM(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB3AM:
             c = AB3AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB2AM:
             c = AB2AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB3AM2MBAM:
             c = new AB3AM2MBAM(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB2ABar2MBAM:
             c = new AB2ABar2MBAM(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABABar0MBAM:
             c = new ABABar0MBAM(Solver.NeedsDisplayCalculations, this);
             break;
         /*case CycleId.ABABar:
             c = new ABABar(this);
             break;*/
         case CycleId.ABSpam3MBAM:
             c = new ABSpam3MBAM(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABSpam03MBAM:
             c = new ABSpam03MBAM(Solver.NeedsDisplayCalculations, this);
             break;
         /*case CycleId.ABAMABar:
             c = new ABAMABar(Calculations.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB2AMABar:
             c = new AB2AMABar(Calculations.NeedsDisplayCalculations, this);
             break;*/
         case CycleId.AB3AMABar:
             c = AB3AMABar.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB3ABar123AM:
             c = AB3ABar123AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB4ABar1234AM:
             c = AB4ABar1234AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB4ABar34AM:
             c = AB4ABar34AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB4ABar4AM:
             c = AB4ABar4AM.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB3AMABar2C:
             c = new AB3AMABar2C(Solver.NeedsDisplayCalculations, this);
             break;
         /*case CycleId.AB32AMABar:
             c = new AB32AMABar(Calculations.NeedsDisplayCalculations, this);
             break;*/
         case CycleId.AB3ABar3C:
             c = new AB3ABar3C(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABABar0C:
             c = new ABABar0C(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABABar1C:
             c = new ABABar1C(Solver.NeedsDisplayCalculations, this);
             break;
         /*case CycleId.ABABarY:
             c = new ABABarY(Calculations.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB2ABar:
             c = new AB2ABar(Calculations.NeedsDisplayCalculations, this);
             break;*/
         case CycleId.AB2ABar2C:
             c = new AB2ABar2C(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB2ABarMBAM:
             c = new AB2ABarMBAM(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ArcaneManaNeutral:
             c = ArcaneManaNeutral.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         /*case CycleId.AB3ABar:
             c = new AB3ABar(Calculations.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB3ABarX:
             c = new AB3ABarX(Calculations.NeedsDisplayCalculations, this);
             break;
         case CycleId.AB3ABarY:
             c = new AB3ABarY(Calculations.NeedsDisplayCalculations, this);
             break;
         case CycleId.FBABar:
             c = new FBABar(Calculations.NeedsDisplayCalculations, this);
             break;
         case CycleId.FrBABar:
             c = new FrBABar(Calculations.NeedsDisplayCalculations, this);
             break;
         case CycleId.FFBABar:
             c = new FFBABar(Calculations.NeedsDisplayCalculations, this);
             break;*/
         /*case CycleId.ABAMP:
             c = new ABAMP(this);
             break;
         case CycleId.AB3AMSc:
             c = new AB3AMSc(this);
             break;
         case CycleId.ABAM3Sc:
             c = new ABAM3Sc(this);
             break;
         case CycleId.ABAM3Sc2:
             c = new ABAM3Sc2(this);
             break;
         case CycleId.ABAM3FrB:
             c = new ABAM3FrB(this);
             break;
         case CycleId.ABAM3FrB2:
             c = new ABAM3FrB2(this);
             break;
         case CycleId.ABFrB:
             c = new ABFrB(this);
             break;
         case CycleId.AB3FrB:
             c = new AB3FrB(this);
             break;
         case CycleId.ABFrB3FrB:
             c = new ABFrB3FrB(this);
             break;
         case CycleId.ABFrB3FrB2:
             c = new ABFrB3FrB2(this);
             break;
         case CycleId.ABFrB3FrBSc:
             c = new ABFrB3FrBSc(this);
             break;
         case CycleId.ABFB3FBSc:
             c = new ABFB3FBSc(this);
             break;
         case CycleId.AB3Sc:
             c = new AB3Sc(this);
             break;*/
         /*case CycleId.FBSc:
             c = new FBSc(this);
             break;
         case CycleId.FBFBlast:
             c = new FBFBlast(this);
             break;*/
         case CycleId.FrBFBIL:
             c = FrBFBIL.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FrBDFFBIL:
             c = FrBDFFBIL.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FrBDFFFBIL:
             c = FrBDFFFBIL.GetSolvedCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FrBDFFFB:
             c = FrBDFFFB.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FrBILFB:
             c = FrBILFB.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FrBIL:
             c = FrBIL.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FrBFB:
             c = FrBFB.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FBScLBPyro:
             c = FBScLBPyro.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         /*case CycleId.FB2ABar:
             c = new FB2ABar(Calculations.NeedsDisplayCalculations, this);
             break;
         case CycleId.FrB2ABar:
             c = new FrB2ABar(Calculations.NeedsDisplayCalculations, this);
             break;*/
         case CycleId.ScLBPyro:
             c = ScLBPyro.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ABABarSlow:
             c = new ABABarSlow(Solver.NeedsDisplayCalculations, this);
             break;
         /*case CycleId.FBABarSlow:
             c = new FBABarSlow(Calculations.NeedsDisplayCalculations, this);
             break;
         case CycleId.FrBABarSlow:
             c = new FrBABarSlow(Calculations.NeedsDisplayCalculations, this);
             break;*/
         case CycleId.CustomSpellMix:
             c = new SpellCustomMix(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.ArcaneMissiles:
             c = GetSpell(SpellId.ArcaneMissiles);
             break;
         case CycleId.Scorch:
             c = GetSpell(SpellId.Scorch);
             break;
         case CycleId.ArcaneExplosion:
             c = GetSpell(SpellId.ArcaneExplosion0);
             break;
         case CycleId.AE4AB:
             c = AE4AB.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.AERampAB:
             c = AERampAB.GetCycle(Solver.NeedsDisplayCalculations, this);
             break;
         case CycleId.FlamestrikeSpammed:
             c = GetSpell(SpellId.FlamestrikeSpammed);
             break;
         case CycleId.FlamestrikeSingle:
             c = GetSpell(SpellId.FlamestrikeSingle);
             break;
         case CycleId.Blizzard:
             c = GetSpell(SpellId.Blizzard);
             break;
         case CycleId.BlastWave:
             c = GetSpell(SpellId.BlastWave);
             break;
         case CycleId.DragonsBreath:
             c = GetSpell(SpellId.DragonsBreath);
             break;
         case CycleId.ConeOfCold:
             c = GetSpell(SpellId.ConeOfCold);
             break;
     }
     return c;
 }
Ejemplo n.º 2
0
        public Cycle GetCycle(CycleId cycleId)
        {
            //Cycle c = Cycles[(int)cycleId];
            //if (c != null) return c;
            Cycle c = null;
            //if (Cycles.TryGetValue((int)cycleId, out c)) return c;
            for (int i = 0; i < CyclesCount; i++)
            {
                Cycle cycle = Cycles[i];
                if (cycle.CycleId == cycleId) return cycle;
            }

            if (CalculationOptions.AdvancedHasteProcs)
            {
                c = GetAveragedHasteCycle(cycleId);
            }

            if (c == null)
            {
                c = GetNewCycle(cycleId);
            }
            if (c != null)
            {
                if (cycleId != CycleId.ArcaneManaNeutral) // if cycle is based on other cycles make sure we don't double count mixins
                {
                    if (UseMageWard)
                    {
                        c = MageWardCycle.GetCycle(Solver.NeedsDisplayCalculations, this, c);
                    }
                    if (CalculationOptions.MirrorImage == 1)
                    {
                        c = MirrorImageCycle.GetCycle(Solver.NeedsDisplayCalculations, this, c);
                    }
                    if (FlameOrb)
                    {
                        // add flame orb mix-in
                        c = FlameOrbCycle.GetCycle(Solver.NeedsDisplayCalculations, this, c, false);
                    }
                    if (CalculationOptions.PlayerLevel >= 81 && CalculationOptions.FlameOrb == 1)
                    {
                        c = FlameOrbCycle.GetCycle(Solver.NeedsDisplayCalculations, this, c, true);
                    }
                    if (Combustion)
                    {
                        // add combustion mix-in
                        c = CombustionCycle.GetCycle(Solver.NeedsDisplayCalculations, this, c);
                    }
                }

                c.CycleId = cycleId;
                //Cycles[(int)cycleId] = c;
                //Cycles.Add(c);
                if (CyclesCount >= Cycles.Length)
                {
                    int length = 2 * Cycles.Length;
                    Cycle[] destinationArray = new Cycle[length];
                    Array.Copy(Cycles, 0, destinationArray, 0, CyclesCount);
                    Cycles = destinationArray;
                }
                Cycles[CyclesCount++] = c;
            }

            return c;
        }
Ejemplo n.º 3
0
 private Cycle GetAveragedHasteCycle(CycleId cycleId)
 {
     float baseProcHaste = 0;
     // construct possible proc combinations
     Cycle baseCycle = GetNewCycle(cycleId);
     // on use stacking items
     for (int i = 0; i < Solver.StackingHasteEffectCooldownsCount; i++)
     {
         EffectCooldown effectCooldown = Solver.StackingHasteEffectCooldowns[i];
         if (EffectsActive(effectCooldown.Mask))
         {
             Stats specialStats = effectCooldown.SpecialEffect.Stats;
             for (int j = 0; j < specialStats._rawSpecialEffectDataSize; j++)
             {
                 SpecialEffect effect = specialStats._rawSpecialEffectData[j];
                 if (effect.Stats.HasteRating > 0)
                 {
                     float trigInterval;
                     float trigChance;
                     if (baseCycle.GetTriggerData(effect, out trigInterval, out trigChance))
                     {
                         baseProcHaste += effect.GetAverageStackSize(trigInterval, trigChance, 3.0f, effectCooldown.SpecialEffect.Duration) * effect.Stats.HasteRating;
                     }
                 }
             }
         }
     }
     int N = Solver.HasteRatingEffectsCount;
     SpecialEffect[] hasteRatingEffects = new SpecialEffect[N];
     Array.Copy(Solver.HasteRatingEffects, 0, hasteRatingEffects, 0, N);
     if (baseProcHaste == 0 && N == 0) return baseCycle;
     float[] triggerInterval = new float[N];
     float[] triggerChance = new float[N];
     float[] offset = new float[N];
     for (int i = 0; i < N; i++)
     {
         baseCycle.GetTriggerData(hasteRatingEffects[i], out triggerInterval[i], out triggerChance[i]);
     }
     WeightedStat[] result = SpecialEffect.GetAverageCombinedUptimeCombinations(hasteRatingEffects, triggerInterval, triggerChance, offset, 3.0f, CalculationOptions.FightDuration, AdditiveStat.HasteRating);
     if (HasteProcs == null)
     {
         HasteProcs = new CastingState[result.Length];
         for (int i = 0; i < result.Length; i++)
         {
             CastingState subState = CastingState.New(Solver, Effects, Frozen, baseProcHaste + result[i].Value);
             subState.ReferenceCastingState = this;
             HasteProcs[i] = subState;
         }
     }
     Cycle c = Cycle.New(Solver.NeedsDisplayCalculations, this);
     c.Name = baseCycle.Name;
     for (int i = 0; i < result.Length; i++)
     {
         Cycle subCycle = null;
         if (HasteProcs[i].ProcHasteRating == 0)
         {
             subCycle = baseCycle;
         }
         else
         {
             subCycle = HasteProcs[i].GetNewCycle(cycleId);
         }
         c.AddCycle(Solver.NeedsDisplayCalculations, subCycle, result[i].Chance / subCycle.CastTime);
     }
     // if base proc is not zero then the substates are different for each cycle
     if (baseProcHaste > 0)
     {
         HasteProcs = null;
     }
     return c;
 }
Ejemplo n.º 4
0
        public void Initialize(CastingState castingState)
        {
            Note = null;
            DpmConversion = 0;
            Mix1 = CycleId.None;
            Mix2 = CycleId.None;

            CastingState = castingState;
            calculated = false;
            damagePerSecond = 0;
            effectDamagePerSecondSpell = 0;
            effectDamagePerSecondProc = 0;
            effectSpellPower = 0;
            effectIntellect = 0;
            effectMasteryRating = 0;
            effectMastery = 0;
            effectCrit = 0;
            effectManaAdeptMultiplier = 1;
            threatPerSecond = 0;
            effectThreatPerSecond = 0;
            costPerSecond = 0;
            manaRegenPerSecond = 0;
            DpsPerSpellPower = 0;
            DpsPerMastery = 0;
            DpsPerCrit = 0;
            Absorbed = 0;

            ProvidesSnare = false;
            ProvidesScorch = false;

            AreaEffect = false;
            //AoeSpell = null;

            HitProcs = 0;
            Ticks = 0;
            CastProcs = 0;
            CastProcs2 = 0;
            NukeProcs = 0;
            NukeProcs2 = 0;
            CritProcs = 0;
            IgniteProcs = 0;
            DotProcs = 0;
            CastTime = 0;
            TargetProcs = 0;
            DamageProcs = 0;
            OO5SR = 0;
        }