/// <summary> /// This a basic IT, PS, HSx4 (or BBx4), DSx3, RSx? rotation. /// </summary> public void PRE_BloodDiseaseLess() { m_szRotationName = "Blood Diseaseless Rotation"; ResetRotation(); // This will only happen while tanking... // Setup an instance of each ability. // No runes: // AbilityDK_Outbreak OutB = new AbilityDK_Outbreak(m_CT.m_CState); // Single Runes: //AbilityDK_IcyTouch IT = new AbilityDK_IcyTouch(m_CT.m_CState); //AbilityDK_FrostFever FF = new AbilityDK_FrostFever(m_CT.m_CState); //AbilityDK_PlagueStrike PS = new AbilityDK_PlagueStrike(m_CT.m_CState); //AbilityDK_BloodPlague BP = new AbilityDK_BloodPlague(m_CT.m_CState); // AbilityDK_BloodStrike BS = new AbilityDK_BloodStrike(m_CT.m_CState); AbilityDK_HeartStrike HS = new AbilityDK_HeartStrike(m_CT.m_CState); // AbilityDK_NecroticStrike NS = new AbilityDK_NecroticStrike(m_CT.m_CState); // AbilityDK_Pestilence Pest = new AbilityDK_Pestilence(m_CT.m_CState); AbilityDK_BloodBoil BB = new AbilityDK_BloodBoil(m_CT.m_CState); // AbilityDK_HowlingBlast HB = new AbilityDK_HowlingBlast(m_CT.m_CState); // AbilityDK_ScourgeStrike SS = new AbilityDK_ScourgeStrike(m_CT.m_CState); // AbilityDK_DeathNDecay DnD = new AbilityDK_DeathNDecay(m_CT.m_CState); // Multi Runes: AbilityDK_DeathStrike DS = new AbilityDK_DeathStrike(m_CT.m_CState); // AbilityDK_FesteringStrike Fest = new AbilityDK_FesteringStrike(m_CT.m_CState); // AbilityDK_Obliterate OB = new AbilityDK_Obliterate(m_CT.m_CState); // RP: Unlikely to start w/ RP abilities to open. AbilityDK_RuneStrike RS = new AbilityDK_RuneStrike(m_CT.m_CState); // each RS gives a 45% chance to renew a fully depleted runes. // thus 20 RSs gets us 9 extra runes. // Same is true for DC & FS // AbilityDK_DeathCoil DC = new AbilityDK_DeathCoil(m_CT.m_CState); // AbilityDK_FrostStrike FS = new AbilityDK_FrostStrike(m_CT.m_CState); AbilityDK_DancingRuneWeapon DRW = new AbilityDK_DancingRuneWeapon(m_CT.m_CState); // Fire DRW every chance we get. ml_Rot.Add(DRW); // Fill the 1.5 min CD w/ the sub rotation. uint subrotDuration = (9 * MIN_GCD_MS); for (int count = (int)(DRW.Cooldown / subrotDuration); count > 0; count--) { // Simple ITx1, PSx1, DSx1, HSx2 or BBx2, RS w/ RP (x3ish). ml_Rot.Add(DS); ml_Rot.Add(DS); // ml_Rot.Add(BP); // Scarlet Fever is tied to this for 4.0.6 if (HS.TotalThreat > BB.TotalThreat) { // Just HSx4 ml_Rot.Add(HS); ml_Rot.Add(HS); ml_Rot.Add(HS); ml_Rot.Add(HS); } else { // if BB does more, then BB. ml_Rot.Add(BB); ml_Rot.Add(BB); ml_Rot.Add(BB); ml_Rot.Add(BB); } // These will create DeathRunes that can allow flexibility in the rotation later on. ml_Rot.Add(DS); ml_Rot.Add(DS); ml_Rot.Add(DS); } #region Runic Power Pass 1. // How much RP do we have at this point? foreach (AbilityDK_Base ab in ml_Rot) m_RunicPower += ab.RunicPower; m_RunicPower = (int)((float)m_RunicPower); if (m_CT.m_CState.m_Stats.RPp5 > 0) m_RunicPower -= (int)((CurRotationDuration / 5) * m_CT.m_CState.m_Stats.RPp5); // Burn what we can. float RSCount = 0; for (RSCount = Math.Abs(m_RunicPower / RS.RunicPower); RSCount > 0; RSCount--) { ml_Rot.Add(RS); m_RunicPower += RS.RunicPower; } #endregion BuildCosts(); #region RunicPower Pass 2. // How much RP do we have at this point? if (m_CT.m_CState.m_Stats.RPp5 > 0) m_RunicPower -= (int)((CurRotationDuration / 5) * m_CT.m_CState.m_Stats.RPp5); // Burn what we can. for (RSCount = Math.Abs((float)m_RunicPower / (float)RS.RunicPower); RSCount > 0; RSCount--) { if (RSCount >= 1) { ml_Rot.Add(RS); m_RunicPower += RS.RunicPower; } else { AbilityDK_RuneStrike RSPartial = new AbilityDK_RuneStrike(m_CT.m_CState); RSPartial.fPartialValue = RSCount; RSPartial.bPartial = true; RSPartial.szName = "RS (partial)"; RSPartial.RunicPower = (int)((float)RS.AbilityCost[(int)DKCostTypes.RunicPower] * RSCount); m_RunicPower += RSPartial.RunicPower; ml_Rot.Add(RSPartial); } } #endregion BuildCosts(); }
/// <summary> /// Generate a rotation based on available resources. /// </summary> public void PostAbilitiesSingleUse(bool bThreat) { // Setup an instance of each ability. // No runes: AbilityDK_Outbreak OutB = new AbilityDK_Outbreak(m_CState); // Single Runes: AbilityDK_IcyTouch IT = new AbilityDK_IcyTouch(m_CState); PostData(IT); AbilityDK_FrostFever FF = new AbilityDK_FrostFever(m_CState); PostData(FF); AbilityDK_PlagueStrike PS = new AbilityDK_PlagueStrike(m_CState); PostData(PS); AbilityDK_BloodPlague BP = new AbilityDK_BloodPlague(m_CState); PostData(BP); AbilityDK_BloodStrike BS = new AbilityDK_BloodStrike(m_CState); PostData(BS); AbilityDK_HeartStrike HS = new AbilityDK_HeartStrike(m_CState); PostData(HS); AbilityDK_NecroticStrike NS = new AbilityDK_NecroticStrike(m_CState); PostData(NS); // AbilityDK_Pestilence Pest = new AbilityDK_Pestilence(m_CState); AbilityDK_BloodBoil BB = new AbilityDK_BloodBoil(m_CState); PostData(BB); AbilityDK_HowlingBlast HB = new AbilityDK_HowlingBlast(m_CState); PostData(HB); AbilityDK_ScourgeStrike SS = new AbilityDK_ScourgeStrike(m_CState); PostData(SS); AbilityDK_DeathNDecay DnD = new AbilityDK_DeathNDecay(m_CState); PostData(DnD); // Multi Runes: AbilityDK_DeathStrike DS = new AbilityDK_DeathStrike(m_CState); PostData(DS); AbilityDK_FesteringStrike Fest = new AbilityDK_FesteringStrike(m_CState); PostData(Fest); AbilityDK_Obliterate OB = new AbilityDK_Obliterate(m_CState); PostData(OB); // RP: AbilityDK_RuneStrike RS = new AbilityDK_RuneStrike(m_CState); PostData(RS); AbilityDK_DeathCoil DC = new AbilityDK_DeathCoil(m_CState); PostData(DC); AbilityDK_FrostStrike FS = new AbilityDK_FrostStrike(m_CState); PostData(FS); }
/// <summary> /// This is my fire 1 of everything rotation. /// </summary> public void PRE_OneEachRot() { m_szRotationName = "One Each Rotation"; ResetRotation(); // Setup an instance of each ability. // No runes: AbilityDK_Outbreak OutB = new AbilityDK_Outbreak(m_CT.m_CState); // Single Runes: AbilityDK_IcyTouch IT = new AbilityDK_IcyTouch(m_CT.m_CState); AbilityDK_FrostFever FF = new AbilityDK_FrostFever(m_CT.m_CState); AbilityDK_PlagueStrike PS = new AbilityDK_PlagueStrike(m_CT.m_CState); AbilityDK_BloodPlague BP = new AbilityDK_BloodPlague(m_CT.m_CState); AbilityDK_BloodStrike BS = new AbilityDK_BloodStrike(m_CT.m_CState); AbilityDK_HeartStrike HS = new AbilityDK_HeartStrike(m_CT.m_CState); AbilityDK_NecroticStrike NS = new AbilityDK_NecroticStrike(m_CT.m_CState); AbilityDK_Pestilence Pest = new AbilityDK_Pestilence(m_CT.m_CState); AbilityDK_BloodBoil BB = new AbilityDK_BloodBoil(m_CT.m_CState); AbilityDK_HowlingBlast HB = new AbilityDK_HowlingBlast(m_CT.m_CState); AbilityDK_ScourgeStrike SS = new AbilityDK_ScourgeStrike(m_CT.m_CState); AbilityDK_DeathNDecay DnD = new AbilityDK_DeathNDecay(m_CT.m_CState); // Multi Runes: AbilityDK_DeathStrike DS = new AbilityDK_DeathStrike(m_CT.m_CState); AbilityDK_FesteringStrike Fest = new AbilityDK_FesteringStrike(m_CT.m_CState); AbilityDK_Obliterate OB = new AbilityDK_Obliterate(m_CT.m_CState); // RP: Unlikely to start w/ RP abilities to open. AbilityDK_RuneStrike RS = new AbilityDK_RuneStrike(m_CT.m_CState); AbilityDK_DeathCoil DC = new AbilityDK_DeathCoil(m_CT.m_CState); AbilityDK_FrostStrike FS = new AbilityDK_FrostStrike(m_CT.m_CState); // For now, let's just blow everything in here one each. ml_Rot.Add(IT); ml_Rot.Add(FF); ml_Rot.Add(PS); ml_Rot.Add(BP); ml_Rot.Add(BS); ml_Rot.Add(HS); ml_Rot.Add(BB); ml_Rot.Add(NS); ml_Rot.Add(HB); ml_Rot.Add(SS); ml_Rot.Add(DnD); ml_Rot.Add(DS); ml_Rot.Add(OB); ml_Rot.Add(Fest); ml_Rot.Add(RS); ml_Rot.Add(DC); ml_Rot.Add(FS); BuildCosts(); }