Beispiel #1
0
        public override void Initialize(CharacterCalculationsDPSWarr calcs)
        {
            base.Initialize(calcs);

            bool hsok = CalcOpts.Maintenance[(int)Rawr.DPSWarr.CalculationOptionsDPSWarr.Maintenances.HeroicStrike_];
            bool clok =
#if RAWR3 || SILVERLIGHT
                BossOpts.MultiTargs && BossOpts.Targets != null && BossOpts.Targets.Count > 0
#else
                CalcOpts.MultipleTargets
#endif
                && CalcOpts.Maintenance[(int)Rawr.DPSWarr.CalculationOptionsDPSWarr.Maintenances.Cleave_];
            BloodSurge _BS = GetWrapper <BloodSurge>().ability as BloodSurge;

            percHS = (hsok ? 1f : 0f);
            if (clok)
            {
#if RAWR3 || SILVERLIGHT
                //percHS -= (float)BossOpts.MultiTargsPerc;
                {
                    float time = 0;
                    foreach (TargetGroup tg in BossOpts.Targets)
                    {
                        if (tg.Chance <= 0 || tg.Frequency <= 0 || tg.Duration <= 0)
                        {
                            continue;
                        }
                        time += tg.Frequency / BossOpts.BerserkTimer * tg.Duration / 1000f;
                    }
                    float perc = time / BossOpts.BerserkTimer;
                    percHS -= Math.Max(0f, Math.Min(1f, perc));
                }
#else
                percHS -= (float)CalcOpts.MultipleTargetsPerc / 100f;
#endif
            }
            percCL = (clok ? 1f - percHS : 0f);
            if (_BS != null)
            {
                _BS.maintainActs = MaintainCDs;
            }
        }
Beispiel #2
0
        public override void doIterations()
        {
            try
            {
                base.doIterations();
                // Fury Iteration
                BloodSurge  BS  = GetWrapper <BloodSurge>().ability as BloodSurge;
                AbilWrapper HS  = GetWrapper <HeroicStrike>();
                AbilWrapper CL  = GetWrapper <Cleave>();
                OnAttack    _HS = HS.ability as OnAttack;
                OnAttack    _CL = CL.ability as OnAttack;

                float ovdRage, hsRageUsed, clRageUsed;
                float oldBS, oldHS, oldCL;
                do
                {
                    oldBS = BS.Activates;
                    oldHS = HS.allNumActivates;
                    oldCL = CL.allNumActivates;

                    ovdRage    = FreeRageOverDur;
                    hsRageUsed = ovdRage * percHS;
                    clRageUsed = ovdRage * percCL;
                    WhiteAtks.HSOverridesOverDur = HS.numActivates = Math.Min(hsRageUsed / _HS.FullRageCost, WhiteAtks.MhActivatesNoHS);
                    WhiteAtks.CLOverridesOverDur = CL.numActivates = Math.Min(clRageUsed / _CL.FullRageCost, WhiteAtks.MhActivatesNoHS - WhiteAtks.HSOverridesOverDur);
                    BS.hsActivates = HS.allNumActivates;
                } while (Math.Abs(1f - (BS.Activates != 0 ? oldBS / BS.Activates        : 1f)) > 0.005f ||
                         Math.Abs(1f - (HS.allNumActivates <= 0 ? oldHS / HS.allNumActivates : 1f)) > 0.005f ||
                         Math.Abs(1f - (CL.allNumActivates <= 0 ? oldCL / CL.allNumActivates : 1f)) > 0.005f);
            }
            catch (Exception ex)
            {
                ErrorBox eb = new ErrorBox("Error in performing Fury Iterations",
                                           ex.Message, "doIterations()", "No Additional Info", ex.StackTrace);
                eb.Show();
            }
        }