Ejemplo n.º 1
0
 private int CheckBloodlust()
 {
     if (WoW.PlayerHasBuff("Bloodlust"))
     {
         return(WoW.PlayerBuffTimeRemaining("Bloodlust"));
     }
     if (WoW.PlayerHasBuff("Heroism"))
     {
         return(WoW.PlayerBuffTimeRemaining("Heroism"));
     }
     if (WoW.PlayerHasBuff("Time Warp"))
     {
         return(WoW.PlayerBuffTimeRemaining("Time Warp"));
     }
     if (WoW.PlayerHasBuff("Ancient Hysteria"))
     {
         return(WoW.PlayerBuffTimeRemaining("Ancient Hysteria"));
     }
     if (WoW.PlayerHasBuff("Netherwinds"))
     {
         return(WoW.PlayerBuffTimeRemaining("Netherwinds"));
     }
     if (WoW.PlayerHasBuff("Drums of Fury"))
     {
         return(WoW.PlayerBuffTimeRemaining("Drums of Fury"));
     }
     return(0);
 }
        public void PulsePlayerBuffRemaining()
        {
            var remaining = WoW.PlayerBuffTimeRemaining(this._name);

            if (_lastPlayerBuffRemaining - remaining == 1)
            {
                _endPlayerBuffRemaining = Environment.TickCount + 1000 * _lastPlayerBuffRemaining;
            }
            _lastPlayerBuffRemaining = remaining;
        }
        public override void Pulse()                             // Updated for Legion (tested and working for single target)
        {
            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                Log.Write(WoW.PlayerBuffTimeRemaining("PWS").ToString());

                if ((!WoW.PlayerHasBuff("PWS") || WoW.PlayerBuffTimeRemaining("PWS") < 4) && WoW.CanCast("PWS"))
                {
                    WoW.CastSpell("PWS");
                }
            }
        }
 private void EnhancementBuffs()
 {
     //actions +=/ windstrike,if= (variable.heartEquipped | set_bonus.tier19_2pc) & (!talent.earthen_spike.enabled | (cooldown.earthen_spike.remains > 1 & cooldown.doom_winds.remains > 1) | debuff.earthen_spike.up)
     if (WoW.CanCast("Windstrike", true, true, true) && WoW.PlayerHasBuff("Ascendance") && WoW.Maelstrom >= 8 && (/*heart equip place holder*/ WoW.SetBonus(19) >= 2) && (WoW.Talent(7) != 3 || (WoW.SpellCooldownTimeRemaining("Earthen spike") > 1 && WoW.SpellCooldownTimeRemaining("Doom winds") > 1 || WoW.TargetHasDebuff("Earthen spike"))))
     {
         WoW.CastSpell("Windstrike", "Top prioity spell");
         return;
     }
     //actions.buffs = rockbiter,if= talent.landslide.enabled & !buff.landslide.up
     if (WoW.CanCast("Rockbiter", true, true, true) && WoW.Talent(1) == 3 && !WoW.PlayerHasBuff("Landslide"))
     {
         WoW.CastSpell("Rockbiter", "Buff spell");
         return;
     }
     //actions.buffs +=/ fury_of_air,if= buff.ascendance.up | (feral_spirit.remains > 5) | level < 100
     if (WoW.CanCast("FoA") && WoW.Maelstrom >= 5 && WoW.Talent(6) == 2 && !WoW.PlayerHasBuff("FoA") && (WoW.PlayerHasBuff("Ascendance") && Pets.IsRunning))
     {
         WoW.CastSpell("FoA", "Buff spell");
         return;
     }
     //actions.buffs +=/ crash_lightning,if= artifact.alpha_wolf.rank & prev_gcd.1.feral_spirit
     if (WoW.CanCast("Crash lightning") && WoW.Maelstrom >= 20 && WoW.IsSpellInRange("Rockbiter") && Pets.IsRunning && !Crash.IsRunning)
     {
         Crash.Restart();
         WoW.CastSpell("Crash lightning", "Buff spell");
         return;
     }
     //actions.buffs +=/ flametongue,if= !buff.flametongue.up
     if (!WoW.PlayerHasBuff("Flametongue") && WoW.CanCast("Flametongue", true, true, true))
     {
         WoW.CastSpell("Flametongue", "Buff spell");
         return;
     }
     //actions.buffs +=/ frostbrand,if= talent.hailstorm.enabled & !buff.frostbrand.up & variable.furyCheck45
     if (WoW.CanCast("Frostbrand", true, true, true) && WoW.Maelstrom >= 20 && WoW.Talent(4) == 3 && !WoW.PlayerHasBuff("Frostbrand") && furyCheck45)
     {
         WoW.CastSpell("Frostbrand", "Buff spell");
         return;
     }
     //actions.buffs +=/ flametongue,if= buff.flametongue.remains < 6 + gcd & cooldown.doom_winds.remains < gcd * 2
     if (WoW.CanCast("Flametongue", true, true, true) && WoW.PlayerBuffTimeRemaining("Flametongue") < 600 + GCD && WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2)
     {
         WoW.CastSpell("Flametongue", "Buff spell");
         return;
     }
     //actions.buffs +=/ frostbrand,if= talent.hailstorm.enabled & buff.frostbrand.remains < 6 + gcd & cooldown.doom_winds.remains < gcd * 2
     if (WoW.CanCast("Frostbrand", true, true, true) && WoW.Maelstrom >= 20 && WoW.PlayerBuffTimeRemaining("Frostbrand") < 600 + GCD && WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2)
     {
         WoW.CastSpell("Frostbrand", "Buff spell");
         return;
     }
 }
Ejemplo n.º 5
0
 private void EnhancementBuffs()
 {
     if (WoW.CanCast("Windstrike", true, true, true) && WoW.PlayerHasBuff("Ascendance") && WoW.Maelstrom >= 8 && WoW.SetBonus(19) >= 2 &&
         (WoW.Talent(7) != 3 || WoW.SpellCooldownTimeRemaining("Earthen spike") > 1 && WoW.SpellCooldownTimeRemaining("Doom winds") > 1 ||
          WoW.TargetHasDebuff("Earthen spike")))
     {
         WoW.CastSpell("Windstrike");
         return;
     }
     if (WoW.CanCast("Rockbiter", true, true, true) && WoW.Talent(1) == 3 && !WoW.PlayerHasBuff("Landslide"))
     {
         WoW.CastSpell("Rockbiter");
         return;
     }
     if (WoW.CanCast("FoA") && WoW.Maelstrom >= 5 && WoW.Talent(6) == 2 && !WoW.PlayerHasBuff("FoA") && WoW.PlayerHasBuff("Ascendance") &&
         Pets.IsRunning)
     {
         WoW.CastSpell("FoA");
         return;
     }
     if (WoW.CanCast("Crash lightning") && WoW.Maelstrom >= 20 && WoW.IsSpellInRange("Rockbiter") && Pets.IsRunning && !Crash.IsRunning)
     {
         Crash.Restart();
         WoW.CastSpell("Crash lightning");
         return;
     }
     if (!WoW.PlayerHasBuff("Flametongue") && WoW.CanCast("Flametongue", true, true, true))
     {
         WoW.CastSpell("Flametongue");
         return;
     }
     if (WoW.CanCast("Frostbrand", true, true, true) && WoW.Maelstrom >= 20 && WoW.Talent(4) == 3 && !WoW.PlayerHasBuff("Frostbrand") && FuryCheck45)
     {
         WoW.CastSpell("Frostbrand");
         return;
     }
     if (WoW.CanCast("Flametongue", true, true, true) && WoW.PlayerBuffTimeRemaining("Flametongue") < 600 + GCD &&
         WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2)
     {
         WoW.CastSpell("Flametongue");
         return;
     }
     if (WoW.CanCast("Frostbrand", true, true, true) && WoW.Maelstrom >= 20 && WoW.PlayerBuffTimeRemaining("Frostbrand") < 600 + GCD &&
         WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2)
     {
         WoW.CastSpell("Frostbrand");
     }
 }
Ejemplo n.º 6
0
        public override void Pulse()
        {
            var SavageRoarTime = WoW.PlayerBuffTimeRemaining("SavageRoar"); // 200 = 2 seconds
            var RakeTime       = WoW.TargetDebuffTimeRemaining("Rake");
            var RipTime        = WoW.TargetDebuffTimeRemaining("Rip");
            var MoonfireTime   = WoW.TargetDebuffTimeRemaining("Moonfire");

            WoW.CastSpell("Berserk", UseCooldowns && !WoW.PlayerHasBuff("Prowl"));

            WoW.CastSpell("Regrowth", WoW.PlayerHasBuff("PredatorySwiftness") && WoW.PlayerBuffStacks("Bloodtalons") != 2 && !WoW.PlayerHasBuff("Prowl"));

            // Cast Ferocious Bite if at 5 Combo Points and Rip / Savage Roar do not need refreshing within 10 sec.
            WoW.CastSpell("FerociousBite", WoW.CurrentComboPoints >= 5 && RipTime > 1000 && SavageRoarTime > 1000 && !WoW.PlayerHasBuff("Prowl"));

            // Maintain Savage Roar if taken.
            WoW.CastSpell("SavageRoar", WoW.Talent(6) == 3 && SavageRoarTime <= 200 && WoW.CurrentComboPoints >= 1 && WoW.Energy >= 40 && !WoW.PlayerHasBuff("Prowl"));

            // Maintain Rake.
            WoW.CastSpell("Rake", RakeTime <= 200 && WoW.Energy >= 35);

            // Maintain Rip (at below 25%, or with Sabertooth taken, replace with Ferocious Bite).
            WoW.CastSpell("Rip", RipTime <= 200 && WoW.Talent(6) != 1 && WoW.CurrentComboPoints >= 1 && WoW.Energy >= 30);
            WoW.CastSpell("FerociousBite", RipTime <= 200 && WoW.TargetHealthPercent <= 25 && WoW.Talent(6) == 1 && WoW.CurrentComboPoints >= 1);

            // Maintain Moonfire if Lunar Inspiration is taken.
            WoW.CastSpell("Moonfire", MoonfireTime <= 200 && WoW.Energy >= 30 && WoW.Talent(1) == 3);

            // Use any Omen of Clarity procs to maintain Thrash if using Luffa Wrappings.
            // Will code this when i get the item till then stuff it.... :)

            // Cast Tiger's Fury at 20 Energy or less.
            WoW.CastSpell("TigersFury", WoW.Energy <= 20, false);

            // Cast Ashamane's Frenzy, try to sync this with Tiger's Fury uses.
            WoW.CastSpell("Ashamane", true);

            // Cast Shred to build combo points.
            WoW.CastSpell("Shred", (WoW.Energy >= 40 || WoW.PlayerHasBuff("ClearCasting")) && WoW.CountEnemyNPCsInRange <= 1);
            WoW.CastSpell("Thrash", (WoW.Energy >= 40 || WoW.PlayerHasBuff("ClearCasting")) && WoW.CountEnemyNPCsInRange >= 2);

            // When using Brutal Slash, try to make sure that you always have at least one charge on cooldown,
            // but have as many charges as possible when a wave of enemies comes into range.
            // Try to have short duration buffs such as Tiger's Fury and Bloodtalons active
            // on as many high target casts of this as possible, as it deals massive AoE burst damage with each cast.
            WoW.CastSpell("BrutalSlash", WoW.Talent(6) == 2 && WoW.Energy >= 20 && WoW.PlayerSpellCharges("BrutalSlash") > 1);
            WoW.CastSpell("BrutalSlash", WoW.Talent(6) == 2 && WoW.Energy >= 20 && WoW.PlayerSpellCharges("BrutalSlash") == 1 && WoW.PlayerHasBuff("TigersFury"));
        }
 private void EnhancementBuffs()
 {
     //actions.buffs = rockbiter,if= talent.landslide.enabled & !buff.landslide.up
     if (WoW.CanCast("Rockbiter", true, true, true) && WoW.Talent(1) == 3 && !WoW.PlayerHasBuff("Landslide"))
     {
         WoW.CastSpell("Rockbiter", "Buff spell");
         return;
     }
     //actions.buffs +=/ fury_of_air,if= buff.ascendance.up | (feral_spirit.remains > 5) | level < 100
     if (WoW.CanCast("FoA") && WoW.Talent(6) == 2 && !WoW.PlayerHasBuff("FoA") && (WoW.PlayerHasBuff("Ascendance") && Pets.IsRunning))
     {
         WoW.CastSpell("FoA", "Buff spell");
         return;
     }
     //actions.buffs +=/ crash_lightning,if= artifact.alpha_wolf.rank & prev_gcd.1.feral_spirit
     if (WoW.CanCast("Crash lightning") && WoW.IsSpellInRange("Rockbiter") && Pets.IsRunning && !Crash.IsRunning)
     {
         Crash.Restart();
         WoW.CastSpell("Crash lightning", "Buff spell");
         return;
     }
     //actions.buffs +=/ flametongue,if= !buff.flametongue.up
     if (!WoW.PlayerHasBuff("Flametongue") && WoW.CanCast("Flametongue", true, true, true))
     {
         WoW.CastSpell("Flametongue", "Buff spell");
         return;
     }
     //actions.buffs +=/ frostbrand,if= talent.hailstorm.enabled & !buff.frostbrand.up & variable.furyCheck45
     if (WoW.CanCast("Frostbrand", true, true, true) && WoW.Talent(4) == 3 && !WoW.PlayerHasBuff("Frostbrand") && furyCheck45)
     {
         WoW.CastSpell("Frostbrand", "Buff spell");
         return;
     }
     //actions.buffs +=/ flametongue,if= buff.flametongue.remains < 6 + gcd & cooldown.doom_winds.remains < gcd * 2
     if (WoW.CanCast("Flametongue", true, true, true) && WoW.PlayerBuffTimeRemaining("Flametongue") < 600 + GCD && WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2)
     {
         WoW.CastSpell("Flametongue", "Buff spell");
         return;
     }
     //actions.buffs +=/ frostbrand,if= talent.hailstorm.enabled & buff.frostbrand.remains < 6 + gcd & cooldown.doom_winds.remains < gcd * 2
     if (WoW.CanCast("Frostbrand", true, true, true) && WoW.PlayerBuffTimeRemaining("Frostbrand") < 600 + GCD && WoW.SpellCooldownTimeRemaining("Doom Winds") < GCD * 2)
     {
         WoW.CastSpell("Frostbrand", "Buff spell");
         return;
     }
 }
Ejemplo n.º 8
0
 private void CooldownUsage()
 {
     if (!UseCooldowns)
     {
         return;
     }
     if (PIBloodlustBox.Checked && CheckBloodlust() >= 20)
     {
         SpellCast(POWER_INFUSION);
     }
     if (PIStacksBox.Checked && WoW.PlayerHasBuff(VOIDFORM_AURA) && WoW.PlayerBuffStacks(VOIDFORM_AURA) >= 20)
     {
         SpellCast(POWER_INFUSION);
     }
     if (PIWaitBox.Checked && WoW.IsSpellOnCooldown(SHADOW_FIEND) && WoW.SpellCooldownTimeRemaining(SHADOW_FIEND) > txtPIWait)
     {
         SpellCast(POWER_INFUSION);
     }
     if (SFPIBox.Checked && (WoW.PlayerBuffTimeRemaining(POWER_INFUSION_AURA) == 1200 || CheckBloodlust() == 1200))
     {
         SpellCast(SHADOW_FIEND);
     }
     if (SFWaitBox.Checked && WoW.IsSpellOnCooldown(POWER_INFUSION) && WoW.SpellCooldownTimeRemaining(POWER_INFUSION) > txtSFWait)
     {
         SpellCast(SHADOW_FIEND);
     }
     if (!MoveCheck() && VoidTorrentRadio1.Checked && DotsUp() && VoidTorrentBox.Checked && WoW.IsSpellOnCooldown(MIND_BLAST) && WoW.IsSpellOnCooldown(VOID_BOLT))
     {
         SpellCast(VOID_TORRENT);
     }
     if (WoW.HealthPercent < txtVE && !WoW.IsSpellOnCooldown(VAMPIRIC_EMBRACE))
     {
         Log.Write("Health below " + txtVE + "% - Using Vampiric Embrace now", Color.Red);
         SpellCast(VAMPIRIC_EMBRACE);
         return;
     }
     if (!WoW.ItemOnCooldown(ITEM_KILJAEDEN) && LegTrinketBox.Checked && DotsUp())
     {
         SpellCast(ITEM_KILJAEDEN);
     }
 }
        private static int GetPartyBuffTimeRemaining(string buffName, int partyID)
        {
            if (partyID == 0)
            {
                return(WoW.PlayerBuffTimeRemaining(buffName));
            }
            Aura aura = null;

            for (var i = 0; i < SpellBook.Auras.Count; i++)
            {
                if (SpellBook.Auras[i].AuraName == buffName)
                {
                    aura = SpellBook.Auras[i];
                }
            }
            if (aura == null)
            {
                Log.Write($"[HasDebuff] Fant ikke debuff '{buffName}' in Spell Book");
                return(0);
            }
            var c = WoW.GetBlockColor(aura.InternalAuraNo, 12 + partyID);

            try
            {
                // ReSharper disable once PossibleNullReferenceException
                if (c.R == 0)
                {
                    return(0);
                }
                return(Convert.ToInt32((double)c.R * 100 / 255));
            }
            catch (Exception ex)
            {
                Log.Write("Failed to find debuff stacks for color G = " + c.B, Color.Red);
                Log.Write("Error: " + ex.Message, Color.Red);
            }

            return(0);
        }
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.PlayerHasBuff("Stealth") || WoW.PlayerHasBuff("Subterfuge") || WoW.PlayerHasBuff("Shadow Dance"))
                    {
                        if (WoW.CanCast("Symbols of Death") && WoW.Energy >= 35 &&
                            (!WoW.PlayerHasBuff("Symbols of Death") || WoW.PlayerBuffTimeRemaining("Symbols of Death") <= 10))
                        {
                            WoW.CastSpell("Symbols of Death");
                            return;
                        }

                        if (WoW.CanCast("Nightblade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 &&
                            (!WoW.TargetHasDebuff("Nightblade") || WoW.TargetDebuffTimeRemaining("Nightblade") <= 4) && WoW.IsSpellInRange("Nightblade"))
                        {
                            WoW.CastSpell("Nightblade");
                            return;
                        }

                        if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 35 && WoW.TargetHasDebuff("Nightblade") &&
                            WoW.IsSpellInRange("Eviscerate"))

                        {
                            WoW.CastSpell("Eviscerate");
                            return;
                        }

                        if (WoW.CanCast("Shadowstrike") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 40 && WoW.IsSpellInRange("Shadowstrike"))
                        {
                            WoW.CastSpell("Shadowstrike");
                            return;
                        }
                    }

                    if (WoW.CanCast("Shadow Blades") && WoW.HasTarget && WoW.PlayerHasBuff("Symbols of Death") && WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Shadow Blades");
                        return;
                    }

                    if (WoW.CanCast("Shadow Dance") &&
                        (!WoW.PlayerHasBuff("Stealth") || !WoW.PlayerHasBuff("Shadow Dance") || !WoW.PlayerHasBuff("Subterfuge")) && WoW.Energy >= 55 &&
                        (WoW.PlayerSpellCharges("Shadow Dance") == 3 && WoW.CurrentComboPoints <= 3 ||
                         WoW.PlayerSpellCharges("Shadow Dance") == 2 && WoW.CurrentComboPoints <= 1) &&
                        WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Shadow Dance");
                        return;
                    }

                    if (WoW.CanCast("Goremaw's Bite") && WoW.CurrentComboPoints <= 2 && WoW.Energy <= 50 && WoW.IsSpellInRange("Goremaw's Bite") &&
                        WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Goremaw's Bite");
                        return;
                    }

                    if (WoW.CanCast("Nightblade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 &&
                        (!WoW.TargetHasDebuff("Nightblade") || WoW.TargetDebuffTimeRemaining("Nightblade") <= 4) &&
                        WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Nightblade");
                        return;
                    }

                    if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 35 && WoW.TargetHasDebuff("Nightblade") &&
                        WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Eviscerate");
                        return;
                    }

                    if (WoW.CanCast("Backstab") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 55 && WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Backstab");
                        return;
                    }
                }
            }

            if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.Cleave) // Do AoE Target Stuff here
            {
                if ((WoW.HasTarget || UseCooldowns) && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.PlayerHasBuff("Stealth") || WoW.PlayerHasBuff("Subterfuge") || WoW.PlayerHasBuff("Shadow Dance"))
                    {
                        if (WoW.CanCast("Symbols of Death") && WoW.Energy >= 35 &&
                            (!WoW.PlayerHasBuff("Symbols of Death") || WoW.PlayerBuffTimeRemaining("Symbols of Death") <= 10))
                        {
                            WoW.CastSpell("Symbols of Death");
                            return;
                        }


                        if (WoW.CanCast("Nightblade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 &&
                            (!WoW.TargetHasDebuff("Nightblade") || WoW.TargetDebuffTimeRemaining("Nightblade") <= 4) && WoW.IsSpellInRange("Nightblade"))
                        {
                            WoW.CastSpell("Nightblade");
                            return;
                        }

                        if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 35 && WoW.TargetHasDebuff("Nightblade") &&
                            WoW.IsSpellInRange("Eviscerate"))

                        {
                            WoW.CastSpell("Eviscerate");
                            return;
                        }

                        if (WoW.CanCast("Shadowstrike") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 40 && WoW.IsSpellInRange("Shadowstrike"))
                        {
                            WoW.CastSpell("Shadowstrike");
                            return;
                        }

                        if (WoW.CanCast("Shuriken Storm") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 35 && WoW.IsSpellInRange("Eviscerate"))
                        {
                            WoW.CastSpell("Shuriken Storm");
                            return;
                        }
                    }

                    if (WoW.CanCast("Shadow Blades") && WoW.HasTarget && WoW.PlayerHasBuff("Symbols of Death") && WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Shadow Blades");
                        return;
                    }

                    if (WoW.CanCast("Shadow Dance") &&
                        (!WoW.PlayerHasBuff("Stealth") || !WoW.PlayerHasBuff("Shadow Dance") || !WoW.PlayerHasBuff("Subterfuge")) &&
                        (WoW.PlayerSpellCharges("Shadow Dance") == 3 && WoW.CurrentComboPoints <= 3 ||
                         WoW.PlayerSpellCharges("Shadow Dance") == 2 && WoW.CurrentComboPoints <= 1) &&
                        WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Shadow Dance");
                        return;
                    }

                    if (WoW.CanCast("Goremaw's Bite") && WoW.CurrentComboPoints <= 2 && WoW.Energy <= 50 && WoW.IsSpellInRange("Goremaw's Bite") &&
                        WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Goremaw's Bite");
                        return;
                    }

                    if (WoW.CanCast("Nightblade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 &&
                        (!WoW.TargetHasDebuff("Nightblade") || WoW.TargetDebuffTimeRemaining("Nightblade") <= 4) &&
                        WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Nightblade");
                        return;
                    }

                    if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 35 && WoW.TargetHasDebuff("Nightblade") &&
                        WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Eviscerate");
                        return;
                    }

                    if (WoW.CanCast("Shuriken Storm") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 35 && WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Shuriken Storm");
                    }
                }
            }
        }
Ejemplo n.º 11
0
 public override void Pulse()                             // Updated for Legion (tested and working for single target)
 {
     if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
     {
         if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
         {
             if (WoW.CanCast("Marrowrend") && WoW.PlayerBuffTimeRemaining("Bone Shield") >= 3 && WoW.CurrentRunes >= 1 && !WoW.IsSpellOnCooldown("Marrowrend"))
             {
                 WoW.CastSpell("Marrowrend");
                 return;
             }
             if (WoW.CanCast("Blood Boil") && !WoW.TargetHasDebuff("Blood Plague") && !WoW.IsSpellOnCooldown("Blood Boil"))
             {
                 WoW.CastSpell("Blood Boil");
                 return;
             }
             if (WoW.CanCast("Dancing Rune Weapon") && WoW.HealthPercent < 50)
             {
                 WoW.CastSpell("Dancing Rune Weapon");
                 return;
             }
             if (WoW.CanCast("Death Strike") && WoW.RunicPower >= 45 && WoW.HealthPercent < 85 && !WoW.IsSpellOnCooldown("Death Strike"))
             {
                 WoW.CastSpell("Death Strike");
                 return;
             }
             if (WoW.CanCast("Marrowrend") && WoW.PlayerBuffStacks("Bone Shield") >= 6 && !WoW.IsSpellOnCooldown("Marrowrend"))
             {
                 WoW.CastSpell("Marrowrend");
                 return;
             }
             if (WoW.CanCast("Heart Strike") && WoW.CurrentRunes >= 3 || WoW.RunicPower <= 45 && !WoW.IsSpellOnCooldown("Heart Strike"))
             {
                 WoW.CastSpell("Heart Strike");
                 return;
             }
             if (WoW.CanCast("Consumption") && !WoW.IsSpellOnCooldown("Consumption"))
             {
                 WoW.CastSpell("Consumption");
                 return;
             }
             if (WoW.CanCast("Blood Boil") && !WoW.IsSpellOnCooldown("Blood Boil"))
             {
                 WoW.CastSpell("Blood Boil");
                 return;
             }
         }
     }
     if (combatRoutine.Type == RotationType.AOE)
     {
         if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
         {
             if (WoW.CanCast("Anti-Magic Shell") && WoW.HealthPercent < 50 && !WoW.IsSpellOnCooldown("Anti-Magic Shell"))
             {
                 WoW.CastSpell("Anti-Magic Shell");
                 return;
             }
             if (WoW.CanCast("Icebound Fortitude") && WoW.HealthPercent < 40 && !WoW.IsSpellOnCooldown("Icebound Fortitude"))
             {
                 WoW.CastSpell("Icebound Fortitude");
                 return;
             }
             if (WoW.CanCast("Vampiric Blood") && WoW.HealthPercent < 30 && !WoW.IsSpellOnCooldown("Vampiric Blood"))
             {
                 WoW.CastSpell("Vampiric Blood");
                 return;
             }
             if (WoW.CanCast("Marrowrend") && WoW.PlayerBuffTimeRemaining("Bone Shield") >= 3 && WoW.CurrentRunes >= 1 && !WoW.IsSpellOnCooldown("Marrowrend"))
             {
                 WoW.CastSpell("Marrowrend");
                 return;
             }
             if (WoW.CanCast("Blood Boil") && !WoW.TargetHasDebuff("Blood Plague") && !WoW.IsSpellOnCooldown("Blood Boil"))
             {
                 WoW.CastSpell("Blood Boil");
                 return;
             }
             if (WoW.CanCast("Dancing Rune Weapon") && WoW.HealthPercent < 50)
             {
                 WoW.CastSpell("Dancing Rune Weapon");
                 return;
             }
             if (WoW.CanCast("Death Strike") && WoW.RunicPower >= 45 && WoW.HealthPercent < 85 && !WoW.IsSpellOnCooldown("Death Strike"))
             {
                 WoW.CastSpell("Death Strike");
                 return;
             }
             if (WoW.CanCast("Marrowrend") && WoW.PlayerBuffStacks("Bone Shield") >= 6 && !WoW.IsSpellOnCooldown("Marrowrend"))
             {
                 WoW.CastSpell("Marrowrend");
                 return;
             }
             if (WoW.CanCast("Heart Strike") && WoW.CurrentRunes >= 3 || WoW.RunicPower <= 45 && !WoW.IsSpellOnCooldown("Heart Strike"))
             {
                 WoW.CastSpell("Heart Strike");
                 return;
             }
             if (WoW.CanCast("Consumption") && !WoW.IsSpellOnCooldown("Consumption"))
             {
                 WoW.CastSpell("Consumption");
                 return;
             }
             if (WoW.CanCast("Blood Boil") && !WoW.IsSpellOnCooldown("Blood Boil"))
             {
                 WoW.CastSpell("Blood Boil");
                 return;
             }
         }
     }
     if (combatRoutine.Type == RotationType.SingleTargetCleave)
     {
         // Do Single Target Cleave stuff here if applicable else ignore this one
     }
 }
Ejemplo n.º 12
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget)
            {
                // Stopwatch START
                if (WoW.IsInCombat && !pullwatch.IsRunning)
                {
                    pullwatch.Start();
                    Log.Write("Entering Combat, Starting opener timer.", Color.Red);
                }
                // Stopwatch stop
                if (!WoW.IsInCombat && pullwatch.ElapsedMilliseconds >= 1000)
                {
                    pullwatch.Reset();
                    ripunbuffed.Reset();
                    ripbuffed.Reset();
                    superrip.Reset();
                    Log.Write("Leaving Combat, Resetting opener timer.", Color.Red);
                }

                //PVP, Basic PVP with Brutal Slash, Incarnation and Renewal (if enabled)
                if (WoW.TargetIsPlayer && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.CanCast("Regrowth") && WoW.PlayerHasBuff("Regrowth") && WoW.HealthPercent <= 80 && WoW.PlayerHasBuff("PredatorySwiftness"))
                    {
                        WoW.CastSpell("Regrowth");
                        return;
                    }
                    if (Renewal && WoW.CanCast("Renwal") && WoW.HealthPercent <= 70)
                    {
                        WoW.CastSpell("Renewal");
                        return;
                    }
                    if ((WoW.IsSpellInRange("FerociousBite") && WoW.CanCast("FerociousBite") && WoW.CurrentComboPoints >= 5 && WoW.TargetHasDebuff("Rip")) && WoW.TargetDebuffTimeRemaining("Rip") >= 500 && (WoW.Energy >= 50 || WoW.PlayerHasBuff("Incarnation") || WoW.PlayerHasBuff("Berserk")))
                    {
                        WoW.CastSpell("FerociousBite");
                        return;
                    }

                    if ((WoW.IsSpellInRange("Rake") && WoW.CanCast("Rake") && (!WoW.TargetHasDebuff("Rake") || WoW.TargetDebuffTimeRemaining("Rake") <= 300)) && (WoW.Energy >= 35 || WoW.PlayerHasBuff("Incarnation") || WoW.PlayerHasBuff("Berserk")))
                    {
                        WoW.CastSpell("Rake");
                        return;
                    }
                    if (WoW.IsSpellInRange("Ashamane") && WoW.CanCast("Ashamane") && !WoW.IsSpellOnCooldown("Ashamane") && WoW.CurrentComboPoints <= 2)
                    {
                        WoW.CastSpell("Ashamane");
                        return;
                    }

                    if ((WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.CurrentComboPoints >= 5 && (!WoW.TargetHasDebuff("Rip") || WoW.TargetDebuffTimeRemaining("Rip") <= 500)) && (WoW.Energy >= 30 || WoW.PlayerHasBuff("Incarnation") || WoW.PlayerHasBuff("Berserk")))
                    {
                        WoW.CastSpell("Rip");
                        return;
                    }

                    if ((WoW.IsSpellInRange("Shred") && WoW.CanCast("Shred") && WoW.CurrentComboPoints < 5 && WoW.TargetHasDebuff("Rake") && (WoW.IsSpellOnCooldown("BrutalSlash") || !BrutalSlash) && (WoW.Energy >= 40 || WoW.PlayerHasBuff("Incarnation") || WoW.PlayerHasBuff("Berserk"))))
                    {
                        WoW.CastSpell("Shred");
                        return;
                    }
                    if (WoW.CanCast("TigersFury") && WoW.Energy <= 20 && !WoW.IsSpellOnCooldown("TigersFury"))
                    {
                        WoW.CastSpell("TigersFury");
                        return;
                    }
                    if (BrutalSlash && WoW.IsSpellInRange("Shred") && WoW.CanCast("BrutalSlash") && !WoW.IsSpellOnCooldown("BrutalSlash") && (WoW.Energy >= 20 || WoW.PlayerHasBuff("Incarnation") || WoW.PlayerHasBuff("Berserk")))
                    {
                        WoW.CastSpell("BrutalSlash");
                        return;
                    }
                }

                // OPENER
                if (WoW.IsInCombat && WoW.TargetIsEnemy && WoW.IsBoss && pullwatch.ElapsedMilliseconds < 10000 && UseCooldowns)
                {
                    if (Bloodtalons && WoW.CanCast("Regrowth"))
                    {
                        if (WoW.CurrentComboPoints >= 2 && !WoW.PlayerHasBuff("Savage Roar") && WoW.PlayerHasBuff("PredatorySwiftness"))
                        {
                            WoW.CastSpell("Regrowth");
                            return;
                        }
                        if (WoW.CurrentComboPoints >= 5 && WoW.PlayerHasBuff("PredatorySwiftness"))
                        {
                            WoW.CastSpell("Regrowth");
                            return;
                        }
                        if (WoW.PlayerBuffTimeRemaining("PredatorySwiftness") < 150 && WoW.PlayerHasBuff("PredatorySwiftness"))
                        {
                            WoW.CastSpell("Regrowth");
                            return;
                        }
                        if (WoW.CurrentComboPoints == 2 && !WoW.PlayerHasBuff("Bloodtalons") && WoW.SpellCooldownTimeRemaining("Ashamane") <= 100 && WoW.PlayerHasBuff("PredatorySwiftness"))
                        {
                            WoW.CastSpell("Regrowth");
                            return;
                        }
                        // If Elunes Guidance talent enabled
                        if (ElunesGuidance)
                        {
                            if (WoW.SpellCooldownTimeRemaining("ElunesGuidance") <= 100 && WoW.CurrentComboPoints == 0)
                            {
                                WoW.CastSpell("Regrowth");
                                return;
                            }
                            if (WoW.PlayerHasBuff("ElunesGuidance") && WoW.CurrentComboPoints >= 4)
                            {
                                WoW.CastSpell("Regrowth");
                                return;
                            }
                        }
                    }
                    if (SavageRoar && WoW.CanCast("SavageRoar") && WoW.CurrentComboPoints == 5 && !WoW.PlayerHasBuff("SavageRoar"))
                    {
                        WoW.CastSpell("SavageRoar");
                        return;
                    }
                    if (SavageRoar && WoW.CanCast("SavageRoar") && !WoW.PlayerHasBuff("SavageRoar") && WoW.CurrentComboPoints >= 2)
                    {
                        WoW.CastSpell("SavageRoar");
                        return;
                    }
                    if (WoW.CanCast("TigersFury") && WoW.Energy <= 30)
                    {
                        WoW.CastSpell("TigersFury");
                        return;
                    }
                    if (WoW.CanCast("TigersFury") &&
                        WoW.PlayerHasBuff("SavageRoar"))
                    {
                        WoW.CastSpell("TigersFury");
                        return;
                    }
                    if (!Incarnation && WoW.CanCast("Berserk") &&
                        WoW.PlayerHasBuff("SavageRoar"))
                    {
                        WoW.CastSpell("Berserk");
                        return;
                    }
                    if (Incarnation && WoW.CanCast("Incarnation") &&
                        WoW.PlayerHasBuff("SavageRoar"))
                    {
                        WoW.CastSpell("Incarnation");
                        return;
                    }
                    if (WoW.CanCast("Rake") && !WoW.TargetHasDebuff("Rake"))
                    {
                        WoW.CastSpell("Rake");
                        return;
                    }
                    if (LunarInspiration && !WoW.TargetHasDebuff("Moonfire") && WoW.IsSpellInRange("SkullBash") && WoW.Energy >= 30 && WoW.CurrentComboPoints < 5)
                    {
                        WoW.CastSpell("Moonfire");
                        return;
                    }
                    {
                        WoW.CastSpell("Moonfire");
                        return;
                    }
                    if (WoW.CanCast("Ashamane") && WoW.TargetHasDebuff("Rip"))
                    {
                        WoW.CastSpell("Ashamane");
                        return;
                    }
                    if (WoW.CanCast("Rip") && WoW.PlayerHasBuff("SavageRoar") && WoW.CurrentComboPoints == 5)
                    {
                        WoW.CastSpell("Rip");
                        return;
                    }
                    if (WoW.CanCast("Shred") && WoW.CurrentComboPoints < 5)
                    {
                        WoW.CastSpell("Shred");
                        return;
                    }
                }

                // OPEN COMBAT WITH SHADOWMELD RAKE
                if (WoW.TargetIsEnemy && WoW.IsInCombat && (WoW.PlayerHasBuff("Prowl") || WoW.PlayerHasBuff("Shadowmeld")))
                {
                    if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Rake"))
                    {
                        WoW.CastSpell("Rake");
                        return;
                    }
                }

                // COOLDOWN ROTATION
                if (WoW.IsInCombat && WoW.TargetIsEnemy && UseCooldowns)
                {
                    if (!Incarnation && WoW.CanCast("Berserk") && WoW.PlayerHasBuff("TigersFury") || WoW.SpellCooldownTimeRemaining("TigersFury") < 200)
                    {
                        WoW.CastSpell("Berserk");
                        return;
                    }
                    if (Incarnation && WoW.CanCast("Incarnation") && WoW.PlayerHasBuff("TigersFury") || WoW.SpellCooldownTimeRemaining("TigersFury") < 200)
                    {
                        WoW.CastSpell("Incarnation");
                        return;
                    }
                }

                // PRIMARY ROTATION
                if (WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerHasBuff("Prowl") && WoW.PlayerHasBuff("Cat Form"))
                {
                    // Tigers Fury on cooldown if under 30 Energy
                    if (WoW.CanCast("TigersFury") && WoW.Energy <= 30)
                    {
                        WoW.CastSpell("TigersFury");
                        return;
                    }
                    // Keep Rip from falling off during execute range
                    if (WoW.IsSpellInRange("Rake") && WoW.CanCast("FerociousBite") && WoW.TargetHasDebuff("Rip") && WoW.TargetHasDebuff("Rip") && WoW.PlayerHasBuff("SavageRoar") && WoW.TargetDebuffTimeRemaining("Rip") < 3 && WoW.TargetHealthPercent <= 25 && WoW.Energy >= 25)
                    {
                        WoW.CastSpell("FerociousBite");
                        return;
                    }
                    // Regrowth logic with Bloodtalons talent enabled
                    if (Bloodtalons && WoW.CanCast("Regrowth"))
                    {
                        if (WoW.CurrentComboPoints >= 5 && WoW.PlayerHasBuff("PredatorySwiftness"))
                        {
                            WoW.CastSpell("Regrowth");
                            return;
                        }
                        if (WoW.PlayerBuffTimeRemaining("PredatorySwiftness") < 1500 && WoW.PlayerHasBuff("PredatorySwiftness"))
                        {
                            WoW.CastSpell("Regrowth");
                            return;
                        }
                        if (WoW.CurrentComboPoints == 2 && !WoW.PlayerHasBuff("Bloodtalons") && WoW.SpellCooldownTimeRemaining("Ashamane") <= 100 && WoW.PlayerHasBuff("PredatorySwiftness"))
                        {
                            WoW.CastSpell("Regrowth");
                            return;
                        }
                        // If Elunes Guidance talent enabled
                        if (ElunesGuidance)
                        {
                            if (WoW.SpellCooldownTimeRemaining("ElunesGuidance") <= 100 && WoW.CurrentComboPoints == 0)
                            {
                                WoW.CastSpell("Regrowth");
                                return;
                            }
                            if (WoW.PlayerHasBuff("ElunesGuidance") && WoW.CurrentComboPoints >= 4)
                            {
                                WoW.CastSpell("Regrowth");
                                return;
                            }
                        }
                    }
                    // Sabertooth Opener
                    //if (Sabertooth)
                    //{

                    //}

                    // LEGENDARY LOGIC
                    if (AiluroPouncers)
                    {
                        if (Bloodtalons && WoW.CanCast("Regrowth") && WoW.PlayerBuffStacks("PredatorySwiftness") > 1 && !WoW.PlayerHasBuff("Bloodtalons") && WoW.PlayerHasBuff("PredatorySwiftness"))
                        {
                            WoW.CastSpell("Regrowth");
                            return;
                        }
                    }
                    // FINISHER LOGIC
                    // FINISHER LOGIC
                    // If have Savage Roar and Rip under 3 seconds remaining and target above 25% hp, cast BUFFED rip.
                    //if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && WoW.TargetHasDebuff("Rip") && WoW.TargetDebuffTimeRemaining("Rip") < 2 && WoW.PlayerHasBuff("SavageRoar") && WoW.PlayerBuffTimeRemaining("SavageRoar") < 8 && WoW.TargetHealthPercent > 25 && WoW.CurrentComboPoints == 5 && WoW.PlayerHasBuff("TigersFury"))
                    //{
                    //    WoW.CastSpell("Rip");
                    //    ripbuffed.Reset();
                    //    ripbuffed.Start();
                    //    ripunbuffed.Reset();
                    //    Log.Write("Override Savage Roar refresh when Rip under 3seconds remaining.", Color.Red);
                    //    return;
                    //}
                    ////
                    //if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && WoW.TargetHasDebuff("Rip") && WoW.TargetDebuffTimeRemaining("Rip") < 2 && WoW.PlayerHasBuff("SavageRoar") && WoW.PlayerBuffTimeRemaining("SavageRoar") < 8 && WoW.TargetHealthPercent > 25 && WoW.CurrentComboPoints == 5 && WoW.PlayerHasBuff("TigersFury"))
                    //{
                    //    WoW.CastSpell("Rip");
                    //    ripbuffed.Reset();
                    //    ripbuffed.Start();
                    //    ripunbuffed.Reset();
                    //    Log.Write("Override Savage Roar refresh when Rip under 3seconds remaining.", Color.Red);
                    //    return;
                    //}
                    // Savage Roar if player dont have buff Savage Roar and is at 5 combo points.
                    if (SavageRoar && WoW.CanCast("SavageRoar") && WoW.Energy >= 40 && !WoW.PlayerHasBuff("SavageRoar") && WoW.CurrentComboPoints == 5)
                    {
                        WoW.CastSpell("SavageRoar");
                        return;
                    }
                    // Savage Roar if player have buff Savage Roar and is under 2 seconds remaining and is at 5 combo points.
                    if (SavageRoar && WoW.CanCast("SavageRoar") && WoW.Energy >= 40 && WoW.PlayerBuffTimeRemaining("SavageRoar") <= 200 && WoW.PlayerHasBuff("SavageRoar") && WoW.CurrentComboPoints == 5)
                    {
                        WoW.CastSpell("SavageRoar");
                        return;
                    }
                    // Ferocious Bite if HP under 25% and Rip Remaining under 3 seconds. (will extend Rip)
                    if (WoW.IsSpellInRange("FerociousBite") && WoW.CanCast("FerociousBite") && WoW.CurrentComboPoints > 1 && WoW.TargetDebuffTimeRemaining("Rip") < 300 && WoW.TargetHealthPercent < 25 && WoW.TargetHasDebuff("Rip"))
                    {
                        WoW.CastSpell("FerociousBite");
                        return;
                    }
                    // If TigersFury running.
                    if (WoW.IsSpellInRange("FerociousBite") && WoW.CanCast("FerociousBite") && WoW.CurrentComboPoints == 5 && ripbuffed.IsRunning && WoW.TargetHasBuff("Rip") && WoW.PlayerHasBuff("SavageRoar") && WoW.PlayerBuffTimeRemaining("SavageRoar") <= 1000 && WoW.TargetDebuffTimeRemaining("Rip") > 7)
                    {
                        WoW.CastSpell("FerociousBite");
                        Log.Write("O mighty super bite.");
                    }
                    // Refresh Rip if not on target and tigersfury or berserk
                    if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && !WoW.TargetHasDebuff("Rip") && WoW.CurrentComboPoints == 5 && WoW.PlayerHasBuff("TigersFury"))
                    {
                        WoW.CastSpell("Rip");
                        ripbuffed.Start();
                        ripunbuffed.Reset();
                        Log.Write("Buffed Rip. Berserk or Tigers Fury buff.", Color.Red);
                        return;
                    }
                    // Refresh Rip for stronger Rip
                    if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && ripunbuffed.IsRunning && WoW.PlayerHasBuff("TigersFury") && WoW.CurrentComboPoints == 5)
                    {
                        WoW.CastSpell("Rip");
                        ripbuffed.Start();
                        ripunbuffed.Reset();
                        Log.Write("Buffed Rip. Berserk or Tigers Fury buff.", Color.Red);
                        return;
                    }
                    // Refresh Rip at 8 seconds if have Tigers fury or Berserk buff.
                    if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && !Sabertooth && WoW.TargetDebuffTimeRemaining("Rip") < 800 && WoW.TargetHealthPercent > 25 && WoW.CurrentComboPoints == 5 && WoW.PlayerHasBuff("TigersFury"))
                    {
                        WoW.CastSpell("Rip");
                        ripbuffed.Start();
                        ripunbuffed.Reset();
                        Log.Write("Buffed Rip. Berserk or Tigers Fury buff.", Color.Red);
                        return;
                    }
                    // Refresh Rip at 8 seconds if no buff and no sabertooth talent and non-buffed rip is running.
                    if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && !Sabertooth && WoW.TargetDebuffTimeRemaining("Rip") < 800 && WoW.TargetHealthPercent > 25 && WoW.CurrentComboPoints == 5 && !ripbuffed.IsRunning)
                    {
                        WoW.CastSpell("Rip");
                        ripunbuffed.Start();
                        ripbuffed.Reset();
                        Log.Write("Unbuffed Rip. Under 8 secs remaining on Unbuffed Rip.", Color.Red);
                        return;
                    }
                    // Refresh Rip if not on target.
                    if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && !WoW.TargetHasDebuff("Rip") && WoW.CurrentComboPoints == 5)
                    {
                        WoW.CastSpell("Rip");
                        ripunbuffed.Start();
                        ripbuffed.Reset();
                        Log.Write("Unbuffed Rip. No Rip on target.", Color.Red);
                        return;
                    }
                    // Refresh Rip if under 2 seconds remaining.
                    if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.Energy >= 30 && WoW.TargetDebuffTimeRemaining("Rip") < 200 && WoW.CurrentComboPoints == 5)
                    {
                        WoW.CastSpell("Rip");
                        ripunbuffed.Start();
                        ripbuffed.Reset();
                        Log.Write("Unbuffed Rip. No Rip under 2secs remaining.", Color.Red);
                        return;
                    }
                    // Refresh Savage roar at under 7.2 secons remaining if no JaggedWounds talent
                    if (SavageRoar && WoW.CanCast("SavageRoar") && WoW.Energy >= 40 && !JaggedWounds && WoW.PlayerBuffTimeRemaining("SavageRoar") < 720 && WoW.CurrentComboPoints == 5)
                    {
                        WoW.CastSpell("SavageRoar");
                        return;
                    }
                    // Refresh Savage Roar early with jagged wounds talent
                    if (SavageRoar && WoW.CanCast("SavageRoar") && WoW.Energy >= 40 && JaggedWounds && WoW.PlayerBuffTimeRemaining("SavageRoar") < 1050 && WoW.CurrentComboPoints == 5)
                    {
                        WoW.CastSpell("SavageRoar");
                        return;
                    }
                    // FB cast without JaggedWounds talent
                    if (WoW.IsSpellInRange("FerociousBite") && WoW.CanCast("FerociousBite") && WoW.Energy >= 25 && WoW.CurrentComboPoints == 5 && !JaggedWounds && WoW.TargetHasDebuff("Rip") && WoW.PlayerHasBuff("SavageRoar") && WoW.PlayerBuffTimeRemaining("SavageRoar") > 920 && WoW.TargetDebuffTimeRemaining("Rip") > 1000)
                    {
                        WoW.CastSpell("FerociousBite");
                        return;
                    }
                    // FB cast with JaggedWounds talent
                    if (WoW.IsSpellInRange("FerociousBite") && WoW.CanCast("FerociousBite") && WoW.Energy >= 25 && WoW.CurrentComboPoints == 5 && JaggedWounds && WoW.TargetHasDebuff("Rip") && WoW.PlayerHasBuff("SavageRoar") && WoW.PlayerBuffTimeRemaining("SavageRoar") > 1250 && WoW.TargetDebuffTimeRemaining("Rip") > 1000)
                    {
                        WoW.CastSpell("FerociousBite");
                        return;
                    }
                    // GENERATOR LOGIC
                    // GENERATOR LOGIC
                    if (WoW.IsSpellInRange("Ashamane") && WoW.CanCast("Ashamane") && WoW.CurrentComboPoints <= 2 && !ElunesGuidance)
                    {
                        WoW.CastSpell("Ashamane");
                        return;
                    }
                    if (ElunesGuidance && WoW.CanCast("ElunesGuidance") && WoW.CurrentComboPoints == 0 && WoW.Energy >= 30)
                    {
                        WoW.CastSpell("ElunesGuidance");
                        return;
                    }
                    if (NightElf && WoW.CanCast("Shadowmeld") && WoW.CurrentComboPoints < 5 && WoW.Energy >= 35 && WoW.PlayerHasBuff("TigersFury"))
                    {
                        WoW.CastSpell("Shadowmeld");
                        return;
                    }
                    if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Rake") && WoW.Energy >= 35)
                    {
                        // TODO : Code in bleed multiplier
                        if (WoW.CurrentComboPoints < 5 && Bloodtalons && WoW.PlayerHasBuff("Bloodtalons") && WoW.TargetDebuffTimeRemaining("Rake") <= 500)
                        {
                            WoW.CastSpell("Rake");
                            return;
                        }
                        if (WoW.CurrentComboPoints < 5 && !WoW.TargetHasDebuff("Rake"))
                        {
                            WoW.CastSpell("Rake");
                            return;
                        }
                        if (WoW.CurrentComboPoints < 5 && WoW.TargetDebuffTimeRemaining("Rake") <= 300)
                        {
                            WoW.CastSpell("Rake");
                            return;
                        }
                    }
                    if (LunarInspiration && !WoW.TargetHasDebuff("Moonfire") && WoW.IsSpellInRange("SkullBash") && WoW.Energy >= 30 && WoW.CurrentComboPoints < 5)
                    {
                        WoW.CastSpell("Moonfire");
                        return;
                    }
                    //if (LunarInspiration && WoW.IsSpellInRange("Moonfire") && WoW.CanCast("Moonfire") && WoW.Energy >= 30)
                    //{
                    //    if (WoW.CurrentComboPoints < 5 && WoW.TargetDebuffTimeRemaining("Moonfire") <= 4.2)
                    //    {
                    //        WoW.CastSpell("Moonfire");
                    //        return;
                    //    }
                    //    if (WoW.CurrentComboPoints < 5 && !WoW.TargetHasDebuff("Moonfire"))
                    //    {
                    //        WoW.CastSpell("Moonfire");
                    //        return;
                    //    }
                    //}
                    if (BrutalSlash && WoW.IsSpellInRange("Rake") && WoW.CanCast("BrutalSlash") && WoW.PlayerSpellCharges("BrutalSlash") == 3 && WoW.Energy >= 20)
                    {
                        WoW.CastSpell("BrutalSlash");
                        return;
                    }
                    if (WoW.IsSpellInRange("Shred") && WoW.CanCast("Shred") && WoW.CurrentComboPoints < 5 && WoW.Energy >= 40)
                    {
                        WoW.CastSpell("Shred");
                        return;
                    }
                }
            }

            //  AOE ROTATION
            if (combatRoutine.Type == RotationType.AOE)
            {
                // In combat, target is enemy, target is not player, i dont have prowl and i have buff catform
                if (WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.TargetIsPlayer && !WoW.PlayerHasBuff("Prowl") && WoW.PlayerHasBuff("Cat Form"))
                {
                    if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Rake") && !WoW.TargetHasDebuff("Rake") && WoW.Energy >= 35)
                    {
                        WoW.CastSpell("Rake");
                        return;
                    }
                    if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Thrash") && !WoW.TargetHasDebuff("Thrash") && WoW.Energy >= 50)
                    {
                        WoW.CastSpell("Thrash");
                        return;
                    }
                    if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Swipe") && WoW.TargetHasDebuff("Thrash") && WoW.CurrentComboPoints < 5 && WoW.Energy >= 45)
                    {
                        WoW.CastSpell("Swipe");
                        return;
                    }
                    if (SavageRoar && WoW.CanCast("Savage Roar") && WoW.CurrentComboPoints == 5 && !WoW.PlayerHasBuff("Savage Roar") && WoW.Energy >= 40)
                    {
                        WoW.CastSpell("SavageRoar");
                        return;
                    }
                    if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.CurrentComboPoints == 5 && !WoW.TargetHasDebuff("Rip") && WoW.Energy >= 30)
                    {
                        WoW.CastSpell("Rip");
                        return;
                    }
                }
            }
        }
        public override void Pulse()
        {
            if (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 (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) // 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 >= 10 && !WoW.PlayerIsChanneling && WoW.HealthPercent < 100 &&
                            (WoW.PlayerSpellCharges("Shield Block") == 2 ||
                             (WoW.PlayerSpellCharges("Shield Block") >= 1 && WoW.HealthPercent <= 90 && WoW.PlayerBuffTimeRemaining("ShieldBlockAura") <= 2)))
                        {
                            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.PlayerHasBuff("Ultimatum") && WoW.Rage >= 18)
                        {
                            WoW.CastSpell("Ignore Pain");
                            return;
                        }

                        if (WoW.CanCast("Ignore Pain") && WoW.Rage > 35 && WoW.PlayerHasBuff("Vengeance: Ignore Pain"))
                        {
                            WoW.CastSpell("Ignore Pain");
                            return;
                        }

                        if (WoW.CanCast("Ignore Pain") && WoW.Rage < 30 && WoW.Rage >= 20 && WoW.HealthPercent < 100 &&
                            (!WoW.PlayerHasBuff("Ignore Pain") || WoW.PlayerBuffTimeRemaining("Ignore Pain") <= 2) && !WoW.PlayerHasBuff("Ultimatum") &&
                            !WoW.PlayerHasBuff("Vengeance: Ignore Pain") && !WoW.PlayerHasBuff("Vengeance: Focused Rage"))
                        {
                            WoW.CastSpell("Ignore Pain");
                            return;
                        }

                        /* ------------------ END IGNORE PAIN MANAGEMENT-------------------*/


                        /* ------------------ FOCUSED RAGE MANAGEMENT----------------------*/

                        if (WoW.CanCast("Focused Rage") && (!WoW.PlayerHasBuff("Ignore Pain") || WoW.PlayerBuffTimeRemaining("Ignore Pain") <= 2) &&
                            WoW.PlayerHasBuff("Vengeance: Focused Rage") && WoW.Rage >= 20)
                        {
                            WoW.CastSpell("Focused Rage");
                        }
                        if (WoW.CanCast("Focused Rage") && WoW.PlayerHasBuff("Ultimatum") && (!WoW.PlayerHasBuff("Ignore Pain") || WoW.PlayerBuffTimeRemaining("Ignore Pain") <= 2) &&
                            WoW.PlayerHasBuff("Vengeance: Focused Rage"))
                        {
                            WoW.CastSpell("Focused Rage");
                        }
                        if (WoW.CanCast("Focused Rage") && WoW.PlayerHasBuff("Ultimatum") && !WoW.PlayerHasBuff("Vengeance: Ignore Pain") && !WoW.PlayerHasBuff("Vengeance: Focused Rage"))
                        {
                            WoW.CastSpell("Focused Rage");
                        }
                        if (WoW.CanCast("Focused Rage") && WoW.Rage >= 30 && !WoW.PlayerHasBuff("Vengeance: Focused Rage") && !WoW.PlayerHasBuff("Vengeance: Ignore Pain"))
                        {
                            WoW.CastSpell("Focused Rage");
                        }
                        if (WoW.CanCast("Focused Rage") && WoW.Rage < 10 && WoW.PlayerHasBuff("Ultimatum") && WoW.PlayerHasBuff("Vengeance: Ignore Pain") &&
                            !WoW.IsSpellOnCooldown("Shield Slam"))
                        {
                            WoW.CastSpell("Focused Rage");
                        }
                        if (WoW.CanCast("Focused Rage") && WoW.Rage >= 120)
                        {
                            WoW.CastSpell("Focused Rage");
                        }

                        /* ------------------ END FOCUSED RAGE MANAGEMENT-------------------*/

                        if (WoW.TargetIsCasting && WoW.CanCast("SpellReflect") && !WoW.IsSpellOnCooldown("SpellReflect"))
                        {
                            WoW.CastSpell("SpellReflect");
                        }
                        if (WoW.IsSpellInRange("Shield Slam") && WoW.CanCast("Shield Slam") && !WoW.IsSpellOnCooldown("Shield Slam"))
                        {
                            WoW.CastSpell("Shield Slam");
                            return;
                        }
                        if (WoW.CanCast("Revenge") && !WoW.IsSpellOnCooldown("Revenge") && WoW.IsSpellInRange("Shield Slam"))
                        {
                            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.IsSpellInRange("Shield Slam")&& WoW.CanCast("Thunder Clap")&& !WoW.IsSpellOnCooldown("Thunder Clap"))
                         *                              {
                         *                                      WoW.CastSpell("Thunder Clap");
                         *                                      return;
                         *                              }  */
                    }
                    if (WoW.CanCast("Neltharion's Fury") && WoW.TargetHasDebuff("ShockWavestun"))
                    {
                        WoW.CastSpell("Neltharion's Fury");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                // Do AOE Stuff here

                if (WoW.IsSpellOverlayed("Shield Slam"))
                {
                    Log.Write("Spell Overlayed: Shield Slam");
                }
            }
        }
 public override void Pulse()                             // Updated for Legion (tested and working for single target)
 {
     if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
     {
         if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
         {
             if (WoW.CanCast("Frost Strike") && WoW.PlayerHasBuff("Icy Talons") && (WoW.PlayerBuffTimeRemaining("Icy Talons") >= 2) && WoW.RunicPower >= 20)
             {
                 WoW.CastSpell("Frost Strike");
                 return;
             }
             if (WoW.CanCast("Frost Strike") && WoW.RunicPower >= 80)
             {
                 WoW.CastSpell("Frost Strike");
                 return;
             }
             if (WoW.CanCast("Howling Blast") && !WoW.TargetHasDebuff("Frost Fever") && (WoW.CurrentRunes >= 1))
             {
                 WoW.CastSpell("Howling Blast");
                 return;
             }
             if (WoW.CanCast("Howling Blast") && WoW.TargetHasDebuff("Frost Fever") && WoW.PlayerBuffTimeRemaining("Frost Fever") >= 5 && (WoW.CurrentRunes >= 1))
             {
                 WoW.CastSpell("Howling Blast");
                 return;
             }
             if (WoW.CanCast("Howling Blast") && WoW.PlayerHasBuff("Rime") && !WoW.PlayerHasBuff("Obliteration") && (WoW.CurrentRunes >= 1))
             {
                 WoW.CastSpell("Howling Blast");
                 return;
             }
             if (WoW.CanCast("Obliteration") && (WoW.RunicPower >= 25) && (WoW.CurrentRunes >= 2))
             {
                 WoW.CastSpell("Obliteration");
                 return;
             }
             if (WoW.CanCast("Frost Strike") && WoW.PlayerHasBuff("Obliteration") && (WoW.RunicPower >= 25))
             {
                 WoW.CastSpell("Frost Strike");
                 return;
             }
             if (WoW.CanCast("Obliterate") && WoW.PlayerHasBuff("Killing Machine") && (WoW.CurrentRunes >= 2))
             {
                 WoW.CastSpell("Obliterate");
                 return;
             }
             if (WoW.CanCast("Remorseless Winter") && (WoW.CurrentRunes >= 1))
             {
                 WoW.CastSpell("Remorseless Winter");
                 return;
             }
             if (WoW.CanCast("Obliterate") && (WoW.CurrentRunes >= 2))
             {
                 WoW.CastSpell("Obliterate");
                 return;
             }
             if (WoW.CanCast("Frost Strike") && (WoW.RunicPower >= 40))
             {
                 WoW.CastSpell("Frost Strike");
                 return;
             }
         }
     }
     if (combatRoutine.Type == RotationType.AOE)
     {
         if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
         {
             if (WoW.CanCast("Howling Blast") && !WoW.TargetHasDebuff("Frost Fever") && (WoW.CurrentRunes >= 1))
             {
                 WoW.CastSpell("Howling Blast");
                 return;
             }
             if (WoW.CanCast("Howling Blast") && WoW.TargetHasDebuff("Frost Fever") && WoW.PlayerBuffTimeRemaining("Frost Fever") >= 5 && (WoW.CurrentRunes >= 1))
             {
                 WoW.CastSpell("Howling Blast");
                 return;
             }
             if (WoW.CanCast("Remorseless Winter") && (WoW.CurrentRunes >= 1))
             {
                 WoW.CastSpell("Remorseless Winter");
                 return;
             }
             if (WoW.CanCast("Obliterate") && (WoW.CurrentRunes >= 2))
             {
                 WoW.CastSpell("Obliterate");
                 return;
             }
             if (WoW.CanCast("Frost Strike") && !WoW.PlayerHasBuff("Icy Talons") && WoW.RunicPower >= 20)
             {
                 WoW.CastSpell("Frost Strike");
                 return;
             }
             if (WoW.CanCast("Frost Strike") && WoW.PlayerHasBuff("Icy Talons") && (WoW.PlayerBuffTimeRemaining("Icy Talons") >= 2) && WoW.RunicPower >= 20)
             {
                 WoW.CastSpell("Frost Strike");
                 return;
             }
         }
     }
     if (combatRoutine.Type == RotationType.SingleTargetCleave)
     {
         // Do Single Target Cleave stuff here if applicable else ignore this one
     }
 }
Ejemplo n.º 15
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.CanCast("Rupture") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 &&
                        (!WoW.TargetHasDebuff("Rupture") || WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") < 5))
                    {
                        WoW.CastSpell("Rupture");
                        return;
                    }
                    if (WoW.CanCast("Vendetta") && !WoW.IsSpellOnCooldown("Vendetta") && WoW.Energy <= 50)
                    {
                        WoW.CastSpell("Vendetta");
                        return;
                    }
                    if (WoW.CanCast("Vanish") && WoW.CurrentComboPoints >= 6 && WoW.Energy >= 25 &&
                        (!WoW.TargetHasDebuff("Rupture") || WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") < 5))
                    {
                        WoW.CastSpell("Vanish");
                        return;
                    }
                    if (WoW.CanCast("Rupture") && WoW.CurrentComboPoints >= 6 && WoW.Energy >= 25 && WoW.PlayerHasBuff("Stealth") &&
                        (WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") < 5 || !WoW.TargetHasDebuff("Rupture")))
                    {
                        WoW.CastSpell("Rupture");
                        return;
                    }
                    if (WoW.CanCast("Garrote") && WoW.Energy >= 45 && (!WoW.TargetHasDebuff("Garrote") || WoW.TargetHasDebuff("Garrote") && WoW.TargetDebuffTimeRemaining("Garrote") < 3))
                    {
                        WoW.CastSpell("Garrote");
                        return;
                    }
                    if (WoW.CanCast("Kingsbane") && !WoW.IsSpellOnCooldown("Kingsbane") && (WoW.SpellCooldownTimeRemaining("Vendetta") >= 10 || WoW.TargetHasDebuff("Vendetta")))
                    {
                        WoW.CastSpell("Kingsbane");
                        return;
                    }
                    if (WoW.CanCast("Envenom") && WoW.Energy >= 35 && !WoW.PlayerHasBuff("Envenom") && WoW.CurrentComboPoints >= 3 && WoW.TargetHasDebuff("Rupture") &&
                        WoW.TargetDebuffTimeRemaining("Rupture") >= 10 && (!WoW.PlayerHasBuff("Elaborate Planning") || WoW.PlayerBuffTimeRemaining("Elaborate Planning") <= 2.0))
                    {
                        WoW.CastSpell("Envenom");
                        return;
                    }
                    if (WoW.CanCast("Mutilate") && WoW.Energy >= 55 && WoW.CurrentComboPoints <= 5 && WoW.PlayerBuffTimeRemaining("Elaborate Planning") >= 2.1)
                    {
                        WoW.CastSpell("Mutilate");
                        return;
                    }
                }
            }

            if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.SingleTargetCleave) // Do AoE Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.CanCast("Rupture") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 &&
                        (!WoW.TargetHasDebuff("Rupture") || WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") < 5))
                    {
                        WoW.CastSpell("Rupture");
                        return;
                    }
                    if (WoW.CanCast("Vendetta") && !WoW.IsSpellOnCooldown("Vendetta") && WoW.Energy <= 50)
                    {
                        WoW.CastSpell("Vendetta");
                        return;
                    }
                    if (WoW.CanCast("Vanish") && WoW.CurrentComboPoints >= 6 && WoW.Energy >= 25 &&
                        (!WoW.TargetHasDebuff("Rupture") || WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") < 5))
                    {
                        WoW.CastSpell("Vanish");
                        return;
                    }
                    if (WoW.CanCast("Rupture") && WoW.CurrentComboPoints >= 6 && WoW.Energy >= 25 && WoW.PlayerHasBuff("Stealth") &&
                        (WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") < 5 || !WoW.TargetHasDebuff("Rupture")))
                    {
                        WoW.CastSpell("Rupture");
                        return;
                    }
                }
                if (WoW.CanCast("Garrote") && WoW.Energy >= 45 && (!WoW.TargetHasDebuff("Garrote") || WoW.TargetHasDebuff("Garrote") && WoW.TargetDebuffTimeRemaining("Garrote") < 3))
                {
                    WoW.CastSpell("Garrote");
                    return;
                }
                if (WoW.CanCast("Kingsbane") && !WoW.IsSpellOnCooldown("Kingsbane") && (WoW.SpellCooldownTimeRemaining("Vendetta") >= 10 || WoW.TargetHasDebuff("Vendetta")))
                {
                    WoW.CastSpell("Kingsbane");
                    return;
                }
                if (WoW.CanCast("Envenom") && WoW.Energy >= 35 && !WoW.PlayerHasBuff("Envenom") && WoW.CurrentComboPoints >= 3 && WoW.TargetHasDebuff("Rupture") &&
                    WoW.TargetDebuffTimeRemaining("Rupture") >= 10 && (!WoW.PlayerHasBuff("Elaborate Planning") || (WoW.PlayerBuffTimeRemaining("Elaborate Planning") <= 2.0)))
                {
                    WoW.CastSpell("Envenom");
                    return;
                }
                if (WoW.CanCast("Fan of Knives") && WoW.Energy >= 35 && !WoW.TargetHasDebuff("Agonizing Poison"))
                {
                    WoW.CastSpell("Fan of Knives");
                    return;
                }
                if (WoW.CanCast("Fan of Knives") && WoW.Energy >= 35 && WoW.TargetHasDebuff("Agonizing Poison") && WoW.TargetDebuffStacks("Agonizing Poison") <= 4)
                {
                    WoW.CastSpell("Fan of Knives");
                    return;
                }
                if (WoW.CanCast("Fan of Knives") && WoW.Energy >= 35 && WoW.TargetHasDebuff("Agonizing Poison") && WoW.TargetDebuffTimeRemaining("Agonizing Poison") < 2)
                {
                    WoW.CastSpell("Fan of Knives");
                    return;
                }
                if (WoW.CanCast("Mutilate") && WoW.Energy >= 55 && WoW.CurrentComboPoints <= 5)
                {
                    WoW.CastSpell("Mutilate");
                }
            }
        }
Ejemplo n.º 16
0
        public override void Pulse()
        {
            if (UseCooldowns)
            {
            }

            if (combatRoutine.Type == RotationType.SingleTarget)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && WoW.TargetIsVisible && !WoW.IsMounted && !WoW.PlayerIsChanneling)
                {
                    if (WoW.CanPreCast("Kick") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Ghostly Strike") && !WoW.IsSpellOnCooldown("Kick"))
                    {
                        WoW.CastSpell("Kick");
                        return;
                    }
                    if (WoW.CanPreCast("Blade Flurry") && WoW.IsSpellInRange("Ghostly Strike") && WoW.CountEnemyNPCsInRange >= 2 && !WoW.PlayerHasBuff("Blade Flurry"))
                    {
                        WoW.CastSpell("Blade Flurry");
                        return;
                    }
                    if (WoW.CanPreCast("Cancel Blade Flurry") && WoW.IsSpellInRange("Ghostly Strike") && WoW.PlayerHasBuff("Blade Flurry") && WoW.CountEnemyNPCsInRange <= 1)
                    {
                        WoW.CastSpell("Cancel Blade Flurry");
                        return;
                    }
                    if (WoW.CanPreCast("Ambush") && WoW.Energy >= 60 && WoW.IsSpellInRange("Ghostly Strike") && WoW.CurrentComboPoints >= 4 && (WoW.PlayerHasBuff("Stealth") || WoW.PlayerHasBuff("Vanish")))
                    {
                        WoW.CastSpell("Ambush");
                        return;
                    }
                    if (WoW.CanCast("Slice and Dice") && WoW.Energy >= 21 && WoW.IsSpellInRange("Ghostly Strike") && WoW.Talent(7) == 1 && WoW.CurrentComboPoints >= 4 && WoW.PlayerHasBuff("Loaded Dice"))
                    {
                        WoW.CastSpell("Slice and Dice");
                        return;
                    }
                    if (WoW.CanCast("Slice and Dice") && WoW.Energy >= 21 && WoW.IsSpellInRange("Ghostly Strike") && !WoW.PlayerHasBuff("Slice and Dice") && WoW.PlayerBuffTimeRemaining("Slice and Dice") <= 500 && WoW.CurrentComboPoints >= 4 && WoW.Talent(7) == 1)
                    {
                        WoW.CastSpell("Slice and Dice");
                        return;
                    }
                    if (WoW.CanCast("Roll the Bones") && WoW.Energy >= 21 && WoW.IsSpellInRange("Ghostly Strike") && WoW.Talent(7) == 2 && WoW.PlayerHasBuff("Loaded Dice") && WoW.CurrentComboPoints >= 4)
                    {
                        WoW.CastSpell("Roll the Bones");
                        return;
                    }
                    if (WoW.CanCast("Roll the Bones") && WoW.Talent(7) == 2 && WoW.Energy >= 21 && WoW.IsSpellInRange("Ghostly Strike") && WoW.CurrentComboPoints >= 4 &&
                        !WoW.PlayerHasBuff("Buried Treasure") && !WoW.PlayerHasBuff("Shark Infested Waters") && !WoW.PlayerHasBuff("True Bearing") &&
                        !WoW.PlayerHasBuff("Jolly Roger") && !WoW.PlayerHasBuff("Broadsides"))
                    {
                        WoW.CastSpell("Roll the Bones");
                        return;
                    }
                    if (WoW.CanPreCast("Ghostly Strike") && WoW.IsSpellInRange("Ghostly Strike") && WoW.Energy >= 30 && WoW.CurrentComboPoints <= 5 && !WoW.TargetHasDebuff("Ghostly Strike") && WoW.TargetDebuffTimeRemaining("Ghostly Strike") <= 200 && WoW.Talent(1) == 1)
                    {
                        WoW.CastSpell("Ghostly Strike");
                        return;
                    }
                    if (WoW.CanPreCast("Adrenaline Rush") && UseCooldowns && WoW.IsSpellInRange("Ghostly Strike"))
                    {
                        WoW.CastSpell("Adrenaline Rush");
                        return;
                    }
                    if (WoW.CanPreCast("Vanish") && UseCooldowns && WoW.IsSpellInRange("Ghostly Strike") && WoW.Energy >= 60 && !WoW.PlayerHasBuff("Adrenaline Rush"))
                    {
                        WoW.CastSpell("Vanish");
                        return;
                    }
                    if (WoW.CanPreCast("Arcane Torrent") && UseCooldowns && WoW.IsSpellInRange("Ghostly Strike") && !WoW.PlayerHasBuff("Adrenaline Rush") && WoW.Energy <= 20 && WoW.PlayerRace == "BloodElf")
                    {
                        WoW.CastSpell("Arcane Torrent");
                        return;
                    }
                    if (WoW.CanPreCast("Marked for Death") && WoW.IsSpellInRange("Ghostly Strike") && WoW.CurrentComboPoints <= 1 && WoW.Talent(7) == 2)
                    {
                        WoW.CastSpell("Marked for Death");
                        return;
                    }
                    if (WoW.CanPreCast("Curse of the Dreadblades") && UseCooldowns && WoW.IsSpellInRange("Ghostly Strike"))
                    {
                        WoW.CastSpell("Curse of the Dreadblades");
                        return;
                    }
                    if (WoW.CanCast("Between the Eyes") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 31 && WoW.IsSpellInRange("Ghostly Strike"))
                    {
                        WoW.CastSpell("Between the Eyes");
                        return;
                    }
                    if (WoW.CanCast("Run Through") && WoW.CurrentComboPoints == 6 && WoW.Energy >= 31 && WoW.IsSpellInRange("Ghostly Strike") || (WoW.PlayerHasBuff("Broadsides") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 31))
                    {
                        WoW.CastSpell("Run Through");
                        return;
                    }
                    if (WoW.CanPreCast("Pistol Shot") && WoW.IsSpellInRange("Ghostly Strike") && WoW.PlayerHasBuff("Opportunity") && WoW.CurrentComboPoints <= 5)
                    {
                        WoW.CastSpell("Pistol Shot");
                        return;
                    }
                    if (WoW.CanPreCast("Saber Slash") && WoW.CurrentComboPoints <= 5 && WoW.Energy >= 50 && WoW.IsSpellInRange("Ghostly Strike"))
                    {
                        WoW.CastSpell("Saber Slash");
                        return;
                    }
                }
            }
        }
Ejemplo n.º 17
0
        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;
            }
        }
Ejemplo n.º 18
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget)                 // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy)                          //First things go first
                {
                    if (WoW.TargetIsCasting && WoW.IsSpellInRange("Wind Shear")) //interupt every spell - need to add kickable spells
                    {
                        WoW.CastSpell("Wind Shear");
                        return;
                    }

                    if (WoW.CanCast("Boulderfist") && !WoW.PlayerHasBuff("Landslide") && WoW.IsSpellInRange("Flametongue")) //REFRESH LANDSLIDE
                    {
                        Log.Write("Reseting Landslide", Color.Red);
                        WoW.CastSpell("Boulderfist");
                        return;
                    }

                    if (WoW.CanCast("Hailstorm") && !WoW.PlayerHasBuff("Frostbrand") && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 20) //REFRESH FROSTBRAND
                    {
                        Log.Write("Reseting Frostbrand buff", Color.Red);
                        WoW.CastSpell("Hailstorm");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && !WoW.PlayerHasBuff("Flametongue") && WoW.IsSpellInRange("Flametongue") && !WoW.IsSpellOnCooldown("Flametongue")) //REFRESH FLAMETONGUE
                    {
                        Log.Write("Reseting Flametongue buff", Color.Red);
                        WoW.CastSpell("Flametongue");
                        return;
                    }

                    if (!WoW.IsSpellOnCooldown("Feral Spirit") && WoW.CanCast("Feral Spirit") && UseCooldowns) //feral spirit on boss - normally cast manually
                    {
                        Log.Write("Using Feral Spirit", Color.Red);
                        WoW.CastSpell("Feral Spirit");
                        return;
                    }

                    if (WoW.CanCast("Doom Winds") && !WoW.IsSpellOnCooldown("Doom Winds") && WoW.IsSpellInRange("Stormstrike"))
                    //use doom winds on CD - need implementation to Cooldowns also with Feral Spirit
                    {
                        WoW.CastSpell("Doom Winds");
                        return;
                    }

                    if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && (WoW.Maelstrom >= 40 || WoW.PlayerHasBuff("Stormbringer") && WoW.Maelstrom >= 20))
                    {
                        WoW.CastSpell("Stormstrike");
                        return;
                    }

                    if (WoW.CanCast("Boulderfist") && WoW.IsSpellInRange("Flametongue") && WoW.PlayerSpellCharges("Boulderfist") > 1 && WoW.SpellCooldownTimeRemaining("Boulderfist") <= 1.2 ||
                        WoW.PlayerSpellCharges("Boulderfist") == 2)
                    {
                        WoW.CastSpell("Boulderfist"); //boulderfist it to not waste a charge
                        return;
                    }

                    if (WoW.CanCast("Hailstorm") && (WoW.PlayerBuffTimeRemaining("Frostbrand") <= 4.2) && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 20)
                    //REFRESH FROSTBRAND PANCEMIC
                    {
                        WoW.CastSpell("Hailstorm");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && (WoW.PlayerBuffTimeRemaining("Flametongue") <= 4.2) && WoW.IsSpellInRange("Flametongue") && !WoW.IsSpellOnCooldown("Flametongue"))
                    //REFRESH FLAMETONGUE PANDEMIC
                    {
                        WoW.CastSpell("Flametongue");
                        return;
                    }

                    if (WoW.CanCast("Crash Lightning") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom > 80) //Crash lightning on range of Stormstrike
                    {
                        WoW.CastSpell("Crash Lightning");
                        return;
                    }

                    if (WoW.CanCast("Lava Lash") && WoW.Maelstrom > 90) //maelstrom dump
                    {
                        Log.Write("Maelstorm spender - Lava Lash", Color.Blue);
                        WoW.CastSpell("Lava Lash");
                        return;
                    }

                    if (WoW.CanCast("Boulderfist") && WoW.IsSpellInRange("Flametongue")) //filler if we are in range 10y
                    {
                        Log.Write("Nothing to do - Boulderfist", Color.Blue);
                        WoW.CastSpell("Boulderfist");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && WoW.IsSpellInRange("Flametongue") && !WoW.IsSpellOnCooldown("Flametongue")) //filler if we are in range 10y
                    {
                        Log.Write("Nothing to do - Flametongue", Color.Blue);
                        WoW.CastSpell("Flametongue");
                        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("Lightning Bolt") && !WoW.IsSpellInRange("Flametongue")) //out of range cast LB if we are 10y away and cannot jump by Feral lounge
                    {
                        WoW.CastSpell("Lightning Bolt");
                        return;
                    }

                    if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 60 && !WoW.IsSpellOnCooldown("Astral Shift")) //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)                          //First things go first
                {
                    if (WoW.TargetIsCasting && WoW.IsSpellInRange("Wind Shear")) //interupt every spell - need to add kickable spells
                    {
                        WoW.CastSpell("Wind Shear");
                        return;
                    }

                    if (WoW.CanCast("Boulderfist") && !WoW.PlayerHasBuff("Landslide") && WoW.IsSpellInRange("Flametongue")) //REFRESH LANDSLIDE
                    {
                        Log.Write("Reseting Landslide", Color.Red);
                        WoW.CastSpell("Boulderfist");
                        return;
                    }

                    if (WoW.CanCast("Hailstorm") && !WoW.PlayerHasBuff("Frostbrand") && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 20) //REFRESH FROSTBRAND
                    {
                        Log.Write("Reseting Frostbrand buff", Color.Red);
                        WoW.CastSpell("Hailstorm");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && !WoW.PlayerHasBuff("Flametongue") && WoW.IsSpellInRange("Flametongue") && !WoW.IsSpellOnCooldown("Flametongue")) //REFRESH FLAMETONGUE
                    {
                        Log.Write("Reseting Flametongue buff", Color.Red);
                        WoW.CastSpell("Flametongue");
                        return;
                    }

                    if (!WoW.IsSpellOnCooldown("Feral Spirit") && WoW.CanCast("Feral Spirit") && UseCooldowns) //feral spirit on boss - normally cast manually
                    {
                        Log.Write("Using Feral Spirit", Color.Red);
                        WoW.CastSpell("Feral Spirit");
                        return;
                    }

                    if (WoW.CanCast("Doom Winds") && !WoW.IsSpellOnCooldown("Doom Winds") && WoW.IsSpellInRange("Stormstrike"))
                    //use doom winds on CD - need implementation to Cooldowns also with Feral Spirit
                    {
                        WoW.CastSpell("Doom Winds");
                        return;
                    }

                    if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && (WoW.Maelstrom >= 40 || WoW.PlayerHasBuff("Stormbringer") && WoW.Maelstrom >= 20))
                    {
                        WoW.CastSpell("Stormstrike");
                        return;
                    }

                    if (WoW.CanCast("Crash Lightning") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 20) //Crash lightning to do a splash damage
                    {
                        WoW.CastSpell("Crash Lightning");
                        return;
                    }

                    if (WoW.CanCast("Boulderfist") && WoW.IsSpellInRange("Flametongue") && WoW.PlayerSpellCharges("Boulderfist") > 1 && WoW.SpellCooldownTimeRemaining("Boulderfist") <= 1.2 ||
                        WoW.PlayerSpellCharges("Boulderfist") == 2)
                    {
                        WoW.CastSpell("Boulderfist"); //boulderfist it to not waste a charge
                        return;
                    }

                    if (WoW.CanCast("Hailstorm") && (WoW.PlayerBuffTimeRemaining("Frostbrand") <= 4.2) && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 20)
                    //REFRESH FROSTBRAND PANCEMIC
                    {
                        WoW.CastSpell("Hailstorm");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && (WoW.PlayerBuffTimeRemaining("Flametongue") <= 4.2) && WoW.IsSpellInRange("Flametongue") && !WoW.IsSpellOnCooldown("Flametongue"))
                    {
                        WoW.CastSpell("Flametongue");
                        return;
                    }

                    if (WoW.CanCast("Crash Lightning") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom > 80) //Crash lightning on range of Stormstrike
                    {
                        WoW.CastSpell("Crash Lightning");
                        return;
                    }

                    if (WoW.CanCast("Lava Lash") && WoW.Maelstrom > 90) //maelstrom dump
                    {
                        Log.Write("Maelstorm spender - Lava Lash", Color.Blue);
                        WoW.CastSpell("Lava Lash");
                        return;
                    }

                    if (WoW.CanCast("Boulderfist") && WoW.IsSpellInRange("Flametongue")) //filler if we are in range 10y
                    {
                        Log.Write("Nothing to do - Boulderfist", Color.Blue);
                        WoW.CastSpell("Boulderfist");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && WoW.IsSpellInRange("Flametongue") && !WoW.IsSpellOnCooldown("Flametongue")) //filler if we are in range 10y
                    {
                        Log.Write("Nothing to do - Flametongue", Color.Blue);
                        WoW.CastSpell("Flametongue");
                        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("Lightning Bolt") && !WoW.IsSpellInRange("Flametongue")) //out of range cast LB if we are 10y away and cannot jump by Feral lounge
                    {
                        WoW.CastSpell("Lightning Bolt");
                        return;
                    }

                    if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 60 && !WoW.IsSpellOnCooldown("Astral Shift")) //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)                          //First things go first
                {
                    if (WoW.TargetIsCasting && WoW.IsSpellInRange("Wind Shear")) //interupt every spell - need to add kickable spells
                    {
                        WoW.CastSpell("Wind Shear");
                        return;
                    }

                    if (WoW.CanCast("Boulderfist") && !WoW.PlayerHasBuff("Landslide") && WoW.IsSpellInRange("Flametongue")) //REFRESH LANDSLIDE
                    {
                        Log.Write("Reseting Landslide", Color.Red);
                        WoW.CastSpell("Boulderfist");
                        return;
                    }

                    if (WoW.CanCast("Hailstorm") && !WoW.PlayerHasBuff("Frostbrand") && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 20) //REFRESH FROSTBRAND
                    {
                        Log.Write("Reseting Frostbrand buff", Color.Red);
                        WoW.CastSpell("Hailstorm");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && !WoW.PlayerHasBuff("Flametongue") && WoW.IsSpellInRange("Flametongue") && !WoW.IsSpellOnCooldown("Flametongue")) //REFRESH FLAMETONGUE
                    {
                        Log.Write("Reseting Flametongue buff", Color.Red);
                        WoW.CastSpell("Flametongue");
                        return;
                    }

                    if (!WoW.IsSpellOnCooldown("Feral Spirit") && WoW.CanCast("Feral Spirit") && UseCooldowns) //feral spirit on boss - normally cast manually
                    {
                        Log.Write("Using Feral Spirit", Color.Red);
                        WoW.CastSpell("Feral Spirit");
                        return;
                    }

                    if (WoW.CanCast("Doom Winds") && !WoW.IsSpellOnCooldown("Doom Winds") && WoW.IsSpellInRange("Stormstrike"))
                    //use doom winds on CD - need implementation to Cooldowns also with Feral Spirit
                    {
                        WoW.CastSpell("Doom Winds");
                        return;
                    }

                    if (WoW.CanCast("Crash Lightning") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 20) //Crash lightning to do a more splash damage
                    {
                        WoW.CastSpell("Crash Lightning");
                        return;
                    }

                    if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && (WoW.Maelstrom >= 40 || WoW.PlayerHasBuff("Stormbringer") && WoW.Maelstrom >= 20))
                    {
                        WoW.CastSpell("Stormstrike");
                        return;
                    }

                    if (WoW.CanCast("Boulderfist") && WoW.IsSpellInRange("Flametongue") && WoW.PlayerSpellCharges("Boulderfist") > 1 && WoW.SpellCooldownTimeRemaining("Boulderfist") <= 1.2 ||
                        WoW.PlayerSpellCharges("Boulderfist") == 2)
                    {
                        WoW.CastSpell("Boulderfist"); //boulderfist it to not waste a charge
                        return;
                    }

                    if (WoW.CanCast("Hailstorm") && (WoW.PlayerBuffTimeRemaining("Frostbrand") <= 4.2) && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 20)
                    //REFRESH FROSTBRAND PANCEMIC
                    {
                        WoW.CastSpell("Hailstorm");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && (WoW.PlayerBuffTimeRemaining("Flametongue") <= 4.2) && WoW.IsSpellInRange("Flametongue") && !WoW.IsSpellOnCooldown("Flametongue"))
                    {
                        WoW.CastSpell("Flametongue");
                        return;
                    }

                    if (WoW.CanCast("Crash Lightning") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom > 80) //Crash lightning on range of Stormstrike
                    {
                        WoW.CastSpell("Crash Lightning");
                        return;
                    }

                    if (WoW.CanCast("Lava Lash") && WoW.Maelstrom > 90) //maelstrom dump
                    {
                        Log.Write("Maelstorm spender - Lava Lash", Color.Blue);
                        WoW.CastSpell("Lava Lash");
                        return;
                    }

                    if (WoW.CanCast("Boulderfist") && WoW.IsSpellInRange("Flametongue")) //filler if we are in range 10y
                    {
                        Log.Write("Nothing to do - Boulderfist", Color.Blue);
                        WoW.CastSpell("Boulderfist");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && WoW.IsSpellInRange("Flametongue") && !WoW.IsSpellOnCooldown("Flametongue")) //filler if we are in range 10y
                    {
                        Log.Write("Nothing to do - Flametongue", Color.Blue);
                        WoW.CastSpell("Flametongue");
                        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("Lightning Bolt") && !WoW.IsSpellInRange("Flametongue")) //out of range cast LB if we are 10y away and cannot jump by Feral lounge
                    {
                        WoW.CastSpell("Lightning Bolt");
                        return;
                    }

                    if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 60 && !WoW.IsSpellOnCooldown("Astral Shift")) //ASTRAL SHIFT - DMG REDUCTION if we are below 60% of HP
                    {
                        WoW.CastSpell("Astral Shift");
                    }
                }
            }
        }
        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";
                    }
                }
            }
        }
Ejemplo n.º 20
0
        public void MGRotation()
        {
            if (isCheckHotkeysFrostOffensivePillarofFrost && isMelee && combatRoutine.UseCooldowns && !WoW.IsSpellOnCooldown("PillarofFrost"))
            {
                WoW.CastSpell("PillarofFrost");
            }
            if (combatRoutine.UseCooldowns && isCheckHotkeysFrostOffensiveErW && isMelee && currentRunes == 0 && WoW.PlayerHasBuff("PillarofFrost") && !WoW.IsSpellOnCooldown("Empower Rune"))
            {
                WoW.CastSpell("Empower Rune");
            }
            if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave) // Do Single Target Stuff here
            {
                if (CanCastInRange("Frost Strike") && (!WoW.PlayerHasBuff("Icy Talons") || WoW.PlayerBuffTimeRemaining("Icy Talons") <= 200) && runicPower >= 25 && !(combatRoutine.UseCooldowns && CanCastNoRange("Obliteration") && WoW.Talent(7) == 1) &&
                    (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration"))))
                {
                    Log.Write("Hasbuff " + WoW.PlayerHasBuff("Icy Talons") + " Remaining " + WoW.PlayerBuffTimeRemaining("Icy Talons"));
                    WoW.CastSpell("Frost Strike");
                    return;
                }
                if (isMelee && WoW.HealthPercent <= 40 && WoW.PlayerHasBuff("Free DeathStrike") && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration"))))
                {
                    WoW.CastSpell("Death Strike");
                    return;
                }
                if (CanCastInRange("Howling Blast") && !WoW.IsSpellOnCooldown("Howling Blast") && !WoW.TargetHasDebuff("Frost Fever") && currentRunes >= 1 && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration"))))
                {
                    WoW.CastSpell("Howling Blast");
                    return;
                }
                if (WoW.Talent(6) == 1 && runicPower >= 80 && CanCastInRange("Frost Strike"))
                {
                    WoW.CastSpell("Frost Strike");
                    return;
                }
                if (CanCastInRange("Howling Blast") && WoW.PlayerHasBuff("Rime") && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration"))))
                {
                    WoW.CastSpell("Howling Blast");
                    return;
                }

                if (combatRoutine.UseCooldowns && isMelee && currentRunes >= 2 && runicPower >= 25 && WoW.Talent(7) == 1 && CanCastNoRange("Obliteration"))
                {
                    WoW.CastSpell("Obliteration");
                    return;
                }
                if (WoW.Talent(7) == 1 && runicPower >= 25 && CanCastInRange("Frost Strike") && WoW.PlayerHasBuff("Obliteration") && !WoW.PlayerHasBuff("Killing Machine"))
                {
                    WoW.CastSpell("Frost Strike");
                    return;
                }

                if (WoW.Talent(7) == 1 && isMelee && currentRunes >= 1 && WoW.PlayerHasBuff("Killing Machine") && WoW.PlayerHasBuff("Obliteration"))
                {
                    WoW.CastSpell("Obliterate");
                    return;
                }
                if (WoW.Talent(6) == 1 && isMelee && currentRunes >= 1 && WoW.PlayerHasBuff("Killing Machine"))
                {
                    WoW.CastSpell("Frostscythe");
                    return;
                }

                if (isMelee && currentRunes >= 2)
                {
                    WoW.CastSpell("Obliterate");
                    return;
                }
                if (WoW.Talent(7) == 3 && isMelee && currentRunes >= 1 && CanCastNoRange("Glacial Advance"))
                {
                    WoW.CastSpell("Glacial Advance");
                    return;
                }
                if (WoW.Talent(7) == 1 && runicPower >= 40 && CanCastInRange("Frost Strike") && !(combatRoutine.UseCooldowns && CanCastNoRange("Obliteration")) && WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration"))
                {
                    WoW.CastSpell("Frost Strike");
                    return;
                }
                if (isMelee && currentRunes >= 1 && CanCastNoRange("Remorseless Winter") && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration"))))
                {
                    WoW.CastSpell("Remorseless Winter");
                    return;
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                if (CanCastInRange("Frost Strike") && (!WoW.PlayerHasBuff("Icy Talons") || WoW.PlayerBuffTimeRemaining("Icy Talons") <= 200) && runicPower >= 25)
                {
                    WoW.CastSpell("Frost Strike");
                    return;
                }
                if (isMelee && WoW.HealthPercent <= 40 && WoW.PlayerHasBuff("Free DeathStrike"))
                {
                    WoW.CastSpell("Death Strike");
                    return;
                }
                if (CanCastInRange("Howling Blast") && !WoW.IsSpellOnCooldown("Howling Blast") && !WoW.TargetHasDebuff("Frost Fever") && currentRunes >= 1)
                {
                    WoW.CastSpell("Howling Blast");
                    return;
                }
                if (CanCastInRange("Howling Blast") && WoW.PlayerHasBuff("Rime"))
                {
                    WoW.CastSpell("Howling Blast");
                    return;
                }
                if (WoW.Talent(6) != 1 && isMelee && currentRunes >= 1 && CanCastNoRange("Remorseless Winter"))
                {
                    WoW.CastSpell("Remorseless Winter");
                    return;
                }
                if (runicPower >= 80 && CanCastInRange("Frost Strike"))
                {
                    WoW.CastSpell("Frost Strike");
                    return;
                }
                if (WoW.Talent(6) != 1 && isMelee && currentRunes >= 2)
                {
                    WoW.CastSpell("Obliterate");
                    return;
                }
                if (WoW.Talent(6) == 1 && currentRunes >= 1 && isMelee && WoW.PlayerHasBuff("Killing Machine"))
                {
                    WoW.CastSpell("Frostscythe");
                    return;
                }
                if (WoW.Talent(7) == 3 && isMelee && currentRunes >= 1 && CanCastNoRange("Glacial Advance"))
                {
                    WoW.CastSpell("Glacial Advance");
                    return;
                }
                if (isMelee && currentRunes >= 1 && CanCastNoRange("Remorseless Winter"))
                {
                    WoW.CastSpell("Remorseless Winter");
                    return;
                }
                if (WoW.Talent(6) == 1 && isMelee && currentRunes >= 1)
                {
                    WoW.CastSpell("Frostscythe");
                    return;
                }

                if (runicPower >= 25 && CanCastInRange("Frost Strike") && WoW.PlayerBuffStacks("Icy Talons") < 3)
                {
                    WoW.CastSpell("Frost Strike");
                    return;
                }

                if (WoW.CanCast("Sindragosa's Fury") && (DetectKeyPress.GetKeyState(0x5A) < 0))
                {
                    WoW.CastSpell("Sindragosa's Fury");
                    return;
                }
            }
        }
Ejemplo n.º 21
0
        public override void Pulse() // Updated for Legion (tested and working for single target)
        {
            renewBones   = !WoW.PlayerHasBuff("Bone Shield") || WoW.PlayerBuffTimeRemaining("Bone Shield") <= 500;
            isMelee      = WoW.CanCast("Marrowrend", false, false, true, false, false);
            bonesStack   = WoW.PlayerBuffStacks("Bone Shield");
            currentRunes = WoW.CurrentRunes;
            runicPower   = WoW.RunicPower;
            if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && WoW.TargetIsVisible)
                {
                    if (isCDDefEnable)
                    {
                        useCDDef();
                    }
                    if ((renewBones || bonesStack < 3) && isMelee)
                    {
                        if (currentRunes >= 2)
                        {
                            WoW.CastSpell("Marrowrend");
                            return;
                        }
                    }
                    if (WoW.CanCast("Mind Freeze") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && !WoW.IsSpellOnCooldown("Mind Freeze") && !WoW.PlayerIsChanneling)
                    {
                        WoW.CastSpell("Mind Freeze");
                        return;
                    }
                    if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee && !WoW.TargetHasDebuff("Blood Plague"))
                    {
                        WoW.CastSpell("Blood Boil");
                        return;
                    }
                    if (CanCastNoRange("Consumption") && isMelee)
                    {
                        WoW.CastSpell("Consumption");
                        return;
                    }
                    if (WoW.Talent(1) == 3 && CanCastInRange("BD") && !renewBones && currentRunes >= 1)
                    {
                        WoW.CastSpell("BD");
                        return;
                    }
                    if (isMelee && WoW.PlayerHasBuff("Crimson Scourge") && WoW.TargetHealthPercent >= 10)
                    {
                        WoW.CastSpell("DnD");
                        return;
                    }
                    if (isMelee && runicPower >= 45 && ((WoW.PlayerHasBuff("Ossuary") && (runicPower >= 85 || WoW.HealthPercent < 80)) || WoW.HealthPercent < 50))
                    {
                        WoW.CastSpell("Death Strike");
                        return;
                    }
                    if (isMelee && currentRunes >= 2 && bonesStack <= 6)
                    {
                        WoW.CastSpell("Marrowrend");
                        return;
                    }
                    if (WoW.SpellCooldownTimeRemaining("DnD") == 0 && isMelee && currentRunes >= 2 && WoW.TargetHealthPercent >= 10 && !renewBones && bonesStack > 6)
                    {
                        WoW.CastSpell("DnD");
                        return;
                    }
                    if (isMelee && currentRunes >= 2 && !renewBones && bonesStack > 6 && WoW.TargetHasDebuff("Blood Plague"))
                    {
                        WoW.CastSpell("Heart Strike");
                        return;
                    }
                    if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee)
                    {
                        WoW.CastSpell("Blood Boil");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && WoW.TargetIsVisible)
                {
                    if (isCDDefEnable)
                    {
                        useCDDef();
                    }
                    if ((renewBones || bonesStack < 3) && isMelee)
                    {
                        if (currentRunes >= 2)
                        {
                            WoW.CastSpell("Marrowrend");
                            return;
                        }
                    }
                    if (WoW.CanCast("Blood Boil", true, true, false, true, true) && isMelee && !WoW.TargetHasDebuff("Blood Plague"))
                    {
                        WoW.CastSpell("Blood Boil");
                        return;
                    }
                    if (WoW.Talent(1) == 3 && CanCastInRange("BD") && WoW.HealthPercent <= 60 && !renewBones && currentRunes >= 1)
                    {
                        WoW.CastSpell("BD");
                        return;
                    }
                    if (CanCastNoRange("Consumption") && isMelee)
                    {
                        WoW.CastSpell("Consumption");
                        return;
                    }
                    if (isMelee && WoW.PlayerHasBuff("Crimson Scourge") && WoW.TargetHealthPercent >= 10)
                    {
                        WoW.CastSpell("DnD");
                        return;
                    }
                    if (WoW.Talent(7) == 1 && WoW.SpellCooldownTimeRemaining("Bonestorm") == 0 && isMelee && runicPower >= 100)
                    {
                        WoW.CastSpell("Bonestorm");
                        return;
                    }
                    if (WoW.Talent(7) == 1 && isMelee && runicPower >= 45 && ((runicPower >= 85 && WoW.SpellCooldownTimeRemaining("Bonestorm") >= 300) || WoW.HealthPercent < 70 || WoW.HealthPercent < 50))
                    {
                        WoW.CastSpell("Death Strike");
                        return;
                    }
                    if (WoW.Talent(7) != 1 && isMelee && runicPower >= 45 && (runicPower >= 85 || WoW.HealthPercent < 70))
                    {
                        WoW.CastSpell("Death Strike");
                        return;
                    }

                    if (WoW.SpellCooldownTimeRemaining("DnD") == 0 && isMelee && currentRunes >= 1 && WoW.TargetHealthPercent >= 10 && !renewBones && bonesStack > 2)
                    {
                        WoW.CastSpell("DnD");
                        return;
                    }
                    if (isMelee && currentRunes >= 1 && !renewBones && bonesStack > 2)
                    {
                        WoW.CastSpell("Heart Strike");
                        return;
                    }
                    if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee)
                    {
                        WoW.CastSpell("Blood Boil");
                        return;
                    }
                    if (WoW.Talent(1) == 3 && CanCastInRange("BD") && !renewBones && currentRunes >= 1)
                    {
                        WoW.CastSpell("BD");
                    }
                }
            }
        }
Ejemplo n.º 22
0
        public override void Pulse()
        {
            if (defcooldowns && WoW.IsInCombat)
            {
                if (WoW.HealthPercent < ConfigFile.ReadValue <int>("ProtectionLesion", "LS HP Percent") && WoW.CanCast("Last Stand") && !WoW.IsSpellOnCooldown("Last Stand"))
                {
                    WoW.CastSpell("Last Stand");
                    return;
                }
                if (WoW.HealthPercent < ConfigFile.ReadValue <int>("ProtectionLesion", "SW HP Percent") && WoW.CanCast("Shield Wall") && !WoW.IsSpellOnCooldown("Shield Wall"))
                {
                    WoW.CastSpell("Shield Wall");
                    return;
                }
            }

            if (Pots && WoW.IsInCombat && WoW.HealthPercent < ConfigFile.ReadValue <int>("ProtectionLesion", "HS HP Percent"))
            {
                if (WoW.ItemCount("Healthstone") >= 1 && !WoW.ItemOnCooldown("Healthstone") && WoW.ItemCount("HealthPotion") == 0)
                {
                    WoW.CastSpell("Healthstone");
                    return;
                }

                if (WoW.ItemCount("HealthPotion") >= 1 && !WoW.ItemOnCooldown("HealthPotion"))
                {
                    WoW.CastSpell("HealthPotion");
                    return;
                }
            }


            if (!Indomitable && WoW.IsInCombat && WoW.IsSpellInRange("Shield Slam"))
            {
                swingwatch.Start();
            }

            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Shield Slam"))
                {
                    if (BattleC && !WoW.IsSpellOnCooldown("Battle Cry"))
                    {
                        WoW.CastSpell("Battle Cry");
                        return;
                    }
                    if (AngerM && !WoW.IsSpellOnCooldown("Demoralizing Shout") && (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_Z) < 0))
                    {
                        WoW.CastSpell("Demoralizing Shout");
                    }
                    if (generalInterrupts)
                    {
                        if (WoW.TargetIsCasting && WoW.TargetIsCastingAndSpellIsInterruptible)
                        {
                            if (!WoW.IsSpellOnCooldown("Pummel") && WoW.IsSpellInRange("Shield Slam") && WoW.TargetPercentCast >= 50)
                            {
                                WoW.CastSpell("Pummel");
                                return;
                            }
                            if (spellref && !WoW.IsSpellOnCooldown("SpellReflect") && WoW.TargetIsCasting && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 80)
                            {
                                WoW.CastSpell("SpellReflect");
                                return;
                            }
                        }
                    }

                    if (mythicplusinterrupts)
                    {
                        if (WoW.CanCast("Pummel") && WoW.TargetIsCasting && WoW.TargetIsCastingAndSpellIsInterruptible)
                        {
//int spell list for all important spells in M+
                            if (WoW.TargetCastingSpellID == 200248
//Court Of Stars Mythic+ Interrupt list
                                || WoW.TargetCastingSpellID == 225573 || WoW.TargetCastingSpellID == 208165 || WoW.TargetCastingSpellID == 211401 || WoW.TargetCastingSpellID == 21147 ||
                                WoW.TargetCastingSpellID == 211299 || WoW.TargetCastingSpellID == 2251 || WoW.TargetCastingSpellID == 209413 || WoW.TargetCastingSpellID == 209404 ||
                                WoW.TargetCastingSpellID == 215204 || WoW.TargetCastingSpellID == 210261
//Darkheart Thicket Mythic+ Interrupt list
                                || WoW.TargetCastingSpellID == 200658 || WoW.TargetCastingSpellID == 200631 || WoW.TargetCastingSpellID == 204246 || WoW.TargetCastingSpellID == 2014
//Eye of Azshara Mythic+ Interrupt list
                                || WoW.TargetCastingSpellID == 19687 || WoW.TargetCastingSpellID == 218532 || WoW.TargetCastingSpellID == 195129 || WoW.TargetCastingSpellID == 195046 ||
                                WoW.TargetCastingSpellID == 197502 || WoW.TargetCastingSpellID == 196027 || WoW.TargetCastingSpellID == 196175 || WoW.TargetCastingSpellID == 192003 ||
                                WoW.TargetCastingSpellID == 191848
//Halls of Valor Mythic+ Interrupt list
                                || WoW.TargetCastingSpellID == 198595 || WoW.TargetCastingSpellID == 198962 || WoW.TargetCastingSpellID == 198931 || WoW.TargetCastingSpellID == 192563 ||
                                WoW.TargetCastingSpellID == 192288 || WoW.TargetCastingSpellID == 199726
//Maw of Souls Mythic+ Interrupt list
                                || WoW.TargetCastingSpellID == 198495 || WoW.TargetCastingSpellID == 195293 || WoW.TargetCastingSpellID == 199589 || WoW.TargetCastingSpellID == 194266 ||
                                WoW.TargetCastingSpellID == 198405 || WoW.TargetCastingSpellID == 199514 || WoW.TargetCastingSpellID == 194657
//Neltharions Lair Mythic+ Interrupt list
                                || WoW.TargetCastingSpellID == 193585 || WoW.TargetCastingSpellID == 202181
//The Arcway Mythic+ Interrupt list
                                || WoW.TargetCastingSpellID == 226269 || WoW.TargetCastingSpellID == 211007 || WoW.TargetCastingSpellID == 211757 || WoW.TargetCastingSpellID == 226285 ||
                                WoW.TargetCastingSpellID == 226206 || WoW.TargetCastingSpellID == 211115 || WoW.TargetCastingSpellID == 196392
// Advisor Vandros (Interrupt manually) Spell,203176,Accelerating Blast
                                || WoW.TargetCastingSpellID == 203957
//Vault of the Wardens Mythic+ Interrupt list
                                || WoW.TargetCastingSpellID == 193069 || WoW.TargetCastingSpellID == 191823 || WoW.TargetCastingSpellID == 202661 || WoW.TargetCastingSpellID == 201488 ||
                                WoW.TargetCastingSpellID == 195332
//Raid Interrupts
                                || WoW.TargetCastingSpellID == 209485 || WoW.TargetCastingSpellID == 209410 || WoW.TargetCastingSpellID == 211470 || WoW.TargetCastingSpellID == 225100 ||
                                WoW.TargetCastingSpellID == 207980 || WoW.TargetCastingSpellID == 196870 || WoW.TargetCastingSpellID == 195284 || WoW.TargetCastingSpellID == 192005 ||
                                WoW.TargetCastingSpellID == 228255 || WoW.TargetCastingSpellID == 228239 || WoW.TargetCastingSpellID == 227917 || WoW.TargetCastingSpellID == 228625 ||
                                WoW.TargetCastingSpellID == 228606 || WoW.TargetCastingSpellID == 229714 || WoW.TargetCastingSpellID == 227592 || WoW.TargetCastingSpellID == 229083 ||
                                WoW.TargetCastingSpellID == 228025 || WoW.TargetCastingSpellID == 228019 || WoW.TargetCastingSpellID == 227987 || WoW.TargetCastingSpellID == 227420 ||
                                WoW.TargetCastingSpellID == 200905)

                            {
                                if (!WoW.IsSpellOnCooldown("Pummel") && WoW.TargetPercentCast >= 40)
                                {
                                    WoW.CastSpell("Pummel");
                                    return;
                                }
                                if (spellref && !WoW.IsSpellOnCooldown("SpellReflect") && WoW.TargetPercentCast >= 80)
                                {
                                    WoW.CastSpell("SpellReflect");
                                    return;
                                }
                            }
                        }
                    }

                    if (WoW.CanCast("Shield Block") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("ProtectionLesion", "SB HP Percent") && WoW.Rage >= 15 &&
                        !WoW.IsSpellOnCooldown("Shield Block") && !WoW.PlayerHasBuff("Shield Block"))
                    {
                        WoW.CastSpell("Shield Block");
                        return;
                    }

                    if (WoW.CanCast("Shield Block") && WoW.Rage >= 15 && WoW.PlayerBuffTimeRemaining("Shield Block") <= 2)
                    {
                        WoW.CastSpell("Shield Block");
                        return;
                    }


                    // IP Control
                    if (WoW.CanCast("Ignore Pain") && (WoW.Rage >= 60) && !WoW.PlayerHasBuff("Vengeance Ignore Pain"))
                    {
                        WoW.CastSpell("Ignore Pain");
                        return;
                    }
                    if (WoW.CanCast("Ignore Pain") && (WoW.Rage >= 39) && WoW.PlayerHasBuff("Vengeance Ignore Pain"))
                    {
                        WoW.CastSpell("Ignore Pain");
                    }
                    if (WoW.CanCast("Ignore Pain") && (WoW.Rage >= 13) && WoW.PlayerHasBuff("Vengeance Ignore Pain") && WoW.IsSpellOverlayed("Revenge"))
                    {
                        WoW.CastSpell("Ignore Pain");
                    }
                    // Revenge Control
                    if (Indomitable)
                    {
                        if (!AngerM && WoW.CanCast("Revenge") && WoW.Rage >= 30 && !WoW.PlayerHasBuff("Vengeance Revenge"))
                        {
                            WoW.CastSpell("Revenge");
                        }
                        if (AngerM && WoW.CanCast("Revenge") && WoW.Rage >= 30)
                        {
                            WoW.CastSpell("Revenge");
                        }
                        if (AngerM && WoW.CanCast("Revenge") && WoW.IsSpellOverlayed("Revenge"))
                        {
                            WoW.CastSpell("Revenge");
                        }
                        if (!AngerM && WoW.CanCast("Revenge") && WoW.IsSpellOverlayed("Revenge") && WoW.PlayerHasBuff("Vengeance Revenge"))
                        {
                            WoW.CastSpell("Revenge");
                        }
                        if (WoW.CanCast("Thunder Clap") && !WoW.IsSpellOnCooldown("Thunder Clap"))
                        {
                            WoW.CastSpell("Thunder Clap");
                            return;
                        }
                    }

                    if (!Indomitable && swingwatch.ElapsedMilliseconds > AttackspeedMS)
                    {
                        if (!AngerM && WoW.CanCast("Revenge") && WoW.Rage >= 30 && !WoW.PlayerHasBuff("Vengeance Revenge"))
                        {
                            WoW.CastSpell("Revenge");
                            swingwatch.Reset();
                            swingwatch.Start();
                            return;
                        }
                        if (AngerM && WoW.CanCast("Revenge") && WoW.Rage >= 30)
                        {
                            WoW.CastSpell("Revenge");
                            swingwatch.Reset();
                            swingwatch.Start();
                            return;
                        }
                        if (AngerM && WoW.CanCast("Revenge") && WoW.IsSpellOverlayed("Revenge"))
                        {
                            WoW.CastSpell("Revenge");
                            swingwatch.Reset();
                            swingwatch.Start();
                            return;
                        }
                        if (!AngerM && WoW.CanCast("Revenge") && WoW.IsSpellOverlayed("Revenge") && WoW.PlayerHasBuff("Vengeance Revenge"))
                        {
                            WoW.CastSpell("Revenge");
                            swingwatch.Reset();
                            swingwatch.Start();
                            return;
                        }
                        if (!AngerM && WoW.CanCast("Revenge") && WoW.Rage >= 19 && !WoW.IsSpellOnCooldown("Revenge") && WoW.PlayerHasBuff("Vengeance Revenge"))
                        {
                            WoW.CastSpell("Revenge");
                            swingwatch.Reset();
                            swingwatch.Start();
                            return;
                        }
                        if (WoW.CanCast("Thunder Clap") && !WoW.IsSpellOnCooldown("Thunder Clap"))
                        {
                            WoW.CastSpell("Thunder Clap");
                            swingwatch.Reset();
                            swingwatch.Start();
                            return;
                        }
                    }

                    //Rotational shiz

                    if (!Indomitable && (!WoW.IsSpellOnCooldown("Shield Slam") || WoW.IsSpellOverlayed("Shield Slam")) && !AngerM && WoW.PlayerHasBuff("Shield Block") &&
                        WoW.SpellCooldownTimeRemaining("Shield Block") > 2)
                    {
                        WoW.CastSpell("Shield Slam");
                        return;
                    }


                    if ((AngerM || Indomitable) && (!WoW.IsSpellOnCooldown("Shield Slam") || WoW.IsSpellOverlayed("Shield Slam")))
                    {
                        WoW.CastSpell("Shield Slam");
                    }
                    //will cast SS when proc's
                    if (WoW.CanCast("Shield Slam") && WoW.IsSpellOverlayed("Shield Slam"))
                    {
                        WoW.CastSpell("Shield Slam");
                        return;
                    }


                    if (Indomitable && WoW.CanCast("Devastate") && WoW.IsSpellOnCooldown("Shield Slam") && WoW.IsSpellOnCooldown("Thunder Clap"))
                    {
                        WoW.CastSpell("Devastate");
                        return;
                    }


                    if (ImpendingVic && WoW.Rage >= 10 && !WoW.IsSpellOnCooldown("Impending Victory") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("ProtectionLesion", "IV HP Percent"))
                    {
                        WoW.CastSpell("Impending Victory");
                        return;
                    }
                    if (!ImpendingVic && WoW.IsSpellOverlayed("Victory Rush") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("ProtectionLesion", "IV HP Percent"))
                    {
                        WoW.CastSpell("Victory Rush");
                        return;
                    }
                }
                //Artifact / Shockwave Combo.
                if (WoW.CanCast("Neltharion's Fury") && WoW.TargetHasDebuff("ShockWavestun") && WoW.IsSpellOnCooldown("Neltharion's Fury"))
                {
                    WoW.CastSpell("Neltharion's Fury");
                    return;
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                // Do AOE Stuff here
            }
        }
Ejemplo n.º 23
0
        public override void Pulse()
        {
            if (!coolDownStopWatch.IsRunning || coolDownStopWatch.ElapsedMilliseconds > 60000)
            {
                coolDownStopWatch.Restart();
            }
            if (DetectKeyPress.GetKeyState(0x6A) < 0)                              //Use cooldowns manage by *numButton
            {
                if (coolDownStopWatch.ElapsedMilliseconds > 1000)
                {
                    combatRoutine.UseCooldowns = !combatRoutine.UseCooldowns;
                    WoW.Speak("Cooldowns " + (combatRoutine.UseCooldowns ? "On" : "Off"));
                    coolDownStopWatch.Restart();
                }
            }

            if (combatRoutine.Type == RotationType.SingleTarget)                                                                     // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerHasBuff("Ghost Wolf") && WoW.IsInCombat)                        //First things go first but break if we wanna run in Wolf
                {
                    if (WoW.CanCast("Wind Shear") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.IsSpellInRange("Wind Shear")) //interupt every spell
                    {
                        WoW.CastSpell("Wind Shear");
                        return;
                    }

                    if (WoW.CanCast("Feral Spirit") && WoW.IsSpellInRange("Stormstrike") && combatRoutine.UseCooldowns && WoW.Maelstrom >= 20)                     //Wolves in melee range
                    {
                        Log.Write("Using Feral Spirit", Color.Red);
                        WoW.CastSpell("Feral Spirit");
                        return;
                    }

                    if (WoW.CanCast("Crash Lightning") && WoW.Maelstrom >= 20 && WoW.SpellCooldownTimeRemaining("Feral Spirit") >= 115)                     //Crash lightning for alpha wolf
                    {
                        WoW.CastSpell("Crash Lightning");
                        return;
                    }

                    if (WoW.CanCast("Rockbiter") && (!WoW.PlayerHasBuff("Landslide") || WoW.PlayerBuffTimeRemaining("Landslide") <= 1) && WoW.IsSpellInRange("Flametongue")) //REFRESH LANDSLIDE
                    {
                        Log.Write("Reseting Landslide", Color.Red);
                        WoW.CastSpell("Rockbiter");
                        return;
                    }

                    if (WoW.CanCast("Fury of Air") && !WoW.PlayerHasBuff("Fury of Air") && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 22) //REFRESH Fury of Air
                    {
                        Log.Write("Reseting Fury of Air", Color.Red);
                        WoW.CastSpell("Fury of Air");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && WoW.IsSpellInRange("Flametongue") && ((!WoW.PlayerHasBuff("Flametongue") || WoW.PlayerBuffTimeRemaining("Flametongue") <= 1)) || (WoW.SpellCooldownTimeRemaining("Doom Winds") <= 6 && WoW.PlayerBuffTimeRemaining("Flametongue") <= 4)) //REFRESH FLAMETONGUE
                    {
                        Log.Write("Reseting Flametongue buff", Color.Red);
                        WoW.CastSpell("Flametongue");
                        return;
                    }

                    if (WoW.CanCast("Doom Winds") && combatRoutine.UseCooldowns && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Flametongue"))
                    {
                        WoW.CastSpell("Doom Winds");
                        return;
                    }

                    if (WoW.CanCast("Lightning Bolt") && WoW.IsSpellInRange("Lightning Bolt") && WoW.Maelstrom >= 46)                     //Overcharge
                    {
                        WoW.CastSpell("Lightning Bolt");
                        return;
                    }

                    if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Stormbringer") && WoW.Maelstrom >= 26)
                    {
                        WoW.CastSpell("Stormstrike");
                        return;
                    }

                    if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Hot Hand"))                     //Hot Hand
                    {
                        WoW.CastSpell("Lava Lash");
                        return;
                    }

                    if (WoW.SpellCooldownTimeRemaining("Lightning Bolt") >= 1)                      // to get not GCD locked on Bolt
                    {
                        if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 80)
                        {
                            WoW.CastSpell("Stormstrike");
                            return;
                        }

                        if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 120)
                        {
                            WoW.CastSpell("Lava Lash");                                     //Buffer Lava
                            return;
                        }

                        if (WoW.CanCast("Flametongue") && WoW.PlayerBuffTimeRemaining("Flametongue") <= 5 && WoW.IsSpellInRange("Flametongue"))
                        {
                            WoW.CastSpell("Flametongue");                                     //REFRESH FLAMETONGUE PANDEMIC
                            return;
                        }

                        if (WoW.CanCast("Rockbiter") && WoW.IsSpellInRange("Flametongue"))
                        {
                            WoW.CastSpell("Rockbiter");                                     //Nothing to do
                            return;
                        }
                        if (WoW.CanCast("Feral Lunge") && !WoW.IsSpellInRange("Flametongue") && WoW.IsSpellInRange("Feral Lunge"))                         //out of range of flametongue 10y and in range of feral lunge 8-25y
                        {
                            WoW.CastSpell("Feral Lunge");
                            return;
                        }
                    }

                    if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 60) //ASTRAL SHIFT - DMG REDUCTION if we are below 60% of HP
                    {
                        WoW.CastSpell("Astral Shift");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.SingleTargetCleave)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerHasBuff("Ghost Wolf") && WoW.IsInCombat)                        //First things go first
                {
                    if (WoW.CanCast("Wind Shear") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.IsSpellInRange("Wind Shear")) //interupt every spell
                    {
                        WoW.CastSpell("Wind Shear");
                        return;
                    }

                    if (WoW.CanCast("Feral Spirit") && WoW.IsSpellInRange("Stormstrike") && combatRoutine.UseCooldowns && WoW.Maelstrom >= 20)                     //Wolves in melee range
                    {
                        Log.Write("Using Feral Spirit", Color.Red);
                        WoW.CastSpell("Feral Spirit");
                        return;
                    }

                    if (WoW.CanCast("Crash Lightning") && WoW.Maelstrom >= 20 && WoW.SpellCooldownTimeRemaining("Feral Spirit") >= 115)                     //Crash lightning for alpha wolf
                    {
                        WoW.CastSpell("Crash Lightning");
                        return;
                    }

                    if (WoW.CanCast("Rockbiter") && (!WoW.PlayerHasBuff("Landslide") || WoW.PlayerBuffTimeRemaining("Landslide") <= 1) && WoW.IsSpellInRange("Flametongue")) //REFRESH LANDSLIDE
                    {
                        Log.Write("Reseting Landslide", Color.Red);
                        WoW.CastSpell("Rockbiter");
                        return;
                    }

                    if (WoW.CanCast("Fury of Air") && !WoW.PlayerHasBuff("Fury of Air") && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 22) //REFRESH Fury of Air
                    {
                        Log.Write("Reseting Fury of Air", Color.Red);
                        WoW.CastSpell("Fury of Air");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && WoW.IsSpellInRange("Flametongue") && ((!WoW.PlayerHasBuff("Flametongue") || WoW.PlayerBuffTimeRemaining("Flametongue") <= 1)) || (WoW.SpellCooldownTimeRemaining("Doom Winds") <= 6 && WoW.PlayerBuffTimeRemaining("Flametongue") <= 4)) //REFRESH FLAMETONGUE
                    {
                        Log.Write("Reseting Flametongue buff", Color.Red);
                        WoW.CastSpell("Flametongue");
                        return;
                    }

                    if (WoW.CanCast("Doom Winds") && combatRoutine.UseCooldowns && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Flametongue"))
                    {
                        WoW.CastSpell("Doom Winds");
                        return;
                    }

                    if (WoW.CanCast("Lightning Bolt") && WoW.IsSpellInRange("Lightning Bolt") && WoW.Maelstrom >= 46)                     //Overcharge
                    {
                        WoW.CastSpell("Lightning Bolt");
                        return;
                    }

                    if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Stormbringer") && WoW.Maelstrom >= 26)
                    {
                        WoW.CastSpell("Stormstrike");
                        return;
                    }

                    if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Hot Hand"))                     //Hot Hand
                    {
                        WoW.CastSpell("Lava Lash");
                        return;
                    }

                    if (WoW.CanCast("Crash Lightning") && WoW.Maelstrom >= 22 && WoW.IsSpellInRange("Stormstrike") && !WoW.PlayerHasBuff("Crash Lightning"))                     //Crash lightning for cleave to enable storm
                    {
                        Log.Write("Reseting Crashing buff", Color.Blue);
                        WoW.CastSpell("Crash Lightning");
                        return;
                    }

                    if (WoW.SpellCooldownTimeRemaining("Lightning Bolt") >= 1)                      // to get not GCD locked on Bolt
                    {
                        if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 80)
                        {
                            WoW.CastSpell("Stormstrike");
                            return;
                        }

                        if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 120)
                        {
                            WoW.CastSpell("Lava Lash");                                     //Buffer Lava
                            return;
                        }

                        if (WoW.CanCast("Flametongue") && WoW.PlayerBuffTimeRemaining("Flametongue") <= 5 && WoW.IsSpellInRange("Flametongue"))
                        {
                            WoW.CastSpell("Flametongue");                                     //REFRESH FLAMETONGUE PANDEMIC
                            return;
                        }

                        if (WoW.CanCast("Rockbiter") && WoW.IsSpellInRange("Flametongue"))
                        {
                            WoW.CastSpell("Rockbiter");                                     //Nothing to do
                            return;
                        }
                        if (WoW.CanCast("Feral Lunge") && !WoW.IsSpellInRange("Flametongue") && WoW.IsSpellInRange("Feral Lunge"))                         //out of range of flametongue 10y and in range of feral lunge 8-25y
                        {
                            WoW.CastSpell("Feral Lunge");
                            return;
                        }
                    }

                    if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 60) //ASTRAL SHIFT - DMG REDUCTION if we are below 60% of HP
                    {
                        WoW.CastSpell("Astral Shift");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerHasBuff("Ghost Wolf") && WoW.IsInCombat)                        //First things go first
                {
                    if (WoW.CanCast("Wind Shear") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.IsSpellInRange("Wind Shear")) //interupt every spell
                    {
                        WoW.CastSpell("Wind Shear");
                        return;
                    }

                    if (WoW.CanCast("Feral Spirit") && WoW.IsSpellInRange("Stormstrike") && combatRoutine.UseCooldowns && WoW.Maelstrom >= 20)                     //Wolves in melee range
                    {
                        Log.Write("Using Feral Spirit", Color.Red);
                        WoW.CastSpell("Feral Spirit");
                        return;
                    }

                    if (WoW.CanCast("Crash Lightning") && WoW.Maelstrom >= 20 && WoW.SpellCooldownTimeRemaining("Feral Spirit") >= 115)                     //Crash lightning for alpha wolf
                    {
                        WoW.CastSpell("Crash Lightning");
                        return;
                    }

                    if (WoW.CanCast("Rockbiter") && (!WoW.PlayerHasBuff("Landslide") || WoW.PlayerBuffTimeRemaining("Landslide") <= 1) && WoW.IsSpellInRange("Flametongue")) //REFRESH LANDSLIDE
                    {
                        Log.Write("Reseting Landslide", Color.Red);
                        WoW.CastSpell("Rockbiter");
                        return;
                    }

                    if (WoW.CanCast("Fury of Air") && !WoW.PlayerHasBuff("Fury of Air") && WoW.IsSpellInRange("Flametongue") && WoW.Maelstrom >= 22) //REFRESH Fury of Air
                    {
                        Log.Write("Reseting Fury of Air", Color.Red);
                        WoW.CastSpell("Fury of Air");
                        return;
                    }

                    if (WoW.CanCast("Flametongue") && WoW.IsSpellInRange("Flametongue") && ((!WoW.PlayerHasBuff("Flametongue") || WoW.PlayerBuffTimeRemaining("Flametongue") <= 1)) || (WoW.SpellCooldownTimeRemaining("Doom Winds") <= 6 && WoW.PlayerBuffTimeRemaining("Flametongue") <= 4)) //REFRESH FLAMETONGUE
                    {
                        Log.Write("Reseting Flametongue buff", Color.Red);
                        WoW.CastSpell("Flametongue");
                        return;
                    }

                    if (WoW.CanCast("Doom Winds") && combatRoutine.UseCooldowns && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Flametongue"))
                    {
                        WoW.CastSpell("Doom Winds");
                        return;
                    }

                    if (WoW.CanCast("Lightning Bolt") && WoW.IsSpellInRange("Lightning Bolt") && WoW.Maelstrom >= 46)                     //Overcharge
                    {
                        WoW.CastSpell("Lightning Bolt");
                        return;
                    }

                    if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Stormbringer") && WoW.Maelstrom >= 26)
                    {
                        WoW.CastSpell("Stormstrike");
                        return;
                    }

                    if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.PlayerHasBuff("Hot Hand"))                     //Hot Hand
                    {
                        WoW.CastSpell("Lava Lash");
                        return;
                    }

                    if (WoW.CanCast("Crash Lightning") && WoW.Maelstrom >= 22 && WoW.IsSpellInRange("Stormstrike"))                     //Crash lightning priority for aoe
                    {
                        WoW.CastSpell("Crash Lightning");
                        return;
                    }

                    if (WoW.SpellCooldownTimeRemaining("Lightning Bolt") >= 1)                      // to get not GCD locked on Bolt
                    {
                        if (WoW.CanCast("Stormstrike") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 80)
                        {
                            WoW.CastSpell("Stormstrike");
                            return;
                        }

                        if (WoW.CanCast("Lava Lash") && WoW.IsSpellInRange("Stormstrike") && WoW.Maelstrom >= 120)
                        {
                            WoW.CastSpell("Lava Lash");                                     //Buffer Lava
                            return;
                        }

                        if (WoW.CanCast("Flametongue") && WoW.PlayerBuffTimeRemaining("Flametongue") <= 5 && WoW.IsSpellInRange("Flametongue"))
                        {
                            WoW.CastSpell("Flametongue");                                     //REFRESH FLAMETONGUE PANDEMIC
                            return;
                        }

                        if (WoW.CanCast("Rockbiter") && WoW.IsSpellInRange("Flametongue"))
                        {
                            WoW.CastSpell("Rockbiter");                                     //Nothing to do
                            return;
                        }
                        if (WoW.CanCast("Feral Lunge") && !WoW.IsSpellInRange("Flametongue") && WoW.IsSpellInRange("Feral Lunge"))                         //out of range of flametongue 10y and in range of feral lunge 8-25y
                        {
                            WoW.CastSpell("Feral Lunge");
                            return;
                        }
                    }

                    if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 60) //ASTRAL SHIFT - DMG REDUCTION if we are below 60% of HP
                    {
                        WoW.CastSpell("Astral Shift");
                        return;
                    }
                }
            }
        }
Ejemplo n.º 24
0
        public override void Pulse()
        {
            /* Log.Write("Starting.....", Color.Red); */
            /* Place to check target's (boss) buffs/debuffs in order to stop casting */

            /* if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.TargetPlayerHasBuff("Focusing")) return; */
            if (togglewatch.ElapsedMilliseconds == 0)
            {
                togglewatch.Start();
                return;
            }

            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_RCONTROL) < 0)
            {
                if (togglewatch.ElapsedMilliseconds > 1000)
                {
                    combatRoutine.UseCooldowns = !combatRoutine.UseCooldowns;
                    WoW.Speak("Cooldowns " + (combatRoutine.UseCooldowns ? "On" : "Off"));
                    togglewatch.Restart();
                    if (!UseCooldowns && Opener)
                    {
                        Opener = !Opener;
                        WoW.Speak("Opener " + (Opener ? "Enabled" : "Disabled"));
                        Log.WritePixelMagic("Disabling Opener because you disabled Cooldowns.", Color.Red);
                    }
                    if (!UseCooldowns && autoCD)
                    {
                        autoCD = !autoCD;
                        WoW.Speak("Auto Burst " + (Opener ? "Enabled" : "Disabled"));
                        Log.WritePixelMagic("Disabling Automatic burst because you disabled Cooldowns.", Color.Red);
                    }
                }
            }
            if (openerwatch.ElapsedMilliseconds == 0)
            {
                openerwatch.Start();
                Log.Write("To activate/deactivate cooldowns press RIGHT CONTROL button", Color.Black);
                Log.Write("To activate/deactivate auto Combustion/Mirror Image press LEFT ALT button (cooldowns must be ENABLED)", Color.Black);
                Log.Write("it will use it when conditions are met and disable after that so you have to enable manually again", Color.Black);
                Log.Write("To activate/deactivate Opener press F1 (make sure it's not binded in WoW keybinds first!)", Color.Black);
                Log.Write("To activate/deactivate using of Living Bomb press F2 (make sure it's not binded in WoW keybinds first!)", Color.Black);
                Log.Write("To activate/deactivate automatic interrupting F3 (it will interrupt above 80 percent of cast,)", Color.Black);
                Log.Write("To switch between PYROBLAST and FLAMESTRIKE on HotStreak press F4, default is always PYROBLAST)", Color.Black);
                Log.Write("To cast Meteor use MOUSE button 3, keep it pressed and cursor where you want to cast Meteor untill it's done.", Color.Black);
                Log.Write("To cast instant Flamestrike use Tilde button (left from number 1), keep mouse cursor where you want to cast Flamestrike.", Color.Black);
                Log.Write("OPENER is used on bosses, it requires Fire Blast(3 charges),Phoenix(3 charges),Mirror Image & Combustion off CD", Color.Black);
                Log.Write("When you enable OPENER, your task is to prepot and precast first spell, routine will do the rest including Mi/Combustion", Color.Black);
                Log.Write("You must first ENABLE COOLDOWNS to be able to use OPENER. When OPENER finishes it's work it will automatically DISABLE", Color.Black);
                Log.Write("itself so you must enable OPENER on next pull. This is to prevent nabness and unwanted routine behaviour.", Color.Black);
                Log.Write("For Flamestrike and Meteor you have to create macros /cast [@cursor] spell_name (Flamestrike or Meteor).", Color.Black);

                return;
            }

            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_F1) < 0)
            {
                if (openerwatch.ElapsedMilliseconds > 1000)
                {
                    if (!Opener)
                    {
                        if (UseCooldowns && WoW.PlayerSpellCharges("Phoenix") == 3 && WoW.PlayerSpellCharges("Fire Blast") == 3 && !WoW.IsSpellOnCooldown("Combustion") &&
                            !WoW.IsSpellOnCooldown("Mirror Image"))
                        {
                            Opener = !Opener;
                            WoW.Speak("Opener " + (Opener ? "Enabled" : "Disabled"));
                            Log.Write("Opener " + (Opener ? "Enabled" : "Disabled"), Color.Red);
                            openerwatch.Restart();
                        }
                        else
                        {
                            WoW.Speak("Error");
                            Log.Write("ERROR: You don't have all necessary CD's/CHARGES to enable OPENER or you didn't ENABLE COOLDOWNS first!", Color.Red);
                            openerwatch.Restart();
                        }
                    }
                    else
                    {
                        Opener = !Opener;
                        WoW.Speak("Opener " + (Opener ? "Enabled" : "Disabled"));
                        Log.Write("Opener " + (Opener ? "Enabled" : "Disabled"), Color.Red);
                        openerwatch.Restart();
                    }
                }
            }

            if (LBwatch.ElapsedMilliseconds == 0)
            {
                LBwatch.Start();
                return;
            }


            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_F2) < 0)
            {
                if (LBwatch.ElapsedMilliseconds > 1000)
                {
                    UseLB = !UseLB;
                    WoW.Speak("Bomb " + (UseLB ? "On" : "Off"));
                    Log.Write("Living Bomb " + (UseLB ? "ON" : "OFF"), Color.Red);
                    LBwatch.Restart();
                }
            }

            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.Write("Auto interrupt " + (autointerrupt ? "ON" : "OFF"), Color.Red);
                    interruptwatch.Restart();
                }
            }

            if (pyrowatch.ElapsedMilliseconds == 0)
            {
                pyrowatch.Start();
                return;
            }


            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_F4) < 0)
            {
                if (pyrowatch.ElapsedMilliseconds > 1000)
                {
                    pyrocast = !pyrocast;
                    WoW.Speak("Using " + (pyrocast ? "Pyro" : "Flamestrike"));
                    Log.Write("Using " + (pyrocast ? "PYROBLAST" : "FLAMESTRIKE"), Color.Red);
                    pyrowatch.Restart();
                }
            }


            if (autoCDwatch.ElapsedMilliseconds == 0)
            {
                autoCDwatch.Start();
                return;
            }

            if (DetectKeyPress.GetKeyState(DetectKeyPress.Alt) < 0 && UseCooldowns)
            {
                if (autoCDwatch.ElapsedMilliseconds > 1000)
                {
                    autoCD = !autoCD;
                    WoW.Speak("Auto Burst " + (autoCD ? "On" : "Off"));
                    Log.Write("Automatic burst " + (autoCD ? "ON" : "OFF"), Color.Red);
                    autoCDwatch.Restart();
                }
            }


            if (WoW.PlayerHasBuff("Mount") || WoW.PlayerHasBuff("Invisibility") || WoW.PlayerHasBuff("InvisiStart"))
            {
                return;
            }

            /* Log.Write ("Combustion: " + WoW.SpellCooldownTimeRemaining("Combustion")); */

            if (flamewatch.ElapsedMilliseconds == 0)
            {
                flamewatch.Start();
                return;
            }

            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_OEM_3) < 0 && WoW.PlayerHasBuff("HotStreak") && WoW.IsInCombat && !WoW.IsSpellOnCooldown("Flamestrike") &&
                flamewatch.ElapsedMilliseconds > 1200)
            {
                WoW.CastSpell("Flamestrike");
                ForcePyro = false;
                flamewatch.Reset();
                Log.Write("Flamestrike CASTED", Color.Black);
                return;
            }

            if (meteorwatch.ElapsedMilliseconds == 0)
            {
                meteorwatch.Start();
                return;
            }

            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_XBUTTON1) < 0 && WoW.IsInCombat && !WoW.IsSpellOnCooldown("Meteor") && WoW.CanCast("Meteor") &&
                meteorwatch.ElapsedMilliseconds > 1000)
            {
                WoW.CastSpell("Meteor");
                meteorwatch.Reset();
                Log.Write("Meteor CASTED", Color.Black);
                return;
            }

            if (combatRoutine.Type == RotationType.SingleTarget)
            {
                if (CombatWatch.IsRunning && !WoW.IsInCombat)
                {
                    CombatWatch.Reset();
                }
                if (!CombatWatch.IsRunning && WoW.IsInCombat && UseCooldowns && Opener && WoW.HasTarget && WoW.TargetIsEnemy)
                {
                    CombatWatch.Start();
                    Log.Write("Entering Combat, Starting Opener.", Color.Red);
                    Log.Write("Aaalllriiiight! Who ordered up an extra large can of whoop-ass?", Color.Red);
                }

                if (CombatWatch.IsRunning && CombatWatch.ElapsedMilliseconds < 4500)
                {
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Phoenix") == 3 && WoW.CanCast("Phoenix") &&
                        !WoW.IsSpellOnCooldown("Phoenix") && !WoW.LastSpell.Equals("Phoenix") && !WoW.LastSpell.Equals("Fire Blast") &&
                        WoW.IsSpellInRange("Fireball"))
                    {
                        WoW.CastSpell("Phoenix");
                        return;
                    }
                    if (WoW.IsInCombat && !WoW.IsSpellOnCooldown("Combustion") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Phoenix") == 2 &&
                        WoW.CanCast("Combustion") && WoW.CanCast("Mirror Image"))
                    {
                        Thread.Sleep(100);
                        WoW.CastSpell("Mirror Image");
                        Thread.Sleep(700);
                        WoW.CastSpell("Combustion");
                        Opener = !Opener;
                        WoW.Speak("Opener Finished" + (Opener ? "Enabled" : "Disabled"));
                        Log.Write("Opener Finished and disabled", Color.Red);
                        CombatWatch.Reset();
                        return;
                    }

                    Log.Write("Executing opener sequence");
                }

                if (CombatWatch.IsRunning && CombatWatch.ElapsedMilliseconds > 6500 && Opener)
                {
                    Opener = !Opener;
                    WoW.Speak("Opener Finished" + (Opener ? "Enabled" : "Disabled"));
                    Log.Write("Opener Finished and disabled", Color.Red);
                    CombatWatch.Reset();
                }

                if (CombatWatch.IsRunning && CombatWatch.ElapsedMilliseconds < 4300 && Opener)
                {
                    return;
                }

                if (autointerrupt && WoW.IsInCombat && !WoW.IsSpellOnCooldown("Counterspell") && WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerHasBuff("Combustion Aura") &&
                    WoW.TargetIsCasting && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 80)
                {
                    WoW.CastSpell("Counterspell");
                    return;
                }

                if (WoW.IsInCombat && WoW.CanCast("Blazing Barrier") && !WoW.PlayerHasBuff("Blazing Barrier Aura") && !WoW.LastSpell.Equals("Blazing Barrier") && WoW.HealthPercent < 70 &&
                    !WoW.PlayerHasBuff("Combustion Aura"))
                {
                    WoW.CastSpell("Blazing Barrier");
                    return;
                }

                if (WoW.IsInCombat && WoW.CanCast("Ice Block") && !WoW.PlayerHasBuff("Ice Block") && WoW.HealthPercent < 20 && !WoW.IsSpellOnCooldown("Ice Block"))
                {
                    WoW.CastSpell("Ice Block");
                    return;
                }

                if (autoCD && WoW.IsInCombat && !WoW.IsSpellOnCooldown("Combustion") && !WoW.IsSpellOnCooldown("Mirror Image") && WoW.HasTarget && WoW.TargetIsEnemy &&
                    WoW.CanCast("Combustion") && WoW.CanCast("Mirror Image") && (WoW.PlayerHasBuff("HotStreak") || WoW.PlayerHasBuff("HeatingUp")))
                {
                    Thread.Sleep(100);
                    WoW.CastSpell("Mirror Image");
                    Thread.Sleep(700);
                    WoW.CastSpell("Combustion");
                    autoCD = !autoCD;
                    WoW.Speak("Burst Finished");
                    Log.Write("Burst done, disabling burst", Color.Red);
                    return;
                }

                // Log.WritePixelMagic("Force Pyro "+ (ForcePyro ? "TRUE" : "FALSE"), Color.Red);

                // COMBUSTION PHASE //

                if (WoW.PlayerHasBuff("Combustion Aura"))                 /* What to do if we are in COMBUSTION BURST PHASE  */
                {
                    if (ForcePyro)
                    {
                        ForcePyro = !ForcePyro;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.PlayerHasBuff("HotStreak") && WoW.CanCast("Pyroblast"))
                    {
                        WoW.CastSpell("Pyroblast");

                        /* Thread.Sleep(100);
                         * if (WoW.PlayerSpellCharges("Fire Blast") >= 1) WoW.CastSpell("Fire Blast"); */
                        return;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerHasBuff("HeatingUp") &&
                        !WoW.LastSpell.Equals("Fire Blast") && !WoW.PlayerHasBuff("HotStreak"))
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Fire Blast") == 0 && WoW.CanCast("Phoenix") &&
                        WoW.PlayerSpellCharges("Phoenix") >= 1 && !WoW.IsSpellOnCooldown("Phoenix") && !WoW.PlayerHasBuff("HotStreak") &&
                        !WoW.LastSpell.Equals("Phoenix") && WoW.IsSpellInRange("Fireball"))
                    {
                        WoW.CastSpell("Phoenix");
                        return;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Phoenix") >= 1 && !WoW.IsSpellOnCooldown("Phoenix") &&
                        !WoW.PlayerHasBuff("HotStreak") && !WoW.PlayerHasBuff("HeatingUp") && WoW.CanCast("Phoenix") && !WoW.LastSpell.Equals("Phoenix") &&
                        !WoW.LastSpell.Equals("Fire Blast") && WoW.LastSpell.Equals("Combustion") && WoW.IsSpellInRange("Fireball"))
                    {
                        WoW.CastSpell("Phoenix");
                        return;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.CanCast("Scorch") && !WoW.PlayerHasBuff("HotStreak") &&
                        WoW.PlayerSpellCharges("Phoenix") == 0 && !WoW.LastSpell.Equals("Phoenix") && WoW.PlayerSpellCharges("Fire Blast") == 0)
                    {
                        WoW.CastSpell("Scorch");
                        return;
                    }
                    return;
                }

                // END COMBUSTION PHASE //

                // SUB 30% for BELT ROTATION //

                if (!WoW.PlayerHasBuff("Combustion Aura") && !WoW.LastSpell.Equals("Combustion") && !Opener &&
                    WoW.TargetHealthPercent <= 30 && !WoW.WasLastCasted("Combustion"))                        /* What to do if we are NOT MOVING - NON BURST PHASE */
                {
                    if (WoW.WasLastCasted("Pyroblast") && ForcePyro)
                    {
                        ForcePyro = !ForcePyro;
                    }
                    if (WoW.PlayerHasBuff("HeatingUp") && WoW.PlayerIsCasting && WoW.LastSpell.Equals("Scorch") && !ForcePyro)
                    {
                        ForcePyro = !ForcePyro;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.CanCast("Pyroblast") && ForcePyro)
                    {
                        if (pyrocast)
                        {
                            WoW.CastSpell("Pyroblast");
                        }
                        else
                        {
                            WoW.CastSpell("Flamestrike");
                        }
                        //WoW.CastSpell("Pyroblast");
                        Log.WritePixelMagic("FORCING PYRO/FLAMESTRIKE....", Color.Red);
                        ForcePyro = !ForcePyro;
                        if (WoW.PlayerSpellCharges("Fire Blast") >= 1 && UseCooldowns &&
                            ((WoW.SpellCooldownTimeRemaining("Combustion") > 22 && WoW.PlayerSpellCharges("Fire Blast") >= 1) ||
                             (WoW.SpellCooldownTimeRemaining("Combustion") > 13 && WoW.PlayerSpellCharges("Fire Blast") >= 2) ||
                             (WoW.SpellCooldownTimeRemaining("Combustion") > 7 && WoW.PlayerSpellCharges("Fire Blast") > 2)))
                        {
                            Thread.Sleep(500);
                            WoW.CastSpell("Fire Blast");
                            return;
                        }
                        else if (WoW.PlayerSpellCharges("Fire Blast") >= 1 && !UseCooldowns)
                        {
                            Thread.Sleep(500);
                            WoW.CastSpell("Fire Blast");
                            return;
                        }

                        return;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.PlayerHasBuff("HotStreak") && WoW.CanCast("Pyroblast") &&
                        !ForcePyro)
                    {
                        if (pyrocast)
                        {
                            WoW.CastSpell("Pyroblast");
                        }
                        else
                        {
                            WoW.CastSpell("Flamestrike");
                        }
                        //WoW.CastSpell("Pyroblast");
                        return;
                    }

                    /* if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.CanCast("Mirror Image")
                     *       && !WoW.IsSpellOnCooldown("Mirror Image"))
                     * {
                     *      WoW.CastSpell("Mirror Image");
                     *      return;
                     * }  */
                    /* if (!UseCooldowns && WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.PlayerSpellCharges("Fire Blast") >= 1
                     *      && !WoW.LastSpell.Equals("Fire Blast") && !WoW.PlayerHasBuff("HotStreak") && !WoW.PlayerHasBuff("HeatingUp"))
                     * {
                     *      Thread.Sleep(350);
                     *      WoW.CastSpell("Fire Blast");
                     *      return;
                     * }  */
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.PlayerSpellCharges("Fire Blast") >= 1 &&
                        !WoW.PlayerHasBuff("HeatingUp") && !WoW.LastSpell.Equals("Fire Blast") && !WoW.PlayerHasBuff("HotStreak") && WoW.IsSpellOnCooldown("Combustion") &&
                        ((WoW.SpellCooldownTimeRemaining("Combustion") > 22 && WoW.PlayerSpellCharges("Fire Blast") >= 1) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 13 && WoW.PlayerSpellCharges("Fire Blast") >= 2) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 7 && WoW.PlayerSpellCharges("Fire Blast") > 2)))
                    {
                        Thread.Sleep(500);
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (!UseCooldowns && WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Fire Blast") == 0 && WoW.CanCast("Phoenix") &&
                        !WoW.PlayerHasBuff("HotStreak") && !WoW.PlayerHasBuff("HeatingUp") && WoW.IsSpellOnCooldown("Fire Blast") &&
                        WoW.IsSpellInRange("Fireball") && !WoW.LastSpell.Equals("Fire Blast") && (WoW.PlayerSpellCharges("Phoenix") > 1))
                    {
                        WoW.CastSpell("Phoenix");
                        return;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Fire Blast") == 0 && WoW.CanCast("Phoenix") &&
                        !WoW.PlayerHasBuff("HotStreak") && !WoW.PlayerHasBuff("HeatingUp") && WoW.IsSpellOnCooldown("Fire Blast") &&
                        WoW.IsSpellInRange("Fireball") && !WoW.LastSpell.Equals("Fire Blast") &&
                        ((WoW.PlayerSpellCharges("Phoenix") > 2) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 20 && WoW.PlayerSpellCharges("Phoenix") > 1) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 45 && WoW.PlayerSpellCharges("Phoenix") == 1)))
                    {
                        WoW.CastSpell("Phoenix");
                        return;
                    }
                    if (UseLB && WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.CanCast("Living Bomb") && !WoW.IsSpellOnCooldown("Living Bomb") &&
                        !WoW.PlayerHasBuff("HotStreak") && WoW.IsSpellInRange("Fireball"))
                    {
                        WoW.CastSpell("Living Bomb");
                        return;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Scorch") && WoW.CanCast("Scorch") && WoW.TargetHealthPercent <= 30 &&
                        !WoW.PlayerHasBuff("HotStreak") && !WoW.IsSpellOnGCD("Scorch") && !WoW.PlayerIsCasting && !ForcePyro)
                    {
                        WoW.CastSpell("Scorch");
                        return;
                    }

                    return;
                }

                // END SUB 30% for BELT ROTATION //


                // MOVING PHASE //

                if (WoW.IsMoving && !WoW.PlayerHasBuff("Combustion Aura") && !WoW.LastSpell.Equals("Combustion") && !WoW.WasLastCasted("Combustion") && !Opener &&
                    WoW.TargetHealthPercent > 30)                         /* What to do if we are MOVING */
                {
                    if (ForcePyro)
                    {
                        ForcePyro = !ForcePyro;
                    }

                    // Legendary Bracers support
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.CanCast("Pyroblast") && !WoW.WasLastCasted("Pyroblast") &&
                        !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion Aura") && WoW.PlayerHasBuff("Legendary Bracers") && WoW.PlayerBuffTimeRemaining("Legendary Bracers") > 4 &&
                        !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Pyroblast");
                        return;
                    }
                    // END Legendary Bracers support

                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.PlayerHasBuff("HotStreak") && WoW.CanCast("Pyroblast"))
                    {
                        WoW.CastSpell("Pyroblast");
                        return;
                    }

                    /* if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.CanCast("Mirror Image")
                     *       && !WoW.IsSpellOnCooldown("Mirror Image"))
                     * {
                     *      WoW.CastSpell("Mirror Image");
                     *      return;
                     * }   */
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerHasBuff("HeatingUp") &&
                        !WoW.LastSpell.Equals("Fire Blast") && !WoW.PlayerHasBuff("HotStreak") && WoW.IsSpellOnCooldown("Combustion") &&
                        ((WoW.SpellCooldownTimeRemaining("Combustion") > 24 && WoW.PlayerSpellCharges("Fire Blast") >= 1) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 15 && WoW.PlayerSpellCharges("Fire Blast") >= 2) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 8 && WoW.PlayerSpellCharges("Fire Blast") > 2)))
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (!UseCooldowns && WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.PlayerSpellCharges("Fire Blast") >= 1 &&
                        WoW.PlayerHasBuff("HeatingUp") && !WoW.LastSpell.Equals("Fire Blast") && !WoW.PlayerHasBuff("HotStreak"))
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Fire Blast") == 0 && WoW.CanCast("Phoenix") &&
                        !WoW.PlayerHasBuff("HotStreak") && WoW.IsSpellOnCooldown("Fire Blast") &&
                        !WoW.LastSpell.Equals("Phoenix") && WoW.IsSpellInRange("Fireball") && !WoW.LastSpell.Equals("Fire Blast") &&
                        ((WoW.SpellCooldownTimeRemaining("Combustion") > 20 && WoW.PlayerSpellCharges("Phoenix") > 2) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 30 && WoW.PlayerSpellCharges("Phoenix") > 1) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 65 && WoW.PlayerSpellCharges("Phoenix") == 1)))
                    {
                        WoW.CastSpell("Phoenix");
                        return;
                    }
                    if (!UseCooldowns && WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Fire Blast") == 0 && WoW.CanCast("Phoenix") &&
                        !WoW.PlayerHasBuff("HotStreak") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.LastSpell.Equals("Fire Blast") &&
                        !WoW.LastSpell.Equals("Phoenix") && WoW.IsSpellInRange("Fireball") && WoW.PlayerSpellCharges("Phoenix") > 1)
                    {
                        WoW.CastSpell("Phoenix");
                        return;
                    }
                    if (UseLB && WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.CanCast("Living Bomb") && !WoW.IsSpellOnCooldown("Living Bomb") &&
                        !WoW.PlayerHasBuff("HotStreak") && WoW.IsSpellInRange("Fireball"))
                    {
                        WoW.CastSpell("Living Bomb");
                        return;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Scorch") && WoW.CanCast("Scorch") && !WoW.PlayerHasBuff("HotStreak"))
                    {
                        WoW.CastSpell("Scorch");
                        return;
                    }
                    return;
                }

                // END MOVING PHASE //

                // SINGLE TARGET STAND STILL PHASE //

                if (!WoW.IsMoving && !WoW.PlayerHasBuff("Combustion Aura") && !WoW.LastSpell.Equals("Combustion") && !WoW.WasLastCasted("Combustion") && !Opener &&
                    WoW.TargetHealthPercent > 30)                        /* What to do if we are NOT MOVING - NON BURST PHASE */
                {
                    /* double dur = WoW.GetDebuffTimeRemaining("Shadowflame");
                     * Log.Write(System.Convert.ToString(dur), Color.Red); */
                    if (ForcePyro)
                    {
                        ForcePyro = !ForcePyro;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.PlayerHasBuff("HotStreak") && WoW.CanCast("Pyroblast") &&
                        !WoW.WasLastCasted("Pyroblast"))
                    {
                        if (pyrocast)
                        {
                            WoW.CastSpell("Pyroblast");
                        }
                        else
                        {
                            WoW.CastSpell("Flamestrike");
                        }
                        //WoW.CastSpell("Pyroblast");
                        return;
                    }

                    // Legendary Bracers support
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.CanCast("Pyroblast") && !WoW.WasLastCasted("Pyroblast") &&
                        !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion Aura") && WoW.PlayerHasBuff("Legendary Bracers") && WoW.PlayerBuffTimeRemaining("Legendary Bracers") > 4 &&
                        !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Pyroblast");
                        return;
                    }
                    // END Legendary Bracers support

                    /* if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.CanCast("Mirror Image")
                     *       && !WoW.IsSpellOnCooldown("Mirror Image"))
                     * {
                     *      WoW.CastSpell("Mirror Image");
                     *      return;
                     * }   */
                    /* if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.CanCast("Cinderstorm")
                     *      && WoW.TargetHasDebuff("Ignite") && !WoW.IsSpellOnCooldown("Cinderstorm"))
                     * {
                     *      WoW.CastSpell("Cinderstorm");
                     *      return;
                     * }   */
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerHasBuff("HeatingUp") &&
                        !WoW.LastSpell.Equals("Fire Blast") && !WoW.PlayerHasBuff("HotStreak") && WoW.IsSpellOnCooldown("Combustion") &&
                        ((WoW.SpellCooldownTimeRemaining("Combustion") > 24 && WoW.PlayerSpellCharges("Fire Blast") >= 1) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 15 && WoW.PlayerSpellCharges("Fire Blast") >= 2) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 8 && WoW.PlayerSpellCharges("Fire Blast") > 2)))
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (!UseCooldowns && WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.PlayerSpellCharges("Fire Blast") >= 1 &&
                        WoW.PlayerHasBuff("HeatingUp") && !WoW.LastSpell.Equals("Fire Blast") && !WoW.PlayerHasBuff("HotStreak"))
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Fire Blast") == 0 && WoW.CanCast("Phoenix") &&
                        !WoW.PlayerHasBuff("HotStreak") && WoW.IsSpellOnCooldown("Fire Blast") &&
                        !WoW.LastSpell.Equals("Phoenix") && WoW.IsSpellInRange("Fireball") && !WoW.LastSpell.Equals("Fire Blast") &&
                        ((WoW.SpellCooldownTimeRemaining("Combustion") > 20 && WoW.PlayerSpellCharges("Phoenix") > 2) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 30 && WoW.PlayerSpellCharges("Phoenix") > 1) ||
                         (WoW.SpellCooldownTimeRemaining("Combustion") > 65 && WoW.PlayerSpellCharges("Phoenix") == 1)))
                    {
                        WoW.CastSpell("Phoenix");
                        return;
                    }
                    if (!UseCooldowns && WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.PlayerSpellCharges("Fire Blast") == 0 && WoW.CanCast("Phoenix") &&
                        !WoW.PlayerHasBuff("HotStreak") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.LastSpell.Equals("Fire Blast") &&
                        !WoW.LastSpell.Equals("Phoenix") && WoW.IsSpellInRange("Fireball") && WoW.PlayerSpellCharges("Phoenix") > 1)
                    {
                        WoW.CastSpell("Phoenix");
                        return;
                    }
                    if (UseLB && WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.CanCast("Living Bomb") && !WoW.IsSpellOnCooldown("Living Bomb") &&
                        !WoW.PlayerHasBuff("HotStreak") && WoW.IsSpellInRange("Fireball"))
                    {
                        WoW.CastSpell("Living Bomb");
                        return;
                    }

                    if (WoW.IsInCombat && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Fireball") && WoW.CanCast("Fireball") && WoW.TargetHealthPercent > 30)
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                }

                return;
            }
            if ((combatRoutine.Type == RotationType.AOE) || (combatRoutine.Type == RotationType.SingleTargetCleave))
            {
                if (WoW.IsMoving)                 /* AOE WHEN MOVING */
                {
                }

                if (!WoW.IsMoving)                      /* AOE WHEN NOT MOVING */
                {
                }
            }
        }
Ejemplo n.º 25
0
        public override void Pulse()
        {
            if (WoW.PlayerHasBuff("Mount"))
            {
                return;
            }
            if (UseCooldowns)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.CanCast("BattleCry"))
                    {
                        WoW.CastSpell("BattleCry");
                        return;
                    }
                    if (WoW.CanCast("Avatar") && (WoW.SpellCooldownTimeRemaining("BattleCry") > 14))
                    {
                        WoW.CastSpell("Avatar");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    /* interrupting */
                    if (WoW.TargetIsCastingAndSpellIsInterruptible && WoW.CanCast("Pummel") && WoW.IsSpellInRange("Pummel"))
                    {
                        WoW.CastSpell("Pummel");
                        return;
                    }
                    /* --------------------- end of interrupting--------------------*/
                    /* defensive CD */
                    if (WoW.CanCast("Enraged Regeneration") && (WoW.HealthPercent < 20))
                    {
                        WoW.CastSpell("Enraged Regeneration");
                        if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && WoW.PlayerHasBuff("Enraged Regeneration"))
                        {
                            WoW.CastSpell("Bloodthirst");
                            return;
                        }
                        return;
                    }
                    if (WoW.CanCast("Commanding Shout") && (WoW.HealthPercent < 15))
                    {
                        WoW.CastSpell("Commanding Shout");
                        if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst"))
                        {
                            WoW.CastSpell("Bloodthirst");
                            return;
                        }
                        return;
                    }
                    if (WoW.PlayerHasDebuff("Fear") && WoW.CanCast("Berserker Rage"))
                    {
                        WoW.CastSpell("Berserker Rage");
                        return;
                    }
                    if (WoW.PlayerHasDebuff("Stunned") && WoW.CanCast("Every Man for Himself"))
                    {
                        WoW.CastSpell("Every Man for Himself");
                        return;
                    }
                    /* --------------------- end of defensive CD--------------------*/
                    /* dps-ing */
                    if (!WoW.PlayerHasBuff("BattleCry"))
                    {
                        if (WoW.CanCast("Rampage") && WoW.IsSpellInRange("Rampage") && (WoW.Rage >= 100) && !WoW.PlayerHasBuff("Enrage"))
                        {
                            WoW.CastSpell("Rampage");
                            return;
                        }
                        if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && !WoW.PlayerHasBuff("Enrage"))
                        {
                            WoW.CastSpell("Bloodthirst");
                            return;
                        }
                        if (WoW.CanCast("OdynsFury") && WoW.IsSpellInRange("OdynsFury") && (WoW.PlayerHasBuff("BattleCry") || WoW.HealthPercent < 10))
                        {
                            WoW.CastSpell("OdynsFury");
                            return;
                        }
                        if (WoW.CanCast("Execute") && WoW.IsSpellInRange("Execute") && WoW.PlayerHasBuff("Enrage") && WoW.TargetHealthPercent <= 20)
                        {
                            WoW.CastSpell("Execute");
                            return;
                        }
                        if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst"))
                        {
                            WoW.CastSpell("Bloodthirst");
                            return;
                        }
                        if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow"))
                        {
                            WoW.CastSpell("Raging Blow");
                            return;
                        }
                        if (WoW.CanCast("Whirlwind") && WoW.PlayerHasBuff("Wrecking Ball") && WoW.IsSpellInRange("Whirlwind"))
                        {
                            WoW.CastSpell("Whirlwind");
                            return;
                        }
                        if (WoW.CanCast("Furious Slash") && WoW.IsSpellInRange("Furious Slash") && (WoW.SpellCooldownTimeRemaining("Raging Blow") > 0.5))
                        {
                            WoW.CastSpell("Furious Slash");
                            return;
                        }
                    }
                    if (WoW.PlayerHasBuff("BattleCry"))
                    {
                        if (WoW.CanCast("Rampage") && WoW.IsSpellInRange("Rampage") && (WoW.Rage >= 100) && (!WoW.PlayerHasBuff("Enrage") || (WoW.PlayerBuffTimeRemaining("Enrage") <= 2)))
                        {
                            WoW.CastSpell("Rampage");
                            return;
                        }
                        if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow"))
                        {
                            WoW.CastSpell("Raging Blow");
                            return;
                        }
                        if (WoW.CanCast("OdynsFury") && WoW.IsSpellInRange("OdynsFury") && (WoW.PlayerHasBuff("BattleCry") || WoW.HealthPercent < 10))
                        {
                            WoW.CastSpell("OdynsFury");
                            return;
                        }
                        if (WoW.CanCast("Execute") && WoW.IsSpellInRange("Execute") && WoW.PlayerHasBuff("Enrage") && WoW.TargetHealthPercent <= 20)
                        {
                            WoW.CastSpell("Execute");
                            return;
                        }
                        if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst"))
                        {
                            WoW.CastSpell("Bloodthirst");
                            return;
                        }
                    }
                    /* --------------------- end of dps-ing--------------------*/
                }
            }
            if ((combatRoutine.Type == RotationType.AOE) || (combatRoutine.Type == RotationType.Cleave))
            {
                if (WoW.CanCast("OdynsFury") && WoW.IsSpellInRange("OdynsFury") && (WoW.PlayerHasBuff("BattleCry") || WoW.HealthPercent < 10))
                {
                    WoW.CastSpell("OdynsFury");
                    return;
                }
                if (!WoW.PlayerHasBuff("Meat-Cleaver"))
                {
                    WoW.CastSpell("Whirlwind");
                    return;
                }
                if (WoW.CanCast("Rampage") && WoW.IsSpellInRange("Rampage") && (WoW.Rage >= 100) && !WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Meat-Cleaver"))
                {
                    WoW.CastSpell("Rampage");
                    return;
                }
                if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && !WoW.PlayerHasBuff("Enrage") && WoW.PlayerHasBuff("Meat-Cleaver"))
                {
                    WoW.CastSpell("Bloodthirst");
                    return;
                }

                if (WoW.CanCast("Bloodthirst") && WoW.IsSpellInRange("Bloodthirst") && WoW.PlayerHasBuff("Meat-Cleaver"))
                {
                    WoW.CastSpell("Bloodthirst");
                    return;
                }
                if (WoW.CanCast("Raging Blow") && WoW.IsSpellInRange("Raging Blow"))
                {
                    WoW.CastSpell("Raging Blow");
                    return;
                }
                if (WoW.CanCast("Whirlwind") && WoW.PlayerHasBuff("Wrecking Ball") && WoW.IsSpellInRange("Whirlwind"))
                {
                    WoW.CastSpell("Whirlwind");
                    return;
                }
            }
        }
        public override void Pulse()
        {
            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 (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.HealthPercent < 100 &&
                            (WoW.PlayerSpellCharges("Shield Block") == 2 ||
                             (WoW.PlayerSpellCharges("Shield Block") >= 1 && WoW.HealthPercent <= 90 && WoW.PlayerBuffTimeRemaining("ShieldBlockAura") <= 2)))
                        {
                            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.PlayerHasBuff("Legendary"))
                        {
                            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) // Do Single Target Stuff here
            {
                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 (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.PlayerHasBuff("Metamorphosis"))
                    {
                        if (combatRoutine.UseCooldowns)
                        {
                            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(DetectKeyPress.VK_KEY_Z) < 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"))
                        {
                            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("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(DetectKeyPress.VK_KEY_Z) < 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 (DetectKeyPress.GetKeyState(0x6A) < 0)
            {
                UseCooldowns = !UseCooldowns;
                Thread.Sleep(150);
            }
            if (!WoW.IsInCombat && !WoW.PlayerHasBuff("Stealth") && !WoW.IsMounted && WoW.CanCast("Stealth"))
            {
                WoW.CastSpell("Stealth");
                return;
            }
            if (WoW.CanCast("Symbols of Death") && WoW.PlayerHasBuff("Stealth") && !WoW.IsInCombat && !WoW.IsMounted)
            {
                WoW.CastSpell("Symbols of Death");
                return;
            }
            if (WoW.CanCast("CrimsonVial") && WoW.HealthPercent <= 40 && WoW.Energy >= 35)
            {
                WoW.CastSpell("CrimsonVial");
                return;
            }
            if (WoW.TargetIsCasting)             // Kick
            {
                if (WoW.CanCast("Kick") && WoW.IsSpellInRange("Kick") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 55 && !WoW.IsSpellOnCooldown("Kick") && !WoW.PlayerIsChanneling && !WoW.WasLastCasted("Kick"))
                {
                    WoW.CastSpell("Kick");
                    return;
                }
            }
            if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted)
                {
                    if (combatRoutine.UseCooldowns)
                    {
                        if (WoW.CanCast("ShadowBlades") && WoW.PlayerHasBuff("Symbols of Death") && WoW.IsSpellInRange("NightBlade"))
                        {
                            WoW.CastSpell("ShadowBlades");
                            return;
                        }
                        if (WoW.CanCast("Berserking") && !WoW.IsSpellOnCooldown("Berserking") && WoW.PlayerRace == "Troll")
                        {
                            WoW.CastSpell("Berserking");
                            return;
                        }
                        if (WoW.CanCast("Arcane Torrent") && !WoW.IsSpellOnCooldown("Arcane Torrent") && WoW.PlayerRace == "BloodElf" && WoW.Energy <= 20)
                        {
                            WoW.CastSpell("Arcane Torrent");
                            return;
                        }
                        if (WoW.CanCast("Blood Fury") && !WoW.IsSpellOnCooldown("Blood Fury") && WoW.PlayerRace == "Orc")
                        {
                            WoW.CastSpell("Blood Fury");
                            return;
                        }
                        if (WoW.CanCast("Vanish") && WoW.IsSpellInRange("NightBlade") && WoW.TargetHasDebuff("NightBlade") && (!WoW.PlayerHasBuff("Stealth") || !WoW.PlayerHasBuff("ShadowDance")))
                        {
                            WoW.CastSpell("Vanish");
                            return;
                        }
                    }
                    if (WoW.PlayerHasBuff("Stealth") || WoW.PlayerHasBuff("Subterfuge") || WoW.PlayerHasBuff("ShadowDance"))
                    {
                        if (WoW.CanCast("Symbols of Death") && WoW.IsSpellInRange("NightBlade") && WoW.Energy >= 35 && WoW.PlayerBuffTimeRemaining("Symbols of Death") <= 500)
                        {
                            WoW.CastSpell("Symbols of Death");
                            return;
                        }
                        if (WoW.CanCast("ShadowStrike") && WoW.IsSpellInRange("NightBlade") && WoW.Energy >= 40 && WoW.CurrentComboPoints <= 5)
                        {
                            WoW.CastSpell("ShadowStrike");
                            return;
                        }
                        if (WoW.CanCast("NightBlade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 &&
                            (!WoW.TargetHasDebuff("NightBlade") || WoW.TargetDebuffTimeRemaining("NightBlade") <= 600) && WoW.IsSpellInRange("NightBlade"))
                        {
                            WoW.CastSpell("NightBlade");
                            return;
                        }
                        if (WoW.CanCast("GoremawsBite") && WoW.IsSpellInRange("NightBlade") && WoW.CurrentComboPoints <= 3)
                        {
                            WoW.CastSpell("GoremawsBite");
                            return;
                        }
                        if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.IsSpellInRange("NightBlade") && WoW.Energy >= 35 && WoW.TargetHasDebuff("NightBlade"))
                        {
                            WoW.CastSpell("Eviscerate");
                            return;
                        }
                    }
                    if (WoW.CanCast("ShadowDance") && (!WoW.PlayerHasBuff("Stealth") || !WoW.PlayerHasBuff("ShadowDance") || !WoW.PlayerHasBuff("Vanish") || !WoW.PlayerHasBuff("Subterfuge")) && WoW.Energy >= 55 &&
                        (WoW.PlayerSpellCharges("ShadowDance") >= 2 && WoW.CurrentComboPoints <= 3 && WoW.IsSpellInRange("NightBlade")))
                    {
                        WoW.CastSpell("ShadowDance");
                        return;
                    }
                    if (WoW.CanCast("NightBlade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 &&
                        (!WoW.TargetHasDebuff("NightBlade") || WoW.TargetDebuffTimeRemaining("NightBlade") <= 600) && WoW.IsSpellInRange("NightBlade"))
                    {
                        WoW.CastSpell("NightBlade");
                        return;
                    }
                    if (WoW.CanCast("GoremawsBite") && WoW.IsSpellInRange("NightBlade") && WoW.CurrentComboPoints <= 3)
                    {
                        WoW.CastSpell("GoremawsBite");
                        return;
                    }
                    if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 35 && WoW.TargetHasDebuff("NightBlade") && WoW.IsSpellInRange("NightBlade"))
                    {
                        WoW.CastSpell("Eviscerate");
                        return;
                    }
                    if (WoW.CanCast("Backstab") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 45 && WoW.IsSpellInRange("NightBlade"))
                    {
                        WoW.CastSpell("Backstab");
                        return;
                    }
                }
            }

            if (combatRoutine.Type == RotationType.AOE) // Do AoE Stuff here
            {
                if (WoW.PlayerHasBuff("Stealth") || WoW.PlayerHasBuff("Subterfuge") || WoW.PlayerHasBuff("ShadowDance"))
                {
                    if (WoW.CanCast("Symbols of Death") && WoW.IsSpellInRange("NightBlade") && WoW.Energy >= 35 && WoW.PlayerBuffTimeRemaining("Symbols of Death") <= 500)
                    {
                        WoW.CastSpell("Symbols of Death");
                        return;
                    }
                    if (WoW.CanCast("ShurikenStorm") && WoW.IsSpellInRange("NightBlade") && WoW.Energy >= 40 && WoW.CurrentComboPoints <= 5)
                    {
                        WoW.CastSpell("ShurikenStorm");
                        return;
                    }
                    if (WoW.CanCast("NightBlade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 &&
                        (!WoW.TargetHasDebuff("NightBlade") || WoW.TargetDebuffTimeRemaining("NightBlade") <= 600) && WoW.IsSpellInRange("NightBlade"))
                    {
                        WoW.CastSpell("NightBlade");
                        return;
                    }
                    if (WoW.CanCast("GoremawsBite") && WoW.IsSpellInRange("NightBlade") && WoW.CurrentComboPoints <= 3)
                    {
                        WoW.CastSpell("GoremawsBite");
                        return;
                    }
                    if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.IsSpellInRange("NightBlade") && WoW.Energy >= 35 && WoW.TargetHasDebuff("NightBlade"))
                    {
                        WoW.CastSpell("Eviscerate");
                        return;
                    }
                }
                if (WoW.CanCast("ShadowDance") && (!WoW.PlayerHasBuff("Stealth") || !WoW.PlayerHasBuff("ShadowDance") || !WoW.PlayerHasBuff("Vanish") || !WoW.PlayerHasBuff("Subterfuge")) && WoW.Energy >= 55 &&
                    (WoW.PlayerSpellCharges("ShadowDance") >= 2 && WoW.CurrentComboPoints <= 3 && WoW.IsSpellInRange("NightBlade")))
                {
                    WoW.CastSpell("ShadowDance");
                    return;
                }
                if (WoW.CanCast("NightBlade") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 25 &&
                    (!WoW.TargetHasDebuff("NightBlade") || WoW.TargetDebuffTimeRemaining("NightBlade") <= 600) && WoW.IsSpellInRange("NightBlade"))
                {
                    WoW.CastSpell("NightBlade");
                    return;
                }
                if (WoW.CanCast("GoremawsBite") && WoW.IsSpellInRange("NightBlade"))
                {
                    WoW.CastSpell("GoremawsBite");
                    return;
                }
                if (WoW.CanCast("Eviscerate") && WoW.CurrentComboPoints >= 5 && WoW.Energy >= 35 && WoW.TargetHasDebuff("NightBlade") && WoW.IsSpellInRange("NightBlade"))
                {
                    WoW.CastSpell("Eviscerate");
                    return;
                }
                if (WoW.CanCast("ShurikenStorm") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 35 && WoW.IsSpellInRange("NightBlade"))
                {
                    WoW.CastSpell("ShurikenStorm");
                    return;
                }
            }
        }
Ejemplo n.º 29
0
        public override void Pulse()
        {
            {
                if (combatRoutine.Type == RotationType.SingleTarget)
                {
                    if (WoW.IsSpellInRange("Rupture") && WoW.IsInCombat && !WoW.IsMounted)
                    {
                        if (UseCooldowns &&
                            WoW.CanCast("Kingsbane") && WoW.CurrentComboPoints <= 4 && WoW.Energy >= 35 && WoW.PlayerHasBuff("Envenom") && WoW.PlayerBuffTimeRemaining("Envenom") >= 150 &&
                            !WoW.IsSpellOnCooldown("Kingsbane") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") >= 1400 &&
                            (
                                WoW.SpellCooldownTimeRemaining("Vendetta") >= 1000 ||
                                WoW.TargetHasDebuff("Vendetta")
                            ))
                        {
                            WoW.CastSpell("Kingsbane");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Garrote") && WoW.Energy >= 45 && !WoW.TargetHasDebuff("Garrote") && !WoW.IsSpellOnCooldown("Garrote") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Garrote");
                            return;
                        }
                        if (WoW.TargetHasDebuff("Vendetta") && WoW.CanCast("Fan Of Knives") && WoW.Energy >= 35 && WoW.PlayerHasBuff("FoK") && WoW.PlayerBuffStacks("FoK") == 30 && WoW.CurrentComboPoints <= 4)
                        {
                            WoW.CastSpell("Fan Of Knives");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Garrote") && WoW.Energy >= 45 && WoW.TargetHasDebuff("Garrote") && WoW.TargetDebuffTimeRemaining("Garrote") <= 300 && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Garrote");
                            return;
                        }
                        if (WoW.CurrentComboPoints == 4 && WoW.Energy >= 25 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture") && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (WoW.CurrentComboPoints == 4 && WoW.Energy >= 25 && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") <= 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (WoW.CurrentComboPoints == 5 && WoW.Energy >= 25 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture") && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (WoW.CurrentComboPoints == 5 && WoW.Energy >= 25 && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") <= 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetDebuffTimeRemaining("Toxins") <= 150 && WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetDebuffTimeRemaining("Toxins") <= 150 && WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (WoW.TargetHasDebuff("Kingsbane") && WoW.TargetDebuffTimeRemaining("Rupture") >= 400 && WoW.Energy >= 35 && WoW.CurrentComboPoints >= 2 && WoW.PlayerHasBuff("Envenom") && WoW.PlayerBuffTimeRemaining("Envenom") <= 150)
                        {
                            WoW.CastSpell("Envenom");
                            Log.Write("Extend Envenom remaining");
                            return;
                        }
                        if (WoW.TargetHasDebuff("Kingsbane") && WoW.TargetDebuffTimeRemaining("Rupture") >= 400 && WoW.Energy >= 35 && WoW.CurrentComboPoints >= 2 && !WoW.PlayerHasBuff("Envenom"))
                        {
                            WoW.CastSpell("Envenom");
                            Log.Write("Getting Envenom up for kingsbane");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && !WoW.TargetHasDebuff("Toxins") && WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && !WoW.TargetHasDebuff("Toxins") && WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetHasDebuff("Vendetta") && WoW.Energy >= 140 && WoW.CurrentComboPoints >= 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (WoW.CanCast("Mutilate") && WoW.Energy >= 55 && WoW.CurrentComboPoints <= 3)
                        {
                            WoW.CastSpell("Mutilate");
                            return;
                        }
                        if (UseCooldowns && WoW.CanCast("Vendetta") &&
                            !WoW.IsSpellOnCooldown("Vendetta") &&
                            WoW.Energy <= 50
                            )
                        {
                            WoW.CastSpell("Vendetta");
                            return;
                        }

                        /*if (UseCooldowns &&
                         * WoW.CanCast("Vanish") &&
                         * WoW.CurrentComboPoints >= 5 &&
                         * WoW.Energy >= 25 && WoW.TargetHasDebuff("Vendetta") &&
                         * (
                         * WoW.TargetHasDebuff("Rupture") &&
                         * WoW.TargetDebuffTimeRemaining("Rupture") < 10
                         * )
                         * ) {
                         * WoW.CastSpell("Vanish");
                         * return;
                         * }*/
                        if (!WoW.PlayerHasBuff("Critbuff") && UseCooldowns && WoW.CurrentComboPoints == 5 && !WoW.IsSpellOnCooldown("Vanish") && WoW.Energy >= 35 && WoW.TargetHasDebuff("Vendetta"))
                        {
                            WoW.CastSpell("Vanish");
                            return;
                        }
                        if (UseCooldowns && WoW.CurrentComboPoints == 5 && WoW.PlayerHasBuff("Vanish") && WoW.Energy >= 35 && WoW.TargetHasDebuff("Vendetta"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (UseCooldowns && WoW.CanCast("Berserk") && !WoW.IsSpellOnCooldown("Berserk") && WoW.TargetHasDebuff("Vendetta") && WoW.PlayerRace == "Troll")
                        {
                            WoW.CastSpell("Berserk");
                            return;
                        }
                    }
                }


                if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.SingleTargetCleave) // Do AoE Target Stuff here
                {
                    if (WoW.HasTarget && WoW.IsSpellInRange("Rupture") && WoW.IsInCombat && !WoW.IsMounted)
                    {
                        if (WoW.Energy >= 35 && WoW.CurrentComboPoints <= 4 && WoW.CanCast("Fan Of Knives"))
                        {
                            WoW.CastSpell("Fan Of Knives");
                            return;
                        }
                        if (WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.TargetHealthPercent <= 35 && WoW.CanCast("Envenom"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.TargetHealthPercent <= 35 && WoW.CanCast("Envenom"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (WoW.Energy >= 25 && WoW.CurrentComboPoints == 4 && WoW.TargetHealthPercent >= 36 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (WoW.Energy >= 25 && WoW.CurrentComboPoints == 5 && WoW.TargetHealthPercent >= 36 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (WoW.Energy >= 35 && WoW.CurrentComboPoints >= 4 && WoW.TargetHealthPercent >= 36 && WoW.TargetHasDebuff("Rupture") && WoW.CanCast("Envenom"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (WoW.CanCast("Garrote") && WoW.Energy >= 45 && !WoW.TargetHasDebuff("Garrote") && !WoW.IsSpellOnCooldown("Garrote") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Garrote");
                            return;
                        }
                        if (UseCooldowns && WoW.CanCast("Berserk") && !WoW.IsSpellOnCooldown("Berserk"))
                        {
                            WoW.CastSpell("Berserk");
                            return;
                        }
                    }
                }
            }
        }
 public override void Pulse()
 {
     if (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");
             }
         }
     }
 }