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; } }
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(); } }