public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { /* * Endless Rage / War Machine * Double Time * Avatar * Warpaint * Frothing Zerker/Massacre * Inner Rage * Reckless Abandon */ //AOE on Press if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_Z) < 0) { if (WoW.HasTarget && WoW.IsInCombat && WoW.TargetIsEnemy) { if (TFZFMint) { if (WoW.CanCast("Whirlwind") && !WoW.PlayerHasBuff("Meat Cleaver")) { WoW.CastSpell("Whirlwind"); return; } if (WoW.CanCast("Rampage") && WoW.Rage >= 100 && WoW.PlayerHasBuff("Meat Cleaver")) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Bloodthirst") && !WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Meat Cleaver")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Execute") && WoW.IsSpellOverlayed("Execute")) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Raging Blow") && !WoW.CanCast("Bloodthirst") && !WoW.CanCast("Rampage")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("Bloodthirst") && WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Meat Cleaver")) { WoW.CastSpell("Bloodthirst"); return; } } if (!TFZFMint) { if (WoW.CanCast("Whirlwind") && !WoW.PlayerHasBuff("Meat Cleaver")) { WoW.CastSpell("Whirlwind"); return; } if (WoW.CanCast("Rampage") && !WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Bloodthirst") && !WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Meat Cleaver")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Execute") && WoW.IsSpellOverlayed("Execute")) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Raging Blow") && !WoW.CanCast("Bloodthirst") && !WoW.CanCast("Rampage")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("Bloodthirst") && WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Meat Cleaver")) { WoW.CastSpell("Bloodthirst"); return; } } } } //Normal ST rotation if (WoW.HasTarget && WoW.IsInCombat && WoW.TargetIsEnemy && WoW.IsSpellInRange("Bloodthirst")) { if (WoW.TargetHealthPercent >= 20) { //When targets are above 20%. Not in Execute phase. (need to change this to TTExecute) //Single target with Reckless Abandon - Battle Cry Avatar Rampage - Raging Blow - Odyn's Fury - Bloodthirst - Raging Blow - Furious Slash - Bloodthirst if (MplusAoEint) { if (WoW.CanCast("Whirlwind") && !WoW.PlayerHasBuff("Meat Cleaver")) { WoW.CastSpell("Whirlwind"); return; } if (WoW.CanCast("Whirlwind") && !WoW.CanCast("Bloodthirst") && !WoW.CanCast("Raging Blow") && !WoW.CanCast("Rampage") ) { WoW.CastSpell("Whirlwind"); return; } if (WoW.CanCast("Raging Blow") && !WoW.CanCast("Bloodthirst")) { WoW.CastSpell("Raging Blow"); return; } } } if (TFZFMint) { if (WoW.CanCast("Rampage") && WoW.Rage >= 100) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Bloodthirst") && !WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Execute") && WoW.IsSpellOverlayed("Execute")) { WoW.CastSpell("Execute"); return; } if (!MplusAoEint && WoW.CanCast("Raging Blow") && !WoW.CanCast("Bloodthirst")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("Bloodthirst") && WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Furious Slash") && !WoW.CanCast("Bloodthirst") && !WoW.CanCast("Raging Blow")) { WoW.CastSpell("Furious Slash"); return; } } if (!TFZFMint) { if (WoW.CanCast("Rampage") && !WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Bloodthirst") && !WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Execute") && WoW.IsSpellOverlayed("Execute")) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Raging Blow") && !WoW.CanCast("Bloodthirst")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("Bloodthirst") && WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Furious Slash") && !WoW.CanCast("Bloodthirst") && !WoW.CanCast("Raging Blow")) { WoW.CastSpell("Furious Slash"); return; } } if (WoW.TargetHealthPercent <= 20) { if (TFZFMint) { if (WoW.CanCast("Rampage") && WoW.Rage >= 100) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Bloodthirst") && !WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Execute") && WoW.IsSpellOverlayed("Execute") && WoW.Rage > 25) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Execute") && WoW.Rage > 25) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Raging Blow") && !WoW.CanCast("Bloodthirst")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("Bloodthirst") && WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Furious Slash") && !WoW.CanCast("Bloodthirst") && !WoW.CanCast("Raging Blow")) { WoW.CastSpell("Furious Slash"); return; } } if (!TFZFMint) { if (WoW.CanCast("Execute") && !WoW.PlayerHasBuff("Enrage") && !WoW.PlayerHasBuff("Massacre")) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Rampage") && WoW.PlayerHasBuff("Massacre")) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Execute") && WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Bloodthirst") && WoW.Rage < 25) { WoW.CastSpell("Bloodthirst"); return; } if (!MplusAoEint && WoW.CanCast("Raging Blow") && WoW.Rage < 25) { WoW.CastSpell("Raging Blow"); 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 (combatRoutine.Type == RotationType.AOE) { // AOE stuff here } if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } }
/// <summary> /// Do the rotation. /// </summary> private void doRotation() { if (WoW.Insanity >= 70 || WoW.PlayerHasBuff(VOIDFORM_AURA)) { //Expend insanity in voidform. if (WoW.HasTarget && !WoW.PlayerHasBuff(VOIDFORM_AURA)) { castWithRangeCheck(VOID_ERUPTION); } else { //If we can, cast it. castWithRangeCheck(VOID_BOLT); //Cast it. if (WoW.Level > 100) { castWithRangeCheck(VOID_TORRENT); } //If the boss health is at or below our set threshold SW:D if (WoW.TargetHealthPercent <= HEALTH_PERCENT_FOR_SWD) { if (WoW.PlayerSpellCharges(SHADOW_DEATH) == 2 && WoW.Insanity <= 70) { castWithRangeCheck(SHADOW_DEATH); } else if (WoW.PlayerSpellCharges(SHADOW_DEATH) == 1) { if (WoW.Insanity > PANIC_INSANITY_VALUE && !(WoW.IsSpellOnCooldown(MIND_BLAST) || WoW.IsSpellOnCooldown(VOID_BOLT)) || WoW.Insanity <= calculateInsanityDrain()) { castWithRangeCheck(SHADOW_DEATH); } } } //Cast shadowfiend if we have more than 15 stacks of voidform aura. if (WoW.PlayerBuffStacks(VOIDFORM_AURA) >= 15) { castWithRangeCheck(SHADOW_FIEND); } //If we can, cast it. castWithRangeCheck(MIND_BLAST); //If we have high stacks, cast shadowfiend. /* Disabled, allow player to cast. * if (WoW.PlayerBuffStacks(VOIDFORM_AURA)>=15) { * castWithRangeCheck(SHADOWFIEND); * } */ if (!isPlayerBusy(ignoreChanneling: false)) { castWithRangeCheck(MIND_FLAY); } } } else { //Build up insanity if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.TargetIsVisible) { //If we can, cast mind blast. if (castWithRangeCheck(MIND_BLAST)) { return; } //If we don't have anything else to do, cast Mind flay. if (!isPlayerBusy(ignoreChanneling: false)) { castWithRangeCheck(MIND_FLAY); } } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted) { if (UseCooldowns && RuneOfPower && WoW.PlayerSpellCharges("Rune of Power") >= 1 && WoW.SpellCooldownTimeRemaining("Combustion") >= 4000 && WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerIsCasting && !WoW.IsMoving && !WoW.PlayerHasBuff("Rune of Power") && !WoW.IsSpellOnCooldown("Rune of Power") || (UseCooldowns && RuneOfPower && !WoW.PlayerIsCasting && WoW.PlayerSpellCharges("Fire Blast") == 3 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.IsMoving && !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerSpellCharges("Rune of Power") >= 1 && WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerHasBuff("Rune of Power") && !WoW.IsSpellOnCooldown("Rune of Power"))) { WoW.CastSpell("Rune of Power"); return; } if (UseCooldowns && Mirrors && WoW.CanCast("Mirror Image") && !WoW.IsSpellOnCooldown("Mirror Image") && WoW.PlayerHasBuff("Combustion")) { WoW.CastSpell("Mirror Image"); return; } if (WoW.CanCast("Scorch") && WoW.IsMoving && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Scorch"); return; } if (WoW.IsInCombat && Meteor && Control.ModifierKeys == Keys.Alt && !WoW.PlayerIsCasting) { WoW.CastSpell("Meteor"); return; } if (WoW.CanCast("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && WoW.PlayerHasBuff("Heating Up") && UseCooldowns && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 && !WoW.IsSpellOnCooldown("Combustion")) { WoW.CastSpell("Phoenix's Flames"); return; } if (WoW.PlayerIsCasting && UseCooldowns && WoW.PlayerHasBuff("Heating Up") && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 && !WoW.IsSpellOnCooldown("Combustion")) { WoW.CastSpell("Phoenix's Flames"); return; } if (WoW.CanCast("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerHasBuff("Heating Up") && WoW.LastSpell != "Fire Blast" && WoW.LastSpell != "Phoenix's Flames" && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && !UseCooldowns && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.IsSpellOnCooldown("Combustion")) { WoW.CastSpell("Phoenix's Flames"); return; } if (!UseCooldowns && Combustion && WoW.PlayerIsCasting && WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Fire Blast"); return; } if (WoW.CanCast("Phoenix's Flames") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && WoW.PlayerHasBuff("Heating Up") && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.SpellCooldownTimeRemaining("Combustion") > 6000 && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Phoenix's Flames"); return; } if (WoW.IsInCombat && Control.ModifierKeys == Keys.Alt && ROF && !WoW.PlayerIsCasting) { WoW.CastSpell("Ring of Frost"); return; } if (Barrier && WoW.CanCast("Blazing Barrier") && WoW.HealthPercent <= 80 && !WoW.IsSpellOnCooldown("Blazing Barrier") && !WoW.PlayerHasBuff("Blazing Barrier")) { WoW.CastSpell("Blazing Barrier"); return; } if (!UseCooldowns && WoW.CanCast("Cinderstorm") && Cinderstorm && WoW.TargetHasDebuff("Ignite") && !WoW.PlayerHasBuff("Combustion") && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Cinderstorm"); return; } if (UseCooldowns && WoW.CanCast("Cinderstorm") && Cinderstorm && WoW.TargetHasDebuff("Ignite") && !WoW.PlayerHasBuff("Combustion") && WoW.IsSpellOnCooldown("Combustion") && WoW.SpellCooldownTimeRemaining("Combustion") > 500 && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Cinderstorm"); return; } if (UseCooldowns && Combustion && !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerHasBuff("Rune of Power") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling || UseCooldowns && Combustion && Mirrors && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && WoW.PlayerHasBuff("Hot Streak!") && !WoW.IsSpellOnCooldown("Combustion") && !WoW.IsSpellOnCooldown("Mirror Image") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Combustion"); return; } if (DragBr && WoW.CanCast("Dragon's Breath") && WoW.IsSpellInRange("Scorch") && !WoW.PlayerHasBuff("Combustion")) { WoW.CastSpell("Dragon's Breath"); return; } if (WoW.PlayerSpellCharges("Phoenix's Flames") > 2 && !WoW.PlayerHasBuff("Combustion") && WoW.SpellCooldownTimeRemaining("Combustion") > 2000 && WoW.CanCast("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && WoW.LastSpell != "Phoenix's Flames" && WoW.LastSpell != "Fire Blast" || WoW.SpellCooldownTimeRemaining("Combustion") < 2000 && WoW.CanCast("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 && WoW.LastSpell != "Phoenix's Flames" && WoW.LastSpell != "Fire Blast") { WoW.CastSpell("Phoenix's Flames"); return; } if (WoW.CanCast("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerHasBuff("Combustion") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.SpellCooldownTimeRemaining("Fire Blast") > 50 && WoW.LastSpell != "Phoenix's Flames" && WoW.LastSpell != "Fire Blast") { WoW.CastSpell("Phoenix's Flames"); return; } if (WoW.CanCast("Living Bomb") && LivingBomb && !WoW.IsSpellOnCooldown("Living Bomb") && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Living Bomb"); return; } if (WoW.CanCast("Ice Block") && !WoW.PlayerHasBuff("Ice Block") && IceBlock && WoW.HealthPercent < 20 && !WoW.IsSpellOnCooldown("Ice Block")) { WoW.CastSpell("Ice Block"); Log.Write("--------Activating Ice Block, you were below 20%HealthPoints.--------"); return; } // Legendary Bracers Support. if (Legendary && WoW.CanCast("Pyroblast") && !WoW.WasLastCasted("Pyroblast") && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerBuffTimeRemaining("Marquee Bindings of the Sun King") > 400 && WoW.PlayerHasBuff("Marquee Bindings of the Sun King") && !WoW.PlayerHasBuff("Hot Streak!") || (!WoW.PlayerHasBuff("Combustion") && !WoW.WasLastCasted("Pyroblast") && !WoW.PlayerIsCasting && WoW.PlayerHasBuff("Marquee Bindings of the Sun King") && !WoW.PlayerHasBuff("Hot Streak!"))) { WoW.CastSpell("Pyroblast"); return; } if (WoW.CanCast("Pyroblast") && WoW.PlayerHasBuff("Hot Streak!") && WoW.IsSpellOnCooldown("Combustion")) { WoW.CastSpell("Pyroblast"); return; } if (WoW.CanCast("Pyroblast") && WoW.PlayerHasBuff("Hot Streak!") && !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerSpellCharges("Phoenix's Flames") < 2) { WoW.CastSpell("Pyroblast"); return; } if (WoW.CanCast("Pyroblast") && WoW.PlayerHasBuff("Hot Streak!") && WoW.LastSpell == "Combustion") { WoW.CastSpell("Pyroblast"); return; } if (WoW.CanCast("Pyroblast") && !UseCooldowns && Combustion && WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Pyroblast"); return; } if (WoW.CanCast("Fireball") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.PlayerIsCasting && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Fireball"); return; } if (WoW.CanCast("Fireball") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.PlayerIsCasting && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.SpellCooldownTimeRemaining("Combustion") < 2000) { WoW.CastSpell("Fireball"); return; } if (WoW.SpellCooldownTimeRemaining("Phoenix's Flames") > 130 && WoW.PlayerIsCasting && WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!") && WoW.SpellCooldownTimeRemaining("Combustion") > 2000) { WoW.CastSpell("Fire Blast"); return; } if (WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!") && WoW.SpellCooldownTimeRemaining("Combustion") > 2000) { WoW.CastSpell("Fire Blast"); return; } if (!WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Heating Up") && WoW.CanCast("Fireball") && WoW.IsSpellInRange("Fireball") && !WoW.IsMoving && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Fireball"); return; } if (!WoW.PlayerIsCasting && WoW.CanCast("Fireball") && WoW.IsSpellInRange("Fireball") && !WoW.IsMoving && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("Heating Up") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Fireball"); return; } if (WoW.IsMoving && WoW.IsSpellInRange("Fireball") && !WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerHasBuff("Heating Up")) { WoW.CastSpell("Fireball"); return; } if (!WoW.PlayerHasBuff("Combustion") && !WoW.IsMoving && WoW.CanCast("Fireball") && !WoW.PlayerIsCasting && WoW.PlayerHasBuff("Heating Up") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 || WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 || WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") && !WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 || WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") >= 2000 || WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000) { WoW.CastSpell("Fireball"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted) { if (UseCooldowns && RuneOfPower && WoW.PlayerSpellCharges("Rune of Power") >= 1 && WoW.SpellCooldownTimeRemaining("Combustion") >= 4000 && WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerIsCasting && !WoW.IsMoving && !WoW.PlayerHasBuff("Rune of Power") && !WoW.IsSpellOnCooldown("Rune of Power") || (UseCooldowns && RuneOfPower && !WoW.PlayerIsCasting && WoW.PlayerSpellCharges("Fire Blast") == 3 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.IsMoving && !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerSpellCharges("Rune of Power") >= 1 && WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerHasBuff("Rune of Power") && !WoW.IsSpellOnCooldown("Rune of Power"))) { WoW.CastSpell("Rune of Power"); return; } if (UseCooldowns && Mirrors && WoW.CanCast("Mirror Image") && !WoW.IsSpellOnCooldown("Mirror Image") && WoW.PlayerHasBuff("Combustion")) { WoW.CastSpell("Mirror Image"); return; } if (WoW.CanCast("Scorch") && WoW.IsMoving && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Scorch"); return; } if (WoW.IsInCombat && Meteor && Control.ModifierKeys == Keys.Alt && !WoW.PlayerIsCasting) { WoW.CastSpell("Meteor"); return; } if (WoW.CanCast("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && WoW.PlayerHasBuff("Heating Up") && UseCooldowns && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 && !WoW.IsSpellOnCooldown("Combustion")) { WoW.CastSpell("Phoenix's Flames"); return; } if (WoW.PlayerIsCasting && UseCooldowns && WoW.PlayerHasBuff("Heating Up") && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 && !WoW.IsSpellOnCooldown("Combustion")) { WoW.CastSpell("Phoenix's Flames"); return; } if (WoW.CanCast("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerHasBuff("Heating Up") && WoW.LastSpell != "Fire Blast" && WoW.LastSpell != "Phoenix's Flames" && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && !UseCooldowns && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.IsSpellOnCooldown("Combustion")) { WoW.CastSpell("Phoenix's Flames"); return; } if (!UseCooldowns && Combustion && WoW.PlayerIsCasting && WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Fire Blast"); return; } if (WoW.CanCast("Phoenix's Flames") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && WoW.PlayerHasBuff("Heating Up") && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.SpellCooldownTimeRemaining("Combustion") > 6000 && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Phoenix's Flames"); return; } if (WoW.IsInCombat && Control.ModifierKeys == Keys.Alt && ROF && !WoW.PlayerIsCasting) { WoW.CastSpell("Ring of Frost"); return; } if (Barrier && WoW.CanCast("Blazing Barrier") && WoW.HealthPercent <= 80 && !WoW.IsSpellOnCooldown("Blazing Barrier") && !WoW.PlayerHasBuff("Blazing Barrier")) { WoW.CastSpell("Blazing Barrier"); return; } if (!UseCooldowns && WoW.CanCast("Cinderstorm") && Cinderstorm && WoW.TargetHasDebuff("Ignite") && !WoW.PlayerHasBuff("Combustion") && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Cinderstorm"); return; } if (UseCooldowns && WoW.CanCast("Cinderstorm") && Cinderstorm && WoW.TargetHasDebuff("Ignite") && !WoW.PlayerHasBuff("Combustion") && WoW.IsSpellOnCooldown("Combustion") && WoW.SpellCooldownTimeRemaining("Combustion") > 500 && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Cinderstorm"); return; } if (UseCooldowns && Combustion && !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerHasBuff("Rune of Power") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling || UseCooldowns && Combustion && Mirrors && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && WoW.PlayerHasBuff("Hot Streak!") && !WoW.IsSpellOnCooldown("Combustion") && !WoW.IsSpellOnCooldown("Mirror Image") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { WoW.CastSpell("Combustion"); return; } if (DragBr && WoW.CanCast("Dragon's Breath") && WoW.IsSpellInRange("Scorch") && !WoW.PlayerHasBuff("Combustion")) { WoW.CastSpell("Dragon's Breath"); return; } if (WoW.PlayerSpellCharges("Phoenix's Flames") > 2 && !WoW.PlayerHasBuff("Combustion") && WoW.SpellCooldownTimeRemaining("Combustion") > 2000 && WoW.CanCast("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && WoW.LastSpell != "Phoenix's Flames" && WoW.LastSpell != "Fire Blast" || WoW.SpellCooldownTimeRemaining("Combustion") < 2000 && WoW.CanCast("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 && WoW.LastSpell != "Phoenix's Flames" && WoW.LastSpell != "Fire Blast") { WoW.CastSpell("Phoenix's Flames"); return; } if (WoW.CanCast("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerHasBuff("Combustion") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.SpellCooldownTimeRemaining("Fire Blast") > 5000 && WoW.LastSpell != "Phoenix's Flames" && WoW.LastSpell != "Fire Blast") { WoW.CastSpell("Phoenix's Flames"); return; } if (WoW.CanCast("Living Bomb") && LivingBomb && !WoW.IsSpellOnCooldown("Living Bomb") && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Living Bomb"); return; } if (WoW.CanCast("Ice Block") && !WoW.PlayerHasBuff("Ice Block") && IceBlock && WoW.HealthPercent < 20 && !WoW.IsSpellOnCooldown("Ice Block")) { WoW.CastSpell("Ice Block"); Log.Write("--------Activating Ice Block, you were below 20%HealthPoints.--------"); return; } // Legendary Bracers Support. if (Legendary && WoW.CanCast("Pyroblast") && !WoW.WasLastCasted("Pyroblast") && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerBuffTimeRemaining("Marquee Bindings of the Sun King") > 400 && WoW.PlayerHasBuff("Marquee Bindings of the Sun King") && !WoW.PlayerHasBuff("Hot Streak!") || (!WoW.PlayerHasBuff("Combustion") && !WoW.WasLastCasted("Pyroblast") && !WoW.PlayerIsCasting && WoW.PlayerHasBuff("Marquee Bindings of the Sun King") && !WoW.PlayerHasBuff("Hot Streak!"))) { WoW.CastSpell("Pyroblast"); return; } if (!WoW.PlayerIsCasting && WoW.CanCast("Flamestrike") && WoW.PlayerHasBuff("Hot Streak!") && WoW.IsSpellOnCooldown("Combustion")) { WoW.CastSpell("Flamestrike"); return; } if (!WoW.PlayerIsCasting && WoW.CanCast("Flamestrike") && WoW.PlayerHasBuff("Hot Streak!") && !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerSpellCharges("Phoenix's Flames") < 2) { WoW.CastSpell("Flamestrike"); return; } if (!WoW.PlayerIsCasting && WoW.CanCast("Flamestrike") && WoW.PlayerHasBuff("Hot Streak!") && WoW.LastSpell == "Combustion") { WoW.CastSpell("Flamestrike"); return; } if (!WoW.PlayerIsCasting && WoW.CanCast("Flamestrike") && !UseCooldowns && Combustion && WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Flamestrike"); return; } if (WoW.CanCast("Fireball") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.PlayerIsCasting && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Fireball"); return; } if (WoW.SpellCooldownTimeRemaining("Combustion") > 200 && WoW.SpellCooldownTimeRemaining("Phoenix's Flames") > 130 && WoW.PlayerIsCasting && WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Fire Blast"); return; } if (WoW.SpellCooldownTimeRemaining("Combustion") > 200 && WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Fire Blast"); return; } if (!WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Heating Up") && WoW.CanCast("Fireball") && WoW.IsSpellInRange("Fireball") && !WoW.IsMoving && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Fireball"); return; } if (!WoW.PlayerIsCasting && WoW.CanCast("Fireball") && WoW.IsSpellInRange("Fireball") && !WoW.IsMoving && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("Heating Up") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!")) { WoW.CastSpell("Fireball"); return; } if (WoW.IsMoving && WoW.IsSpellInRange("Fireball") && !WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerHasBuff("Heating Up")) { WoW.CastSpell("Fireball"); return; } if (!WoW.PlayerHasBuff("Combustion") && !WoW.IsMoving && WoW.CanCast("Fireball") && !WoW.PlayerIsCasting && WoW.PlayerHasBuff("Heating Up") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 || WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 || WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") && !WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 || WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") >= 2000 || WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000) { WoW.CastSpell("Fireball"); } } } }
public void MGRotation() { if (isCheckHotkeysFrostOffensivePillarofFrost && isMelee && combatRoutine.UseCooldowns && !WoW.IsSpellOnCooldown("PillarofFrost") && WoW.Level >= 57) { WoW.CastSpell("PillarofFrost"); } if (combatRoutine.UseCooldowns && isCheckHotkeysFrostOffensiveErW && isMelee && currentRunes == 0 && WoW.PlayerHasBuff("PillarofFrost") && !WoW.IsSpellOnCooldown("Empower Rune") && WoW.Level >= 57) { WoW.CastSpell("Empower Rune"); } if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave) // Do Single Target Stuff here { if (CanCastInRange("Frost Strike") && (!WoW.PlayerHasBuff("Icy Talons") || WoW.PlayerBuffTimeRemaining("Icy Talons") <= 200) && runicPower >= 25 && !(combatRoutine.UseCooldowns && CanCastNoRange("Obliteration") && WoW.Talent(7) == 1) && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")))) { Log.Write("Hasbuff " + WoW.PlayerHasBuff("Icy Talons") + " Remaining " + WoW.PlayerBuffTimeRemaining("Icy Talons")); WoW.CastSpell("Frost Strike"); return; } if (isMelee && WoW.HealthPercent <= 40 && WoW.Level >= 55 && WoW.PlayerHasBuff("Free DeathStrike") && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")))) { WoW.CastSpell("Death Strike"); return; } if (CanCastInRange("Howling Blast") && !WoW.IsSpellOnCooldown("Howling Blast") && WoW.Level >= 55 && !WoW.TargetHasDebuff("Frost Fever") && currentRunes >= 1 && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")))) { WoW.CastSpell("Howling Blast"); return; } if (WoW.Talent(6) == 1 && runicPower >= 80 && CanCastInRange("Frost Strike")) { WoW.CastSpell("Frost Strike"); return; } if (CanCastInRange("Howling Blast") && WoW.PlayerHasBuff("Rime") && WoW.Level >= 55 && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")))) { WoW.CastSpell("Howling Blast"); return; } if (combatRoutine.UseCooldowns && isMelee && currentRunes >= 2 && runicPower >= 25 && WoW.Talent(7) == 1 && CanCastNoRange("Obliteration") && WoW.Level >= 100) { WoW.CastSpell("Obliteration"); return; } if (WoW.Talent(7) == 1 && runicPower >= 25 && CanCastInRange("Frost Strike") && WoW.PlayerHasBuff("Obliteration") && !WoW.PlayerHasBuff("Killing Machine")) { WoW.CastSpell("Frost Strike"); return; } if (WoW.Talent(7) == 1 && isMelee && currentRunes >= 1 && WoW.PlayerHasBuff("Killing Machine") && WoW.PlayerHasBuff("Obliteration") && WoW.Level >= 55) { WoW.CastSpell("Obliterate"); return; } if (WoW.Talent(6) == 1 && isMelee && currentRunes >= 1 && WoW.PlayerHasBuff("Killing Machine") && WoW.Level >= 90) { WoW.CastSpell("Frostscythe"); return; } if (isMelee && currentRunes >= 2 && WoW.Level >= 55) { WoW.CastSpell("Obliterate"); return; } if (WoW.Talent(7) == 3 && isMelee && currentRunes >= 1 && CanCastNoRange("Glacial Advance") && WoW.Level >= 100) { WoW.CastSpell("Glacial Advance"); return; } if (WoW.Talent(7) == 1 && runicPower >= 40 && CanCastInRange("Frost Strike") && !(combatRoutine.UseCooldowns && CanCastNoRange("Obliteration")) && WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")) { WoW.CastSpell("Frost Strike"); return; } if (isMelee && currentRunes >= 1 && CanCastNoRange("Remorseless Winter") && WoW.Level >= 57 && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration")))) { WoW.CastSpell("Remorseless Winter"); return; } } if (combatRoutine.Type == RotationType.AOE) { if (CanCastInRange("Frost Strike") && (!WoW.PlayerHasBuff("Icy Talons") || WoW.PlayerBuffTimeRemaining("Icy Talons") <= 200) && runicPower >= 25) { WoW.CastSpell("Frost Strike"); return; } if (isMelee && WoW.HealthPercent <= 40 && WoW.PlayerHasBuff("Free DeathStrike") && WoW.Level >= 55) { WoW.CastSpell("Death Strike"); return; } if (CanCastInRange("Howling Blast") && !WoW.IsSpellOnCooldown("Howling Blast") && !WoW.TargetHasDebuff("Frost Fever") && currentRunes >= 1 && WoW.Level >= 55) { WoW.CastSpell("Howling Blast"); return; } if (CanCastInRange("Howling Blast") && WoW.PlayerHasBuff("Rime") && WoW.Level >= 55) { WoW.CastSpell("Howling Blast"); return; } if (WoW.Talent(6) != 1 && isMelee && currentRunes >= 1 && CanCastNoRange("Remorseless Winter") && WoW.Level >= 57) { WoW.CastSpell("Remorseless Winter"); return; } if (runicPower >= 80 && CanCastInRange("Frost Strike")) { WoW.CastSpell("Frost Strike"); return; } if (WoW.Talent(6) != 1 && isMelee && currentRunes >= 2 && WoW.Level >= 55) { WoW.CastSpell("Obliterate"); return; } if (WoW.Talent(6) == 1 && currentRunes >= 1 && isMelee && WoW.PlayerHasBuff("Killing Machine") && WoW.Level >= 90) { WoW.CastSpell("Frostscythe"); return; } if (WoW.Talent(7) == 3 && isMelee && currentRunes >= 1 && CanCastNoRange("Glacial Advance") && WoW.Level >= 100) { WoW.CastSpell("Glacial Advance"); return; } if (isMelee && currentRunes >= 1 && CanCastNoRange("Remorseless Winter") && WoW.Level >= 57) { WoW.CastSpell("Remorseless Winter"); return; } if (WoW.Talent(6) == 1 && isMelee && currentRunes >= 1 && WoW.Level >= 90) { WoW.CastSpell("Frostscythe"); return; } if (runicPower >= 25 && CanCastInRange("Frost Strike") && WoW.PlayerBuffStacks("Icy Talons") < 3) { WoW.CastSpell("Frost Strike"); return; } if (WoW.CanCast("Sindragosa's Fury") && (DetectKeyPress.GetKeyState(0x5A) < 0) && WoW.Level >= 110) { WoW.CastSpell("Sindragosa's Fury"); return; } } }
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.HasBossTarget && !WoW.IsSpellOnCooldown("FOTI") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("FOTI"); return; } if (WoW.CanCast("FOTI") && !WoW.IsSpellOnCooldown("FOTI") && WoW.IsSpellInRange("Chaos Strike") && WoW.CountEnemyNPCsInRange >= 2 && !WoW.IsMoving) { WoW.CastSpell("FOTI"); return; } if (WoW.CanCast("Eye Beam") && WoW.Fury > 50 && WoW.CountEnemyNPCsInRange >= 2 && !WoW.IsMoving) { WoW.CastSpell("Eye Beam"); return; } { if (WoW.PlayerHasBuff("Metamorphosis")) { if (WoW.CanCast("Nemesis") && !WoW.IsSpellOnCooldown("Nemesis")) { WoW.CastSpell("Nemesis"); } if (WoW.CanCast("Chaos Blades") && (!WoW.IsSpellOnCooldown("Chaos Blades") && (!WoW.PlayerHasBuff("Chaos Blades Buff")))) { WoW.CastSpell("Chaos Blades"); } if (WoW.CanCast("Death Sweep") && !WoW.IsSpellOnCooldown("Death Sweep") && WoW.IsSpellInRange("Annihilation") && WoW.Fury > 15) { WoW.CastSpell("Death Sweep"); return; } if (WoW.CanCast("Annihilation") && !WoW.IsSpellOnCooldown("Annihilation") && WoW.IsSpellInRange("Annihilation") && WoW.Fury > 40) { WoW.CastSpell("Annihilation"); return; } if (WoW.CanCast("Felblade") && WoW.IsSpellInRange("Annihilation")) { WoW.CastSpell("Felblade"); return; } if (WoW.CanCast("Throw Glaive") && !WoW.TargetHasDebuff("Bloodlet")) { WoW.CastSpell("Throw Glaive"); return; } } if (!WoW.PlayerHasBuff("Metamorphosis")) { if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("Eye Beam"); return; } if (WoW.CanCast("Throw Glaive") && !WoW.TargetHasDebuff("Bloodlet")) { WoW.CastSpell("Throw Glaive"); return; } if (WoW.CanCast("Felblade")) // Fury Generator { WoW.CastSpell("Felblade"); return; } if (WoW.CanCast("Chaos Blades") && (!WoW.IsSpellOnCooldown("Chaos Blades") && (!WoW.PlayerHasBuff("Chaos Blades Buff")))) { WoW.CastSpell("Chaos Blades"); } if (WoW.CanCast("Nemesis") && !WoW.IsSpellOnCooldown("Nemesis") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("Nemesis"); return; } if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike") && !WoW.IsSpellOnCooldown("FOTI") && !WoW.IsMoving) { WoW.CastSpell("FOTI"); return; } if (WoW.CanCast("Eye Beam") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 50) { WoW.CastSpell("Eye Beam"); return; } if (WoW.CanCast("Blade Dance") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("Blade Dance"); return; } if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") && WoW.IsSpellOnCooldown("Eye Beam") && (WoW.Fury >= 40 || WoW.Fury >= 70)) { WoW.CastSpell("Chaos Strike"); return; } } if (WoW.CanCast("Blade Dance") && !WoW.IsSpellOnCooldown("Blade Dance") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury > 15) { WoW.CastSpell("Blade Dance"); return; } if (WoW.CanCast("Felblade") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury < 110) { WoW.CastSpell("Felblade"); return; } if (WoW.CanCast("Chaos Strike") && !WoW.IsSpellOnCooldown("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury > 40) { WoW.CastSpell("Chaos Strike"); return; } if (WoW.CanCast("Felblade") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("Felblade"); 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); } //Dark Pact if (WoW.CanCast("Dark Pact") && WoW.Talent(5) == 3 && WoW.HealthPercent <= 30 && !WoW.IsMounted) { WoW.CastSpell("Dark Pact"); return; } //Shadowfury if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LMENU) < 0 && WoW.Talent(3) == 3 && !WoW.IsMoving && WoW.CanCast("Shadowfury")) { WoW.CastSpell("Shadowfury"); return; } if (UseCooldowns) { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted) { //Doomguard if (WoW.CanCast("Doomguard") && (WoW.Talent(6) == 0 || WoW.Talent(6) == 2 || WoW.Talent(6) == 3) && WoW.CurrentSoulShards >= 1 && WoW.IsSpellInRange("Doom")) { WoW.CastSpell("Doomguard"); return; } //Grimoire of Service if (WoW.CanCast("Grimoire: Felguard") && WoW.Talent(6) == 2 && WoW.CurrentSoulShards >= 1 && WoW.IsSpellInRange("Doom")) { WoW.CastSpell("Grimoire: Felguard"); return; } //Soul Harvest if (WoW.CanCast("Soul Harvest") && WoW.Talent(4) == 3 && !WoW.IsMoving && WoW.IsSpellInRange("Doom") && (WoW.PlayerHasBuff("Bloodlust") || WoW.PlayerHasBuff("Time Warp") || WoW.PlayerHasBuff("Netherwinds") || WoW.PlayerHasBuff("Drums of War") || WoW.PlayerHasBuff("Heroism"))) { WoW.CastSpell("Soul Harvest"); return; } } } if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted) { if ((!WoW.TargetHasDebuff("Doom") || WoW.TargetDebuffTimeRemaining("Doom") <= 150) && WoW.CanCast("Doom") && WoW.IsSpellInRange("Doom")) { WoW.CastSpell("Doom"); return; } if (WoW.CanCast("Darkglare") && WoW.Talent(7) == 1 && WoW.CurrentSoulShards >= 1 && WoW.IsSpellInRange("Doom")) { WoW.CastSpell("Darkglare"); return; } if (WoW.CanCast("Call Dreadstalkers") && (WoW.CurrentSoulShards >= 2 || WoW.TargetHasDebuff("Demonic Calling")) && WoW.IsSpellInRange("Doom") && !WoW.IsMoving) { WoW.CastSpell("Call Dreadstalkers"); return; } if (WoW.CanCast("Hand of Guldan") && WoW.CurrentSoulShards >= 4 && WoW.IsSpellInRange("Doom") && !WoW.IsMoving) { WoW.CastSpell("Hand of Guldan"); return; } if (WoW.CanCast("Demonic Empowerment") && !WoW.IsMoving && !WoW.WasLastCasted("Demonic Empowerment") && (!WoW.PetHasBuff("Demonic Empowerment") || WoW.PetBuffTimeRemaining("Demonic Empowerment") <= 1.5 || WoW.WasLastCasted("Call Dreadstalkers") || WoW.WasLastCasted("Grimoire: Felguard") || WoW.WasLastCasted("Doomguard") || WoW.WasLastCasted("Hand of Guldan"))) { WoW.CastSpell("Demonic Empowerment"); Thread.Sleep(1000); return; } if (WoW.CanCast("Talkiels Consumption") && WoW.PetHasBuff("Demonic Empowerment") && WoW.PetBuffTimeRemaining("Demonic Empowerment") >= 2 && WoW.DreadstalkersCount >= 1 && WoW.IsSpellInRange("Doom") && !WoW.IsMoving) { WoW.CastSpell("Talkiels Consumption"); return; } if (WoW.CanCast("Felstorm") && WoW.PetHasBuff("Demonic Empowerment") && WoW.PetBuffTimeRemaining("Demonic Empowerment") >= 6 && WoW.IsSpellInRange("Doom")) { WoW.CastSpell("Felstorm"); return; } if (WoW.CanCast("Shadowflame") && WoW.Talent(1) == 2 && !WoW.TargetHasDebuff("Shadowflame") && WoW.CanCast("Shadowflame") && WoW.IsSpellInRange("Doom")) { WoW.CastSpell("Shadowflame"); return; } if (WoW.CanCast("Life Tap") && WoW.Mana < 60 && WoW.HealthPercent > 50) { WoW.CastSpell("Life Tap"); return; } if (WoW.CanCast("Demonwrath") && WoW.Mana > 60 && WoW.IsMoving) { WoW.CastSpell("Demonwrath"); return; } if ((WoW.CanCast("Shadow Bolt") || WoW.CanCast("Demonbolt")) && WoW.IsSpellInRange("Doom") && !WoW.IsMoving) { WoW.CastSpell("Shadow Bolt"); WoW.CastSpell("Demonbolt"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted) { if (WoW.CanCast("Hand of Guldan") && WoW.CurrentSoulShards >= 4 && WoW.IsSpellInRange("Doom") && !WoW.IsMoving) { WoW.CastSpell("Hand of Guldan"); return; } if (WoW.CanCast("Implosion") && WoW.Talent(2) == 3 && WoW.WildImpsCount >= 1 && WoW.IsSpellInRange("Doom")) { WoW.CastSpell("Implosion"); return; } if (WoW.CanCast("Darkglare") && WoW.Talent(7) == 1 && WoW.CurrentSoulShards >= 1 && WoW.IsSpellInRange("Doom")) { WoW.CastSpell("Darkglare"); return; } if (WoW.CanCast("Demonic Empowerment") && WoW.CanCast("Felstorm") && !WoW.IsMoving && !WoW.WasLastCasted("Demonic Empowerment") && (!WoW.PetHasBuff("Demonic Empowerment") || WoW.PetBuffTimeRemaining("Demonic Empowerment") <= 6)) { WoW.CastSpell("Demonic Empowerment"); Thread.Sleep(2000); return; } if (WoW.CanCast("Felstorm") && WoW.PetHasBuff("Demonic Empowerment") && WoW.PetBuffTimeRemaining("Demonic Empowerment") >= 6 && WoW.IsSpellInRange("Doom")) { WoW.CastSpell("Felstorm"); return; } if (WoW.CanCast("Life Tap") && WoW.Mana < 60 && WoW.HealthPercent > 50) { WoW.CastSpell("Life Tap"); return; } if (WoW.CanCast("Demonwrath") && WoW.Mana > 60) { WoW.CastSpell("Demonwrath"); return; } } } if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } }
public override void Pulse() { //Combat Time if (CombatTime.IsRunning && !WoW.IsInCombat) { CombatTime.Reset(); } if (!CombatTime.IsRunning && WoW.IsInCombat) { CombatTime.Start(); } if (!WoW.PlayerHasBuff("HitCombo")) { HitCombo = ""; } if (!WoW.IsInCombat || (!WoW.TargetHasDebuff("TouchOfDeath") && !WoW.PlayerHasBuff("Serenity")) || (IsOpenerDone && !Serenity)) { OpenerOrder = 1; } var EnergyPct = WoW.Energy / EnergyMax * 100f; // Single Target Rotation if (combatRoutine.Type == RotationType.SingleTarget) { //Log.Write($"[HitCombo] '{HitCombo}'"); //Stop Casting CJL if (HitCombo == "CracklingJadeLightning" && WoW.PlayerIsChanneling) { WoW.CastSpell("StopCasting"); return; } //Cooldowns if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { //Touch Of Death if (WoW.CanCast("TouchOfDeath") && WoW.IsSpellInRange("TigerPalm") && !GaleBurst && UseCooldowns) { WoW.CastSpell("TouchOfDeath"); HitCombo = "TouchOfDeath"; return; } //Touch Of Death (Serenity talent) [Gale] if (WoW.CanCast("TouchOfDeath") && WoW.IsSpellInRange("TigerPalm") && WoW.SpellCooldownTimeRemaining("Serenity") < 2 && WoW.SpellCooldownTimeRemaining("RisingSunKick") < 2 && WoW.SpellCooldownTimeRemaining("FistsOfFury") < 8 && WoW.SpellCooldownTimeRemaining("StrikeOfTheWindlord") <= 4 && Serenity && GaleBurst && WoW.CurrentChi >= 2 && UseCooldowns) { WoW.CastSpell("TouchOfDeath"); HitCombo = "TouchOfDeath"; return; } //Touch Of Death (WDP talent) [Gale] if (WoW.CanCast("TouchOfDeath") && WoW.IsSpellInRange("TigerPalm") && WoW.SpellCooldownTimeRemaining("RisingSunKick") < 7 && WoW.SpellCooldownTimeRemaining("FistsOfFury") <= 4 && WoW.SpellCooldownTimeRemaining("StrikeOfTheWindlord") < 8 && !Serenity && GaleBurst && WoW.CurrentChi >= 2 && UseCooldowns) { WoW.CastSpell("TouchOfDeath"); HitCombo = "TouchOfDeath"; return; } //Serenity if (WoW.CanCast("Serenity") && WoW.IsSpellInRange("TigerPalm") && (WoW.IsSpellOnCooldown("TouchOfDeath") || WoW.TargetHasDebuff("TouchOfDeath")) && WoW.SpellCooldownTimeRemaining("FistsOfFury") < 15 && WoW.SpellCooldownTimeRemaining("StrikeOfTheWindlord") < 13 && !WoW.IsSpellOnCooldown("RisingSunKick") && Serenity && UseCooldowns) { WoW.CastSpell("Serenity"); return; } //SEF (Opener not done) if (WoW.CanCast("SEF") && WoW.IsSpellInRange("TigerPalm") && WoW.CurrentChi >= 2 && !IsOpenerDone && !WoW.PlayerHasBuff("SEF") && !Serenity && UseCooldowns) { WoW.CastSpell("SEF"); return; } //SEF if (WoW.CanCast("SEF") && WoW.IsSpellInRange("TigerPalm") && IsOpenerDone && (WoW.IsSpellOnCooldown("TouchOfDeath") || WoW.TargetHasDebuff("TouchOfDeath")) && WoW.SpellCooldownTimeRemaining("FistsOfFury") <= 6 && WoW.SpellCooldownTimeRemaining("StrikeOfTheWindlord") <= 14 && WoW.SpellCooldownTimeRemaining("RisingSunKick") <= 6 && !WoW.PlayerHasBuff("SEF") && !Serenity && (!WoW.IsSpellOnCooldown("EnergizingElixir") || WoW.PlayerSpellCharges("SEF") == 2 || WoW.TargetHasDebuff("TouchOfDeath")) && UseCooldowns) { WoW.CastSpell("SEF"); return; } //Energizing Elixir if (WoW.CanCast("EnergizingElixir") && WoW.IsSpellInRange("TigerPalm") && IsOpenerDone && WoW.PlayerHasBuff("SEF")) { WoW.CastSpell("EnergizingElixir"); return; } //Energizing Elixir if (WoW.CanCast("EnergizingElixir") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy < EnergyMax && (IsOpenerDone || !Serenity) && WoW.CurrentChi <= 1 && (!WoW.IsSpellOnCooldown("StrikeOfTheWindlord") || !WoW.IsSpellOnCooldown("RisingSunKick"))) { WoW.CastSpell("EnergizingElixir"); return; } } //Serenity Opener (With Touch of Death) if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("Serenity") && WoW.TargetHasDebuff("TouchOfDeath")) { //Rising Sun Kick if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 1) { WoW.CastSpell("RisingSunKick"); HitCombo = "RisingSunKick"; OpenerOrder = 2; return; } //Strike Of The Windlord if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 2) { WoW.CastSpell("StrikeOfTheWindlord"); HitCombo = "StrikeOfTheWindlord"; OpenerOrder = 3; return; } //Fists of Fury if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 3) { WoW.CastSpell("FistsOfFury"); HitCombo = "FistsOfFury"; OpenerOrder = 4; return; } //Rising Sun Kick if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 4) { WoW.CastSpell("RisingSunKick"); HitCombo = "RisingSunKick"; OpenerOrder = 5; return; } //Spinning Crane Kick if (WoW.CanCast("SpinningCraneKick") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 5) { WoW.CastSpell("SpinningCraneKick"); HitCombo = "SpinningCraneKick"; OpenerOrder = 6; return; } //Blackout Kick if (WoW.CanCast("BlackoutKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "BlackoutKick" && OpenerOrder == 6) { WoW.CastSpell("BlackoutKick"); HitCombo = "BlackoutKick"; return; } } //WDP Opener if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("SEF") && WoW.TargetHasDebuff("TouchOfDeath") && !IsOpenerDone) { //Rising Sun Kick if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 1) { WoW.CastSpell("RisingSunKick"); HitCombo = "RisingSunKick"; OpenerOrder = 2; return; } //Energizing Elixir if (WoW.CanCast("EnergizingElixir") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 2) { WoW.CastSpell("EnergizingElixir"); OpenerOrder = 3; return; } //Fists of Fury if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 3) { WoW.CastSpell("FistsOfFury"); HitCombo = "FistsOfFury"; OpenerOrder = 4; return; } //Strike Of The Windlord if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 4) { WoW.CastSpell("StrikeOfTheWindlord"); HitCombo = "StrikeOfTheWindlord"; OpenerOrder = 5; return; } //Tiger Palm if (WoW.CanCast("TigerPalm") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "TigerPalm" && OpenerOrder == 5) { WoW.CastSpell("TigerPalm"); HitCombo = "TigerPalm"; OpenerOrder = 6; return; } //Whirling Dragon Punch if (WoW.CanCast("WhirlingDragonPunch") && WoW.IsSpellInRange("TigerPalm") && WoW.IsSpellOnCooldown("FistsOfFury") && WoW.IsSpellOnCooldown("RisingSunKick") && OpenerOrder == 6) { WoW.CastSpell("WhirlingDragonPunch"); HitCombo = "WhirlingDragonPunch"; IsOpenerDone = true; return; } } //Serenity Rotation if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("Serenity") && !WoW.TargetHasDebuff("TouchOfDeath")) { //Strike Of The Windlord if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm")) { WoW.CastSpell("StrikeOfTheWindlord"); HitCombo = "StrikeOfTheWindlord"; WasStrikeOfTheWindlordCasted = true; return; } //Rising Sun Kick if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm")) { WoW.CastSpell("RisingSunKick"); HitCombo = "RisingSunKick"; return; } //Fists of Fury if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && WasStrikeOfTheWindlordCasted && WoW.PlayerBuffTimeRemaining("Serenity") <= 2) { WoW.CastSpell("FistsOfFury"); HitCombo = "FistsOfFury"; WasStrikeOfTheWindlordCasted = false; return; } //Spinning Crane Kick if (WoW.CanCast("SpinningCraneKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "SpinningCraneKick" && (HitCombo == "BlackoutKick" || OpenerOrder == 5)) { WoW.CastSpell("SpinningCraneKick"); HitCombo = "SpinningCraneKick"; return; } //Blackout Kick if (WoW.CanCast("BlackoutKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "BlackoutKick") { WoW.CastSpell("BlackoutKick"); HitCombo = "BlackoutKick"; return; } } // Normal Rotation if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Serenity") && (!WoW.TargetHasDebuff("TouchOfDeath") || !Serenity)) { //Fists of Fury if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && (WoW.CurrentChi >= 3 || (Katsuo && WoW.CurrentChi >= 1)) && !WoW.WasLastCasted("EnergizingElixir")) { WoW.CastSpell("FistsOfFury"); HitCombo = "FistsOfFury"; return; } //Strike Of The Windlord if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm") && WoW.CurrentChi >= 2) { WoW.CastSpell("StrikeOfTheWindlord"); HitCombo = "StrikeOfTheWindlord"; return; } //Tiger Palm (if <4 Chi and about to cap energy) if (WoW.CanCast("TigerPalm") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy >= 50 && EnergyPct > 90 && !WoW.WasLastCasted("EnergizingElixir") && WoW.CurrentChi < 4 && HitCombo != "TigerPalm") { WoW.CastSpell("TigerPalm"); HitCombo = "TigerPalm"; return; } //Rising Sun Kick if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm") && WoW.CurrentChi >= 2) { WoW.CastSpell("RisingSunKick"); HitCombo = "RisingSunKick"; return; } //Whirling Dragon Punch if (WoW.CanCast("WhirlingDragonPunch") && WoW.IsSpellInRange("TigerPalm") && WoW.IsSpellOnCooldown("FistsOfFury") && WoW.IsSpellOnCooldown("RisingSunKick") && !Serenity) { WoW.CastSpell("WhirlingDragonPunch"); HitCombo = "WhirlingDragonPunch"; return; } //Chi Wave if (WoW.CanCast("ChiWave") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy < 50 && WoW.CurrentChi < 5 && !WoW.PlayerHasBuff("SEF")) { WoW.CastSpell("ChiWave"); HitCombo = "ChiWave"; return; } //Blackout Kick if (WoW.CanCast("BlackoutKick") && WoW.IsSpellInRange("TigerPalm") && (WoW.CurrentChi > 1 || WoW.PlayerHasBuff("BlackoutKick!")) && HitCombo != "BlackoutKick") { WoW.CastSpell("BlackoutKick"); HitCombo = "BlackoutKick"; return; } //Tiger Palm if (WoW.CanCast("TigerPalm") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy >= 50 && HitCombo != "TigerPalm") { WoW.CastSpell("TigerPalm"); HitCombo = "TigerPalm"; return; } //CracklingJadeLightning (only to counter the Tiger Palm issue) if (WoW.CanCast("CracklingJadeLightning") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy >= 20 && HitCombo == "TigerPalm" && WoW.CurrentChi == 0) { WoW.CastSpell("CracklingJadeLightning"); HitCombo = "CracklingJadeLightning"; return; } } } // AoE Rotation if (combatRoutine.Type == RotationType.AOE) { if (HitCombo == "CracklingJadeLightning" && WoW.PlayerIsChanneling) { WoW.CastSpell("StopCasting"); return; } //Cooldowns if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { //Energizing Elixir if (WoW.CanCast("EnergizingElixir") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy < EnergyMax && WoW.CurrentChi <= 1 && (!WoW.IsSpellOnCooldown("StrikeOfTheWindlord") || !WoW.IsSpellOnCooldown("RisingSunKick"))) { WoW.CastSpell("EnergizingElixir"); return; } } //Serenity Rotation if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("Serenity")) { //Strike Of The Windlord if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm")) { WoW.CastSpell("StrikeOfTheWindlord"); HitCombo = "StrikeOfTheWindlord"; WasStrikeOfTheWindlordCasted = true; return; } //Rising Sun Kick if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm")) { WoW.CastSpell("RisingSunKick"); HitCombo = "RisingSunKick"; return; } //Fists of Fury if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && WasStrikeOfTheWindlordCasted && WoW.PlayerBuffTimeRemaining("Serenity") <= 2) { WoW.CastSpell("FistsOfFury"); HitCombo = "FistsOfFury"; WasStrikeOfTheWindlordCasted = false; return; } //Spinning Crane Kick if (WoW.CanCast("SpinningCraneKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "SpinningCraneKick" && (HitCombo == "BlackoutKick" || OpenerOrder == 5)) { WoW.CastSpell("SpinningCraneKick"); HitCombo = "SpinningCraneKick"; return; } //Blackout Kick if (WoW.CanCast("BlackoutKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "BlackoutKick") { WoW.CastSpell("BlackoutKick"); HitCombo = "BlackoutKick"; return; } } // Normal Rotation if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Serenity") && (!WoW.TargetHasDebuff("TouchOfDeath") || !Serenity)) { //Fists of Fury if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && (WoW.CurrentChi >= 3 || (Katsuo && WoW.CurrentChi >= 1)) && !WoW.WasLastCasted("EnergizingElixir")) { WoW.CastSpell("FistsOfFury"); HitCombo = "FistsOfFury"; return; } //Whirling Dragon Punch if (WoW.CanCast("WhirlingDragonPunch") && WoW.IsSpellInRange("TigerPalm") && WoW.IsSpellOnCooldown("FistsOfFury") && WoW.IsSpellOnCooldown("RisingSunKick") && !Serenity) { WoW.CastSpell("WhirlingDragonPunch"); HitCombo = "WhirlingDragonPunch"; return; } //Strike Of The Windlord if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm") && WoW.CurrentChi >= 2) { WoW.CastSpell("StrikeOfTheWindlord"); HitCombo = "StrikeOfTheWindlord"; return; } //Rising Sun Kick if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm") && WoW.CurrentChi >= 2 && !Serenity && WoW.SpellCooldownTimeRemaining("WhirlingDragonPunch") < gcd * 2 && WoW.IsSpellOnCooldown("FistsOfFury")) { WoW.CastSpell("RisingSunKick"); HitCombo = "RisingSunKick"; return; } //Spinning Crane Kick if (WoW.CanCast("SpinningCraneKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "SpinningCraneKick" && WoW.CurrentChi >= 3) { WoW.CastSpell("SpinningCraneKick"); HitCombo = "SpinningCraneKick"; return; } //Chi Wave if (WoW.CanCast("ChiWave") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy < 50 && WoW.CurrentChi < 5 && !WoW.PlayerHasBuff("SEF") && HitCombo == "TigerPalm") { WoW.CastSpell("ChiWave"); HitCombo = "ChiWave"; return; } //Blackout Kick if (WoW.CanCast("BlackoutKick") && WoW.IsSpellInRange("TigerPalm") && (WoW.CurrentChi > 1 || WoW.PlayerHasBuff("BlackoutKick!")) && HitCombo != "BlackoutKick" && (HitCombo == "TigerPalm" || !WoW.TargetHasDebuff("MotC"))) { WoW.CastSpell("BlackoutKick"); HitCombo = "BlackoutKick"; return; } //Tiger Palm if (WoW.CanCast("TigerPalm") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy >= 50 && HitCombo != "TigerPalm") { WoW.CastSpell("TigerPalm"); HitCombo = "TigerPalm"; return; } //CracklingJadeLightning (only to counter the Tiger Palm issue) if (WoW.CanCast("CracklingJadeLightning") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy >= 20 && HitCombo == "TigerPalm" && WoW.CurrentChi == 0) { WoW.CastSpell("CracklingJadeLightning"); HitCombo = "CracklingJadeLightning"; } } } }
public override void Pulse() { var SavageRoarTime = WoW.PlayerBuffTimeRemaining("SavageRoar"); // 200 = 2 seconds var RakeTime = WoW.TargetDebuffTimeRemaining("Rake"); var RipTime = WoW.TargetDebuffTimeRemaining("Rip"); var MoonfireTime = WoW.TargetDebuffTimeRemaining("Moonfire"); WoW.CastSpell("Berserk", UseCooldowns && !WoW.PlayerHasBuff("Prowl")); WoW.CastSpell("Regrowth", WoW.PlayerHasBuff("PredatorySwiftness") && WoW.PlayerBuffStacks("Bloodtalons") != 2 && !WoW.PlayerHasBuff("Prowl")); // Cast Ferocious Bite if at 5 Combo Points and Rip / Savage Roar do not need refreshing within 10 sec. WoW.CastSpell("FerociousBite", WoW.CurrentComboPoints >= 5 && RipTime > 1000 && SavageRoarTime > 1000 && !WoW.PlayerHasBuff("Prowl")); // Maintain Savage Roar if taken. WoW.CastSpell("SavageRoar", WoW.Talent(6) == 3 && SavageRoarTime <= 200 && WoW.CurrentComboPoints >= 1 && WoW.Energy >= 40 && !WoW.PlayerHasBuff("Prowl")); // Maintain Rake. WoW.CastSpell("Rake", RakeTime <= 200 && WoW.Energy >= 35); // Maintain Rip (at below 25%, or with Sabertooth taken, replace with Ferocious Bite). WoW.CastSpell("Rip", RipTime <= 200 && WoW.Talent(6) != 1 && WoW.CurrentComboPoints >= 1 && WoW.Energy >= 30); WoW.CastSpell("FerociousBite", RipTime <= 200 && WoW.TargetHealthPercent <= 25 && WoW.Talent(6) == 1 && WoW.CurrentComboPoints >= 1); // Maintain Moonfire if Lunar Inspiration is taken. WoW.CastSpell("Moonfire", MoonfireTime <= 200 && WoW.Energy >= 30 && WoW.Talent(1) == 3); // Use any Omen of Clarity procs to maintain Thrash if using Luffa Wrappings. // Will code this when i get the item till then stuff it.... :) // Cast Tiger's Fury at 20 Energy or less. WoW.CastSpell("TigersFury", WoW.Energy <= 20, false); // Cast Ashamane's Frenzy, try to sync this with Tiger's Fury uses. WoW.CastSpell("Ashamane", true); // Cast Shred to build combo points. WoW.CastSpell("Shred", (WoW.Energy >= 40 || WoW.PlayerHasBuff("ClearCasting")) && WoW.CountEnemyNPCsInRange <= 1); WoW.CastSpell("Thrash", (WoW.Energy >= 40 || WoW.PlayerHasBuff("ClearCasting")) && WoW.CountEnemyNPCsInRange >= 2); // When using Brutal Slash, try to make sure that you always have at least one charge on cooldown, // but have as many charges as possible when a wave of enemies comes into range. // Try to have short duration buffs such as Tiger's Fury and Bloodtalons active // on as many high target casts of this as possible, as it deals massive AoE burst damage with each cast. WoW.CastSpell("BrutalSlash", WoW.Talent(6) == 2 && WoW.Energy >= 20 && WoW.PlayerSpellCharges("BrutalSlash") > 1); WoW.CastSpell("BrutalSlash", WoW.Talent(6) == 2 && WoW.Energy >= 20 && WoW.PlayerSpellCharges("BrutalSlash") == 1 && WoW.PlayerHasBuff("TigersFury")); }
public override void Pulse() // Updated for Legion (tested and working for single target) { renewBones = !WoW.PlayerHasBuff("Bone Shield") || WoW.PlayerBuffTimeRemaining("Bone Shield") <= 500; isMelee = WoW.CanCast("Marrowrend", false, false, true, false, false); bonesStack = WoW.PlayerBuffStacks("Bone Shield"); currentRunes = WoW.CurrentRunes; runicPower = WoW.RunicPower; if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && WoW.TargetIsVisible) { if (isCDDefEnable) { useCDDef(); } if ((renewBones || bonesStack < 3) && isMelee) { if (currentRunes >= 2) { WoW.CastSpell("Marrowrend"); return; } } if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee && !WoW.TargetHasDebuff("Blood Plague")) { WoW.CastSpell("Blood Boil"); return; } if (CanCastNoRange("Consumption") && isMelee) { WoW.CastSpell("Consumption"); return; } if (isTalentBloodDrinker && CanCastInRange("BD") && !renewBones && currentRunes >= 1) { WoW.CastSpell("BD"); return; } if (isMelee && WoW.PlayerHasBuff("Crimson Scourge") && WoW.TargetHealthPercent >= 10) { WoW.CastSpell("DnD"); return; } if (isMelee && runicPower >= 45 && ((WoW.PlayerHasBuff("Ossuary") && (runicPower >= 85 || WoW.HealthPercent < 80)) || WoW.HealthPercent < 50)) { WoW.CastSpell("Death Strike"); return; } if (isMelee && currentRunes >= 2 && bonesStack <= 6) { WoW.CastSpell("Marrowrend"); return; } if (WoW.SpellCooldownTimeRemaining("DnD") == 0 && isMelee && currentRunes >= 2 && WoW.TargetHealthPercent >= 10 && !renewBones && bonesStack > 6) { WoW.CastSpell("DnD"); return; } if (isMelee && currentRunes >= 2 && !renewBones && bonesStack > 6) { WoW.CastSpell("Heart Strike"); return; } if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee) { WoW.CastSpell("Blood Boil"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && WoW.TargetIsVisible) { if (isCDDefEnable) { useCDDef(); } if ((renewBones || bonesStack < 3) && isMelee) { if (currentRunes >= 2) { WoW.CastSpell("Marrowrend"); return; } } if (WoW.CanCast("Blood Boil", true, true, false, true, true) && isMelee && !WoW.TargetHasDebuff("Blood Plague")) { WoW.CastSpell("Blood Boil"); return; } if (isTalentBloodDrinker && CanCastInRange("BD") && WoW.HealthPercent <= 60 && !renewBones && currentRunes >= 1) { WoW.CastSpell("BD"); return; } if (CanCastNoRange("Consumption") && isMelee) { WoW.CastSpell("Consumption"); return; } if (isMelee && WoW.PlayerHasBuff("Crimson Scourge") && WoW.TargetHealthPercent >= 10) { WoW.CastSpell("DnD"); return; } if (isTalentBoneStorm && WoW.SpellCooldownTimeRemaining("Bonestorm") == 0 && isMelee && runicPower >= 100) { WoW.CastSpell("Bonestorm"); return; } if (isTalentBoneStorm && isMelee && runicPower >= 45 && ((runicPower >= 85 && WoW.SpellCooldownTimeRemaining("Bonestorm") >= 300) || WoW.HealthPercent < 70 || WoW.HealthPercent < 50)) { WoW.CastSpell("Death Strike"); return; } if (!isTalentBoneStorm && isMelee && runicPower >= 45 && (runicPower >= 85 || WoW.HealthPercent < 70)) { WoW.CastSpell("Death Strike"); return; } if (WoW.SpellCooldownTimeRemaining("DnD") == 0 && isMelee && currentRunes >= 1 && WoW.TargetHealthPercent >= 10 && !renewBones && bonesStack > 2) { WoW.CastSpell("DnD"); return; } if (isMelee && currentRunes >= 1 && !renewBones && bonesStack > 2) { WoW.CastSpell("Heart Strike"); return; } if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee) { WoW.CastSpell("Blood Boil"); return; } if (isTalentBloodDrinker && CanCastInRange("BD") && !renewBones && currentRunes >= 1) { WoW.CastSpell("BD"); } } } }
public override void Pulse() { if (!WoW.InGame) { return; } if (WoW.TankId == 0) { string currentTalents = WoW.Talent(1) + "" + WoW.Talent(2) + "" + WoW.Talent(3) + "" + WoW.Talent(4) + "" + WoW.Talent(5) + "" + WoW.Talent(6) + "" + WoW.Talent(7); if (supportedTalents != currentTalents) { MessageBox.Show("You are not using the supported talents " + supportedTalents + ", your currnet talents are " + currentTalents + ".", "Frozen", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { Log.Write("Talents are correct", Color.Green); } if (!WoW.PlayerHasBuff("Beacon of Faith") && !WoW.PlayerHasBuff("Beacon of Light") && WoW.CanCast("Beacon of Faith")) { WoW.CastSpellOnMe("Beacon of Faith"); } var f = new frmEnterTankId { TopMost = true }; f.ShowDialog(); } if (WoW.PlayerHealthPercent == 0 || WoW.IsMounted) { return; } if (WoW.PlayerIsCasting) { return; } var lowest = WoW.PartyLowestHealthPercent; int currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent; if (WoW.PartyMemberIsNeedingADispel != 0) { currentTargetId = WoW.PartyMemberIsNeedingADispel; } if (currentTargetId == 0) { return; } if (lowest == 100) { return; } var averageHp = WoW.PartyAverageHealthPercent; if (WoW.PlayerHealthPercent < 10 && WoW.IsInCombat && WoW.CanCast("Divine Shield") && !WoW.PlayerHasDebuff("Forbearance")) { WoW.CastSpell("Divine Shield"); } if (averageHp < 80 && WoW.CanCast("Aura Mastery")) { WoW.CastSpell("Aura Mastery"); } if (averageHp < 60 && WoW.CanCast("Avenging Wrath") && !WoW.PlayerHasBuff("Aura Mastery")) { WoW.CastSpell("Avenging Wrath"); } WoW.TargetMember(currentTargetId); // Target the lowest health party member if (WoW.PartyMemberIsNeedingADispel != 0 && WoW.CanCast("Cleanse")) { WoW.CastSpell("Cleanse"); return; } // Beacon of Light or Beacon of Virtue(if selected) maintain on your primary target at all times. if (WoW.Talent(7) == 3) { if (WoW.TankHealth > 50 && averageHp > 90 && WoW.CanCast("Beacon of Virtue") && WoW.TankId == currentTargetId && !WoW.TargetHasBuff("Beacon of Virtue")) { WoW.CastSpell("Beacon of Virtue"); } } if (WoW.Talent(7) == 1) { if (WoW.CanCast("Beacon of Light") && WoW.TankId == currentTargetId && !WoW.TargetHasBuff("Beacon of Light")) { WoW.CastSpell("Beacon of Light"); } } if (WoW.CanCast("Lay On Hands") && lowest <= 20 && // Use LOH if tanks health < 20 % !WoW.TargetHasDebuff("Forbearance") && // Make sure we dont LOH a tank with forbearance debuff WoW.TankId == currentTargetId) // Make sure we only use LOH on tank { WoW.CastSpell("Lay On Hands"); return; } if (WoW.CanCast("Blessing of Sacrifice") && lowest <= 30 && WoW.TankId == currentTargetId && !WoW.TargetHasBuff("Shield Wall Oto")) { WoW.CastSpell("Blessing of Sacrifice"); return; } // Holy Shock use on cooldown to generate Infusion of Light procs. // Consume Infusion of Light procs using the appropriate heal before your next Holy Shock. if (WoW.CanCast("Holy Shock") && !WoW.PlayerHasBuff("Infusion of Light")) { WoW.CastSpell("Holy Shock"); return; } if (WoW.Talent(5) == 3) { if (WoW.CanCast("Holy Prism") && WoW.TankId == currentTargetId && WoW.IsInCombat) { WoW.CastSpell("Holy Prism"); return; } } // Bestow Faith on cooldown (if selected). // Judgment to maintain the buff from Judgment of Light (if selected). // Light of the Martyr a potent emergency heal as long as you have health to spare. if (WoW.CanCast("Light of the Martyr") && lowest <= 40 && WoW.PlayerHealthPercent >= 70) { WoW.CastSpell("Light of the Martyr"); return; } // Flash of Light use as an emergency heal to save players facing death. if (WoW.CanCast("Flash of Light") && lowest <= 50 && !WoW.IsMoving) { WoW.CastSpell("Flash of Light"); return; } // Holy Light use to heal moderate to high damage. if (WoW.CanCast("Holy Light") && lowest <= 90 && !WoW.IsMoving) { WoW.CastSpell("Holy Light"); return; } if (WoW.CanCast("Tyr's Deliverance") && !WoW.IsMoving) { WoW.TargetNearestEnemy(); if (WoW.HasTarget && WoW.TargetIsEnemy) { WoW.CastSpell("Tyr's Deliverance"); } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.CanCast("Summon Water Elemental") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.HasPet) { WoW.CastSpell("Summon Water Elemental"); return; } if (WoW.HasTarget && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Invisibility")) { //Movement Control if (WoW.CanCast("Ice Floes") && WoW.IsMoving && !WoW.PlayerHasBuff("Ice Floes")) { WoW.CastSpell("Ice Floes"); } //Insta-Cast Flurry on Proc and ice lance for shatter. if (WoW.CanCast("Flurry") && WoW.PlayerHasBuff("Brain Freeze")) { WoW.CastSpell("Flurry"); } if (WoW.CanCast("Ice Lance") && WoW.WasLastCasted("Flurry") && WoW.PlayerHasBuff("Icy Veins")) { WoW.CastSpell("Ice Lance"); } //RoP Control if (WoW.CanCast("Rune of Power") && !WoW.PlayerHasBuff("Rune of Power") && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 120) { WoW.CastSpell("Rune of Power"); return; } //Ray of Frost control if (WoW.CanCast("Ray of Frost") && WoW.PlayerHasBuff("Rune of Power") && WoW.PlayerSpellCharges("Rune of Power") == 0 && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 60) { WoW.CastSpell("Ray of Frost"); } // FoF Creation if (WoW.PlayerBuffStacks("Chain Reaction") >= 1 && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 30 && !WoW.WasLastCasted("Flurry")) { if (WoW.CanCast("Frozen Orb") && !WoW.IsSpellOnCooldown("Frozen Orb") && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 60) { WoW.CastSpell("Frozen Orb"); } if (WoW.CanCast("Frozen Touch") && WoW.PlayerBuffStacks("Fingers of Frost") <= 1 && WoW.IsSpellOnCooldown("Frozen Orb") && !WoW.WasLastCasted("Frozen Orb")) { WoW.CastSpell("Frozen Touch"); } if (WoW.CanCast("Ebonbolt") && !WoW.PlayerHasBuff("Fingers of Frost") && !WoW.PlayerHasBuff("Brain Freeze") && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 45) { WoW.CastSpell("Ebonbolt"); return; } //Waterjet on cooldown within parameters if (WoW.CanCast("Water Jet") && WoW.PlayerBuffStacks("Fingers of Frost") <= 1 && !WoW.WasLastCasted("Frozen Touch") && !WoW.WasLastCasted("Frozen Orb") && WoW.IsSpellOnCooldown("Frozen Orb") && WoW.IsSpellOnCooldown("Frozen Touch")) { WoW.CastSpell("Water Jet"); } if (WoW.CanCast("Frostbolt") && WoW.TargetHasDebuff("Water Jet")) { WoW.CastSpell("Frostbolt"); return; } } //Ice Lance Control if (WoW.CanCast("Ice Lance") && WoW.WasLastCasted("Frostbolt") && WoW.PlayerHasBuff("Chain Reaction") && WoW.PlayerBuffStacks("Chain Reaction") >= 1 && WoW.PlayerHasBuff("Fingers of Frost") && WoW.PlayerBuffStacks("Fingers of Frost") >= 2) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Fingers of Frost") == 3) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Fingers of Frost") >= 1 && WoW.WasLastCasted("Ice Lance")) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && !WoW.PlayerHasBuff("Brain Freeze") && WoW.WasLastCasted("Flurry")) { WoW.CastSpell("Ice Lance"); } if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Chain Reaction") >= 1 && WoW.PlayerHasBuff("Fingers of Frost") && WoW.PlayerBuffStacks("Fingers of Frost") >= 1) { WoW.CastSpell("Ice Lance"); return; } //Frostbolt Control if (!WoW.PlayerHasBuff("Brain Freeze") && !WoW.WasLastCasted("Flurry")) { if (WoW.CanCast("Frostbolt") && !WoW.PlayerHasBuff("Fingers of Frost") && !WoW.WasLastCasted("Frostbolt")) { WoW.CastSpell("Frostbolt"); return; } if (WoW.CanCast("Frostbolt") && WoW.PlayerBuffStacks("Chain Reaction") <= 2 && !WoW.WasLastCasted("Frostbolt")) { WoW.CastSpell("Frostbolt"); return; } if (WoW.CanCast("Frostbolt") && WoW.PlayerHasBuff("Chain Reaction") && WoW.PlayerBuffStacks("Chain Reaction") == 3 && WoW.PlayerBuffTimeRemaining("Chain Reaction") <= 2) { WoW.CastSpell("Frostbolt"); return; } } //Frost Bomb - i dont use //if ((WoW.CanCast("Frost Bomb")&&WoW.PlayerHasBuff("Fingers of Frost")&&WoW.PlayerBuffStacks("Fingers of Frost") == 2)&&!WoW.TargetHasDebuff("Frost Bomb")&&!WoW.WasLastCasted("Ice Lance")&&!WoW.WasLastCasted("Rune of Power")) // { // WoW.CastSpell("Frost Bomb"); // return; // } } } if (combatRoutine.Type == RotationType.AOE) { if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } } }
public override void Pulse() // Updated for Legion (tested and working for single target) { if (WoW.IsInCombat && Control.IsKeyLocked(Keys.Scroll) && !WoW.TargetIsPlayer && !WoW.IsMounted) { SelectRotation(4, 9999, 1); } if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted) { if ((!WoW.TargetHasDebuff("Agony") || WoW.TargetDebuffTimeRemaining("Agony") <= 540) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Agony") <= 150) && WoW.CanCast("Agony") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Agony"); return; } if ((WoW.CurrentSoulShards >= 3 || (WoW.CurrentSoulShards >= 2 && WoW.WasLastCasted("Unstable Affliction"))) && !WoW.IsMoving && WoW.CanCast("Unstable Affliction") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Unstable Affliction"); Thread.Sleep(200); return; } if ((WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction2") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction3") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction3") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction4") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.PlayerBuffStacks("Reap Souls") >= 12) && !WoW.PlayerIsCasting && WoW.CanCast("Reap Souls") && !WoW.PlayerHasBuff("Deadwind Harvester") && WoW.PlayerHasBuff("Tormented Souls")) { WoW.CastSpell("Reap Souls"); return; } if (WoW.CanCast("Life Tap") && !WoW.PlayerIsChanneling && WoW.Talent(2) == 3 && !WoW.PlayerHasBuff("Empowered Life Tap")) { WoW.CastSpell("Life Tap"); return; } if ((!WoW.TargetHasDebuff("Corruption") || WoW.TargetDebuffTimeRemaining("Corruption") <= 420) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Corruption") <= 150) && WoW.CanCast("Corruption") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Corruption"); return; } if ((!WoW.TargetHasDebuff("Siphon Life") || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 420) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 150) && WoW.Talent(4) == 1 && WoW.CanCast("Siphon Life") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Siphon Life"); return; } if (WoW.CanCast("Felhunter") && WoW.Talent(6) == 2 && !WoW.IsSpellOnCooldown("Felhunter") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting) { WoW.CastSpell("Felhunter"); return; } if (WoW.CanCast("Unstable Affliction") && !WoW.IsMoving && WoW.Talent(2) == 1 && !WoW.IsMoving && WoW.IsSpellInRange("Unstable Affliction") && !WoW.PlayerIsChanneling && WoW.CurrentSoulShards >= 1 && (!WoW.TargetHasDebuff("Unstable Affliction1") || !WoW.TargetHasDebuff("Unstable Affliction2") || !WoW.TargetHasDebuff("Unstable Affliction3") || !WoW.TargetHasDebuff("Unstable Affliction4") || !WoW.TargetHasDebuff("Unstable Affliction5") || (WoW.TargetDebuffTimeRemaining("Unstable Affliction1") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction2") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction3") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction4") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction5") <= 150))) { WoW.CastSpell("Unstable Affliction"); Thread.Sleep(200); return; } if (WoW.IsInCombat && WoW.Mana < 70 && WoW.HealthPercent > 70 && WoW.CanCast("Life Tap")) { WoW.CastSpell("Life Tap"); return; } if (WoW.CanCast("Haunt") && WoW.Talent(1) == 1 && !WoW.IsSpellOnCooldown("Haunt") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving) { WoW.CastSpell("Haunt"); return; } if (WoW.CanCast("Drain Soul") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving) { WoW.CastSpell("Drain Soul"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMounted) // Do AOE stuff here { if (WoW.CanCast("Agony") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Agony") || (WoW.TargetDebuffTimeRemaining("Agony") <= 540))) { WoW.CastSpell("Agony"); return; } if (WoW.CanCast("Corruption") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Corruption") || (WoW.TargetDebuffTimeRemaining("Corruption") <= 420))) { WoW.CastSpell("Corruption"); return; } if (WoW.CanCast("Seed of Corruption") && WoW.IsSpellInRange("Agony") && !WoW.TargetHasDebuff("Seed of Corruption") && !WoW.IsMoving && WoW.CurrentSoulShards >= 1) { WoW.CastSpell("Seed of Corruption"); return; } } } if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } }
public override void Pulse() { if (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("Shadow Blades") && WoW.Cooldown && WoW.HasBuff("Symbols of Death")) * { * * WoW.CastSpellByName("Shadow Blades"); * return; * } */ /* if(WoW.CanCast("Goremaw's Bite") && WoW.CurrentComboPoints <= 3 && WoW.IsSpellInRange("Goremaw's Bite")) * { * * WoW.CastSpellByName("Goremaw's Bite"); * 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.SingleTargetCleave) // 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("Shadow Blades") && WoW.Cooldown && WoW.HasBuff("Symbols of Death")) * { * * WoW.CastSpellByName("Shadow Blades"); * return; * } */ /* if(WoW.CanCast("Goremaw's Bite") && WoW.CurrentComboPoints <= 3 && WoW.IsSpellInRange("Goremaw's Bite")) * { * * WoW.CastSpellByName("Goremaw's Bite"); * 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"); } } } }
/// <summary> /// Do the rotation. /// </summary> private void doRotation(bool isSingleTarget = true) { bool ignoreMovement = WoW.PlayerHasBuff(SURRENDER_MADNESS); if (WoW.Insanity >= 70 || WoW.PlayerHasBuff(VOIDFORM_AURA)) { //Expend insanity in voidform. if (WoW.HasTarget && !WoW.PlayerHasBuff(VOIDFORM_AURA)) { castWithRangeCheck(VOID_ERUPTION); } else { //If we can, cast it. castWithRangeCheck(VOID_BOLT); //Cast it. if (calculateInsanityDrain() > (WoW.Insanity - 35)) { castWithRangeCheck(VOID_TORRENT, ignoreMovement); } //If the boss health is at or below our set threshold SW:D if (WoW.TargetHealthPercent <= HEALTH_PERCENT_FOR_SWD) { if (WoW.PlayerSpellCharges(SHADOW_DEATH) == 2 && WoW.Insanity <= 70) { //If we have 2 charges, always cast castWithRangeCheck(SHADOW_DEATH); } else if (WoW.PlayerSpellCharges(SHADOW_DEATH) == 1) { //If we have 1 charge, only cast if at high insanity and mindblast is off CD or extremely low insanity if ((WoW.Insanity > PANIC_INSANITY_VALUE && !(WoW.IsSpellOnCooldown(MIND_BLAST) || WoW.IsSpellOnCooldown(VOID_BOLT))) || WoW.Insanity <= calculateInsanityDrain()) { castWithRangeCheck(SHADOW_DEATH); } } } if (WoW.Insanity <= 40 && !WoW.PlayerHasBuff(POWER_INFUSION)) { castWithRangeCheck(POWER_INFUSION, false, false); } //Cast shadowfiend if we have more than 15 stacks of voidform aura. if (WoW.PlayerBuffStacks(VOIDFORM_AURA) >= 15) { castWithRangeCheck(SHADOW_FIEND); } //If we can, cast it. castWithRangeCheck(MIND_BLAST); if (!isPlayerBusy(ignoreChanneling: false)) { //Always fill with mind flay on single target. castWithRangeCheck(MIND_FLAY); } } } else { //Build up insanity if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.TargetIsVisible) { //If we can, cast mind blast. if (castWithRangeCheck(MIND_BLAST)) { return; } //If we don't have anything else to do, cast Mind flay. if (!isPlayerBusy(ignoreChanneling: false)) { castWithRangeCheck(MIND_FLAY); } } } }
public override void Pulse() // Updated for Legion (tested and working for single target) { if (WoW.CanCast("Healthstone") && WoW.ItemCount("Healthstone") >= 1 && !WoW.ItemOnCooldown("Healthstone") && WoW.HealthPercent <= 60 && WoW.HealthPercent != 0 && WoW.IsInCombat) { WoW.CastSpell("Healthstone"); return; } if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted) { if ((!WoW.TargetHasDebuff("Agony") || WoW.TargetDebuffTimeRemaining("Agony") <= 540) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Agony") <= 150) && WoW.CanCast("Agony") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Agony"); return; } if ((WoW.CurrentSoulShards >= 3 || (WoW.CurrentSoulShards >= 2 && WoW.WasLastCasted("Unstable Affliction"))) && !WoW.IsMoving && WoW.CanCast("Unstable Affliction") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Unstable Affliction"); Thread.Sleep(200); return; } if ((WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction2") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction3") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction3") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction4") || WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.TargetHasDebuff("Unstable Affliction4") && WoW.TargetHasDebuff("Unstable Affliction5") || WoW.PlayerBuffStacks("Reap Souls") >= 12) && !WoW.PlayerIsCasting && WoW.CanCast("Reap Souls") && !WoW.PlayerHasBuff("Deadwind Harvester") && WoW.PlayerHasBuff("Tormented Souls") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Reap Souls"); return; } if (WoW.CanCast("Phantom") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Phantom"); return; } /*if (WoW.IsSpellInRange("Agony") && WoW.CanCast("Trinket") &&!WoW.ItemOnCooldown("Trinket") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) * { * WoW.CastSpell("Trinket"); * return; * }*/ if (WoW.CanCast("Berserk") && UseCooldowns && !WoW.IsSpellOnCooldown("Berserk") && WoW.PlayerRace == "Troll") { WoW.CastSpell("Berserk"); return; } if (WoW.CanCast("Life Tap") && !WoW.PlayerIsChanneling && WoW.Talent(2) == 3 && !WoW.PlayerHasBuff("Empowered Life Tap")) { WoW.CastSpell("Life Tap"); return; } if ((!WoW.TargetHasDebuff("Corruption") || WoW.TargetDebuffTimeRemaining("Corruption") <= 420) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Corruption") <= 150) && WoW.CanCast("Corruption") && WoW.IsSpellInRange("Agony")) { WoW.CastSpell("Corruption"); return; } if ((!WoW.TargetHasDebuff("Siphon Life") || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 420) && (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 150) && WoW.Talent(4) == 1 && WoW.CanCast("Siphon Life") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Siphon Life"); return; } if (WoW.CanCast("Unstable Affliction") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption") && !WoW.IsMoving && WoW.Talent(2) == 1 && !WoW.IsMoving && WoW.IsSpellInRange("Unstable Affliction") && !WoW.PlayerIsChanneling && WoW.CurrentSoulShards >= 1 && (!WoW.TargetHasDebuff("Unstable Affliction1") || !WoW.TargetHasDebuff("Unstable Affliction2") || !WoW.TargetHasDebuff("Unstable Affliction3") || !WoW.TargetHasDebuff("Unstable Affliction4") || !WoW.TargetHasDebuff("Unstable Affliction5") || (WoW.TargetDebuffTimeRemaining("Unstable Affliction1") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction2") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction3") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction4") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction5") <= 150))) { WoW.CastSpell("Unstable Affliction"); Thread.Sleep(200); return; } if (WoW.IsInCombat && WoW.Mana < 70 && WoW.HealthPercent > 70 && WoW.CanCast("Life Tap")) { WoW.CastSpell("Life Tap"); return; } if (WoW.CanCast("Drain Soul") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Drain Soul"); return; } } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMounted) // Do AOE stuff here { if (WoW.CanCast("Agony") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Agony") || (WoW.TargetDebuffTimeRemaining("Agony") <= 540))) { WoW.CastSpell("Agony"); return; } if (WoW.CanCast("Corruption") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Corruption") || (WoW.TargetDebuffTimeRemaining("Corruption") <= 420))) { WoW.CastSpell("Corruption"); return; } if (WoW.CanCast("Seed of Corruption") && WoW.IsSpellInRange("Agony") && !WoW.TargetHasDebuff("Seed of Corruption") && !WoW.IsMoving && WoW.CurrentSoulShards >= 1 && !WoW.WasLastCasted("Seed of Corruption")) { WoW.CastSpell("Seed of Corruption"); return; } if (WoW.CanCast("Drain Soul") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption")) { WoW.CastSpell("Drain Soul"); return; } } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) { //Heal if not in combat if (!WoW.IsInCombat && WoW.HealthPercent <= 95 & WoW.Energy >= 30 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { //WoW.SendMacro("/cast [@player] Effuse"); return; } //Sanity Checks if (WoW.PlayerIsChanneling) { return; } if (!WoW.HasTarget) { return; } if (!WoW.TargetIsEnemy) { return; } if (WoW.PlayerIsCasting) { return; } if (!WoW.IsInCombat) { return; } } //Cooldown saves if (WoW.HealthPercent <= 85 && WoW.PlayerSpellCharges("Healing Elixir") > 0 && !WoW.IsSpellOnCooldown("Healing Elixir")) { WoW.CastSpell("Healing Elixir"); return; } //Interrupts or Damage negation if (WoW.TargetIsCasting && WoW.CanCast("Spear Hand Strike") && !WoW.IsSpellOnCooldown("Spear Hand Strike") && WoW.IsSpellInRange("Spear Hand Strike")) { WoW.CastSpell("Spear Hand Strike"); return; } //Leg Sweep to open, or mitigate damage if (WoW.CanCast("Leg Sweep") && !WoW.IsSpellOnCooldown("Leg Sweep") && WoW.IsSpellInRange("Tiger Palm")) { WoW.CastSpell("Leg Sweep"); return; } //Look for Expel Harm Charges.. if 3 and health low then hit if (WoW.PlayerSpellCharges("Expel Harm") >= 3 && WoW.HealthPercent <= 75 && WoW.Energy >= 15) { WoW.CastSpell("Expel Harm"); return; } //If Target is almost dead, and we have Expel Harm charges use up -- we don't want to leave it if (WoW.TargetHealthPercent <= 10 && WoW.PlayerSpellCharges("Expel Harm") != 100 && WoW.CanCast("Expel Harm") && !WoW.IsSpellOnCooldown("Expel Harm") && WoW.Energy >= 15) { Log.Write(string.Format("Expel Harm Count {0}", WoW.PlayerSpellCharges("Expel Harm"))); WoW.CastSpell("Expel Harm"); return; } //Maintain Eye of the Tiger if (!WoW.PlayerHasBuff("Eye of the Tiger") && !WoW.IsSpellOnCooldown("Tiger Palm") && WoW.IsSpellInRange("Tiger Palm")) { WoW.CastSpell("Tiger Palm"); return; } //Breath of fire if Vulnerable if (WoW.TargetHasDebuff("Keg Smash") && !WoW.TargetHasDebuff("Breath of Fire") && WoW.CanCast("Breath of Fire") && !WoW.IsSpellOnCooldown("Breath of Fire")) { WoW.CastSpell("Breath of Fire"); return; } if (!WoW.TargetHasDebuff("Keg Smash") && WoW.CanCast("Keg Smash") && !WoW.IsSpellOnCooldown("Keg Smash") && WoW.Energy >= 40) { WoW.CastSpell("Keg Smash"); return; } //Energy dump if High if (WoW.Energy >= 65 && WoW.CanCast("Tiger Palm") && !WoW.IsSpellOnCooldown("Tiger Palm") && WoW.IsSpellInRange("Tiger Palm")) { WoW.CastSpell("Tiger Palm"); return; } //if Ironskin count = 3 and in Melee range (or we cast too early as we approach) if (WoW.PlayerSpellCharges("Ironskin Brew") >= 2 && !WoW.PlayerHasBuff("Ironskin Brew") && WoW.IsSpellInRange("Tiger Palm")) { _ironSkinFired = true; WoW.CastSpell("Ironskin Brew"); return; } if (_ironSkinFired && !WoW.PlayerHasBuff("Ironskin Brew")) { _ironSkinFired = false; if (WoW.PlayerSpellCharges("Purifying Brew") >= 1) { WoW.CastSpell("Purifying Brew"); return; } } //if We Can Cast Exploding Keg and in Melee range then do so if (WoW.CanCast("Exploding Keg") && !WoW.IsSpellOnCooldown("Exploding Keg") && WoW.IsSpellInRange("Tiger Palm")) { //WoW.SendMacro("/cast [@player] Exploding Keg"); return; } //TODO NEED F*****g ability to detect staggers so we can use our spare Purifying Brew here.. We are not //Optimized until this behavior exists. We need to use it, then pop Fortifying Brew if (WoW.CanCast("Blackout Strike") && !WoW.IsSpellOnCooldown("Blackout Strike") && WoW.IsSpellInRange("Tiger Palm")) { WoW.CastSpell("Blackout Strike"); } if (WoW.CanCast("Tiger Palm") && !WoW.IsSpellOnCooldown("Tiger Palm") && WoW.IsSpellInRange("Tiger Palm") && WoW.TargetHasDebuff("Keg Smash")) { WoW.CastSpell("Tiger Palm"); } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted) { if (WoW.PlayerHasBuff("Metamorphosis")) { if (WoW.CanCast("Nemesis") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("Nemesis"); return; } if (WoW.CanCast("Chaos Blades") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("Chaos Blades"); return; } if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("FOTI"); return; } if (WoW.CanCast("Death Sweep") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 15) { WoW.CastSpell("Death Sweep"); return; } if (WoW.CanCast("Felblade") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury < 100) { WoW.CastSpell("Felblade"); //Felblade only at melee range to not make worse (if you need to gtfo) return; } if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.IsSpellInRange("Chaos Strike") && (DetectKeyPress.GetKeyState(0x5A) < 0)) { WoW.CastSpell("Eye Beam"); //Use Eyebeam by Z press return; } if (WoW.CanCast("Annihilation") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 55) { WoW.CastSpell("Annihilation"); return; } //if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator //{ // WoW.CastSpell("Demons Bite"); // return; //} if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive")) { WoW.CastSpell("Throw Glaive"); return; } } if (combatRoutine.UseCooldowns) { if (WoW.CanCast("Nemesis") && WoW.IsSpellInRange("Chaos Strike") && UseCooldowns) { WoW.CastSpell("Nemesis"); return; } if (WoW.CanCast("Chaos Blades") && WoW.IsSpellInRange("Chaos Strike") && UseCooldowns) { WoW.CastSpell("Chaos Blades"); return; } if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("FOTI"); return; } } if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("FOTI"); return; } if (WoW.CanCast("Blade Dance") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 15) { WoW.CastSpell("Blade Dance"); return; } if (WoW.CanCast("Felblade") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury < 100) { WoW.CastSpell("Felblade"); //Felblade only at melee range to not make worse (if you need to gtfo) return; } if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.IsSpellInRange("Chaos Strike") && (DetectKeyPress.GetKeyState(0x5A) < 0)) { WoW.CastSpell("Eye Beam"); //Use Eyebeam by Z press return; } if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") && (WoW.Fury >= 70 || (WoW.Fury >= 55 && (WoW.PlayerHasBuff("Chaos Blades") || WoW.SpellCooldownTimeRemaining("Nemesis") >= 60)))) { WoW.CastSpell("Chaos Strike"); //If we got damage buffs - spent fury on CS instantly (15 save for Blade Dance) return; } if (WoW.CanCast("Blur") && WoW.IsInCombat && 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 (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive")) { WoW.CastSpell("Throw Glaive"); 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("FOTI") && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("FOTI"); return; } if (WoW.CanCast("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") == 5 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) && WoW.IsSpellInRange("Fel Barrage")) { WoW.CastSpell("Fel Barrage"); return; } if (WoW.CanCast("Death Sweep") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 15) { WoW.CastSpell("Death Sweep"); return; } if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("Eye Beam"); 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("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") >= 4 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) && WoW.IsSpellInRange("Fel Barrage")) { WoW.CastSpell("Fel Barrage"); return; } //if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator //{ // WoW.CastSpell("Demons Bite"); // return; //} if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && WoW.PlayerHasBuff("Momentum")) { WoW.CastSpell("Throw Glaive"); return; } } if (WoW.CanCast("FOTI") && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("FOTI"); return; } if (WoW.CanCast("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") == 5 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) && WoW.IsSpellInRange("Fel Barrage")) { WoW.CastSpell("Fel Barrage"); return; } if (WoW.CanCast("Blade Dance") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 15) { WoW.CastSpell("Blade Dance"); return; } if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") > 1) && WoW.IsSpellInRange("Chaos Strike")) { WoW.CastSpell("Eye Beam"); 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("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") >= 4 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) && WoW.IsSpellInRange("Fel Barrage")) { WoW.CastSpell("Fel Barrage"); return; } if (WoW.CanCast("Blur") && WoW.IsInCombat && 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 (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && WoW.PlayerHasBuff("Momentum")) { WoW.CastSpell("Throw Glaive"); } } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (!WoW.PlayerHasBuff("Battle Cry")) { if (WoW.TargetHealthPercent > 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { if (WoW.CanCast("Focused Rage") && WoW.WasLastCasted("Charge")) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Focused Rage") && WoW.WasLastCasted("Colossus Smash")) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Focused Rage") && WoW.Rage >= 105) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Mortal Strike") && !WoW.IsSpellOnCooldown("Mortal Strike")) { WoW.CastSpell("Mortal Strike"); return; } if (WoW.CanCast("Slam") && WoW.Rage >= 32 && WoW.IsSpellOnCooldown("Colossus Smash") && WoW.IsSpellOnCooldown("Mortal Strike")) { WoW.CastSpell("Slam"); return; } if (WoW.CanCast("Warbreaker") && !WoW.IsSpellOnCooldown("Battle Cry") && !WoW.TargetHasDebuff("Colossus Smash")) { WoW.CastSpell("Warbreaker"); return; } } if (WoW.TargetHealthPercent < 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { if (WoW.CanCast("Focused Rage") && WoW.WasLastCasted("Charge")) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Focused Rage") && WoW.Rage > 105) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Mortal Strike") && WoW.PlayerHasBuff("Focused Rage") && WoW.PlayerBuffStacks("Focused Rage") == 3) { WoW.CastSpell("Mortal Strike"); return; } if (WoW.CanCast("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Execute") && WoW.Rage == 18 && WoW.PlayerHasBuff("Precise Strikes")) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Execute") && WoW.Rage == 38 && !WoW.PlayerHasBuff("Precise Strikes")) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Slam") && WoW.Rage > 32 && WoW.IsSpellOnCooldown("Colossus Smash") && WoW.IsSpellOnCooldown("Mortal Strike")) { WoW.CastSpell("Slam"); return; } if (WoW.CanCast("Warbreaker") && !WoW.IsSpellOnCooldown("Battle Cry") && !WoW.TargetHasDebuff("Colossus Smash")) { WoW.CastSpell("Warbreaker"); return; } } } if (WoW.PlayerHasBuff("Battle Cry")) { if (WoW.TargetHealthPercent > 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { if (WoW.CanCast("Focused Rage") && WoW.PlayerBuffStacks("Focused Rage") < 3) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Mortal Strike") && WoW.PlayerHasBuff("Shattered Defenses") && !WoW.IsSpellOnCooldown("Mortal Strike") && WoW.PlayerBuffStacks("Focused Rage") == 3) { WoW.CastSpell("Mortal Strike"); return; } if (WoW.CanCast("Slam") && WoW.IsSpellOnCooldown("Colossus Smash") && WoW.IsSpellOnCooldown("Mortal Strike")) { WoW.CastSpell("Slam"); return; } } if (WoW.TargetHealthPercent < 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) { if (WoW.CanCast("Focused Rage") && WoW.PlayerBuffStacks("Focused Rage") < 3) { WoW.CastSpell("Focused Rage"); } if (WoW.CanCast("Colossus Smash") && !WoW.TargetHasDebuff("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash")) { WoW.CastSpell("Colossus Smash"); return; } if (WoW.CanCast("Mortal Strike") && !WoW.IsSpellOnCooldown("Mortal Strike") && (WoW.PlayerBuffStacks("Focused Rage") == 3)) { WoW.CastSpell("Mortal Strike"); return; } if (WoW.CanCast("Execute")) { WoW.CastSpell("Execute"); return; } } } } if (combatRoutine.Type == RotationType.AOE) { if (combatRoutine.Type == RotationType.SingleTargetCleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat && !WoW.IsMounted) //Pull need to do by yourself - to prevent a mess { if (WoW.CanCast("Metamorphosis") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Metamorphosis Usage Percent")) { Log.Write("Health low < set % using CDs...", Color.Red); WoW.CastSpell("Metamorphosis"); // Off the GCD no return needed } if (WoW.CanCast("Consume Magic") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Consume Magic"); return; } if (Bloodelf && WoW.CanCast("Arcane Torrent") && WoW.IsSpellOnCooldown("Consume Magic") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Arcane Torrent"); return; } if (WoW.CanCast("Sigil of Silence") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellOnCooldown("Consume Magic") && (WoW.IsSpellOnCooldown("Arcane Torrent") || !Bloodelf) && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Sigil of Silence"); return; } if (WoW.CanCast("Fiery Brand") && WoW.IsSpellInRange("Soul Carver") && !WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fiery Brand"); } if (WoW.CanCast("Soul Carver") && WoW.IsSpellInRange("Soul Carver") && WoW.SpellCooldownTimeRemaining("Fiery Brand") >= 10) { WoW.CastSpell("Soul Carver"); return; } if (WoW.CanCast("Spirit Bomb") && WoW.Level >= 108 && WoW.IsSpellInRange("Soul Carver") && WoW.PlayerHasBuff("Soul Fragments") && !WoW.TargetHasDebuff("Frailty")) { WoW.CastSpell("Spirit Bomb"); return; } if (WoW.CanCast("Sigil of Flame") && WoW.IsSpellInRange("Soul Carver") && WoW.TargetHasDebuff("Fiery Demise") && WoW.TargetDebuffTimeRemaining("Fiery Demise") >= 7) { WoW.CastSpell("Sigil of Flame"); return; } if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10 && WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Soul Barrier") && WoW.Level >= 110 && WoW.Pain >= 10 && WoW.PlayerHasBuff("Soul Fragments") && WoW.PlayerBuffStacks("Soul Fragments") >= 4) { WoW.CastSpell("Soul Barrier"); return; } if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && (WoW.Pain >= 92 || WoW.HealthPercent < 90 && WoW.Pain >= 20)) // to not waste cd and pain { WoW.CastSpell("Demon Spikes"); } if (WoW.IsSpellInRange("Soul Carver")) { if (WoW.CanCast("Soul Cleave") && ((WoW.Pain >= 30 && WoW.HealthPercent < 25) || (WoW.Pain >= 80 && WoW.HealthPercent < 50 && !WoW.CanCast("Demon Spikes")) || (WoW.Pain >= 60 && WoW.HealthPercent < 50 && WoW.PlayerHasBuff("Demon Spikes")))) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Fracture") && ((WoW.Pain >= 30 && WoW.HealthPercent >= 50 && WoW.PlayerHasBuff("Demon Spikes")) || (WoW.Pain >= 80 && WoW.HealthPercent >= 50 && !WoW.CanCast("Demon Spikes")))) { WoW.CastSpell("Fracture"); return; } if (WoW.CanCast("Immolation Aura")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Sigil of Flame")) { WoW.CastSpell("Sigil of Flame"); return; } } if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Sever") && WoW.IsSpellInRange("Soul Carver") && WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator { WoW.CastSpell("Sever"); return; } if (WoW.CanCast("Shear") && WoW.IsSpellInRange("Soul Carver") && !WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator { WoW.CastSpell("Shear"); return; } if (WoW.CanCast("Throw Glaive") && !WoW.IsSpellInRange("Soul Carver") && WoW.IsSpellInRange("Throw Glaive")) //Need to implement range 30y for Throw Glaive spell 204157 { WoW.CastSpell("Throw Glaive"); return; } } } if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.SingleTargetCleave) { if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat) //Pull need to do by yourself - to prevent a mess { if (WoW.CanCast("Metamorphosis") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Metamorphosis Usage Percent")) { //Log.Write("Metamorphosis"); Log.Write("Health low < set % using CDs...", Color.Red); WoW.CastSpell("Metamorphosis"); // Off the GCD no return needed } if (WoW.CanCast("Consume Magic") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Consume Magic"); return; } if (Bloodelf && WoW.CanCast("Arcane Torrent") && WoW.IsSpellOnCooldown("Consume Magic") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Arcane Torrent"); return; } if (WoW.CanCast("Sigil of Silence") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellOnCooldown("Consume Magic") && (WoW.IsSpellOnCooldown("Arcane Torrent") || !Bloodelf) && WoW.IsSpellInRange("Soul Carver")) { WoW.CastSpell("Sigil of Silence"); return; } if (WoW.CanCast("Fiery Brand") && WoW.IsSpellInRange("Soul Carver") && !WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fiery Brand"); } if (WoW.CanCast("Soul Carver") && WoW.IsSpellInRange("Soul Carver") && WoW.SpellCooldownTimeRemaining("Fiery Brand") >= 10) { WoW.CastSpell("Soul Carver"); return; } if (WoW.CanCast("Spirit Bomb") && WoW.Level >= 108 && WoW.IsSpellInRange("Soul Carver") && WoW.PlayerHasBuff("Soul Fragments") && !WoW.TargetHasDebuff("Frailty")) { WoW.CastSpell("Spirit Bomb"); return; } if (WoW.CanCast("Sigil of Flame") && WoW.IsSpellInRange("Soul Carver") && WoW.TargetHasDebuff("Fiery Demise") && WoW.TargetDebuffTimeRemaining("Fiery Demise") >= 7) { WoW.CastSpell("Sigil of Flame"); return; } if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10 && WoW.TargetHasDebuff("Fiery Demise")) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Soul Barrier") && WoW.Level >= 110 && WoW.Pain >= 10 && WoW.PlayerHasBuff("Soul Fragments") && WoW.PlayerBuffStacks("Soul Fragments") >= 4) { WoW.CastSpell("Soul Barrier"); return; } if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && (WoW.Pain >= 92 || WoW.HealthPercent < 90 && WoW.Pain >= 20)) // to not waste cd and pain { WoW.CastSpell("Demon Spikes"); } if (WoW.IsSpellInRange("Soul Carver")) { if (WoW.CanCast("Soul Cleave") && ((WoW.Pain >= 30 && WoW.HealthPercent < 25) || (WoW.Pain >= 80 && !WoW.CanCast("Demon Spikes")) || (WoW.Pain >= 60 && WoW.PlayerHasBuff("Demon Spikes")))) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Immolation Aura")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Sigil of Flame")) { WoW.CastSpell("Sigil of Flame"); return; } } if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10) { WoW.CastSpell("Fel Eruption"); return; } if (WoW.CanCast("Sever") && WoW.IsSpellInRange("Soul Carver") && WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator { WoW.CastSpell("Sever"); return; } if (WoW.CanCast("Shear") && WoW.IsSpellInRange("Soul Carver") && !WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator { WoW.CastSpell("Shear"); return; } if (WoW.CanCast("Throw Glaive") && !WoW.IsSpellInRange("Soul Carver") && WoW.IsSpellInRange("Throw Glaive")) //Need to implement range 30y for Throw Glaive spell 204157 { WoW.CastSpell("Throw Glaive"); return; } } } }
public override void Pulse() { if (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 void BreathRotation() { hasBreath = WoW.PlayerHasBuff("Breath"); if (combatRoutine.UseCooldowns && isCheckHotkeysFrostOffensivePillarofFrost && !WoW.IsSpellOnCooldown("PillarofFrost") && hasBreath && WoW.Level >= 57) { WoW.CastSpell("PillarofFrost"); } if (combatRoutine.UseCooldowns && isCheckHotkeysFrostOffensivePillarofFrost && !WoW.IsSpellOnCooldown("PillarofFrost") && !hasBreath && WoW.SpellCooldownTimeRemaining("Breath") >= 5900 && WoW.Level >= 57) { WoW.CastSpell("PillarofFrost"); } if ((haveCoF || useNextHRWCharge) && isCheckHotkeyslegyring && haveHRW && runicPower <= 30 && isCheckHotkeysFrostOffensiveErW && combatRoutine.UseCooldowns && !WoW.PlayerHasBuff("HEmpower Rune") && !WoW.IsSpellOnCooldown("HEmpower Rune") && hasBreath && legyringtest == true && WoW.Level >= 58) { useNextHRWCharge = false; WoW.CastSpell("HEmpower Rune"); legyringtest = false; } if ((haveCoF || useNextHRWCharge) && !isCheckHotkeyslegyring && haveHRW && runicPower <= 30 && isCheckHotkeysFrostOffensiveErW && combatRoutine.UseCooldowns && !WoW.PlayerHasBuff("HEmpower Rune") && !WoW.IsSpellOnCooldown("HEmpower Rune") && hasBreath && WoW.Level >= 58) { useNextHRWCharge = false; WoW.CastSpell("HEmpower Rune"); } if (isCheckHotkeyslegyring && !WoW.PlayerHasBuff("Breath")) { legyringtest = true; } if ((haveCoF || useNextHRWCharge) && !haveHRW && runicPower <= 50 && currentRunes <= 1 && isCheckHotkeysFrostOffensiveErW && combatRoutine.UseCooldowns && !WoW.IsSpellOnCooldown("HEmpower Rune") && hasBreath && WoW.Level >= 57) { WoW.CastSpell("Empower Rune"); } if (combatRoutine.UseCooldowns && isMelee && currentRunes >= 2 && runicPower >= 70 && CanCastNoRange("Breath") && WoW.Level >= 100) { WoW.CastSpell("Breath"); useNextHRWCharge = true; return; } if (combatRoutine.UseCooldowns && isMelee && runicPower >= 70 && CanCastNoRange("Breath")) { return; } if (!WoW.TargetHasDebuff("Frost Fever") && currentRunes >= 1 && !hasBreath && CanCastInRange("Howling Blast") && !WoW.IsSpellOnCooldown("Howling Blast") && WoW.Level >= 55) { WoW.CastSpell("Howling Blast"); return; } if (isMelee && currentRunes >= 1 && WoW.Level >= 57 && ((runicPower >= 48 && hasBreath) || !hasBreath) && (!combatRoutine.UseCooldowns || (combatRoutine.UseCooldowns && WoW.SpellCooldownTimeRemaining("Breath") >= 1500)) && CanCastNoRange("Remorseless Winter")) { WoW.CastSpell("Remorseless Winter"); return; } if (((runicPower >= 46 && hasBreath) || !hasBreath) && CanCastInRange("Howling Blast") && WoW.PlayerHasBuff("Rime") && WoW.Level >= 55) { WoW.CastSpell("Howling Blast"); return; } if (WoW.Talent(6) != 1 && isMelee && currentRunes >= 2 && !hasBreath && WoW.PlayerHasBuff("Gathering Storm") && WoW.Level >= 55) { WoW.CastSpell("Obliterate"); return; } if (runicPower >= 70 && !hasBreath && CanCastInRange("Frost Strike")) { WoW.CastSpell("Frost Strike"); return; } if (WoW.Talent(6) == 1 && CanCastInRange("Frost Strike") && currentRunes >= 1 && WoW.PlayerHasBuff("Killing Machine") && !hasBreath && WoW.Level >= 90) { WoW.CastSpell("Frostscythe"); return; } if (isMelee && currentRunes >= 2 && WoW.Level >= 55 && (!hasBreath || (hasBreath && (runicPower <= 70 || hasBreath && currentRunes > 3)))) { WoW.CastSpell("Obliterate"); return; } if (runicPower >= 25 && CanCastInRange("Frost Strike") && !hasBreath && (!combatRoutine.UseCooldowns || (combatRoutine.UseCooldowns && WoW.SpellCooldownTimeRemaining("Breath") >= 1500))) { WoW.CastSpell("Frost Strike"); return; } if (WoW.Talent(2) == 3 && currentRunes <= 4 && runicPower <= 70 && WoW.Level >= 57 && CanCastNoRange("Horn") && !WoW.PlayerHasBuff("HEmpower Rune") && (hasBreath || (!hasBreath && WoW.SpellCooldownTimeRemaining("Breath") >= 1500))) { WoW.CastSpell("Horn"); } if (isMelee && WoW.HealthPercent <= 40 && WoW.PlayerHasBuff("Free DeathStrike") && !hasBreath && WoW.Level >= 55) { WoW.CastSpell("Death Strike"); return; } }
public override void Pulse() { Log.Write("Mana: " + WoW.Mana, Color.Red); if (WoW.TankId == 0) { var f = new frmEnterTankId { TopMost = true }; f.ShowDialog(); } if (WoW.PlayerHealthPercent == 0 || WoW.IsMounted) { return; } if (WoW.PlayerIsCasting) { return; } var lowest = WoW.PartyLowestHealthPercent; var currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent; var averageHp = WoW.PartyAverageHealthPercent; WoW.TargetMember(currentTargetId); if (currentTargetId == 0) { return; } if (lowest == 100) { return; } if (WoW.GroupSize == 5) { Log.Write($"Lowest Health Target = [/target party{currentTargetId}] health = {averageHp}"); } else { Log.Write($"Lowest Health Target = [/target raid{currentTargetId}] health = {averageHp}"); } if (lowest < 85 && !WoW.IsSpellOnCooldown("ThunderFocusTea")) { WoW.CastSpell("ThunderFocusTea"); } if (WoW.PlayerHasBuff("ThunderFocusTea")) { if (averageHp < 70 && WoW.CanCast("EssenceFont") && !WoW.IsSpellOnCooldown("EssenceFont") && !WoW.PlayerHasBuff("EssenceFont")) { WoW.CastSpell("EssenceFont"); } if (averageHp < 90 && WoW.CanCast("Vivify") && !WoW.IsSpellOnCooldown("Vivify")) { WoW.CastSpell("Vivify"); } } if (WoW.IsInCombat && WoW.Mana <= 70 && !WoW.IsSpellOnCooldown("Manatea")) { WoW.CastSpell("Manatea"); return; } if (WoW.CanCast("RenewingMist") && WoW.IsInCombat && !WoW.TargetHasBuff("RenewingMist") && !WoW.PlayerHasBuff("RenewingMist") && !WoW.IsSpellOnCooldown("RenewingMist")) { WoW.CastSpell("RenewingMist"); return; } if (UseCooldowns) { if (lowest > 90) { if (WoW.CanCast("RSK") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat) { WoW.CastSpell("RSK"); return; } if (WoW.CanCast("BlackoutKick") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && WoW.PlayerBuffStacks("BlackoutBuff") == 3) { WoW.CastSpell("BlackoutKick"); return; } if (WoW.CanCast("Tiger") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && WoW.PlayerBuffStacks("BlackoutBuff") < 3) { WoW.CastSpell("Tiger"); return; } } } if (WoW.CanCast("Revival") && averageHp < 65 && !WoW.IsSpellOnCooldown("Revival")) { WoW.CastSpell("Revival"); return; } if (WoW.CanCast("LifeCocoon") && lowest <= 25 && !WoW.IsSpellOnCooldown("LifeCocoon")) { WoW.CastSpell("LifeCocoon"); return; } if (averageHp < 75) { if (WoW.CanCast("InvokeChiJitheRedCrane") && !WoW.IsSpellOnCooldown("InvokeChiJitheRedCrane")) { WoW.CastSpell("InvokeChiJitheRedCrane"); return; } if (WoW.CanCast("EssenceFont") && !WoW.IsSpellOnCooldown("EssenceFont") && !WoW.PlayerHasBuff("EssenceFont")) { WoW.CastSpell("EssenceFont"); return; } if (WoW.CanCast("Vivify")) { WoW.CastSpell("Vivify"); return; } } if (WoW.Level > 100) { if (WoW.CanCast("SheilunsGift") && lowest <= 75 && !WoW.IsMoving && WoW.PlayerSpellCharges("SheilunsGift") >= 4) { WoW.CastSpell("SheilunsGift"); return; } } if (WoW.CanCast("EnvelopingMist") && lowest <= 70 && !WoW.IsMoving && !WoW.TargetHasBuff("EnvelopingMist") && WoW.LastSpell != ("EnvelopingMist")) { WoW.CastSpell("EnvelopingMist"); return; } if (WoW.CanCast("Vivify") && lowest <= 65) { WoW.CastSpell("Vivify"); return; } if (WoW.CanCast("Effuse") && lowest <= 90 && !WoW.PlayerIsChanneling) { WoW.CastSpell("Effuse"); return; } if (WoW.CanCast("ChiWave") && lowest <= 90 && WoW.IsInCombat) { WoW.CastSpell("ChiWave"); return; } if (WoW.IsInCombat && WoW.Mana <= 70 && !WoW.IsSpellOnCooldown("Manatea")) { WoW.CastSpell("Manatea"); } }
public override void Pulse() { if (combatRoutine.Type == RotationType.SingleTarget) /* Singel Target Rotation*/ { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasTarget && WoW.IsInCombat && WoW.HealthPercent <= 20) /* Defensive Cooldowns */ { if (WoW.IsMoving && WoW.CanCast("UnendingResolve")) { WoW.CastSpell("UnendingResolve"); return; } if (!WoW.IsMoving && WoW.CanCast("UnendingResolve")) { WoW.CastSpell("UnendingResolve"); return; } if (!WoW.IsMoving && WoW.CanCast("DrainLife")) { WoW.CastSpell("DrainLife"); return; } } if (WoW.IsInCombat && Control.ModifierKeys == Keys.Shift && !WoW.PlayerIsCasting) /* Havoc on mouseover target, create macro to use: #showtooltip /cast [target=mouseover,harm,exists,nodead] Havoc; Havoc */ { WoW.CastSpell("Havoc"); return; } if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.IsMoving && WoW.IsInCombat) /* What to do when we are NOT moving */ { if (!WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.TargetHasDebuff("AuraImmolate")) { if (WoW.HasTarget && WoW.CanCast("DimRift") && WoW.PlayerSpellCharges("DimRift") == 3) { WoW.CastSpell("DimRift"); return; } if (!WoW.WasLastCasted("Immolate") && WoW.CanCast("Immolate")) { WoW.CastSpell("Immolate"); return; } } if (!WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.TargetHasDebuff("AuraImmolate")) { if (WoW.HasTarget && WoW.CanCast("DimRift") && WoW.PlayerSpellCharges("DimRift") == 3) { WoW.CastSpell("DimRift"); return; } if (WoW.TargetDebuffTimeRemaining("AuraImmolate") >= 10 && WoW.CanCast("Conflagrate")) { WoW.CastSpell("Conflagrate"); return; } if (WoW.TargetDebuffTimeRemaining("AuraImmolate") <= 4.2 && !WoW.WasLastCasted("Immolate") && WoW.CanCast("Immolate")) { WoW.CastSpell("Immolate"); return; } if (WoW.TargetDebuffTimeRemaining("AuraImmolate") >= 10 && WoW.PlayerSpellCharges("Conflagrate") == 1 && WoW.WasLastCasted("Conflagrate") && WoW.CanCast("Conflagrate")) { WoW.CastSpell("Conflagrate"); return; } if (WoW.PlayerHasBuff("AuraConflagrateBuff") && WoW.TargetHasDebuff("AuraChaosBolt") && WoW.CanCast("Conflagrate") && WoW.CurrentSoulShards <= 4 && WoW.CanCast("Conflagrate")) { WoW.CastSpell("Conflagrate"); return; } if (WoW.CanCast("Conflagrate") && WoW.PlayerSpellCharges("Conflagrate") == 2 && !WoW.WasLastCasted("Immolate") && WoW.CurrentSoulShards <= 4) { WoW.CastSpell("Conflagrate"); return; } if (WoW.HasTarget && WoW.CanCast("ServiceImp") && WoW.CurrentSoulShards >= 1) { WoW.CastSpell("ServiceImp"); return; } /* Summon Infernal on the target but its an AOE ground Spell. I'm not able to code that: */ /* Summon DoomGuard if LordOfFlames debuff is up*/ if (WoW.HasTarget && WoW.CanCast("DoomGuard")) /*Since I can't do the Infernal check, I just summon DoomGuard*/ { WoW.CastSpell("DoomGuard"); return; } if (WoW.CanCast("ChaosBolt") /* && !WoW.WasLastCasted("ChaosBolt") */ && WoW.CurrentSoulShards > 3) { WoW.CastSpell("ChaosBolt"); return; } if (WoW.HasTarget && WoW.CanCast("DimRift") && WoW.PlayerSpellCharges("DimRift") <= 2) { WoW.CastSpell("DimRift"); return; } if (WoW.CanCast("ChaosBolt") && WoW.CurrentSoulShards >= 2) { WoW.CastSpell("ChaosBolt"); return; } if (WoW.CanCast("Incinerate") && WoW.WasLastCasted("ChaosBolt") /*&& WoW.HasDebuff("AuraChaosBolt")*/) { WoW.CastSpell("Incinerate"); return; } if (WoW.CanCast("Incinerate") && WoW.CurrentSoulShards <= 1) { WoW.CastSpell("Incinerate"); return; } if (WoW.CanCast("Incinerate") && WoW.TargetHasDebuff("AuraChaosBolt") && WoW.TargetDebuffTimeRemaining("AuraChaosBolt") >= 2 && WoW.CurrentSoulShards <= 3) { WoW.CastSpell("Incinerate"); return; } } } if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsMoving && WoW.IsInCombat) /* What to do when we are moving */ { if (!WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.HasTarget && WoW.CanCast("DimRift")) { WoW.CastSpell("DimRift"); return; } if (!WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.CanCast("Conflagrate")) { WoW.CastSpell("Conflagrate"); } } } }
public override void Pulse() { if (interruptwatch.ElapsedMilliseconds == 0) { interruptwatch.Start(); return; } if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_F3) < 0) { if (interruptwatch.ElapsedMilliseconds > 1000) { autointerrupt = !autointerrupt; WoW.Speak("Interrupt " + (autointerrupt ? "On" : "Off")); Log.WritePixelMagic("Auto interrupt " + (autointerrupt ? "ON" : "OFF"), Color.Red); interruptwatch.Restart(); } } if (WoW.PlayerHasBuff("Mount")) { return; } if (WoW.IsInCombat && WoW.HealthPercent < 35 && WoW.CanCast("Last Stand") && !WoW.IsSpellOnCooldown("Last Stand")) { WoW.CastSpell("Last Stand"); return; } if (WoW.IsInCombat && WoW.HealthPercent < 20 && WoW.CanCast("Shield Wall") && !WoW.IsSpellOnCooldown("Shield Wall")) { WoW.CastSpell("Shield Wall"); return; } if (autointerrupt && WoW.IsInCombat && !WoW.IsSpellOnCooldown("Pummel") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Shield Slam") && WoW.TargetIsCasting && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 80) { WoW.CastSpell("Pummel"); return; } if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LCONTROL) < 0) { if (WoW.IsInCombat && !WoW.IsSpellOnCooldown("HeroicLeap")) { WoW.CastSpell("HeroicLeap"); return; } return; } if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_1) < 0) { if (WoW.IsInCombat && !WoW.IsSpellOnCooldown("Thunder Clap")) { WoW.CastSpell("Thunder Clap"); return; } return; } if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LMENU) < 0) { if (WoW.IsInCombat && !WoW.IsSpellOnCooldown("Shockwave")) { WoW.CastSpell("Shockwave"); return; } return; } if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.AOE) // Do Single Target Stuff here { if (CombatWatch.IsRunning && !WoW.IsInCombat) { CombatWatch.Reset(); } if (!CombatWatch.IsRunning && WoW.IsInCombat) { CombatWatch.Start(); } if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling) { if (!WoW.TargetHasDebuff("ShockWavestun") && WoW.IsInCombat) { if (WoW.CanCast("Shield Block") && WoW.Rage >= 15 && !WoW.PlayerIsChanneling && (WoW.PlayerSpellCharges("Shield Block") == 2 || (WoW.PlayerSpellCharges("Shield Block") >= 1 && WoW.HealthPercent < 100 && WoW.PlayerBuffTimeRemaining("ShieldBlockAura") <= 2) || WoW.PlayerSpellCharges("Shield Block") == 1 && WoW.HealthPercent < 100)) { WoW.CastSpell("Shield Block"); return; } if (WoW.IsSpellInRange("Shield Slam") && WoW.CanCast("Thunder Clap") && !WoW.IsSpellOnCooldown("Thunder Clap") && CombatWatch.ElapsedMilliseconds > 1000 && CombatWatch.ElapsedMilliseconds < 5000) { WoW.CastSpell("Thunder Clap"); return; } /* ------------------ IGNORE PAIN MANAGEMENT----------------------*/ if (WoW.CanCast("Ignore Pain") && WoW.PlayerHasBuff("Vengeance: Ignore Pain") && WoW.Rage >= 39) { WoW.CastSpell("Ignore Pain"); return; } if (WoW.CanCast("Ignore Pain") && WoW.Rage > 30 && WoW.HealthPercent < 100 && (!WoW.PlayerHasBuff("Ignore Pain") || WoW.PlayerBuffTimeRemaining("Ignore Pain") <= 2) && !WoW.PlayerHasBuff("Vengeance: Ignore Pain") && !WoW.PlayerHasBuff("Vengeance: Focused Rage")) { WoW.CastSpell("Ignore Pain"); return; } /* ------------------ END IGNORE PAIN MANAGEMENT-------------------*/ if (WoW.TargetIsCasting && WoW.CanCast("SpellReflect") && !WoW.IsSpellOnCooldown("SpellReflect")) { WoW.CastSpell("SpellReflect"); } if (WoW.IsSpellInRange("Shield Slam") && WoW.CanCast("Battle Cry") && !WoW.IsSpellOnCooldown("Battle Cry")) { WoW.CastSpell("Battle Cry"); return; } if (WoW.IsSpellInRange("Shield Slam") && WoW.CanCast("Shield Slam") && !WoW.IsSpellOnCooldown("Shield Slam") && WoW.PlayerHasBuff("Legendary")) { WoW.CastSpell("Shield Slam"); return; } if (WoW.IsSpellInRange("Shield Slam") && WoW.CanCast("Thunder Clap") && !WoW.IsSpellOnCooldown("Thunder Clap")) { WoW.CastSpell("Thunder Clap"); return; } if (WoW.CanCast("Revenge") && !WoW.IsSpellOnCooldown("Revenge") && WoW.IsSpellInRange("Shield Slam") && WoW.IsSpellOverlayed("Revenge") && !WoW.PlayerHasBuff("Vengeance: Ignore Pain")) { WoW.CastSpell("Revenge"); return; } if (WoW.CanCast("Revenge") && !WoW.IsSpellOnCooldown("Revenge") && WoW.IsSpellInRange("Shield Slam") && WoW.PlayerHasBuff("Vengeance: Focused Rage") && WoW.Rage > 59) { WoW.CastSpell("Revenge"); return; } if (WoW.CanCast("Revenge") && !WoW.IsSpellOnCooldown("Revenge") && WoW.IsSpellInRange("Shield Slam") && !WoW.PlayerHasBuff("Ignore Pain") && WoW.Rage > 35 && WoW.HealthPercent < 100) { WoW.CastSpell("Revenge"); return; } if (WoW.CanCast("Revenge") && !WoW.IsSpellOnCooldown("Revenge") && WoW.IsSpellInRange("Shield Slam") && WoW.PlayerHasBuff("Ignore Pain") && WoW.PlayerBuffTimeRemaining("Ignore Pain") <= 3 && WoW.Rage > 40 && WoW.HealthPercent < 100) { WoW.CastSpell("Revenge"); return; } if (WoW.CanCast("Revenge") && !WoW.IsSpellOnCooldown("Revenge") && WoW.IsSpellInRange("Shield Slam") && !WoW.PlayerHasBuff("Vengeance: Focused Rage") && !WoW.PlayerHasBuff("Vengeance: Ignore Pain") && WoW.Rage > 69) { WoW.CastSpell("Revenge"); return; } if (WoW.CanCast("Victory Rush") && !WoW.IsSpellOnCooldown("Victory Rush") && WoW.IsSpellInRange("Shield Slam") && WoW.HealthPercent < 90 && WoW.PlayerHasBuff("VictoryRush")) { WoW.CastSpell("Victory Rush"); return; } if (WoW.IsSpellInRange("Devastate") && WoW.CanCast("Devastate")) { WoW.CastSpell("Devastate"); return; } } if (WoW.CanCast("Neltharion's Fury") && WoW.TargetHasDebuff("ShockWavestun")) { WoW.CastSpell("Neltharion's Fury"); return; } /* actions.prot=spell_reflection,if=incoming_damage_2500ms>health.max*0.20 * actions.prot+=/demoralizing_shout,if=incoming_damage_2500ms>health.max*0.20&!talent.booming_voice.enabled * actions.prot+=/last_stand,if=incoming_damage_2500ms>health.max*0.40 * actions.prot+=/shield_wall,if=incoming_damage_2500ms>health.max*0.40&!cooldown.last_stand.remains=0 * actions.prot+=/potion,name=unbending_potion,if=(incoming_damage_2500ms>health.max*0.15&!buff.potion.up)|target.time_to_die<=25 * actions.prot+=/battle_cry,if=cooldown.shield_slam.remains=0 * actions.prot+=/demoralizing_shout,if=talent.booming_voice.enabled&buff.battle_cry.up * actions.prot+=/ravager,if=talent.ravager.enabled&buff.battle_cry.up * actions.prot+=/neltharions_fury,if=!buff.shield_block.up&cooldown.shield_block.remains>3&((cooldown.shield_slam.remains>3&talent.heavy_repercussions.enabled)|(!talent.heavy_repercussions.enabled)) * actions.prot+=/shield_block,if=!buff.neltharions_fury.up&((cooldown.shield_slam.remains=0&talent.heavy_repercussions.enabled)|action.shield_block.charges=2|!talent.heavy_repercussions.enabled) * actions.prot+=/ignore_pain,if=(rage>=60&!talent.vengeance.enabled)|(buff.vengeance_ignore_pain.up&rage>=39)|(talent.vengeance.enabled&!buff.vengeance_ignore_pain.up&!buff.vengeance_revenge.up&rage<30&!buff.revenge.react) * actions.prot+=/shield_slam,if=(!(cooldown.shield_block.remains<=gcd.max*2&!buff.shield_block.up)&talent.heavy_repercussions.enabled)|!talent.heavy_repercussions.enabled * actions.prot+=/thunder_clap * actions.prot+=/revenge,if=(talent.vengeance.enabled&buff.revenge.react&!buff.vengeance_ignore_pain.up)|(buff.vengeance_revenge.up&rage>=59)|(talent.vengeance.enabled&!buff.vengeance_ignore_pain.up&!buff.vengeance_revenge.up&rage>=69)|(!talent.vengeance.enabled&buff.revenge.react) * actions.prot+=/devastate */ } } if (combatRoutine.Type == RotationType.AOE) { // Do AOE Stuff here } }
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("Toxic Blade") && WoW.Energy >= 20 && !WoW.IsSpellOnCooldown("Toxic Blade") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote") && WoW.Talent(6) == 1) { WoW.CastSpell("Toxic Blade"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Exsanguinate") && WoW.Energy >= 25 && !WoW.IsSpellOnCooldown("Exsanguinate") && WoW.IsSpellInRange("Garrote") && WoW.Talent(6) == 3) { WoW.CastSpell("Exsanguinate"); 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.PlayerHasBuff("Vanish") && WoW.CanCast("Toxic Blade") && WoW.Energy >= 20 && !WoW.IsSpellOnCooldown("Toxic Blade") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote") && WoW.Talent(6) == 1) { WoW.CastSpell("Toxic Blade"); return; } if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Exsanguinate") && WoW.Energy >= 25 && !WoW.IsSpellOnCooldown("Exsanguinate") && WoW.IsSpellInRange("Garrote") && WoW.Talent(6) == 3) { WoW.CastSpell("Exsanguinate"); 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 (!coolDownStopWatch.IsRunning || coolDownStopWatch.ElapsedMilliseconds > 60000) { coolDownStopWatch.Restart(); } if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_MULTIPLY) < 0) //Use cooldowns manage by *numButton { if (coolDownStopWatch.ElapsedMilliseconds > 1000) { combatRoutine.UseCooldowns = !combatRoutine.UseCooldowns; //Log.Write("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 (WoW.PlayerHealthPercent <= 1) { return; } //Heal yourself, Can't do damage if you're dead. if (WoW.PlayerHealthPercent <= 60) { if (isPlayerBusy(true, false) && !WoW.PlayerHasBuff(POWER_WORD_SHIELD)) { castWithRangeCheck(POWER_WORD_SHIELD); } castWithRangeCheck(SHADOW_MEND); } //Shield if health is dropping. if (WoW.PlayerHealthPercent <= 80 && !WoW.PlayerHasBuff(POWER_WORD_SHIELD)) { castWithRangeCheck(POWER_WORD_SHIELD, true); } //Always have shadowform. if (!(WoW.PlayerHasBuff(SHADOWFORM_AURA) || WoW.PlayerHasBuff(VOIDFORM_AURA))) { castWithRangeCheck(SHADOWFORM); } if (WoW.HasTarget && WoW.TargetIsEnemy) { if (!WoW.PlayerHasBuff(VOIDFORM_AURA)) { //Just so happens that the spell and debuff name are the same, this is not ALWAYS the case. maintainDebuff(VAMPIRIC_TOUCH, VAMPIRIC_TOUCH, 5); maintainDebuff(SHADOW_PAIN, SHADOW_PAIN, 2); } else { maintainDebuff(VAMPIRIC_TOUCH, VAMPIRIC_TOUCH, WoW.SpellCooldownTimeRemaining(VOID_BOLT)); maintainDebuff(SHADOW_PAIN, SHADOW_PAIN, WoW.SpellCooldownTimeRemaining(VOID_BOLT)); } switch (combatRoutine.Type) { //Single target case RotationType.SingleTarget: doRotation(); break; //Against 2 or more case RotationType.AOE: case RotationType.Cleave: doRotation(); break; } } //Interrupt after a delay. if (WoW.TargetIsCasting && WoW.TargetIsEnemy) { if (timer.ElapsedMilliseconds >= INTERRUPT_DELAY) { castWithRangeCheck(SILENCE); } else { timer.Reset(); timer.Start(); } } }
public override void Pulse() // Updated for Legion (tested and working for single target) { AddonCreationPulse(); PlayerStats(); AoEStuff(); if (WoW.IsInCombat && !WoW.PlayerHasBuff("Mount")) { SelectRotation(); } //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.PlayerHasBuff("Mount") && WoW.HealthPercent != 0) { WoW.CastSpell("Healthstone"); WoW.CastSpell("Potion"); return; } //Exhilaration if (WoW.CanCast("Exhilaration") && WoW.HealthPercent <= 20 && !WoW.PlayerHasBuff("Mount") && !WoW.PlayerHasBuff("Feign Death") && WoW.HealthPercent != 0) { WoW.CastSpell("Exhilaration"); return; } //Call pet if (!WoW.HasPet && !WoW.PlayerHasBuff("Mount") && !WoW.PlayerHasBuff("Feign Death") && WoW.HealthPercent != 0) { WoW.CastSpell("Call Pet"); return; } //Revive Pet if ((!WoW.HasPet || WoW.PetHealthPercent < 1) && !WoW.PlayerHasBuff("Mount") && !WoW.PlayerHasBuff("Feign Death") && WoW.HealthPercent != 0) { WoW.CastSpell("Heart of the Phoenix"); WoW.CastSpell("Revive Pet"); return; } //Voley if (WoW.CanCast("Voley") && !WoW.PlayerHasBuff("Feign Death") && !WoW.PlayerHasBuff("Voley") && WoW.HealthPercent != 0 && CharInfo.T6 == 3) { WoW.CastSpell("Voley"); return; } if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerHasBuff("Mount") && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Feign Death") && WoW.HealthPercent != 0) { //Stampede if (DetectKeyPress.GetKeyState(DetectKeyPress.Shift) < 0 && WoW.CanCast("Stampede") && CharInfo.T7 == 1) { WoW.CastSpell("Stampede"); return; } //Intimidation //Binding Shot if (DetectKeyPress.GetKeyState(DetectKeyPress.Ctrl) < 0 && ((WoW.CanCast("Intimidation") && CharInfo.T5 == 3) || (WoW.CanCast("Binding Shot") && CharInfo.T5 == 1))) { WoW.CastSpell("Binding Shot"); WoW.CastSpell("Intimidation"); return; } //Cooldowns if (UseCooldowns) { //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") >= 12) { WoW.CastSpell("Aspect of the Wild"); return; } } //Legendary Trinket if (WoW.CanCast("Kil'jaeden's Burning Wish") && (((WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 15 && WoW.SpellCooldownTimeRemaining("Dire Beast") > 5)) || WoW.PlayerHasBuff("Bestial Wrath")) && !WoW.ItemOnCooldown("Kil'jaeden's Burning Wish") && WoW.IsSpellInRange("Cobra Shot")) { WoW.CastSpell("Kil'jaeden's Burning Wish"); } //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 >= 110)) { WoW.CastSpell("Bestial Wrath"); WoW.CastSpell("Kill Command"); if (WoW.CanCast("A Murder of Crows") && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T6 == 1 && WoW.Focus >= 30) { WoW.CastSpell("A Murder of Crows"); } return; } //A Murder of Crows if (combatRoutine.Type == RotationType.SingleTarget && WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 23 && WoW.CanCast("A Murder of Crows") && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T6 == 1 && WoW.Focus >= 25) { WoW.CastSpell("A Murder of Crows"); return; } //Kill Command if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Kill Command") && WoW.Focus >= 100) { WoW.CastSpell("Kill Command"); return; } // Dire beast if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Dire Beast") && WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 3 && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T2 != 2) { WoW.CastSpell("Dire Beast"); WoW.CastSpell("Titan's Thunder"); return; } //Dire Frenzy if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Dire Frenzy") && WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 6 && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T2 == 2) { WoW.CastSpell("Titan's Thunder"); WoW.CastSpell("Dire Frenzy"); return; } //Kill Command if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Kill Command") && (WoW.SpellCooldownTimeRemaining("Bestial Wrath") - WoW.SpellCooldownTimeRemaining("Kill Command") > 2 || (WoW.SpellCooldownTimeRemaining("Bestial Wrath") >= 23 && WoW.SpellCooldownTimeRemaining("Dire Beast") - WoW.SpellCooldownTimeRemaining("Kill Command") > 2)) && WoW.Focus >= 25) { WoW.CastSpell("Kill Command"); return; } //Chimaera Shot if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Chimaera Shot") && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T2 == 3 && WoW.Focus < 90) { WoW.CastSpell("Chimaera Shot"); return; } //Cobra Shot if (combatRoutine.Type == RotationType.SingleTarget && ((WoW.Focus >= 110) || (WoW.PlayerHasBuff("Bestial Wrath") && (WoW.Focus >= 40))) && 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") > 3 && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T2 != 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") > 6 && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T2 == 2) { WoW.CastSpell("Dire Frenzy"); WoW.CastSpell("Titan's Thunder"); return; } //Barrage if (combatRoutine.Type == RotationType.AOE && WoW.CanCast("Barrage") && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T6 == 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") && CharInfo.T2 == 3 && WoW.Focus < 80) { WoW.CastSpell("Chimaera Shot"); return; } //CLEAVE //A Murder of Crows if (combatRoutine.Type == RotationType.SingleTarget && WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 23 && WoW.CanCast("A Murder of Crows") && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T6 == 1 && WoW.Focus >= 25) { WoW.CastSpell("A Murder of Crows"); return; } //Multishot - Beast Cleave uptime if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("Multi-Shot") && (!WoW.PetHasBuff("BeastCleave") || WoW.PetBuffTimeRemaining("BeastCleave") <= 1) && WoW.IsSpellInRange("Multi-Shot") && !WoW.CanCast("Bestial Wrath") && WoW.Focus >= 40) { WoW.CastSpell("Multi-Shot"); return; } // Dire beast if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("Dire Beast") && WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 3 && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T2 != 2) { WoW.CastSpell("Dire Beast"); WoW.CastSpell("Titan's Thunder"); return; } //Dire Frenzy if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("Dire Frenzy") && WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 6 && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T2 == 2) { WoW.CastSpell("Dire Frenzy"); WoW.CastSpell("Titan's Thunder"); return; } //Barrage if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("Barrage") && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T6 == 2 && (WoW.Focus >= 60)) { WoW.CastSpell("Barrage"); return; } //Kill Command if (combatRoutine.Type == RotationType.SingleTarget && WoW.CanCast("Kill Command") && (WoW.SpellCooldownTimeRemaining("Bestial Wrath") - WoW.SpellCooldownTimeRemaining("Kill Command") > 2 || (WoW.SpellCooldownTimeRemaining("Bestial Wrath") >= 23 && WoW.SpellCooldownTimeRemaining("Dire Beast") - WoW.SpellCooldownTimeRemaining("Kill Command") > 2)) && WoW.Focus >= 25) { WoW.CastSpell("Kill Command"); return; } //Chimaera Shot if (combatRoutine.Type == RotationType.SingleTargetCleave && WoW.CanCast("Chimaera Shot") && WoW.IsSpellInRange("Cobra Shot") && CharInfo.T2 == 3 && WoW.Focus < 80) { WoW.CastSpell("Chimaera Shot"); return; } //Cobra Shot if (combatRoutine.Type == RotationType.SingleTargetCleave && ((WoW.Focus >= 110) || (WoW.PlayerHasBuff("Bestial Wrath") && (WoW.Focus >= 40))) && 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.PetHealthPercent <= 70 && !WoW.PlayerHasBuff("Feign Death")) { WoW.CastSpell("Mend Pet"); return; } } }
public override void Pulse() { if (WoW.IsInCombat) { interruptwatch.Start(); } // if (WoW.HasBuff("Mount")) return; // COOLDOWNS if (WoW.IsInCombat && WoW.TargetIsEnemy && WoW.IsSpellInRange("Rebuke")) { if (SeraphimBoss && !WoW.IsSpellOnCooldown("Seraphim") && WoW.PlayerSpellCharges("Shield of the Righteous") >= 2 && WoW.HealthPercent >= 80) { Log.Write("Seraphim", Color.Red); WoW.CastSpell("Seraphim"); return; } if (WoW.PlayerSpellCharges("Shield of the Righteous") == 3) { Log.Write("SoTR 3 Stacks, casting SoTR.", Color.Red); WoW.CastSpell("Shield of the Righteous"); return; } if (WoW.PlayerHasBuff("Shield of the Righteous") && WoW.PlayerBuffTimeRemaining("Shield of the Righteous") <= 1.5) { Log.Write("SoTR remaining under 1.5seconds on target, cast SoTR.", Color.Red); WoW.CastSpell("Shield of the Righteous"); return; } if (WoW.PlayerSpellCharges("Shield of the Righteous") >= 1 && WoW.HealthPercent <= 80 && (!WoW.PlayerHasBuff("Shield of the Righteous") || WoW.PlayerBuffTimeRemaining("Shield of the Righteous") <= 1.5)) { Log.Write("SoTR 1+ Stack and Health under 80%.", Color.Red); WoW.CastSpell("Shield of the Righteous"); return; } if (WoW.CanCast("Eye of Tyr") && !WoW.IsSpellOnCooldown("Eye of Tyr") && WoW.HealthPercent <= 60) { Log.Write("Health under 60%, casting Eye of Tyr.", Color.Red); WoW.CastSpell("Eye of Tyr"); return; } if (WoW.CanCast("Ardent Defender") && !WoW.IsSpellOnCooldown("Ardent Defender") && WoW.HealthPercent <= 10) { Log.Write("Health Critical casting Ardent Defender.", Color.Red); WoW.CastSpell("Ardent Defender"); return; } if (WoW.CanCast("Guardian of the Ancient Kings") && !WoW.IsSpellOnCooldown("Guardian of the Ancient Kings") && WoW.HealthPercent <= 30) { Log.Write("Health low casting GoAK.", Color.Red); WoW.CastSpell("Guardian of the Ancient Kings"); return; } if (WoW.CanCast("Lay on Hands") && !WoW.IsSpellOnCooldown("Lay on Hands") && WoW.HealthPercent <= 20) { Log.Write("Health low casting LoH.", Color.Red); WoW.CastSpell("Lay on Hands"); return; } if (WoW.TargetIsCasting && interruptwatch.ElapsedMilliseconds > 1500) { // if (!WoW.IsSpellOnCooldown("Rebuke")) // { // WoW.CastSpellByName("Rebuke"); // interruptwatch.Reset(); // interruptwatch.Start(); // return; // } if (!WoW.IsSpellOnCooldown("Avenger's Shield") && !WoW.IsSpellOnGCD("Avenger's Shield")) { WoW.CastSpell("Avenger's Shield"); interruptwatch.Reset(); interruptwatch.Start(); return; } } } // SINGLE if (combatRoutine.Type == RotationType.SingleTarget) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Rebuke")) //GCD and Melee range Check { // Hand of the Protector under 60% health if (HotPBoss && WoW.CanCast("Hand of the Protector") && !WoW.IsSpellOnCooldown("Hand of the Protector") && WoW.HealthPercent <= 60) { Log.Write("Health under 60%, Hand of Protector.", Color.Red); WoW.CastSpell("Hand of the Protector"); return; } // Light of the Protector under 60% health if (!HotPBoss && WoW.CanCast("Light of the Protector") && !WoW.IsSpellOnCooldown("Light of the Protector") && WoW.HealthPercent <= 60) { Log.Write("Health under 60%, Light of Protector.", Color.Red); WoW.CastSpell("Light of the Protector"); return; } // Cast Hammer if max stacks if (BlessedHammerBoss && WoW.CanCast("Blessed Hammer") && WoW.PlayerSpellCharges("Blessed Hammer") >= 3 && !WoW.IsSpellOnGCD("Blessed Hammer")) { Log.Write("Blessed Hammer max stacks, casting Blessed Hammer.", Color.Red); WoW.CastSpell("Blessed Hammer"); return; } // Cast Hammer if (!BlessedHammerBoss && WoW.CanCast("Hammer of the Righteous") && WoW.PlayerSpellCharges("Hammer of the Righteous") >= 1 && !WoW.IsSpellOnGCD("Hammer of the Righteous")) { Log.Write("Hammer of the Righteous.", Color.Red); WoW.CastSpell("Hammer of the Righteous"); return; } // Judgement on Cooldown if (WoW.CanCast("Judgement") && !WoW.IsSpellOnGCD("Judgement")) { WoW.CastSpell("Judgement"); return; } // Consecration on cooldown if (WoW.CanCast("Consecration") && !WoW.IsSpellOnGCD("Consecration") && !WoW.TargetHasDebuff("Consecration")) { Log.Write("Consecration debuff not active, casting Consecration.", Color.Red); WoW.CastSpell("Consecration"); return; } // Avenger's Shield on cooldown if (WoW.CanCast("Avenger's Shield") && !WoW.IsSpellOnGCD("Avenger's Shield")) { WoW.CastSpell("Avenger's Shield"); return; } // Cast Blessed Hammer at 1 + stacks if (BlessedHammerBoss && WoW.CanCast("Blessed Hammer") && WoW.PlayerSpellCharges("Blessed Hammer") >= 1 && !WoW.IsSpellOnGCD("Blessed Hammer") && !WoW.TargetHasDebuff("Blessed Hammer")) { Log.Write("Nothing to do, casting Blessed Hammer.", Color.Red); WoW.CastSpell("Blessed Hammer"); return; } } } // AOE/CLEAVE if (combatRoutine.Type == RotationType.AOE) // AoE/Cleave { if (WoW.HasTarget && WoW.TargetIsEnemy) // { // Hand of the Protector under 60% health if (HotPBoss && WoW.CanCast("Hand of the Protector") && !WoW.IsSpellOnCooldown("Hand of the Protector") && WoW.HealthPercent <= 60) { Log.Write("Health under 60%, Hand of Protector.", Color.Red); WoW.CastSpell("Hand of the Protector"); return; } // Light of the Protector under 60% health if (!HotPBoss && WoW.CanCast("Light of the Protector") && !WoW.IsSpellOnCooldown("Light of the Protector") && WoW.HealthPercent <= 60) { Log.Write("Health under 60%, Light of Protector.", Color.Red); WoW.CastSpell("Light of the Protector"); return; } if (WoW.PlayerSpellCharges("Blessed Hammer") >= 3 && !WoW.IsSpellOnGCD("Blessed Hammer")) // Cast Hammer if max stacks { WoW.CastSpell("Blessed Hammer"); return; } if (WoW.CanCast("Avenger's Shield") && !WoW.IsSpellOnGCD("Avenger's Shield")) // Avenger's Shield on cooldown { WoW.CastSpell("Avenger's Shield"); return; } if (WoW.CanCast("Consecration") && !WoW.IsSpellOnGCD("Consecration") && !WoW.TargetHasDebuff("Consecration")) // Consecration on cooldown { Log.Write("Consecration debuff not active, casting Consecration.", Color.Red); WoW.CastSpell("Consecration"); return; } if (WoW.CanCast("Blessed Hammer") && // Cast Hammer at 1 + stacks WoW.PlayerSpellCharges("Blessed Hammer") >= 1 && !WoW.IsSpellOnGCD("Blessed Hammer")) { Log.Write("AoE, casting Blessed Hammer.", Color.Red); WoW.CastSpell("Blessed Hammer"); return; } if (WoW.CanCast("Judgement") && !WoW.IsSpellOnGCD("Judgement")) // Judgement on Cooldown { WoW.CastSpell("Judgement"); } } } }
// Pulse Rotation public override void Pulse() { if (WoW.CanCast("Moonkin Form") && !WoW.PlayerHasBuff("Moonkin Form") && WoW.HasTarget && WoW.TargetIsEnemy && !WoW.IsMounted && !WoW.PlayerHasBuff("Travel Form") && !WoW.PlayerHasBuff("Bear Form") && !WoW.PlayerHasBuff("Cat Form")) { WoW.CastSpell("Moonkin Form"); return; } if (WoW.CanCast("Celestial Alignment") && WoW.HasBossTarget && WoW.IsInCombat || WoW.CanCast("Celestial Alignment") && WoW.IsInCombat && UseCooldowns) { WoW.CastSpell("Celestial Alignment"); return; } if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here { Log.Write("Doing Singletarget", Color.Red); if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat) { if (WoW.CanCast("Solar Beam") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast > 35) { WoW.CastSpell("Solar Beam"); return; } if (WoW.CanCast("Starsurge") && WoW.CurrentAstralPower > 70) { WoW.CastSpell("Starsurge"); return; } if (WoW.CanCast("Moonfire") && !WoW.TargetHasDebuff("Moonfire") || WoW.TargetDebuffTimeRemaining("Moonfire") < 300) { WoW.CastSpell("Moonfire"); return; } if (WoW.CanCast("Sunfire") && !WoW.TargetHasDebuff("Sunfire") && WoW.LastSpell != "Sunfire" || WoW.TargetDebuffTimeRemaining("Sunfire") < 300) { WoW.CastSpell("Sunfire"); return; } if (WoW.CanCast("Lunar Strike") && WoW.LastSpell != "Lunar Strike" && WoW.PlayerBuffTimeRemaining("Lunar Empowerment") > GCD && !WoW.IsMoving || WoW.CanCast("Lunar Strike") && WoW.PlayerBuffTimeRemaining("Lunar Empowerment") > GCD && !WoW.IsMoving && WoW.PlayerBuffStacks("Lunar Empowerment") >= 2) { WoW.CastSpell("Lunar Strike"); return; } if (WoW.CanCast("Solar Wrath") && WoW.PlayerBuffTimeRemaining("Solar Empowerment") > GCD && !WoW.IsMoving || WoW.CanCast("Solar Wrath") && WoW.CurrentAstralPower < 85 && !WoW.IsMoving || WoW.CanCast("Solar Wrath") && WoW.PlayerBuffTimeRemaining("Solar Empowerment") > GCD && !WoW.IsMoving && WoW.PlayerBuffStacks("Solar Empowerment") >= 2) { WoW.CastSpell("Solar Wrath"); return; } if (WoW.CanCast("Rejuv") && WoW.HealthPercent < 85 && !WoW.PlayerHasBuff("Rejuv") && !WoW.IsMounted && !WoW.PlayerHasBuff("Travel Form")) { WoW.CastSpell("Rejuv"); return; } if (WoW.CanCast("Regrowth") && WoW.HealthPercent < 50 && !WoW.IsMoving) { WoW.CastSpell("Regrowth"); return; } } } if (combatRoutine.Type == RotationType.SingleTargetCleave) { } if (combatRoutine.Type == RotationType.AOE) { Log.Write("Doing AOE", Color.Red); if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat) { if (WoW.CanCast("Starfall") && !WoW.PlayerHasBuff("Starfall") && WoW.CurrentAstralPower > 85) { //WoW.CastSpell("Starfall"); WoW.CastSpellOnMe("Starfall"); return; } if (WoW.CanCast("Starsurge") && WoW.CurrentAstralPower > 40) { WoW.CastSpell("Starsurge"); return; } if (WoW.CanCast("Moonfire") && !WoW.TargetHasDebuff("Moonfire") || WoW.TargetDebuffTimeRemaining("Moonfire") < 300) { WoW.CastSpell("Moonfire"); return; } if (WoW.CanCast("Sunfire") && !WoW.TargetHasDebuff("Sunfire") || WoW.TargetDebuffTimeRemaining("Sunfire") < 300) { WoW.CastSpell("Sunfire"); return; } if (WoW.CanCast("Lunar Strike") && WoW.LastSpell != "Lunar Strike" && WoW.PlayerBuffTimeRemaining("Lunar Empowerment") > GCD && !WoW.IsMoving) { WoW.CastSpell("Lunar Strike"); return; } if (WoW.CanCast("Solar Wrath") && WoW.PlayerBuffTimeRemaining("Solar Empowerment") > GCD && !WoW.IsMoving || WoW.CanCast("Solar Wrath") && WoW.CurrentAstralPower < 85 && !WoW.IsMoving) { WoW.CastSpell("Solar Wrath"); return; } if (WoW.CanCast("Rejuv") && WoW.HealthPercent < 85 && !WoW.PlayerHasBuff("Rejuv") && WoW.IsInCombat) { WoW.CastSpell("Rejuv"); return; } if (WoW.CanCast("Regrowth") && WoW.HealthPercent < 50 && !WoW.IsMoving && WoW.IsInCombat) { WoW.CastSpell("Regrowth"); return; } } } }