private void BombRotation() { WoW.CastSpell("Soul Carver", true); WoW.CastSpell("Fiery Brand", !WoW.TargetHasDebuff("Fiery Demise") && !WoW.IsSpellOnCooldown("Fiery Brand")); WoW.CastSpell("Immolation Aura", true); WoW.CastSpell("Shear", WoW.Pain < 30, !WoW.PlayerHasBuff("Metamorphasis")); // generate pain WoW.CastSpell("Sever", WoW.Pain < 30, WoW.PlayerHasBuff("Metamorphasis")); WoW.CastSpell("Fracture", !WoW.PlayerHasBuff("Soul Fragments") || WoW.PlayerBuffStacks("Soul Fragments") <= 3); WoW.CastSpell("Soul Cleave", WoW.PlayerHealthPercent < 50); WoW.CastSpell("Spirit Bomb", WoW.PlayerHasBuff("Soul Fragments") && WoW.PlayerBuffStacks("Soul Fragments") >= 4); WoW.CastSpell("Sigil of Flame", !WoW.TargetHasDebuff("Sigil of Flame")); WoW.CastSpell("Shear", !WoW.PlayerHasBuff("Metamorphasis")); // filler WoW.CastSpell("Sever", WoW.PlayerHasBuff("Metamorphasis")); }
public override void Pulse() { var SavageRoarTime = WoW.PlayerBuffTimeRemaining("SavageRoar"); // 200 = 2 seconds var RakeTime = WoW.TargetDebuffTimeRemaining("Rake"); var RipTime = WoW.TargetDebuffTimeRemaining("Rip"); var MoonfireTime = WoW.TargetDebuffTimeRemaining("Moonfire"); WoW.CastSpell("Berserk", UseCooldowns && !WoW.PlayerHasBuff("Prowl")); WoW.CastSpell("Regrowth", WoW.PlayerHasBuff("PredatorySwiftness") && WoW.PlayerBuffStacks("Bloodtalons") != 2 && !WoW.PlayerHasBuff("Prowl")); // Cast Ferocious Bite if at 5 Combo Points and Rip / Savage Roar do not need refreshing within 10 sec. WoW.CastSpell("FerociousBite", WoW.CurrentComboPoints >= 5 && RipTime > 1000 && SavageRoarTime > 1000 && !WoW.PlayerHasBuff("Prowl")); // Maintain Savage Roar if taken. WoW.CastSpell("SavageRoar", WoW.Talent(6) == 3 && SavageRoarTime <= 200 && WoW.CurrentComboPoints >= 1 && WoW.Energy >= 40 && !WoW.PlayerHasBuff("Prowl")); // Maintain Rake. WoW.CastSpell("Rake", RakeTime <= 200 && WoW.Energy >= 35); // Maintain Rip (at below 25%, or with Sabertooth taken, replace with Ferocious Bite). WoW.CastSpell("Rip", RipTime <= 200 && WoW.Talent(6) != 1 && WoW.CurrentComboPoints >= 1 && WoW.Energy >= 30); WoW.CastSpell("FerociousBite", RipTime <= 200 && WoW.TargetHealthPercent <= 25 && WoW.Talent(6) == 1 && WoW.CurrentComboPoints >= 1); // Maintain Moonfire if Lunar Inspiration is taken. WoW.CastSpell("Moonfire", MoonfireTime <= 200 && WoW.Energy >= 30 && WoW.Talent(1) == 3); // Use any Omen of Clarity procs to maintain Thrash if using Luffa Wrappings. // Will code this when i get the item till then stuff it.... :) // Cast Tiger's Fury at 20 Energy or less. WoW.CastSpell("TigersFury", WoW.Energy <= 20, false); // Cast Ashamane's Frenzy, try to sync this with Tiger's Fury uses. WoW.CastSpell("Ashamane", true); // Cast Shred to build combo points. WoW.CastSpell("Shred", (WoW.Energy >= 40 || WoW.PlayerHasBuff("ClearCasting")) && WoW.CountEnemyNPCsInRange <= 1); WoW.CastSpell("Thrash", (WoW.Energy >= 40 || WoW.PlayerHasBuff("ClearCasting")) && WoW.CountEnemyNPCsInRange >= 2); // When using Brutal Slash, try to make sure that you always have at least one charge on cooldown, // but have as many charges as possible when a wave of enemies comes into range. // Try to have short duration buffs such as Tiger's Fury and Bloodtalons active // on as many high target casts of this as possible, as it deals massive AoE burst damage with each cast. WoW.CastSpell("BrutalSlash", WoW.Talent(6) == 2 && WoW.Energy >= 20 && WoW.PlayerSpellCharges("BrutalSlash") > 1); WoW.CastSpell("BrutalSlash", WoW.Talent(6) == 2 && WoW.Energy >= 20 && WoW.PlayerSpellCharges("BrutalSlash") == 1 && WoW.PlayerHasBuff("TigersFury")); }
private void CooldownUsage() { if (!UseCooldowns) { return; } if (PIBloodlustBox.Checked && CheckBloodlust() >= 20) { SpellCast(POWER_INFUSION); } if (PIStacksBox.Checked && WoW.PlayerHasBuff(VOIDFORM_AURA) && WoW.PlayerBuffStacks(VOIDFORM_AURA) >= 20) { SpellCast(POWER_INFUSION); } if (PIWaitBox.Checked && WoW.IsSpellOnCooldown(SHADOW_FIEND) && WoW.SpellCooldownTimeRemaining(SHADOW_FIEND) > txtPIWait) { SpellCast(POWER_INFUSION); } if (SFPIBox.Checked && (WoW.PlayerBuffTimeRemaining(POWER_INFUSION_AURA) == 1200 || CheckBloodlust() == 1200)) { SpellCast(SHADOW_FIEND); } if (SFWaitBox.Checked && WoW.IsSpellOnCooldown(POWER_INFUSION) && WoW.SpellCooldownTimeRemaining(POWER_INFUSION) > txtSFWait) { SpellCast(SHADOW_FIEND); } if (!MoveCheck() && VoidTorrentRadio1.Checked && DotsUp() && VoidTorrentBox.Checked && WoW.IsSpellOnCooldown(MIND_BLAST) && WoW.IsSpellOnCooldown(VOID_BOLT)) { SpellCast(VOID_TORRENT); } if (WoW.HealthPercent < txtVE && !WoW.IsSpellOnCooldown(VAMPIRIC_EMBRACE)) { Log.Write("Health below " + txtVE + "% - Using Vampiric Embrace now", Color.Red); SpellCast(VAMPIRIC_EMBRACE); return; } if (!WoW.ItemOnCooldown(ITEM_KILJAEDEN) && LegTrinketBox.Checked && DotsUp()) { SpellCast(ITEM_KILJAEDEN); } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.CanCast("Summon Water Elemental") && WoW.Talent(1) != 2 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.HasPet) { WoW.CastSpell("Summon Water Elemental"); return; } if (WoW.HasTarget && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Invisibility")) { //Movement Control //Insta-Cast Flurry on Proc and ice lance for shatter. if (WoW.CanCast("Flurry") && WoW.PlayerHasBuff("Brain Freeze")) { WoW.CastSpell("Flurry"); } if (WoW.CanCast("Ice Lance") && WoW.WasLastCasted("Flurry") && WoW.PlayerHasBuff("Icy Veins")) { WoW.CastSpell("Ice Lance"); } // FoF Creation if (WoW.PlayerBuffStacks("Chain Reaction") >= 1 && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 30 && !WoW.WasLastCasted("Flurry")) { if (WoW.CanCast("Frozen Orb") && !WoW.IsSpellOnCooldown("Frozen Orb") && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 60) { WoW.CastSpell("Frozen Orb"); } if (WoW.CanCast("Blizzard") && WoW.PlayerHasBuff("Free Blizzard")) { WoW.CastSpell("Blizzard"); return; } if (WoW.CanCast("Frozen Touch") && !WoW.IsMoving && WoW.PlayerBuffStacks("Fingers of Frost") <= 1 && WoW.IsSpellOnCooldown("Frozen Orb") && !WoW.WasLastCasted("Frozen Orb")) { WoW.CastSpell("Frozen Touch"); } if (WoW.CanCast("Ebonbolt") && !WoW.IsMoving && !WoW.PlayerHasBuff("Fingers of Frost") && !WoW.PlayerHasBuff("Brain Freeze") && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 45) { WoW.CastSpell("Ebonbolt"); return; } } //Ice Lance Control if (WoW.CanCast("Ice Lance") && WoW.WasLastCasted("Frostbolt") && WoW.PlayerHasBuff("Chain Reaction") && WoW.PlayerBuffStacks("Chain Reaction") >= 1 && WoW.PlayerHasBuff("Fingers of Frost") && WoW.PlayerBuffStacks("Fingers of Frost") >= 2) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Fingers of Frost") == 3) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Fingers of Frost") >= 1 && WoW.WasLastCasted("Ice Lance")) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && !WoW.PlayerHasBuff("Brain Freeze") && WoW.WasLastCasted("Flurry")) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Chain Reaction") >= 1 && WoW.PlayerHasBuff("Fingers of Frost") && WoW.PlayerBuffStacks("Fingers of Frost") >= 1) { WoW.CastSpell("Ice Lance"); return; } //Frostbolt Control if (!WoW.PlayerHasBuff("Brain Freeze") && !WoW.WasLastCasted("Flurry") && !WoW.IsMoving) { if (WoW.CanCast("Frostbolt") && !WoW.PlayerHasBuff("Fingers of Frost") && !WoW.WasLastCasted("Frostbolt")) { WoW.CastSpell("Frostbolt"); return; } if (WoW.CanCast("Frostbolt") && WoW.PlayerBuffStacks("Chain Reaction") <= 2 && !WoW.WasLastCasted("Frostbolt")) { WoW.CastSpell("Frostbolt"); return; } if (WoW.CanCast("Frostbolt") && WoW.PlayerHasBuff("Chain Reaction") && WoW.PlayerBuffStacks("Chain Reaction") == 3 && WoW.PlayerBuffTimeRemaining("Chain Reaction") <= 2) { WoW.CastSpell("Frostbolt"); return; } } if (!WoW.PlayerHasBuff("Brain Freeze") && !WoW.WasLastCasted("Flurry") && WoW.IsMoving) { if (WoW.CanCast("Ice Lance")) { WoW.CastSpell("Ice Lance"); } } } } if (combatRoutine.Type == RotationType.AOE) { if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat) //Pull need to do by yourself - to prevent a mess { if (WoW.CanCast("Metamorphosis") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Metamorphosis Usage Percent")) { //Log.Write("Metamorphosis"); Log.Write("Health low < set % using CDs...", Color.Red); WoW.CastSpell("Metamorphosis"); // Off the GCD no return needed } if (WoW.TargetIsCastingAndSpellIsInterruptible) //interupt every spell with all we got { if (WoW.CanCast("Consume Magic") && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Consume Magic")) { WoW.CastSpell("Consume Magic"); return; } if (Bloodelf && WoW.CanCast("Arcane Torrent") && WoW.IsSpellOnCooldown("Consume Magic") && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Arcane Torrent"); return; } if (WoW.CanCast("Sigil of Silence") && WoW.IsSpellOnCooldown("Consume Magic") && (WoW.IsSpellOnCooldown("Arcane Torrent") || !Bloodelf) && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Sigil of Silence"); return; } } if (WoW.CanCast("Fiery Brand") && WoW.IsSpellInRange("Fiery Brand") && !WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fiery Brand"); } if (WoW.CanCast("Soul Carver") && WoW.IsSpellInRange("Soul Carver") && WoW.SpellCooldownTimeRemaining("Fiery Brand") >= 10) { WoW.CastSpell("Soul Carver"); return; } if (WoW.CanCast("Spirit Bomb") && WoW.IsSpellInRange("Spirit Bomb") && WoW.PlayerHasBuff("Soul Fragments") && !WoW.TargetHasDebuff("Frailty")) { WoW.CastSpell("Spirit Bomb"); return; } if (WoW.CanCast("Sigil of Flame") && WoW.IsSpellInRange("Soul Carver") && WoW.TargetHasDebuff("Fiery Demise") && WoW.TargetDebuffTimeRemaining("Fiery Demise") >= 7) { WoW.CastSpell("Sigil of Flame"); return; } if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10 && WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Soul Barrier") && WoW.Pain >= 10 && WoW.PlayerHasBuff("Soul Fragments") && WoW.PlayerBuffStacks("Soul Fragments") >= 4) { WoW.CastSpell("Soul Barrier"); return; } if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && (WoW.Pain >= 92 || WoW.HealthPercent < 90 && WoW.Pain >= 20)) // to not waste cd and pain { WoW.CastSpell("Demon Spikes"); } if (WoW.IsSpellInRange("Soul Carver")) { if (WoW.CanCast("Soul Cleave") && ((WoW.Pain >= 30 && WoW.HealthPercent < 25) || (WoW.Pain >= 80 && WoW.HealthPercent < 50 && !WoW.CanCast("Demon Spikes")) || (WoW.Pain >= 60 && WoW.HealthPercent < 50 && WoW.PlayerHasBuff("Demon Spikes")))) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Fracture") && ((WoW.Pain >= 20 && WoW.HealthPercent >= 50 && WoW.PlayerHasBuff("Demon Spikes")) || (WoW.Pain >= 80 && WoW.HealthPercent >= 50 && !WoW.CanCast("Demon Spikes")))) { WoW.CastSpell("Fracture"); return; } if (WoW.CanCast("Immolation Aura")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Sigil of Flame")) { WoW.CastSpell("Sigil of Flame"); return; } } if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Sever") && WoW.IsSpellInRange("Soul Carver") && WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator { WoW.CastSpell("Sever"); return; } if (WoW.CanCast("Shear") && WoW.IsSpellInRange("Soul Carver") && !WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator { WoW.CastSpell("Shear"); return; } if (WoW.CanCast("Throw Glaive") && !WoW.IsSpellInRange("Soul Carver") && WoW.IsSpellInRange("Throw Glaive")) //Need to implement range 30y for Throw Glaive spell 204157 { WoW.CastSpell("Throw Glaive"); return; } } } if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.SingleTargetCleave) { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat) //Pull need to do by yourself - to prevent a mess { if (WoW.CanCast("Metamorphosis") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Metamorphosis Usage Percent")) { //Log.Write("Metamorphosis"); Log.Write("Health low < set % using CDs...", Color.Red); WoW.CastSpell("Metamorphosis"); // Off the GCD no return needed } if (WoW.TargetIsCastingAndSpellIsInterruptible) //interupt every spell with all we got { if (WoW.CanCast("Consume Magic") && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Consume Magic")) { WoW.CastSpell("Consume Magic"); return; } if (Bloodelf && WoW.CanCast("Arcane Torrent") && WoW.IsSpellOnCooldown("Consume Magic") && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Arcane Torrent"); return; } if (WoW.CanCast("Sigil of Silence") && WoW.IsSpellOnCooldown("Consume Magic") && (WoW.IsSpellOnCooldown("Arcane Torrent") || !Bloodelf) && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Sigil of Silence"); return; } } if (WoW.CanCast("Fiery Brand") && WoW.IsSpellInRange("Fiery Brand") && !WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fiery Brand"); } if (WoW.CanCast("Soul Carver") && WoW.IsSpellInRange("Soul Carver") && WoW.SpellCooldownTimeRemaining("Fiery Brand") >= 10) { WoW.CastSpell("Soul Carver"); return; } if (WoW.CanCast("Spirit Bomb") && WoW.IsSpellInRange("Spirit Bomb") && WoW.PlayerHasBuff("Soul Fragments") && !WoW.TargetHasDebuff("Frailty")) { WoW.CastSpell("Spirit Bomb"); return; } if (WoW.CanCast("Sigil of Flame") && WoW.IsSpellInRange("Soul Carver") && WoW.TargetHasDebuff("Fiery Demise") && WoW.TargetDebuffTimeRemaining("Fiery Demise") >= 7) { WoW.CastSpell("Sigil of Flame"); return; } if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10 && WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Soul Barrier") && WoW.Pain >= 10 && WoW.PlayerHasBuff("Soul Fragments") && WoW.PlayerBuffStacks("Soul Fragments") >= 4) { WoW.CastSpell("Soul Barrier"); return; } if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && (WoW.Pain >= 92 || WoW.HealthPercent < 90 && WoW.Pain >= 20)) // to not waste cd and pain { WoW.CastSpell("Demon Spikes"); } if (WoW.IsSpellInRange("Soul Carver")) { if (WoW.CanCast("Soul Cleave") && ((WoW.Pain >= 30 && WoW.HealthPercent < 25) || (WoW.Pain >= 80 && !WoW.CanCast("Demon Spikes")) || (WoW.Pain >= 60 && WoW.PlayerHasBuff("Demon Spikes")))) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Immolation Aura")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Sigil of Flame")) { WoW.CastSpell("Sigil of Flame"); return; } } if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Sever") && WoW.IsSpellInRange("Soul Carver") && WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator { WoW.CastSpell("Sever"); return; } if (WoW.CanCast("Shear") && WoW.IsSpellInRange("Soul Carver") && !WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator { WoW.CastSpell("Shear"); return; } if (WoW.CanCast("Throw Glaive") && !WoW.IsSpellInRange("Soul Carver") && WoW.IsSpellInRange("Throw Glaive")) //Need to implement range 30y for Throw Glaive spell 204157 { WoW.CastSpell("Throw Glaive"); return; } } } }
public override void Pulse() { if (WoW.IsInCombat) { interruptwatch.Start(); } if (UseCooldowns) { } //if (WoW.PlayerHasBuff("Mount")) return; if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat) //Pull need to do by yourself - to prevent a mess { if (WoW.HealthPercent < 30 && !WoW.IsSpellOnCooldown("Metamorphasis")) { WoW.Speak("Metamorphosis"); Log.Write("Health low < 30% using CDs...", Color.Red); WoW.CastSpell("Metamorphasis"); // Off the GCD no return needed } if (WoW.CanCast("Throw Glaive") && !WoW.IsSpellInRange("Soul Carver") && WoW.IsSpellInRange("Fel Eruption")) //Need to implement range 30y for Throw Glaive spell 204157 { WoW.CastSpell("Throw Glaive"); return; } if (!WoW.IsSpellInRange("Soul Carver")) // If we are out of melee range return { return; } if (WoW.TargetIsCasting && interruptwatch.ElapsedMilliseconds > 1200) { if (!WoW.IsSpellOnCooldown("Sigal of Silence") && WoW.WasLastCasted("Arcane Torrent")) { WoW.Speak("Interrupting spell"); WoW.CastSpell("Sigal of Silence"); interruptwatch.Reset(); interruptwatch.Start(); return; } if (!WoW.IsSpellOnCooldown("Arcane Torrent") && WoW.WasLastCasted("Sigal of Silence")) { WoW.Speak("Interrupting spell"); WoW.CastSpell("Arcane Torrent"); interruptwatch.Reset(); interruptwatch.Start(); return; } } if (WoW.CanCast("Fiery Brand") && !WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fiery Brand"); } if (WoW.CanCast("Soul Carver") && WoW.SpellCooldownTimeRemaining("Fiery Brand") >= 10) { WoW.CastSpell("Soul Carver"); return; } if (WoW.CanCast("Spirit Bomb") && WoW.PlayerHasBuff("Soul Fragments") && !WoW.TargetHasDebuff("Frailty")) { WoW.CastSpell("Spirit Bomb"); return; } if (WoW.CanCast("Sigil of Flame") && WoW.TargetHasDebuff("Fiery Demise") && WoW.TargetDebuffTimeRemaining("Fiery Demise") >= 7) { //WoW.CastSpellOnMe("Sigil of Flame"); // Use this if you not using "Concentrated Sigal's" talent - this is a little buggy!!! WoW.CastSpell("Sigil of Flame"); // NB must have "Concentrated Sigal's" talent return; } if (WoW.CanCast("Fel Eruption") && WoW.Pain >= 10 && WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Soul Barrier") && WoW.Pain >= 10 && WoW.PlayerHasBuff("Soul Fragments") && WoW.PlayerBuffStacks("Soul Fragments") >= 4) { WoW.CastSpell("Soul Barrier"); return; } if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && (WoW.Pain == 100 || WoW.HealthPercent < 80 && WoW.Pain >= 20)) // to not waste cd and pain { WoW.CastSpell("Demon Spikes"); } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 30 && WoW.HealthPercent < 25) // Extra save, when we are on too low hp { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 80 && WoW.HealthPercent < 50 && !WoW.CanCast("Demon Spikes")) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 60 && WoW.HealthPercent < 50 && WoW.PlayerHasBuff("Demon Spikes")) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Fracture") && WoW.Pain >= 20 && WoW.HealthPercent >= 50 && WoW.PlayerHasBuff("Demon Spikes")) { WoW.CastSpell("Fracture"); return; } if (WoW.CanCast("Fracture") && WoW.Pain >= 80 && WoW.HealthPercent >= 50 && !WoW.CanCast("Demon Spikes")) { WoW.CastSpell("Fracture"); return; } if (WoW.CanCast("Immolation Aura")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Sigil of Flame")) { //WoW.CastSpellOnMe("Sigil of Flame"); // Use this if you not using "Concentrated Sigal's" talent - this is a little buggy!!! WoW.CastSpell("Sigil of Flame"); // NB must have "Concentrated Sigal's" talent return; } if (WoW.CanCast("Fel Eruption") && WoW.Pain >= 10) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Sever") && WoW.PlayerHasBuff("Metamorphasis")) // Pain Generator { WoW.CastSpell("Sever"); return; } if (WoW.CanCast("Shear") && !WoW.PlayerHasBuff("Metamorphasis")) // Pain Generator { WoW.CastSpell("Shear"); return; } } } if (combatRoutine.Type == RotationType.SingleTargetCleave) { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat) //Pull need to do by yourself - to prevent a mess { if (WoW.HealthPercent < 30 && !WoW.IsSpellOnCooldown("Metamorphasis")) { WoW.Speak("Metamorphosis"); Log.Write("Health low < 30% using CDs...", Color.Red); WoW.CastSpell("Metamorphasis"); // Off the GCD no return needed } if (!WoW.IsSpellInRange("Soul Carver") && !WoW.IsSpellOnCooldown("Throw Glaive") && WoW.IsSpellInRange("Fel Eruption")) //Need to implement range 30y for Throw Glaive spell 204157 { WoW.CastSpell("Throw Glaive"); return; } if (!WoW.IsSpellInRange("Soul Carver")) // If we are out of melee range return { return; } if (WoW.TargetIsCasting && interruptwatch.ElapsedMilliseconds > 1200) { if (!WoW.IsSpellOnCooldown("Sigal of Silence") && WoW.WasLastCasted("Arcane Torrent")) { WoW.Speak("Interrupting spell"); WoW.CastSpell("Sigal of Silence"); interruptwatch.Reset(); interruptwatch.Start(); return; } if (!WoW.IsSpellOnCooldown("Arcane Torrent") && WoW.WasLastCasted("Sigal of Silence")) { WoW.Speak("Interrupting spell"); WoW.CastSpell("Arcane Torrent"); interruptwatch.Reset(); interruptwatch.Start(); return; } } if (WoW.CanCast("Fiery Brand") && !WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fiery Brand"); } if (WoW.CanCast("Soul Carver") && WoW.SpellCooldownTimeRemaining("Fiery Brand") >= 10) { WoW.CastSpell("Soul Carver"); return; } if (WoW.CanCast("Spirit Bomb") && WoW.PlayerHasBuff("Soul Fragments") && !WoW.TargetHasDebuff("Frailty")) { WoW.CastSpell("Spirit Bomb"); return; } if (WoW.CanCast("Sigil of Flame") && WoW.TargetHasDebuff("Fiery Demise") && WoW.TargetDebuffTimeRemaining("Fiery Demise") >= 7) { //WoW.CastSpellOnMe("Sigil of Flame"); // Use this if you not using "Concentrated Sigal's" talent - this is a little buggy!!! WoW.CastSpell("Sigil of Flame"); // NB must have "Concentrated Sigal's" talent return; } if (WoW.CanCast("Fel Eruption") && WoW.Pain >= 10 && WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Soul Barrier") && WoW.Pain >= 10 && WoW.PlayerHasBuff("Soul Fragments") && WoW.PlayerBuffStacks("Soul Fragments") >= 4) { WoW.CastSpell("Soul Barrier"); return; } if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && (WoW.Pain == 100 || WoW.HealthPercent < 90 && WoW.Pain >= 20)) // to not waste cd and pain { WoW.CastSpell("Demon Spikes"); } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 30 && WoW.HealthPercent < 25) // Extra save, when we are on too low hp { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 60 && WoW.PlayerHasBuff("Demon Spikes")) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 80 && !WoW.CanCast("Demon Spikes")) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Immolation Aura")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Sigil of Flame")) { //WoW.CastSpellOnMe("Sigil of Flame"); // Use this if you not using "Concentrated Sigal's" talent - this is a little buggy!!! WoW.CastSpell("Sigil of Flame"); // NB must have "Concentrated Sigal's" talent return; } if (WoW.CanCast("Fel Eruption") && WoW.Pain >= 10) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Sever") && WoW.PlayerHasBuff("Metamorphasis")) // Pain Generator { WoW.CastSpell("Sever"); return; } if (WoW.CanCast("Shear") && !WoW.PlayerHasBuff("Metamorphasis")) // Pain Generator { WoW.CastSpell("Shear"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat) //Pull need to do by yourself - to prevent a mess { if (WoW.HealthPercent < 30 && !WoW.IsSpellOnCooldown("Metamorphasis")) { WoW.Speak("Metamorphosis"); Log.Write("Health low < 30% using CDs...", Color.Red); WoW.CastSpell("Metamorphasis"); // Off the GCD no return needed } if (!WoW.IsSpellInRange("Soul Carver") && !WoW.IsSpellOnCooldown("Throw Glaive") && WoW.IsSpellInRange("Fel Eruption")) //Need to implement range 30y for Throw Glaive spell 204157 { WoW.CastSpell("Throw Glaive"); return; } if (!WoW.IsSpellInRange("Soul Carver")) // If we are out of melee range return { return; } if (WoW.TargetIsCasting && interruptwatch.ElapsedMilliseconds > 1200) { if (!WoW.IsSpellOnCooldown("Sigal of Silence") && WoW.WasLastCasted("Arcane Torrent")) { WoW.Speak("Interrupting spell"); WoW.CastSpell("Sigal of Silence"); interruptwatch.Reset(); interruptwatch.Start(); return; } if (!WoW.IsSpellOnCooldown("Arcane Torrent") && WoW.WasLastCasted("Sigal of Silence")) { WoW.Speak("Interrupting spell"); WoW.CastSpell("Arcane Torrent"); interruptwatch.Reset(); interruptwatch.Start(); return; } } if (WoW.CanCast("Fiery Brand") && !WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fiery Brand"); } if (WoW.CanCast("Soul Carver") && WoW.SpellCooldownTimeRemaining("Fiery Brand") >= 10) { WoW.CastSpell("Soul Carver"); return; } if (WoW.CanCast("Spirit Bomb") && WoW.PlayerHasBuff("Soul Fragments") && !WoW.TargetHasDebuff("Frailty")) { WoW.CastSpell("Spirit Bomb"); return; } if (WoW.CanCast("Sigil of Flame")) { //WoW.CastSpellOnMe("Sigil of Flame"); // Use this if you not using "Concentrated Sigal's" talent - this is a little buggy!!! WoW.CastSpell("Sigil of Flame"); // NB must have "Concentrated Sigal's" talent return; } if (WoW.CanCast("Fel Eruption") && WoW.Pain >= 10 && WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Soul Barrier") && WoW.Pain >= 10 && WoW.PlayerHasBuff("Soul Fragments") && WoW.PlayerBuffStacks("Soul Fragments") >= 4) { WoW.CastSpell("Soul Barrier"); return; } if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && (WoW.Pain == 100 || WoW.HealthPercent < 80 && WoW.Pain >= 20)) // to not waste cd and pain { WoW.CastSpell("Demon Spikes"); } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 30 && WoW.HealthPercent < 25) // Extra save, when we are on too low hp { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 60 && WoW.PlayerHasBuff("Demon Spikes")) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 80 && !WoW.CanCast("Demon Spikes")) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Immolation Aura")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Fel Eruption") && WoW.Pain >= 10) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Sever") && WoW.PlayerHasBuff("Metamorphasis")) // Pain Generator { WoW.CastSpell("Sever"); return; } if (WoW.CanCast("Shear") && !WoW.PlayerHasBuff("Metamorphasis")) // Pain Generator { WoW.CastSpell("Shear"); } } } }
public override void Pulse() { Log.Write("Mana: " + WoW.Mana, Color.Red); if (WoW.TankId == 0) { var f = new frmEnterTankId { TopMost = true }; f.ShowDialog(); } if (WoW.PlayerHealthPercent == 0 || WoW.IsMounted) { return; } if (WoW.PlayerIsCasting) { return; } var lowest = WoW.PartyLowestHealthPercent; var currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent; var averageHp = WoW.PartyAverageHealthPercent; WoW.TargetMember(currentTargetId); if (currentTargetId == 0) { return; } if (lowest == 100) { return; } if (WoW.GroupSize == 5) { Log.Write($"Lowest Health Target = [/target party{currentTargetId}] health = {averageHp}"); } else { Log.Write($"Lowest Health Target = [/target raid{currentTargetId}] health = {averageHp}"); } if (lowest < 85 && !WoW.IsSpellOnCooldown("ThunderFocusTea")) { WoW.CastSpell("ThunderFocusTea"); } if (WoW.PlayerHasBuff("ThunderFocusTea")) { if (averageHp < 70 && WoW.CanCast("EssenceFont") && !WoW.IsSpellOnCooldown("EssenceFont") && !WoW.PlayerHasBuff("EssenceFont")) { WoW.CastSpell("EssenceFont"); } if (averageHp < 90 && WoW.CanCast("Vivify") && !WoW.IsSpellOnCooldown("Vivify")) { WoW.CastSpell("Vivify"); } } if (WoW.IsInCombat && WoW.Mana <= 70 && !WoW.IsSpellOnCooldown("Manatea")) { WoW.CastSpell("Manatea"); return; } if (WoW.CanCast("RenewingMist") && WoW.IsInCombat && !WoW.TargetHasBuff("RenewingMist") && !WoW.PlayerHasBuff("RenewingMist") && !WoW.IsSpellOnCooldown("RenewingMist")) { WoW.CastSpell("RenewingMist"); return; } if (UseCooldowns) { if (lowest > 90) { if (WoW.CanCast("RSK") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat) { WoW.CastSpell("RSK"); return; } if (WoW.CanCast("BlackoutKick") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && WoW.PlayerBuffStacks("BlackoutBuff") == 3) { WoW.CastSpell("BlackoutKick"); return; } if (WoW.CanCast("Tiger") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && WoW.PlayerBuffStacks("BlackoutBuff") < 3) { WoW.CastSpell("Tiger"); return; } } } if (WoW.CanCast("Revival") && averageHp < 65 && !WoW.IsSpellOnCooldown("Revival")) { WoW.CastSpell("Revival"); return; } if (WoW.CanCast("LifeCocoon") && lowest <= 25 && !WoW.IsSpellOnCooldown("LifeCocoon")) { WoW.CastSpell("LifeCocoon"); return; } if (averageHp < 75) { if (WoW.CanCast("InvokeChiJitheRedCrane") && !WoW.IsSpellOnCooldown("InvokeChiJitheRedCrane")) { WoW.CastSpell("InvokeChiJitheRedCrane"); return; } if (WoW.CanCast("EssenceFont") && !WoW.IsSpellOnCooldown("EssenceFont") && !WoW.PlayerHasBuff("EssenceFont")) { WoW.CastSpell("EssenceFont"); return; } if (WoW.CanCast("Vivify")) { WoW.CastSpell("Vivify"); return; } } if (WoW.Level > 100) { if (WoW.CanCast("SheilunsGift") && lowest <= 75 && !WoW.IsMoving && WoW.PlayerSpellCharges("SheilunsGift") >= 4) { WoW.CastSpell("SheilunsGift"); return; } } if (WoW.CanCast("EnvelopingMist") && lowest <= 70 && !WoW.IsMoving && !WoW.TargetHasBuff("EnvelopingMist") && WoW.LastSpell != ("EnvelopingMist")) { WoW.CastSpell("EnvelopingMist"); return; } if (WoW.CanCast("Vivify") && lowest <= 65) { WoW.CastSpell("Vivify"); return; } if (WoW.CanCast("Effuse") && lowest <= 90 && !WoW.PlayerIsChanneling) { WoW.CastSpell("Effuse"); return; } if (WoW.CanCast("ChiWave") && lowest <= 90 && WoW.IsInCombat) { WoW.CastSpell("ChiWave"); return; } if (WoW.IsInCombat && WoW.Mana <= 70 && !WoW.IsSpellOnCooldown("Manatea")) { WoW.CastSpell("Manatea"); } }
public override void Pulse() // Updated for Legion (tested and working for single target) { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat) { if (WoW.CanCast("Marrowrend") && WoW.PlayerBuffTimeRemaining("Bone Shield") >= 3 && WoW.CurrentRunes >= 1 && !WoW.IsSpellOnCooldown("Marrowrend")) { WoW.CastSpell("Marrowrend"); return; } if (WoW.CanCast("Blood Boil") && !WoW.TargetHasDebuff("Blood Plague") && !WoW.IsSpellOnCooldown("Blood Boil")) { WoW.CastSpell("Blood Boil"); return; } if (WoW.CanCast("Dancing Rune Weapon") && WoW.HealthPercent < 50) { WoW.CastSpell("Dancing Rune Weapon"); return; } if (WoW.CanCast("Death Strike") && WoW.RunicPower >= 45 && WoW.HealthPercent < 85 && !WoW.IsSpellOnCooldown("Death Strike")) { WoW.CastSpell("Death Strike"); return; } if (WoW.CanCast("Marrowrend") && WoW.PlayerBuffStacks("Bone Shield") >= 6 && !WoW.IsSpellOnCooldown("Marrowrend")) { WoW.CastSpell("Marrowrend"); return; } if (WoW.CanCast("Heart Strike") && WoW.CurrentRunes >= 3 || WoW.RunicPower <= 45 && !WoW.IsSpellOnCooldown("Heart Strike")) { WoW.CastSpell("Heart Strike"); return; } if (WoW.CanCast("Consumption") && !WoW.IsSpellOnCooldown("Consumption")) { WoW.CastSpell("Consumption"); return; } if (WoW.CanCast("Blood Boil") && !WoW.IsSpellOnCooldown("Blood Boil")) { WoW.CastSpell("Blood Boil"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat) { if (WoW.CanCast("Anti-Magic Shell") && WoW.HealthPercent < 50 && !WoW.IsSpellOnCooldown("Anti-Magic Shell")) { WoW.CastSpell("Anti-Magic Shell"); return; } if (WoW.CanCast("Icebound Fortitude") && WoW.HealthPercent < 40 && !WoW.IsSpellOnCooldown("Icebound Fortitude")) { WoW.CastSpell("Icebound Fortitude"); return; } if (WoW.CanCast("Vampiric Blood") && WoW.HealthPercent < 30 && !WoW.IsSpellOnCooldown("Vampiric Blood")) { WoW.CastSpell("Vampiric Blood"); return; } if (WoW.CanCast("Marrowrend") && WoW.PlayerBuffTimeRemaining("Bone Shield") >= 3 && WoW.CurrentRunes >= 1 && !WoW.IsSpellOnCooldown("Marrowrend")) { WoW.CastSpell("Marrowrend"); return; } if (WoW.CanCast("Blood Boil") && !WoW.TargetHasDebuff("Blood Plague") && !WoW.IsSpellOnCooldown("Blood Boil")) { WoW.CastSpell("Blood Boil"); return; } if (WoW.CanCast("Dancing Rune Weapon") && WoW.HealthPercent < 50) { WoW.CastSpell("Dancing Rune Weapon"); return; } if (WoW.CanCast("Death Strike") && WoW.RunicPower >= 45 && WoW.HealthPercent < 85 && !WoW.IsSpellOnCooldown("Death Strike")) { WoW.CastSpell("Death Strike"); return; } if (WoW.CanCast("Marrowrend") && WoW.PlayerBuffStacks("Bone Shield") >= 6 && !WoW.IsSpellOnCooldown("Marrowrend")) { WoW.CastSpell("Marrowrend"); return; } if (WoW.CanCast("Heart Strike") && WoW.CurrentRunes >= 3 || WoW.RunicPower <= 45 && !WoW.IsSpellOnCooldown("Heart Strike")) { WoW.CastSpell("Heart Strike"); return; } if (WoW.CanCast("Consumption") && !WoW.IsSpellOnCooldown("Consumption")) { WoW.CastSpell("Consumption"); return; } if (WoW.CanCast("Blood Boil") && !WoW.IsSpellOnCooldown("Blood Boil")) { WoW.CastSpell("Blood Boil"); return; } } } if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } }
public override void Pulse() { if (WoW.IsInCombat && interruptwatch.ElapsedMilliseconds == 0) { Log.Write("Starting interrupt timer", Color.Blue); interruptwatch.Start(); } if (UseCooldowns) { } if (combatRoutine.Type != RotationType.SingleTarget && combatRoutine.Type != RotationType.AOE) { return; } if (WoW.IsInCombat && (!WoW.TargetIsEnemy || WoW.TargetHealthPercent == 0)) { WoW.TargetNearestEnemy(); } if (!WoW.HasTarget || !WoW.TargetIsEnemy) { return; } if (WoW.HealthPercent < 30 && !WoW.IsSpellOnCooldown("Metamorphasis")) { Log.Write("Metamorphasis"); Log.Write("Health low < 70% using CDs...", Color.Red); WoW.CastSpell("Metamorphasis"); // Off the GCD no return needed } if (WoW.PlayerHasBuff("Metamorphasis") && WoW.CanCast("Sever")) { WoW.CastSpell("Sever"); return; } if (WoW.PlayerHasBuff("Metamorphasis") && WoW.PlayerHasBuff("Soul Fragments") && (WoW.PlayerBuffStacks("Soul Fragments") >= 5) && WoW.Pain >= 50) { WoW.CastSpell("Soul Cleave"); return; } if (!WoW.IsSpellInRange("Soul Carver") && !WoW.IsSpellOnCooldown("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && WoW.CanCast("Throw Glaive")) { WoW.CastSpell("Throw Glaive"); return; } if (!WoW.IsSpellInRange("Soul Carver")) // If we are out of melee range return { return; } if (WoW.TargetIsCastingAndSpellIsInterruptible && interruptwatch.ElapsedMilliseconds > 1200 && WoW.TargetPercentCast > 70) { if (!WoW.IsSpellOnCooldown("Sigil of Silence")) { Log.Write("Interrupting spell"); WoW.CastSpell("Sigil of Silence"); interruptwatch.Reset(); interruptwatch.Start(); return; } if (!WoW.IsSpellOnCooldown("Arcane Torrent")) { Log.Write("Interrupting spell"); WoW.CastSpell("Arcane Torrent"); interruptwatch.Reset(); interruptwatch.Start(); return; } if (!WoW.IsSpellOnCooldown("Consume Magic")) { Log.Write("Interrupting spell"); WoW.CastSpell("Consume Magic"); interruptwatch.Reset(); interruptwatch.Start(); return; } } if (!WoW.TargetHasDebuff("Fiery Demise") && !WoW.IsSpellOnCooldown("Fiery Brand")) { WoW.CastSpell("Fiery Brand"); } if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && WoW.Pain > 20 && !WoW.PlayerHasBuff("Magnum Opus")) { WoW.CastSpell("Demon Spikes"); } if (WoW.CanCast("Soul Carver")) { WoW.CastSpell("Soul Carver"); } if (WoW.CanCast("Fel Devastation") && WoW.Pain >= 30) { WoW.CastSpell("Fel Devastation"); } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 50) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Immolation Aura")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Sigil of Flame") && !WoW.TargetHasDebuff("Sigil of Flame")) { WoW.CastSpell("Sigil of Flame"); // NB must have "Concentrated Sigil's" talent return; } if (WoW.CanCast("Shear")) // Pain Generator { WoW.CastSpell("Shear"); } }
public override void Pulse() // Updated for Legion (tested and working for single target) { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat) { if (WoW.CanCast("Fury of Eagle") && WoW.PlayerHasBuff("Mongoose Fury") && WoW.PlayerBuffStacks("Mongoose Fury") >= 5) { WoW.CastSpell("Fury of Eagle"); return; } if (WoW.CanCast("Explosive Trap") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Explosive Trap"); return; } if (WoW.CanCast("Dragonsfire Grenade") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Dragonsfire Grenade"); return; } if (WoW.CanCast("Lacerate") && !WoW.TargetHasDebuff("Lacerate") && (WoW.Focus >= 35) && WoW.IsSpellInRange("Lacerate") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Lacerate"); return; } if (WoW.CanCast("Snake Hunter") && (WoW.PlayerSpellCharges("Mongoose Bite") <= 0) && (WoW.PlayerBuffTimeRemaining("Mongoose Fury") >= 6) && WoW.IsSpellInRange("Mongoose Bite") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Snake Hunter"); return; } if (WoW.CanCast("Aspect of the Eagle") && (WoW.PlayerSpellCharges("Mongoose Bite") >= 2) && (WoW.PlayerBuffTimeRemaining("Mongoose Fury") >= 11) && WoW.IsSpellInRange("Mongoose Bite") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Aspect of the Eagle"); return; } if (WoW.CanCast("Mongoose Bite") && (!WoW.TargetHasDebuff("Mongoose Fury") || (WoW.PlayerBuffTimeRemaining("Mongoose Fury") >= 3)) && WoW.IsSpellInRange("Mongoose Bite") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mongoose Bite"); return; } if (WoW.CanCast("Mongoose Bite") && WoW.PlayerHasBuff("Aspect of the Eagle") && WoW.IsSpellInRange("Mongoose Bite") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mongoose Bite"); return; } if (WoW.CanCast("Throwing Axes") && WoW.IsSpellInRange("Throwing Axes") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Throwing Axes"); return; } if (WoW.CanCast("Flanking Strike") && (WoW.Focus >= 50) && WoW.IsSpellInRange("Flanking Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Flanking Strike"); return; } if (WoW.CanCast("Raptor Strike") && (WoW.Focus >= 25) && WoW.IsSpellInRange("Raptor Strike") && WoW.IsSpellOnCooldown("Lacerate") && WoW.IsSpellOnCooldown("Flanking Strike") && WoW.IsSpellOnCooldown("Throwing Axes") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Raptor Strike"); return; } } } if (combatRoutine.Type == RotationType.AOE) { // Do AOE stuff here } if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } }
public override void Pulse() { if (WoW.IsMounted) { return; } int OOCPlea = 1; while (WoW.PlayerBuffStacks("Sins of the Many") < WoW.GroupSize && !WoW.IsInCombat && OOCAtonement) { WoW.TargetMember(OOCPlea); if (WoW.TargetHasBuff("Atonement")) { OOCPlea++; continue; } if (!WoW.CanCast("Plea")) { continue; } if (OOCPlea > WoW.GroupSize) { OOCPlea = 1; } WoW.TargetMember(OOCPlea); WoW.CastSpell("Plea"); OOCPlea++; } // While rapture is active, spread Power Word: Shield to players int RaptureSpread = 1; while (WoW.PlayerHasBuff("Rapture") && WoW.PartyLowestHealthPercent > 60) { WoW.TargetMember(RaptureSpread); if (WoW.TargetHasBuff("Power Word: Shield")) { RaptureSpread++; continue; } if (!WoW.CanCast("Power Word: Shield")) { continue; } if (RaptureSpread > WoW.GroupSize) { RaptureSpread = 1; } WoW.TargetMember(RaptureSpread); WoW.CastSpell("Power Word: Shield"); RaptureSpread++; } // Ask player for TankId when first loading Rotation if (WoW.TankId == 0) { var f = new frmEnterTankId { TopMost = true }; f.ShowDialog(); } // Use Angelic Feather for speed if enabled in UI if (WoW.CanCast("Angelic Feather") && WoW.IsMoving && !WoW.PlayerHasBuff("Angelic Feather") && UseFeatherForSpeed) { WoW.CastSpell("Angelic Feather"); return; } // Use Arcane Torrent if selected in UI if (WoW.CanCast("Arcane Torrent") && WoW.Mana < 90 && ArcaneTorrentUI && WoW.IsInCombat && !WoW.PlayerIsChanneling) { WoW.CastSpell("Arcane Torrent"); return; } var lowest = WoW.PartyLowestHealthPercent; int currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent; Log.Write("Party Lowest HP: " + lowest); if (lowest >= DPSWhenPartyAbove && WoW.PartyMemberIsNeedingADispel == 0 && WoW.IsInCombat) { // If active Atonements are below UI threshold then spread Atonement with Plea until threshold is met int PleaStack = 1; while (WoW.PlayerBuffStacks("Sins of the Many") < ActiveAtonements && ActiveAtonements != 0) { WoW.TargetMember(PleaStack); if (WoW.TargetHasBuff("Atonement")) { PleaStack++; continue; } if (!WoW.CanCast("Plea")) { continue; } if (PleaStack > WoW.GroupSize) { PleaStack = 1; } WoW.TargetMember(PleaStack); WoW.CastSpell("Plea"); PleaStack++; } // Mitigate damage with Power Word: Shield if (WoW.CanCast("Power Word: Shield") && lowest < 90) { WoW.CastSpell("Power Word: Shield"); return; } //DPS Rotation WoW.TargetNearestEnemy(); if (WoW.HasTarget && WoW.TargetIsEnemy) { if (lowest < 99 && lowest > 95 && WoW.PlayerBuffStacks("Sins of the Many") < ActiveAtonements && ActiveAtonements != 0) { WoW.CastSpell("Plea"); return; } //Maintain Shadow Word: Pain(or Purge the Wicked, if you have taken this talent) on the target. if (WoW.TargetDebuffTimeRemaining("Shadow Word: Pain") < 400 && WoW.CanCast("Shadow Word: Pain") && WoW.Talent(6) != 1) { WoW.CastSpell("Shadow Word: Pain"); return; } if (WoW.TargetDebuffTimeRemaining("Purge the Wicked") < 400 && WoW.CanCast("Purge the Wicked") && WoW.Talent(6) == 1) { WoW.CastSpell("Purge the Wicked"); return; } //Use Schism on cooldown(if you have taken this talent). if (WoW.CanCast("Schism") && WoW.Talent(1) == 3) { WoW.CastSpell("Schism"); return; } //Use Penance on cooldown. if (WoW.CanCast("Penance")) { WoW.CastSpell("Penance"); return; } //Use Power Word: Solace on cooldown(if you have taken this talent). if (WoW.CanCast("Power Word: Solace") && WoW.Talent(4) == 1) { WoW.CastSpell("Power Word: Solace"); return; } if (WoW.CanCast("Shadowfiend") && WoW.Talent(4) != 3) { WoW.CastSpell("Shadowfiend"); return; } if (WoW.CanCast("Mindbender") && WoW.Talent(4) == 3) { WoW.CastSpell("Mindbender"); return; } //Use Smite as a filler. if (WoW.CanCast("Smite")) { WoW.CastSpell("Smite"); return; } } return; } if (WoW.PartyMemberIsNeedingADispel != 0) { currentTargetId = WoW.PartyMemberIsNeedingADispel; } var averageHp = WoW.PartyAverageHealthPercent; if (averageHp < 60 && WoW.CanCast("Power Infusion") && WoW.Talent(7) == 1) { WoW.CastSpell("Power Infusion"); // Off GCD no return needed } // Use Shadowfiend to boost healing output via Atonement if (averageHp < 90 && WoW.CanCast("Shadowfiend") && WoW.Talent(4) != 3 && WoW.IsInCombat) { WoW.TargetNearestEnemy(); WoW.CastSpell("Shadowfiend"); return; } // Use Mindbender for mana regardless of Party HP if (WoW.CanCast("Mindbender") && WoW.Talent(4) == 3 && WoW.IsInCombat && WoW.Mana < 90) { WoW.TargetNearestEnemy(); WoW.CastSpell("Mindbender"); return; } WoW.TargetMember(currentTargetId); // Target the lowest health party member or the member needing a dispell if (WoW.PartyMemberIsNeedingADispel != 0 && WoW.CanCast("Purify")) { WoW.CastSpell("Purify"); return; } // If we are targeting the tank and his HP < 20% Pain Suppression him if (lowest <= PainSuppressionHealth && WoW.CanCast("Pain Suppression") && WoW.TankId == currentTargetId) { WoW.CastSpell("Pain Suppression"); return; } // Uses Power Word: Radiance when UI values are met if (WoW.PlayerSpellCharges("PWRadiance") == 2 && WoW.CountAlliesUnderHealthPercentage(PWRHealth) >= PWRAlliesUnderHP) { WoW.CastSpell("PWRadiance"); return; } // Use Shadow Mend when DPSWhenPartyAbove is less than UI value if (lowest <= DPSWhenPartyAbove && WoW.CanCast("Shadow Mend")) { WoW.CastSpell("Shadow Mend"); return; } // Auto Light's Wrath For Dungeons if (WoW.CountAlliesUnderHealthPercentage(60) <= 3 && WoW.GroupSize <= 5 && WoW.PlayerBuffStacks("Sins of the Many") >= 3 && WoW.CanCast("Light's Wrath")) { WoW.TargetNearestEnemy(); WoW.CastSpell("Light's Wrath"); return; } // Auto Light's Wrath For Raids if (WoW.CountAlliesUnderHealthPercentage(60) >= 8 && WoW.GroupSize >= 5 && WoW.PlayerBuffStacks("Sins of the Many") >= 8 && WoW.CanCast("Light's Wrath")) { WoW.TargetNearestEnemy(); WoW.CastSpell("Light's Wrath"); return; } // When player uses Fade, PWRx2+Evangelism to ramp up atonement if (WoW.PlayerHasBuff("Fade") && !WoW.IsSpellOnCooldown("Evangelism") && WoW.Talent(7) != 3 && WoW.PlayerSpellCharges("PWRadiance") >= 1) { WoW.TargetMember(lowest); WoW.CastSpell("PWRadiance"); WoW.TargetMember(2); WoW.CastSpell("PWRadiance"); WoW.CastSpell("Evangelism"); WoW.TargetNearestEnemy(); return; } // When player uses Fade, PWRx2+Evangelism to ramp up atonement if (WoW.PlayerHasBuff("Fade") && WoW.Talent(7) != 3 && WoW.PlayerSpellCharges("PWRadiance") >= 1) { WoW.TargetMember(lowest); WoW.CastSpell("PWRadiance"); WoW.TargetMember(2); WoW.CastSpell("PWRadiance"); WoW.CastSpell("Evangelism"); WoW.TargetNearestEnemy(); return; } // Refresh PW:S on self (For Questing, doesn't Work in Group) if (WoW.PlayerBuffTimeRemaining("Power Word: Shield") < 400 && WoW.CanCast("Power Word: Shield") && WoW.GroupSize == 1) { WoW.CastSpell("Power Word: Shield"); return; } }
public override void Pulse() // Updated for Legion (tested and working for single target) { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if ((WoW.HasTarget) && WoW.TargetIsEnemy && WoW.IsInCombat) { /* * if (WoW.CanCast("Raptor Strike") && !WoW.PlayerHasBuff("MOK")) * { * WoW.CastSpell("Raptor Strike"); * Log.Write("KEIN MOK!", Color.Green); * return; * } * if (WoW.CanCast("Raptor Strike") && WoW.PlayerHasBuff("MOK") && WoW.PlayerBuffStacks("MOK") <= 4 && WoW.PlayerBuffTimeRemaining("MOK") < 2) * { * WoW.CastSpell("Raptor Strike"); * Log.Write("weniger als 4x MOK! keine zeit", Color.Green); * return; * } */ if (WoW.CanCast("Fury of Eagle") && WoW.PlayerHasBuff("Mongoose Fury") && WoW.PlayerBuffStacks("Mongoose Fury") >= 6 && WoW.PlayerBuffTimeRemaining("Mongoose Fury") < 2 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Fury of Eagle"); return; } if (WoW.CanCast("Mongoose Bite") && WoW.PlayerHasBuff("Mongoose Fury") && WoW.PlayerBuffStacks("Mongoose Fury") >= 6 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mongoose Bite"); return; } if (WoW.CanCast("Flanking Strike") && WoW.Focus >= 50 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Flanking Strike"); return; } if (WoW.CanCast("Mongoose Bite") && WoW.PlayerHasBuff("Mongoose Fury") && WoW.IsSpellInRange("Mongoose Bite") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mongoose Bite"); return; } if (WoW.CanCast("Murder of Crows") && WoW.Focus >= 30 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Murder of Crows"); return; } if (WoW.CanCast("Caltrops") && WoW.TargetHasDebuff("Caltrops") && WoW.TargetDebuffTimeRemaining("Caltrops") < 2 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Caltrops"); return; } if (WoW.CanCast("Caltrops") && !WoW.TargetHasDebuff("Caltrops") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Caltrops"); return; } if (WoW.CanCast("Lacerate") && WoW.Focus >= 35 && WoW.TargetHasDebuff("Lacerate") && WoW.TargetDebuffTimeRemaining("Lacerate") < 2 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Lacerate"); return; } if (WoW.CanCast("Lacerate") && WoW.Focus >= 35 && !WoW.TargetHasDebuff("Lacerate") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Lacerate"); return; } if (WoW.CanCast("Explosive Trap") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Explosive Trap"); return; } if (WoW.CanCast("Lacerate") && WoW.Focus >= 35 && !WoW.TargetHasDebuff("Lacerate") && (WoW.Focus >= 35) && WoW.IsSpellInRange("Lacerate") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Lacerate"); return; } if (WoW.CanCast("Mongoose Bite") && WoW.PlayerSpellCharges("Mongoose Bite") >= 3 && WoW.TargetHasDebuff("Lacerate") && WoW.TargetDebuffTimeRemaining("Lacerate") > 8 && !WoW.PlayerHasBuff("Mongoose Fury") && WoW.IsSpellInRange("Mongoose Bite") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mongoose Bite"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if ((WoW.HasTarget) && WoW.TargetIsEnemy && WoW.IsInCombat) { /* * if (WoW.CanCast("Raptor Strike") && !WoW.PlayerHasBuff("MOK")) * { * WoW.CastSpell("Raptor Strike"); * Log.Write("KEIN MOK!", Color.Green); * return; * } * if (WoW.CanCast("Raptor Strike") && WoW.PlayerHasBuff("MOK") && WoW.PlayerBuffStacks("MOK") <= 4 && WoW.PlayerBuffTimeRemaining("MOK") < 2) * { * WoW.CastSpell("Raptor Strike"); * Log.Write("weniger als 4x MOK! keine zeit", Color.Green); * return; * } */ if (WoW.CanCast("Fury of Eagle") && WoW.PlayerHasBuff("Mongoose Fury") && WoW.PlayerBuffStacks("Mongoose Fury") >= 4 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Fury of Eagle"); return; } if (WoW.CanCast("Mongoose Bite") && WoW.PlayerHasBuff("Mongoose Fury") && WoW.PlayerBuffStacks("Mongoose Fury") >= 6 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mongoose Bite"); return; } if (WoW.CanCast("Flanking Strike") && WoW.Focus >= 50 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Flanking Strike"); return; } if (WoW.CanCast("Mongoose Bite") && WoW.PlayerHasBuff("Mongoose Fury") && WoW.IsSpellInRange("Mongoose Bite") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mongoose Bite"); return; } if (WoW.CanCast("Murder of Crows") && WoW.Focus >= 30 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Murder of Crows"); return; } if (WoW.CanCast("Caltrops") && WoW.TargetHasDebuff("Caltrops") && WoW.TargetDebuffTimeRemaining("Caltrops") < 2 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Caltrops"); return; } if (WoW.CanCast("Caltrops") && !WoW.TargetHasDebuff("Caltrops") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Caltrops"); return; } if (WoW.CanCast("Butchery") && WoW.Focus >= 40 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Butchery"); return; } if (WoW.CanCast("Lacerate") && WoW.Focus >= 35 && WoW.TargetHasDebuff("Lacerate") && WoW.TargetDebuffTimeRemaining("Lacerate") < 2 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Lacerate"); return; } if (WoW.CanCast("Lacerate") && WoW.Focus >= 35 && !WoW.TargetHasDebuff("Lacerate") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Lacerate"); return; } if (WoW.CanCast("Explosive Trap") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Explosive Trap"); return; } if (WoW.CanCast("Lacerate") && WoW.Focus >= 35 && !WoW.TargetHasDebuff("Lacerate") && (WoW.Focus >= 35) && WoW.IsSpellInRange("Lacerate") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Lacerate"); return; } if (WoW.CanCast("Mongoose Bite") && WoW.PlayerSpellCharges("Mongoose Bite") >= 3 && WoW.TargetHasDebuff("Lacerate") && WoW.TargetDebuffTimeRemaining("Lacerate") > 8 && !WoW.PlayerHasBuff("Mongoose Fury") && WoW.IsSpellInRange("Mongoose Bite") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mongoose Bite"); return; } } } if (combatRoutine.Type == RotationType.SingleTargetCleave) { if ((WoW.HasTarget) && WoW.TargetIsEnemy && WoW.IsInCombat) { /* * if (WoW.CanCast("Raptor Strike") && !WoW.PlayerHasBuff("MOK")) * { * WoW.CastSpell("Raptor Strike"); * Log.Write("KEIN MOK!", Color.Green); * return; * } * if (WoW.CanCast("Raptor Strike") && WoW.PlayerHasBuff("MOK") && WoW.PlayerBuffStacks("MOK") <= 4 && WoW.PlayerBuffTimeRemaining("MOK") < 2) * { * WoW.CastSpell("Raptor Strike"); * Log.Write("weniger als 4x MOK! keine zeit", Color.Green); * return; * } */ if (WoW.CanCast("Fury of Eagle") && WoW.PlayerHasBuff("Mongoose Fury") && WoW.PlayerBuffStacks("Mongoose Fury") >= 4 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Fury of Eagle"); return; } if (WoW.CanCast("Mongoose Bite") && WoW.PlayerHasBuff("Mongoose Fury") && WoW.PlayerBuffStacks("Mongoose Fury") >= 6 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mongoose Bite"); return; } if (WoW.CanCast("Flanking Strike") && WoW.Focus >= 50 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Flanking Strike"); return; } if (WoW.CanCast("Mongoose Bite") && WoW.PlayerHasBuff("Mongoose Fury") && WoW.IsSpellInRange("Mongoose Bite") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mongoose Bite"); return; } if (WoW.CanCast("Murder of Crows") && WoW.Focus >= 30 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Murder of Crows"); return; } if (WoW.CanCast("Caltrops") && WoW.TargetHasDebuff("Caltrops") && WoW.TargetDebuffTimeRemaining("Caltrops") < 2 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Caltrops"); return; } if (WoW.CanCast("Caltrops") && !WoW.TargetHasDebuff("Caltrops") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Caltrops"); return; } if (WoW.CanCast("Lacerate") && WoW.Focus >= 35 && WoW.TargetHasDebuff("Lacerate") && WoW.TargetDebuffTimeRemaining("Lacerate") < 2 && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Lacerate"); return; } if (WoW.CanCast("Lacerate") && WoW.Focus >= 35 && !WoW.TargetHasDebuff("Lacerate") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Lacerate"); return; } if (WoW.CanCast("Explosive Trap") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Explosive Trap"); return; } if (WoW.CanCast("Lacerate") && WoW.Focus >= 35 && !WoW.TargetHasDebuff("Lacerate") && (WoW.Focus >= 35) && WoW.IsSpellInRange("Lacerate") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Lacerate"); return; } if (WoW.CanCast("Mongoose Bite") && WoW.PlayerSpellCharges("Mongoose Bite") >= 3 && WoW.TargetHasDebuff("Lacerate") && WoW.TargetDebuffTimeRemaining("Lacerate") > 8 && !WoW.PlayerHasBuff("Mongoose Fury") && WoW.IsSpellInRange("Mongoose Bite") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mongoose Bite"); return; } } } }
public override void Pulse() { if (stopwatch.ElapsedMilliseconds == 0) { stopwatch.Start(); Log.Write("The Cooldown toggle button is now Active (Numpad0). The delay is set to 1000ms ( 1 second )", Color.Black); return; } { if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_NUMPAD0) < 0) { if (stopwatch.ElapsedMilliseconds > 1000) { combatRoutine.UseCooldowns = !combatRoutine.UseCooldowns; WoW.Speak("Cooldowns " + (combatRoutine.UseCooldowns ? "On" : "Off")); stopwatch.Restart(); } } if (combatRoutine.Type == RotationType.SingleTarget) { if (WoW.IsSpellInRange("Rupture") && WoW.IsInCombat) { if (UseCooldowns && WoW.CanCast("Kingsbane") && WoW.CurrentComboPoints <= 4 && WoW.Energy >= 35 && !WoW.IsSpellOnCooldown("Kingsbane") && (WoW.SpellCooldownTimeRemaining("Vendetta") >= 10 || WoW.TargetHasDebuff("Vendetta"))) { WoW.CastSpell("Kingsbane"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Garrote") && WoW.Energy >= 45 && !WoW.TargetHasDebuff("Garrote") && !WoW.IsSpellOnCooldown("Garrote") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Garrote"); return; } if (WoW.TargetHasDebuff("Vendetta") && WoW.CanCast("Fan Of Knives") && WoW.Energy >= 35 && WoW.PlayerHasBuff("FoK") && WoW.PlayerBuffStacks("FoK") == 30 && WoW.CurrentComboPoints <= 4) { WoW.CastSpell("Fan Of Knives"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Garrote") && WoW.Energy >= 45 && WoW.TargetHasDebuff("Garrote") && WoW.TargetDebuffTimeRemaining("Garrote") <= 3 && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Garrote"); return; } if (WoW.CurrentComboPoints == 4 && WoW.Energy >= 25 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture") && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Rupture"); return; } if (WoW.CurrentComboPoints == 4 && WoW.Energy >= 25 && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") <= 6 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Rupture"); return; } if (WoW.CurrentComboPoints == 5 && WoW.Energy >= 25 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture") && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Rupture"); return; } if (WoW.CurrentComboPoints == 5 && WoW.Energy >= 25 && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") <= 6 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Rupture"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetDebuffTimeRemaining("Toxins") <= 1.5 && WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 6 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Envenom"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetDebuffTimeRemaining("Toxins") <= 1.5 && WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 6 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Envenom"); return; } if (!WoW.PlayerHasBuff("Vanish") && !WoW.TargetHasDebuff("Toxins") && WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 6 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Envenom"); return; } if (!WoW.PlayerHasBuff("Vanish") && !WoW.TargetHasDebuff("Toxins") && WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 6 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Envenom"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetHasDebuff("Vendetta") && WoW.Energy >= 140 && WoW.CurrentComboPoints >= 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 6 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Envenom"); return; } if (WoW.CanCast("Mutilate") && WoW.Energy >= 55 && WoW.CurrentComboPoints <= 3) { WoW.CastSpell("Mutilate"); return; } if (UseCooldowns && WoW.CanCast("Vendetta") && !WoW.IsSpellOnCooldown("Vendetta") && WoW.Energy <= 50) { WoW.CastSpell("Vendetta"); return; } /*if (UseCooldowns && * WoW.CanCast("Vanish") && * WoW.CurrentComboPoints >= 5 && * WoW.Energy >= 25 && WoW.TargetHasDebuff("Vendetta") && * ( * WoW.TargetHasDebuff("Rupture") && * WoW.TargetDebuffTimeRemaining("Rupture") < 10 * ) * ) { * WoW.CastSpell("Vanish"); * return; * }*/ if (UseCooldowns && WoW.CurrentComboPoints == 5 && !WoW.IsSpellOnCooldown("Vanish") && WoW.Energy >= 35 && WoW.TargetHasDebuff("Vendetta")) { WoW.CastSpell("Vanish"); return; } if (UseCooldowns && WoW.CurrentComboPoints == 5 && WoW.PlayerHasBuff("Vanish") && WoW.Energy >= 35 && WoW.TargetHasDebuff("Vendetta")) { WoW.CastSpell("Rupture"); return; } } } if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.Cleave) // Do AoE Target Stuff here { if (WoW.HasTarget && WoW.IsSpellInRange("Rupture") && WoW.IsInCombat) { if (WoW.Energy >= 35 && WoW.CurrentComboPoints <= 4 && WoW.CanCast("Fan Of Knives")) { WoW.CastSpell("Fan Of Knives"); return; } if (WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.TargetHealthPercent <= 35 && WoW.CanCast("Envenom")) { WoW.CastSpell("Envenom"); return; } if (WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.TargetHealthPercent <= 35 && WoW.CanCast("Envenom")) { WoW.CastSpell("Envenom"); return; } if (WoW.Energy >= 25 && WoW.CurrentComboPoints == 4 && WoW.TargetHealthPercent >= 36 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture")) { WoW.CastSpell("Rupture"); return; } if (WoW.Energy >= 25 && WoW.CurrentComboPoints == 5 && WoW.TargetHealthPercent >= 36 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture")) { WoW.CastSpell("Rupture"); return; } if (WoW.Energy >= 35 && WoW.CurrentComboPoints >= 4 && WoW.TargetHealthPercent >= 36 && WoW.TargetHasDebuff("Rupture") && WoW.CanCast("Envenom")) { WoW.CastSpell("Envenom"); return; } if (WoW.CanCast("Garrote") && WoW.Energy >= 45 && !WoW.TargetHasDebuff("Garrote") && !WoW.IsSpellOnCooldown("Garrote") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Garrote"); } } } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (!WoW.PlayerHasBuff("Battle Cry")) { if (WoW.TargetHealthPercent > 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { if (WoW.CanCast("Focused Rage") && WoW.WasLastCasted("Charge")) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Focused Rage") && WoW.WasLastCasted("Colossus Smash")) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Focused Rage") && WoW.Rage >= 105) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Mortal Strike") && !WoW.IsSpellOnCooldown("Mortal Strike")) { WoW.CastSpell("Mortal Strike"); return; } if (WoW.CanCast("Slam") && WoW.Rage >= 32 && WoW.IsSpellOnCooldown("Colossus Smash") && WoW.IsSpellOnCooldown("Mortal Strike")) { WoW.CastSpell("Slam"); return; } if (WoW.CanCast("Warbreaker") && !WoW.IsSpellOnCooldown("Battle Cry") && !WoW.TargetHasDebuff("Colossus Smash")) { WoW.CastSpell("Warbreaker"); return; } } if (WoW.TargetHealthPercent < 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { if (WoW.CanCast("Focused Rage") && WoW.WasLastCasted("Charge")) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Focused Rage") && WoW.Rage > 105) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Mortal Strike") && WoW.PlayerHasBuff("Focused Rage") && WoW.PlayerBuffStacks("Focused Rage") == 3) { WoW.CastSpell("Mortal Strike"); return; } if (WoW.CanCast("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Execute") && WoW.Rage == 18 && WoW.PlayerHasBuff("Precise Strikes")) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Execute") && WoW.Rage == 38 && !WoW.PlayerHasBuff("Precise Strikes")) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Slam") && WoW.Rage > 32 && WoW.IsSpellOnCooldown("Colossus Smash") && WoW.IsSpellOnCooldown("Mortal Strike")) { WoW.CastSpell("Slam"); return; } if (WoW.CanCast("Warbreaker") && !WoW.IsSpellOnCooldown("Battle Cry") && !WoW.TargetHasDebuff("Colossus Smash")) { WoW.CastSpell("Warbreaker"); return; } } } if (WoW.PlayerHasBuff("Battle Cry")) { if (WoW.TargetHealthPercent > 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { if (WoW.CanCast("Focused Rage") && WoW.PlayerBuffStacks("Focused Rage") < 3) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Mortal Strike") && WoW.PlayerHasBuff("Shattered Defenses") && !WoW.IsSpellOnCooldown("Mortal Strike") && WoW.PlayerBuffStacks("Focused Rage") == 3) { WoW.CastSpell("Mortal Strike"); return; } if (WoW.CanCast("Slam") && WoW.IsSpellOnCooldown("Colossus Smash") && WoW.IsSpellOnCooldown("Mortal Strike")) { WoW.CastSpell("Slam"); return; } } if (WoW.TargetHealthPercent < 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { if (WoW.CanCast("Focused Rage") && WoW.PlayerBuffStacks("Focused Rage") < 3) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Colossus Smash") && !WoW.TargetHasDebuff("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Mortal Strike") && !WoW.IsSpellOnCooldown("Mortal Strike") && (WoW.PlayerBuffStacks("Focused Rage") == 3)) { WoW.CastSpell("Mortal Strike"); return; } if (WoW.CanCast("Execute")) { WoW.CastSpell("Execute"); return; } } } } if (combatRoutine.Type == RotationType.AOE) { if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } } }
public override void Pulse() { if (WoW.PlayerIsChanneling) { return; } if (WoW.CanCast("Muzzle") && WoW.Level >= 35 && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.IsSpellInRange("Muzzle") && WoW.TargetPercentCast > Random.Next(30, 85)) { WoW.CastSpell("Muzzle"); return; } if (WoW.CanCast("Aspect of the Eagle") && WoW.Level >= 40 && UseCooldowns) { WoW.CastSpell("Aspect of the Eagle"); return; } if (WoW.CanCast("Exhilaration") && WoW.PlayerHealthPercent <= 35) { WoW.CastSpell("Exhilaration"); return; } if (WoW.CanCast("Aspect of the turtle") && WoW.PlayerHealthPercent <= 25) { WoW.CastSpell("Aspect of the turtle"); return; } if (combatRoutine.Type == RotationType.SingleTarget) { if (WoW.HasTarget && WoW.TargetIsEnemy) { if (!doneOpener) { if (WoW.CanCast("Harpoon") && WoW.Level >= 10) { WoW.CastSpell("Harpoon"); doneOpener = true; } } } if (WoW.CanCast("Spitting Cobra") && WoW.Level >= 100 && WoW.Talent(7) == 1) { WoW.CastSpell("Spitting Cobra"); return; } if (WoW.CanCast("Raptor Strike") && WoW.Level >= 20 && WoW.PlayerSpellCharges("Mongoose Bite") <= 0) { WoW.CastSpell("Raptor Strike"); return; } if (WoW.CanCast("Fury of the Eagle") && WoW.Level >= 40 && WoW.PlayerBuffStacks("Mongoose Fury") >= 3) { WoW.CastSpell("Fury of the Eagle"); return; } if (WoW.CanCast("Caltrops") && WoW.Level >= 60 && WoW.Talent(4) == 1) { WoW.CastSpell("Caltrops"); return; } if (WoW.CanCast("Explosive Trap") && WoW.Level >= 50) { WoW.CastSpell("Explosive Trap"); return; } if (WoW.CanCast("Lacerate") && WoW.Level >= 26 && !WoW.TargetHasDebuff("Lacerate") && WoW.TargetDebuffTimeRemaining("Lacerate") <= 1000) { WoW.CastSpell("Lacerate"); return; } if (WoW.CanCast("Mongoose Bite") && WoW.Level >= 20) { WoW.CastSpell("Mongoose Bite"); return; } if (WoW.CanCast("Snake hunter") && WoW.Level >= 30 && WoW.PlayerSpellCharges("Mongoose Bite") < 1) { WoW.CastSpell("Snake hunter"); return; } if (WoW.CanCast("Flanking Strike") && WoW.Level >= 12) { WoW.CastSpell("Flanking Strike"); return; } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { //if (WoW.IsSpellInRange("Mortal Strike") && WoW.IsInCombat && WoW.CanCast("Battle Cry") && !WoW.IsSpellOnCooldown("Battle Cry")) //{ // WoW.CastSpell("Battle Cry"); // return; // } //AOE on Press if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_Q) < 0) { if (WoW.HasTarget && WoW.IsInCombat) { if (WoW.CanCast("Bladestorm") && WoW.IsSpellOnCooldown("Warbreaker")) { WoW.CastSpell("Bladestorm"); return; } if (!WoW.WasLastCasted("Warbreaker") && !WoW.PlayerHasBuff("Bladestorm")) { if (WoW.CanCast("Cleave") && !WoW.PlayerHasBuff("Cleave") && !WoW.IsSpellOnCooldown("Cleave")) { WoW.CastSpell("Cleave"); return; } if (WoW.CanCast("Whirlwind") && WoW.Rage > 20 && WoW.IsSpellOnCooldown("Cleave")) { WoW.CastSpell("Whirlwind"); return; } if (WoW.CanCast("Colossus Smash") && WoW.Rage > 28 && !WoW.TargetHasDebuff("Colossus Smash") && WoW.IsSpellOnCooldown("Cleave")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Mortal Strike") && WoW.Rage > 28 && WoW.TargetHasDebuff("Colossus Smash") && WoW.IsSpellOnCooldown("Cleave")) { WoW.CastSpell("Mortal Strike"); return; } } } } if (WoW.IsInCombat && WoW.IsSpellInRange("Mortal Strike") && DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_X) < 0) { //Colossus smash control if (WoW.CanCast("Colossus Smash") && !WoW.TargetHasDebuff("Colossus Smash")) { WoW.CastSpell("Colossus Smash"); } if (WoW.CanCast("Colossus Smash") && WoW.TargetHasDebuff("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses") && WoW.PlayerBuffStacks("Focused Rage") == 3) { WoW.CastSpell("Colossus Smash"); } //Cooldowns if (WoW.IsSpellInRange("Mortal Strike") && WoW.CanCast("Battle Cry") && !WoW.IsSpellOnCooldown("Battle Cry") && WoW.TargetHasDebuff("Colossus Smash")) { WoW.CastSpell("Battle Cry"); return; } if (WoW.IsSpellInRange("Mortal Strike") && WoW.CanCast("Avatar") && !WoW.IsSpellOnCooldown("Avatar") && WoW.TargetHasDebuff("Colossus Smash")) { WoW.CastSpell("Avatar"); return; } // Mortal Strike Control if (WoW.IsSpellInRange("Mortal Strike") && WoW.CanCast("Mortal Strike") && WoW.TargetHasDebuff("Colossus Smash") && WoW.PlayerHasBuff("Battle Cry") && WoW.PlayerHasBuff("Avatar") && WoW.PlayerHasBuff("Shattered Defenses") && WoW.PlayerBuffStacks("Focused Rage") == 3) { WoW.CastSpell("Mortal Strike"); return; } //Slam control if (WoW.IsSpellInRange("Mortal Strike") && WoW.CanCast("Slam") && !WoW.CanCast("Colossus Smash") && !WoW.CanCast("Mortal Strike") && WoW.PlayerHasBuff("Shattered Defenses")) { WoW.CastSpell("Slam"); return; } // Focused Rage whenever. if (WoW.CanCast("Focused Rage") && WoW.PlayerBuffStacks("Focused Rage") < 3) { WoW.CastSpell("Focused Rage"); } } //Normal ST rotation if (!WoW.PlayerHasBuff("Battle Cry") && WoW.HasTarget && WoW.IsInCombat && WoW.IsSpellInRange("Mortal Strike")) { if (WoW.TargetHealthPercent > 20) //When targets are above 20%. Not in Execute phase. { //FR Control if (WoW.CanCast("Focused Rage") && WoW.Rage > 50) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Focused Rage") && WoW.IsSpellOnCooldown("Battle Cry") && WoW.SpellCooldownTimeRemaining("Battle Cry") < 6 && WoW.PlayerBuffStacks("Focused Rage") < 3) { WoW.CastSpell("Focused Rage"); } //CS Control if (WoW.CanCast("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses") && !WoW.IsSpellOnCooldown("Colossus Smash") || WoW.IsSpellOverlayed("Colossus Smash")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Colossus Smash") && WoW.SpellCooldownTimeRemaining("Battle Cry") < 1) { WoW.CastSpell("Colossus Smash"); return; } //MS if (WoW.CanCast("Mortal Strike") && !WoW.IsSpellOnCooldown("Mortal Strike") || WoW.IsSpellOverlayed("Mortal Strike")) { WoW.CastSpell("Mortal Strike"); return; } //Slam if (WoW.CanCast("Slam") && WoW.Rage >= 32 && !WoW.CanCast("Colossus Smash") && !WoW.CanCast("Mortal Strike")) { WoW.CastSpell("Slam"); return; } } if (WoW.TargetHealthPercent < 20) { //Non BC ST if (WoW.CanCast("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Focused Rage") && WoW.Rage >= 85 && !WoW.PlayerHasBuff("Focused Rage") || WoW.PlayerBuffStacks("Focused Rage") < 3) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Execute") && WoW.Rage >= 18 && WoW.PlayerHasBuff("Shattered Defenses")) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Execute") && !WoW.PlayerHasBuff("Shattered Defenses")) { WoW.CastSpell("Execute"); return; } } } if (WoW.PlayerHasBuff("Battle Cry") && WoW.HasTarget && WoW.IsInCombat && WoW.IsSpellInRange("Mortal Strike")) { if (WoW.CanCast("Avatar") && WoW.PlayerHasBuff("Battle Cry") && WoW.IsSpellOnCooldown("Battle Cry")) { WoW.CastSpell("Avatar"); return; } if (WoW.TargetHealthPercent > 20) { //Maintain FR Stacks if (WoW.CanCast("Focused Rage") && WoW.PlayerBuffStacks("Focused Rage") <= 3) { WoW.CastSpell("Focused Rage"); } //CS on cooldown but not overlapping SD if (WoW.CanCast("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses")) { WoW.CastSpell("Colossus Smash"); return; } //MS with SD if (WoW.CanCast("Mortal Strike") && WoW.PlayerHasBuff("Shattered Defenses") && !WoW.IsSpellOnCooldown("Mortal Strike") && WoW.PlayerBuffStacks("Focused Rage") == 3) { WoW.CastSpell("Mortal Strike"); return; } //MS on cooldown if (WoW.CanCast("Mortal Strike") && !WoW.IsSpellOnCooldown("Mortal Strike") && WoW.IsSpellOnCooldown("Colossus Smash")) { WoW.CastSpell("Mortal Strike"); } //if all else fails, slam. if (WoW.CanCast("Slam") && WoW.IsSpellOnCooldown("Colossus Smash") && WoW.IsSpellOnCooldown("Mortal Strike") && WoW.PlayerBuffStacks("Focused Rage") >= 3) { WoW.CastSpell("Slam"); return; } } if (WoW.TargetHealthPercent <= 20) { if (WoW.CanCast("Focused Rage") && !WoW.PlayerHasBuff("Focused Rage") || WoW.PlayerBuffStacks("Focused Rage") < 3) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Mortal Strike") && !WoW.IsSpellOnCooldown("Mortal Strike") && (WoW.PlayerBuffStacks("Focused Rage") == 3)) { WoW.CastSpell("Mortal Strike"); return; } if (WoW.CanCast("Colossus Smash") && !WoW.TargetHasDebuff("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Execute") && !WoW.CanCast("Mortal Strike")) { WoW.CastSpell("Execute"); return; } } } } if (combatRoutine.Type == RotationType.AOE) { // AOE stuff here } if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } }
public override void Pulse() // Updated for Legion (tested and working for single target) { renewBones = !WoW.PlayerHasBuff("Bone Shield") || WoW.PlayerBuffTimeRemaining("Bone Shield") <= 500; isMelee = WoW.CanCast("Marrowrend", false, false, true, false, false); bonesStack = WoW.PlayerBuffStacks("Bone Shield"); currentRunes = WoW.CurrentRunes; runicPower = WoW.RunicPower; if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && WoW.TargetIsVisible) { if (isCDDefEnable) { useCDDef(); } if ((renewBones || bonesStack < 3) && isMelee) { if (currentRunes >= 2) { WoW.CastSpell("Marrowrend"); return; } } if (WoW.CanCast("Mind Freeze") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && !WoW.IsSpellOnCooldown("Mind Freeze") && !WoW.PlayerIsChanneling) { WoW.CastSpell("Mind Freeze"); return; } if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee && !WoW.TargetHasDebuff("Blood Plague")) { WoW.CastSpell("Blood Boil"); return; } if (CanCastNoRange("Consumption") && isMelee) { WoW.CastSpell("Consumption"); return; } if (WoW.Talent(1) == 3 && CanCastInRange("BD") && !renewBones && currentRunes >= 1) { WoW.CastSpell("BD"); return; } if (isMelee && WoW.PlayerHasBuff("Crimson Scourge") && WoW.TargetHealthPercent >= 10) { WoW.CastSpell("DnD"); return; } if (isMelee && runicPower >= 45 && ((WoW.PlayerHasBuff("Ossuary") && (runicPower >= 85 || WoW.HealthPercent < 80)) || WoW.HealthPercent < 50)) { WoW.CastSpell("Death Strike"); return; } if (isMelee && currentRunes >= 2 && bonesStack <= 6) { WoW.CastSpell("Marrowrend"); return; } if (WoW.SpellCooldownTimeRemaining("DnD") == 0 && isMelee && currentRunes >= 2 && WoW.TargetHealthPercent >= 10 && !renewBones && bonesStack > 6) { WoW.CastSpell("DnD"); return; } if (isMelee && currentRunes >= 2 && !renewBones && bonesStack > 6 && WoW.TargetHasDebuff("Blood Plague")) { WoW.CastSpell("Heart Strike"); return; } if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee) { WoW.CastSpell("Blood Boil"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && WoW.TargetIsVisible) { if (isCDDefEnable) { useCDDef(); } if ((renewBones || bonesStack < 3) && isMelee) { if (currentRunes >= 2) { WoW.CastSpell("Marrowrend"); return; } } if (WoW.CanCast("Blood Boil", true, true, false, true, true) && isMelee && !WoW.TargetHasDebuff("Blood Plague")) { WoW.CastSpell("Blood Boil"); return; } if (WoW.Talent(1) == 3 && CanCastInRange("BD") && WoW.HealthPercent <= 60 && !renewBones && currentRunes >= 1) { WoW.CastSpell("BD"); return; } if (CanCastNoRange("Consumption") && isMelee) { WoW.CastSpell("Consumption"); return; } if (isMelee && WoW.PlayerHasBuff("Crimson Scourge") && WoW.TargetHealthPercent >= 10) { WoW.CastSpell("DnD"); return; } if (WoW.Talent(7) == 1 && WoW.SpellCooldownTimeRemaining("Bonestorm") == 0 && isMelee && runicPower >= 100) { WoW.CastSpell("Bonestorm"); return; } if (WoW.Talent(7) == 1 && isMelee && runicPower >= 45 && ((runicPower >= 85 && WoW.SpellCooldownTimeRemaining("Bonestorm") >= 300) || WoW.HealthPercent < 70 || WoW.HealthPercent < 50)) { WoW.CastSpell("Death Strike"); return; } if (WoW.Talent(7) != 1 && isMelee && runicPower >= 45 && (runicPower >= 85 || WoW.HealthPercent < 70)) { WoW.CastSpell("Death Strike"); return; } if (WoW.SpellCooldownTimeRemaining("DnD") == 0 && isMelee && currentRunes >= 1 && WoW.TargetHealthPercent >= 10 && !renewBones && bonesStack > 2) { WoW.CastSpell("DnD"); return; } if (isMelee && currentRunes >= 1 && !renewBones && bonesStack > 2) { WoW.CastSpell("Heart Strike"); return; } if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee) { WoW.CastSpell("Blood Boil"); return; } if (WoW.Talent(1) == 3 && CanCastInRange("BD") && !renewBones && currentRunes >= 1) { WoW.CastSpell("BD"); } } } }
public override void Pulse() { if (WoW.IsInCombat) { interruptwatch.Start(); } if (UseCooldowns) { } //if (WoW.PlayerHasBuff("Mount")) return; if (combatRoutine.Type != RotationType.SingleTarget && combatRoutine.Type != RotationType.AOE) { return; } if (!WoW.HasTarget || !WoW.TargetIsEnemy) { return; } if (WoW.HealthPercent < 30 && !WoW.IsSpellOnCooldown("Metamorphasis")) { WoW.Speak("Metamorphasis"); Log.Write("Health low < 70% using CDs...", Color.Red); WoW.CastSpell("Metamorphasis"); // Off the GCD no return needed } if (WoW.PlayerHasBuff("Metamorphasis") && WoW.CanCast("Sever")) { WoW.CastSpell("Sever"); return; } if (WoW.PlayerHasBuff("Metamorphasis") && WoW.PlayerHasBuff("Soul Fragments") && (WoW.PlayerBuffStacks("Soul Fragments") >= 5) && WoW.Pain >= 50) { WoW.CastSpell("Soul Cleave"); return; } if (!WoW.IsSpellInRange("Soul Carver") && !WoW.IsSpellOnCooldown("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && WoW.CanCast("Throw Glaive")) { WoW.CastSpell("Throw Glaive"); return; } if (!WoW.IsSpellInRange("Soul Carver")) // If we are out of melee range return { return; } if (WoW.TargetIsCasting && interruptwatch.ElapsedMilliseconds > 1200) { if (!WoW.IsSpellOnCooldown("Sigil of Silence") && WoW.WasLastCasted("Arcane Torrent")) { WoW.Speak("Interrupting spell"); WoW.CastSpell("Sigil of Silence"); interruptwatch.Reset(); interruptwatch.Start(); return; } if (!WoW.IsSpellOnCooldown("Arcane Torrent") && WoW.WasLastCasted("Sigil of Silence")) { WoW.Speak("Interrupting spell"); WoW.CastSpell("Arcane Torrent"); interruptwatch.Reset(); interruptwatch.Start(); return; } } if (!WoW.TargetHasDebuff("Fiery Demise") && !WoW.IsSpellOnCooldown("Fiery Brand")) { WoW.CastSpell("Fiery Brand"); } if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && WoW.Pain > 20 && !WoW.PlayerHasBuff("Magnum Opus")) { WoW.CastSpell("Demon Spikes"); } if (WoW.CanCast("Soul Carver")) { WoW.CastSpell("Soul Carver"); } if (WoW.CanCast("Fel Devastation") && WoW.Pain >= 30) { WoW.CastSpell("Fel Devastation"); } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 50) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Immolation Aura")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Sigil of Flame") && !WoW.TargetHasDebuff("Sigil of Flame")) { //WoW.CastSpellOnMe("Sigil of Flame"); // Use this if you not using "Concentrated Sigil's" talent - this is a little buggy!!! WoW.CastSpell("Sigil of Flame"); // NB must have "Concentrated Sigil's" talent return; } //if (WoW.CanCast("Felblade")) // Pain Generator //{ // WoW.CastSpell("Felblade"); // return; //} if (WoW.CanCast("Shear")) // Pain Generator { WoW.CastSpell("Shear"); } }
public void MGRotation() { if (isCheckHotkeysFrostOffensivePillarofFrost && isMelee && combatRoutine.UseCooldowns && !WoW.IsSpellOnCooldown("PillarofFrost")) { WoW.CastSpell("PillarofFrost"); } if (combatRoutine.UseCooldowns && isCheckHotkeysFrostOffensiveErW && isMelee && currentRunes == 0 && WoW.PlayerHasBuff("PillarofFrost") && !WoW.IsSpellOnCooldown("Empower Rune")) { WoW.CastSpell("Empower Rune"); } if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave) // Do Single Target Stuff here { if (CanCastInRange("Frost Strike") && (!WoW.PlayerHasBuff("Icy Talons") || WoW.PlayerBuffTimeRemaining("Icy Talons") <= 200) && runicPower >= 25 && !(combatRoutine.UseCooldowns && CanCastNoRange("Obliteration") && WoW.Talent(7) == 1) && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")))) { Log.Write("Hasbuff " + WoW.PlayerHasBuff("Icy Talons") + " Remaining " + WoW.PlayerBuffTimeRemaining("Icy Talons")); WoW.CastSpell("Frost Strike"); return; } if (isMelee && WoW.HealthPercent <= 40 && WoW.PlayerHasBuff("Free DeathStrike") && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")))) { WoW.CastSpell("Death Strike"); return; } if (CanCastInRange("Howling Blast") && !WoW.IsSpellOnCooldown("Howling Blast") && !WoW.TargetHasDebuff("Frost Fever") && currentRunes >= 1 && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")))) { WoW.CastSpell("Howling Blast"); return; } if (WoW.Talent(6) == 1 && runicPower >= 80 && CanCastInRange("Frost Strike")) { WoW.CastSpell("Frost Strike"); return; } if (CanCastInRange("Howling Blast") && WoW.PlayerHasBuff("Rime") && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")))) { WoW.CastSpell("Howling Blast"); return; } if (combatRoutine.UseCooldowns && isMelee && currentRunes >= 2 && runicPower >= 25 && WoW.Talent(7) == 1 && CanCastNoRange("Obliteration")) { WoW.CastSpell("Obliteration"); return; } if (WoW.Talent(7) == 1 && runicPower >= 25 && CanCastInRange("Frost Strike") && WoW.PlayerHasBuff("Obliteration") && !WoW.PlayerHasBuff("Killing Machine")) { WoW.CastSpell("Frost Strike"); return; } if (WoW.Talent(7) == 1 && isMelee && currentRunes >= 1 && WoW.PlayerHasBuff("Killing Machine") && WoW.PlayerHasBuff("Obliteration")) { WoW.CastSpell("Obliterate"); return; } if (WoW.Talent(6) == 1 && isMelee && currentRunes >= 1 && WoW.PlayerHasBuff("Killing Machine")) { WoW.CastSpell("Frostscythe"); return; } if (isMelee && currentRunes >= 2) { WoW.CastSpell("Obliterate"); return; } if (WoW.Talent(7) == 3 && isMelee && currentRunes >= 1 && CanCastNoRange("Glacial Advance")) { WoW.CastSpell("Glacial Advance"); return; } if (WoW.Talent(7) == 1 && runicPower >= 40 && CanCastInRange("Frost Strike") && !(combatRoutine.UseCooldowns && CanCastNoRange("Obliteration")) && WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")) { WoW.CastSpell("Frost Strike"); return; } if (isMelee && currentRunes >= 1 && CanCastNoRange("Remorseless Winter") && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")))) { WoW.CastSpell("Remorseless Winter"); return; } } if (combatRoutine.Type == RotationType.AOE) { if (CanCastInRange("Frost Strike") && (!WoW.PlayerHasBuff("Icy Talons") || WoW.PlayerBuffTimeRemaining("Icy Talons") <= 200) && runicPower >= 25) { WoW.CastSpell("Frost Strike"); return; } if (isMelee && WoW.HealthPercent <= 40 && WoW.PlayerHasBuff("Free DeathStrike")) { WoW.CastSpell("Death Strike"); return; } if (CanCastInRange("Howling Blast") && !WoW.IsSpellOnCooldown("Howling Blast") && !WoW.TargetHasDebuff("Frost Fever") && currentRunes >= 1) { WoW.CastSpell("Howling Blast"); return; } if (CanCastInRange("Howling Blast") && WoW.PlayerHasBuff("Rime")) { WoW.CastSpell("Howling Blast"); return; } if (WoW.Talent(6) != 1 && isMelee && currentRunes >= 1 && CanCastNoRange("Remorseless Winter")) { WoW.CastSpell("Remorseless Winter"); return; } if (runicPower >= 80 && CanCastInRange("Frost Strike")) { WoW.CastSpell("Frost Strike"); return; } if (WoW.Talent(6) != 1 && isMelee && currentRunes >= 2) { WoW.CastSpell("Obliterate"); return; } if (WoW.Talent(6) == 1 && currentRunes >= 1 && isMelee && WoW.PlayerHasBuff("Killing Machine")) { WoW.CastSpell("Frostscythe"); return; } if (WoW.Talent(7) == 3 && isMelee && currentRunes >= 1 && CanCastNoRange("Glacial Advance")) { WoW.CastSpell("Glacial Advance"); return; } if (isMelee && currentRunes >= 1 && CanCastNoRange("Remorseless Winter")) { WoW.CastSpell("Remorseless Winter"); return; } if (WoW.Talent(6) == 1 && isMelee && currentRunes >= 1) { WoW.CastSpell("Frostscythe"); return; } if (runicPower >= 25 && CanCastInRange("Frost Strike") && WoW.PlayerBuffStacks("Icy Talons") < 3) { WoW.CastSpell("Frost Strike"); return; } if (WoW.CanCast("Sindragosa's Fury") && (DetectKeyPress.GetKeyState(0x5A) < 0)) { WoW.CastSpell("Sindragosa's Fury"); return; } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.CanCast("Summon Water Elemental") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.HasPet) { WoW.CastSpell("Summon Water Elemental"); return; } if (WoW.HasTarget && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Invisibility")) { //Movement Control if (WoW.CanCast("Ice Floes") && WoW.IsMoving && !WoW.PlayerHasBuff("Ice Floes")) { WoW.CastSpell("Ice Floes"); } //Insta-Cast Flurry on Proc and ice lance for shatter. if (WoW.CanCast("Flurry") && WoW.PlayerHasBuff("Brain Freeze")) { WoW.CastSpell("Flurry"); } if (WoW.CanCast("Ice Lance") && WoW.WasLastCasted("Flurry") && WoW.PlayerHasBuff("Icy Veins")) { WoW.CastSpell("Ice Lance"); } //RoP Control if (WoW.CanCast("Rune of Power") && !WoW.PlayerHasBuff("Rune of Power") && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 120) { WoW.CastSpell("Rune of Power"); return; } //Ray of Frost control if (WoW.CanCast("Ray of Frost") && WoW.PlayerHasBuff("Rune of Power") && WoW.PlayerSpellCharges("Rune of Power") == 0 && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 60) { WoW.CastSpell("Ray of Frost"); } // FoF Creation if (WoW.PlayerBuffStacks("Chain Reaction") >= 1 && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 30 && !WoW.WasLastCasted("Flurry")) { if (WoW.CanCast("Frozen Orb") && !WoW.IsSpellOnCooldown("Frozen Orb") && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 60) { WoW.CastSpell("Frozen Orb"); } if (WoW.CanCast("Frozen Touch") && WoW.PlayerBuffStacks("Fingers of Frost") <= 1 && WoW.IsSpellOnCooldown("Frozen Orb") && !WoW.WasLastCasted("Frozen Orb")) { WoW.CastSpell("Frozen Touch"); } if (WoW.CanCast("Ebonbolt") && !WoW.PlayerHasBuff("Fingers of Frost") && !WoW.PlayerHasBuff("Brain Freeze") && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 45) { WoW.CastSpell("Ebonbolt"); return; } //Waterjet on cooldown within parameters if (WoW.CanCast("Water Jet") && WoW.PlayerBuffStacks("Fingers of Frost") <= 1 && !WoW.WasLastCasted("Frozen Touch") && !WoW.WasLastCasted("Frozen Orb") && WoW.IsSpellOnCooldown("Frozen Orb") && WoW.IsSpellOnCooldown("Frozen Touch")) { WoW.CastSpell("Water Jet"); } if (WoW.CanCast("Frostbolt") && WoW.TargetHasDebuff("Water Jet")) { WoW.CastSpell("Frostbolt"); return; } } //Ice Lance Control if (WoW.CanCast("Ice Lance") && WoW.WasLastCasted("Frostbolt") && WoW.PlayerHasBuff("Chain Reaction") && WoW.PlayerBuffStacks("Chain Reaction") >= 1 && WoW.PlayerHasBuff("Fingers of Frost") && WoW.PlayerBuffStacks("Fingers of Frost") >= 2) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Fingers of Frost") == 3) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Fingers of Frost") >= 1 && WoW.WasLastCasted("Ice Lance")) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && !WoW.PlayerHasBuff("Brain Freeze") && WoW.WasLastCasted("Flurry")) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Chain Reaction") >= 1 && WoW.PlayerHasBuff("Fingers of Frost") && WoW.PlayerBuffStacks("Fingers of Frost") >= 1) { WoW.CastSpell("Ice Lance"); return; } //Frostbolt Control if (!WoW.PlayerHasBuff("Brain Freeze") && !WoW.WasLastCasted("Flurry")) { if (WoW.CanCast("Frostbolt") && !WoW.PlayerHasBuff("Fingers of Frost") && !WoW.WasLastCasted("Frostbolt")) { WoW.CastSpell("Frostbolt"); return; } if (WoW.CanCast("Frostbolt") && WoW.PlayerBuffStacks("Chain Reaction") <= 2 && !WoW.WasLastCasted("Frostbolt")) { WoW.CastSpell("Frostbolt"); return; } if (WoW.CanCast("Frostbolt") && WoW.PlayerHasBuff("Chain Reaction") && WoW.PlayerBuffStacks("Chain Reaction") == 3 && WoW.PlayerBuffTimeRemaining("Chain Reaction") <= 2) { WoW.CastSpell("Frostbolt"); return; } } //Frost Bomb - i dont use //if ((WoW.CanCast("Frost Bomb")&&WoW.PlayerHasBuff("Fingers of Frost")&&WoW.PlayerBuffStacks("Fingers of Frost") == 2)&&!WoW.TargetHasDebuff("Frost Bomb")&&!WoW.WasLastCasted("Ice Lance")&&!WoW.WasLastCasted("Rune of Power")) // { // WoW.CastSpell("Frost Bomb"); // return; // } } } if (combatRoutine.Type == RotationType.AOE) { if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) { // Stopwatch START if (WoW.IsInCombat && !pullwatch.IsRunning) { pullwatch.Start(); Log.Write("Entering Combat, Starting opener timer.", Color.Red); } // Stopwatch stop if (!WoW.IsInCombat && pullwatch.ElapsedMilliseconds >= 1000) { pullwatch.Reset(); ripunbuffed.Reset(); ripbuffed.Reset(); superrip.Reset(); Log.Write("Leaving Combat, Resetting opener timer.", Color.Red); } //PVP, Basic PVP with Brutal Slash, Incarnation and Renewal (if enabled) if (WoW.TargetIsPlayer && WoW.TargetIsEnemy && WoW.IsInCombat) { if (WoW.CanCast("Regrowth") && WoW.PlayerHasBuff("Regrowth") && WoW.HealthPercent <= 80 && WoW.PlayerHasBuff("PredatorySwiftness")) { WoW.CastSpell("Regrowth"); return; } if (Renewal && WoW.CanCast("Renwal") && WoW.HealthPercent <= 70) { WoW.CastSpell("Renewal"); return; } if ((WoW.IsSpellInRange("FerociousBite") && WoW.CanCast("FerociousBite") && WoW.CurrentComboPoints >= 5 && WoW.TargetHasDebuff("Rip")) && WoW.TargetDebuffTimeRemaining("Rip") >= 500 && (WoW.Energy >= 50 || WoW.PlayerHasBuff("Incarnation") || WoW.PlayerHasBuff("Berserk"))) { WoW.CastSpell("FerociousBite"); return; } if ((WoW.IsSpellInRange("Rake") && WoW.CanCast("Rake") && (!WoW.TargetHasDebuff("Rake") || WoW.TargetDebuffTimeRemaining("Rake") <= 300)) && (WoW.Energy >= 35 || WoW.PlayerHasBuff("Incarnation") || WoW.PlayerHasBuff("Berserk"))) { WoW.CastSpell("Rake"); return; } if (WoW.IsSpellInRange("Ashamane") && WoW.CanCast("Ashamane") && !WoW.IsSpellOnCooldown("Ashamane") && WoW.CurrentComboPoints <= 2) { WoW.CastSpell("Ashamane"); return; } if ((WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.CurrentComboPoints >= 5 && (!WoW.TargetHasDebuff("Rip") || WoW.TargetDebuffTimeRemaining("Rip") <= 500)) && (WoW.Energy >= 30 || WoW.PlayerHasBuff("Incarnation") || WoW.PlayerHasBuff("Berserk"))) { WoW.CastSpell("Rip"); return; } if ((WoW.IsSpellInRange("Shred") && WoW.CanCast("Shred") && WoW.CurrentComboPoints < 5 && WoW.TargetHasDebuff("Rake") && (WoW.IsSpellOnCooldown("BrutalSlash") || !BrutalSlash) && (WoW.Energy >= 40 || WoW.PlayerHasBuff("Incarnation") || WoW.PlayerHasBuff("Berserk")))) { WoW.CastSpell("Shred"); return; } if (WoW.CanCast("TigersFury") && WoW.Energy <= 20 && !WoW.IsSpellOnCooldown("TigersFury")) { WoW.CastSpell("TigersFury"); return; } if (BrutalSlash && WoW.IsSpellInRange("Shred") && WoW.CanCast("BrutalSlash") && !WoW.IsSpellOnCooldown("BrutalSlash") && (WoW.Energy >= 20 || WoW.PlayerHasBuff("Incarnation") || WoW.PlayerHasBuff("Berserk"))) { WoW.CastSpell("BrutalSlash"); return; } } // OPENER if (WoW.IsInCombat && WoW.TargetIsEnemy && WoW.IsBoss && pullwatch.ElapsedMilliseconds < 10000 && UseCooldowns) { if (Bloodtalons && WoW.CanCast("Regrowth")) { if (WoW.CurrentComboPoints >= 2 && !WoW.PlayerHasBuff("Savage Roar") && WoW.PlayerHasBuff("PredatorySwiftness")) { WoW.CastSpell("Regrowth"); return; } if (WoW.CurrentComboPoints >= 5 && WoW.PlayerHasBuff("PredatorySwiftness")) { WoW.CastSpell("Regrowth"); return; } if (WoW.PlayerBuffTimeRemaining("PredatorySwiftness") < 150 && WoW.PlayerHasBuff("PredatorySwiftness")) { WoW.CastSpell("Regrowth"); return; } if (WoW.CurrentComboPoints == 2 && !WoW.PlayerHasBuff("Bloodtalons") && WoW.SpellCooldownTimeRemaining("Ashamane") <= 100 && WoW.PlayerHasBuff("PredatorySwiftness")) { WoW.CastSpell("Regrowth"); return; } // If Elunes Guidance talent enabled if (ElunesGuidance) { if (WoW.SpellCooldownTimeRemaining("ElunesGuidance") <= 100 && WoW.CurrentComboPoints == 0) { WoW.CastSpell("Regrowth"); return; } if (WoW.PlayerHasBuff("ElunesGuidance") && WoW.CurrentComboPoints >= 4) { WoW.CastSpell("Regrowth"); return; } } } if (SavageRoar && WoW.CanCast("SavageRoar") && WoW.CurrentComboPoints == 5 && !WoW.PlayerHasBuff("SavageRoar")) { WoW.CastSpell("SavageRoar"); return; } if (SavageRoar && WoW.CanCast("SavageRoar") && !WoW.PlayerHasBuff("SavageRoar") && WoW.CurrentComboPoints >= 2) { WoW.CastSpell("SavageRoar"); return; } if (WoW.CanCast("TigersFury") && WoW.Energy <= 30) { WoW.CastSpell("TigersFury"); return; } if (WoW.CanCast("TigersFury") && WoW.PlayerHasBuff("SavageRoar")) { WoW.CastSpell("TigersFury"); return; } if (!Incarnation && WoW.CanCast("Berserk") && WoW.PlayerHasBuff("SavageRoar")) { WoW.CastSpell("Berserk"); return; } if (Incarnation && WoW.CanCast("Incarnation") && WoW.PlayerHasBuff("SavageRoar")) { WoW.CastSpell("Incarnation"); return; } if (WoW.CanCast("Rake") && !WoW.TargetHasDebuff("Rake")) { WoW.CastSpell("Rake"); return; } if (LunarInspiration && !WoW.TargetHasDebuff("Moonfire") && WoW.IsSpellInRange("SkullBash") && WoW.Energy >= 30 && WoW.CurrentComboPoints < 5) { WoW.CastSpell("Moonfire"); return; } { WoW.CastSpell("Moonfire"); return; } if (WoW.CanCast("Ashamane") && WoW.TargetHasDebuff("Rip")) { WoW.CastSpell("Ashamane"); return; } if (WoW.CanCast("Rip") && WoW.PlayerHasBuff("SavageRoar") && WoW.CurrentComboPoints == 5) { WoW.CastSpell("Rip"); return; } if (WoW.CanCast("Shred") && WoW.CurrentComboPoints < 5) { WoW.CastSpell("Shred"); return; } } // OPEN COMBAT WITH SHADOWMELD RAKE if (WoW.TargetIsEnemy && WoW.IsInCombat && (WoW.PlayerHasBuff("Prowl") || WoW.PlayerHasBuff("Shadowmeld"))) { if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Rake")) { WoW.CastSpell("Rake"); return; } } // COOLDOWN ROTATION if (WoW.IsInCombat && WoW.TargetIsEnemy && UseCooldowns) { if (!Incarnation && WoW.CanCast("Berserk") && WoW.PlayerHasBuff("TigersFury") || WoW.SpellCooldownTimeRemaining("TigersFury") < 200) { WoW.CastSpell("Berserk"); return; } if (Incarnation && WoW.CanCast("Incarnation") && WoW.PlayerHasBuff("TigersFury") || WoW.SpellCooldownTimeRemaining("TigersFury") < 200) { WoW.CastSpell("Incarnation"); return; } } // PRIMARY ROTATION if (WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerHasBuff("Prowl") && WoW.PlayerHasBuff("Cat Form")) { // Tigers Fury on cooldown if under 30 Energy if (WoW.CanCast("TigersFury") && WoW.Energy <= 30) { WoW.CastSpell("TigersFury"); return; } // Keep Rip from falling off during execute range if (WoW.IsSpellInRange("Rake") && WoW.CanCast("FerociousBite") && WoW.TargetHasDebuff("Rip") && WoW.TargetHasDebuff("Rip") && WoW.PlayerHasBuff("SavageRoar") && WoW.TargetDebuffTimeRemaining("Rip") < 3 && WoW.TargetHealthPercent <= 25 && WoW.Energy >= 25) { WoW.CastSpell("FerociousBite"); return; } // Regrowth logic with Bloodtalons talent enabled if (Bloodtalons && WoW.CanCast("Regrowth")) { if (WoW.CurrentComboPoints >= 5 && WoW.PlayerHasBuff("PredatorySwiftness")) { WoW.CastSpell("Regrowth"); return; } if (WoW.PlayerBuffTimeRemaining("PredatorySwiftness") < 1500 && WoW.PlayerHasBuff("PredatorySwiftness")) { WoW.CastSpell("Regrowth"); return; } if (WoW.CurrentComboPoints == 2 && !WoW.PlayerHasBuff("Bloodtalons") && WoW.SpellCooldownTimeRemaining("Ashamane") <= 100 && WoW.PlayerHasBuff("PredatorySwiftness")) { WoW.CastSpell("Regrowth"); return; } // If Elunes Guidance talent enabled if (ElunesGuidance) { if (WoW.SpellCooldownTimeRemaining("ElunesGuidance") <= 100 && WoW.CurrentComboPoints == 0) { WoW.CastSpell("Regrowth"); return; } if (WoW.PlayerHasBuff("ElunesGuidance") && WoW.CurrentComboPoints >= 4) { WoW.CastSpell("Regrowth"); return; } } } // Sabertooth Opener //if (Sabertooth) //{ //} // LEGENDARY LOGIC if (AiluroPouncers) { if (Bloodtalons && WoW.CanCast("Regrowth") && WoW.PlayerBuffStacks("PredatorySwiftness") > 1 && !WoW.PlayerHasBuff("Bloodtalons") && WoW.PlayerHasBuff("PredatorySwiftness")) { WoW.CastSpell("Regrowth"); return; } } // FINISHER LOGIC // FINISHER LOGIC // If have Savage Roar and Rip under 3 seconds remaining and target above 25% hp, cast BUFFED rip. //if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && WoW.TargetHasDebuff("Rip") && WoW.TargetDebuffTimeRemaining("Rip") < 2 && WoW.PlayerHasBuff("SavageRoar") && WoW.PlayerBuffTimeRemaining("SavageRoar") < 8 && WoW.TargetHealthPercent > 25 && WoW.CurrentComboPoints == 5 && WoW.PlayerHasBuff("TigersFury")) //{ // WoW.CastSpell("Rip"); // ripbuffed.Reset(); // ripbuffed.Start(); // ripunbuffed.Reset(); // Log.Write("Override Savage Roar refresh when Rip under 3seconds remaining.", Color.Red); // return; //} //// //if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && WoW.TargetHasDebuff("Rip") && WoW.TargetDebuffTimeRemaining("Rip") < 2 && WoW.PlayerHasBuff("SavageRoar") && WoW.PlayerBuffTimeRemaining("SavageRoar") < 8 && WoW.TargetHealthPercent > 25 && WoW.CurrentComboPoints == 5 && WoW.PlayerHasBuff("TigersFury")) //{ // WoW.CastSpell("Rip"); // ripbuffed.Reset(); // ripbuffed.Start(); // ripunbuffed.Reset(); // Log.Write("Override Savage Roar refresh when Rip under 3seconds remaining.", Color.Red); // return; //} // Savage Roar if player dont have buff Savage Roar and is at 5 combo points. if (SavageRoar && WoW.CanCast("SavageRoar") && WoW.Energy >= 40 && !WoW.PlayerHasBuff("SavageRoar") && WoW.CurrentComboPoints == 5) { WoW.CastSpell("SavageRoar"); return; } // Savage Roar if player have buff Savage Roar and is under 2 seconds remaining and is at 5 combo points. if (SavageRoar && WoW.CanCast("SavageRoar") && WoW.Energy >= 40 && WoW.PlayerBuffTimeRemaining("SavageRoar") <= 200 && WoW.PlayerHasBuff("SavageRoar") && WoW.CurrentComboPoints == 5) { WoW.CastSpell("SavageRoar"); return; } // Ferocious Bite if HP under 25% and Rip Remaining under 3 seconds. (will extend Rip) if (WoW.IsSpellInRange("FerociousBite") && WoW.CanCast("FerociousBite") && WoW.CurrentComboPoints > 1 && WoW.TargetDebuffTimeRemaining("Rip") < 300 && WoW.TargetHealthPercent < 25 && WoW.TargetHasDebuff("Rip")) { WoW.CastSpell("FerociousBite"); return; } // If TigersFury running. if (WoW.IsSpellInRange("FerociousBite") && WoW.CanCast("FerociousBite") && WoW.CurrentComboPoints == 5 && ripbuffed.IsRunning && WoW.TargetHasBuff("Rip") && WoW.PlayerHasBuff("SavageRoar") && WoW.PlayerBuffTimeRemaining("SavageRoar") <= 1000 && WoW.TargetDebuffTimeRemaining("Rip") > 7) { WoW.CastSpell("FerociousBite"); Log.Write("O mighty super bite."); } // Refresh Rip if not on target and tigersfury or berserk if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && !WoW.TargetHasDebuff("Rip") && WoW.CurrentComboPoints == 5 && WoW.PlayerHasBuff("TigersFury")) { WoW.CastSpell("Rip"); ripbuffed.Start(); ripunbuffed.Reset(); Log.Write("Buffed Rip. Berserk or Tigers Fury buff.", Color.Red); return; } // Refresh Rip for stronger Rip if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && ripunbuffed.IsRunning && WoW.PlayerHasBuff("TigersFury") && WoW.CurrentComboPoints == 5) { WoW.CastSpell("Rip"); ripbuffed.Start(); ripunbuffed.Reset(); Log.Write("Buffed Rip. Berserk or Tigers Fury buff.", Color.Red); return; } // Refresh Rip at 8 seconds if have Tigers fury or Berserk buff. if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && !Sabertooth && WoW.TargetDebuffTimeRemaining("Rip") < 800 && WoW.TargetHealthPercent > 25 && WoW.CurrentComboPoints == 5 && WoW.PlayerHasBuff("TigersFury")) { WoW.CastSpell("Rip"); ripbuffed.Start(); ripunbuffed.Reset(); Log.Write("Buffed Rip. Berserk or Tigers Fury buff.", Color.Red); return; } // Refresh Rip at 8 seconds if no buff and no sabertooth talent and non-buffed rip is running. if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && !Sabertooth && WoW.TargetDebuffTimeRemaining("Rip") < 800 && WoW.TargetHealthPercent > 25 && WoW.CurrentComboPoints == 5 && !ripbuffed.IsRunning) { WoW.CastSpell("Rip"); ripunbuffed.Start(); ripbuffed.Reset(); Log.Write("Unbuffed Rip. Under 8 secs remaining on Unbuffed Rip.", Color.Red); return; } // Refresh Rip if not on target. if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && !WoW.TargetHasDebuff("Rip") && WoW.CurrentComboPoints == 5) { WoW.CastSpell("Rip"); ripunbuffed.Start(); ripbuffed.Reset(); Log.Write("Unbuffed Rip. No Rip on target.", Color.Red); return; } // Refresh Rip if under 2 seconds remaining. if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && WoW.TargetDebuffTimeRemaining("Rip") < 200 && WoW.CurrentComboPoints == 5) { WoW.CastSpell("Rip"); ripunbuffed.Start(); ripbuffed.Reset(); Log.Write("Unbuffed Rip. No Rip under 2secs remaining.", Color.Red); return; } // Refresh Savage roar at under 7.2 secons remaining if no JaggedWounds talent if (SavageRoar && WoW.CanCast("SavageRoar") && WoW.Energy >= 40 && !JaggedWounds && WoW.PlayerBuffTimeRemaining("SavageRoar") < 720 && WoW.CurrentComboPoints == 5) { WoW.CastSpell("SavageRoar"); return; } // Refresh Savage Roar early with jagged wounds talent if (SavageRoar && WoW.CanCast("SavageRoar") && WoW.Energy >= 40 && JaggedWounds && WoW.PlayerBuffTimeRemaining("SavageRoar") < 1050 && WoW.CurrentComboPoints == 5) { WoW.CastSpell("SavageRoar"); return; } // FB cast without JaggedWounds talent if (WoW.IsSpellInRange("FerociousBite") && WoW.CanCast("FerociousBite") && WoW.Energy >= 25 && WoW.CurrentComboPoints == 5 && !JaggedWounds && WoW.TargetHasDebuff("Rip") && WoW.PlayerHasBuff("SavageRoar") && WoW.PlayerBuffTimeRemaining("SavageRoar") > 920 && WoW.TargetDebuffTimeRemaining("Rip") > 1000) { WoW.CastSpell("FerociousBite"); return; } // FB cast with JaggedWounds talent if (WoW.IsSpellInRange("FerociousBite") && WoW.CanCast("FerociousBite") && WoW.Energy >= 25 && WoW.CurrentComboPoints == 5 && JaggedWounds && WoW.TargetHasDebuff("Rip") && WoW.PlayerHasBuff("SavageRoar") && WoW.PlayerBuffTimeRemaining("SavageRoar") > 1250 && WoW.TargetDebuffTimeRemaining("Rip") > 1000) { WoW.CastSpell("FerociousBite"); return; } // GENERATOR LOGIC // GENERATOR LOGIC if (WoW.IsSpellInRange("Ashamane") && WoW.CanCast("Ashamane") && WoW.CurrentComboPoints <= 2 && !ElunesGuidance) { WoW.CastSpell("Ashamane"); return; } if (ElunesGuidance && WoW.CanCast("ElunesGuidance") && WoW.CurrentComboPoints == 0 && WoW.Energy >= 30) { WoW.CastSpell("ElunesGuidance"); return; } if (NightElf && WoW.CanCast("Shadowmeld") && WoW.CurrentComboPoints < 5 && WoW.Energy >= 35 && WoW.PlayerHasBuff("TigersFury")) { WoW.CastSpell("Shadowmeld"); return; } if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Rake") && WoW.Energy >= 35) { // TODO : Code in bleed multiplier if (WoW.CurrentComboPoints < 5 && Bloodtalons && WoW.PlayerHasBuff("Bloodtalons") && WoW.TargetDebuffTimeRemaining("Rake") <= 500) { WoW.CastSpell("Rake"); return; } if (WoW.CurrentComboPoints < 5 && !WoW.TargetHasDebuff("Rake")) { WoW.CastSpell("Rake"); return; } if (WoW.CurrentComboPoints < 5 && WoW.TargetDebuffTimeRemaining("Rake") <= 300) { WoW.CastSpell("Rake"); return; } } if (LunarInspiration && !WoW.TargetHasDebuff("Moonfire") && WoW.IsSpellInRange("SkullBash") && WoW.Energy >= 30 && WoW.CurrentComboPoints < 5) { WoW.CastSpell("Moonfire"); return; } //if (LunarInspiration && WoW.IsSpellInRange("Moonfire") && WoW.CanCast("Moonfire") && WoW.Energy >= 30) //{ // if (WoW.CurrentComboPoints < 5 && WoW.TargetDebuffTimeRemaining("Moonfire") <= 4.2) // { // WoW.CastSpell("Moonfire"); // return; // } // if (WoW.CurrentComboPoints < 5 && !WoW.TargetHasDebuff("Moonfire")) // { // WoW.CastSpell("Moonfire"); // return; // } //} if (BrutalSlash && WoW.IsSpellInRange("Rake") && WoW.CanCast("BrutalSlash") && WoW.PlayerSpellCharges("BrutalSlash") == 3 && WoW.Energy >= 20) { WoW.CastSpell("BrutalSlash"); return; } if (WoW.IsSpellInRange("Shred") && WoW.CanCast("Shred") && WoW.CurrentComboPoints < 5 && WoW.Energy >= 40) { WoW.CastSpell("Shred"); return; } } } // AOE ROTATION if (combatRoutine.Type == RotationType.AOE) { // In combat, target is enemy, target is not player, i dont have prowl and i have buff catform if (WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.TargetIsPlayer && !WoW.PlayerHasBuff("Prowl") && WoW.PlayerHasBuff("Cat Form")) { if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Rake") && !WoW.TargetHasDebuff("Rake") && WoW.Energy >= 35) { WoW.CastSpell("Rake"); return; } if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Thrash") && !WoW.TargetHasDebuff("Thrash") && WoW.Energy >= 50) { WoW.CastSpell("Thrash"); return; } if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Swipe") && WoW.TargetHasDebuff("Thrash") && WoW.CurrentComboPoints < 5 && WoW.Energy >= 45) { WoW.CastSpell("Swipe"); return; } if (SavageRoar && WoW.CanCast("Savage Roar") && WoW.CurrentComboPoints == 5 && !WoW.PlayerHasBuff("Savage Roar") && WoW.Energy >= 40) { WoW.CastSpell("SavageRoar"); return; } if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.CurrentComboPoints == 5 && !WoW.TargetHasDebuff("Rip") && WoW.Energy >= 30) { WoW.CastSpell("Rip"); return; } } } }
public override void Pulse() // Updated for Legion (tested and working for single target) { if (WoW.IsInCombat && Control.IsKeyLocked(Keys.Scroll) && !WoW.TargetIsPlayer && !WoW.IsMounted) { SelectRotation(4, 9999, 1); } if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted) { if ((!WoW.TargetHasDebuff("Agony") || WoW.TargetDebuffTimeRemaining("Agony") <= 540) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Agony") <= 150) && WoW.CanCast("Agony") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Agony"); return; } if ((WoW.CurrentSoulShards >= 3 || (WoW.CurrentSoulShards >= 2 && WoW.WasLastCasted("Unstable Affliction"))) && !WoW.IsMoving && WoW.CanCast("Unstable Affliction") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Unstable Affliction"); Thread.Sleep(200); return; } if ((WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction2") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction3") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction3") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction4") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.PlayerBuffStacks("Reap Souls") >= 12) && !WoW.PlayerIsCasting && WoW.CanCast("Reap Souls") && !WoW.PlayerHasBuff("Deadwind Harvester") && WoW.PlayerHasBuff("Tormented Souls")) { WoW.CastSpell("Reap Souls"); return; } if (WoW.CanCast("Life Tap") && !WoW.PlayerIsChanneling && WoW.Talent(2) == 3 && !WoW.PlayerHasBuff("Empowered Life Tap")) { WoW.CastSpell("Life Tap"); return; } if ((!WoW.TargetHasDebuff("Corruption") || WoW.TargetDebuffTimeRemaining("Corruption") <= 420) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Corruption") <= 150) && WoW.CanCast("Corruption") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Corruption"); return; } if ((!WoW.TargetHasDebuff("Siphon Life") || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 420) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 150) && WoW.Talent(4) == 1 && WoW.CanCast("Siphon Life") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Siphon Life"); return; } if (WoW.CanCast("Felhunter") && WoW.Talent(6) == 2 && !WoW.IsSpellOnCooldown("Felhunter") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting) { WoW.CastSpell("Felhunter"); return; } if (WoW.CanCast("Unstable Affliction") && !WoW.IsMoving && WoW.Talent(2) == 1 && !WoW.IsMoving && WoW.IsSpellInRange("Unstable Affliction") && !WoW.PlayerIsChanneling && WoW.CurrentSoulShards >= 1 && (!WoW.TargetHasDebuff("Unstable Affliction1") || !WoW.TargetHasDebuff("Unstable Affliction2") || !WoW.TargetHasDebuff("Unstable Affliction3") || !WoW.TargetHasDebuff("Unstable Affliction4") || !WoW.TargetHasDebuff("Unstable Affliction5") || (WoW.TargetDebuffTimeRemaining("Unstable Affliction1") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction2") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction3") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction4") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction5") <= 150))) { WoW.CastSpell("Unstable Affliction"); Thread.Sleep(200); return; } if (WoW.IsInCombat && WoW.Mana < 70 && WoW.HealthPercent > 70 && WoW.CanCast("Life Tap")) { WoW.CastSpell("Life Tap"); return; } if (WoW.CanCast("Haunt") && WoW.Talent(1) == 1 && !WoW.IsSpellOnCooldown("Haunt") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving) { WoW.CastSpell("Haunt"); return; } if (WoW.CanCast("Drain Soul") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving) { WoW.CastSpell("Drain Soul"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMounted) // Do AOE stuff here { if (WoW.CanCast("Agony") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Agony") || (WoW.TargetDebuffTimeRemaining("Agony") <= 540))) { WoW.CastSpell("Agony"); return; } if (WoW.CanCast("Corruption") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Corruption") || (WoW.TargetDebuffTimeRemaining("Corruption") <= 420))) { WoW.CastSpell("Corruption"); return; } if (WoW.CanCast("Seed of Corruption") && WoW.IsSpellInRange("Agony") && !WoW.TargetHasDebuff("Seed of Corruption") && !WoW.IsMoving && WoW.CurrentSoulShards >= 1) { WoW.CastSpell("Seed of Corruption"); return; } } } if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } }
public override void Pulse() { if (WoW.IsMounted) { return; } // if (WoW.TargetIsCasting && interruptwatch.ElapsedMilliseconds > 1200) // { // if (!WoW.IsSpellOnCooldown("Sigil of Silence") && WoW.WasLastCasted("Arcane Torrent")) // { // WoW.CastSpell("Sigil of Silence"); // interruptwatch.Reset(); // interruptwatch.Start(); // return; // } // if (!WoW.IsSpellOnCooldown("Arcane Torrent") && WoW.WasLastCasted("Sigil of Silence")) // { // WoW.CastSpell("Arcane Torrent"); // interruptwatch.Reset(); // interruptwatch.Start(); // return; // } // } if (UseCooldowns) { } if (combatRoutine.Type != RotationType.SingleTarget && combatRoutine.Type != RotationType.AOE) { return; } if (!WoW.HasTarget || !WoW.TargetIsEnemy) { return; } if (WoW.HealthPercent < 30 && !WoW.IsSpellOnCooldown("Metamorphosis")) { Log.Write("Health low < 30% using CDs...", Color.Red); WoW.CastSpell("Metamorphosis"); // Off the GCD no return needed } { if (!WoW.PlayerHasBuff("Metamorphosis")) { if (!WoW.PlayerIsCasting && WoW.ItemCount("Healthstone") >= 1 && !WoW.ItemOnCooldown("Healthstone") && WoW.HealthPercent < 35) { WoW.CastSpell("HealthstoneKeybind"); } if (WoW.CanCast("Throw Glaive") && !WoW.IsSpellOnCooldown("Throw Glaive") && !WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Throw Glaive"); return; } if (WoW.CanCast("Sigil of Flame") && (!WoW.TargetHasDebuff("Sigil of Flame") && WoW.IsSpellInRange("Soul Carver"))) { WoW.CastSpell("Sigil of Flame"); // Must have "Concentrated Sigil's" talent or macro set up return; } if (WoW.CanCast("Immolation Aura") && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Soul Carver") && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Soul Carver"); return; } if (WoW.CanCast("Fracture") && WoW.IsSpellInRange("Soul Carver") && (WoW.Pain > 30 && (WoW.PlayerBuffStacks("Soul Fragments") < 3))) { WoW.CastSpell("Fracture"); return; } if (WoW.CanCast("Spirit Bomb") && !WoW.IsSpellOnCooldown("Spirit Bomb") && (WoW.PlayerHasBuff("Soul Fragments") && !WoW.TargetHasDebuff("Frailty"))) { WoW.CastSpell("Spirit Bomb"); return; } if (WoW.CanCast("Spirit Bomb") && !WoW.IsSpellOnCooldown("Spirit Bomb") && (WoW.PlayerHasBuff("Soul Fragments") && (WoW.PlayerBuffStacks("Soul Fragments") >= 3))) { WoW.CastSpell("Spirit Bomb"); return; } if (WoW.CanCast("Fiery Brand") && !WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fiery Brand"); } if (WoW.CanCast("Soul Cleave") && !WoW.IsSpellOnCooldown("Soul Cleave") && WoW.IsSpellInRange("Soul Carver") && WoW.Pain > 100) { WoW.CastSpell("Soul Cleave"); return; } // if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && !WoW.IsSpellOnCooldown("Demon Spikes") && (WoW.Pain == 80 || WoW.HealthPercent < 80 && WoW.Pain > 20 )) // to not waste cd and pain // { // WoW.CastSpell("Demon Spikes"); // } // if (WoW.CanCast("Shear") && WoW.IsSpellInRange("Soul Carver") && WoW.Pain < 30 || WoW.Pain < 100 && !WoW.PlayerHasBuff("Soul Fragments")) // Pain Generator // { // WoW.CastSpell("Shear"); // return; // } if (WoW.CanCast("Shear") && WoW.IsSpellInRange("Soul Carver") && WoW.Pain <= 30 && !WoW.PlayerHasBuff("Soul Fragments")) // Pain Generator { WoW.CastSpell("Shear"); return; } if (WoW.CanCast("Shear") && WoW.IsSpellInRange("Soul Carver") && WoW.Pain <= 30) // Pain Generator { WoW.CastSpell("Shear"); return; } if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && (WoW.Pain >= 90 || WoW.HealthPercent < 80 && WoW.Pain >= 20)) // to not waste CD and Pain { WoW.CastSpell("Demon Spikes"); } // if (WoW.ItemCount("Trinket") == 1 && !WoW.ItemOnCooldown("Trinket") && WoW.IsSpellInRange("Soul Carver")) // { // WoW.CastSpell("TrinketKeybind"); // return; // } } if (WoW.PlayerHasBuff("Metamorphosis")) { if (WoW.CanCast("Sigil of Flame") && (!WoW.TargetHasDebuff("Sigil of Flame") && WoW.IsSpellInRange("Soul Carver"))) { WoW.CastSpell("Sigil of Flame"); // NB must have "Concentrated Sigil's" talent or macro setup return; } if (WoW.CanCast("Soul Carver") && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Soul Carver"); return; } if (WoW.CanCast("Sever") && WoW.IsSpellInRange("Soul Carver") && WoW.PlayerBuffStacks("Soul Fragments") <= 3) { WoW.CastSpell("Sever"); return; } if (!WoW.PlayerIsCasting && WoW.ItemCount("Healthstone") >= 1 && !WoW.ItemOnCooldown("Healthstone") && WoW.HealthPercent < 30) { WoW.CastSpell("HealthstoneKeybind"); } if (WoW.CanCast("Throw Glaive") && !WoW.IsSpellOnCooldown("Throw Glaive") && !WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Throw Glaive"); return; } if (WoW.CanCast("Immolation Aura") && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Soul Cleave") && !WoW.IsSpellOnCooldown("Soul Cleave") && WoW.IsSpellInRange("Soul Carver") && (WoW.Pain > 50 && WoW.PlayerBuffStacks("Soul Fragments") >= 3)) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Fracture") && WoW.IsSpellInRange("Soul Carver") && (WoW.Pain >= 90 && (!WoW.PlayerHasBuff("Soul Fragments")))) { WoW.CastSpell("Fracture"); return; } // if (WoW.CanCast("Spirit Bomb") && !WoW.IsSpellOnCooldown("Spirit Bomb") && (WoW.PlayerHasBuff("Soul Fragments") && (WoW.PlayerBuffStacks("Soul Fragments") >= 5))) // { // WoW.CastSpell("Spirit Bomb"); // return; // } // if (WoW.CanCast("Sever") && !WoW.CanCast("Soul Carver") && WoW.PlayerBuffStacks("Soul Fragments") < 5) // { // WoW.CastSpell("Sever"); // return; // } // if (WoW.ItemCount("Trinket") == 1 && !WoW.ItemOnCooldown("Trinket") && WoW.IsSpellInRange("Soul Carver")) // { // WoW.CastSpell("TrinketKeybind"); // return; // } } // if (WoW.TargetIsChanneling == 233441) // { // WoW.CastSpell("Empower Wards"); // } // if (WoW.CanCast("Fiery Brand") && !WoW.TargetHasDebuff("Fiery Demise") && WoW.PlayerHasBuff("Spirit of the Darkness Flame") && (WoW.PlayerBuffStacks("Spirit of the Darkness Flame") >= 7)) // { // WoW.CastSpell("Fiery Brand"); // } // if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && (WoW.Pain >= 90 || WoW.HealthPercent < 90 && WoW.Pain >= 20)) // to not waste cd and pain // { // WoW.CastSpell("Demon Spikes"); // } // if (WoW.CanCast("Fel Devastation") && WoW.IsSpellInRange("Soul Carver") && WoW.Pain >= 30) // { // WoW.CastSpell("Fel Devastation"); // } // if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 30 && WoW.HealthPercent < 25) // Extra save, when we are on too low hp // { // WoW.CastSpell("Soul Cleave"); // return; // } // if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 80 && WoW.HealthPercent < 50 && !WoW.CanCast("Demon Spikes")) // { // WoW.CastSpell("Soul Cleave"); // return; // } // if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 60 && WoW.HealthPercent < 50 && WoW.PlayerHasBuff("Demon Spikes")) // { // WoW.CastSpell("Soul Cleave"); // return; // } // if (WoW.CanCast("Fracture") && WoW.IsSpellInRange("Soul Carver") && ((WoW.Pain >= 60 && WoW.HealthPercent >= 40 && WoW.PlayerHasBuff("Demon Spikes")) || (WoW.Pain >= 80 && WoW.HealthPercent >= 40 && !WoW.CanCast("Demon Spikes")))) // { // WoW.CastSpell("Fracture"); // return; // } //if (WoW.CanCast("Felblade")) // Pain Generator //{ // WoW.CastSpell("Felblade"); // return; //} } }
public override void Pulse() { { if (combatRoutine.Type == RotationType.SingleTarget) { if (WoW.IsSpellInRange("Rupture") && WoW.IsInCombat && !WoW.IsMounted) { if (UseCooldowns && WoW.CanCast("Kingsbane") && WoW.CurrentComboPoints <= 4 && WoW.Energy >= 35 && WoW.PlayerHasBuff("Envenom") && WoW.PlayerBuffTimeRemaining("Envenom") >= 150 && !WoW.IsSpellOnCooldown("Kingsbane") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") >= 1400 && ( WoW.SpellCooldownTimeRemaining("Vendetta") >= 1000 || WoW.TargetHasDebuff("Vendetta") )) { WoW.CastSpell("Kingsbane"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Garrote") && WoW.Energy >= 45 && !WoW.TargetHasDebuff("Garrote") && !WoW.IsSpellOnCooldown("Garrote") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Garrote"); return; } if (WoW.TargetHasDebuff("Vendetta") && WoW.CanCast("Fan Of Knives") && WoW.Energy >= 35 && WoW.PlayerHasBuff("FoK") && WoW.PlayerBuffStacks("FoK") == 30 && WoW.CurrentComboPoints <= 4) { WoW.CastSpell("Fan Of Knives"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Garrote") && WoW.Energy >= 45 && WoW.TargetHasDebuff("Garrote") && WoW.TargetDebuffTimeRemaining("Garrote") <= 300 && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Garrote"); return; } if (WoW.CurrentComboPoints == 4 && WoW.Energy >= 25 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture") && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Rupture"); return; } if (WoW.CurrentComboPoints == 4 && WoW.Energy >= 25 && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") <= 600 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Rupture"); return; } if (WoW.CurrentComboPoints == 5 && WoW.Energy >= 25 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture") && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Rupture"); return; } if (WoW.CurrentComboPoints == 5 && WoW.Energy >= 25 && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") <= 600 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Rupture"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetDebuffTimeRemaining("Toxins") <= 150 && WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Envenom"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetDebuffTimeRemaining("Toxins") <= 150 && WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Envenom"); return; } if (WoW.TargetHasDebuff("Kingsbane") && WoW.TargetDebuffTimeRemaining("Rupture") >= 400 && WoW.Energy >= 35 && WoW.CurrentComboPoints >= 2 && WoW.PlayerHasBuff("Envenom") && WoW.PlayerBuffTimeRemaining("Envenom") <= 150) { WoW.CastSpell("Envenom"); Log.Write("Extend Envenom remaining"); return; } if (WoW.TargetHasDebuff("Kingsbane") && WoW.TargetDebuffTimeRemaining("Rupture") >= 400 && WoW.Energy >= 35 && WoW.CurrentComboPoints >= 2 && !WoW.PlayerHasBuff("Envenom")) { WoW.CastSpell("Envenom"); Log.Write("Getting Envenom up for kingsbane"); return; } if (!WoW.PlayerHasBuff("Vanish") && !WoW.TargetHasDebuff("Toxins") && WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Envenom"); return; } if (!WoW.PlayerHasBuff("Vanish") && !WoW.TargetHasDebuff("Toxins") && WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Envenom"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetHasDebuff("Vendetta") && WoW.Energy >= 140 && WoW.CurrentComboPoints >= 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Envenom"); return; } if (WoW.CanCast("Mutilate") && WoW.Energy >= 55 && WoW.CurrentComboPoints <= 3) { WoW.CastSpell("Mutilate"); return; } if (UseCooldowns && WoW.CanCast("Vendetta") && !WoW.IsSpellOnCooldown("Vendetta") && WoW.Energy <= 50 ) { WoW.CastSpell("Vendetta"); return; } /*if (UseCooldowns && * WoW.CanCast("Vanish") && * WoW.CurrentComboPoints >= 5 && * WoW.Energy >= 25 && WoW.TargetHasDebuff("Vendetta") && * ( * WoW.TargetHasDebuff("Rupture") && * WoW.TargetDebuffTimeRemaining("Rupture") < 10 * ) * ) { * WoW.CastSpell("Vanish"); * return; * }*/ if (!WoW.PlayerHasBuff("Critbuff") && UseCooldowns && WoW.CurrentComboPoints == 5 && !WoW.IsSpellOnCooldown("Vanish") && WoW.Energy >= 35 && WoW.TargetHasDebuff("Vendetta")) { WoW.CastSpell("Vanish"); return; } if (UseCooldowns && WoW.CurrentComboPoints == 5 && WoW.PlayerHasBuff("Vanish") && WoW.Energy >= 35 && WoW.TargetHasDebuff("Vendetta")) { WoW.CastSpell("Rupture"); return; } if (UseCooldowns && WoW.CanCast("Berserk") && !WoW.IsSpellOnCooldown("Berserk") && WoW.TargetHasDebuff("Vendetta") && WoW.PlayerRace == "Troll") { WoW.CastSpell("Berserk"); return; } } } if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.SingleTargetCleave) // Do AoE Target Stuff here { if (WoW.HasTarget && WoW.IsSpellInRange("Rupture") && WoW.IsInCombat && !WoW.IsMounted) { if (WoW.Energy >= 35 && WoW.CurrentComboPoints <= 4 && WoW.CanCast("Fan Of Knives")) { WoW.CastSpell("Fan Of Knives"); return; } if (WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.TargetHealthPercent <= 35 && WoW.CanCast("Envenom")) { WoW.CastSpell("Envenom"); return; } if (WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.TargetHealthPercent <= 35 && WoW.CanCast("Envenom")) { WoW.CastSpell("Envenom"); return; } if (WoW.Energy >= 25 && WoW.CurrentComboPoints == 4 && WoW.TargetHealthPercent >= 36 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture")) { WoW.CastSpell("Rupture"); return; } if (WoW.Energy >= 25 && WoW.CurrentComboPoints == 5 && WoW.TargetHealthPercent >= 36 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture")) { WoW.CastSpell("Rupture"); return; } if (WoW.Energy >= 35 && WoW.CurrentComboPoints >= 4 && WoW.TargetHealthPercent >= 36 && WoW.TargetHasDebuff("Rupture") && WoW.CanCast("Envenom")) { WoW.CastSpell("Envenom"); return; } if (WoW.CanCast("Garrote") && WoW.Energy >= 45 && !WoW.TargetHasDebuff("Garrote") && !WoW.IsSpellOnCooldown("Garrote") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote")) { WoW.CastSpell("Garrote"); return; } if (UseCooldowns && WoW.CanCast("Berserk") && !WoW.IsSpellOnCooldown("Berserk")) { WoW.CastSpell("Berserk"); return; } } } } }
/// <summary> /// Do the rotation. /// </summary> private void doRotation(bool isSingleTarget = true) { var ignoreMovement = WoW.PlayerHasBuff(SURRENDER_MADNESS); if (WoW.Insanity >= 70 || WoW.PlayerHasBuff(VOIDFORM_AURA)) { //Expend insanity in voidform. if (WoW.HasTarget && !WoW.PlayerHasBuff(VOIDFORM_AURA)) { castWithRangeCheck(VOID_ERUPTION); } else { //If we can, cast it. castWithRangeCheck(VOID_BOLT); //Cast it. castWithRangeCheck(VOID_TORRENT, ignoreMovement); //If the boss health is at or below our set threshold SW:D if (WoW.TargetHealthPercent <= HEALTH_PERCENT_FOR_SWD) { if (WoW.PlayerSpellCharges(SHADOW_DEATH) == 2 && WoW.Insanity <= 70) { //If we have 2 charges, always cast castWithRangeCheck(SHADOW_DEATH); } else if (WoW.PlayerSpellCharges(SHADOW_DEATH) == 1) { //If we have 1 charge, only cast if at high insanity and mindblast is off CD or extremely low insanity if ((WoW.Insanity > PANIC_INSANITY_VALUE && !(WoW.IsSpellOnCooldown(MIND_BLAST) || WoW.IsSpellOnCooldown(VOID_BOLT))) || WoW.Insanity <= calculateInsanityDrain()) { castWithRangeCheck(SHADOW_DEATH); } } } //Cast shadowfiend if we have more than 15 stacks of voidform aura. if (WoW.PlayerBuffStacks(VOIDFORM_AURA) >= 15) { castWithRangeCheck(SHADOW_FIEND); } //If we can, cast it. castWithRangeCheck(MIND_BLAST); //If we have high stacks, cast shadowfiend. /* Disabled, allow player to cast. * if (WoW.PlayerBuffStacks(VOIDFORM_AURA)>=15) { * castWithRangeCheck(SHADOWFIEND); * } */ if (!isPlayerBusy(ignoreChanneling: false)) { //Always fill with mind flay on single target. castWithRangeCheck(MIND_FLAY); } } } else { //Build up insanity if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.TargetIsVisible) { //If we can, cast mind blast. if (castWithRangeCheck(MIND_BLAST)) { return; } //If we don't have anything else to do, cast Mind flay. if (!isPlayerBusy(ignoreChanneling: false)) { castWithRangeCheck(MIND_FLAY); } } } }
public override void Pulse() // Updated for Legion (tested and working for single target) { if (WoW.CanCast("Healthstone") && WoW.ItemCount("Healthstone") >= 1 && !WoW.ItemOnCooldown("Healthstone") && WoW.HealthPercent <= 60 && WoW.HealthPercent != 0 && WoW.IsInCombat) { WoW.CastSpell("Healthstone"); return; } if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted) { if ((!WoW.TargetHasDebuff("Agony") || WoW.TargetDebuffTimeRemaining("Agony") <= 540) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Agony") <= 150) && WoW.CanCast("Agony") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Agony"); return; } if ((WoW.CurrentSoulShards >= 3 || (WoW.CurrentSoulShards >= 2 && WoW.WasLastCasted("Unstable Affliction"))) && !WoW.IsMoving && WoW.CanCast("Unstable Affliction") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Unstable Affliction"); Thread.Sleep(200); return; } if ((WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction2") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction3") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction3") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction4") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.PlayerBuffStacks("Reap Souls") >= 12) && !WoW.PlayerIsCasting && WoW.CanCast("Reap Souls") && !WoW.PlayerHasBuff("Deadwind Harvester") && WoW.PlayerHasBuff("Tormented Souls") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Reap Souls"); return; } if (WoW.CanCast("Phantom") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Phantom"); return; } /*if (WoW.IsSpellInRange("Agony") && WoW.CanCast("Trinket") &&!WoW.ItemOnCooldown("Trinket") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) * { * WoW.CastSpell("Trinket"); * return; * }*/ if (WoW.CanCast("Berserk") && UseCooldowns && !WoW.IsSpellOnCooldown("Berserk") && WoW.PlayerRace == "Troll") { WoW.CastSpell("Berserk"); return; } if (WoW.CanCast("Life Tap") && !WoW.PlayerIsChanneling && WoW.Talent(2) == 3 && !WoW.PlayerHasBuff("Empowered Life Tap")) { WoW.CastSpell("Life Tap"); return; } if ((!WoW.TargetHasDebuff("Corruption") || WoW.TargetDebuffTimeRemaining("Corruption") <= 420) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Corruption") <= 150) && WoW.CanCast("Corruption") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Corruption"); return; } if ((!WoW.TargetHasDebuff("Siphon Life") || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 420) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 150) && WoW.Talent(4) == 1 && WoW.CanCast("Siphon Life") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Siphon Life"); return; } if (WoW.CanCast("Unstable Affliction") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption") && !WoW.IsMoving && WoW.Talent(2) == 1 && !WoW.IsMoving && WoW.IsSpellInRange("Unstable Affliction") && !WoW.PlayerIsChanneling && WoW.CurrentSoulShards >= 1 && (!WoW.TargetHasDebuff("Unstable Affliction1") || !WoW.TargetHasDebuff("Unstable Affliction2") || !WoW.TargetHasDebuff("Unstable Affliction3") || !WoW.TargetHasDebuff("Unstable Affliction4") || !WoW.TargetHasDebuff("Unstable Affliction5") || (WoW.TargetDebuffTimeRemaining("Unstable Affliction1") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction2") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction3") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction4") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction5") <= 150))) { WoW.CastSpell("Unstable Affliction"); Thread.Sleep(200); return; } if (WoW.IsInCombat && WoW.Mana < 70 && WoW.HealthPercent > 70 && WoW.CanCast("Life Tap")) { WoW.CastSpell("Life Tap"); return; } if (WoW.CanCast("Drain Soul") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Drain Soul"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMounted) // Do AOE stuff here { if (WoW.CanCast("Agony") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Agony") || (WoW.TargetDebuffTimeRemaining("Agony") <= 540))) { WoW.CastSpell("Agony"); return; } if (WoW.CanCast("Corruption") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Corruption") || (WoW.TargetDebuffTimeRemaining("Corruption") <= 420))) { WoW.CastSpell("Corruption"); return; } if (WoW.CanCast("Seed of Corruption") && WoW.IsSpellInRange("Agony") && !WoW.TargetHasDebuff("Seed of Corruption") && !WoW.IsMoving && WoW.CurrentSoulShards >= 1 && !WoW.WasLastCasted("Seed of Corruption")) { WoW.CastSpell("Seed of Corruption"); return; } if (WoW.CanCast("Drain Soul") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Drain Soul"); return; } } } }
public override void Pulse() { if (!WoW.HasTarget || !WoW.TargetIsEnemy || !WoW.IsSpellInRange("Throw Glaive")) { return; } WoW.CastSpell("Metamorphasis", WoW.PlayerHealthPercent < 30 && !WoW.IsSpellOnCooldown("Metamorphasis") && UseCooldowns, false); WoW.CastSpell("Sever", WoW.PlayerHasBuff("Metamorphasis")); WoW.CastSpell("Soul Cleave", WoW.PlayerHasBuff("Metamorphasis") && WoW.PlayerHasBuff("Soul Fragments") && WoW.PlayerBuffStacks("Soul Fragments") >= 5 && WoW.Pain >= 50); WoW.CastSpell("Throw Glaive", !WoW.IsSpellInRange("Soul Carver") && !WoW.IsSpellOnCooldown("Throw Glaive")); if (!WoW.IsSpellInRange("Soul Carver")) { return; // If we are out of melee range return } if (WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast > Random.Next(50, 70)) { if (!WoW.IsSpellOnCooldown("Sigil of Silence")) { Log.Write("Interrupting spell"); WoW.CastSpell("Sigil of Silence", true); } if (!WoW.IsSpellOnCooldown("Arcane Torrent")) { Log.Write("Interrupting spell"); WoW.CastSpell("Arcane Torrent", true); } if (!WoW.IsSpellOnCooldown("Consume Magic")) { Log.Write("Interrupting spell"); WoW.CastSpell("Consume Magic", true); } } WoW.CastSpell("Fiery Brand", !WoW.TargetHasDebuff("Fiery Demise") && !WoW.IsSpellOnCooldown("Fiery Brand")); WoW.CastSpell("Demon Spikes", !WoW.PlayerHasBuff("Demon Spikes") && WoW.Pain > 20 && !WoW.PlayerHasBuff("Magnum Opus")); WoW.CastSpell("Soul Carver", true); WoW.CastSpell("Fel Devastation", WoW.Pain >= 30); WoW.CastSpell("Soul Cleave", WoW.Pain >= 50); WoW.CastSpell("Immolation Aura", true); WoW.CastSpell("Sigil of Flame", !WoW.TargetHasDebuff("Sigil of Flame")); WoW.CastSpell("Shear", true); // Pain Generator }
/// <summary> /// Calculate the amount of insanity currently drained per second /// </summary> /// <returns>The amount of insanity drained per second</returns> private float calculateInsanityDrain() { return(9 + (WoW.PlayerBuffStacks(VOIDFORM_AURA) - 1 / 2)); }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { validtarget = WoW.HasTarget && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Greater Invisibility") && !WoW.TargetHasDebuff("Polymorph") && WoW.RangeToTarget < 41; // Prismatic Barrier if health < 80% WoW.CastSpell("Prismatic Barrier", WoW.PlayerHealthPercent <= 80 && !WoW.PlayerHasBuff("Prismatic Barrier")); // Arcane Familiar if not up WoW.CastSpell("Arcane Familiar", WoW.Talent(1) == 1 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Arcane Familiar")); // Single Target Combat Begins - No casting if Invisible or Target is Polymorphed if (validtarget) { // Arcane Barrage when moving without Ice Floes WoW.CastSpell("Arcane Barrage", WoW.CanCast("Arcane Barrage") && WoW.IsMoving && !WoW.PlayerHasBuff("Ice Floes") && WoW.PlayerBuffStacks("Arcane Missiles") == 0); //Burn Phase //---------------------------------------------------------- // BURN BEGIN - Only use Burn if Burn is selected and Arcane Power is available or active // Charged Up if zero arcane charges if (UseCooldowns) { // BURN - Arcane Missle if you can WoW.CastSpell("Arcane Missiles", WoW.PlayerHasBuff("Arcane Missiles!") && WoW.PlayerBuffStacks("Arcane Missiles!") == 3, true); WoW.CastSpell("Arcane Missiles", WoW.LastSpell == ("Arcane Missiles") && WoW.PlayerHasBuff("Arcane Missiles!") && WoW.PlayerBuffStacks("Arcane Missiles!") >= 1, true); // Mark Of Aluneth is up WoW.CastSpell("Mark Of Aluneth", WoW.CanCast("Mark Of Aluneth")); // Cast Arcane Blast if < 4 charges WoW.CastSpell("Arcane Blast", WoW.CurrentArcaneCharges < 4); // BURN - Rune of Power at 4 Arcane Blast Charges WoW.CastSpell("Rune of Power", !WoW.PlayerHasBuff("Rune of Power") && WoW.CurrentArcaneCharges == 4); // BURN - Rune of Power if >30% mana WoW.CastSpell("Rune of Power", WoW.PlayerHasBuff("Arcane Power") && !WoW.PlayerHasBuff("Rune of Power") && WoW.Mana >= 30); // BURN - Arcane Power if Rune of Power down and 4 Arcane Blast Charges WoW.CastSpell("Arcane Power", WoW.PlayerHasBuff("Rune of Power") && WoW.CurrentArcaneCharges == 4); // Evocate if low on mana WoW.CastSpell("Evocation", WoW.Mana <= 5); // Arcane Blast otherwise WoW.CastSpell("Arcane Blast", validtarget); } // BURN END // Conserve Begin if (!UseCooldowns) { WoW.CastSpell("Rune of Power", WoW.PlayerSpellCharges("Rune of Power") == 2); // Mark Of Aluneth is up - If no Rune of Power...cast Rune of Power - If Rune of Power...cast Mark Of Aluneth WoW.CastSpell("Rune of Power", WoW.CanCast("Mark Of Aluneth") && !WoW.PlayerHasBuff("Rune of Power")); WoW.CastSpell("Mark Of Aluneth", WoW.CanCast("Mark Of Aluneth") && WoW.PlayerHasBuff("Rune of Power")); // Arcane Missles with 4 Arcane Blast Charges WoW.CastSpell("Arcane Missiles", WoW.PlayerHasBuff("Arcane Missiles!") && WoW.CurrentArcaneCharges == 4); // Arcane Missles with 3 stacks of Arcane Missiles! Buff - Not sure how to check buff stacks *NEED FIXED* WoW.CastSpell("Arcane Missiles", WoW.PlayerHasBuff("Arcane Missiles!") && WoW.PlayerBuffStacks("Arcane Missiles!") == 3); WoW.CastSpell("Arcane Barrage", WoW.Mana < 55); // Arcane Blast otherwise WoW.CastSpell("Arcane Blast", validtarget); } // SingleTarget Combat Ends } } if (combatRoutine.Type == RotationType.AOE) { // Do Single Target Cleave stuff here if applicable else ignore this one } if (combatRoutine.Type == RotationType.Cleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } }
public override void Pulse() { validtarget = WoW.HasTarget && WoW.IsInCombat && !WoW.PlayerIsChanneling && WoW.TargetIsVisible && WoW.RangeToTarget < 41; // Cooldown rotation if (validtarget && WoW.CooldownsOn && WoW.PlayerHasBuff("Moonkin")) { // Incarnation // TODO : Confugrable usage WoW.CastSpell("Incarnation", WoW.Talent(5) == 2 && WoW.CurrentAstralPower >= 40); WoW.CastSpell("CelestialAlignment", WoW.Talent(5) != 2 && WoW.CurrentAstralPower >= 40); // Astral Communion if Astral Power smaller than 25 // TODO : Confugrable usage //WoW.CastSpell("Astral Communion", WoW.Talent(6) == 2 && WoW.CurrentAstralPower <= 25); } if (WoW.SingleTargetOn && validtarget && WoW.Talent(1) == 3) { // If Blessing of the Ancients get it up. WoW.CastSpell("BlessingOfAncients", WoW.Talent(6) == 3 && !WoW.PlayerHasBuff("BlessingOfElune") && !WoW.PlayerHasBuff("BlessingOfAnshe") && WoW.PlayerHealthPercent >= 10); WoW.CastSpell("BlessingOfAncients", WoW.Talent(6) == 3 && WoW.PlayerHasBuff("BlessingOfAnshe") && WoW.PlayerHealthPercent >= 10); // Stellar Drift if (WoW.Talent(7) == 2 && WoW.IsMoving && WoW.PlayerHasBuff("StarfallP")) { WoW.CastSpell("FullMoon", WoW.PlayerHasBuff("StarfallP") && WoW.PlayerBuffTimeRemaining("StarfallP") >= 300); WoW.CastSpell("LStrike", WoW.PlayerHasBuff("StarfallP") && WoW.PlayerBuffTimeRemaining("StarfallP") >= 250); WoW.CastSpell("Moon", WoW.PlayerHasBuff("StarfallP") && WoW.PlayerBuffTimeRemaining("StarfallP") >= 120); WoW.CastSpell("HalfMoon", WoW.PlayerHasBuff("StarfallP") && WoW.PlayerBuffTimeRemaining("StarfallP") >= 200); WoW.CastSpell("SolarW", WoW.PlayerHasBuff("StarfallP") && WoW.PlayerBuffTimeRemaining("StarfallP") >= 200); } // Priority execute order WoW.CastSpell("Starsurge", WoW.CurrentAstralPower >= 80 && (!WoW.PlayerHasBuff("SolarEmp") || WoW.PlayerBuffStacks("SolarEmp") < 3) && (!WoW.PlayerHasBuff("LunarEmp") || WoW.PlayerBuffStacks("LunarEmp") < 3)); // New Moon // Moonfire if not on target WoW.CastSpell("Moonfire", !WoW.TargetHasDebuff("Moonfire")); // Sunfire if not on target WoW.CastSpell("Sunfire", !WoW.TargetHasDebuff("Sunfire")); //moon shizz WoW.CastSpell("Moon", WoW.PlayerSpellCharges("Moon") == 3 && WoW.TargetHasDebuff("Moonfire") && WoW.TargetHasDebuff("Sunfire")); // HalfMoon WoW.CastSpell("HalfMoon", WoW.PlayerSpellCharges("HalfMoon") == 3 && WoW.TargetHasDebuff("Moonfire") && WoW.TargetHasDebuff("Sunfire")); // FullMoon WoW.CastSpell("FullMoon", WoW.PlayerSpellCharges("FullMoon") == 3 && WoW.TargetHasDebuff("Moonfire") && WoW.TargetHasDebuff("Sunfire")); // Moonfire if under 6.6 remaining (no Natures Balance) WoW.CastSpell("Moonfire", WoW.Talent(7) == 2 && WoW.TargetDebuffTimeRemaining("Moonfire") <= 660); // Sunfire if under 5.4 remaining (no Natures Balance) WoW.CastSpell("Sunfire", WoW.Talent(7) == 2 && WoW.TargetDebuffTimeRemaining("Sunfire") <= 540); // Solar Wrath if natures balance and betwean 5-2seconds left on sunfire WoW.CastSpell("SolarW", WoW.Talent(7) == 3 && WoW.TargetDebuffTimeRemaining("Sunfire") <= 500 && WoW.TargetDebuffTimeRemaining("Sunfire") >= 200); // Lunar Strike if natures abalnce and betwean 5-2seconds left on moonfire WoW.CastSpell("LStrike", WoW.Talent(7) == 3 && WoW.TargetDebuffTimeRemaining("Moonfire") <= 600 && WoW.TargetDebuffTimeRemaining("Moonfire") >= 300); // Solar Wrath at 3 solar empowerement WoW.CastSpell("SolarW", WoW.PlayerBuffStacks("SolarEmp") == 3); // Lunar Strike at 3 solar empowerement WoW.CastSpell("LStrike", WoW.PlayerBuffStacks("LunarEmp") == 3); // Secondary priority execute order // New Moon WoW.CastSpell("Moon", WoW.CurrentAstralPower <= 90 && WoW.TargetHasDebuff("Moonfire") && WoW.TargetHasDebuff("Sunfire")); // HalfMoon WoW.CastSpell("HalfMoon", WoW.CurrentAstralPower <= 80 && WoW.TargetHasDebuff("Moonfire") && WoW.TargetHasDebuff("Sunfire")); // FullMoon WoW.CastSpell("FullMoon", WoW.CurrentAstralPower <= 60 && WoW.TargetHasDebuff("Moonfire") && WoW.TargetHasDebuff("Sunfire")); // Starsurge for Emerald Dreamcatcher WoW.CastSpell("Starsurge", WoW.PlayerSpellCharges("Starsurge") <= 2 && WoW.CurrentAstralPower >= 40); // Starsurge WoW.CastSpell("Starsurge", WoW.CurrentAstralPower >= 80 && (!WoW.PlayerHasBuff("SolarEmp") || WoW.PlayerBuffStacks("SolarEmp") < 3) && (!WoW.PlayerHasBuff("LunarEmp") || WoW.PlayerBuffStacks("LunarEmp") < 3)); // Solar Wrath at solar empowerement WoW.CastSpell("SolarW", WoW.PlayerBuffStacks("SolarEmp") <= 1); // Cast LunarStrike if no SolarEmp and have LunarEmp WoW.CastSpell("LStrike", WoW.PlayerHasBuff("LunarEmp") && !WoW.PlayerHasBuff("SolarEmp")); // Cast SolarWrath when nothing else to do WoW.CastSpell("SolarW", validtarget); } if (combatRoutine.Type == RotationType.AOE) { } }