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

                        /*	if (WoW.CanCast("Shadow Blades") && WoW.Cooldown && WoW.HasBuff("Symbols of Death"))
                         *  {
                         *
                         *      WoW.CastSpellByName("Shadow Blades");
                         *      return;
                         *  } */

                        /*	if(WoW.CanCast("Goremaw's Bite") && WoW.CurrentComboPoints <= 3 && WoW.IsSpellInRange("Goremaw's Bite"))
                         *  {
                         *
                         *      WoW.CastSpellByName("Goremaw's Bite");
                         *      return;
                         *  } */

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

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

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

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


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

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

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

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

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

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

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

                        /*	if (WoW.CanCast("Shadow Blades") && WoW.Cooldown && WoW.HasBuff("Symbols of Death"))
                         *  {
                         *
                         *      WoW.CastSpellByName("Shadow Blades");
                         *      return;
                         *  } */

                        /*	if(WoW.CanCast("Goremaw's Bite") && WoW.CurrentComboPoints <= 3 && WoW.IsSpellInRange("Goremaw's Bite"))
                         *  {
                         *
                         *      WoW.CastSpellByName("Goremaw's Bite");
                         *      return;
                         *  } */

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

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

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

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

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


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

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

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

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

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

                    if (WoW.CanCast("Shuriken Storm") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 35 && WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Shuriken Storm");
                    }
                }
            }
        }
Esempio n. 2
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget) /* Singel Target Rotation*/
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasTarget && WoW.IsInCombat && WoW.PlayerHealthPercent <= 20)
                /* Defensive Cooldowns */
                {
                    if (WoW.IsMoving && WoW.CanCast("UnendingResolve"))
                    {
                        WoW.CastSpell("UnendingResolve");
                        return;
                    }

                    if (!WoW.IsMoving && WoW.CanCast("UnendingResolve"))
                    {
                        WoW.CastSpell("UnendingResolve");
                        return;
                    }

                    if (!WoW.IsMoving && WoW.CanCast("DrainLife"))
                    {
                        WoW.CastSpell("DrainLife");
                        return;
                    }
                }

                if (WoW.IsInCombat && Control.ModifierKeys == Keys.Shift && !WoW.PlayerIsCasting)
                /* Havoc on mouseover target, create macro to use: #showtooltip /cast [target=mouseover,harm,exists,nodead] Havoc; Havoc */
                {
                    WoW.CastSpell("Havoc");
                    return;
                }

                if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.IsMoving && WoW.IsInCombat) /* What to do when we are NOT moving */
                {
                    if (!WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.TargetHasDebuff("AuraImmolate"))
                    {
                        if (WoW.HasTarget && WoW.CanCast("DimRift") && WoW.PlayerSpellCharges("DimRift") == 3)
                        {
                            WoW.CastSpell("DimRift");
                            return;
                        }

                        if (!WoW.WasLastCasted("Immolate") && WoW.CanCast("Immolate"))
                        {
                            WoW.CastSpell("Immolate");
                            return;
                        }
                    }

                    if (!WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.TargetHasDebuff("AuraImmolate"))
                    {
                        if (WoW.HasTarget && WoW.CanCast("DimRift") && WoW.PlayerSpellCharges("DimRift") == 3)
                        {
                            WoW.CastSpell("DimRift");
                            return;
                        }

                        if (WoW.TargetDebuffTimeRemaining("AuraImmolate") >= 10 && WoW.CanCast("Conflagrate"))
                        {
                            WoW.CastSpell("Conflagrate");
                            return;
                        }

                        if (WoW.TargetDebuffTimeRemaining("AuraImmolate") <= 4.2 && !WoW.WasLastCasted("Immolate") && WoW.CanCast("Immolate"))
                        {
                            WoW.CastSpell("Immolate");
                            return;
                        }

                        if (WoW.TargetDebuffTimeRemaining("AuraImmolate") >= 10 && WoW.PlayerSpellCharges("Conflagrate") == 1 &&
                            WoW.WasLastCasted("Conflagrate") && WoW.CanCast("Conflagrate"))
                        {
                            WoW.CastSpell("Conflagrate");
                            return;
                        }

                        if (WoW.PlayerHasBuff("AuraConflagrateBuff") && WoW.TargetHasDebuff("AuraChaosBolt") && WoW.CanCast("Conflagrate") &&
                            WoW.CurrentSoulShards <= 4 &&
                            WoW.CanCast("Conflagrate"))
                        {
                            WoW.CastSpell("Conflagrate");
                            return;
                        }

                        if (WoW.CanCast("Conflagrate") && WoW.PlayerSpellCharges("Conflagrate") == 2 && !WoW.WasLastCasted("Immolate") &&
                            WoW.CurrentSoulShards <= 4)
                        {
                            WoW.CastSpell("Conflagrate");
                            return;
                        }

                        if (WoW.HasTarget && WoW.CanCast("ServiceImp") && WoW.CurrentSoulShards >= 1)
                        {
                            WoW.CastSpell("ServiceImp");
                            return;
                        }

                        /* Summon Infernal on the target but its an AOE ground Spell. I'm not able to code that: */
                        /* Summon DoomGuard if LordOfFlames debuff is up*/

                        if (WoW.HasTarget && WoW.CanCast("DoomGuard"))
                        /*Since I can't do the Infernal check, I just summon DoomGuard*/
                        {
                            WoW.CastSpell("DoomGuard");
                            return;
                        }

                        if (WoW.CanCast("ChaosBolt") /* && !WoW.WasLastCasted("ChaosBolt")  */ && WoW.CurrentSoulShards > 3)
                        {
                            WoW.CastSpell("ChaosBolt");
                            return;
                        }

                        if (WoW.HasTarget && WoW.CanCast("DimRift") && WoW.PlayerSpellCharges("DimRift") <= 2)
                        {
                            WoW.CastSpell("DimRift");
                            return;
                        }

                        if (WoW.CanCast("ChaosBolt") && WoW.CurrentSoulShards >= 2)
                        {
                            WoW.CastSpell("ChaosBolt");
                            return;
                        }

                        if (WoW.CanCast("Incinerate") && WoW.WasLastCasted("ChaosBolt")
                            /*&& WoW.HasDebuff("AuraChaosBolt")*/)
                        {
                            WoW.CastSpell("Incinerate");
                            return;
                        }

                        if (WoW.CanCast("Incinerate") && WoW.CurrentSoulShards <= 1)
                        {
                            WoW.CastSpell("Incinerate");
                            return;
                        }

                        if (WoW.CanCast("Incinerate") && WoW.TargetHasDebuff("AuraChaosBolt") && WoW.TargetDebuffTimeRemaining("AuraChaosBolt") >= 2 &&
                            WoW.CurrentSoulShards <= 3)
                        {
                            WoW.CastSpell("Incinerate");
                            return;
                        }
                    }
                }

                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsMoving && WoW.IsInCombat)
                /* What to do when we are moving */
                {
                    if (!WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.HasTarget && WoW.CanCast("DimRift"))
                    {
                        WoW.CastSpell("DimRift");
                        return;
                    }

                    if (!WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.CanCast("Conflagrate"))
                    {
                        WoW.CastSpell("Conflagrate");
                    }
                }
            }
        }
 public override void Pulse()
 {
     if (DetectKeyPress.GetKeyState(cooldownKey) < 0 && (cooldownModifier == -1 || cooldownModifier != -1 && DetectKeyPress.GetKeyState(cooldownModifier) < 0))
     {
         UseCooldowns = !UseCooldowns;
         Thread.Sleep(150);
     }
     if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && WoW.TargetIsVisible && (!WoW.IsMounted || WoW.PlayerHasBuff("Divine Steed")))
     {
         //Offensive Cooldowns
         if (WoW.CanCast("Avenging Wrath") && ischeckHotkeysProtAW && UseCooldowns && WoW.PlayerHasBuff("Seraphim") && WoW.Talent(7) == 2 && WoW.IsSpellInRange("Rebuke"))
         {
             WoW.CastSpell("Avenging Wrath");
             return;
         }
         if (WoW.CanCast("Avenging Wrath") && ischeckHotkeysProtAW && UseCooldowns && WoW.Talent(7) != 2 && WoW.IsSpellInRange("Rebuke"))
         {
             WoW.CastSpell("Avenging Wrath");
             return;
         }
         if (WoW.CanCast("Rebuke") && ischeckHotkeysProtKick && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= ProtKickPercent && !WoW.IsSpellOnCooldown("Rebuke") && !WoW.PlayerIsChanneling && WoW.IsSpellInRange("Rebuke"))
         {
             WoW.CastSpell("Rebuke");
             return;
         }
         if (WoW.CanCast("Bastion of Light") && ischeckHotkeysProtBOL && UseCooldowns && WoW.Talent(2) == 2 && WoW.PlayerSpellCharges("Shield of the Righteous") == 0 && WoW.IsSpellInRange("Rebuke"))
         {
             WoW.CastSpell("Bastion of Light");
             return;
         }
         // Defensive Cooldowns
         if (WoW.CanCast("Eye of Tyr") && ischeckHotkeysProtEoT && !WoW.IsSpellOnCooldown("Eye of Tyr") && WoW.HealthPercent <= ProtEoTPercent && WoW.IsSpellInRange("Rebuke"))
         {
             WoW.CastSpell("Eye of Tyr");
             return;
         }
         if (WoW.CanCast("Ardent Defender") && ischeckHotkeysProtAD && !WoW.IsSpellOnCooldown("Ardent Defender") && WoW.HealthPercent <= ProtADPercent)
         {
             WoW.CastSpell("Ardent Defender");
             return;
         }
         if (WoW.CanCast("Guardian of the Ancient Kings") && ischeckHotkeysProtGotAK && !WoW.IsSpellOnCooldown("Guardian of the Ancient Kings") && WoW.HealthPercent <= ProtGotAKPercent)
         {
             WoW.CastSpell("Guardian of the Ancient Kings");
             return;
         }
         if (WoW.CanCast("Lay on Hands") && ischeckHotkeysProtLoH && !WoW.IsSpellOnCooldown("Lay on Hands") && WoW.HealthPercent <= ProtLoHPercent)
         {
             WoW.CastSpell("Lay on Hands");
             return;
         }
         if (WoW.CanCast("Hand of the Protector") && ischeckHotkeysProtLotP && !WoW.IsSpellOnCooldown("Hand of the Protector") && WoW.HealthPercent <= ProtLotPPercent && WoW.Talent(5) == 1)
         {
             WoW.CastSpell("Hand of the Protector");
             return;
         }
         if (WoW.CanCast("Light of the Protector") && ischeckHotkeysProtLotP && !WoW.IsSpellOnCooldown("Light of the Protector") && WoW.HealthPercent <= ProtLotPPercent && WoW.Talent(5) != 1)
         {
             WoW.CastSpell("Light of the Protector");
             return;
         }
         //Rotation
         if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave || combatRoutine.Type == RotationType.AOE)
         {
             if (!WoW.IsSpellOnCooldown("Seraphim") && WoW.PlayerSpellCharges("Shield of the Righteous") >= 2 && WoW.HealthPercent >= 80 && WoW.IsSpellInRange("Rebuke") && WoW.Talent(7) == 2)
             {
                 WoW.CastSpell("Seraphim");
                 return;
             }
             if (WoW.PlayerSpellCharges("Shield of the Righteous") == 3 && WoW.IsSpellInRange("Rebuke"))
             {
                 WoW.CastSpell("Shield of the Righteous");
                 return;
             }
             if (WoW.PlayerHasBuff("Shield of the Righteous") && WoW.PlayerBuffTimeRemaining("Shield of the Righteous") <= 1.5 && WoW.IsSpellInRange("Rebuke"))
             {
                 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) && WoW.IsSpellInRange("Rebuke"))
             {
                 WoW.CastSpell("Shield of the Righteous");
                 return;
             }
             if (WoW.Talent(1) == 2 && WoW.CanCast("Blessed Hammer") && WoW.PlayerSpellCharges("Blessed Hammer") >= 3 && !WoW.IsSpellOnGCD("Blessed Hammer") && WoW.IsSpellInRange("Rebuke"))
             {
                 WoW.CastSpell("Blessed Hammer");
                 return;
             }
             if (WoW.Talent(1) != 2 && WoW.CanCast("Hammer of the Righteous") && WoW.PlayerSpellCharges("Hammer of the Righteous") >= 1 && !WoW.IsSpellOnGCD("Hammer of the Righteous") && WoW.IsSpellInRange("Rebuke"))
             {
                 WoW.CastSpell("Hammer of the Righteous");
                 return;
             }
             if (WoW.CanCast("Judgement") && !WoW.IsSpellOnGCD("Judgement"))
             {
                 WoW.CastSpell("Judgement");
                 return;
             }
             if (WoW.CanCast("Consecration") && !WoW.IsSpellOnGCD("Consecration") && !WoW.TargetHasDebuff("Consecration") && WoW.IsSpellInRange("Rebuke"))
             {
                 WoW.CastSpell("Consecration");
                 return;
             }
             if (WoW.CanCast("Avenger's Shield") && !WoW.IsSpellOnGCD("Avenger's Shield"))
             {
                 WoW.CastSpell("Avenger's Shield");
                 return;
             }
             if (WoW.Talent(1) == 2 && WoW.CanCast("Blessed Hammer") && WoW.PlayerSpellCharges("Blessed Hammer") >= 1 && !WoW.IsSpellOnGCD("Blessed Hammer") && !WoW.TargetHasDebuff("Blessed Hammer") && WoW.IsSpellInRange("Rebuke"))
             {
                 WoW.CastSpell("Blessed Hammer");
                 return;
             }
         }
     }
 }
Esempio n. 4
0
        /// <summary>
        ///     Do the rotation.
        /// </summary>
        private void doRotation(bool isSingleTarget = true)
        {
            bool ignoreMovement = WoW.PlayerHasBuff(SURRENDER_MADNESS);

            if (WoW.Insanity >= 70 || WoW.PlayerHasBuff(VOIDFORM_AURA))
            {
                //Expend insanity in voidform.
                if (WoW.HasTarget && !WoW.PlayerHasBuff(VOIDFORM_AURA))
                {
                    castWithRangeCheck(VOID_ERUPTION);
                }
                else
                {
                    //If we can, cast it.
                    castWithRangeCheck(VOID_BOLT);

                    //Cast it.
                    if (calculateInsanityDrain() > (WoW.Insanity - 35))
                    {
                        castWithRangeCheck(VOID_TORRENT, ignoreMovement);
                    }

                    //If the boss health is at or below our set threshold SW:D
                    if (WoW.TargetHealthPercent <= HEALTH_PERCENT_FOR_SWD)
                    {
                        if (WoW.PlayerSpellCharges(SHADOW_DEATH) == 2 && WoW.Insanity <= 70)
                        {
                            //If we have 2 charges, always cast
                            castWithRangeCheck(SHADOW_DEATH);
                        }
                        else if (WoW.PlayerSpellCharges(SHADOW_DEATH) == 1)
                        {
                            //If we have 1 charge, only cast if at high insanity and mindblast is off CD or extremely low insanity
                            if ((WoW.Insanity > PANIC_INSANITY_VALUE && !(WoW.IsSpellOnCooldown(MIND_BLAST) || WoW.IsSpellOnCooldown(VOID_BOLT))) || WoW.Insanity <= calculateInsanityDrain())
                            {
                                castWithRangeCheck(SHADOW_DEATH);
                            }
                        }
                    }

                    if (WoW.Insanity <= 40 && !WoW.PlayerHasBuff(POWER_INFUSION))
                    {
                        castWithRangeCheck(POWER_INFUSION, false, false);
                    }

                    //Cast shadowfiend if we have more than 15 stacks of voidform aura.
                    if (WoW.PlayerBuffStacks(VOIDFORM_AURA) >= 15)
                    {
                        castWithRangeCheck(SHADOW_FIEND);
                    }

                    //If we can, cast it.
                    castWithRangeCheck(MIND_BLAST);

                    if (!isPlayerBusy(ignoreChanneling: false))
                    {
                        //Always fill with mind flay on single target.
                        castWithRangeCheck(MIND_FLAY);
                    }
                }
            }
            else
            {
                //Build up insanity
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.TargetIsVisible)
                {
                    //If we can, cast mind blast.
                    if (castWithRangeCheck(MIND_BLAST))
                    {
                        return;
                    }

                    //If we don't have anything else to do, cast Mind flay.
                    if (!isPlayerBusy(ignoreChanneling: false))
                    {
                        castWithRangeCheck(MIND_FLAY);
                    }
                }
            }
        }
        public override void Pulse()
        {
            if (WoW.PlayerHealthPercent == 0 || WoW.IsMounted)
            {
                return;
            }
            if (!WoW.IsInCombat && WoW.CanCast("Mount") && WoW.IsOutdoors && !WoW.IsMoving && !WoW.PlayerIsChanneling &&
                ConfigFile.ReadValue <bool>("Protection-Paladin-WiNiFiX", "AutoMount"))
            {
                WoW.CastSpell("Mount");
            }

            if (WoW.TargetHealthPercent == 0)
            {
                return;
            }

            if (!WoW.TargetIsEnemy &&
                WoW.PlayerHealthPercent < 100 &&
                WoW.CanCast("FlashHeal") &&
                WoW.Mana > 25 &&
                !WoW.IsMoving &&
                !WoW.PlayerIsChanneling)
            {
                WoW.CastSpell("FlashHeal");
                return;
            }

            if (!WoW.TargetIsEnemy)
            {
                return;
            }

            if (WoW.TargetIsCastingAndSpellIsInterruptible &&
                WoW.TargetPercentCast > 60 &&
                WoW.CanCast("Rebuke"))
            {
                WoW.CastSpell("Rebuke");
                return;
            }

            if (WoW.CanCast("ArdentDefender") && WoW.PlayerHealthPercent < 15)
            {
                Log.Write("Health < 15% using CD: [Ardent Defender]", Color.Red);
                WoW.CastSpell("ArdentDefender");
                return;
            }

            if (WoW.PlayerHealthPercent < 20 && !WoW.PlayerHasBuff("ArdentDefender"))
            {
                if (WoW.CanCast("LayOnHands") &&
                    !WoW.PlayerHasDebuff("Forbearance"))
                {
                    Log.Write("Health < 20% using CD: [Lay On Hands]", Color.Red);
                    WoW.CastSpell("LayOnHands");
                    return;
                }

                if (WoW.CanCast("DivineShield") &&
                    !WoW.PlayerHasDebuff("Forbearance") &&
                    WoW.CanCast("HandOfReckoning"))
                {
                    Log.Write("Health < 20% using CD: [Taunt & Divine Shield]", Color.Red);
                    WoW.CastSpell("HandOfReckoning");
                    WoW.CastSpell("DivineShield");
                    return;
                }
            }

            if (WoW.PlayerHealthPercent < 50)
            {
                if (WoW.CanCast("GuardianOfAncientKings") &&
                    !WoW.PlayerHasBuff("ArdentDefender"))
                {
                    Log.Write("Health < 50% using CD: [Guardian Of Ancient Kings]", Color.Red);
                    WoW.CastSpell("GuardianOfAncientKings");
                    return;
                }
            }

            if (!WoW.HasTarget)
            {
                return;
            }

            if (WoW.HasBossTarget &&
                WoW.CanCast("AvengingWrath"))
            {
                WoW.CastSpell("AvengingWrath"); // Off the GCD no return needed.
            }
            if (WoW.CanCast("AvengersShield"))
            {
                WoW.CastSpell("AvengersShield");
                return;
            }

            if (WoW.PlayerHealthPercent < 100)
            {
                if (WoW.CanCast("EyeOfTyr"))
                {
                    WoW.CastSpell("EyeOfTyr");
                    return;
                }
            }

            if (WoW.CanCast("Judgment"))
            {
                WoW.CastSpell("Judgment");
                return;
            }

            if (WoW.CanCast("Consecration"))
            {
                WoW.CastSpell("Consecration");
                return;
            }

            if (WoW.CanCast("LightOfTheProtector") &&
                WoW.PlayerHasBuff("Consecration") &&
                WoW.PlayerHealthPercent < 70)
            {
                WoW.CastSpell("LightOfTheProtector");
                return;
            }

            if (WoW.CanCast("BlessedHammer") &&
                WoW.CountEnemyNPCsInRange > 1)
            {
                WoW.CastSpell("BlessedHammer");
                return;
            }

            if (WoW.CanCast("BastionOfLight") &&
                WoW.PlayerSpellCharges("ShieldOfTheRighteous") == 0 &&
                !WoW.PlayerHasBuff("ShieldOfTheRighteous"))
            {
                WoW.CastSpell("BastionOfLight");
                return;
            }

            if (WoW.CanCast("ShieldOfTheRighteous") &&
                WoW.PlayerHasBuff("Consecration") &&
                WoW.PlayerSpellCharges("ShieldOfTheRighteous") > 0 &&
                !WoW.PlayerHasBuff("ShieldOfTheRighteous"))

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

            if (WoW.CanCast("BlessedHammer"))
            {
                WoW.CastSpell("BlessedHammer");
            }
        }
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.PlayerHasBuff("Metamorphosis"))
                    {
                        if (WoW.CanCast("Chaos Blades") && !WoW.IsSpellOnCooldown("Chaos Blades") && UseCooldowns)
                        {
                            WoW.CastSpell("Chaos Blades");
                            return;
                        }
                        if (WoW.CanCast("FOTI") && !WoW.IsSpellOnCooldown("FOTI") && !WoW.IsMoving && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("FOTI");
                            return;
                        }
                        if (WoW.CanCast("Annihilation") && WoW.IsSpellInRange("Chaos Strike") && (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70))
                        {
                            WoW.CastSpell("Annihilation");
                            return;
                        }
                        if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && (WoW.PlayerHasBuff("Momentum") || WoW.PlayerSpellCharges("Throw Glaive") == 2))
                        {
                            WoW.CastSpell("Throw Glaive");
                            return;
                        }
                        if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator
                        {
                            WoW.CastSpell("Demons Bite");
                            return;
                        }
                    }
                    if (WoW.CanCast("Chaos Blades") && WoW.IsSpellInRange("Chaos Strike") && !WoW.IsSpellOnCooldown("Chaos Blades"))
                    {
                        WoW.CastSpell("Chaos Blades");
                        return;
                    }

                    if (WoW.CanCast("FOTI") && !WoW.IsSpellOnCooldown("FOTI") && !WoW.IsMoving && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike"))
                    {
                        WoW.CastSpell("FOTI");
                        return;
                    }
                    if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") && (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70)) // Fury Spender
                    {
                        WoW.CastSpell("Chaos Strike");
                        return;
                    }
                    if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && (WoW.PlayerHasBuff("Momentum") || WoW.PlayerSpellCharges("Throw Glaive") == 2))
                    {
                        WoW.CastSpell("Throw Glaive");
                        return;
                    }
                    if (WoW.CanCast("Blur") && WoW.IsInCombat && !WoW.IsSpellOnCooldown("Blur") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Blur Usage Percent"))
                    {
                        WoW.CastSpell("Blur");
                        return;
                    }
                    if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator
                    {
                        WoW.CastSpell("Demons Bite");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.SingleTargetCleave)
            {
                // Do AOE Stuff here
                if (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.PlayerHasBuff("Metamorphosis"))
                    {
                        if (WoW.CanCast("Chaos Blades") && WoW.IsSpellInRange("Chaos Strike") && !WoW.IsSpellOnCooldown("Chaos Blades"))
                        {
                            WoW.CastSpell("Chaos Blades");
                            return;
                        }

                        if (WoW.CanCast("FOTI") && !WoW.IsSpellOnCooldown("FOTI") && !WoW.IsMoving && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("FOTI");
                            return;
                        }
                        if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("Eye Beam");
                            return;
                        }
                        if (WoW.CanCast("Death Sweep") && WoW.Fury >= 35 && WoW.IsSpellOnCooldown("Eye Beam") && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("Death Sweep");
                            return;
                        }
                        if (WoW.CanCast("Annihilation") && WoW.IsSpellInRange("Chaos Strike") && WoW.IsSpellOnCooldown("Eye Beam") &&
                            (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70))
                        {
                            WoW.CastSpell("Annihilation");
                            return;
                        }
                        if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && (WoW.PlayerHasBuff("Momentum") || WoW.PlayerSpellCharges("Throw Glaive") == 2))
                        {
                            WoW.CastSpell("Throw Glaive");
                            return;
                        }
                        if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator
                        {
                            WoW.CastSpell("Demons Bite");
                            return;
                        }
                    }
                    if (WoW.CanCast("Chaos Blades") && !WoW.IsSpellOnCooldown("Chaos Blades") && UseCooldowns && WoW.IsSpellInRange("Chaos Strike"))
                    {
                        WoW.CastSpell("Chaos Blades");
                        return;
                    }

                    if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike") && !WoW.IsSpellOnCooldown("FOTI") && !WoW.IsMoving && WoW.PlayerHasBuff("Momentum"))
                    {
                        WoW.CastSpell("FOTI");
                        return;
                    }
                    if (WoW.CanCast("Eye Beam") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 50 && WoW.PlayerHasBuff("Momentum"))
                    {
                        WoW.CastSpell("Eye Beam");
                        return;
                    }
                    if (WoW.CanCast("Blade Dance") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 35 && WoW.IsSpellOnCooldown("Eye Beam") && WoW.PlayerHasBuff("Momentum"))
                    {
                        WoW.CastSpell("Blade Dance");
                        return;
                    }
                    if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") && WoW.IsSpellOnCooldown("Eye Beam") &&
                        (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70))
                    {
                        WoW.CastSpell("Chaos Strike");
                        return;
                    }
                    if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && (WoW.PlayerHasBuff("Momentum") || WoW.PlayerSpellCharges("Throw Glaive") == 2))
                    {
                        WoW.CastSpell("Throw Glaive");
                        return;
                    }
                    if (WoW.CanCast("Blur") && WoW.IsInCombat && !WoW.IsSpellOnCooldown("Blur") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Blur Usage Percent"))
                    {
                        WoW.CastSpell("Blur");
                        return;
                    }
                    if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator
                    {
                        WoW.CastSpell("Demons Bite");
                    }
                }
            }
        }
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted)
                {
                    if (WoW.PlayerHasBuff("Metamorphosis"))
                    {
                        if (WoW.CanCast("Nemesis") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("Nemesis");
                            return;
                        }
                        if (WoW.CanCast("Chaos Blades") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("Chaos Blades");
                            return;
                        }

                        if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("FOTI");
                            return;
                        }
                        if (WoW.CanCast("Death Sweep") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 15)
                        {
                            WoW.CastSpell("Death Sweep");
                            return;
                        }
                        if (WoW.CanCast("Felblade") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury < 100)
                        {
                            WoW.CastSpell("Felblade"); //Felblade only at melee range to not make worse (if you need to gtfo)
                            return;
                        }
                        if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.IsSpellInRange("Chaos Strike") && (DetectKeyPress.GetAsyncKeyState(0x5A) < 0))
                        {
                            WoW.CastSpell("Eye Beam"); //Use Eyebeam by Z press
                            return;
                        }
                        if (WoW.CanCast("Annihilation") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 55)
                        {
                            WoW.CastSpell("Annihilation");
                            return;
                        }
                        //if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70)  // Fury Generator
                        //{
                        //    WoW.CastSpell("Demons Bite");
                        //    return;
                        //}
                        if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive"))
                        {
                            WoW.CastSpell("Throw Glaive");
                            return;
                        }
                    }
                    if (combatRoutine.UseCooldowns)
                    {
                        if (WoW.CanCast("Nemesis") && WoW.IsSpellInRange("Chaos Strike") && UseCooldowns)
                        {
                            WoW.CastSpell("Nemesis");
                            return;
                        }
                        if (WoW.CanCast("Chaos Blades") && WoW.IsSpellInRange("Chaos Strike") && UseCooldowns)
                        {
                            WoW.CastSpell("Chaos Blades");
                            return;
                        }

                        if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("FOTI");
                            return;
                        }
                    }
                    if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike"))
                    {
                        WoW.CastSpell("FOTI");
                        return;
                    }
                    if (WoW.CanCast("Blade Dance") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 15)
                    {
                        WoW.CastSpell("Blade Dance");
                        return;
                    }
                    if (WoW.CanCast("Felblade") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury < 100)
                    {
                        WoW.CastSpell("Felblade"); //Felblade only at melee range to not make worse (if you need to gtfo)
                        return;
                    }
                    if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.IsSpellInRange("Chaos Strike") && (DetectKeyPress.GetAsyncKeyState(0x5A) < 0))
                    {
                        WoW.CastSpell("Eye Beam"); //Use Eyebeam by Z press
                        return;
                    }
                    if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") &&
                        (WoW.Fury >= 70 || (WoW.Fury >= 55 && (WoW.PlayerHasBuff("Chaos Blades") || WoW.SpellCooldownTimeRemaining("Nemesis") >= 60))))
                    {
                        WoW.CastSpell("Chaos Strike"); //If we got damage buffs - spent fury on CS instantly (15 save for Blade Dance)
                        return;
                    }
                    if (WoW.CanCast("Blur") && WoW.IsInCombat && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Blur Usage Percent"))
                    {
                        WoW.CastSpell("Blur");
                        return;
                    }
                    //if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70)  // Fury Generator
                    //{
                    //    WoW.CastSpell("Demons Bite");
                    //   return;
                    //}
                    if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive"))
                    {
                        WoW.CastSpell("Throw Glaive");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.SingleTargetCleave)
            {
                // Do AOE Stuff here
                if (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.PlayerHasBuff("Metamorphosis"))
                    {
                        if (WoW.CanCast("FOTI") && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("FOTI");
                            return;
                        }
                        if (WoW.CanCast("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") == 5 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) &&
                            WoW.IsSpellInRange("Fel Barrage"))
                        {
                            WoW.CastSpell("Fel Barrage");
                            return;
                        }
                        if (WoW.CanCast("Death Sweep") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 15)
                        {
                            WoW.CastSpell("Death Sweep");
                            return;
                        }
                        if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("Eye Beam");
                            return;
                        }
                        if (WoW.CanCast("Annihilation") && WoW.IsSpellInRange("Chaos Strike") && (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70))
                        {
                            WoW.CastSpell("Annihilation");
                            return;
                        }
                        if (WoW.CanCast("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") >= 4 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) &&
                            WoW.IsSpellInRange("Fel Barrage"))
                        {
                            WoW.CastSpell("Fel Barrage");
                            return;
                        }
                        //if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70)  // Fury Generator
                        //{
                        //    WoW.CastSpell("Demons Bite");
                        //    return;
                        //}
                        if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && WoW.PlayerHasBuff("Momentum"))
                        {
                            WoW.CastSpell("Throw Glaive");
                            return;
                        }
                    }
                    if (WoW.CanCast("FOTI") && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike"))
                    {
                        WoW.CastSpell("FOTI");
                        return;
                    }
                    if (WoW.CanCast("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") == 5 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) &&
                        WoW.IsSpellInRange("Fel Barrage"))
                    {
                        WoW.CastSpell("Fel Barrage");
                        return;
                    }
                    if (WoW.CanCast("Blade Dance") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 15)
                    {
                        WoW.CastSpell("Blade Dance");
                        return;
                    }
                    if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") > 1) && WoW.IsSpellInRange("Chaos Strike"))
                    {
                        WoW.CastSpell("Eye Beam");
                        return;
                    }
                    if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") && (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70)) // Fury Spender
                    {
                        WoW.CastSpell("Chaos Strike");
                        return;
                    }
                    if (WoW.CanCast("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") >= 4 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) &&
                        WoW.IsSpellInRange("Fel Barrage"))
                    {
                        WoW.CastSpell("Fel Barrage");
                        return;
                    }
                    if (WoW.CanCast("Blur") && WoW.IsInCombat && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Blur Usage Percent"))
                    {
                        WoW.CastSpell("Blur");
                        return;
                    }
                    //if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70)  // Fury Generator
                    //{
                    //    WoW.CastSpell("Demons Bite");
                    //   return;
                    //}
                    if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && WoW.PlayerHasBuff("Momentum"))
                    {
                        WoW.CastSpell("Throw Glaive");
                    }
                }
            }
        }
Esempio n. 8
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.HasBossTarget) && WoW.TargetIsEnemy && WoW.IsInCombat)
         {
             if (WoW.CanCast("Fury of Eagle") && WoW.PlayerHasBuff("Mongoose Fury") && WoW.PlayerBuffStacks("Mongoose Fury") >= 5)
             {
                 WoW.CastSpell("Fury of Eagle");
                 return;
             }
             if (WoW.CanCast("Explosive Trap") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
             {
                 WoW.CastSpell("Explosive Trap");
                 return;
             }
             if (WoW.CanCast("Dragonsfire Grenade") && WoW.IsSpellInRange("Raptor Strike") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
             {
                 WoW.CastSpell("Dragonsfire Grenade");
                 return;
             }
             if (WoW.CanCast("Lacerate") && !WoW.TargetHasDebuff("Lacerate") && WoW.Focus >= 35 && WoW.IsSpellInRange("Lacerate") &&
                 !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
             {
                 WoW.CastSpell("Lacerate");
                 return;
             }
             if (WoW.CanCast("Snake Hunter") && WoW.PlayerSpellCharges("Mongoose Bite") <= 0 && WoW.PlayerBuffTimeRemaining("Mongoose Fury") >= 6 &&
                 WoW.IsSpellInRange("Mongoose Bite") &&
                 !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
             {
                 WoW.CastSpell("Snake Hunter");
                 return;
             }
             if (WoW.CanCast("Aspect of the Eagle") && WoW.PlayerSpellCharges("Mongoose Bite") >= 2 &&
                 WoW.PlayerBuffTimeRemaining("Mongoose Fury") >= 11 &&
                 WoW.IsSpellInRange("Mongoose Bite") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
             {
                 WoW.CastSpell("Aspect of the Eagle");
                 return;
             }
             if (WoW.CanCast("Mongoose Bite") && (!WoW.TargetHasDebuff("Mongoose Fury") || WoW.PlayerBuffTimeRemaining("Mongoose Fury") >= 3) &&
                 WoW.IsSpellInRange("Mongoose Bite") &&
                 !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
             {
                 WoW.CastSpell("Mongoose Bite");
                 return;
             }
             if (WoW.CanCast("Mongoose Bite") && WoW.PlayerHasBuff("Aspect of the Eagle") && WoW.IsSpellInRange("Mongoose Bite") &&
                 !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
             {
                 WoW.CastSpell("Mongoose Bite");
                 return;
             }
             if (WoW.CanCast("Throwing Axes") && WoW.IsSpellInRange("Throwing Axes") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
             {
                 WoW.CastSpell("Throwing Axes");
                 return;
             }
             if (WoW.CanCast("Flanking Strike") && WoW.Focus >= 50 && WoW.IsSpellInRange("Flanking Strike") && !WoW.PlayerIsCasting &&
                 !WoW.PlayerIsChanneling)
             {
                 WoW.CastSpell("Flanking Strike");
                 return;
             }
             if (WoW.CanCast("Raptor Strike") && WoW.Focus >= 25 && WoW.IsSpellInRange("Raptor Strike") && WoW.IsSpellOnCooldown("Lacerate") &&
                 WoW.IsSpellOnCooldown("Flanking Strike") && WoW.IsSpellOnCooldown("Throwing Axes") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
             {
                 WoW.CastSpell("Raptor Strike");
                 return;
             }
         }
     }
     if (combatRoutine.Type == RotationType.AOE)
     {
         // Do AOE stuff here
     }
     if (combatRoutine.Type == RotationType.Cleave)
     {
         // Do Single Target Cleave stuff here if applicable else ignore this one
     }
 }
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted)
                {
                    if (UseCooldowns && RuneOfPower && WoW.PlayerSpellCharges("Rune of Power") >= 1 && WoW.SpellCooldownTimeRemaining("Combustion") >= 4000 &&
                        WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerIsCasting && !WoW.IsMoving && !WoW.PlayerHasBuff("Rune of Power") && !WoW.IsSpellOnCooldown("Rune of Power") ||
                        (UseCooldowns && RuneOfPower && !WoW.PlayerIsCasting && WoW.PlayerSpellCharges("Fire Blast") == 3 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 &&
                         !WoW.IsMoving && !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerSpellCharges("Rune of Power") >= 1 && WoW.PlayerHasBuff("Hot Streak!") &&
                         !WoW.PlayerHasBuff("Rune of Power") && !WoW.IsSpellOnCooldown("Rune of Power")))
                    {
                        WoW.CastSpell("Rune of Power");
                        return;
                    }
                    if (UseCooldowns && Mirrors && WoW.CanCast("Mirror Image") && !WoW.IsSpellOnCooldown("Mirror Image") && WoW.PlayerHasBuff("Combustion"))
                    {
                        WoW.CastSpell("Mirror Image");
                        return;
                    }
                    if (WoW.CanCast("Scorch") && WoW.IsMoving && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Scorch");
                        return;
                    }
                    if (WoW.IsInCombat && Meteor && Control.ModifierKeys == Keys.Alt && !WoW.PlayerIsCasting)
                    {
                        WoW.CastSpell("Meteor");
                        return;
                    }
                    if (WoW.CanCast("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 &&
                        WoW.PlayerHasBuff("Heating Up") && UseCooldowns && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 && !WoW.IsSpellOnCooldown("Combustion"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }
                    if (WoW.PlayerIsCasting && UseCooldowns && WoW.PlayerHasBuff("Heating Up") && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 &&
                        !WoW.IsSpellOnCooldown("Combustion"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }
                    if (WoW.CanCast("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerHasBuff("Heating Up") && WoW.LastSpell != "Fire Blast" &&
                        WoW.LastSpell != "Phoenix's Flames" && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && !UseCooldowns && Combustion &&
                        WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.IsSpellOnCooldown("Combustion"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }
                    if (!UseCooldowns && Combustion && WoW.PlayerIsCasting && WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (WoW.CanCast("Phoenix's Flames") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && WoW.PlayerHasBuff("Heating Up") &&
                        Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.SpellCooldownTimeRemaining("Combustion") > 6000 && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }

                    if (WoW.IsInCombat && Control.ModifierKeys == Keys.Alt && ROF && !WoW.PlayerIsCasting)
                    {
                        WoW.CastSpell("Ring of Frost");
                        return;
                    }
                    if (Barrier && WoW.CanCast("Blazing Barrier") && WoW.HealthPercent <= 80 && !WoW.IsSpellOnCooldown("Blazing Barrier") && !WoW.PlayerHasBuff("Blazing Barrier"))
                    {
                        WoW.CastSpell("Blazing Barrier");
                        return;
                    }

                    if (!UseCooldowns && WoW.CanCast("Cinderstorm") && Cinderstorm && WoW.TargetHasDebuff("Ignite") && !WoW.PlayerHasBuff("Combustion") && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Cinderstorm");
                        return;
                    }
                    if (UseCooldowns && WoW.CanCast("Cinderstorm") && Cinderstorm && WoW.TargetHasDebuff("Ignite") && !WoW.PlayerHasBuff("Combustion") &&
                        WoW.IsSpellOnCooldown("Combustion") && WoW.SpellCooldownTimeRemaining("Combustion") > 500 && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Cinderstorm");
                        return;
                    }
                    if (UseCooldowns && Combustion && !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerHasBuff("Rune of Power") && WoW.PlayerSpellCharges("Fire Blast") >= 1 &&
                        WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling ||
                        UseCooldowns && Combustion && Mirrors && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 &&
                        WoW.PlayerHasBuff("Hot Streak!") && !WoW.IsSpellOnCooldown("Combustion") && !WoW.IsSpellOnCooldown("Mirror Image") && !WoW.PlayerIsCasting &&
                        !WoW.PlayerIsChanneling)
                    {
                        WoW.CastSpell("Combustion");
                        return;
                    }

                    if (DragBr && WoW.CanCast("Dragon's Breath") && WoW.IsSpellInRange("Scorch") && !WoW.PlayerHasBuff("Combustion"))
                    {
                        WoW.CastSpell("Dragon's Breath");
                        return;
                    }
                    if (WoW.PlayerSpellCharges("Phoenix's Flames") > 2 && !WoW.PlayerHasBuff("Combustion") && WoW.SpellCooldownTimeRemaining("Combustion") > 2000 &&
                        WoW.CanCast("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 &&
                        WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && WoW.LastSpell != "Phoenix's Flames" && WoW.LastSpell != "Fire Blast" ||
                        WoW.SpellCooldownTimeRemaining("Combustion") < 2000 && WoW.CanCast("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!") &&
                        WoW.PlayerSpellCharges("Phoenix's Flames") == 3 && WoW.LastSpell != "Phoenix's Flames" && WoW.LastSpell != "Fire Blast")
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }
                    if (WoW.CanCast("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerHasBuff("Combustion") && !WoW.PlayerHasBuff("Hot Streak!") &&
                        WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.SpellCooldownTimeRemaining("Fire Blast") > 50 && WoW.LastSpell != "Phoenix's Flames" &&
                        WoW.LastSpell != "Fire Blast")
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }

                    if (WoW.CanCast("Living Bomb") && LivingBomb && !WoW.IsSpellOnCooldown("Living Bomb") && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Living Bomb");
                        return;
                    }
                    if (WoW.CanCast("Ice Block") && !WoW.PlayerHasBuff("Ice Block") && IceBlock && WoW.HealthPercent < 20 && !WoW.IsSpellOnCooldown("Ice Block"))
                    {
                        WoW.CastSpell("Ice Block");
                        Log.Write("--------Activating Ice Block, you were below 20%HealthPoints.--------");
                        return;
                    }
                    // Legendary Bracers Support.
                    if (Legendary && WoW.CanCast("Pyroblast") && !WoW.WasLastCasted("Pyroblast") && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") &&
                        WoW.PlayerBuffTimeRemaining("Marquee Bindings of the Sun King") > 400 && WoW.PlayerHasBuff("Marquee Bindings of the Sun King") && !WoW.PlayerHasBuff("Hot Streak!") ||
                        (!WoW.PlayerHasBuff("Combustion") && !WoW.WasLastCasted("Pyroblast") && WoW.PlayerHasBuff("Ice Floes") && !WoW.PlayerIsCasting &&
                         WoW.PlayerHasBuff("Marquee Bindings of the Sun King") && !WoW.PlayerHasBuff("Hot Streak!")))
                    {
                        WoW.CastSpell("Pyroblast");
                        return;
                    }
                    if (WoW.CanCast("Pyroblast") && WoW.PlayerHasBuff("Hot Streak!") && WoW.IsSpellOnCooldown("Combustion"))
                    {
                        WoW.CastSpell("Pyroblast");
                        return;
                    }
                    if (WoW.CanCast("Pyroblast") && WoW.PlayerHasBuff("Hot Streak!") && !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerSpellCharges("Phoenix's Flames") < 2)
                    {
                        WoW.CastSpell("Pyroblast");
                        return;
                    }
                    if (WoW.CanCast("Pyroblast") && WoW.PlayerHasBuff("Hot Streak!") && WoW.LastSpell == "Combustion")
                    {
                        WoW.CastSpell("Pyroblast");
                        return;
                    }
                    if (WoW.CanCast("Pyroblast") && !UseCooldowns && Combustion && WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Pyroblast");
                        return;
                    }
                    if (WoW.CanCast("Fireball") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.PlayerIsCasting && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (WoW.CanCast("Fireball") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.PlayerIsCasting && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.SpellCooldownTimeRemaining("Combustion") < 2000)
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (WoW.SpellCooldownTimeRemaining("Phoenix's Flames") > 130 && WoW.PlayerIsCasting && WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!") && WoW.SpellCooldownTimeRemaining("Combustion") > 2000)
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!") && WoW.SpellCooldownTimeRemaining("Combustion") > 2000)
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (!WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Heating Up") && WoW.CanCast("Fireball") && WoW.IsSpellInRange("Fireball") && !WoW.IsMoving && !WoW.PlayerIsChanneling &&
                        !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (!WoW.PlayerIsCasting && WoW.CanCast("Fireball") && WoW.IsSpellInRange("Fireball") && !WoW.IsMoving && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (WoW.IsMoving && WoW.PlayerHasBuff("Ice Floes") && WoW.IsSpellInRange("Fireball") && !WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerHasBuff("Heating Up"))
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (!WoW.PlayerHasBuff("Combustion") && !WoW.IsMoving && WoW.CanCast("Fireball") && !WoW.PlayerIsCasting && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        !WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && !WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") >= 2000 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && !WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000)
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted)
                {
                    if (UseCooldowns && RuneOfPower && WoW.PlayerSpellCharges("Rune of Power") >= 1 && WoW.SpellCooldownTimeRemaining("Combustion") >= 4000 && WoW.PlayerHasBuff("Hot Streak!") &&
                        !WoW.PlayerIsCasting && !WoW.IsMoving && !WoW.PlayerHasBuff("Rune of Power") && !WoW.IsSpellOnCooldown("Rune of Power") ||
                        (UseCooldowns && RuneOfPower && !WoW.PlayerIsCasting && WoW.PlayerSpellCharges("Fire Blast") == 3 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.IsMoving &&
                         !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerSpellCharges("Rune of Power") >= 1 && WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerHasBuff("Rune of Power") &&
                         !WoW.IsSpellOnCooldown("Rune of Power")))
                    {
                        WoW.CastSpell("Rune of Power");
                        return;
                    }
                    if (UseCooldowns && Mirrors && WoW.CanCast("Mirror Image") && !WoW.IsSpellOnCooldown("Mirror Image") && WoW.PlayerHasBuff("Combustion"))
                    {
                        WoW.CastSpell("Mirror Image");
                        return;
                    }
                    if (WoW.CanCast("Scorch") && WoW.IsMoving && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Scorch");
                        return;
                    }
                    if (WoW.IsInCombat && Meteor && Control.ModifierKeys == Keys.Alt && !WoW.PlayerIsCasting)
                    {
                        WoW.CastSpell("Meteor");
                        return;
                    }
                    if (WoW.CanCast("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 &&
                        WoW.PlayerHasBuff("Heating Up") && UseCooldowns && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 && !WoW.IsSpellOnCooldown("Combustion"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }
                    if (WoW.PlayerIsCasting && UseCooldowns && WoW.PlayerHasBuff("Heating Up") && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 &&
                        !WoW.IsSpellOnCooldown("Combustion"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }
                    if (WoW.CanCast("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerHasBuff("Heating Up") && WoW.LastSpell != "Fire Blast" &&
                        WoW.LastSpell != "Phoenix's Flames" && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && !UseCooldowns && Combustion &&
                        WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.IsSpellOnCooldown("Combustion"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }
                    if (!UseCooldowns && Combustion && WoW.PlayerIsCasting && WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (WoW.CanCast("Phoenix's Flames") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && WoW.PlayerHasBuff("Heating Up") &&
                        Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.SpellCooldownTimeRemaining("Combustion") > 6000 && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }

                    if (WoW.IsInCombat && Control.ModifierKeys == Keys.Alt && ROF && !WoW.PlayerIsCasting)
                    {
                        WoW.CastSpell("Ring of Frost");
                        return;
                    }
                    if (Barrier && WoW.CanCast("Blazing Barrier") && WoW.HealthPercent <= 80 && !WoW.IsSpellOnCooldown("Blazing Barrier") && !WoW.PlayerHasBuff("Blazing Barrier"))
                    {
                        WoW.CastSpell("Blazing Barrier");
                        return;
                    }

                    if (!UseCooldowns && WoW.CanCast("Cinderstorm") && Cinderstorm && WoW.TargetHasDebuff("Ignite") && !WoW.PlayerHasBuff("Combustion") && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Cinderstorm");
                        return;
                    }
                    if (UseCooldowns && WoW.CanCast("Cinderstorm") && Cinderstorm && WoW.TargetHasDebuff("Ignite") && !WoW.PlayerHasBuff("Combustion") && WoW.IsSpellOnCooldown("Combustion") &&
                        WoW.SpellCooldownTimeRemaining("Combustion") > 500 && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Cinderstorm");
                        return;
                    }
                    if (UseCooldowns && Combustion && !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerHasBuff("Rune of Power") && WoW.PlayerSpellCharges("Fire Blast") >= 1 &&
                        WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling ||
                        UseCooldowns && Combustion && Mirrors && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && WoW.PlayerHasBuff("Hot Streak!") &&
                        !WoW.IsSpellOnCooldown("Combustion") && !WoW.IsSpellOnCooldown("Mirror Image") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
                    {
                        WoW.CastSpell("Combustion");
                        return;
                    }

                    if (DragBr && WoW.CanCast("Dragon's Breath") && WoW.IsSpellInRange("Scorch") && !WoW.PlayerHasBuff("Combustion"))
                    {
                        WoW.CastSpell("Dragon's Breath");
                        return;
                    }
                    if (WoW.PlayerSpellCharges("Phoenix's Flames") > 2 && !WoW.PlayerHasBuff("Combustion") && WoW.SpellCooldownTimeRemaining("Combustion") > 2000 && WoW.CanCast("Phoenix's Flames") &&
                        WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.IsSpellOnCooldown("Fire Blast") &&
                        WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && WoW.LastSpell != "Phoenix's Flames" && WoW.LastSpell != "Fire Blast" ||
                        WoW.SpellCooldownTimeRemaining("Combustion") < 2000 && WoW.CanCast("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && !WoW.PlayerHasBuff("Hot Streak!") &&
                        WoW.PlayerSpellCharges("Phoenix's Flames") == 3 && WoW.LastSpell != "Phoenix's Flames" && WoW.LastSpell != "Fire Blast")
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }
                    if (WoW.CanCast("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerHasBuff("Combustion") && !WoW.PlayerHasBuff("Hot Streak!") &&
                        WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.SpellCooldownTimeRemaining("Fire Blast") > 5000 && WoW.LastSpell != "Phoenix's Flames" &&
                        WoW.LastSpell != "Fire Blast")
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }

                    if (WoW.CanCast("Living Bomb") && LivingBomb && !WoW.IsSpellOnCooldown("Living Bomb") && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Living Bomb");
                        return;
                    }
                    if (WoW.CanCast("Ice Block") && !WoW.PlayerHasBuff("Ice Block") && IceBlock && WoW.HealthPercent < 20 && !WoW.IsSpellOnCooldown("Ice Block"))
                    {
                        WoW.CastSpell("Ice Block");
                        Log.Write("--------Activating Ice Block, you were below 20%HealthPoints.--------");
                        return;
                    }
                    // Legendary Bracers Support.
                    if (Legendary && WoW.CanCast("Pyroblast") && !WoW.WasLastCasted("Pyroblast") && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") &&
                        WoW.PlayerBuffTimeRemaining("Marquee Bindings of the Sun King") > 400 && WoW.PlayerHasBuff("Marquee Bindings of the Sun King") && !WoW.PlayerHasBuff("Hot Streak!") ||
                        (!WoW.PlayerHasBuff("Combustion") && !WoW.WasLastCasted("Pyroblast") && WoW.PlayerHasBuff("Ice Floes") && !WoW.PlayerIsCasting &&
                         WoW.PlayerHasBuff("Marquee Bindings of the Sun King") && !WoW.PlayerHasBuff("Hot Streak!")))
                    {
                        WoW.CastSpell("Pyroblast");
                        return;
                    }
                    if (!WoW.PlayerIsCasting && WoW.CanCast("Flamestrike") && WoW.PlayerHasBuff("Hot Streak!") && WoW.IsSpellOnCooldown("Combustion"))
                    {
                        WoW.CastSpell("Flamestrike");
                        return;
                    }
                    if (!WoW.PlayerIsCasting && WoW.CanCast("Flamestrike") && WoW.PlayerHasBuff("Hot Streak!") && !WoW.IsSpellOnCooldown("Combustion") &&
                        WoW.PlayerSpellCharges("Phoenix's Flames") < 2)
                    {
                        WoW.CastSpell("Flamestrike");
                        return;
                    }
                    if (!WoW.PlayerIsCasting && WoW.CanCast("Flamestrike") && WoW.PlayerHasBuff("Hot Streak!") && WoW.LastSpell == "Combustion")
                    {
                        WoW.CastSpell("Flamestrike");
                        return;
                    }
                    if (!WoW.PlayerIsCasting && WoW.CanCast("Flamestrike") && !UseCooldowns && Combustion && WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Flamestrike");
                        return;
                    }
                    if (WoW.CanCast("Fireball") && WoW.IsSpellOnCooldown("Fire Blast") && !WoW.PlayerIsCasting && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.PlayerHasBuff("Heating Up") &&
                        !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (WoW.SpellCooldownTimeRemaining("Combustion") > 200 && WoW.SpellCooldownTimeRemaining("Phoenix's Flames") > 130 && WoW.PlayerIsCasting && WoW.LastSpell != "Phoenix's Flame" &&
                        WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") && WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (WoW.SpellCooldownTimeRemaining("Combustion") > 200 && WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }


                    if (!WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Heating Up") && WoW.CanCast("Fireball") && WoW.IsSpellInRange("Fireball") && !WoW.IsMoving && !WoW.PlayerIsChanneling &&
                        !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (!WoW.PlayerIsCasting && WoW.CanCast("Fireball") && WoW.IsSpellInRange("Fireball") && !WoW.IsMoving && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (WoW.IsMoving && WoW.PlayerHasBuff("Ice Floes") && WoW.IsSpellInRange("Fireball") && !WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerHasBuff("Heating Up"))
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (!WoW.PlayerHasBuff("Combustion") && !WoW.IsMoving && WoW.CanCast("Fireball") && !WoW.PlayerIsCasting && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        !WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && !WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") >= 2000 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && !WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000)
                    {
                        WoW.CastSpell("Fireball");
                    }
                }
            }
        }
Esempio n. 10
0
        public override void Pulse()
        {
            //Combat Time
            if (CombatTime.IsRunning && !WoW.IsInCombat)
            {
                CombatTime.Reset();
            }
            if (!CombatTime.IsRunning && WoW.IsInCombat)
            {
                CombatTime.Start();
            }

            //Dreadstalkers Time Remaining (12000 ms) (EXPERIMENTAL)
            if (DreadstalkersTime.IsRunning && WoW.DreadstalkersCount == 0)
            {
                DreadstalkersTime.Reset();
            }
            if (!DreadstalkersTime.IsRunning && WoW.DreadstalkersCount >= 1)
            {
                DreadstalkersTime.Start();
            }

            //Imp Time Remaining (12000 ms) (EXPERIMENTAL)
            if (ImpTime.IsRunning && WoW.WildImpsCount == 0)
            {
                ImpTime.Reset();
            }
            if (!ImpTime.IsRunning && WoW.WildImpsCount >= 1)
            {
                ImpTime.Start();
            }

            var DreadstalkersRemainingDuration = Convert.ToSingle((12000f - DreadstalkersTime.ElapsedMilliseconds) / 1000f);
            var ImpsRemainingDuration          = Convert.ToSingle((12000f - ImpTime.ElapsedMilliseconds) / 1000f + OneFiveCast);

            // Single Target Rotation
            if (combatRoutine.Type == RotationType.SingleTarget)
            {
                // Normal Rotation
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting)
                {
                    Log.Write("Imp Time: " + ImpsRemainingDuration, Color.DarkViolet);
                    Log.Write("Dread Time: " + DreadstalkersRemainingDuration, Color.DarkViolet);
                    //Implosion (if talent)
                    if (WoW.CanCast("Implosion") && Implosion && WoW.IsSpellInRange("Doom"))
                    {
                        if (ImpsRemainingDuration <= SBExecuteTime && WoW.PlayerHasBuff("DemonicSynergy"))
                        {
                            WoW.CastSpell("Implosion");
                            return;
                        }
                        if (WoW.LastSpell == "HandOfGuldan" && WoW.WildImpsCount == 1 && WoW.PlayerHasBuff("DemonicSynergy"))
                        {
                            WoW.CastSpell("Implosion");
                            return;
                        }
                    }

                    //Shadowflame (if talent)
                    if (WoW.CanCast("Shadowflame") && Shadowflame && WoW.IsSpellInRange("Doom") && WoW.TargetHasDebuff("Shadowflame") &&
                        WoW.TargetDebuffTimeRemaining("Shadowflame") < TwoSecondCast + 2)
                    {
                        WoW.CastSpell("Shadowflame");
                        return;
                    }

                    //Service Pet (if talent)
                    if (WoW.CanCast("GrimoireFelguard") && GrimoireOfService && WoW.IsSpellInRange("Doom") && WoW.CurrentSoulShards >= 1 && boss)
                    {
                        WoW.CastSpell("GrimoireFelguard");
                        empowered = false;
                        return;
                    }

                    // Doomguard
                    if (WoW.CanCast("Doomguard") && WoW.CurrentSoulShards >= 1 && boss && WoW.IsSpellInRange("Doom"))
                    {
                        WoW.CastSpell("Doomguard");
                        empowered = false;
                        return;
                    }

                    //Felstorm
                    if (WoW.CanCast("Felstorm") && WoW.HasPet && WoW.PetHasBuff("DemonicEmpowerment"))
                    {
                        WoW.CastSpell("Felstorm");
                        return;
                    }

                    //Call Dreadstalkers (if NOT talent Summon Darkglare)
                    if (WoW.CanCast("CallDreadstalkers") && !SummonDarkglare && (WoW.CurrentSoulShards >= 2 || WoW.PlayerHasBuff("DemonicCalling")) && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("CallDreadstalkers");
                        empowered = false;
                        DreadstalkersTime.Restart();
                        return;
                    }

                    //Hand Of Guldan (if NOT talent Summon Darkglare)
                    if (WoW.CanCast("HandOfGuldan") && !SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 4 && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("HandOfGuldan");
                        empowered = false;
                        threeimps = false;
                        ImpTime.Restart();
                        return;
                    }

                    //Summon Darkglare (if talent)
                    if (WoW.CanCast("SummonDarkglare") && SummonDarkglare && WoW.CurrentSoulShards >= 1 && WoW.TargetHasDebuff("Doom") && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        if (WoW.LastSpell == "HandOfGuldan" || WoW.LastSpell == "CallDreadstalkers")
                        {
                            WoW.CastSpell("SummonDarkglare");
                            Log.Write("1", Color.Red);
                            empowered = false;
                            return;
                        }
                        if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") > 5 && WoW.CurrentSoulShards < 3)
                        {
                            WoW.CastSpell("SummonDarkglare");
                            Log.Write("2", Color.Red);
                            empowered = false;
                            return;
                        }
                        if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") <= gcd && WoW.CurrentSoulShards >= 3)
                        {
                            WoW.CastSpell("SummonDarkglare");
                            Log.Write("3", Color.Red);
                            empowered = false;
                            return;
                        }
                        if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") <= gcd && WoW.CurrentSoulShards >= 1 && WoW.PlayerHasBuff("DemonicCalling"))
                        {
                            WoW.CastSpell("SummonDarkglare");
                            Log.Write("4", Color.Red);
                            empowered = false;
                            return;
                        }
                    }

                    //Call Dreadstalkers (if talent Summon Darkglare)
                    if (WoW.CanCast("CallDreadstalkers") && SummonDarkglare && (WoW.CurrentSoulShards >= 2 || WoW.PlayerHasBuff("DemonicCalling")) && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        if (WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= TwoSecondCast && WoW.CurrentSoulShards >= 3)
                        {
                            WoW.CastSpell("CallDreadstalkers");
                            empowered = false;
                            DreadstalkersTime.Restart();
                            return;
                        }
                        if (WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= TwoSecondCast && WoW.CurrentSoulShards >= 1 && WoW.PlayerHasBuff("DemonicCalling"))
                        {
                            WoW.CastSpell("CallDreadstalkers");
                            empowered = false;
                            DreadstalkersTime.Restart();
                            return;
                        }
                    }

                    //Hand Of Guldan
                    if (WoW.CanCast("HandOfGuldan") && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 3 && WoW.LastSpell == "CallDreadstalkers" && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("HandOfGuldan");
                        empowered = false;
                        threeimps = true;
                        ImpTime.Restart();
                        return;
                    }

                    //Hand Of Guldan (if talent Summon Darkglare)
                    if (WoW.CanCast("HandOfGuldan") && SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 5 &&
                        WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= OneFiveCast && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("HandOfGuldan");
                        threeimps = false;
                        empowered = false;
                        ImpTime.Restart();
                        return;
                    }

                    //Hand Of Guldan (if talent Summon Darkglare)
                    if (WoW.CanCast("HandOfGuldan") && SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 4 && WoW.SpellCooldownTimeRemaining("SummonDarkglare") > 2 &&
                        WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("HandOfGuldan");
                        threeimps = false;
                        empowered = false;
                        ImpTime.Restart();
                        return;
                    }

                    //Demonic Empowerment (if last spell was Hand Of Guldan)
                    if (WoW.CanCast("DemonicEmpowerment") && WoW.LastSpell == "HandOfGuldan" && WoW.LastSpell != "DemonicEmpowerment" && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("DemonicEmpowerment");
                        empowered = true;
                        return;
                    }

                    //Demonic Empowerment
                    if (WoW.CanCast("DemonicEmpowerment") && (!empowered || !WoW.PetHasBuff("DemonicEmpowerment")) && WoW.LastSpell != "DemonicEmpowerment" && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("DemonicEmpowerment");
                        empowered = true;
                        return;
                    }

/*
 *                                      //Doom (if NOT talent Hand of Doom)
 *                                      if(WoW.CanCast("Doom") && (!WoW.TargetHasDebuff("Doom") || WoW.TargetDebuffTimeRemaining("Doom") < 5) && WoW.IsSpellInRange("Doom"))
 *                                      {
 *                                              WoW.CastSpell("Doom");
 *                                              return;
 *                                      }
 *
 *                                      //Soul Harvest
 *                                      if(WoW.CanCast("SoulHarvest") && WoW.IsSpellInRange("Doom"))
 *                                      {
 *                                              WoW.CastSpell("SoulHarvest");
 *                                              return;
 *                                      }
 */
                    //Shadowflame (if talent)
                    if (WoW.CanCast("Shadowflame") && Shadowflame && WoW.IsSpellInRange("Doom") && WoW.PlayerSpellCharges("Shadowflame") == 2)
                    {
                        WoW.CastSpell("Shadowflame");
                        return;
                    }

                    //Thal'kiel's Consumption
                    if (WoW.CanCast("TK") && WoW.DreadstalkersCount >= 1 && DreadstalkersRemainingDuration > TwoSecondCast && ((WoW.WildImpsCount >= 1 && !threeimps) || WoW.WildImpsCount >= 2) &&
                        ImpsRemainingDuration > TwoSecondCast && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("TK");
                        return;
                    }

                    //Life Tap
                    if (WoW.CanCast("LifeTap") && WoW.Mana <= 30)
                    {
                        WoW.CastSpell("LifeTap");
                        return;
                    }

                    //Demonwrath (if moving)
                    if (WoW.CanCast("Demonwrath") && WoW.IsMoving && !WoW.PlayerHasBuff("Norgannon"))
                    {
                        WoW.CastSpell("Demonwrath");
                        return;
                    }

                    //Demonbolt (if talent)
                    if (WoW.CanCast("Demonbolt") && Demonbolt && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("Demonbolt");
                        return;
                    }

                    //Shadowbolt (if NOT Demonbolt talent)
                    if (WoW.CanCast("Shadowbolt") && !Demonbolt && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("Demonbolt");
                        return;
                    }

                    //Life Tap
                    if (WoW.CanCast("LifeTap") && WoW.Mana < 100)
                    {
                        WoW.CastSpell("LifeTap");
                        return;
                    }
                }
            }

            // AoE Rotation
            if (combatRoutine.Type == RotationType.AOE)
            {
                Log.Write("Imp Time: " + ImpsRemainingDuration, Color.DarkViolet);
                // AoE Rotation
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting)
                {
                    //Implosion (if talent)
                    if (WoW.CanCast("Implosion") && Implosion && WoW.IsSpellInRange("Doom"))
                    {
                        if (ImpsRemainingDuration <= SBExecuteTime && WoW.PlayerHasBuff("DemonicSynergy"))
                        {
                            WoW.CastSpell("Implosion");
                            return;
                        }
                        if (WoW.LastSpell == "HandOfGuldan" && WoW.WildImpsCount == 1 && WoW.PlayerHasBuff("DemonicSynergy"))
                        {
                            WoW.CastSpell("Implosion");
                            return;
                        }
                        if (WoW.WildImpsCount == 1 && ImpsRemainingDuration <= SBExecuteTime)
                        {
                            WoW.CastSpell("Implosion");
                            return;
                        }
                        if (WoW.LastSpell == "HandOfGuldan" && WoW.WildImpsCount == 1)
                        {
                            WoW.CastSpell("Implosion");
                            return;
                        }
                    }

                    //Shadowflame (if talent)
                    if (WoW.CanCast("Shadowflame") && Shadowflame && WoW.IsSpellInRange("Doom") && WoW.TargetHasDebuff("Shadowflame") &&
                        WoW.TargetDebuffTimeRemaining("Shadowflame") < TwoSecondCast + 2)
                    {
                        WoW.CastSpell("Shadowflame");
                        return;
                    }

                    //Felstorm
                    if (WoW.CanCast("Felstorm") && WoW.HasPet && WoW.PetHasBuff("DemonicEmpowerment"))
                    {
                        WoW.CastSpell("Felstorm");
                        return;
                    }

                    //Call Dreadstalkers (if NOT talent Summon Darkglare or Implosion)
                    if (WoW.CanCast("CallDreadstalkers") && !SummonDarkglare && (WoW.CurrentSoulShards >= 2 || WoW.PlayerHasBuff("DemonicCalling")) && !Implosion && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("CallDreadstalkers");
                        empowered = false;
                        DreadstalkersTime.Restart();
                        return;
                    }

                    //Hand Of Guldan (if NOT talent Summon Darkglare)
                    if (WoW.CanCast("HandOfGuldan") && !SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 4 && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("HandOfGuldan");
                        empowered = false;
                        threeimps = false;
                        ImpTime.Restart();
                        return;
                    }

                    //Summon Darkglare (if talent)
                    if (WoW.CanCast("SummonDarkglare") && SummonDarkglare && WoW.CurrentSoulShards >= 1 && WoW.TargetHasDebuff("Doom") && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        if (WoW.LastSpell == "HandOfGuldan" || WoW.LastSpell == "CallDreadstalkers")
                        {
                            WoW.CastSpell("SummonDarkglare");
                            Log.Write("1", Color.Red);
                            empowered = false;
                            return;
                        }
                        if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") > 5 && WoW.CurrentSoulShards < 3)
                        {
                            WoW.CastSpell("SummonDarkglare");
                            Log.Write("2", Color.Red);
                            empowered = false;
                            return;
                        }
                        if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") <= gcd && WoW.CurrentSoulShards >= 3)
                        {
                            WoW.CastSpell("SummonDarkglare");
                            Log.Write("3", Color.Red);
                            empowered = false;
                            return;
                        }
                        if (WoW.SpellCooldownTimeRemaining("CallDreadstalkers") <= gcd && WoW.CurrentSoulShards >= 1 && WoW.PlayerHasBuff("DemonicCalling"))
                        {
                            WoW.CastSpell("SummonDarkglare");
                            Log.Write("4", Color.Red);
                            empowered = false;
                            return;
                        }
                    }

                    //Call Dreadstalkers (if talent Summon Darkglare and not Implosion)
                    if (WoW.CanCast("CallDreadstalkers") && SummonDarkglare && (WoW.CurrentSoulShards >= 2 || WoW.PlayerHasBuff("DemonicCalling")) && !Implosion && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        if (WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= TwoSecondCast && WoW.CurrentSoulShards >= 3)
                        {
                            WoW.CastSpell("CallDreadstalkers");
                            empowered = false;
                            DreadstalkersTime.Restart();
                            return;
                        }
                        if (WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= TwoSecondCast && WoW.CurrentSoulShards >= 1 && WoW.PlayerHasBuff("DemonicCalling"))
                        {
                            WoW.CastSpell("CallDreadstalkers");
                            empowered = false;
                            DreadstalkersTime.Restart();
                            return;
                        }
                    }

                    //Hand Of Guldan
                    if (WoW.CanCast("HandOfGuldan") && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 3 && WoW.LastSpell == "CallDreadstalkers" && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("HandOfGuldan");
                        empowered = false;
                        threeimps = true;
                        ImpTime.Restart();
                        return;
                    }

                    //Hand Of Guldan (if talent Summon Darkglare)
                    if (WoW.CanCast("HandOfGuldan") && SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 5 &&
                        WoW.SpellCooldownTimeRemaining("SummonDarkglare") <= OneFiveCast && WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("HandOfGuldan");
                        threeimps = false;
                        empowered = false;
                        ImpTime.Restart();
                        return;
                    }

                    //Hand Of Guldan (if talent Summon Darkglare)
                    if (WoW.CanCast("HandOfGuldan") && SummonDarkglare && WoW.LastSpell != "HandOfGuldan" && WoW.CurrentSoulShards >= 4 && WoW.SpellCooldownTimeRemaining("SummonDarkglare") > 2 &&
                        WoW.IsSpellInRange("Doom") && (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("HandOfGuldan");
                        threeimps = false;
                        empowered = false;
                        ImpTime.Restart();
                        return;
                    }

                    //Demonic Empowerment (if last spell was Hand Of Guldan)
                    if (WoW.CanCast("DemonicEmpowerment") && WoW.LastSpell == "HandOfGuldan" && WoW.LastSpell != "DemonicEmpowerment" && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("DemonicEmpowerment");
                        empowered = true;
                        return;
                    }

                    //Demonic Empowerment
                    if (WoW.CanCast("DemonicEmpowerment") && (!empowered || !WoW.PetHasBuff("DemonicEmpowerment")) && WoW.LastSpell != "DemonicEmpowerment" && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("DemonicEmpowerment");
                        empowered = true;
                        return;
                    }

/*
 *                                      //Doom (if NOT talent Hand of Doom)
 *                                      if(WoW.CanCast("Doom") && (!WoW.TargetHasDebuff("Doom") || WoW.TargetDebuffTimeRemaining("Doom") < 5) && WoW.IsSpellInRange("Doom"))
 *                                      {
 *                                              WoW.CastSpell("Doom");
 *                                              return;
 *                                      }
 *
 *                                      //Soul Harvest
 *                                      if(WoW.CanCast("SoulHarvest") && WoW.IsSpellInRange("Doom"))
 *                                      {
 *                                              WoW.CastSpell("SoulHarvest");
 *                                              return;
 *                                      }
 */
                    //Shadowflame (if talent)
                    if (WoW.CanCast("Shadowflame") && Shadowflame && WoW.IsSpellInRange("Doom") && WoW.PlayerSpellCharges("Shadowflame") == 2)
                    {
                        WoW.CastSpell("Shadowflame");
                        return;
                    }

                    //Thal'kiel's Consumption
                    if (WoW.CanCast("TK") && ((WoW.DreadstalkersCount >= 1 && DreadstalkersRemainingDuration > TwoSecondCast) || Implosion) &&
                        ((WoW.WildImpsCount >= 1 && !threeimps) || WoW.WildImpsCount >= 2) && ImpsRemainingDuration > TwoSecondCast && WoW.IsSpellInRange("Doom") &&
                        (!WoW.IsMoving || WoW.PlayerHasBuff("Norgannon")))
                    {
                        WoW.CastSpell("TK");
                        return;
                    }

                    //Life Tap
                    if (WoW.CanCast("LifeTap") && WoW.Mana <= 30)
                    {
                        WoW.CastSpell("LifeTap");
                        return;
                    }

                    //Demonwrath
                    if (WoW.CanCast("Demonwrath") && !WoW.PlayerIsChanneling)
                    {
                        WoW.CastSpell("Demonwrath");
                        return;
                    }

                    //Life Tap
                    if (WoW.CanCast("LifeTap") && WoW.Mana < 100 && !WoW.PlayerIsChanneling)
                    {
                        WoW.CastSpell("LifeTap");
                    }
                }
            }
        }
Esempio n. 11
0
        // Checks current Mana
        // Checks if currently in game
        // Allows Tank ID Selection
        public override void Pulse()
        {
            if (!WoW.InGame)
            {
                return;
            }

            if (WoW.TankId == 0)
            {
                var f = new frmEnterTankId {
                    TopMost = true
                };
                f.ShowDialog();
            }

            // Checks if player is dead, mounted or casting and does nothing if true
            if (WoW.PlayerHealthPercent == 0 || WoW.IsMounted)
            {
                return;
            }
            if (WoW.PlayerIsCasting)
            {
                return;
            }

            // Sets a variable for the player with the lowest HP
            var lowest = WoW.PartyLowestHealthPercent;

            // Sets a variable for our current target
            var currentTargetID = WoW.PartyMemberIdWithLowestHealthPercent;

            // Sets variable for the average party HP
            var averageHp = WoW.PartyAverageHealthPercent;

            // Sets our target to be the player with the lowest health percentage
            WoW.TargetMember(currentTargetID);

            // Checks if player has a target or if their target is at full health and if so it does nothing.
            if (currentTargetID == 0)
            {
                return;
            }
            if (lowest == 100)
            {
                return;
            }

            // DPS Rotation
            // Checks is cleave button is turned on.
            if (combatRoutine.Type == RotationType.Cleave)

            {
                // Cast Rising Sun Kick
                if (WoW.CanCast("RisingSunKick") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    WoW.CastSpell("RisingSunKick");
                    return;
                }
                // Cast Blackout kick if you have 3 buff stacks
                if (WoW.CanCast("Blackout Kick") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat &&
                    WoW.PlayerBuffStacks("Blackout Buff") == 3)
                {
                    WoW.CastSpell("Blackout Kick");
                    return;
                }
                // Cast Tiger palm if you dont have 3 buff stacks
                if (WoW.CanCast("Tiger Palm") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat &&
                    WoW.PlayerBuffStacks("Blackout Buff") < 3)
                {
                    WoW.CastSpell("Tiger Palm");
                    return;
                }
            }

            //CoolDowns
            // If lowest HP party member has less than 85% HP then cast Thunder Focus Tea
            if (lowest <= 85 && !WoW.IsSpellOnCooldown("Thunder Focus Tea"))
            {
                WoW.CastSpell("Thunder Focus Tea");
            }
            // Checks if player has Thunder Focus Tea buff
            if (WoW.PlayerHasBuff("Thunder Focus Tea"))
            {
                // If Player has Thunder Focus tea Buff and Average party HP is 65% then cast Essence Font
                if (averageHp <= 65 &&
                    WoW.CanCast("Essence Font") &&
                    !WoW.IsSpellOnCooldown("Essence Font") &&
                    !WoW.PlayerHasBuff("Essence Font"))
                {
                    WoW.CastSpell("Essence Font");
                }

                // If Player has Thunder Focus tea Buff and Average party HP is 65% then cast Vivify
                if (averageHp <= 90 &&
                    WoW.CanCast("Vivify") &&
                    !WoW.IsSpellOnCooldown("Vivify"))
                {
                    WoW.CastSpell("Vivify");
                }
            }

            //Cast Mana Tea if mana is less than or equal to 70%
            if (WoW.IsInCombat && WoW.Mana <= 70 &&
                !WoW.IsSpellOnCooldown("Mana Tea"))
            {
                WoW.CastSpell("Mana Tea");
                return;
            }
            // If the average HP of party is below 65% cast Revival
            if (WoW.CanCast("Revival") &&
                averageHp <= 65 &&
                !WoW.IsSpellOnCooldown("Revival"))
            {
                WoW.CastSpell("Revival");
                return;
            }

            // If Tank HP is below 15% cast Life Cocoon on Tank
            if (WoW.TankHealth <= 25 &&
                WoW.TankId == currentTargetID &&
                WoW.CanCast("Life Cocoon") &&
                !WoW.IsSpellOnCooldown("Life Cocoon"))
            {
                WoW.CastSpell("Life Cocoon");
                return;
            }

            // If party hits 15% HP Cast life Cocoon
            if (WoW.CanCast("Life Cocoon") &&
                lowest <= 15 &&
                !WoW.IsSpellOnCooldown("Life Cocoon"))
            {
                WoW.CastSpell("Life Cocoon");
                return;
            }

            // Average Healing Priority
            // If the average Hp of the Party is 75% then cast Chi Ji
            if (averageHp < 80)
            {
                if (WoW.CanCast("InvokeChiJitheRedCrane") &&
                    !WoW.IsSpellOnCooldown("InvokeChiJitheRedCrane"))
                {
                    WoW.CastSpell("InvokeChiJitheRedCrane");
                    return;
                }

                // If the average Hp of the Party is 75% then cast Essence Font
                if (WoW.CanCast("Essence Font") &&
                    !WoW.IsSpellOnCooldown("Essence Font") &&
                    !WoW.PlayerHasBuff("Essence Font"))
                {
                    WoW.CastSpell("Essence Font");
                    return;
                }

                // If the average Hp of the Party is 75% then cast Vivify
                if (WoW.CanCast("Vivify"))
                {
                    WoW.CastSpell("Vivify");
                    return;
                }
            }

            // If Renewing Mist can be cast on player without it it will be casted.
            if (WoW.CanCast("Renewing Mist") && WoW.IsInCombat &&
                !WoW.TargetHasBuff("Renewing Mist") &&
                !WoW.PlayerHasBuff("Renewing Mist") &&
                !WoW.IsSpellOnCooldown("Renewing Mist"))
            {
                WoW.CastSpell("Renewing Mist");
                return;
            }

            // If above level 100 then cast Sheilun's Gift when not moving
            if (WoW.Level > 100)
            {
                if (WoW.CanCast("Sheiluns Gift") &&
                    lowest <= 75 && !WoW.IsMoving &&
                    WoW.PlayerSpellCharges("Sheiluns Gift") >= 5)
                {
                    WoW.CastSpell("Sheiluns Gift");
                    return;
                }
            }

            // Cast Enveloping Mist and does not cast it if it was the last spell cast.
            if (WoW.CanCast("Enveloping Mist") &&
                lowest <= 70 &&
                !WoW.IsMoving &&
                !WoW.TargetHasBuff("Enveloping Mist") &&
                WoW.LastSpell != ("Enveloping Mist"))
            {
                WoW.CastSpell("Enveloping Mist");
                return;
            }

            // Casts Vivfy on target with less than or 65% HP
            if (WoW.CanCast("Vivify") &&
                lowest <= 65)
            {
                WoW.CastSpell("Vivify");
                return;
            }

            // Casts Effuse on target with less than or 90% HP
            if (WoW.CanCast("Effuse") && lowest <= 90 &&
                !WoW.PlayerIsChanneling)
            {
                WoW.CastSpell("Effuse");
                return;
            }
            // Casts Chi Wave on target with less than or 65% HP
            if (WoW.CanCast("Chi Wave") && lowest <= 95 &&
                WoW.IsInCombat)
            {
                WoW.CastSpell("Chi Wave");
                return;
            }
        }