public override void Pulse() { if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LSHIFT) < 0) { return; } if (!WoW.HasTarget || !WoW.TargetIsEnemy) { WoW.TargetNearestEnemy(); } if (WoW.IsSpellInRange("Soul Carver")) { if (combatRoutine.Type == RotationType.SingleTarget) { SurvivalRotation(); } else { BombRotation(); } } else if (WoW.IsSpellInRange("Throw Glaive")) { WoW.CastSpell("Throw Glaive", !WoW.IsSpellOnCooldown("Throw Glaive")); } }
public override void Pulse() { if (WoW.IsInCombat && interruptwatch.ElapsedMilliseconds == 0) { Log.Write("Starting interrupt timer", Color.Blue); interruptwatch.Start(); } if (UseCooldowns) { } if (combatRoutine.Type != RotationType.SingleTarget && combatRoutine.Type != RotationType.AOE) { return; } if (WoW.IsInCombat && (!WoW.TargetIsEnemy || WoW.TargetHealthPercent == 0)) { WoW.TargetNearestEnemy(); } if (!WoW.HasTarget || !WoW.TargetIsEnemy) { return; } if (WoW.HealthPercent < 30 && !WoW.IsSpellOnCooldown("Metamorphasis")) { Log.Write("Metamorphasis"); Log.Write("Health low < 70% using CDs...", Color.Red); WoW.CastSpell("Metamorphasis"); // Off the GCD no return needed } if (WoW.PlayerHasBuff("Metamorphasis") && WoW.CanCast("Sever")) { WoW.CastSpell("Sever"); return; } if (WoW.PlayerHasBuff("Metamorphasis") && WoW.PlayerHasBuff("Soul Fragments") && (WoW.PlayerBuffStacks("Soul Fragments") >= 5) && WoW.Pain >= 50) { WoW.CastSpell("Soul Cleave"); return; } if (!WoW.IsSpellInRange("Soul Carver") && !WoW.IsSpellOnCooldown("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && WoW.CanCast("Throw Glaive")) { WoW.CastSpell("Throw Glaive"); return; } if (!WoW.IsSpellInRange("Soul Carver")) // If we are out of melee range return { return; } if (WoW.TargetIsCastingAndSpellIsInterruptible && interruptwatch.ElapsedMilliseconds > 1200 && WoW.TargetPercentCast > 70) { if (!WoW.IsSpellOnCooldown("Sigil of Silence")) { Log.Write("Interrupting spell"); WoW.CastSpell("Sigil of Silence"); interruptwatch.Reset(); interruptwatch.Start(); return; } if (!WoW.IsSpellOnCooldown("Arcane Torrent")) { Log.Write("Interrupting spell"); WoW.CastSpell("Arcane Torrent"); interruptwatch.Reset(); interruptwatch.Start(); return; } if (!WoW.IsSpellOnCooldown("Consume Magic")) { Log.Write("Interrupting spell"); WoW.CastSpell("Consume Magic"); interruptwatch.Reset(); interruptwatch.Start(); return; } } if (!WoW.TargetHasDebuff("Fiery Demise") && !WoW.IsSpellOnCooldown("Fiery Brand")) { WoW.CastSpell("Fiery Brand"); } if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && WoW.Pain > 20 && !WoW.PlayerHasBuff("Magnum Opus")) { WoW.CastSpell("Demon Spikes"); } if (WoW.CanCast("Soul Carver")) { WoW.CastSpell("Soul Carver"); } if (WoW.CanCast("Fel Devastation") && WoW.Pain >= 30) { WoW.CastSpell("Fel Devastation"); } if (WoW.CanCast("Soul Cleave") && WoW.Pain >= 50) { WoW.CastSpell("Soul Cleave"); return; } if (WoW.CanCast("Immolation Aura")) { WoW.CastSpell("Immolation Aura"); return; } if (WoW.CanCast("Sigil of Flame") && !WoW.TargetHasDebuff("Sigil of Flame")) { WoW.CastSpell("Sigil of Flame"); // NB must have "Concentrated Sigil's" talent return; } if (WoW.CanCast("Shear")) // Pain Generator { WoW.CastSpell("Shear"); } }
public override void Pulse() { //validtargetmelee = WoW.HasTarget && WoW.IsInCombat && !WoW.PlayerIsChanneling && WoW.TargetIsVisible && WoW.RangeToTarget < 6; if (WoW.PlayerHealthPercent == 0 || WoW.IsMounted) { return; } if (WoW.PlayerIsChanneling) { return; } if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.RangeToTarget < 6) // buff stuff { WoW.CastSpell("BattleCry", !WoW.PlayerHasBuff("BattleCryBuff") && WoW.CooldownsOn == true && WoW.Level >= 60); WoW.CastSpell("Avatar", WoW.Talent(3) == 3 && WoW.PlayerHasBuff("BattleCryBuff")); WoW.CastSpell("OdynsFury", WoW.PlayerHasBuff("BattleCryBuff") && WoW.PlayerHasBuff("Frothing") && WoW.Level >= 101); WoW.CastSpell("Bloodthirst", WoW.PlayerHasBuff("Enraged Regeneration") && WoW.Level >= 12); WoW.CastSpell("Furious Slash", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.PlayerHasBuff("Enraged Regeneration") && WoW.Level >= 12); WoW.CastSpell("Raging Blow", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.IsSpellOnCooldown("Furious Slash") && WoW.PlayerHasBuff("Enraged Regeneration") && WoW.Level >= 13); } // target stuff if (WoW.TargetHealthPercent == 0 && WoW.IsInCombat && WoW.RangeToTarget >= 5 && WoW.CountEnemyNPCsInRange >= 1 && !WoW.IsMounted || !WoW.HasTarget && WoW.IsInCombat && WoW.CountEnemyNPCsInRange <= 6 && WoW.RangeToTarget <= 6 && !WoW.IsMounted) { WoW.TargetNearestEnemy(); return; } if (combatRoutine.Type == RotationType.SingleTarget && WoW.TargetHealthPercent >= 21 && !WoW.PlayerHasBuff("BattleCryBuff")) // Do Single Target Unbuffed Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.RangeToTarget < 6) { WoW.CastSpell("Rampage", WoW.Rage >= 100 && WoW.Level >= 18); WoW.CastSpell("Bloodthirst", WoW.Rage < 100 && !WoW.PlayerHasBuff("Enrage") && WoW.Level >= 10 || WoW.IsSpellOnCooldown("Raging Blow") && WoW.Rage < 100 && WoW.Level >= 10); WoW.CastSpell("Raging Blow", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.Rage < 100 && WoW.Level >= 13); WoW.CastSpell("Whirlwind", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.IsSpellOnCooldown("Raging Blow") && WoW.PlayerHasBuff("Wrecking Ball") && WoW.Talent(3) == 1); WoW.CastSpell("Furious Slash", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.IsSpellOnCooldown("Raging Blow") && WoW.Rage < 90 && WoW.Level >= 10); } } if (combatRoutine.Type == RotationType.SingleTarget && WoW.TargetHealthPercent >= 21 && WoW.PlayerHasBuff("BattleCryBuff")) // Do Single Target Buffed Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.RangeToTarget < 6) { WoW.CastSpell("Rampage", WoW.Rage >= 100); WoW.CastSpell("Raging Blow", WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Frothing") && WoW.Rage < 100 || WoW.IsSpellOnCooldown("Bloodthirst")); WoW.CastSpell("Bloodthirst", WoW.Rage < 100 && WoW.IsSpellOnCooldown("Raging Blow")); } } if (combatRoutine.Type == RotationType.SingleTarget && WoW.TargetHealthPercent <= 20 && WoW.SpellCooldownTimeRemaining("BattleCry") >= 1100 && WoW.Level >= 60) // Do Single Target Execute Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.RangeToTarget < 6) { WoW.CastSpell("Execute", WoW.Rage >= 100); WoW.CastSpell("Bloodthirst", WoW.Rage < 100); WoW.CastSpell("Raging Blow", WoW.Rage < 100 && WoW.IsSpellOnCooldown("Bloodthirst")); WoW.CastSpell("Furious Slash", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.IsSpellOnCooldown("Raging Blow")); } } if (combatRoutine.Type == RotationType.SingleTarget && WoW.TargetHealthPercent <= 20 && WoW.SpellCooldownTimeRemaining("BattleCry") <= 900 && WoW.Level >= 60) // Do Single Target Execute Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.RangeToTarget < 6) { WoW.CastSpell("Execute", WoW.PlayerHasBuff("SenseDeath") || WoW.Rage >= 25 && WoW.Level >= 8); WoW.CastSpell("Bloodthirst", WoW.Rage < 25 && WoW.Level >= 10); WoW.CastSpell("Raging Blow", WoW.Rage < 25 && WoW.IsSpellOnCooldown("Bloodthirst") && WoW.Level >= 13); } } if (combatRoutine.Type == RotationType.SingleTarget && WoW.TargetHealthPercent <= 20 && WoW.Level <= 59) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.RangeToTarget < 6) { WoW.CastSpell("Execute", WoW.PlayerHasBuff("SenseDeath") || WoW.Rage >= 25 && WoW.Level >= 8); WoW.CastSpell("Bloodthirst", WoW.Rage < 25 && WoW.Level >= 10); WoW.CastSpell("Raging Blow", WoW.Rage < 25 && WoW.IsSpellOnCooldown("Bloodthirst") && WoW.Level >= 13); } } if (combatRoutine.Type == RotationType.SingleTarget && WoW.TargetHealthPercent <= 20 && WoW.Level <= 9 && WoW.PlayerClassSpec == "Warrior-Arms") // more leveling { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.RangeToTarget < 6) { WoW.CastSpell("Slam", WoW.IsSpellOnCooldown("Mortal Strike") && WoW.Rage >= 20); WoW.CastSpell("Mortal Strike", WoW.Rage >= 20 && WoW.Level >= 5); } } if (combatRoutine.Type == RotationType.AOE) // Aoe stuff { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.RangeToTarget < 6) { WoW.CastSpell("Whirlwind", !WoW.PlayerHasBuff("Meat-Cleaver") && WoW.Level >= 28 || WoW.PlayerHasBuff("Wrecking Ball") && WoW.Talent(3) == 1 && WoW.Level >= 45); WoW.CastSpell("Rampage", WoW.Rage >= 100 && WoW.PlayerHasBuff("Meat-Cleaver") && WoW.Level >= 18); WoW.CastSpell("Bloodthirst", WoW.Rage < 100 && WoW.CountEnemyNPCsInRange < 8 && WoW.PlayerHasBuff("Meat-Cleaver") && !WoW.PlayerHasBuff("Enrage") && WoW.Level >= 10); WoW.CastSpell("Raging Blow", WoW.PlayerHasBuff("Enrage") && WoW.CountEnemyNPCsInRange < 4 && WoW.Level >= 13); //WoW.CastSpell("Furious Slash", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.IsSpellOnCooldown("Raging Blow")); } } if (combatRoutine.Type == RotationType.Cleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } }
public override void Pulse() { if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LSHIFT) < 0) { return; } // Interrupt if (WoW.TargetIsCastingAndSpellIsInterruptible && WoW.CanCast("Pummel") && WoW.IsSpellInRange("Pummel") && WoW.TargetPercentCast > Random.Next(20, 40)) { WoW.CastSpell("Pummel"); return; } // Defensive CD's if (WoW.CanCast("Enraged Regeneration") && WoW.HealthPercent < 30) { WoW.CastSpell("Enraged Regeneration"); WoW.CastSpell("Bloodthirst", WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst")); return; } if (WoW.CanCast("Commanding Shout") && (WoW.HealthPercent < 15)) { WoW.CastSpell("Commanding Shout"); WoW.CastSpell("Bloodthirst", WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst")); return; } if (WoW.PlayerHasDebuff("Fear")) { if (WoW.CanCast("Berserker Rage")) { WoW.CastSpell("Berserker Rage"); } else if (WoW.CanCast("Will of the Forsaken")) { WoW.CastSpell("Will of the Forsaken"); } } // Targeting if (!WoW.HasTarget || !WoW.TargetIsEnemy) { WoW.TargetNearestEnemy(); } if (combatRoutine.Type != RotationType.SingleTarget || DetectKeyPress.GetKeyState(DetectKeyPress.VK_LCONTROL) < 0) { // Multitarget Rotation BattleCryRotationSequence = 0; if (UseCooldowns) { if (WoW.CanCast("Battle Cry") && WoW.IsSpellInRange("Rampage") && !WoW.IsSpellOnCooldown("Rampage")) { WoW.CastSpell("Battle Cry"); WoW.CastSpell("Avatar", WoW.CanCast("Avatar")); } } if (WoW.CanCast("Odyns Fury") && WoW.IsSpellInRange("Bloodthirst") && WoW.PlayerHasBuff("Battle Cry")) { WoW.CastSpell("Odyns Fury"); return; } if (!WoW.PlayerHasBuff("Meat Cleaver") && WoW.CanCast("Whirlwind") && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Whirlwind"); return; } if (WoW.CanCast("Rampage") && WoW.IsSpellInRange("Rampage") && ((!WoW.PlayerHasBuff("Enrage") && WoW.Rage >= 85) || WoW.Rage >= 100)) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && !WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Bloodthirst"); return; } if (combatRoutine.Type == RotationType.Cleave && WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("Whirlwind") && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Whirlwind"); return; } } else { // Singletarget Rotation if (UseCooldowns) { if (BattleCryRotationSequence == 0) { if (WoW.CanCast("Battle Cry") && WoW.IsSpellInRange("Rampage") && !WoW.IsSpellOnCooldown("Rampage")) { if (WoW.SpellCooldownTimeRemaining("Raging Blow") > 150) { //wait for raging blow to come up before using cooldowns WoW.CastSpell("Furious Slash", WoW.CanCast("Furious Slash") && WoW.IsSpellInRange("Furious Slash")); return; } WoW.CastSpell("Battle Cry"); WoW.CastSpell("Avatar", WoW.CanCast("Avatar")); WoW.CastSpell("Rampage"); BattleCryRotationSequence++; return; } } else if (BattleCryRotationSequence == 1) { if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow")) { WoW.CastSpell("Raging Blow"); BattleCryRotationSequence++; } return; } else if (BattleCryRotationSequence == 2) { if (WoW.CanCast("Odyns Fury")) { WoW.CastSpell("Odyns Fury"); BattleCryRotationSequence++; } return; } else if (BattleCryRotationSequence == 3) { if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Bloodthirst"); BattleCryRotationSequence++; } return; } else if (BattleCryRotationSequence == 4) { if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow")) { WoW.CastSpell("Raging Blow"); BattleCryRotationSequence = 0; } return; } if (WoW.CanCast("Avatar") && (WoW.SpellCooldownTimeRemaining("Battle Cry") < 1200 || WoW.SpellCooldownTimeRemaining("Battle Cry") > 2200)) { WoW.CastSpell("Avatar"); return; } } else { BattleCryRotationSequence = 0; } if (WoW.CanCast("Rampage") && WoW.IsSpellInRange("Rampage") && ((!WoW.PlayerHasBuff("Enrage") && WoW.Rage >= 85) || WoW.Rage >= 100)) { WoW.CastSpell("Rampage"); return; } if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && !WoW.PlayerHasBuff("Enrage")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Odyns Fury") && WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Battle Cry")) { WoW.CastSpell("Odyns Fury"); return; } if (WoW.CanCast("Execute") && WoW.IsSpellInRange("Execute") && WoW.PlayerHasBuff("Enrage") && WoW.TargetHealthPercent <= 20) { WoW.CastSpell("Execute"); return; } if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Bloodthirst"); return; } if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow")) { WoW.CastSpell("Raging Blow"); return; } if (WoW.CanCast("Whirlwind") && WoW.PlayerHasBuff("Wrecking Ball")) { WoW.CastSpell("Whirlwind"); return; } WoW.CastSpell("Furious Slash", WoW.CanCast("Furious Slash") && WoW.IsSpellInRange("Furious Slash")); } }
public override void Pulse() { if (WoW.IsMounted) { return; } int OOCPlea = 1; while (WoW.PlayerBuffStacks("Sins of the Many") < WoW.GroupSize && !WoW.IsInCombat && OOCAtonement) { WoW.TargetMember(OOCPlea); if (WoW.TargetHasBuff("Atonement")) { OOCPlea++; continue; } if (!WoW.CanCast("Plea")) { continue; } if (OOCPlea > WoW.GroupSize) { OOCPlea = 1; } WoW.TargetMember(OOCPlea); WoW.CastSpell("Plea"); OOCPlea++; } // While rapture is active, spread Power Word: Shield to players int RaptureSpread = 1; while (WoW.PlayerHasBuff("Rapture") && WoW.PartyLowestHealthPercent > 60) { WoW.TargetMember(RaptureSpread); if (WoW.TargetHasBuff("Power Word: Shield")) { RaptureSpread++; continue; } if (!WoW.CanCast("Power Word: Shield")) { continue; } if (RaptureSpread > WoW.GroupSize) { RaptureSpread = 1; } WoW.TargetMember(RaptureSpread); WoW.CastSpell("Power Word: Shield"); RaptureSpread++; } // Ask player for TankId when first loading Rotation if (WoW.TankId == 0) { var f = new frmEnterTankId { TopMost = true }; f.ShowDialog(); } // Use Angelic Feather for speed if enabled in UI if (WoW.CanCast("Angelic Feather") && WoW.IsMoving && !WoW.PlayerHasBuff("Angelic Feather") && UseFeatherForSpeed) { WoW.CastSpell("Angelic Feather"); return; } // Use Arcane Torrent if selected in UI if (WoW.CanCast("Arcane Torrent") && WoW.Mana < 90 && ArcaneTorrentUI && WoW.IsInCombat && !WoW.PlayerIsChanneling) { WoW.CastSpell("Arcane Torrent"); return; } var lowest = WoW.PartyLowestHealthPercent; int currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent; Log.Write("Party Lowest HP: " + lowest); if (lowest >= DPSWhenPartyAbove && WoW.PartyMemberIsNeedingADispel == 0 && WoW.IsInCombat) { // If active Atonements are below UI threshold then spread Atonement with Plea until threshold is met int PleaStack = 1; while (WoW.PlayerBuffStacks("Sins of the Many") < ActiveAtonements && ActiveAtonements != 0) { WoW.TargetMember(PleaStack); if (WoW.TargetHasBuff("Atonement")) { PleaStack++; continue; } if (!WoW.CanCast("Plea")) { continue; } if (PleaStack > WoW.GroupSize) { PleaStack = 1; } WoW.TargetMember(PleaStack); WoW.CastSpell("Plea"); PleaStack++; } // Mitigate damage with Power Word: Shield if (WoW.CanCast("Power Word: Shield") && lowest < 90) { WoW.CastSpell("Power Word: Shield"); return; } //DPS Rotation WoW.TargetNearestEnemy(); if (WoW.HasTarget && WoW.TargetIsEnemy) { if (lowest < 99 && lowest > 95 && WoW.PlayerBuffStacks("Sins of the Many") < ActiveAtonements && ActiveAtonements != 0) { WoW.CastSpell("Plea"); return; } //Maintain Shadow Word: Pain(or Purge the Wicked, if you have taken this talent) on the target. if (WoW.TargetDebuffTimeRemaining("Shadow Word: Pain") < 400 && WoW.CanCast("Shadow Word: Pain") && WoW.Talent(6) != 1) { WoW.CastSpell("Shadow Word: Pain"); return; } if (WoW.TargetDebuffTimeRemaining("Purge the Wicked") < 400 && WoW.CanCast("Purge the Wicked") && WoW.Talent(6) == 1) { WoW.CastSpell("Purge the Wicked"); return; } //Use Schism on cooldown(if you have taken this talent). if (WoW.CanCast("Schism") && WoW.Talent(1) == 3) { WoW.CastSpell("Schism"); return; } //Use Penance on cooldown. if (WoW.CanCast("Penance")) { WoW.CastSpell("Penance"); return; } //Use Power Word: Solace on cooldown(if you have taken this talent). if (WoW.CanCast("Power Word: Solace") && WoW.Talent(4) == 1) { WoW.CastSpell("Power Word: Solace"); return; } if (WoW.CanCast("Shadowfiend") && WoW.Talent(4) != 3) { WoW.CastSpell("Shadowfiend"); return; } if (WoW.CanCast("Mindbender") && WoW.Talent(4) == 3) { WoW.CastSpell("Mindbender"); return; } //Use Smite as a filler. if (WoW.CanCast("Smite")) { WoW.CastSpell("Smite"); return; } } return; } if (WoW.PartyMemberIsNeedingADispel != 0) { currentTargetId = WoW.PartyMemberIsNeedingADispel; } var averageHp = WoW.PartyAverageHealthPercent; if (averageHp < 60 && WoW.CanCast("Power Infusion") && WoW.Talent(7) == 1) { WoW.CastSpell("Power Infusion"); // Off GCD no return needed } // Use Shadowfiend to boost healing output via Atonement if (averageHp < 90 && WoW.CanCast("Shadowfiend") && WoW.Talent(4) != 3 && WoW.IsInCombat) { WoW.TargetNearestEnemy(); WoW.CastSpell("Shadowfiend"); return; } // Use Mindbender for mana regardless of Party HP if (WoW.CanCast("Mindbender") && WoW.Talent(4) == 3 && WoW.IsInCombat && WoW.Mana < 90) { WoW.TargetNearestEnemy(); WoW.CastSpell("Mindbender"); return; } WoW.TargetMember(currentTargetId); // Target the lowest health party member or the member needing a dispell if (WoW.PartyMemberIsNeedingADispel != 0 && WoW.CanCast("Purify")) { WoW.CastSpell("Purify"); return; } // If we are targeting the tank and his HP < 20% Pain Suppression him if (lowest <= PainSuppressionHealth && WoW.CanCast("Pain Suppression") && WoW.TankId == currentTargetId) { WoW.CastSpell("Pain Suppression"); return; } // Uses Power Word: Radiance when UI values are met if (WoW.PlayerSpellCharges("PWRadiance") == 2 && WoW.CountAlliesUnderHealthPercentage(PWRHealth) >= PWRAlliesUnderHP) { WoW.CastSpell("PWRadiance"); return; } // Use Shadow Mend when DPSWhenPartyAbove is less than UI value if (lowest <= DPSWhenPartyAbove && WoW.CanCast("Shadow Mend")) { WoW.CastSpell("Shadow Mend"); return; } // Auto Light's Wrath For Dungeons if (WoW.CountAlliesUnderHealthPercentage(60) <= 3 && WoW.GroupSize <= 5 && WoW.PlayerBuffStacks("Sins of the Many") >= 3 && WoW.CanCast("Light's Wrath")) { WoW.TargetNearestEnemy(); WoW.CastSpell("Light's Wrath"); return; } // Auto Light's Wrath For Raids if (WoW.CountAlliesUnderHealthPercentage(60) >= 8 && WoW.GroupSize >= 5 && WoW.PlayerBuffStacks("Sins of the Many") >= 8 && WoW.CanCast("Light's Wrath")) { WoW.TargetNearestEnemy(); WoW.CastSpell("Light's Wrath"); return; } // When player uses Fade, PWRx2+Evangelism to ramp up atonement if (WoW.PlayerHasBuff("Fade") && !WoW.IsSpellOnCooldown("Evangelism") && WoW.Talent(7) != 3 && WoW.PlayerSpellCharges("PWRadiance") >= 1) { WoW.TargetMember(lowest); WoW.CastSpell("PWRadiance"); WoW.TargetMember(2); WoW.CastSpell("PWRadiance"); WoW.CastSpell("Evangelism"); WoW.TargetNearestEnemy(); return; } // When player uses Fade, PWRx2+Evangelism to ramp up atonement if (WoW.PlayerHasBuff("Fade") && WoW.Talent(7) != 3 && WoW.PlayerSpellCharges("PWRadiance") >= 1) { WoW.TargetMember(lowest); WoW.CastSpell("PWRadiance"); WoW.TargetMember(2); WoW.CastSpell("PWRadiance"); WoW.CastSpell("Evangelism"); WoW.TargetNearestEnemy(); return; } // Refresh PW:S on self (For Questing, doesn't Work in Group) if (WoW.PlayerBuffTimeRemaining("Power Word: Shield") < 400 && WoW.CanCast("Power Word: Shield") && WoW.GroupSize == 1) { WoW.CastSpell("Power Word: Shield"); return; } }
public override void Pulse() { if (WoW.HealthPercent == 0 || WoW.IsMounted) { return; } if (WoW.PlayerIsCasting) { return; } var TargetHp = WoW.PartyLowestHealthPercent; int TargetId = WoW.PartyMemberIdWithLowestHealthPercent; /* * if (WoW.PartyMemberIsNeedingADispel != 0 && * WoW.CanCast("Purify")) * { * WoW.TargetMember(WoW.PartyMemberIsNeedingADispel); * WoW.CastSpell("Purify"); * return; * } */ if (TargetId == 0) { return; } if (TargetHp == 100) { return; } var AverageHp = WoW.PartyAverageHealthPercent; //Damage when CleaveON toggle activated or when nothing to do (averageHp > 97) if (WoW.CleaveOn == true && !WoW.IsMoving) { WoW.TargetNearestEnemy(); if (WoW.CanCast("Holy Fire")) { WoW.CastSpell("Holy Fire"); } WoW.CastSpell("Smite"); return; } //AoE Healing Cooldowns if (WoW.CanCast("Divine Hymn") && AverageHp < 40) { WoW.CastSpell("Divine Hymn"); } if (WoW.CanCast("Apotheosis") && AverageHp < 60) { WoW.CastSpell("Apotheosis"); } //Light of Tuure if not already on the target and target low if (!WoW.TargetHasBuff("Light of Tuure") && WoW.CanCast("Light of Tuure") && TargetHp <= 50) { WoW.CastSpell("Light of Tuure"); } // Target the lowest health party member for all abilities below WoW.TargetMember(TargetId); if (WoW.CanCast("Prayer of Healing") && AverageHp < 85 && TargetHp > 70 && !WoW.IsMoving) { WoW.CastSpell("Prayer of Healing"); return; } // Guardian Spirit on Tank only! if (WoW.CanCast("Guardian Spirit") && WoW.TankHealth <= 20) { WoW.TargetMember(WoW.TankId); WoW.CastSpell("Guardian Spirit"); return; } //Serenity as a quick boost if (WoW.CanCast("Holy Word Serenity") && TargetHp <= 50) { WoW.CastSpell("Holy Word Serenity"); return; } // Flash Heal use on high damage or on Surge of Light proc if ((WoW.CanCast("Flash Heal") && TargetHp <= 51 && !WoW.IsMoving) || (WoW.CanCast("Flash Heal") && TargetHp <= 81 && WoW.PlayerHasBuff("Surge of Light"))) { WoW.CastSpell("Flash Heal"); return; } // Heal use to heal moderate to high damage. if (WoW.CanCast("Heal") && TargetHp <= 85 && !WoW.IsMoving) { WoW.CastSpell("Heal"); return; } //Renew if no one needs proper healing and we have the mana to spare if (WoW.CanCast("Renew") && !WoW.TargetHasBuff("Renew") && TargetHp <= 95 && WoW.Mana >= 80 && AverageHp >= 80) { WoW.CastSpell("Renew"); return; } //Prayer of Medning (almost) on cooldown if (WoW.CanCast("Prayer of Mending") && !WoW.IsSpellOnCooldown("Prayer of Mending") && !WoW.TargetHasBuff("Prayer of Mending") && TargetHp < 95) { WoW.CastSpell("Prayer of Mending"); return; } }
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 (WoW.IsMounted) { return; } if (WoW.TankId == 0) { var f = new frmEnterTankId { TopMost = true }; f.ShowDialog(); } if (!WoW.IsInCombat && WoW.CanCast("Angelic Feather") && WoW.IsMoving && !WoW.PlayerHasBuff("Angelic Feather")) { WoW.CastSpell("Angelic Feather"); return; } var lowest = WoW.PartyLowestHealthPercent; int currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent; Log.Write("Party Lowest HP: " + lowest); if (lowest >= 80 && WoW.PartyMemberIsNeedingADispel == 0 && WoW.IsInCombat) { WoW.TargetNearestEnemy(); //DPS Rotation if (WoW.HasTarget && WoW.TargetIsEnemy) { //Maintain Shadow Word: Pain(or Purge the Wicked, if you have taken this talent) on the target. if (WoW.TargetDebuffTimeRemaining("Shadow Word: Pain") < 400 && WoW.CanCast("Shadow Word: Pain") && WoW.Talent(6) != 1) { WoW.CastSpell("Shadow Word: Pain"); return; } if (WoW.TargetDebuffTimeRemaining("Purge the Wicked") < 400 && WoW.CanCast("Purge the Wicked") && WoW.Talent(6) == 1) { WoW.CastSpell("Purge the Wicked"); return; } //Use Schism on cooldown(if you have taken this talent). if (WoW.CanCast("Schism") && WoW.Talent(1) == 3) { WoW.CastSpell("Schism"); return; } if (WoW.PlayerHasBuff("Overloaded with Light") && WoW.CanCast("Light's Wrath")) { WoW.CastSpell("Light's Wrath"); return; } //Use Penance on cooldown. if (WoW.CanCast("Penance")) { WoW.CastSpell("Penance"); return; } //Use Power Word: Solace on cooldown(if you have taken this talent). if (WoW.CanCast("Power Word: Solace") && WoW.Talent(4) == 1) { WoW.CastSpell("Power Word: Solace"); return; } if (WoW.CanCast("Shadowfiend") && WoW.Talent(4) != 3) { WoW.CastSpell("Shadowfiend"); return; } if (WoW.CanCast("Mindbender") && WoW.Talent(4) == 3) { WoW.CastSpell("Mindbender"); return; } //Use Smite as a filler. if (WoW.CanCast("Smite")) { WoW.CastSpell("Smite"); return; } } return; } if (WoW.PartyMemberIsNeedingADispel != 0) { currentTargetId = WoW.PartyMemberIsNeedingADispel; } var averageHp = WoW.PartyAverageHealthPercent; if (averageHp < 60 && WoW.CanCast("Power Infusion")) { WoW.CastSpell("Power Infusion"); // Off GCD no return needed } if (WoW.CanCast("Shadowfiend") && WoW.Talent(4) != 3 && WoW.IsInCombat && WoW.Mana < 90) { WoW.TargetNearestEnemy(); WoW.CastSpell("Shadowfiend"); return; } if (WoW.CanCast("Mindbender") && WoW.Talent(4) == 3 && WoW.IsInCombat && WoW.Mana < 90) { WoW.TargetNearestEnemy(); WoW.CastSpell("Mindbender"); return; } WoW.TargetMember(currentTargetId); // Target the lowest health party member or the member needing a dispell if (WoW.PartyMemberIsNeedingADispel != 0 && WoW.CanCast("Purify")) { WoW.CastSpell("Purify"); return; } // If we are targeting the tank and his HP < 20% Pain Suppression him if (lowest <= 20 && WoW.CanCast("Pain Suppression") && WoW.TankId == currentTargetId) { WoW.CastSpell("Pain Suppression"); return; } // If we are targeting the tank and his HP < 20% Pain Suppression him if (lowest <= 95 && WoW.CanCast("Power Word: Shield") && WoW.TankId == currentTargetId) { WoW.CastSpell("Power Word: Shield"); return; } if (WoW.CanCast("Penance") && lowest <= 60 && WoW.TankId == currentTargetId) { WoW.CastSpell("Penance"); return; } if (WoW.CanCast("Shadow Mend") && (lowest < 80 || (WoW.TargetHasBuff("Attonement") && lowest < 99))) { WoW.CastSpell("Shadow Mend"); return; } if (WoW.CanCast("Plea") && lowest < 99 && lowest >= 80) { WoW.CastSpell("Plea"); return; } // Mitigate as much damage as possible and always keep PWS up on self if (WoW.PlayerBuffTimeRemaining("Power Word: Shield") < 400 && WoW.CanCast("Power Word: Shield")) { WoW.CastSpell("Power Word: Shield"); return; } }
public override void Pulse() { //validtargetmelee = WoW.HasTarget && WoW.IsInCombat && !WoW.PlayerIsChanneling && WoW.TargetIsVisible && WoW.RangeToTarget < 6; if (WoW.PlayerHealthPercent == 0 || WoW.IsMounted) { return; } if (WoW.PlayerIsChanneling) { return; } if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("BattleCry", !WoW.PlayerHasBuff("BattleCryBuff") && WoW.CooldownsOn == true); WoW.CastSpell("Avatar", WoW.Talent(3) == 3 && WoW.PlayerHasBuff("BattleCryBuff")); WoW.CastSpell("OdynsFury", WoW.PlayerHasBuff("BattleCryBuff") && WoW.PlayerHasBuff("Frothing")); WoW.CastSpell("Bloodthirst", WoW.PlayerHasBuff("Enraged Regeneration")); WoW.CastSpell("Furious Slash", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.PlayerHasBuff("Enraged Regeneration")); WoW.CastSpell("Raging Blow", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.IsSpellOnCooldown("Furious Slash") && WoW.PlayerHasBuff("Enraged Regeneration")); } if (WoW.TargetHealthPercent == 0 && WoW.IsInCombat && WoW.RangeToTarget >= 5 && WoW.CountEnemyNPCsInRange >= 1 && !WoW.IsMounted || !WoW.HasTarget && WoW.IsInCombat && WoW.CountEnemyNPCsInRange >= 1 && WoW.RangeToTarget >= 1 && !WoW.IsMounted) { WoW.TargetNearestEnemy(); return; } if (combatRoutine.Type == RotationType.SingleTarget && WoW.TargetHealthPercent >= 21 && !WoW.PlayerHasBuff("BattleCryBuff")) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Rampage", WoW.Rage >= 100); WoW.CastSpell("Bloodthirst", WoW.Rage < 100 && !WoW.PlayerHasBuff("Enrage") || WoW.IsSpellOnCooldown("Raging Blow") && WoW.Rage < 100); WoW.CastSpell("Raging Blow", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.Rage < 100); WoW.CastSpell("Whirlwind", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.IsSpellOnCooldown("Raging Blow") && WoW.PlayerHasBuff("Wrecking Ball") && WoW.Talent(3) == 1); WoW.CastSpell("Furious Slash", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.IsSpellOnCooldown("Raging Blow") && WoW.Rage < 90); } } if (combatRoutine.Type == RotationType.SingleTarget && WoW.TargetHealthPercent >= 21 && WoW.PlayerHasBuff("BattleCryBuff")) // Do Single Target Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Rampage", WoW.Rage >= 100); WoW.CastSpell("Raging Blow", WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Frothing") && WoW.Rage < 100 || WoW.IsSpellOnCooldown("Bloodthirst")); WoW.CastSpell("Bloodthirst", WoW.Rage < 100 && WoW.IsSpellOnCooldown("Raging Blow")); } } if (combatRoutine.Type == RotationType.SingleTarget && WoW.TargetHealthPercent <= 20 && WoW.SpellCooldownTimeRemaining("BattleCry") >= 1100) // Do Single Target Execute Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Execute", WoW.Rage >= 100); WoW.CastSpell("Bloodthirst", WoW.Rage < 100); WoW.CastSpell("Raging Blow", WoW.Rage < 100 && WoW.IsSpellOnCooldown("Bloodthirst")); WoW.CastSpell("Furious Slash", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.IsSpellOnCooldown("Raging Blow")); } } if (combatRoutine.Type == RotationType.SingleTarget && WoW.TargetHealthPercent <= 20 && WoW.SpellCooldownTimeRemaining("BattleCry") <= 900) // Do Single Target Execute Stuff here { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Execute", WoW.PlayerHasBuff("SenseDeath") || WoW.Rage >= 25); WoW.CastSpell("Bloodthirst", WoW.Rage < 25); WoW.CastSpell("Raging Blow", WoW.Rage < 25 && WoW.IsSpellOnCooldown("Bloodthirst")); } } if (combatRoutine.Type == RotationType.AOE) { if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Bloodthirst")) { WoW.CastSpell("Whirlwind", !WoW.PlayerHasBuff("Meat-Cleaver") || WoW.CanCast("Whirlwind") && WoW.PlayerHasBuff("Wrecking Ball") && WoW.Talent(3) == 1); WoW.CastSpell("Rampage", WoW.Rage >= 100 && WoW.PlayerHasBuff("Meat-Cleaver")); WoW.CastSpell("Bloodthirst", WoW.Rage < 100 && WoW.CountEnemyNPCsInRange < 8 && WoW.PlayerHasBuff("Meat-Cleaver") && !WoW.PlayerHasBuff("Enrage")); WoW.CastSpell("Raging Blow", WoW.PlayerHasBuff("Enrage") && WoW.CountEnemyNPCsInRange < 4); //WoW.CastSpell("Furious Slash", WoW.IsSpellOnCooldown("Bloodthirst") && WoW.IsSpellOnCooldown("Raging Blow")); } } if (combatRoutine.Type == RotationType.Cleave) { // Do Single Target Cleave stuff here if applicable else ignore this one } }