public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.HasDebuff("Paralysis")) { if (WoW.CanCast("Energizing Elixir") && WoW.IsSpellInRange("Tiger Palm") && !WoW.IsSpellOnCooldown("Energizing Elixir") && !WoW.IsSpellOnCooldown("Fists of Fury") && WoW.CurrentChi <= 1) { WoW.CastSpellByName("Energizing Elixir"); return; } if (WoW.CanCast("Strike of the Windlord") && WoW.CurrentChi >= 2 && !WoW.lastSpell.Equals("Strike of the Windlord") && WoW.IsSpellInRange("Tiger Palm")) { WoW.CastSpellByName("Strike of the Windlord"); return; } if (WoW.CanCast("Fists of Fury") && WoW.CurrentChi >= 3 && !WoW.lastSpell.Equals("Fists of Fury") && WoW.IsSpellInRange("Tiger Palm")) { WoW.CastSpellByName("Fists of Fury"); return; } if (WoW.CanCast("Rising Sun Kick") && !WoW.lastSpell.Equals("Rising Sun Kick") && WoW.CurrentChi >= 2 && WoW.IsSpellInRange("Tiger Palm")) { WoW.CastSpellByName("Rising Sun Kick"); return; } if (WoW.CanCast("Whirling Dragon Punch") && WoW.IsSpellOnCooldown("Rising Sun Kick") && WoW.IsSpellOnCooldown("Fists of Fury") && WoW.IsSpellInRange("Tiger Palm")) { WoW.CastSpellByName("Whirling Dragon Punch"); return; } if (WoW.CanCast("Chi Wave") && !WoW.lastSpell.Equals("Chi Wave")) { WoW.CastSpellByName("Chi Wave"); return; } if (WoW.CanCast("Touch of Death") && !WoW.lastSpell.Equals("Touch of Death") && WoW.IsSpellInRange("Tiger Palm")) { WoW.CastSpellByName("Touch of Death"); return; } if (WoW.CanCast("Blackout Kick") && !WoW.lastSpell.Equals("Blackout Kick") && (WoW.CurrentChi >= 1 || WoW.HasBuff("Blackout Kick!")) && WoW.IsSpellInRange("Tiger Palm")) { WoW.CastSpellByName("Blackout Kick"); return; } if (WoW.CanCast("Tiger Palm") && !WoW.lastSpell.Equals("Tiger Palm") && WoW.CurrentChi < 4 && WoW.Energy >= 50 && WoW.IsSpellInRange("Tiger Palm")) { WoW.CastSpellByName("Tiger Palm"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy) { } } }
private static void Interruptcast() { var random = new Random(); var randomNumber = random.Next(interMin, interMax); if (WoW.TargetPercentCast > randomNumber && WoW.TargetIsCastingAndSpellIsInterruptible) { if (WoW.CanCast("Wind Shear") && !WoW.IsSpellOnCooldown("Wind Shear") && WoW.TargetIsCasting && WoW.IsSpellInRange("Wind Shear")) //interupt every spell, not a boss. { WoW.CastSpell("Wind Shear"); return; } if (WoW.PlayerRace == "BloodElf" && WoW.CanCast("Arcane Torrent") && !WoW.IsSpellOnCooldown("Wind Shear") && WoW.IsSpellInRange("Stormstrike")) //interupt every spell, not a boss. { WoW.CastSpell("Arcane Torrent"); return; } if (WoW.PlayerRace == "Pandaren" && WoW.CanCast("Quaking palm", true, true, true)) //interupt every spell, not a boss. { WoW.CastSpell("Quaking palm"); } } }
public override void Pulse() { if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LSHIFT) < 0) { return; } if (!WoW.HasTarget || !WoW.TargetIsEnemy) { WoW.TargetNearestEnemy(); } if (WoW.IsSpellInRange("Soul Carver")) { if (combatRoutine.Type == RotationType.SingleTarget) { SurvivalRotation(); } else { BombRotation(); } } else if (WoW.IsSpellInRange("Throw Glaive")) { WoW.CastSpell("Throw Glaive", !WoW.IsSpellOnCooldown("Throw Glaive")); } }
public override void OutOfCombatPulse() { if (WoW.CanCast("DemonsBite") && WoW.IsSpellInRange("DemonsBite") && WoW.AoeOn) { WoW.CastSpell("DemonsBite"); return; } }
private void EnhancementBuffs() { //actions +=/ windstrike,if= (variable.heartEquipped | set_bonus.tier19_2pc) & (!talent.earthen_spike.enabled | (cooldown.earthen_spike.remains > 1 & cooldown.doom_winds.remains > 1) | debuff.earthen_spike.up) if (WoW.CanCast("Windstrike", true, true, true) && WoW.PlayerHasBuff("Ascendance") && WoW.Maelstrom >= 8 && (/*heart equip place holder*/ WoW.SetBonus(19) >= 2) && (WoW.Talent(7) != 3 || (WoW.SpellCooldownTimeRemaining("Earthen spike") > 1 && WoW.SpellCooldownTimeRemaining("Doom winds") > 1 || WoW.TargetHasDebuff("Earthen spike")))) { WoW.CastSpell("Windstrike", "Top prioity spell"); return; } //actions.buffs = rockbiter,if= talent.landslide.enabled & !buff.landslide.up if (WoW.CanCast("Rockbiter", true, true, true) && WoW.Talent(1) == 3 && !WoW.PlayerHasBuff("Landslide")) { WoW.CastSpell("Rockbiter", "Buff spell"); return; } //actions.buffs +=/ fury_of_air,if= buff.ascendance.up | (feral_spirit.remains > 5) | level < 100 if (WoW.CanCast("FoA") && WoW.Maelstrom >= 5 && WoW.Talent(6) == 2 && !WoW.PlayerHasBuff("FoA") && (WoW.PlayerHasBuff("Ascendance") && Pets.IsRunning)) { WoW.CastSpell("FoA", "Buff spell"); return; } //actions.buffs +=/ crash_lightning,if= artifact.alpha_wolf.rank & prev_gcd.1.feral_spirit if (WoW.CanCast("Crash lightning") && WoW.Maelstrom >= 20 && WoW.IsSpellInRange("Rockbiter") && Pets.IsRunning && !Crash.IsRunning) { Crash.Restart(); WoW.CastSpell("Crash lightning", "Buff spell"); return; } //actions.buffs +=/ flametongue,if= !buff.flametongue.up if (!WoW.PlayerHasBuff("Flametongue") && WoW.CanCast("Flametongue", true, true, true)) { WoW.CastSpell("Flametongue", "Buff spell"); return; } //actions.buffs +=/ frostbrand,if= talent.hailstorm.enabled & !buff.frostbrand.up & variable.furyCheck45 if (WoW.CanCast("Frostbrand", true, true, true) && WoW.Maelstrom >= 20 && WoW.Talent(4) == 3 && !WoW.PlayerHasBuff("Frostbrand") && furyCheck45) { WoW.CastSpell("Frostbrand", "Buff spell"); return; } //actions.buffs +=/ flametongue,if= buff.flametongue.remains < 6 + gcd & cooldown.doom_winds.remains < gcd * 2 if (WoW.CanCast("Flametongue", true, true, true) && WoW.PlayerBuffTimeRemaining("Flametongue") < 600 + GCD && WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2) { WoW.CastSpell("Flametongue", "Buff spell"); return; } //actions.buffs +=/ frostbrand,if= talent.hailstorm.enabled & buff.frostbrand.remains < 6 + gcd & cooldown.doom_winds.remains < gcd * 2 if (WoW.CanCast("Frostbrand", true, true, true) && WoW.Maelstrom >= 20 && WoW.PlayerBuffTimeRemaining("Frostbrand") < 600 + GCD && WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2) { WoW.CastSpell("Frostbrand", "Buff spell"); return; } }
private void EnhancementBuffs() { if (WoW.CanCast("Windstrike", true, true, true) && WoW.PlayerHasBuff("Ascendance") && WoW.Maelstrom >= 8 && WoW.SetBonus(19) >= 2 && (WoW.Talent(7) != 3 || WoW.SpellCooldownTimeRemaining("Earthen spike") > 1 && WoW.SpellCooldownTimeRemaining("Doom winds") > 1 || WoW.TargetHasDebuff("Earthen spike"))) { WoW.CastSpell("Windstrike"); return; } if (WoW.CanCast("Rockbiter", true, true, true) && WoW.Talent(1) == 3 && !WoW.PlayerHasBuff("Landslide")) { WoW.CastSpell("Rockbiter"); return; } if (WoW.CanCast("FoA") && WoW.Maelstrom >= 5 && WoW.Talent(6) == 2 && !WoW.PlayerHasBuff("FoA") && WoW.PlayerHasBuff("Ascendance") && Pets.IsRunning) { WoW.CastSpell("FoA"); return; } if (WoW.CanCast("Crash lightning") && WoW.Maelstrom >= 20 && WoW.IsSpellInRange("Rockbiter") && Pets.IsRunning && !Crash.IsRunning) { Crash.Restart(); WoW.CastSpell("Crash lightning"); return; } if (!WoW.PlayerHasBuff("Flametongue") && WoW.CanCast("Flametongue", true, true, true)) { WoW.CastSpell("Flametongue"); return; } if (WoW.CanCast("Frostbrand", true, true, true) && WoW.Maelstrom >= 20 && WoW.Talent(4) == 3 && !WoW.PlayerHasBuff("Frostbrand") && FuryCheck45) { WoW.CastSpell("Frostbrand"); return; } if (WoW.CanCast("Flametongue", true, true, true) && WoW.PlayerBuffTimeRemaining("Flametongue") < 600 + GCD && WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2) { WoW.CastSpell("Flametongue"); return; } if (WoW.CanCast("Frostbrand", true, true, true) && WoW.Maelstrom >= 20 && WoW.PlayerBuffTimeRemaining("Frostbrand") < 600 + GCD && WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2) { WoW.CastSpell("Frostbrand"); } }
private void EnhancementBuffs() { //actions.buffs = rockbiter,if= talent.landslide.enabled & !buff.landslide.up if (WoW.CanCast("Rockbiter", true, true, true) && WoW.Talent(1) == 3 && !WoW.PlayerHasBuff("Landslide")) { WoW.CastSpell("Rockbiter", "Buff spell"); return; } //actions.buffs +=/ fury_of_air,if= buff.ascendance.up | (feral_spirit.remains > 5) | level < 100 if (WoW.CanCast("FoA") && WoW.Talent(6) == 2 && !WoW.PlayerHasBuff("FoA") && (WoW.PlayerHasBuff("Ascendance") && Pets.IsRunning)) { WoW.CastSpell("FoA", "Buff spell"); return; } //actions.buffs +=/ crash_lightning,if= artifact.alpha_wolf.rank & prev_gcd.1.feral_spirit if (WoW.CanCast("Crash lightning") && WoW.IsSpellInRange("Rockbiter") && Pets.IsRunning && !Crash.IsRunning) { Crash.Restart(); WoW.CastSpell("Crash lightning", "Buff spell"); return; } //actions.buffs +=/ flametongue,if= !buff.flametongue.up if (!WoW.PlayerHasBuff("Flametongue") && WoW.CanCast("Flametongue", true, true, true)) { WoW.CastSpell("Flametongue", "Buff spell"); return; } //actions.buffs +=/ frostbrand,if= talent.hailstorm.enabled & !buff.frostbrand.up & variable.furyCheck45 if (WoW.CanCast("Frostbrand", true, true, true) && WoW.Talent(4) == 3 && !WoW.PlayerHasBuff("Frostbrand") && furyCheck45) { WoW.CastSpell("Frostbrand", "Buff spell"); return; } //actions.buffs +=/ flametongue,if= buff.flametongue.remains < 6 + gcd & cooldown.doom_winds.remains < gcd * 2 if (WoW.CanCast("Flametongue", true, true, true) && WoW.PlayerBuffTimeRemaining("Flametongue") < 600 + GCD && WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2) { WoW.CastSpell("Flametongue", "Buff spell"); return; } //actions.buffs +=/ frostbrand,if= talent.hailstorm.enabled & buff.frostbrand.remains < 6 + gcd & cooldown.doom_winds.remains < gcd * 2 if (WoW.CanCast("Frostbrand", true, true, true) && WoW.PlayerBuffTimeRemaining("Frostbrand") < 600 + GCD && WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2) { WoW.CastSpell("Frostbrand", "Buff spell"); 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 }
private void SpellCast(string spellName) { if (WoW.PlayerIsCasting || (WoW.LastSpell == VOID_TORRENT && WoW.PlayerIsChanneling)) { return; } if (spellName == MIND_FLAY && WoW.LastSpell == MIND_FLAY && WoW.PlayerIsChanneling) { return; } if (WoW.CanCast(spellName) && WoW.IsSpellInRange(SHADOW_WORD_PAIN)) { WoW.CastSpell(spellName); if (WoW.IsSpellOnGCD(spellName)) { Thread.Sleep(WoW.SpellCooldownTimeRemaining(spellName)); } } }
public void EnhancementCD() { if (UseCooldowns) { //actions.CDs = bloodlust,if= target.health.pct < 25 | time > 0.500 //actions.CDs +=/ berserking,if= buff.ascendance.up | (feral_spirit.remains > 5) if (WoW.PlayerRace == "Troll" && WoW.CanCast("Berserking") && !WoW.IsSpellOnCooldown("Berserking") && ((WoW.Talent(7) != 1 || WoW.PlayerHasBuff("Ascendance")) || Pets.ElapsedMilliseconds < 10000)) { WoW.CastSpell("Berserking"); return; } //actions.CDs +=/ blood_fury,if= buff.ascendance.up | (feral_spirit.remains > 5) | level < 100 if (WoW.PlayerRace == "Orc" && WoW.CanCast("Blood Fury") && ((WoW.Talent(7) != 1 || WoW.PlayerHasBuff("Ascendance")) || Pets.ElapsedMilliseconds < 10000)) { WoW.CastSpell("Blood Fury"); return; } //actions.CDs +=/ feral_spirit if (WoW.CanCast("Feral Spirit", true, true, false, false, true) && WoW.IsSpellInRange("Rockbiter") && WoW.Maelstrom >= 20 && (WoW.CanCast("Crash lightning", true, true, false, false, true) || WoW.SpellCooldownTimeRemaining("Crash lightning") < GCD)) //feral spirit on boss - normally cast manually { Pets.Start(); WoW.CastSpell("Feral Spirit"); return; } //actions.CDs +=/ potion,if= buff.ascendance.up | !talent.ascendance.enabled & feral_spirit.remains > 5 | target.time_to_die <= 60 //actions.CDs +=/ doom_winds,if= debuff.earthen_spike.up & talent.earthen_spike.enabled | !talent.earthen_spike.enabled if (WoW.CanCast("Doom Winds") && WoW.IsSpellInRange("Rockbiter") && (WoW.Talent(7) == 3 && WoW.TargetHasDebuff("Earthen spike") || WoW.Talent(7) != 3)) { WoW.CastSpell("Doom Winds"); return; } //actions.CDs +=/ ascendance,if= buff.doom_winds.up if (WoW.CanCast("Ascendance") && WoW.PlayerHasBuff("Doom Winds")) { WoW.CastSpell("Ascendance"); return; } } }
public void EnhancementCD() { if (UseCooldowns) { if (WoW.PlayerRace == "Troll" && WoW.CanCast("Berserking") && !WoW.IsSpellOnCooldown("Berserking") && (WoW.Talent(7) != 1 || WoW.PlayerHasBuff("Ascendance") || Pets.ElapsedMilliseconds < 10000)) { WoW.CastSpell("Berserking"); return; } if (WoW.PlayerRace == "Orc" && WoW.CanCast("Blood Fury") && (WoW.Talent(7) != 1 || WoW.PlayerHasBuff("Ascendance") || Pets.ElapsedMilliseconds < 10000)) { WoW.CastSpell("Blood Fury"); return; } if (WoW.CanCast("Feral Spirit") && WoW.IsSpellInRange("Rockbiter") && WoW.Maelstrom >= 20 && (WoW.CanCast("Crash lightning") || WoW.SpellCooldownTimeRemaining("Crash lightning") < GCD)) //feral spirit on boss - normally cast manually { Pets.Start(); WoW.CastSpell("Feral Spirit"); return; } if (WoW.CanCast("Doom Winds") && WoW.IsSpellInRange("Rockbiter") && (WoW.Talent(7) == 3 && WoW.TargetHasDebuff("Earthen spike") || WoW.Talent(7) != 3)) { WoW.CastSpell("Doom Winds"); return; } if (WoW.CanCast("Ascendance") && WoW.PlayerHasBuff("Doom Winds")) { WoW.CastSpell("Ascendance"); } } }
public override void Pulse() { if (WoW.PlayerHasBuff("Mount")) { return; } if (UseCooldowns) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat) { if (WoW.CanCast("BattleCry")) { WoW.CastSpell("BattleCry"); return; } if (WoW.CanCast("Avatar") && (WoW.SpellCooldownTimeRemaining("BattleCry") > 14)) { WoW.CastSpell("Avatar"); return; } } } if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat) { /* interrupting */ if (WoW.TargetIsCastingAndSpellIsInterruptible && WoW.CanCast("Pummel") && WoW.IsSpellInRange("Pummel")) { WoW.CastSpell("Pummel"); return; } /* --------------------- end of interrupting--------------------*/ /* defensive CD */ if (WoW.CanCast("Enraged Regeneration") && (WoW.HealthPercent < 20)) { WoW.CastSpell("Enraged Regeneration"); if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && WoW.PlayerHasBuff("Enraged Regeneration")) { WoW.CastSpell("Bloodthirst"); return; } return; } if (WoW.CanCast("Commanding Shout") && (WoW.HealthPercent < 15)) { WoW.CastSpell("Commanding Shout"); if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Bloodthirst"); return; } return; } if (WoW.PlayerHasDebuff("Fear") && WoW.CanCast("Berserker Rage")) { WoW.CastSpell("Berserker Rage"); return; } if (WoW.PlayerHasDebuff("Stunned") && WoW.CanCast("Every Man for Himself")) { WoW.CastSpell("Every Man for Himself"); return; } /* --------------------- end of defensive CD--------------------*/ /* dps-ing */ if (!WoW.PlayerHasBuff("BattleCry")) { if (WoW.CanCast("Rampage") && WoW.IsSpellInRange("Rampage") && (WoW.Rage >= 100) && !WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && !WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("OdynsFury") && WoW.IsSpellInRange("OdynsFury") && (WoW.PlayerHasBuff("BattleCry") || WoW.HealthPercent < 10)) { WoW.CastSpell("OdynsFury"); return; } if (WoW.CanCast("Execute") && WoW.IsSpellInRange("Execute") && WoW.PlayerHasBuff("Enrage") && WoW.TargetHealthPercent <= 20) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("Whirlwind") && WoW.PlayerHasBuff("Wrecking Ball") && WoW.IsSpellInRange("Whirlwind")) { WoW.CastSpell("Whirlwind"); return; } if (WoW.CanCast("Furious Slash") && WoW.IsSpellInRange("Furious Slash") && (WoW.SpellCooldownTimeRemaining("Raging Blow") > 0.5)) { WoW.CastSpell("Furious Slash"); return; } } if (WoW.PlayerHasBuff("BattleCry")) { if (WoW.CanCast("Rampage") && WoW.IsSpellInRange("Rampage") && (WoW.Rage >= 100) && (!WoW.PlayerHasBuff("Enrage") || (WoW.PlayerBuffTimeRemaining("Enrage") <= 2))) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("OdynsFury") && WoW.IsSpellInRange("OdynsFury") && (WoW.PlayerHasBuff("BattleCry") || WoW.HealthPercent < 10)) { WoW.CastSpell("OdynsFury"); return; } if (WoW.CanCast("Execute") && WoW.IsSpellInRange("Execute") && WoW.PlayerHasBuff("Enrage") && WoW.TargetHealthPercent <= 20) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Bloodthirst"); return; } } /* --------------------- end of dps-ing--------------------*/ } } if ((combatRoutine.Type == RotationType.AOE) || (combatRoutine.Type == RotationType.Cleave)) { if (WoW.CanCast("OdynsFury") && WoW.IsSpellInRange("OdynsFury") && (WoW.PlayerHasBuff("BattleCry") || WoW.HealthPercent < 10)) { WoW.CastSpell("OdynsFury"); return; } if (!WoW.PlayerHasBuff("Meat-Cleaver")) { WoW.CastSpell("Whirlwind"); return; } if (WoW.CanCast("Rampage") && WoW.IsSpellInRange("Rampage") && (WoW.Rage >= 100) && !WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Meat-Cleaver")) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && !WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Meat-Cleaver")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && WoW.PlayerHasBuff("Meat-Cleaver")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("Whirlwind") && WoW.PlayerHasBuff("Wrecking Ball") && WoW.IsSpellInRange("Whirlwind")) { WoW.CastSpell("Whirlwind"); 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, 2, 1); SelectRotation(4, 3, 1); } //Healthstone - Potion if ((WoW.CanCast("Healthstone") || WoW.CanCast("Potion")) && (WoW.ItemCount("Healthstone") >= 1 || WoW.ItemCount("Potion") >= 1) && (!WoW.ItemOnCooldown("Healthstone") || !WoW.ItemOnCooldown("Potion")) && !WoW.PlayerHasBuff("Feign Death") && WoW.HealthPercent <= 30 && !WoW.IsMounted && WoW.HealthPercent != 0) { Thread.Sleep(500); WoW.CastSpell("Healthstone"); WoW.CastSpell("Potion"); return; } //Exhilaration if (WoW.CanCast("Exhilaration") && WoW.HealthPercent <= 20 && !WoW.IsMounted && !WoW.PlayerHasBuff("Feign Death") && WoW.HealthPercent != 0) { WoW.CastSpell("Exhilaration"); return; } //Counter Shot if (WoW.CanCast("Counter Shot") && WoW.TargetIsCastingAndSpellIsInterruptible && !WoW.IsSpellOnCooldown("Counter Shot") && WoW.TargetIsCasting && WoW.IsSpellInRange("Counter Shot") && WoW.TargetPercentCast > 75) { WoW.CastSpell("Counter Shot"); return; } ////Revive Pet Call pet if ((!WoW.HasPet || WoW.PetHealthPercent <= 0) && !WoW.IsMounted && WoW.HealthPercent != 0 && !WoW.PlayerHasBuff("Feign Death")) { WoW.CastSpell("Heart of the Phoenix"); WoW.CastSpell("Revive Pet"); Thread.Sleep(500); WoW.CastSpell("Call Pet"); return; } //Voley if (WoW.CanCast("Voley") && !WoW.PlayerHasBuff("Feign Death") && !WoW.PlayerHasBuff("Voley") && WoW.HealthPercent != 0 && WoW.Talent(6) == 3) { WoW.CastSpell("Voley"); return; } //Intimidation //Binding Shot if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_Z) < 0 && ((WoW.CanCast("Intimidation") && WoW.Talent(5) == 3) || (WoW.CanCast("Binding Shot") && WoW.Talent(5) == 1))) { WoW.CastSpell("Binding Shot"); WoW.CastSpell("Intimidation"); return; } //Freezing Trap if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_X) < 0 && WoW.CanCast("Freezing Trap") && !WoW.IsMounted) { WoW.CastSpell("Freezing Trap"); return; } //Tar Trap if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_C) < 0 && WoW.CanCast("Tar Trap") && !WoW.IsMounted) { WoW.CastSpell("Tar Trap"); return; } if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Feign Death") && WoW.HealthPercent != 0) { //Cooldowns if (UseCooldowns) { } //Stampede if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LCONTROL) < 0 && WoW.CanCast("Stampede") && WoW.Talent(7) == 1) { WoW.CastSpell("Stampede"); return; } /*/Aspect of the Wild * if (WoW.CanCast("Aspect of the Wild") * && !WoW.PlayerHasBuff("Aspect of the Turtle") * && WoW.PlayerHasBuff("Bestial Wrath") * && WoW.PlayerBuffTimeRemaining("Bestial Wrath") >= 1300) * { * WoW.CastSpell("Aspect of the Wild"); * }*/ //SINGLE TARGET //Bestial Wrath if ((combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave) && WoW.CanCast("Bestial Wrath") && !WoW.PlayerHasBuff("Aspect of the Turtle") && WoW.IsSpellInRange("Cobra Shot") && (WoW.Focus >= 97 || (WoW.Focus >= 90 && WoW.CanCast("Aspect of the Wild")))) { WoW.CastSpell("Bestial Wrath"); WoW.CastSpell("Aspect of the Wild"); //WoW.CastSpell("A Murder of Crows"); WoW.CastSpell("Kill Command"); } //Dire Frenzy if (combatRoutine.Type == RotationType.SingleTarget && (WoW.CanCast("Dire Frenzy") || WoW.SpellCooldownTimeRemaining("Dire Frenzy") <= 100) && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(2) == 2 && ((WoW.PetHasBuff("Dire Frenzy") && WoW.PetBuffTimeRemaining("Dire Frenzy") <= 200) || !WoW.PetHasBuff("Dire Frenzy") || WoW.PlayerSpellCharges("Dire Frenzy") >= 2)) { WoW.CastSpell("Titan's Thunder"); WoW.CastSpell("Dire Frenzy"); return; } //A Murder of Crows if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("A Murder of Crows") //&& WoW.PlayerHasBuff("Bestial Wrath") && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(6) == 1 && WoW.Focus >= 30) { WoW.CastSpell("A Murder of Crows"); return; } // Dire beast if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Dire Beast") && WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 300 && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(2) != 2) { WoW.CastSpell("Dire Beast"); WoW.CastSpell("Titan's Thunder"); return; } //Kill Command if (combatRoutine.Type == RotationType.SingleTarget && (WoW.SpellCooldownTimeRemaining("Kill Command") <= 100 || WoW.CanCast("Kill Command")) && WoW.Focus >= 30) { WoW.CastSpell("Kill Command"); return; } //Chimaera Shot if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Chimaera Shot") && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(2) == 3 && WoW.Focus < 80) { WoW.CastSpell("Chimaera Shot"); return; } //Cobra Shot if (combatRoutine.Type == RotationType.SingleTarget && ((WoW.Focus >= 90) || (WoW.PlayerHasBuff("Bestial Wrath") && WoW.Focus >= 32)) && WoW.IsSpellInRange("Cobra Shot") && WoW.CanCast("Cobra Shot") && !WoW.CanCast("Bestial Wrath")) { WoW.CastSpell("Cobra Shot"); return; } //AOE //Bestial Wrath if (combatRoutine.Type == RotationType.AOE && WoW.CanCast("Bestial Wrath") && WoW.IsSpellInRange("Cobra Shot") && !WoW.PlayerHasBuff("Aspect of the Turtle")) { WoW.CastSpell("Bestial Wrath"); return; } // Dire beast if (combatRoutine.Type == RotationType.AOE && WoW.CanCast("Dire Beast") && WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 300 && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(2) != 2) { WoW.CastSpell("Dire Beast"); WoW.CastSpell("Titan's Thunder"); return; } //Dire Frenzy if (combatRoutine.Type == RotationType.AOE && WoW.CanCast("Dire Frenzy") && WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 600 && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(2) == 2) { WoW.CastSpell("Titan's Thunder"); WoW.CastSpell("Dire Frenzy"); return; } //Barrage if (combatRoutine.Type == RotationType.AOE && WoW.CanCast("Barrage") && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(6) == 2 && (WoW.Focus >= 60)) { WoW.CastSpell("Barrage"); return; } //Multishot if (combatRoutine.Type == RotationType.AOE && WoW.CanCast("Multi-Shot") && WoW.IsSpellInRange("Multi-Shot") && WoW.Focus >= 40) { WoW.CastSpell("Multi-Shot"); return; } //Chimaera Shot if (combatRoutine.Type == RotationType.AOE && WoW.CanCast("Chimaera Shot") && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(2) == 3 && WoW.Focus < 80) { WoW.CastSpell("Chimaera Shot"); return; } //CLEAVE //Multishot - Beast Cleave uptime if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("Multi-Shot") && (/*!WoW.PetHasBuff("BeastCleave") ||*/ WoW.PetBuffTimeRemaining("BeastCleave") < 0.5) && WoW.IsSpellInRange("Multi-Shot") && !WoW.CanCast("Bestial Wrath") && !WoW.PlayerHasBuff("Bestial Wrath") && WoW.Focus >= 40) { WoW.CastSpell("Multi-Shot"); return; } //Dire Frenzy if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("Dire Frenzy") && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(2) == 2 && ((WoW.PetHasBuff("Dire Frenzy") && WoW.PetBuffTimeRemaining("Dire Frenzy") <= 200) || !WoW.PetHasBuff("Dire Frenzy") || WoW.PlayerSpellCharges("Dire Frenzy") >= 2)) { WoW.CastSpell("Titan's Thunder"); WoW.CastSpell("Dire Frenzy"); return; } //A Murder of Crows if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("A Murder of Crows") && WoW.PlayerHasBuff("Bestial Wrath") && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(6) == 1 && WoW.Focus >= 30) { WoW.CastSpell("A Murder of Crows"); return; } // Dire beast if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("Dire Beast") && WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 300 && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(2) != 2) { WoW.CastSpell("Dire Beast"); WoW.CastSpell("Titan's Thunder"); return; } //Barrage if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("Barrage") && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(6) == 2 && (WoW.Focus >= 60)) { WoW.CastSpell("Barrage"); return; } //Kill Command if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("Kill Command") && WoW.Focus >= 30) { WoW.CastSpell("Kill Command"); return; } //Chimaera Shot if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("Chimaera Shot") && WoW.IsSpellInRange("Cobra Shot") && WoW.Talent(2) == 3 && WoW.Focus < 80) { WoW.CastSpell("Chimaera Shot"); return; } //Cobra Shot if (combatRoutine.Type == RotationType.SingleTargetCleave && ((WoW.Focus >= 85) || (WoW.PlayerHasBuff("Bestial Wrath") && (WoW.Focus >= 32))) && WoW.IsSpellInRange("Cobra Shot") && WoW.CanCast("Cobra Shot") && !WoW.CanCast("Bestial Wrath")) { WoW.CastSpell("Cobra Shot"); return; } //Mend Pet if (WoW.HasPet && WoW.CanCast("Mend Pet") && WoW.HealthPercent != 0 && WoW.PetHealthPercent <= 75 && !WoW.PlayerHasBuff("Feign Death")) { WoW.CastSpell("Mend Pet"); return; } } }
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() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy) //First things go first { if (WoW.TargetIsCasting && WoW.IsSpellInRange("Wind Shear")) //interupt every spell - need to add kickable spells { WoW.CastSpell("Wind Shear"); return; } if (WoW.CanCast("Totem Mastery") && !WoW.PlayerHasBuff("Totem Mastery")) //Totem mastery at beggining { WoW.CastSpell("Totem Mastery"); return; } if (!WoW.IsSpellOnCooldown("Fire Elemental")) // && WoW.IsBoss) // use Fire Elemental { Log.Write("Boss detected, using Fire Elemental", Color.Purple); WoW.CastSpell("Fire Elemental"); return; } if (WoW.CanCast("Ascendance") && !WoW.IsSpellOnCooldown("Ascendance")) // && WoW.IsBoss) //use Ascendance { WoW.CastSpell("Ascendance"); return; } if (WoW.CanCast("Stormkeeper") && !WoW.IsSpellOnCooldown("Stormkeeper") && !WoW.PlayerHasBuff("Ascendance")) //use stormkeeper after ascendance { WoW.CastSpell("Stormkeeper"); return; } if (WoW.CanCast("Lightning Bolt") && WoW.PlayerHasBuff("Stormkeeper") && !WoW.IsMoving) //Filler with stormkeeper { WoW.CastSpell("Lightning Bolt"); } if (WoW.CanCast("Elemental Mastery") && WoW.IsSpellOnCooldown("Elemental Mastery")) //use Elemental Mastery on CD { WoW.CastSpell("Elemental Mastery"); return; } if (WoW.CanCast("Flame Shock") && !WoW.TargetHasDebuff("Flame Shock")) //Refresh Flame shock { WoW.CastSpell("Flame Shock"); return; } if (WoW.CanCast("Earth Shock") && WoW.Maelstrom > 99) //Earth shock on 100 maelstrom { WoW.CastSpell("Earth Shock"); return; } if (WoW.CanCast("Lava Burst") && WoW.TargetHasDebuff("Flame Shock") && WoW.PlayerHasBuff("Lava Surge")) //lava burst when we have lava surge { WoW.CastSpell("Lava Burst"); return; } if (WoW.CanCast("Lava Burst") && WoW.TargetHasDebuff("Flame Shock") && !WoW.IsMoving) //lava burst when not moving { WoW.CastSpell("Lava Burst"); return; } if (WoW.CanCast("Lightning Bolt") && !WoW.IsMoving) //Filler { WoW.CastSpell("Lightning Bolt"); return; } if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 40 && !WoW.IsSpellOnCooldown("Astral Shift")) //ASTRAL SHIFT - DMG REDUCTION if we are below 40% of HP { WoW.CastSpell("Astral Shift"); return; } } } if (combatRoutine.Type == RotationType.AOE) //cast chain light and earthguake, using CDs without fire elemental { if (WoW.HasTarget && WoW.TargetIsEnemy) //First things go first { if (WoW.TargetIsCasting && WoW.IsSpellInRange("Wind Shear")) //interupt every spell - need to add kickable spells { WoW.CastSpell("Wind Shear"); return; } if (WoW.CanCast("Totem Mastery") && !WoW.PlayerHasBuff("Totem Mastery")) //Totem mastery at beggining { WoW.CastSpell("Totem Mastery"); return; } if (WoW.CanCast("Ascendance") && !WoW.IsSpellOnCooldown("Ascendance")) // && WoW.IsBoss) //use Ascendance on boss { WoW.CastSpell("Ascendance"); return; } if (WoW.CanCast("Stormkeeper") && !WoW.IsSpellOnCooldown("Stormkeeper") && !WoW.PlayerHasBuff("Ascendance")) //Stormkeeper after ascendance { WoW.CastSpell("Stormkeeper"); return; } if (WoW.CanCast("Lava Beam") && WoW.PlayerHasBuff("Ascendance") && !WoW.IsMoving) //Filler { WoW.CastSpell("Lava Beam"); } if (WoW.CanCast("Lava Burst") && WoW.TargetHasDebuff("Flame Shock") && WoW.PlayerHasBuff("Lava Surge")) //lava burst when we have lava surge { WoW.CastSpell("Lava Burst"); return; } if (WoW.CanCast("Earthquake") && WoW.Maelstrom > 50) //Earthquake using this macro #showtooltip Earthquake /cast [@cursor] Earthquake Need to point at location where EQ is cast { WoW.CastSpell("Earthquake"); return; } if (WoW.CanCast("Chain Lightning") && WoW.PlayerHasBuff("Stormkeeper") && !WoW.IsMoving) //Chain with stormkeeper { WoW.CastSpell("Chain Lightning"); } if (WoW.CanCast("Elemental Mastery") && !WoW.IsSpellOnCooldown("Elemental Mastery")) //use Elemental Mastery on CD { WoW.CastSpell("Elemental Mastery"); return; } if (WoW.CanCast("Chain Lightning") && !WoW.IsMoving) //Filler { WoW.CastSpell("Chain Lightning"); } if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 40 && !WoW.IsSpellOnCooldown("Astral Shift")) //ASTRAL SHIFT - DMG REDUCTION if we are below 40% of HP { WoW.CastSpell("Astral Shift"); } } } }
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) { // 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() { if (defcooldowns && WoW.IsInCombat) { if (WoW.HealthPercent < ConfigFile.ReadValue <int>("ProtectionLesion", "LS HP Percent") && WoW.CanCast("Last Stand") && !WoW.IsSpellOnCooldown("Last Stand")) { WoW.CastSpell("Last Stand"); return; } if (WoW.HealthPercent < ConfigFile.ReadValue <int>("ProtectionLesion", "SW HP Percent") && WoW.CanCast("Shield Wall") && !WoW.IsSpellOnCooldown("Shield Wall")) { WoW.CastSpell("Shield Wall"); return; } } if (Pots && WoW.IsInCombat && WoW.HealthPercent < ConfigFile.ReadValue <int>("ProtectionLesion", "HS HP Percent")) { if (WoW.ItemCount("Healthstone") >= 1 && !WoW.ItemOnCooldown("Healthstone") && WoW.ItemCount("HealthPotion") == 0) { WoW.CastSpell("Healthstone"); return; } if (WoW.ItemCount("HealthPotion") >= 1 && !WoW.ItemOnCooldown("HealthPotion")) { WoW.CastSpell("HealthPotion"); return; } } if (!Indomitable && WoW.IsInCombat && WoW.IsSpellInRange("Shield Slam")) { swingwatch.Start(); } if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Shield Slam")) { if (BattleC && !WoW.IsSpellOnCooldown("Battle Cry")) { WoW.CastSpell("Battle Cry"); return; } if (AngerM && !WoW.IsSpellOnCooldown("Demoralizing Shout") && (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_Z) < 0)) { WoW.CastSpell("Demoralizing Shout"); } if (generalInterrupts) { if (WoW.TargetIsCasting && WoW.TargetIsCastingAndSpellIsInterruptible) { if (!WoW.IsSpellOnCooldown("Pummel") && WoW.IsSpellInRange("Shield Slam") && WoW.TargetPercentCast >= 50) { WoW.CastSpell("Pummel"); return; } if (spellref && !WoW.IsSpellOnCooldown("SpellReflect") && WoW.TargetIsCasting && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 80) { WoW.CastSpell("SpellReflect"); return; } } } if (mythicplusinterrupts) { if (WoW.CanCast("Pummel") && WoW.TargetIsCasting && WoW.TargetIsCastingAndSpellIsInterruptible) { //int spell list for all important spells in M+ if (WoW.TargetCastingSpellID == 200248 //Court Of Stars Mythic+ Interrupt list || WoW.TargetCastingSpellID == 225573 || WoW.TargetCastingSpellID == 208165 || WoW.TargetCastingSpellID == 211401 || WoW.TargetCastingSpellID == 21147 || WoW.TargetCastingSpellID == 211299 || WoW.TargetCastingSpellID == 2251 || WoW.TargetCastingSpellID == 209413 || WoW.TargetCastingSpellID == 209404 || WoW.TargetCastingSpellID == 215204 || WoW.TargetCastingSpellID == 210261 //Darkheart Thicket Mythic+ Interrupt list || WoW.TargetCastingSpellID == 200658 || WoW.TargetCastingSpellID == 200631 || WoW.TargetCastingSpellID == 204246 || WoW.TargetCastingSpellID == 2014 //Eye of Azshara Mythic+ Interrupt list || WoW.TargetCastingSpellID == 19687 || WoW.TargetCastingSpellID == 218532 || WoW.TargetCastingSpellID == 195129 || WoW.TargetCastingSpellID == 195046 || WoW.TargetCastingSpellID == 197502 || WoW.TargetCastingSpellID == 196027 || WoW.TargetCastingSpellID == 196175 || WoW.TargetCastingSpellID == 192003 || WoW.TargetCastingSpellID == 191848 //Halls of Valor Mythic+ Interrupt list || WoW.TargetCastingSpellID == 198595 || WoW.TargetCastingSpellID == 198962 || WoW.TargetCastingSpellID == 198931 || WoW.TargetCastingSpellID == 192563 || WoW.TargetCastingSpellID == 192288 || WoW.TargetCastingSpellID == 199726 //Maw of Souls Mythic+ Interrupt list || WoW.TargetCastingSpellID == 198495 || WoW.TargetCastingSpellID == 195293 || WoW.TargetCastingSpellID == 199589 || WoW.TargetCastingSpellID == 194266 || WoW.TargetCastingSpellID == 198405 || WoW.TargetCastingSpellID == 199514 || WoW.TargetCastingSpellID == 194657 //Neltharions Lair Mythic+ Interrupt list || WoW.TargetCastingSpellID == 193585 || WoW.TargetCastingSpellID == 202181 //The Arcway Mythic+ Interrupt list || WoW.TargetCastingSpellID == 226269 || WoW.TargetCastingSpellID == 211007 || WoW.TargetCastingSpellID == 211757 || WoW.TargetCastingSpellID == 226285 || WoW.TargetCastingSpellID == 226206 || WoW.TargetCastingSpellID == 211115 || WoW.TargetCastingSpellID == 196392 // Advisor Vandros (Interrupt manually) Spell,203176,Accelerating Blast || WoW.TargetCastingSpellID == 203957 //Vault of the Wardens Mythic+ Interrupt list || WoW.TargetCastingSpellID == 193069 || WoW.TargetCastingSpellID == 191823 || WoW.TargetCastingSpellID == 202661 || WoW.TargetCastingSpellID == 201488 || WoW.TargetCastingSpellID == 195332 //Raid Interrupts || WoW.TargetCastingSpellID == 209485 || WoW.TargetCastingSpellID == 209410 || WoW.TargetCastingSpellID == 211470 || WoW.TargetCastingSpellID == 225100 || WoW.TargetCastingSpellID == 207980 || WoW.TargetCastingSpellID == 196870 || WoW.TargetCastingSpellID == 195284 || WoW.TargetCastingSpellID == 192005 || WoW.TargetCastingSpellID == 228255 || WoW.TargetCastingSpellID == 228239 || WoW.TargetCastingSpellID == 227917 || WoW.TargetCastingSpellID == 228625 || WoW.TargetCastingSpellID == 228606 || WoW.TargetCastingSpellID == 229714 || WoW.TargetCastingSpellID == 227592 || WoW.TargetCastingSpellID == 229083 || WoW.TargetCastingSpellID == 228025 || WoW.TargetCastingSpellID == 228019 || WoW.TargetCastingSpellID == 227987 || WoW.TargetCastingSpellID == 227420 || WoW.TargetCastingSpellID == 200905) { if (!WoW.IsSpellOnCooldown("Pummel") && WoW.TargetPercentCast >= 40) { WoW.CastSpell("Pummel"); return; } if (spellref && !WoW.IsSpellOnCooldown("SpellReflect") && WoW.TargetPercentCast >= 80) { WoW.CastSpell("SpellReflect"); return; } } } } if (WoW.CanCast("Shield Block") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("ProtectionLesion", "SB HP Percent") && WoW.Rage >= 15 && !WoW.IsSpellOnCooldown("Shield Block") && !WoW.PlayerHasBuff("Shield Block")) { WoW.CastSpell("Shield Block"); return; } if (WoW.CanCast("Shield Block") && WoW.Rage >= 15 && WoW.PlayerBuffTimeRemaining("Shield Block") <= 2) { WoW.CastSpell("Shield Block"); return; } // IP Control if (WoW.CanCast("Ignore Pain") && (WoW.Rage >= 60) && !WoW.PlayerHasBuff("Vengeance Ignore Pain")) { WoW.CastSpell("Ignore Pain"); return; } if (WoW.CanCast("Ignore Pain") && (WoW.Rage >= 39) && WoW.PlayerHasBuff("Vengeance Ignore Pain")) { WoW.CastSpell("Ignore Pain"); } if (WoW.CanCast("Ignore Pain") && (WoW.Rage >= 13) && WoW.PlayerHasBuff("Vengeance Ignore Pain") && WoW.IsSpellOverlayed("Revenge")) { WoW.CastSpell("Ignore Pain"); } // Revenge Control if (Indomitable) { if (!AngerM && WoW.CanCast("Revenge") && WoW.Rage >= 30 && !WoW.PlayerHasBuff("Vengeance Revenge")) { WoW.CastSpell("Revenge"); } if (AngerM && WoW.CanCast("Revenge") && WoW.Rage >= 30) { WoW.CastSpell("Revenge"); } if (AngerM && WoW.CanCast("Revenge") && WoW.IsSpellOverlayed("Revenge")) { WoW.CastSpell("Revenge"); } if (!AngerM && WoW.CanCast("Revenge") && WoW.IsSpellOverlayed("Revenge") && WoW.PlayerHasBuff("Vengeance Revenge")) { WoW.CastSpell("Revenge"); } if (WoW.CanCast("Thunder Clap") && !WoW.IsSpellOnCooldown("Thunder Clap")) { WoW.CastSpell("Thunder Clap"); return; } } if (!Indomitable && swingwatch.ElapsedMilliseconds > AttackspeedMS) { if (!AngerM && WoW.CanCast("Revenge") && WoW.Rage >= 30 && !WoW.PlayerHasBuff("Vengeance Revenge")) { WoW.CastSpell("Revenge"); swingwatch.Reset(); swingwatch.Start(); return; } if (AngerM && WoW.CanCast("Revenge") && WoW.Rage >= 30) { WoW.CastSpell("Revenge"); swingwatch.Reset(); swingwatch.Start(); return; } if (AngerM && WoW.CanCast("Revenge") && WoW.IsSpellOverlayed("Revenge")) { WoW.CastSpell("Revenge"); swingwatch.Reset(); swingwatch.Start(); return; } if (!AngerM && WoW.CanCast("Revenge") && WoW.IsSpellOverlayed("Revenge") && WoW.PlayerHasBuff("Vengeance Revenge")) { WoW.CastSpell("Revenge"); swingwatch.Reset(); swingwatch.Start(); return; } if (!AngerM && WoW.CanCast("Revenge") && WoW.Rage >= 19 && !WoW.IsSpellOnCooldown("Revenge") && WoW.PlayerHasBuff("Vengeance Revenge")) { WoW.CastSpell("Revenge"); swingwatch.Reset(); swingwatch.Start(); return; } if (WoW.CanCast("Thunder Clap") && !WoW.IsSpellOnCooldown("Thunder Clap")) { WoW.CastSpell("Thunder Clap"); swingwatch.Reset(); swingwatch.Start(); return; } } //Rotational shiz if (!Indomitable && (!WoW.IsSpellOnCooldown("Shield Slam") || WoW.IsSpellOverlayed("Shield Slam")) && !AngerM && WoW.PlayerHasBuff("Shield Block") && WoW.SpellCooldownTimeRemaining("Shield Block") > 2) { WoW.CastSpell("Shield Slam"); return; } if ((AngerM || Indomitable) && (!WoW.IsSpellOnCooldown("Shield Slam") || WoW.IsSpellOverlayed("Shield Slam"))) { WoW.CastSpell("Shield Slam"); } //will cast SS when proc's if (WoW.CanCast("Shield Slam") && WoW.IsSpellOverlayed("Shield Slam")) { WoW.CastSpell("Shield Slam"); return; } if (Indomitable && WoW.CanCast("Devastate") && WoW.IsSpellOnCooldown("Shield Slam") && WoW.IsSpellOnCooldown("Thunder Clap")) { WoW.CastSpell("Devastate"); return; } if (ImpendingVic && WoW.Rage >= 10 && !WoW.IsSpellOnCooldown("Impending Victory") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("ProtectionLesion", "IV HP Percent")) { WoW.CastSpell("Impending Victory"); return; } if (!ImpendingVic && WoW.IsSpellOverlayed("Victory Rush") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("ProtectionLesion", "IV HP Percent")) { WoW.CastSpell("Victory Rush"); return; } } //Artifact / Shockwave Combo. if (WoW.CanCast("Neltharion's Fury") && WoW.TargetHasDebuff("ShockWavestun") && WoW.IsSpellOnCooldown("Neltharion's Fury")) { WoW.CastSpell("Neltharion's Fury"); return; } } if (combatRoutine.Type == RotationType.AOE) { // Do AOE Stuff here } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasBuff("Moonkin") && !WoW.IsMoving()) { if (WoW.IsSpellInRange("Moonfire") && WoW.CanCast("Moonfire") && !WoW.HasDebuff("Moonfire")) { WoW.CastSpellByName("Moonfire"); return; } if (WoW.IsSpellInRange("Sunfire") && WoW.CanCast("Sunfire") && !WoW.HasDebuff("Sunfire")) { WoW.CastSpellByName("Sunfire"); return; } if (WoW.IsSpellInRange("LStrike") && WoW.CanCast("LStrike") && WoW.GetBuffStacks("LunarEmp") == 3 && WoW.Astral <= 80) { WoW.CastSpellByName("LStrike"); return; } if ((WoW.IsSpellInRange("SolarW") && WoW.CanCast("SolarW") && WoW.HasBuff("SolarEmp") && WoW.Astral <= 80) || (WoW.IsSpellInRange("SolarW") && WoW.Astral <= 40 && WoW.GetSpellCharges("Moon") < 1 && WoW.GetSpellCharges("HalfMoon") < 1 && WoW.GetSpellCharges("FullMoon") < 1 && WoW.GetBuffStacks("LunarEmp") <= 2)) { WoW.CastSpellByName("SolarW"); return; } if (WoW.IsSpellInRange("StarSurge") && WoW.CanCast("StarSurge") && WoW.Astral >= 40 && !(WoW.GetBuffStacks("LunarEmp") == 3) && !(WoW.GetBuffStacks("SolarEmp") == 3)) { WoW.CastSpellByName("StarSurge"); return; } if (WoW.IsSpellInRange("Moon") && WoW.CanCast("Moon") && WoW.Astral <= 60 && WoW.HasDebuff("Moonfire") && WoW.HasDebuff("Sunfire")) { WoW.CastSpellByName("Moon"); return; } } if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasBuff("Moonkin") && WoW.IsMoving()) { if (WoW.IsSpellInRange("Moonfire") && WoW.CanCast("Moonfire") && WoW.Astral <= 40) { WoW.CastSpellByName("Moonfire"); return; } if (WoW.IsSpellInRange("StarSurge") && WoW.CanCast("StarSurge") && WoW.Astral >= 40) { WoW.CastSpellByName("StarSurge"); return; } if (WoW.IsSpellInRange("Sunfire") && WoW.CanCast("Sunfire") && !WoW.HasDebuff("Sunfire")) { WoW.CastSpellByName("Sunfire"); return; } } } //12 e 18 if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasBuff("Moonkin") && !WoW.IsMoving()) { if (WoW.CanCast("Moonfire") && !WoW.HasDebuff("Moonfire")) { WoW.CastSpellByName("Moonfire"); return; } if (WoW.CanCast("Sunfire") && !WoW.HasDebuff("Sunfire")) { WoW.CastSpellByName("Sunfire"); return; } if (WoW.CanCast("SolarW") && WoW.GetBuffStacks("SolarEmp") == 3 && WoW.Astral <= 80) { WoW.CastSpellByName("SolarW"); return; } if ((WoW.CanCast("LStrike") && WoW.HasBuff("LunarEmp") && WoW.Astral <= 80) || ( WoW.Astral <= 40 && WoW.GetSpellCharges("Moon") < 1 && WoW.GetSpellCharges("HalfMoon") < 1 && WoW.GetSpellCharges("FullMoon") < 1 && WoW.GetBuffStacks("SolarEmp") <= 2)) { WoW.CastSpellByName("LStrike"); return; } if (WoW.CanCast("StarSurge") && WoW.Astral >= 40 && !(WoW.GetBuffStacks("LunarEmp") == 3) && !(WoW.GetBuffStacks("SolarEmp") == 3)) { WoW.CastSpellByName("StarSurge"); return; } if (WoW.CanCast("Moon") && WoW.Astral <= 60 && WoW.HasDebuff("Sunfire") && WoW.HasDebuff("Moonfire")) { WoW.CastSpellByName("Moon"); return; } } if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasBuff("Moonkin") && WoW.IsMoving()) { if (WoW.IsSpellInRange("Moonfire") && WoW.CanCast("Moonfire") && WoW.Astral <= 40) { WoW.CastSpellByName("Moonfire"); return; } if (WoW.IsSpellInRange("StarSurge") && WoW.CanCast("StarSurge") && WoW.Astral >= 40) { WoW.CastSpellByName("StarSurge"); return; } if (WoW.IsSpellInRange("Sunfire") && WoW.CanCast("Sunfire") && !WoW.HasDebuff("Sunfire")) { WoW.CastSpellByName("Sunfire"); return; } } } }
public override void Pulse() { //Combat Time if (CombatTime.IsRunning && !WoW.IsInCombat) { CombatTime.Reset(); } if (!CombatTime.IsRunning && WoW.IsInCombat) { CombatTime.Start(); } //Dreadstalkers Time Remaining (12000 ms) (EXPERIMENTAL) if (DreadstalkersTime.IsRunning && WoW.DreadstalkersCount == 0) { DreadstalkersTime.Reset(); } if (!DreadstalkersTime.IsRunning && WoW.DreadstalkersCount >= 1) { DreadstalkersTime.Start(); } //Imp Time Remaining (12000 ms) (EXPERIMENTAL) if (ImpTime.IsRunning && WoW.WildImpsCount == 0) { ImpTime.Reset(); } if (!ImpTime.IsRunning && WoW.WildImpsCount >= 1) { ImpTime.Start(); } var DreadstalkersRemainingDuration = Convert.ToSingle((12000f - DreadstalkersTime.ElapsedMilliseconds) / 1000f); var ImpsRemainingDuration = Convert.ToSingle((12000f - ImpTime.ElapsedMilliseconds) / 1000f + OneFiveCast); // Single Target Rotation if (combatRoutine.Type == RotationType.SingleTarget) { // Normal Rotation if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting) { Log.Write("Imp Time: " + ImpsRemainingDuration, Color.DarkViolet); Log.Write("Dread Time: " + DreadstalkersRemainingDuration, Color.DarkViolet); //Implosion (if talent) if (WoW.CanCast("Implosion") && Implosion && WoW.IsSpellInRange("Doom")) { if (ImpsRemainingDuration <= SBExecuteTime && WoW.PlayerHasBuff("DemonicSynergy")) { WoW.CastSpell("Implosion"); return; } if (WoW.LastSpell == "HandOfGuldan" && WoW.WildImpsCount == 1 && WoW.PlayerHasBuff("DemonicSynergy")) { WoW.CastSpell("Implosion"); return; } } //Shadowflame (if talent) if (WoW.CanCast("Shadowflame") && Shadowflame && WoW.IsSpellInRange("Doom") && WoW.TargetHasDebuff("Shadowflame") && WoW.TargetDebuffTimeRemaining("Shadowflame") < TwoSecondCast + 2) { WoW.CastSpell("Shadowflame"); return; } //Service Pet (if talent) if (WoW.CanCast("GrimoireFelguard") && GrimoireOfService && WoW.IsSpellInRange("Doom") && WoW.CurrentSoulShards >= 1 && boss) { WoW.CastSpell("GrimoireFelguard"); empowered = false; return; } // Doomguard if (WoW.CanCast("Doomguard") && WoW.CurrentSoulShards >= 1 && boss && WoW.IsSpellInRange("Doom")) { WoW.CastSpell("Doomguard"); empowered = false; return; } //Felstorm if (WoW.CanCast("Felstorm") && WoW.HasPet && WoW.PetHasBuff("DemonicEmpowerment")) { WoW.CastSpell("Felstorm"); return; } //Call Dreadstalkers (if NOT talent Summon Darkglare) if (WoW.CanCast("CallDreadstalkers") && !SummonDarkglare && (WoW.CurrentSoulShards >= 2 || WoW.PlayerHasBuff("DemonicCalling")) && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("CallDreadstalkers"); empowered = false; DreadstalkersTime.Restart(); return; } //Hand Of Guldan (if NOT talent Summon Darkglare) if (WoW.CanCast("HandOfGuldan") && !SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 4 && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("HandOfGuldan"); empowered = false; threeimps = false; ImpTime.Restart(); return; } //Summon Darkglare (if talent) if (WoW.CanCast("SummonDarkglare") && SummonDarkglare && WoW.CurrentSoulShards >= 1 && WoW.TargetHasDebuff("Doom") && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { if (WoW.LastSpell == "HandOfGuldan" || WoW.LastSpell == "CallDreadstalkers") { WoW.CastSpell("SummonDarkglare"); Log.Write("1", Color.Red); empowered = false; return; } if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") > 5 && WoW.CurrentSoulShards < 3) { WoW.CastSpell("SummonDarkglare"); Log.Write("2", Color.Red); empowered = false; return; } if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") <= gcd && WoW.CurrentSoulShards >= 3) { WoW.CastSpell("SummonDarkglare"); Log.Write("3", Color.Red); empowered = false; return; } if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") <= gcd && WoW.CurrentSoulShards >= 1 && WoW.PlayerHasBuff("DemonicCalling")) { WoW.CastSpell("SummonDarkglare"); Log.Write("4", Color.Red); empowered = false; return; } } //Call Dreadstalkers (if talent Summon Darkglare) if (WoW.CanCast("CallDreadstalkers") && SummonDarkglare && (WoW.CurrentSoulShards >= 2 || WoW.PlayerHasBuff("DemonicCalling")) && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { if (WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= TwoSecondCast && WoW.CurrentSoulShards >= 3) { WoW.CastSpell("CallDreadstalkers"); empowered = false; DreadstalkersTime.Restart(); return; } if (WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= TwoSecondCast && WoW.CurrentSoulShards >= 1 && WoW.PlayerHasBuff("DemonicCalling")) { WoW.CastSpell("CallDreadstalkers"); empowered = false; DreadstalkersTime.Restart(); return; } } //Hand Of Guldan if (WoW.CanCast("HandOfGuldan") && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 3 && WoW.LastSpell == "CallDreadstalkers" && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("HandOfGuldan"); empowered = false; threeimps = true; ImpTime.Restart(); return; } //Hand Of Guldan (if talent Summon Darkglare) if (WoW.CanCast("HandOfGuldan") && SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 5 && WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= OneFiveCast && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("HandOfGuldan"); threeimps = false; empowered = false; ImpTime.Restart(); return; } //Hand Of Guldan (if talent Summon Darkglare) if (WoW.CanCast("HandOfGuldan") && SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 4 && WoW.SpellCooldownTimeRemaining("SummonDarkglare") > 2 && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("HandOfGuldan"); threeimps = false; empowered = false; ImpTime.Restart(); return; } //Demonic Empowerment (if last spell was Hand Of Guldan) if (WoW.CanCast("DemonicEmpowerment") && WoW.LastSpell == "HandOfGuldan" && WoW.LastSpell != "DemonicEmpowerment" && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("DemonicEmpowerment"); empowered = true; return; } //Demonic Empowerment if (WoW.CanCast("DemonicEmpowerment") && (!empowered || !WoW.PetHasBuff("DemonicEmpowerment")) && WoW.LastSpell != "DemonicEmpowerment" && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("DemonicEmpowerment"); empowered = true; return; } /* * //Doom (if NOT talent Hand of Doom) * if(WoW.CanCast("Doom") && (!WoW.TargetHasDebuff("Doom") || WoW.TargetDebuffTimeRemaining("Doom") < 5) && WoW.IsSpellInRange("Doom")) * { * WoW.CastSpell("Doom"); * return; * } * * //Soul Harvest * if(WoW.CanCast("SoulHarvest") && WoW.IsSpellInRange("Doom")) * { * WoW.CastSpell("SoulHarvest"); * return; * } */ //Shadowflame (if talent) if (WoW.CanCast("Shadowflame") && Shadowflame && WoW.IsSpellInRange("Doom") && WoW.PlayerSpellCharges("Shadowflame") == 2) { WoW.CastSpell("Shadowflame"); return; } //Thal'kiel's Consumption if (WoW.CanCast("TK") && WoW.DreadstalkersCount >= 1 && DreadstalkersRemainingDuration > TwoSecondCast && ((WoW.WildImpsCount >= 1 && !threeimps) || WoW.WildImpsCount >= 2) && ImpsRemainingDuration > TwoSecondCast && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("TK"); return; } //Life Tap if (WoW.CanCast("LifeTap") && WoW.Mana <= 30) { WoW.CastSpell("LifeTap"); return; } //Demonwrath (if moving) if (WoW.CanCast("Demonwrath") && WoW.IsMoving && !WoW.PlayerHasBuff("Norgannon")) { WoW.CastSpell("Demonwrath"); return; } //Demonbolt (if talent) if (WoW.CanCast("Demonbolt") && Demonbolt && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("Demonbolt"); return; } //Shadowbolt (if NOT Demonbolt talent) if (WoW.CanCast("Shadowbolt") && !Demonbolt && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("Demonbolt"); return; } //Life Tap if (WoW.CanCast("LifeTap") && WoW.Mana < 100) { WoW.CastSpell("LifeTap"); return; } } } // AoE Rotation if (combatRoutine.Type == RotationType.AOE) { Log.Write("Imp Time: " + ImpsRemainingDuration, Color.DarkViolet); // AoE Rotation if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting) { //Implosion (if talent) if (WoW.CanCast("Implosion") && Implosion && WoW.IsSpellInRange("Doom")) { if (ImpsRemainingDuration <= SBExecuteTime && WoW.PlayerHasBuff("DemonicSynergy")) { WoW.CastSpell("Implosion"); return; } if (WoW.LastSpell == "HandOfGuldan" && WoW.WildImpsCount == 1 && WoW.PlayerHasBuff("DemonicSynergy")) { WoW.CastSpell("Implosion"); return; } if (WoW.WildImpsCount == 1 && ImpsRemainingDuration <= SBExecuteTime) { WoW.CastSpell("Implosion"); return; } if (WoW.LastSpell == "HandOfGuldan" && WoW.WildImpsCount == 1) { WoW.CastSpell("Implosion"); return; } } //Shadowflame (if talent) if (WoW.CanCast("Shadowflame") && Shadowflame && WoW.IsSpellInRange("Doom") && WoW.TargetHasDebuff("Shadowflame") && WoW.TargetDebuffTimeRemaining("Shadowflame") < TwoSecondCast + 2) { WoW.CastSpell("Shadowflame"); return; } //Felstorm if (WoW.CanCast("Felstorm") && WoW.HasPet && WoW.PetHasBuff("DemonicEmpowerment")) { WoW.CastSpell("Felstorm"); return; } //Call Dreadstalkers (if NOT talent Summon Darkglare or Implosion) if (WoW.CanCast("CallDreadstalkers") && !SummonDarkglare && (WoW.CurrentSoulShards >= 2 || WoW.PlayerHasBuff("DemonicCalling")) && !Implosion && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("CallDreadstalkers"); empowered = false; DreadstalkersTime.Restart(); return; } //Hand Of Guldan (if NOT talent Summon Darkglare) if (WoW.CanCast("HandOfGuldan") && !SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 4 && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("HandOfGuldan"); empowered = false; threeimps = false; ImpTime.Restart(); return; } //Summon Darkglare (if talent) if (WoW.CanCast("SummonDarkglare") && SummonDarkglare && WoW.CurrentSoulShards >= 1 && WoW.TargetHasDebuff("Doom") && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { if (WoW.LastSpell == "HandOfGuldan" || WoW.LastSpell == "CallDreadstalkers") { WoW.CastSpell("SummonDarkglare"); Log.Write("1", Color.Red); empowered = false; return; } if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") > 5 && WoW.CurrentSoulShards < 3) { WoW.CastSpell("SummonDarkglare"); Log.Write("2", Color.Red); empowered = false; return; } if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") <= gcd && WoW.CurrentSoulShards >= 3) { WoW.CastSpell("SummonDarkglare"); Log.Write("3", Color.Red); empowered = false; return; } if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") <= gcd && WoW.CurrentSoulShards >= 1 && WoW.PlayerHasBuff("DemonicCalling")) { WoW.CastSpell("SummonDarkglare"); Log.Write("4", Color.Red); empowered = false; return; } } //Call Dreadstalkers (if talent Summon Darkglare and not Implosion) if (WoW.CanCast("CallDreadstalkers") && SummonDarkglare && (WoW.CurrentSoulShards >= 2 || WoW.PlayerHasBuff("DemonicCalling")) && !Implosion && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { if (WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= TwoSecondCast && WoW.CurrentSoulShards >= 3) { WoW.CastSpell("CallDreadstalkers"); empowered = false; DreadstalkersTime.Restart(); return; } if (WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= TwoSecondCast && WoW.CurrentSoulShards >= 1 && WoW.PlayerHasBuff("DemonicCalling")) { WoW.CastSpell("CallDreadstalkers"); empowered = false; DreadstalkersTime.Restart(); return; } } //Hand Of Guldan if (WoW.CanCast("HandOfGuldan") && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 3 && WoW.LastSpell == "CallDreadstalkers" && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("HandOfGuldan"); empowered = false; threeimps = true; ImpTime.Restart(); return; } //Hand Of Guldan (if talent Summon Darkglare) if (WoW.CanCast("HandOfGuldan") && SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 5 && WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= OneFiveCast && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("HandOfGuldan"); threeimps = false; empowered = false; ImpTime.Restart(); return; } //Hand Of Guldan (if talent Summon Darkglare) if (WoW.CanCast("HandOfGuldan") && SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 4 && WoW.SpellCooldownTimeRemaining("SummonDarkglare") > 2 && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("HandOfGuldan"); threeimps = false; empowered = false; ImpTime.Restart(); return; } //Demonic Empowerment (if last spell was Hand Of Guldan) if (WoW.CanCast("DemonicEmpowerment") && WoW.LastSpell == "HandOfGuldan" && WoW.LastSpell != "DemonicEmpowerment" && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("DemonicEmpowerment"); empowered = true; return; } //Demonic Empowerment if (WoW.CanCast("DemonicEmpowerment") && (!empowered || !WoW.PetHasBuff("DemonicEmpowerment")) && WoW.LastSpell != "DemonicEmpowerment" && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("DemonicEmpowerment"); empowered = true; return; } /* * //Doom (if NOT talent Hand of Doom) * if(WoW.CanCast("Doom") && (!WoW.TargetHasDebuff("Doom") || WoW.TargetDebuffTimeRemaining("Doom") < 5) && WoW.IsSpellInRange("Doom")) * { * WoW.CastSpell("Doom"); * return; * } * * //Soul Harvest * if(WoW.CanCast("SoulHarvest") && WoW.IsSpellInRange("Doom")) * { * WoW.CastSpell("SoulHarvest"); * return; * } */ //Shadowflame (if talent) if (WoW.CanCast("Shadowflame") && Shadowflame && WoW.IsSpellInRange("Doom") && WoW.PlayerSpellCharges("Shadowflame") == 2) { WoW.CastSpell("Shadowflame"); return; } //Thal'kiel's Consumption if (WoW.CanCast("TK") && ((WoW.DreadstalkersCount >= 1 && DreadstalkersRemainingDuration > TwoSecondCast) || Implosion) && ((WoW.WildImpsCount >= 1 && !threeimps) || WoW.WildImpsCount >= 2) && ImpsRemainingDuration > TwoSecondCast && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon"))) { WoW.CastSpell("TK"); return; } //Life Tap if (WoW.CanCast("LifeTap") && WoW.Mana <= 30) { WoW.CastSpell("LifeTap"); return; } //Demonwrath if (WoW.CanCast("Demonwrath") && !WoW.PlayerIsChanneling) { WoW.CastSpell("Demonwrath"); return; } //Life Tap if (WoW.CanCast("LifeTap") && WoW.Mana < 100 && !WoW.PlayerIsChanneling) { WoW.CastSpell("LifeTap"); } } } }
public override void Pulse() { if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LSHIFT) < 0) { return; } // Interrupt if (WoW.TargetIsCastingAndSpellIsInterruptible && WoW.CanCast("Pummel") && WoW.IsSpellInRange("Pummel") && WoW.TargetPercentCast > Random.Next(20, 40)) { WoW.CastSpell("Pummel"); return; } // Defensive CD's if (WoW.CanCast("Enraged Regeneration") && WoW.HealthPercent < 30) { WoW.CastSpell("Enraged Regeneration"); WoW.CastSpell("Bloodthirst", WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst")); return; } if (WoW.CanCast("Commanding Shout") && (WoW.HealthPercent < 15)) { WoW.CastSpell("Commanding Shout"); WoW.CastSpell("Bloodthirst", WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst")); return; } if (WoW.PlayerHasDebuff("Fear")) { if (WoW.CanCast("Berserker Rage")) { WoW.CastSpell("Berserker Rage"); } else if (WoW.CanCast("Will of the Forsaken")) { WoW.CastSpell("Will of the Forsaken"); } } // Targeting if (!WoW.HasTarget || !WoW.TargetIsEnemy) { WoW.TargetNearestEnemy(); } if (combatRoutine.Type != RotationType.SingleTarget || DetectKeyPress.GetKeyState(DetectKeyPress.VK_LCONTROL) < 0) { // Multitarget Rotation BattleCryRotationSequence = 0; if (UseCooldowns) { if (WoW.CanCast("Battle Cry") && WoW.IsSpellInRange("Rampage") && !WoW.IsSpellOnCooldown("Rampage")) { WoW.CastSpell("Battle Cry"); WoW.CastSpell("Avatar", WoW.CanCast("Avatar")); } } if (WoW.CanCast("Odyns Fury") && WoW.IsSpellInRange("Bloodthirst") && WoW.PlayerHasBuff("Battle Cry")) { WoW.CastSpell("Odyns Fury"); return; } if (!WoW.PlayerHasBuff("Meat Cleaver") && WoW.CanCast("Whirlwind") && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Whirlwind"); return; } if (WoW.CanCast("Rampage") && WoW.IsSpellInRange("Rampage") && ((!WoW.PlayerHasBuff("Enrage") && WoW.Rage >= 85) || WoW.Rage >= 100)) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && !WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Bloodthirst"); return; } if (combatRoutine.Type == RotationType.Cleave && WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("Whirlwind") && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Whirlwind"); return; } } else { // Singletarget Rotation if (UseCooldowns) { if (BattleCryRotationSequence == 0) { if (WoW.CanCast("Battle Cry") && WoW.IsSpellInRange("Rampage") && !WoW.IsSpellOnCooldown("Rampage")) { if (WoW.SpellCooldownTimeRemaining("Raging Blow") > 150) { //wait for raging blow to come up before using cooldowns WoW.CastSpell("Furious Slash", WoW.CanCast("Furious Slash") && WoW.IsSpellInRange("Furious Slash")); return; } WoW.CastSpell("Battle Cry"); WoW.CastSpell("Avatar", WoW.CanCast("Avatar")); WoW.CastSpell("Rampage"); BattleCryRotationSequence++; return; } } else if (BattleCryRotationSequence == 1) { if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow")) { WoW.CastSpell("Raging Blow"); BattleCryRotationSequence++; } return; } else if (BattleCryRotationSequence == 2) { if (WoW.CanCast("Odyns Fury")) { WoW.CastSpell("Odyns Fury"); BattleCryRotationSequence++; } return; } else if (BattleCryRotationSequence == 3) { if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Bloodthirst"); BattleCryRotationSequence++; } return; } else if (BattleCryRotationSequence == 4) { if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow")) { WoW.CastSpell("Raging Blow"); BattleCryRotationSequence = 0; } return; } if (WoW.CanCast("Avatar") && (WoW.SpellCooldownTimeRemaining("Battle Cry") < 1200 || WoW.SpellCooldownTimeRemaining("Battle Cry") > 2200)) { WoW.CastSpell("Avatar"); return; } } else { BattleCryRotationSequence = 0; } if (WoW.CanCast("Rampage") && WoW.IsSpellInRange("Rampage") && ((!WoW.PlayerHasBuff("Enrage") && WoW.Rage >= 85) || WoW.Rage >= 100)) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && !WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Odyns Fury") && WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Battle Cry")) { WoW.CastSpell("Odyns Fury"); return; } if (WoW.CanCast("Execute") && WoW.IsSpellInRange("Execute") && WoW.PlayerHasBuff("Enrage") && WoW.TargetHealthPercent <= 20) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("Whirlwind") && WoW.PlayerHasBuff("Wrecking Ball")) { WoW.CastSpell("Whirlwind"); return; } WoW.CastSpell("Furious Slash", WoW.CanCast("Furious Slash") && WoW.IsSpellInRange("Furious Slash")); } }
/* public static List<DateTime> imps = new List<DateTime>(); * * public static bool ImpCounting() * { * if (!WoW.IsInCombat && imps.Any()) * { * imps.Clear(); // to clear list when out of combat * return true; * } * * if (WoW.WasLastCasted("HoG")) * { * imps.Add(DateTime.UtcNow); // to add new entry * return true; * } * return true; * } * * public static int CountImpPacks * { * get * { * if (imps.Any()) * { * return imps.Count(i => i.AddSeconds(10) > DateTime.UtcNow); * } * return 0; * } * } */ /* imps.Count(i => i.AddSeconds(10) > DateTime.UtcNow); */ public override void Pulse() { /* Log.Write("Starting.....", Color.Red); */ /* Place to check target's (boss) buffs/debuffs in order to stop casting */ /* if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.TargetHasBuff("Focusing")) return; */ if (WoW.PlayerHasBuff("Mount")) { return; } if (combatRoutine.Type == RotationType.SingleTarget) { if (CombatWatch.IsRunning && !WoW.IsInCombat) { CombatWatch.Reset(); } if (!CombatWatch.IsRunning && WoW.IsInCombat) { CombatWatch.Start(); } /* if (CombatWatch.IsRunning && CombatWatch.ElapsedMilliseconds > 5000) * { * Log.Write ("CombatWatch > 5 seconds"); * } */ /* if (WoW.IsInCombat && WoW.HealthPercent<30 && WoW.CanCast("Healthstone") && WoW.PlayerSpellCharges("Healthstone") >= 1 && !WoW.IsSpellOnCooldown("Healthstone")) * { * WoW.CastSpellByName("Healthstone"); * return; * } */ PetBuffStatus(); /* Log.Write ("Pets need buff: " + lastpetstatus); */ /* impnumber = WoW.GetWildImpsCount(); * dreadnumber = WoW.GetDreadstalkersCount(); */ /* Log.Write ("Wild imps: " + WoW.GetWildImpsCount); * Log.Write ("Dreadretards: " + WoW.GetDreadstalkersCount); */ if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.CanCast("Doomguard") && WoW.IsSpellInRange("Doomguard") && (WoW.PlayerHasBuff("Bloodlust") || WoW.PlayerHasBuff("TimeWarp")) && WoW.CurrentSoulShards >= 1 && !WoW.IsSpellOnCooldown("Doomguard")) { WoW.CastSpell("Doomguard"); return; } if (WoW.IsMoving) /* What to do if we are MOVING */ { if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Shadowflame") == 1 && WoW.TargetHasDebuff("Shadowflame") && WoW.TargetDebuffTimeRemaining("Shadowflame") < 3 && WoW.CanCast("Shadowflame") && WoW.IsSpellInRange("Shadowflame")) { WoW.CastSpell("Shadowflame"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasPet && WoW.CanCast("Wrathstorm") && CombatWatch.ElapsedMilliseconds > 2000) { WoW.CastSpell("Wrathstorm"); } if (!WoW.IsInCombat && WoW.Mana < 80 && WoW.HealthPercent > 75 && WoW.CanCast("Life Tap")) { WoW.CastSpell("Life Tap"); return; } if (WoW.IsInCombat && WoW.Mana < 30 && WoW.HealthPercent > 65 && WoW.CanCast("Life Tap")) { WoW.CastSpell("Life Tap"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.CanCast("Shadowflame") && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerSpellCharges("Shadowflame") == 2 && WoW.IsSpellInRange("Shadowflame")) { WoW.CastSpell("Shadowflame"); return; } if (WoW.IsInCombat && WoW.CanCast("Demonwrath") && WoW.HasPet && WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Demonwrath"); return; } } if (!WoW.IsMoving) /* What to do if we are NOT MOVING */ { /* double dur = WoW.TargetDebuffTimeRemaining("Shadowflame"); * Log.Write(System.Convert.ToString(dur), Color.Red); */ if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Shadowflame") == 1 && WoW.TargetHasDebuff("Shadowflame") && WoW.TargetDebuffTimeRemaining("Shadowflame") < 3 && WoW.IsSpellInRange("Shadowflame") && WoW.CanCast("Shadowflame")) { WoW.CastSpell("Shadowflame"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasPet && WoW.CanCast("Wrathstorm") && CombatWatch.ElapsedMilliseconds > 2000) { WoW.CastSpell("Wrathstorm"); } if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.IsSpellOnCooldown("Dreadstalkers") && WoW.CurrentSoulShards >= 2 && WoW.IsSpellInRange("Dreadstalkers") && WoW.CanCast("Dreadstalkers")) { WoW.CastSpell("Dreadstalkers"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && WoW.CurrentSoulShards >= 4 && WoW.IsSpellInRange("HoG") && WoW.CanCast("HoG")) { WoW.CastSpell("HoG"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && WoW.CurrentSoulShards >= 3 && WoW.IsSpellInRange("HoG") && WoW.WasLastCasted("Dreadstalkers") && WoW.CanCast("HoG")) { WoW.CastSpell("HoG"); return; } if (WoW.IsInCombat && !WoW.PlayerIsCasting && lastpetstatus && !WoW.WasLastCasted("DemonicEmpowerment") && WoW.CanCast("DemonicEmpowerment")) { WoW.CastSpell("DemonicEmpowerment"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !lastpetstatus && !WoW.IsSpellOnCooldown("TK") && WoW.CanCast("TK") && WoW.WildImpsCount >= 1 && WoW.DreadstalkersCount >= 1) { WoW.CastSpell("TK"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerSpellCharges("Shadowflame") == 2 && WoW.IsSpellInRange("Shadowflame") && WoW.CanCast("Shadowflame")) { WoW.CastSpell("Shadowflame"); return; } if (WoW.IsInCombat && WoW.Mana < 30 && WoW.HealthPercent > 50 && WoW.CanCast("Life Tap")) { WoW.CastSpell("Life Tap"); return; } if (WoW.CanCast("Demonbolt") && WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && WoW.IsInCombat && WoW.IsSpellInRange("Shadowflame")) { WoW.CastSpell("Demonbolt"); return; } /* shadowflame,if=debuff.shadowflame.stack>0&remains<action.shadow_bolt.cast_time+travel_time - DONE * call_dreadstalkers,if=!talent.summon_darkglare.enabled&(spell_targets.implosion<3|!talent.implosion.enabled) - DONE * hand_of_guldan,if=soul_shard>=4&!talent.summon_darkglare.enabled - DONE * hand_of_guldan,if=soul_shard>=3&prev_gcd.call_dreadstalkers - DONE * demonic_empowerment,if=wild_imp_no_de>3|prev_gcd.hand_of_guldan - DONE * demonic_empowerment,if=dreadstalker_no_de>0|darkglare_no_de>0|doomguard_no_de>0|infernal_no_de>0|service_no_de>0 - DONE * felguard:felstorm - DONE * shadowflame,if=charges=2 - DONE * thalkiels_consumption,if=(dreadstalker_remaining_duration>execute_time|talent.implosion.enabled&spell_targets.implosion>=3)&wild_imp_count>3&wild_imp_remaining_duration>execute_time - DONE * life_tap,if=mana.pct<=30 - DONE * demonbolt - DONE * life_tap - NOT NEEDED CAN BE CAST OUT OF COMBAT MANUALLY + WE HAVE IT ON MOVING */ } } if ((combatRoutine.Type == RotationType.AOE) || (combatRoutine.Type == RotationType.SingleTargetCleave)) { if (WoW.IsMoving) /* AOE WHEN MOVING */ { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsInCombat && WoW.WasLastCasted("HoG") && WoW.CanCast("Implosion")) { WoW.CastSpell("Implosion"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Shadowflame") == 1 && WoW.TargetHasDebuff("Shadowflame") && WoW.TargetDebuffTimeRemaining("Shadowflame") < 3 && WoW.CanCast("Shadowflame") && WoW.IsSpellInRange("Shadowflame")) { WoW.CastSpell("Shadowflame"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasPet && WoW.CanCast("Wrathstorm") && CombatWatch.ElapsedMilliseconds > 2000) { WoW.CastSpell("Wrathstorm"); } if (WoW.IsInCombat && WoW.HasTarget && WoW.CanCast("Shadowflame") && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerSpellCharges("Shadowflame") == 2 && WoW.IsSpellInRange("Shadowflame")) { WoW.CastSpell("Shadowflame"); return; } if (!WoW.IsInCombat && WoW.Mana < 80 && WoW.HealthPercent > 75 && WoW.CanCast("Life Tap")) { WoW.CastSpell("Life Tap"); return; } if (WoW.IsInCombat && WoW.Mana < 30 && WoW.HealthPercent > 50 && WoW.CanCast("Life Tap")) { WoW.CastSpell("Life Tap"); return; } if (WoW.IsInCombat && WoW.CanCast("Demonwrath") && WoW.HasTarget && WoW.HasPet && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Demonwrath"); return; } } if (!WoW.IsMoving) /* AOE WHEN NOT MOVING */ { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.IsInCombat && WoW.WasLastCasted("HoG") && WoW.CanCast("Implosion")) { WoW.CastSpell("Implosion"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Shadowflame") == 1 && WoW.TargetHasDebuff("Shadowflame") && WoW.TargetDebuffTimeRemaining("Shadowflame") < 3 && WoW.CanCast("Shadowflame") && WoW.IsSpellInRange("Shadowflame")) { WoW.CastSpell("Shadowflame"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasPet && WoW.CanCast("Wrathstorm") && CombatWatch.ElapsedMilliseconds > 2000) { WoW.CastSpell("Wrathstorm"); } if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && WoW.CurrentSoulShards >= 3 && WoW.IsSpellInRange("HoG") && WoW.CanCast("HoG")) { WoW.CastSpell("HoG"); return; } if (WoW.IsInCombat && WoW.HasTarget && WoW.CanCast("Shadowflame") && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerSpellCharges("Shadowflame") == 2 && WoW.IsSpellInRange("Shadowflame")) { WoW.CastSpell("Shadowflame"); return; } if (!WoW.IsInCombat && WoW.Mana < 80 && WoW.HealthPercent > 75 && WoW.CanCast("Life Tap")) { WoW.CastSpell("Life Tap"); return; } if (WoW.IsInCombat && WoW.Mana < 30 && WoW.HealthPercent > 65 && WoW.CanCast("Life Tap")) { WoW.CastSpell("Life Tap"); return; } if (WoW.IsInCombat && WoW.CanCast("Demonwrath") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasPet && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Demonwrath"); } } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.TargetIsEnemy && WoW.IsInCombat) { if (WoW.PlayerHasBuff("Metamorphosis")) { if (WoW.CanCast("Chaos Blades") && !WoW.IsSpellOnCooldown("Chaos Blades") && UseCooldowns) { WoW.CastSpell("Chaos Blades"); return; } if (WoW.CanCast("FOTI") && !WoW.IsSpellOnCooldown("FOTI") && !WoW.IsMoving && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("FOTI"); return; } if (WoW.CanCast("Annihilation") && WoW.IsSpellInRange("Chaos Strike") && (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70)) { WoW.CastSpell("Annihilation"); return; } if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && (WoW.PlayerHasBuff("Momentum") || WoW.PlayerSpellCharges("Throw Glaive") == 2)) { WoW.CastSpell("Throw Glaive"); return; } if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator { WoW.CastSpell("Demons Bite"); return; } } if (WoW.CanCast("Chaos Blades") && WoW.IsSpellInRange("Chaos Strike") && !WoW.IsSpellOnCooldown("Chaos Blades")) { WoW.CastSpell("Chaos Blades"); return; } if (WoW.CanCast("FOTI") && !WoW.IsSpellOnCooldown("FOTI") && !WoW.IsMoving && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("FOTI"); return; } if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") && (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70)) // Fury Spender { WoW.CastSpell("Chaos Strike"); return; } if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && (WoW.PlayerHasBuff("Momentum") || WoW.PlayerSpellCharges("Throw Glaive") == 2)) { WoW.CastSpell("Throw Glaive"); return; } if (WoW.CanCast("Blur") && WoW.IsInCombat && !WoW.IsSpellOnCooldown("Blur") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Blur Usage Percent")) { WoW.CastSpell("Blur"); return; } if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator { WoW.CastSpell("Demons Bite"); return; } } } if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.SingleTargetCleave) { // Do AOE Stuff here if (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.TargetIsEnemy && WoW.IsInCombat) { if (WoW.PlayerHasBuff("Metamorphosis")) { if (WoW.CanCast("Chaos Blades") && WoW.IsSpellInRange("Chaos Strike") && !WoW.IsSpellOnCooldown("Chaos Blades")) { WoW.CastSpell("Chaos Blades"); return; } if (WoW.CanCast("FOTI") && !WoW.IsSpellOnCooldown("FOTI") && !WoW.IsMoving && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("FOTI"); return; } if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("Eye Beam"); return; } if (WoW.CanCast("Death Sweep") && WoW.Fury >= 35 && WoW.IsSpellOnCooldown("Eye Beam") && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("Death Sweep"); return; } if (WoW.CanCast("Annihilation") && WoW.IsSpellInRange("Chaos Strike") && WoW.IsSpellOnCooldown("Eye Beam") && (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70)) { WoW.CastSpell("Annihilation"); return; } if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && (WoW.PlayerHasBuff("Momentum") || WoW.PlayerSpellCharges("Throw Glaive") == 2)) { WoW.CastSpell("Throw Glaive"); return; } if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator { WoW.CastSpell("Demons Bite"); return; } } if (WoW.CanCast("Chaos Blades") && !WoW.IsSpellOnCooldown("Chaos Blades") && UseCooldowns && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("Chaos Blades"); return; } if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike") && !WoW.IsSpellOnCooldown("FOTI") && !WoW.IsMoving && WoW.PlayerHasBuff("Momentum")) { WoW.CastSpell("FOTI"); return; } if (WoW.CanCast("Eye Beam") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 50 && WoW.PlayerHasBuff("Momentum")) { WoW.CastSpell("Eye Beam"); return; } if (WoW.CanCast("Blade Dance") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 35 && WoW.IsSpellOnCooldown("Eye Beam") && WoW.PlayerHasBuff("Momentum")) { WoW.CastSpell("Blade Dance"); return; } if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") && WoW.IsSpellOnCooldown("Eye Beam") && (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70)) { WoW.CastSpell("Chaos Strike"); return; } if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && (WoW.PlayerHasBuff("Momentum") || WoW.PlayerSpellCharges("Throw Glaive") == 2)) { WoW.CastSpell("Throw Glaive"); return; } if (WoW.CanCast("Blur") && WoW.IsInCombat && !WoW.IsSpellOnCooldown("Blur") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Blur Usage Percent")) { WoW.CastSpell("Blur"); return; } if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator { WoW.CastSpell("Demons Bite"); } } } }
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() // Updated for Legion (tested and working for single target) { if (WoW.IsInCombat && Control.IsKeyLocked(Keys.Scroll) && !WoW.TargetIsPlayer && !WoW.IsMounted) { SelectRotation(4, 9999, 1); } //Healthstone - Potion if ((WoW.CanCast("Healthstone") || WoW.CanCast("Potion")) && (WoW.ItemCount("Healthstone") >= 1 || WoW.ItemCount("Potion") >= 1) && (!WoW.ItemOnCooldown("Healthstone") || !WoW.ItemOnCooldown("Potion")) && WoW.HealthPercent <= 30 && !WoW.IsMounted) { WoW.CastSpell("Healthstone"); WoW.CastSpell("Potion"); return; } //Shield of Vengeance if (WoW.CanCast("Shield of Vengeance") && WoW.HealthPercent <= 40 && !WoW.IsMounted) { WoW.CastSpell("Shield of Vengeance"); return; } //Lay on Hands if (WoW.CanCast("Lay on Hands") && WoW.HealthPercent <= 20 && !WoW.IsMounted) { WoW.CastSpell("Lay on Hands"); return; } //Divine Steed if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_4) < 0 && WoW.CanCast("Divine Steed") && !WoW.PlayerHasBuff("Divine Steed")) { WoW.CastSpell("Divine Steed"); return; } if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && WoW.HealthPercent != 0) { //Crusade if (WoW.CanCast("Crusade") && WoW.Talent(7) == 2 && WoW.CurrentHolyPower >= 3 && WoW.IsSpellInRange("Templar Verdict") && (WoW.PlayerHasBuff("Bloodlust") || WoW.PlayerHasBuff("Time Warp") || WoW.PlayerHasBuff("Netherwinds") || WoW.PlayerHasBuff("Drums of War"))) { WoW.CastSpell("Crusade"); return; } //Avenging Wrath if (WoW.CanCast("Avenging Wrath") && WoW.CurrentHolyPower >= 3 && WoW.IsSpellInRange("Templar Verdict") && (WoW.PlayerHasBuff("Bloodlust") || WoW.PlayerHasBuff("Time Warp") || WoW.PlayerHasBuff("Netherwinds") || WoW.PlayerHasBuff("Drums of War"))) { WoW.CastSpell("Avenging Wrath"); return; } //Hammer of Justice if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_ADD) < 0 && WoW.CanCast("Hammer of Justice") ) { WoW.CastSpell("Hammer of Justice"); return; } //Holy Wrath if (WoW.CanCast("Holy Wrath") && WoW.Talent(7) == 3 && WoW.HealthPercent <= 40 && WoW.IsSpellInRange("Templar Verdict")) { WoW.CastSpell("Holy Wrath"); return; } //Single Target Rotation //Execution Sentence if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Execution Sentence") && WoW.TargetHasDebuff("Judgement") && WoW.TargetDebuffTimeRemaining("Judgement") >= 650 && WoW.Talent(1) == 2) { WoW.CastSpell("Execution Sentence"); return; } //Justicar's Vengeance if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Justicars Vengeance") && WoW.PlayerHasBuff("Divine Purpose") && WoW.IsSpellInRange("Templar Verdict") && WoW.Talent(5) == 1) { WoW.CastSpell("Justicars Vengeance"); return; } //Templar's Verdict if (combatRoutine.Type == RotationType.SingleTarget && (WoW.CurrentHolyPower >= 3 || WoW.PlayerHasBuff("Divine Purpose") || (WoW.CurrentHolyPower >= 2 && WoW.PlayerHasBuff("The Fires of Justice"))) && WoW.CanCast("Templar Verdict") && WoW.IsSpellInRange("Templar Verdict") && WoW.TargetHasDebuff("Judgement") && WoW.TargetDebuffTimeRemaining("Judgement") >= 50) { WoW.CastSpell("Templar Verdict"); return; } //Judgement if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Judgement") && WoW.CurrentHolyPower >= 3) { WoW.CastSpell("Judgement"); return; } //Wake of Ashes if (combatRoutine.Type == RotationType.SingleTarget && WoW.CurrentHolyPower == 0 && WoW.CanCast("Wake of Ashes") && WoW.IsSpellInRange("Templar Verdict")) { WoW.CastSpell("Wake of Ashes"); return; } //Blade of Justice if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Blade of Justice") && WoW.IsSpellInRange("Blade of Justice") && WoW.CurrentHolyPower <= 3 && WoW.Talent(4) != 3) { WoW.CastSpell("Blade of Justice"); return; } //Divine Hammer if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Divine Hammer") && WoW.IsSpellInRange("Templar Verdict") && WoW.CurrentHolyPower <= 3 && WoW.Talent(4) == 3) { WoW.CastSpell("Divine Hammer"); return; } //Crusader Strike if (combatRoutine.Type == RotationType.SingleTarget && WoW.IsSpellInRange("Templar Verdict") && WoW.CurrentHolyPower < 5 && WoW.PlayerSpellCharges("Crusader Strike") >= 1 && WoW.CanCast("Crusader Strike") && WoW.Talent(2) != 2) { WoW.CastSpell("Crusader Strike"); return; } //Zeal if (combatRoutine.Type == RotationType.SingleTarget && WoW.IsSpellInRange("Templar Verdict") && WoW.CurrentHolyPower < 5 && WoW.PlayerSpellCharges("Zeal") >= 1 && WoW.CanCast("Zeal") && WoW.Talent(2) == 2) { WoW.CastSpell("Zeal"); return; } //Consecration if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Consecration") && WoW.IsSpellInRange("Templar Verdict") && WoW.Talent(1) == 3) { WoW.CastSpell("Consecration"); return; } //AoE Rotation = 3+ Targets //Divine Storm if (combatRoutine.Type == RotationType.AOE && (WoW.CurrentHolyPower >= 3 || WoW.PlayerHasBuff("Divine Purpose") || (WoW.CurrentHolyPower >= 2 && WoW.PlayerHasBuff("The Fires of Justice"))) && WoW.CanCast("Divine Storm") && WoW.IsSpellInRange("Templar Verdict")) { WoW.CastSpell("Divine Storm"); return; } //Judgement if (combatRoutine.Type == RotationType.AOE && WoW.CanCast("Judgement")) { WoW.CastSpell("Judgement"); return; } //Wake of Ashes if (combatRoutine.Type == RotationType.AOE && WoW.CurrentHolyPower == 0 && WoW.CanCast("Wake of Ashes") && WoW.IsSpellInRange("Templar Verdict")) { WoW.CastSpell("Wake of Ashes"); return; } //Consecration if (combatRoutine.Type == RotationType.AOE && WoW.CanCast("Consecration") && WoW.IsSpellInRange("Templar Verdict") && WoW.Talent(1) == 3) { WoW.CastSpell("Consecration"); return; } //Blade of Justice if (combatRoutine.Type == RotationType.AOE && WoW.CanCast("Blade of Justice") && WoW.IsSpellInRange("Blade of Justice") && WoW.CurrentHolyPower <= 3 && WoW.Talent(4) != 3) { WoW.CastSpell("Blade of Justice"); return; } //Divine Hammer if (combatRoutine.Type == RotationType.AOE && WoW.CanCast("Divine Hammer") && WoW.IsSpellInRange("Templar Verdict") && WoW.CurrentHolyPower <= 3 && WoW.Talent(4) == 3) { WoW.CastSpell("Divine Hammer"); return; } //Crusader Strike if (combatRoutine.Type == RotationType.AOE && WoW.IsSpellInRange("Templar Verdict") && WoW.CurrentHolyPower < 5 && WoW.PlayerSpellCharges("Crusader Strike") >= 1 && WoW.CanCast("Crusader Strike") && WoW.Talent(2) != 2) { WoW.CastSpell("Crusader Strike"); return; } //Zeal if (combatRoutine.Type == RotationType.AOE && WoW.IsSpellInRange("Templar Verdict") && WoW.CurrentHolyPower < 5 && WoW.PlayerSpellCharges("Zeal") >= 1 && WoW.CanCast("Zeal") && WoW.Talent(2) == 2) { WoW.CastSpell("Zeal"); return; } if (combatRoutine.Type == RotationType.SingleTargetCleave) //Cleave rotation = 2 targets { // Do Single Target Cleave stuff here if applicable else ignore this one } } }
public override void Pulse() { if (!coolDownStopWatch.IsRunning || coolDownStopWatch.ElapsedMilliseconds > 60000) { coolDownStopWatch.Restart(); } if (DetectKeyPress.GetKeyState(0x6A) < 0) //Use cooldowns manage by *numButton { if (coolDownStopWatch.ElapsedMilliseconds > 1000) { combatRoutine.UseCooldowns = !combatRoutine.UseCooldowns; WoW.Speak("Cooldowns " + (combatRoutine.UseCooldowns ? "On" : "Off")); coolDownStopWatch.Restart(); } } if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerHasBuff("Ghost Wolf") && WoW.IsInCombat) //First things go first but break if we wanna run in Wolf { if (WoW.CanCast("Wind Shear") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.IsSpellInRange("Wind Shear")) //interupt every spell { WoW.CastSpell("Wind Shear"); return; } if (WoW.CanCast("Feral Spirit") && WoW.IsSpellInRange("Stormstrike") && combatRoutine.UseCooldowns && WoW.Maelstrom >= 20) //Wolves in melee range { Log.Write("Using Feral Spirit", Color.Red); WoW.CastSpell("Feral Spirit"); return; } if (WoW.CanCast("Crash Lightning") && WoW.Maelstrom >= 20 && WoW.SpellCooldownTimeRemaining("Feral Spirit") >= 115) //Crash lightning for alpha wolf { WoW.CastSpell("Crash Lightning"); return; } if (WoW.CanCast("Rockbiter") && (!WoW.PlayerHasBuff("Landslide") || WoW.PlayerBuffTimeRemaining("Landslide") <= 1) && WoW.IsSpellInRange("Flametongue")) //REFRESH LANDSLIDE { Log.Write("Reseting Landslide", Color.Red); WoW.CastSpell("Rockbiter"); return; } if (WoW.CanCast("Fury of Air") && !WoW.PlayerHasBuff("Fury of Air") && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 22) //REFRESH Fury of Air { Log.Write("Reseting Fury of Air", Color.Red); WoW.CastSpell("Fury of Air"); return; } if (WoW.CanCast("Flametongue") && WoW.IsSpellInRange("Flametongue") && ((!WoW.PlayerHasBuff("Flametongue") || WoW.PlayerBuffTimeRemaining("Flametongue") <= 1)) || (WoW.SpellCooldownTimeRemaining("Doom Winds") <= 6 && WoW.PlayerBuffTimeRemaining("Flametongue") <= 4)) //REFRESH FLAMETONGUE { Log.Write("Reseting Flametongue buff", Color.Red); WoW.CastSpell("Flametongue"); return; } if (WoW.CanCast("Doom Winds") && combatRoutine.UseCooldowns && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Flametongue")) { WoW.CastSpell("Doom Winds"); return; } if (WoW.CanCast("Lightning Bolt") && WoW.IsSpellInRange("Lightning Bolt") && WoW.Maelstrom >= 46) //Overcharge { WoW.CastSpell("Lightning Bolt"); return; } if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Stormbringer") && WoW.Maelstrom >= 26) { WoW.CastSpell("Stormstrike"); return; } if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Hot Hand")) //Hot Hand { WoW.CastSpell("Lava Lash"); return; } if (WoW.SpellCooldownTimeRemaining("Lightning Bolt") >= 1) // to get not GCD locked on Bolt { if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 80) { WoW.CastSpell("Stormstrike"); return; } if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 120) { WoW.CastSpell("Lava Lash"); //Buffer Lava return; } if (WoW.CanCast("Flametongue") && WoW.PlayerBuffTimeRemaining("Flametongue") <= 5 && WoW.IsSpellInRange("Flametongue")) { WoW.CastSpell("Flametongue"); //REFRESH FLAMETONGUE PANDEMIC return; } if (WoW.CanCast("Rockbiter") && WoW.IsSpellInRange("Flametongue")) { WoW.CastSpell("Rockbiter"); //Nothing to do return; } if (WoW.CanCast("Feral Lunge") && !WoW.IsSpellInRange("Flametongue") && WoW.IsSpellInRange("Feral Lunge")) //out of range of flametongue 10y and in range of feral lunge 8-25y { WoW.CastSpell("Feral Lunge"); return; } } if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 60) //ASTRAL SHIFT - DMG REDUCTION if we are below 60% of HP { WoW.CastSpell("Astral Shift"); return; } } } if (combatRoutine.Type == RotationType.SingleTargetCleave) { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerHasBuff("Ghost Wolf") && WoW.IsInCombat) //First things go first { if (WoW.CanCast("Wind Shear") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.IsSpellInRange("Wind Shear")) //interupt every spell { WoW.CastSpell("Wind Shear"); return; } if (WoW.CanCast("Feral Spirit") && WoW.IsSpellInRange("Stormstrike") && combatRoutine.UseCooldowns && WoW.Maelstrom >= 20) //Wolves in melee range { Log.Write("Using Feral Spirit", Color.Red); WoW.CastSpell("Feral Spirit"); return; } if (WoW.CanCast("Crash Lightning") && WoW.Maelstrom >= 20 && WoW.SpellCooldownTimeRemaining("Feral Spirit") >= 115) //Crash lightning for alpha wolf { WoW.CastSpell("Crash Lightning"); return; } if (WoW.CanCast("Rockbiter") && (!WoW.PlayerHasBuff("Landslide") || WoW.PlayerBuffTimeRemaining("Landslide") <= 1) && WoW.IsSpellInRange("Flametongue")) //REFRESH LANDSLIDE { Log.Write("Reseting Landslide", Color.Red); WoW.CastSpell("Rockbiter"); return; } if (WoW.CanCast("Fury of Air") && !WoW.PlayerHasBuff("Fury of Air") && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 22) //REFRESH Fury of Air { Log.Write("Reseting Fury of Air", Color.Red); WoW.CastSpell("Fury of Air"); return; } if (WoW.CanCast("Flametongue") && WoW.IsSpellInRange("Flametongue") && ((!WoW.PlayerHasBuff("Flametongue") || WoW.PlayerBuffTimeRemaining("Flametongue") <= 1)) || (WoW.SpellCooldownTimeRemaining("Doom Winds") <= 6 && WoW.PlayerBuffTimeRemaining("Flametongue") <= 4)) //REFRESH FLAMETONGUE { Log.Write("Reseting Flametongue buff", Color.Red); WoW.CastSpell("Flametongue"); return; } if (WoW.CanCast("Doom Winds") && combatRoutine.UseCooldowns && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Flametongue")) { WoW.CastSpell("Doom Winds"); return; } if (WoW.CanCast("Lightning Bolt") && WoW.IsSpellInRange("Lightning Bolt") && WoW.Maelstrom >= 46) //Overcharge { WoW.CastSpell("Lightning Bolt"); return; } if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Stormbringer") && WoW.Maelstrom >= 26) { WoW.CastSpell("Stormstrike"); return; } if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Hot Hand")) //Hot Hand { WoW.CastSpell("Lava Lash"); return; } if (WoW.CanCast("Crash Lightning") && WoW.Maelstrom >= 22 && WoW.IsSpellInRange("Stormstrike") && !WoW.PlayerHasBuff("Crash Lightning")) //Crash lightning for cleave to enable storm { Log.Write("Reseting Crashing buff", Color.Blue); WoW.CastSpell("Crash Lightning"); return; } if (WoW.SpellCooldownTimeRemaining("Lightning Bolt") >= 1) // to get not GCD locked on Bolt { if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 80) { WoW.CastSpell("Stormstrike"); return; } if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 120) { WoW.CastSpell("Lava Lash"); //Buffer Lava return; } if (WoW.CanCast("Flametongue") && WoW.PlayerBuffTimeRemaining("Flametongue") <= 5 && WoW.IsSpellInRange("Flametongue")) { WoW.CastSpell("Flametongue"); //REFRESH FLAMETONGUE PANDEMIC return; } if (WoW.CanCast("Rockbiter") && WoW.IsSpellInRange("Flametongue")) { WoW.CastSpell("Rockbiter"); //Nothing to do return; } if (WoW.CanCast("Feral Lunge") && !WoW.IsSpellInRange("Flametongue") && WoW.IsSpellInRange("Feral Lunge")) //out of range of flametongue 10y and in range of feral lunge 8-25y { WoW.CastSpell("Feral Lunge"); return; } } if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 60) //ASTRAL SHIFT - DMG REDUCTION if we are below 60% of HP { WoW.CastSpell("Astral Shift"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerHasBuff("Ghost Wolf") && WoW.IsInCombat) //First things go first { if (WoW.CanCast("Wind Shear") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.IsSpellInRange("Wind Shear")) //interupt every spell { WoW.CastSpell("Wind Shear"); return; } if (WoW.CanCast("Feral Spirit") && WoW.IsSpellInRange("Stormstrike") && combatRoutine.UseCooldowns && WoW.Maelstrom >= 20) //Wolves in melee range { Log.Write("Using Feral Spirit", Color.Red); WoW.CastSpell("Feral Spirit"); return; } if (WoW.CanCast("Crash Lightning") && WoW.Maelstrom >= 20 && WoW.SpellCooldownTimeRemaining("Feral Spirit") >= 115) //Crash lightning for alpha wolf { WoW.CastSpell("Crash Lightning"); return; } if (WoW.CanCast("Rockbiter") && (!WoW.PlayerHasBuff("Landslide") || WoW.PlayerBuffTimeRemaining("Landslide") <= 1) && WoW.IsSpellInRange("Flametongue")) //REFRESH LANDSLIDE { Log.Write("Reseting Landslide", Color.Red); WoW.CastSpell("Rockbiter"); return; } if (WoW.CanCast("Fury of Air") && !WoW.PlayerHasBuff("Fury of Air") && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 22) //REFRESH Fury of Air { Log.Write("Reseting Fury of Air", Color.Red); WoW.CastSpell("Fury of Air"); return; } if (WoW.CanCast("Flametongue") && WoW.IsSpellInRange("Flametongue") && ((!WoW.PlayerHasBuff("Flametongue") || WoW.PlayerBuffTimeRemaining("Flametongue") <= 1)) || (WoW.SpellCooldownTimeRemaining("Doom Winds") <= 6 && WoW.PlayerBuffTimeRemaining("Flametongue") <= 4)) //REFRESH FLAMETONGUE { Log.Write("Reseting Flametongue buff", Color.Red); WoW.CastSpell("Flametongue"); return; } if (WoW.CanCast("Doom Winds") && combatRoutine.UseCooldowns && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Flametongue")) { WoW.CastSpell("Doom Winds"); return; } if (WoW.CanCast("Lightning Bolt") && WoW.IsSpellInRange("Lightning Bolt") && WoW.Maelstrom >= 46) //Overcharge { WoW.CastSpell("Lightning Bolt"); return; } if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Stormbringer") && WoW.Maelstrom >= 26) { WoW.CastSpell("Stormstrike"); return; } if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Hot Hand")) //Hot Hand { WoW.CastSpell("Lava Lash"); return; } if (WoW.CanCast("Crash Lightning") && WoW.Maelstrom >= 22 && WoW.IsSpellInRange("Stormstrike")) //Crash lightning priority for aoe { WoW.CastSpell("Crash Lightning"); return; } if (WoW.SpellCooldownTimeRemaining("Lightning Bolt") >= 1) // to get not GCD locked on Bolt { if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 80) { WoW.CastSpell("Stormstrike"); return; } if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 120) { WoW.CastSpell("Lava Lash"); //Buffer Lava return; } if (WoW.CanCast("Flametongue") && WoW.PlayerBuffTimeRemaining("Flametongue") <= 5 && WoW.IsSpellInRange("Flametongue")) { WoW.CastSpell("Flametongue"); //REFRESH FLAMETONGUE PANDEMIC return; } if (WoW.CanCast("Rockbiter") && WoW.IsSpellInRange("Flametongue")) { WoW.CastSpell("Rockbiter"); //Nothing to do return; } if (WoW.CanCast("Feral Lunge") && !WoW.IsSpellInRange("Flametongue") && WoW.IsSpellInRange("Feral Lunge")) //out of range of flametongue 10y and in range of feral lunge 8-25y { WoW.CastSpell("Feral Lunge"); return; } } if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 60) //ASTRAL SHIFT - DMG REDUCTION if we are below 60% of HP { WoW.CastSpell("Astral Shift"); 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; } } } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat) { if (WoW.PlayerHasBuff("Stealth") || WoW.PlayerHasBuff("Subterfuge") || WoW.PlayerHasBuff("Shadow Dance")) { if (WoW.CanCast("Symbols of Death") && WoW.Energy >= 35 && (!WoW.PlayerHasBuff("Symbols of Death") || WoW.PlayerBuffTimeRemaining("Symbols of Death") <= 10)) { WoW.CastSpell("Symbols of Death"); return; } if (WoW.CanCast("Nightblade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 && (!WoW.TargetHasDebuff("Nightblade") || WoW.TargetDebuffTimeRemaining("Nightblade") <= 4) && WoW.IsSpellInRange("Nightblade")) { WoW.CastSpell("Nightblade"); return; } if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 35 && WoW.TargetHasDebuff("Nightblade") && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Eviscerate"); return; } if (WoW.CanCast("Shadowstrike") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 40 && WoW.IsSpellInRange("Shadowstrike")) { WoW.CastSpell("Shadowstrike"); return; } } if (WoW.CanCast("Shadow Blades") && WoW.HasTarget && WoW.PlayerHasBuff("Symbols of Death") && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Shadow Blades"); return; } if (WoW.CanCast("Shadow Dance") && (!WoW.PlayerHasBuff("Stealth") || !WoW.PlayerHasBuff("Shadow Dance") || !WoW.PlayerHasBuff("Subterfuge")) && WoW.Energy >= 55 && (WoW.PlayerSpellCharges("Shadow Dance") == 3 && WoW.CurrentComboPoints <= 3 || WoW.PlayerSpellCharges("Shadow Dance") == 2 && WoW.CurrentComboPoints <= 1) && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Shadow Dance"); return; } if (WoW.CanCast("Goremaw's Bite") && WoW.CurrentComboPoints <= 2 && WoW.Energy <= 50 && WoW.IsSpellInRange("Goremaw's Bite") && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Goremaw's Bite"); return; } if (WoW.CanCast("Nightblade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 && (!WoW.TargetHasDebuff("Nightblade") || WoW.TargetDebuffTimeRemaining("Nightblade") <= 4) && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Nightblade"); return; } if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 35 && WoW.TargetHasDebuff("Nightblade") && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Eviscerate"); return; } if (WoW.CanCast("Backstab") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 55 && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Backstab"); return; } } } if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.Cleave) // Do AoE Target Stuff here { if ((WoW.HasTarget || UseCooldowns) && WoW.TargetIsEnemy && WoW.IsInCombat) { if (WoW.PlayerHasBuff("Stealth") || WoW.PlayerHasBuff("Subterfuge") || WoW.PlayerHasBuff("Shadow Dance")) { if (WoW.CanCast("Symbols of Death") && WoW.Energy >= 35 && (!WoW.PlayerHasBuff("Symbols of Death") || WoW.PlayerBuffTimeRemaining("Symbols of Death") <= 10)) { WoW.CastSpell("Symbols of Death"); return; } if (WoW.CanCast("Nightblade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 && (!WoW.TargetHasDebuff("Nightblade") || WoW.TargetDebuffTimeRemaining("Nightblade") <= 4) && WoW.IsSpellInRange("Nightblade")) { WoW.CastSpell("Nightblade"); return; } if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 35 && WoW.TargetHasDebuff("Nightblade") && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Eviscerate"); return; } if (WoW.CanCast("Shadowstrike") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 40 && WoW.IsSpellInRange("Shadowstrike")) { WoW.CastSpell("Shadowstrike"); return; } if (WoW.CanCast("Shuriken Storm") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 35 && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Shuriken Storm"); return; } } if (WoW.CanCast("Shadow Blades") && WoW.HasTarget && WoW.PlayerHasBuff("Symbols of Death") && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Shadow Blades"); return; } if (WoW.CanCast("Shadow Dance") && (!WoW.PlayerHasBuff("Stealth") || !WoW.PlayerHasBuff("Shadow Dance") || !WoW.PlayerHasBuff("Subterfuge")) && (WoW.PlayerSpellCharges("Shadow Dance") == 3 && WoW.CurrentComboPoints <= 3 || WoW.PlayerSpellCharges("Shadow Dance") == 2 && WoW.CurrentComboPoints <= 1) && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Shadow Dance"); return; } if (WoW.CanCast("Goremaw's Bite") && WoW.CurrentComboPoints <= 2 && WoW.Energy <= 50 && WoW.IsSpellInRange("Goremaw's Bite") && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Goremaw's Bite"); return; } if (WoW.CanCast("Nightblade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 && (!WoW.TargetHasDebuff("Nightblade") || WoW.TargetDebuffTimeRemaining("Nightblade") <= 4) && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Nightblade"); return; } if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 35 && WoW.TargetHasDebuff("Nightblade") && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Eviscerate"); return; } if (WoW.CanCast("Shuriken Storm") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 35 && WoW.IsSpellInRange("Eviscerate")) { WoW.CastSpell("Shuriken Storm"); } } } }
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) { if (WoW.CanCast("A Murder of Crows") && WoW.IsSpellInRange("A Murder of Crows") && WoW.Focus >= 30) { WoW.CastSpell("A Murder of Crows"); return; } if (WoW.CanCast("Titan's Thunder")) { WoW.CastSpell("Titan's Thunder"); return; } if (WoW.CanCast("Dire Beast") && WoW.IsSpellInRange("Dire Beast")) { WoW.CastSpell("Dire Beast"); return; } if (WoW.CanCast("Dire Frenzy") && WoW.IsSpellInRange("Dire Frenzy")) { WoW.CastSpell("Dire Frenzy"); return; } if (WoW.CanCast("Kill Command") && WoW.Focus >= 30 && WoW.IsSpellInRange("Kill Command")) { WoW.CastSpell("Kill Command"); return; } if (WoW.CanCast("Cobra Shot") && (WoW.Focus >= 90) && WoW.IsSpellInRange("Cobra Shot")) { WoW.CastSpell("Cobra Shot"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy) { if (WoW.CanCast("A Murder of Crows") && WoW.IsSpellInRange("A Murder of Crows") && WoW.Focus >= 30) { WoW.CastSpell("A Murder of Crows"); return; } if (WoW.CanCast("Titan's Thunder")) { WoW.CastSpell("Titan's Thunder"); return; } if (WoW.CanCast("Dire Beast") && WoW.IsSpellInRange("Dire Beast")) { WoW.CastSpell("Dire Beast"); return; } if (WoW.CanCast("Dire Frenzy") && WoW.IsSpellInRange("Dire Frenzy")) { WoW.CastSpell("Dire Frenzy"); return; } if (WoW.CanCast("Kill Command") && WoW.Focus >= 30 && WoW.IsSpellInRange("Kill Command")) { WoW.CastSpell("Kill Command"); return; } if (WoW.CanCast("Multi-Shot") && WoW.IsSpellInRange("Multi-Shot") && WoW.Focus >= 40) // We need a PetBuff command! { WoW.CastSpell("Multi-Shot"); return; } if (WoW.CanCast("Cobra Shot") && (WoW.Focus >= 90) && WoW.IsSpellInRange("Cobra Shot")) { WoW.CastSpell("Cobra Shot"); return; } } } 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) { if (WoW.HasTarget && WoW.TargetIsEnemy) { if (!doneOpener) { if (WoW.CanCast("Judgement") && WoW.Level >= 3) { WoW.CastSpell("Judgement"); doneOpener = true; } } if (WoW.CanCast("Judgement") && WoW.Level >= 3 && WoW.IsSpellInRange("Judgement")) { WoW.CastSpell("Judgement"); return; } if (WoW.CanCast("Rebuke") && WoW.Level >= 35 && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.IsSpellInRange("Rebuke") && WoW.TargetPercentCast > Random.Next(30, 85)) { WoW.CastSpell("Rebuke"); return; } if (WoW.CanCast("Lay on Hands") && WoW.PlayerHealthPercent < 25) { WoW.CastSpell("Lay on Hands"); return; } if (WoW.CanCast("Divine Shield") && WoW.PlayerHealthPercent < 15) { WoW.CastSpell("Divine Shield"); return; } if (WoW.CanCast("Flash of Light") && WoW.PlayerHealthPercent < 60 && WoW.Mana > 20) { WoW.CastSpell("Flash of Light"); return; } } if (WoW.CanCast("Judgement") && WoW.Level >= 3 && WoW.IsSpellInRange("Judgement")) { WoW.CastSpell("Judgement"); return; } if (WoW.CanCast("Wake of Ashes")) { WoW.CastSpell("Wake of Ashes"); return; } if (WoW.CanCast("Templar's Verdict") && WoW.Level >= 10 && WoW.TargetHasDebuff("Judgement") && WoW.UnitPower >= 3) { WoW.CastSpell("Templar's Verdict"); return; } if (WoW.CanCast("Blade of Justice") && WoW.Level >= 20) { WoW.CastSpell("Blade of Justice"); return; } if (WoW.CanCast("Crusader Strike") && WoW.Level <= 30) { WoW.CastSpell("Crusader Strike"); return; } if (WoW.CanCast("Zeal") && WoW.Level >= 30) { WoW.CastSpell("Zeal"); return; } if (WoW.Level >= 100 && WoW.Talent(7) == 2 && WoW.CanCast("Crusade") && UseCooldowns) { WoW.CastSpell("Crusade"); } if (WoW.Level >= 80 && WoW.Level < 100 && WoW.CanCast("Avenging Wrath") && UseCooldowns) { WoW.CastSpell("Avenging Wrath"); } return; if (WoW.CanCast("Crusade") && WoW.Level >= 100 && WoW.Talent(7) == 2) { WoW.CastSpell("Crusade"); return; } if (WoW.CanCast("Justicar's Vengeance") && WoW.Level >= 100 && WoW.CurrentHolyPower >= 5 && UseCooldowns) { WoW.CastSpell("Justicar's Vengeance"); return; } } if (combatRoutine.Type == RotationType.Cleave) { if (WoW.HasTarget && WoW.TargetIsEnemy) { if (!doneOpener) { if (WoW.CanCast("Judgement") && WoW.Level >= 3) { WoW.CastSpell("Judgement"); doneOpener = true; } } if (WoW.CanCast("Judgement") && WoW.Level >= 3 && WoW.IsSpellInRange("Judgement")) { WoW.CastSpell("Judgement"); return; } if (WoW.CanCast("Rebuke") && WoW.Level >= 35 && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.IsSpellInRange("Rebuke") && WoW.TargetPercentCast > Random.Next(30, 85)) { WoW.CastSpell("Rebuke"); return; } if (WoW.CanCast("Lay on Hands") && WoW.PlayerHealthPercent < 25) { WoW.CastSpell("Lay on Hands"); return; } if (WoW.CanCast("Divine Shield") && WoW.PlayerHealthPercent < 15) { WoW.CastSpell("Divine Shield"); return; } if (WoW.CanCast("Flash of Light") && WoW.PlayerHealthPercent < 60 && WoW.Mana > 20) { WoW.CastSpell("Flash of Light"); return; } } if (WoW.CanCast("Judgement") && WoW.Level >= 3 && WoW.IsSpellInRange("Judgement")) { WoW.CastSpell("Judgement"); return; } if (WoW.CanCast("Divine Storm") && WoW.Level >= 10 && WoW.TargetHasDebuff("Judgement") && WoW.UnitPower >= 3) { WoW.CastSpell("Divine Storm"); return; } if (WoW.CanCast("Blade of Justice") && WoW.Level >= 20) { WoW.CastSpell("Blade of Justice"); return; } if (WoW.CanCast("Crusader Strike") && WoW.Level <= 30) { WoW.CastSpell("Crusader Strike"); return; } if (WoW.CanCast("Zeal") && WoW.Level >= 30) { WoW.CastSpell("Zeal"); return; } if (WoW.CanCast("Wake of Ashes")) { WoW.CastSpell("Wake of Ashes"); return; } if (WoW.Level >= 100 && WoW.Talent(7) == 2 && WoW.CanCast("Crusade") && UseCooldowns) { WoW.CastSpell("Crusade"); } if (WoW.Level >= 80 && WoW.Level < 100 && WoW.CanCast("Avenging Wrath") && UseCooldowns) { WoW.CastSpell("Avenging Wrath"); } return; if (WoW.CanCast("Justicar's Vengeance") && WoW.Level >= 100 && WoW.CurrentHolyPower >= 5 && UseCooldowns) { WoW.CastSpell("Justicar's Vengeance"); return; } } }