Ejemplo n.º 1
0
        public override void Pulse()
        {
            var lowest          = WoW.PartyLowestHealthPercent;
            int currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent;

            if (WoW.PartyMemberIsNeedingADispel != 0)
            {
                currentTargetId = WoW.PartyMemberIsNeedingADispel;
            }

            var test      = WoW.TargetIsPlayer;
            var averageHp = WoW.PartyAverageHealthPercent;

            WoW.TargetMember(currentTargetId);


            /*-----------------------------Cooldowns-------------------------------------*/
            WoW.CastSpell("HealingTideTotem", WoW.CountAlliesUnderHealthPercentage(40) >= 5 && !WoW.PlayerHasBuff("Ascendence"));
            WoW.CastSpell("Ascendence", WoW.CountAlliesUnderHealthPercentage(40) >= 5 && WoW.IsSpellOnCooldown("HealingTideTotem"));
            WoW.CastSpell("AncestrialGuidance", WoW.CountAlliesUnderHealthPercentage(75) >= 3 && WoW.IsSpellOnCooldown("HealingTideTotem") && !WoW.PlayerHasBuff("Ascendence"));
            /*-----------------------------Cooldowns-------------------------------------*/

            if (WoW.PartyMemberIsNeedingADispel != 0 && WoW.CanCast("Purify Spirit"))
            {
                WoW.CastSpell("Purify Spirit");
                return;
            }

            WoW.CastSpell("Riptide", lowest < 99 && !WoW.TargetHasBuff("Riptide"));
            WoW.CastSpell("HealingStreamTotem", lowest < 99);
            WoW.CastSpell("HealingSurge", lowest < 35);
            WoW.CastSpell("ChainHeal", WoW.CountAlliesUnderHealthPercentage(85) >= 3);
            WoW.CastSpell("HealingWave", lowest < 90);
        }
Ejemplo n.º 2
0
        public override void OutOfCombatPulse()


        {
            var lowest          = WoW.PartyLowestHealthPercent;
            int currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent;
            var test            = WoW.TargetIsPlayer;
            var averageHp       = WoW.PartyAverageHealthPercent;

            WoW.TargetMember(currentTargetId);

            WoW.CastSpell("GhostWolf", WoW.IsMoving && !WoW.PlayerHasBuff("GhostWolf"));
            WoW.CastSpell("Riptide", lowest < 98 && !WoW.TargetHasBuff("Riptide"));
        }
Ejemplo n.º 3
0
        public override void Pulse()
        {
            if (WoW.IsMounted || WoW.PlayerIsCasting || WoW.PlayerIsChanneling)
            {
                return;
            }
            //set variables
            var averageHp = WoW.PartyAverageHealthPercent;

            var target = WoW.HasTarget;
            var friend = WoW.TargetIsFriend;
            var hp     = WoW.TargetHealthPercent;

            if (target && hp >= 100)
            {
                return;
            }

            // Divine Hymn Logic
            if (averageHp <= DivineHymn && WoW.CanCast("Divine Hymn") && !WoW.IsSpellOnCooldown("Divine Hymn"))
            {
                WoW.CastSpell("Divine Hymn");
                return;
            }

            // Guardian Spirit Logic
            if (hp <= GuardianSpirit && target && friend && WoW.CanCast("Guardian Spirit") && !WoW.IsSpellOnCooldown("Guardian Spirit"))
            {
                WoW.CastSpell("Guardian Spirit");
                return;
            }

            //Prayer of Healing Logic
            if (averageHp <= PrayerofHealing && WoW.CanCast("Prayer of Healing") && !WoW.IsSpellOnCooldown("Prayer of Healing"))
            {
                WoW.CastSpell("Prayer of Healing");
                return;
            }

            //Purify Logic
            if (target && friend && WoW.PartyMemberIsNeedingADispel != 0 && WoW.CanCast("Purify"))
            {
                WoW.CastSpell("Purify");
                return;
            }

            // Prayer of Mending Logic
            if (hp <= PrayerofMending && target && friend && WoW.CanCast("Prayer of Mending") && !WoW.IsSpellOnCooldown("Prayer of Mending") && !WoW.TargetHasBuff("Prayer of Mending"))
            {
                WoW.CastSpell("Prayer of Mending");
                return;
            }

            // Renew Logic
            if (hp >= Renew && target && friend && WoW.CanCast("Renew") && !WoW.TargetHasBuff("Renew"))
            {
                WoW.CastSpell("Renew");
                return;
            }

            // Holy Word: Serenity Logic
            if (hp <= HolyWordSerenity && WoW.CanCast("Holy Word Serenity") && !WoW.IsSpellOnCooldown("Holy Word Serenity"))
            {
                WoW.CastSpell("Holy Word Serenity");
                return;
            }

            // Flash Heal Logic
            if (hp <= FlashHeal && target && friend && WoW.CanCast("Flash Heal") && !WoW.IsMoving)
            {
                WoW.CastSpell("Flash Heal");
                return;
            }

            // Heal Logic
            if (hp <= Heal && target && friend && WoW.CanCast("Heal") && !WoW.IsMoving)
            {
                WoW.CastSpell("Heal");
                return;
            }

            //Light of Tuure Logic
            if (hp <= LightofTuure && target && friend && WoW.CanCast("Light of Tuure") && WoW.Level == 110 && !WoW.IsSpellOnCooldown("Light of Tuure") && !WoW.TargetHasBuff("Light of Tuure"))
            {
                WoW.CastSpell("Light of Tuure");
                return;
            }

            // Arcane Torrent Logic
            if (WoW.CanCast("Arcane Torrent") && ConfigFile.ReadValue <bool>("Priest-Holy-Sora", "ArcaneTorrent") && WoW.Mana <= 95 && !WoW.IsSpellOnCooldown("Arcane Torrent") && !WoW.TargetHasBuff("Arcane Torrent"))
            {
                WoW.CastSpell("Arcane Torrent");
                return;
            }
        }
        public override void Pulse()        // Updated for Legion (tested and working for single target)
        {
            if (WoW.IsInCombat && Control.IsKeyLocked(Keys.Scroll) && !WoW.TargetIsPlayer && !WoW.IsMounted)
            {
                SelectRotation(4, 2, 1);
                SelectRotation(4, 3, 1);
            }

            //Healthstone - Potion
            if ((WoW.CanCast("Healthstone") || WoW.CanCast("Potion")) &&
                (WoW.ItemCount("Healthstone") >= 1 || WoW.ItemCount("Potion") >= 1) &&
                (!WoW.ItemOnCooldown("Healthstone") || !WoW.ItemOnCooldown("Potion")) &&
                !WoW.PlayerHasBuff("Feign Death") &&
                WoW.HealthPercent <= 15 &&
                !WoW.IsMounted &&
                WoW.IsInCombat &&
                WoW.HealthPercent > 1)
            {
                Thread.Sleep(500);
                WoW.CastSpell("Healthstone");
                WoW.CastSpell("Potion");
                return;
            }

            //Exhilaration
            if (WoW.CanCast("Exhilaration") &&
                WoW.HealthPercent <= 25 &&
                !WoW.IsMounted &&
                !WoW.PlayerHasBuff("Feign Death") &&
                WoW.HealthPercent > 1)
            {
                WoW.CastSpell("Exhilaration");
                return;
            }

            //Counter Shot
            if (WoW.CanCast("Counter Shot") &&
                (WoW.TargetIsCastingAndSpellIsInterruptible) &&
                !WoW.IsSpellOnCooldown("Counter Shot") &&
                WoW.TargetIsCasting &&
                WoW.IsSpellInRange("Counter Shot") &&
                WoW.TargetPercentCast > 75)
            {
                WoW.CastSpell("Counter Shot");
                return;
            }

            //Mend Pet
            if (WoW.HasPet &&
                WoW.CanCast("Mend Pet") &&
                WoW.HealthPercent > 1 &&
                WoW.PetHealthPercent <= 40 &&
                !WoW.PlayerHasBuff("Feign Death"))
            {
                WoW.CastSpell("Mend Pet");
                return;
            }

            //Revive Pet Call pet
            if (!WoW.HasPet &&
                !WoW.IsMounted &&
                WoW.HealthPercent > 1 &&
                !WoW.PlayerHasBuff("Feign Death"))
            {
                WoW.CastSpell("Call Pet");
                Thread.Sleep(500);
                WoW.CastSpell("Heart of the Phoenix");
                WoW.CastSpell("Revive Pet");
                return;
            }

            //Voley
            if (WoW.CanCast("Voley") &&
                !WoW.PlayerHasBuff("Feign Death") &&
                !WoW.PlayerHasBuff("Voley") &&
                WoW.HealthPercent != 0 &&
                WoW.Talent(6) == 3)
            {
                WoW.CastSpell("Voley");
                return;
            }

            //Intimidation //Binding Shot
            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_Z) < 0 &&
                ((WoW.CanCast("Intimidation") && WoW.Talent(5) == 3) || (WoW.CanCast("Binding Shot") && WoW.Talent(5) == 1)))
            {
                WoW.CastSpell("Binding Shot");
                WoW.CastSpell("Intimidation");
                return;
            }

            //Freezing Trap
            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_X) < 0 &&
                WoW.CanCast("Freezing Trap") &&
                !WoW.IsMounted)
            {
                WoW.CastSpell("Freezing Trap");
                return;
            }

            //Tar Trap
            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_C) < 0 &&
                WoW.CanCast("Tar Trap") &&
                !WoW.IsMounted)
            {
                WoW.CastSpell("Tar Trap");
                return;
            }

            if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Feign Death") && WoW.HealthPercent > 1 && !WoW.TargetHasBuff("Nether Gale"))
            {
                //Cooldowns
                if (UseCooldowns)
                {
                }

                //Stampede
                if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LCONTROL) < 0 &&
                    WoW.CanCast("Stampede") &&
                    WoW.Talent(7) == 1)
                {
                    WoW.CastSpell("Stampede");
                    return;
                }

                //SINGLE TARGET
                //A Murder of Crows
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    WoW.CanCast("A Murder of Crows") &&
                    (WoW.SpellCooldownTimeRemaining("Bestial Wrath") < 300 || WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 3000)
                    //&& WoW.PlayerHasBuff("Bestial Wrath")
                    && WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.Talent(6) == 1 &&
                    WoW.Focus >= 30)
                {
                    WoW.CastSpell("A Murder of Crows");
                    return;
                }

                //Bestial Wrath
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    WoW.CanCast("Bestial Wrath") &&
                    !WoW.PlayerHasBuff("Aspect of the Turtle") &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    (WoW.Focus >= 110 || (WoW.Focus >= 90 && WoW.CanCast("Aspect of the Wild"))))
                {
                    WoW.CastSpell("Bestial Wrath");
                    WoW.CastSpell("Aspect of the Wild");
                    WoW.CastSpell("Kill Command");
                }

                //Aspect of the Wild
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    WoW.CanCast("Aspect of the Wild") &&
                    !WoW.PlayerHasBuff("Aspect of the Turtle")
                    //&& WoW.PlayerHasBuff("Bestial Wrath")
                    //&& WoW.PlayerBuffTimeRemaining("Bestial Wrath") >= 700
                    )
                {
                    WoW.CastSpell("Aspect of the Wild");
                }

                //Dire Frenzy
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    (WoW.CanCast("Dire Frenzy") || WoW.SpellCooldownTimeRemaining("Dire Frenzy") <= 100) &&
                    WoW.Talent(2) == 2 &&
                    ((WoW.PetHasBuff("Dire Frenzy") && WoW.PetBuffTimeRemaining("Dire Frenzy") <= 200) || !WoW.PetHasBuff("Dire Frenzy") || WoW.PlayerSpellCharges("Dire Frenzy") >= 2))
                {
                    WoW.CastSpell("Titan's Thunder");
                    WoW.CastSpell("Dire Frenzy");
                    return;
                }

                // Dire beast
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    WoW.CanCast("Dire Beast") &&
                    (WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 300 || WoW.PlayerSpellCharges("Dire Beast") >= 2) &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.Talent(2) != 2)
                {
                    WoW.CastSpell("Dire Beast");
                    WoW.CastSpell("Titan's Thunder");
                    return;
                }

                //Kill Command
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    (WoW.SpellCooldownTimeRemaining("Kill Command") <= 100 || WoW.CanCast("Kill Command")) &&
                    WoW.Focus >= 30)
                {
                    WoW.CastSpell("Kill Command");
                    return;
                }

                //Chimaera Shot
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    WoW.CanCast("Chimaera Shot") &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.Talent(2) == 3 &&
                    WoW.Focus < 80)
                {
                    WoW.CastSpell("Chimaera Shot");
                    return;
                }

                //Cobra Shot
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    ((WoW.Focus >= 90) || (WoW.PlayerHasBuff("Bestial Wrath") && WoW.Focus >= 32)) &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.CanCast("Cobra Shot") &&
                    !WoW.CanCast("Bestial Wrath"))
                {
                    WoW.CastSpell("Cobra Shot");
                    return;
                }

                //AOE
                //Bestial Wrath
                if (combatRoutine.Type == RotationType.AOE &&
                    WoW.CanCast("Bestial Wrath") &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    !WoW.PlayerHasBuff("Aspect of the Turtle"))
                {
                    WoW.CastSpell("Bestial Wrath");
                    return;
                }

                // Dire beast
                if (combatRoutine.Type == RotationType.AOE &&
                    WoW.CanCast("Dire Beast") &&
                    WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 300 &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.Talent(2) != 2)
                {
                    WoW.CastSpell("Dire Beast");
                    WoW.CastSpell("Titan's Thunder");
                    return;
                }

                //Dire Frenzy
                if (combatRoutine.Type == RotationType.AOE &&
                    WoW.CanCast("Dire Frenzy") &&
                    WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 600 &&
                    WoW.Talent(2) == 2)
                {
                    WoW.CastSpell("Titan's Thunder");
                    WoW.CastSpell("Dire Frenzy");
                    return;
                }

                //Barrage
                if (combatRoutine.Type == RotationType.AOE &&
                    WoW.CanCast("Barrage") &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.Talent(6) == 2 &&
                    (WoW.Focus >= 60))
                {
                    WoW.CastSpell("Barrage");
                    return;
                }

                //Multishot
                if (combatRoutine.Type == RotationType.AOE &&
                    WoW.CanCast("Multi-Shot") &&
                    WoW.IsSpellInRange("Multi-Shot") &&
                    WoW.Focus >= 40)
                {
                    WoW.CastSpell("Multi-Shot");
                    return;
                }

                //Chimaera Shot
                if (combatRoutine.Type == RotationType.AOE &&
                    WoW.CanCast("Chimaera Shot") &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.Talent(2) == 3 &&
                    WoW.Focus < 80)
                {
                    WoW.CastSpell("Chimaera Shot");
                    return;
                }

                //CLEAVE
                //A Murder of Crows
                if (combatRoutine.Type == RotationType.SingleTargetCleave &&
                    WoW.CanCast("A Murder of Crows") &&
                    (WoW.SpellCooldownTimeRemaining("Bestial Wrath") < 300 || WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 3000)
                    //&& WoW.PlayerHasBuff("Bestial Wrath")
                    && WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.Talent(6) == 1 &&
                    WoW.Focus >= 30)
                {
                    WoW.CastSpell("A Murder of Crows");
                    return;
                }

                //Bestial Wrath
                if (combatRoutine.Type == RotationType.SingleTargetCleave &&
                    WoW.CanCast("Bestial Wrath") &&
                    !WoW.PlayerHasBuff("Aspect of the Turtle") &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    (WoW.Focus >= 110 || (WoW.Focus >= 90 && WoW.CanCast("Aspect of the Wild"))))
                {
                    WoW.CastSpell("Bestial Wrath");
                    WoW.CastSpell("Aspect of the Wild");
                    WoW.CastSpell("Kill Command");
                }

                //Aspect of the Wild
                if (combatRoutine.Type == RotationType.SingleTargetCleave &&
                    WoW.CanCast("Aspect of the Wild") &&
                    !WoW.PlayerHasBuff("Aspect of the Turtle")
                    //&& WoW.PlayerHasBuff("Bestial Wrath")
                    //&& WoW.PlayerBuffTimeRemaining("Bestial Wrath") >= 700
                    )
                {
                    WoW.CastSpell("Aspect of the Wild");
                }

                //Dire Frenzy
                if (combatRoutine.Type == RotationType.SingleTargetCleave &&
                    (WoW.CanCast("Dire Frenzy") || WoW.SpellCooldownTimeRemaining("Dire Frenzy") <= 100) &&
                    WoW.Talent(2) == 2 &&
                    ((WoW.PetHasBuff("Dire Frenzy") && WoW.PetBuffTimeRemaining("Dire Frenzy") <= 200) || !WoW.PetHasBuff("Dire Frenzy") || WoW.PlayerSpellCharges("Dire Frenzy") >= 2))
                {
                    WoW.CastSpell("Titan's Thunder");
                    WoW.CastSpell("Dire Frenzy");
                    return;
                }

                // Dire beast
                if (combatRoutine.Type == RotationType.SingleTargetCleave &&
                    WoW.CanCast("Dire Beast") &&
                    (WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 300 || WoW.PlayerSpellCharges("Dire Beast") >= 2) &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.Talent(2) != 2)
                {
                    WoW.CastSpell("Dire Beast");
                    WoW.CastSpell("Titan's Thunder");
                    return;
                }

                //Barrage
                if (combatRoutine.Type == RotationType.SingleTargetCleave &&
                    WoW.CanCast("Barrage") &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.Talent(6) == 2 &&
                    (WoW.Focus >= 60))
                {
                    WoW.CastSpell("Barrage");
                    return;
                }

                //Kill Command
                if (combatRoutine.Type == RotationType.SingleTargetCleave &&
                    (WoW.SpellCooldownTimeRemaining("Kill Command") <= 100 || WoW.CanCast("Kill Command")) &&
                    WoW.Focus >= 30)
                {
                    WoW.CastSpell("Kill Command");
                    return;
                }

                //Multishot - Beast Cleave uptime
                if (combatRoutine.Type == RotationType.SingleTargetCleave &&
                    WoW.CanCast("Multi-Shot") &&
                    (!WoW.PetHasBuff("BeastCleave") || WoW.PetBuffTimeRemaining("BeastCleave") < 0.5) &&
                    WoW.IsSpellInRange("Multi-Shot") &&
                    !WoW.CanCast("Bestial Wrath") &&
                    WoW.Focus >= 40)
                {
                    WoW.CastSpell("Multi-Shot");
                    return;
                }

                //Chimaera Shot
                if (combatRoutine.Type == RotationType.SingleTargetCleave &&
                    WoW.CanCast("Chimaera Shot") &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.Talent(2) == 3 &&
                    WoW.Focus < 80)
                {
                    WoW.CastSpell("Chimaera Shot");
                    return;
                }

                //Cobra Shot
                if (combatRoutine.Type == RotationType.SingleTargetCleave &&
                    ((WoW.Focus >= 90) || (WoW.PlayerHasBuff("Bestial Wrath") && (WoW.Focus >= 32))) &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    WoW.CanCast("Cobra Shot") &&
                    !WoW.CanCast("Bestial Wrath"))
                {
                    WoW.CastSpell("Cobra Shot");
                    return;
                }

                //Mend Pet
                if (WoW.HasPet &&
                    WoW.CanCast("Mend Pet") &&
                    WoW.HealthPercent != 0 &&
                    WoW.PetHealthPercent <= 75 &&
                    !WoW.PlayerHasBuff("Feign Death"))
                {
                    WoW.CastSpell("Mend Pet");
                    return;
                }
            }
        }
Ejemplo n.º 5
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget)
            {
                // Stopwatch START
                if (WoW.IsInCombat && !pullwatch.IsRunning)
                {
                    pullwatch.Start();
                    Log.Write("Entering Combat, Starting opener timer.", Color.Red);
                }
                // Stopwatch stop
                if (!WoW.IsInCombat && pullwatch.ElapsedMilliseconds >= 1000)
                {
                    pullwatch.Reset();
                    ripunbuffed.Reset();
                    ripbuffed.Reset();
                    superrip.Reset();
                    Log.Write("Leaving Combat, Resetting opener timer.", Color.Red);
                }

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

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

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

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

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

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

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

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

                    //}

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

            //  AOE ROTATION
            if (combatRoutine.Type == RotationType.AOE)
            {
                // In combat, target is enemy, target is not player, i dont have prowl and i have buff catform
                if (WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.TargetIsPlayer && !WoW.PlayerHasBuff("Prowl") && WoW.PlayerHasBuff("Cat Form"))
                {
                    if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Rake") && !WoW.TargetHasDebuff("Rake") && WoW.Energy >= 35)
                    {
                        WoW.CastSpell("Rake");
                        return;
                    }
                    if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Thrash") && !WoW.TargetHasDebuff("Thrash") && WoW.Energy >= 50)
                    {
                        WoW.CastSpell("Thrash");
                        return;
                    }
                    if (WoW.IsSpellInRange("Rake") && WoW.CanCast("Swipe") && WoW.TargetHasDebuff("Thrash") && WoW.CurrentComboPoints < 5 && WoW.Energy >= 45)
                    {
                        WoW.CastSpell("Swipe");
                        return;
                    }
                    if (SavageRoar && WoW.CanCast("Savage Roar") && WoW.CurrentComboPoints == 5 && !WoW.PlayerHasBuff("Savage Roar") && WoW.Energy >= 40)
                    {
                        WoW.CastSpell("SavageRoar");
                        return;
                    }
                    if (WoW.IsSpellInRange("Rip") && WoW.CanCast("Rip") && WoW.CurrentComboPoints == 5 && !WoW.TargetHasDebuff("Rip") && WoW.Energy >= 30)
                    {
                        WoW.CastSpell("Rip");
                        return;
                    }
                }
            }
        }
Ejemplo n.º 6
0
        public override void Pulse()
        {
            if (WoW.IsMounted)
            {
                return;
            }

            int OOCPlea = 1;

            while (WoW.PlayerBuffStacks("Sins of the Many") < WoW.GroupSize && !WoW.IsInCombat && OOCAtonement)
            {
                WoW.TargetMember(OOCPlea);
                if (WoW.TargetHasBuff("Atonement"))
                {
                    OOCPlea++;
                    continue;
                }
                if (!WoW.CanCast("Plea"))
                {
                    continue;
                }
                if (OOCPlea > WoW.GroupSize)
                {
                    OOCPlea = 1;
                }
                WoW.TargetMember(OOCPlea);
                WoW.CastSpell("Plea");
                OOCPlea++;
            }

            // While rapture is active, spread Power Word: Shield to players
            int RaptureSpread = 1;

            while (WoW.PlayerHasBuff("Rapture") && WoW.PartyLowestHealthPercent > 60)
            {
                WoW.TargetMember(RaptureSpread);
                if (WoW.TargetHasBuff("Power Word: Shield"))
                {
                    RaptureSpread++;
                    continue;
                }
                if (!WoW.CanCast("Power Word: Shield"))
                {
                    continue;
                }
                if (RaptureSpread > WoW.GroupSize)
                {
                    RaptureSpread = 1;
                }
                WoW.TargetMember(RaptureSpread);
                WoW.CastSpell("Power Word: Shield");
                RaptureSpread++;
            }

            // Ask player for TankId when first loading Rotation
            if (WoW.TankId == 0)
            {
                var f = new frmEnterTankId {
                    TopMost = true
                };
                f.ShowDialog();
            }

            // Use Angelic Feather for speed if enabled in UI
            if (WoW.CanCast("Angelic Feather") && WoW.IsMoving && !WoW.PlayerHasBuff("Angelic Feather") && UseFeatherForSpeed)
            {
                WoW.CastSpell("Angelic Feather");
                return;
            }

            // Use Arcane Torrent if selected in UI
            if (WoW.CanCast("Arcane Torrent") && WoW.Mana < 90 && ArcaneTorrentUI && WoW.IsInCombat && !WoW.PlayerIsChanneling)
            {
                WoW.CastSpell("Arcane Torrent");
                return;
            }

            var lowest          = WoW.PartyLowestHealthPercent;
            int currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent;

            Log.Write("Party Lowest HP: " + lowest);

            if (lowest >= DPSWhenPartyAbove && WoW.PartyMemberIsNeedingADispel == 0 && WoW.IsInCombat)
            {
                // If active Atonements are below UI threshold then spread Atonement with Plea until threshold is met
                int PleaStack = 1;
                while (WoW.PlayerBuffStacks("Sins of the Many") < ActiveAtonements && ActiveAtonements != 0)
                {
                    WoW.TargetMember(PleaStack);
                    if (WoW.TargetHasBuff("Atonement"))
                    {
                        PleaStack++;
                        continue;
                    }
                    if (!WoW.CanCast("Plea"))
                    {
                        continue;
                    }
                    if (PleaStack > WoW.GroupSize)
                    {
                        PleaStack = 1;
                    }
                    WoW.TargetMember(PleaStack);
                    WoW.CastSpell("Plea");
                    PleaStack++;
                }

                // Mitigate damage with Power Word: Shield
                if (WoW.CanCast("Power Word: Shield") && lowest < 90)
                {
                    WoW.CastSpell("Power Word: Shield");
                    return;
                }

                //DPS Rotation
                WoW.TargetNearestEnemy();
                if (WoW.HasTarget && WoW.TargetIsEnemy)
                {
                    if (lowest < 99 && lowest > 95 && WoW.PlayerBuffStacks("Sins of the Many") < ActiveAtonements && ActiveAtonements != 0)
                    {
                        WoW.CastSpell("Plea");
                        return;
                    }
                    //Maintain Shadow Word: Pain(or Purge the Wicked, if you have taken this talent) on the target.
                    if (WoW.TargetDebuffTimeRemaining("Shadow Word: Pain") < 400 && WoW.CanCast("Shadow Word: Pain") && WoW.Talent(6) != 1)
                    {
                        WoW.CastSpell("Shadow Word: Pain");
                        return;
                    }
                    if (WoW.TargetDebuffTimeRemaining("Purge the Wicked") < 400 && WoW.CanCast("Purge the Wicked") && WoW.Talent(6) == 1)
                    {
                        WoW.CastSpell("Purge the Wicked");
                        return;
                    }

                    //Use Schism on cooldown(if you have taken this talent).
                    if (WoW.CanCast("Schism") && WoW.Talent(1) == 3)
                    {
                        WoW.CastSpell("Schism");
                        return;
                    }

                    //Use Penance on cooldown.
                    if (WoW.CanCast("Penance"))
                    {
                        WoW.CastSpell("Penance");
                        return;
                    }

                    //Use Power Word: Solace on cooldown(if you have taken this talent).
                    if (WoW.CanCast("Power Word: Solace") && WoW.Talent(4) == 1)
                    {
                        WoW.CastSpell("Power Word: Solace");
                        return;
                    }

                    if (WoW.CanCast("Shadowfiend") && WoW.Talent(4) != 3)
                    {
                        WoW.CastSpell("Shadowfiend");
                        return;
                    }

                    if (WoW.CanCast("Mindbender") && WoW.Talent(4) == 3)
                    {
                        WoW.CastSpell("Mindbender");
                        return;
                    }

                    //Use Smite as a filler.
                    if (WoW.CanCast("Smite"))
                    {
                        WoW.CastSpell("Smite");
                        return;
                    }
                }
                return;
            }


            if (WoW.PartyMemberIsNeedingADispel != 0)
            {
                currentTargetId = WoW.PartyMemberIsNeedingADispel;
            }

            var averageHp = WoW.PartyAverageHealthPercent;

            if (averageHp < 60 && WoW.CanCast("Power Infusion") && WoW.Talent(7) == 1)
            {
                WoW.CastSpell("Power Infusion"); // Off GCD no return needed
            }

            // Use Shadowfiend to boost healing output via Atonement
            if (averageHp < 90 && WoW.CanCast("Shadowfiend") && WoW.Talent(4) != 3 && WoW.IsInCombat)
            {
                WoW.TargetNearestEnemy();
                WoW.CastSpell("Shadowfiend");
                return;
            }
            // Use Mindbender for mana regardless of Party HP
            if (WoW.CanCast("Mindbender") && WoW.Talent(4) == 3 && WoW.IsInCombat && WoW.Mana < 90)
            {
                WoW.TargetNearestEnemy();
                WoW.CastSpell("Mindbender");
                return;
            }

            WoW.TargetMember(currentTargetId); // Target the lowest health party member or the member needing a dispell

            if (WoW.PartyMemberIsNeedingADispel != 0 && WoW.CanCast("Purify"))
            {
                WoW.CastSpell("Purify");
                return;
            }

            // If we are targeting the tank and his HP < 20% Pain Suppression him
            if (lowest <= PainSuppressionHealth && WoW.CanCast("Pain Suppression") && WoW.TankId == currentTargetId)
            {
                WoW.CastSpell("Pain Suppression");
                return;
            }

            // Uses Power Word: Radiance when UI values are met
            if (WoW.PlayerSpellCharges("PWRadiance") == 2 && WoW.CountAlliesUnderHealthPercentage(PWRHealth) >= PWRAlliesUnderHP)
            {
                WoW.CastSpell("PWRadiance");
                return;
            }

            // Use Shadow Mend when DPSWhenPartyAbove is less than UI value
            if (lowest <= DPSWhenPartyAbove && WoW.CanCast("Shadow Mend"))
            {
                WoW.CastSpell("Shadow Mend");
                return;
            }


            // Auto Light's Wrath For Dungeons
            if (WoW.CountAlliesUnderHealthPercentage(60) <= 3 && WoW.GroupSize <= 5 && WoW.PlayerBuffStacks("Sins of the Many") >= 3 && WoW.CanCast("Light's Wrath"))
            {
                WoW.TargetNearestEnemy();
                WoW.CastSpell("Light's Wrath");
                return;
            }
            // Auto Light's Wrath For Raids
            if (WoW.CountAlliesUnderHealthPercentage(60) >= 8 && WoW.GroupSize >= 5 && WoW.PlayerBuffStacks("Sins of the Many") >= 8 && WoW.CanCast("Light's Wrath"))
            {
                WoW.TargetNearestEnemy();
                WoW.CastSpell("Light's Wrath");
                return;
            }

            // When player uses Fade, PWRx2+Evangelism to ramp up atonement
            if (WoW.PlayerHasBuff("Fade") && !WoW.IsSpellOnCooldown("Evangelism") && WoW.Talent(7) != 3 && WoW.PlayerSpellCharges("PWRadiance") >= 1)
            {
                WoW.TargetMember(lowest);
                WoW.CastSpell("PWRadiance");
                WoW.TargetMember(2);
                WoW.CastSpell("PWRadiance");
                WoW.CastSpell("Evangelism");
                WoW.TargetNearestEnemy();
                return;
            }

            // When player uses Fade, PWRx2+Evangelism to ramp up atonement
            if (WoW.PlayerHasBuff("Fade") && WoW.Talent(7) != 3 && WoW.PlayerSpellCharges("PWRadiance") >= 1)
            {
                WoW.TargetMember(lowest);
                WoW.CastSpell("PWRadiance");
                WoW.TargetMember(2);
                WoW.CastSpell("PWRadiance");
                WoW.CastSpell("Evangelism");
                WoW.TargetNearestEnemy();
                return;
            }

            // Refresh PW:S on self (For Questing, doesn't Work in Group)
            if (WoW.PlayerBuffTimeRemaining("Power Word: Shield") < 400 && WoW.CanCast("Power Word: Shield") && WoW.GroupSize == 1)
            {
                WoW.CastSpell("Power Word: Shield");
                return;
            }
        }
        public override void Pulse()
        {
            if (WoW.HealthPercent == 0 || WoW.IsMounted)
            {
                return;
            }
            if (WoW.PlayerIsCasting)
            {
                return;
            }

            var TargetHp = WoW.PartyLowestHealthPercent;

            int TargetId = WoW.PartyMemberIdWithLowestHealthPercent;

            /*
             * if (WoW.PartyMemberIsNeedingADispel != 0 &&
             *  WoW.CanCast("Purify"))
             * {
             *  WoW.TargetMember(WoW.PartyMemberIsNeedingADispel);
             *  WoW.CastSpell("Purify");
             *  return;
             * }
             */

            if (TargetId == 0)
            {
                return;
            }
            if (TargetHp == 100)
            {
                return;
            }

            var AverageHp = WoW.PartyAverageHealthPercent;

            //Damage when CleaveON toggle activated or when nothing to do (averageHp > 97)
            if (WoW.CleaveOn == true &&
                !WoW.IsMoving)
            {
                WoW.TargetNearestEnemy();
                if (WoW.CanCast("Holy Fire"))
                {
                    WoW.CastSpell("Holy Fire");
                }

                WoW.CastSpell("Smite");
                return;
            }

            //AoE Healing Cooldowns
            if (WoW.CanCast("Divine Hymn") &&
                AverageHp < 40)
            {
                WoW.CastSpell("Divine Hymn");
            }

            if (WoW.CanCast("Apotheosis") &&
                AverageHp < 60)
            {
                WoW.CastSpell("Apotheosis");
            }

            //Light of Tuure if not already on the target and target low
            if (!WoW.TargetHasBuff("Light of Tuure") &&
                WoW.CanCast("Light of Tuure") &&
                TargetHp <= 50)
            {
                WoW.CastSpell("Light of Tuure");
            }

            // Target the lowest health party member for all abilities below
            WoW.TargetMember(TargetId);

            if (WoW.CanCast("Prayer of Healing") &&
                AverageHp < 85 &&
                TargetHp > 70 &&
                !WoW.IsMoving)
            {
                WoW.CastSpell("Prayer of Healing");
                return;
            }

            // Guardian Spirit on Tank only!
            if (WoW.CanCast("Guardian Spirit") &&
                WoW.TankHealth <= 20)
            {
                WoW.TargetMember(WoW.TankId);
                WoW.CastSpell("Guardian Spirit");

                return;
            }

            //Serenity as a quick boost
            if (WoW.CanCast("Holy Word Serenity") &&
                TargetHp <= 50)
            {
                WoW.CastSpell("Holy Word Serenity");
                return;
            }

            // Flash Heal use on high damage or on Surge of Light proc
            if ((WoW.CanCast("Flash Heal") && TargetHp <= 51 && !WoW.IsMoving) ||
                (WoW.CanCast("Flash Heal") && TargetHp <= 81 && WoW.PlayerHasBuff("Surge of Light")))
            {
                WoW.CastSpell("Flash Heal");
                return;
            }

            // Heal use to heal moderate to high damage.
            if (WoW.CanCast("Heal") &&
                TargetHp <= 85 &&
                !WoW.IsMoving)
            {
                WoW.CastSpell("Heal");
                return;
            }

            //Renew if no one needs proper healing and we have the mana to spare
            if (WoW.CanCast("Renew") &&
                !WoW.TargetHasBuff("Renew") &&
                TargetHp <= 95 &&
                WoW.Mana >= 80 &&
                AverageHp >= 80)
            {
                WoW.CastSpell("Renew");
                return;
            }

            //Prayer of Medning (almost) on cooldown
            if (WoW.CanCast("Prayer of Mending") &&
                !WoW.IsSpellOnCooldown("Prayer of Mending") &&
                !WoW.TargetHasBuff("Prayer of Mending") &&
                TargetHp < 95)
            {
                WoW.CastSpell("Prayer of Mending");
                return;
            }
        }
        public override void Pulse()
        {
            Log.Write("group size: " + GroupSize() + " is in raid: " + isInRaid);
            tankTankingID = -1;
            groupSize     = GroupSize();
            currentMana   = WoW.Mana;
            if (isInRaid)
            {
                if (!WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
                {
                    raidTargetSelector();
                    Log.Write("tankid: " + tankPartyID + " tankid2: " + tankPartyID2 + " tank tanking: " + tankTankingID);
                    if (targetPartyID != -1 && !(tankTankingID != -1 && TankRaidCurrentBOL != tankTankingID && IsInHealRangeParty(tankTankingID)))
                    {
                        TargetOnRaid(targetPartyID);
                    }
                    else if (tankTankingID != -1 && IsInHealRangeParty(tankTankingID))
                    {
                        TargetOnRaid(tankTankingID);
                        if (TankRaidCurrentBOL != tankTankingID)
                        {
                            if (!WoW.TargetHasBuff("Beacon of Light") && WoW.CanCast("Beacon of Light", true, true, false, false, false))
                            {
                                WoW.CastSpell("Beacon of Light");
                                TankRaidCurrentBOL = tankTankingID;
                                return;
                            }
                        }
                        if (WoW.CanCast("Holy Shock", true, true, false, false, false) && currentMana >= 40)
                        {
                            WoW.CastSpell("Holy Shock");
                            return;
                        }
                        if (WoW.PlayerHasBuff("Divine Shield") && WoW.CanCast("Light of the Martyr", true, true, false, false, false))
                        {
                            WoW.CastSpell("Light of the Martyr");
                            return;
                        }
                        if (isTalentBestowFaith && WoW.CanCast("Bestow Faith", true, true, false, false, false) && currentMana >= 40)
                        {
                            WoW.CastSpell("Bestow Faith");
                            return;
                        }
                        if (isTalentJoL && isInJudgmentRange() && WoW.CanCast("Judgment", false, true, false, false, false))
                        {
                            WoW.CastSpell("Judgment");
                            return;
                        }
                        if (WoW.CanCast("Holy Light", true, true, false, false, false) && currentMana >= 70)
                        {
                            WoW.CastSpell("Holy Light");
                            lastCastedID = tankTankingID;
                            return;
                        }
                    }
                    if (targetPartyID != -1 && WoW.HasTarget && !WoW.TargetIsEnemy)
                    {
                        lastCastedID = -1;
                        if (targetPartyID == tankTankingID && !WoW.TargetHasBuff("Beacon of Light") && WoW.CanCast("Beacon of Light", true, true, false, false, false))
                        {
                            WoW.CastSpell("Beacon of Light");
                            TankRaidCurrentBOL = tankTankingID;
                            return;
                        }
                        if (targetHealth <= LayonHandsHp && !WoW.TargetHasDebuff("Forbearance") && WoW.CanCast("Lay on Hands", true, true, false, false, false))
                        {
                            WoW.CastSpell("Lay on Hands");
                            return;
                        }
                        if ((targetPartyID == tankPartyID || targetPartyID == tankPartyID2) && targetHealth <= BlessingofSacrificeHp && targetPartyID != 0 && WoW.HealthPercent >= 90 && WoW.CanCast("Blessing of Sacrifice", true, true, false, false, false))
                        {
                            WoW.CastSpell("Blessing of Sacrifice");
                            return;
                        }
                        if (targetHealth <= HolyShockHp && WoW.CanCast("Holy Shock", true, true, false, false, false))
                        {
                            WoW.CastSpell("Holy Shock");
                            return;
                        }
                        if (((targetHealth <= LightoftheMartyrHp && currentMana >= 50 && WoW.HealthPercent >= 85) || WoW.PlayerHasBuff("Divine Shield")) && WoW.CanCast("Light of the Martyr", true, true, false, false, false))
                        {
                            WoW.CastSpell("Light of the Martyr");
                            return;
                        }

                        if (isTalentBestowFaith && targetPartyID == tankTankingID && WoW.CanCast("Bestow Faith", true, true, false, false, false))
                        {
                            WoW.CastSpell("Bestow Faith");
                            return;
                        }
                        if (isTalentJoL && isInJudgmentRange() && WoW.CanCast("Judgment", false, true, false, false, false))
                        {
                            WoW.CastSpell("Judgment");
                            return;
                        }
                        if (targetHealth <= FlashofLightHp && (partyMemberLow >= 3 || targetHealth <= 50) && currentMana >= 30 && WoW.CanCast("Flash of Light", true, true, false, false, false))
                        {
                            WoW.CastSpell("Flash of Light");
                            lastCastedID = targetPartyID;
                            return;
                        }
                        if (targetHealth <= HolyLightHp && WoW.CanCast("Holy Light", true, true, false, false, false))
                        {
                            WoW.CastSpell("Holy Light");
                            lastCastedID = targetPartyID;
                            return;
                        }
                    }
                    if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                    {
                        if (WoW.CanCast("Judgment", true, true, true, false, true))
                        {
                            WoW.CastSpell("Judgment");
                            return;
                        }
                        if (WoW.CanCast("Holy Shock", true, true, true, false, true))
                        {
                            WoW.CastSpell("Holy Shock");
                            return;
                        }
                    }
                }
                else
                {
                    if (WoW.TargetHealthPercent >= 95 && lastCastedID != tankPartyID && lastCastedID != tankPartyID2)
                    {
                        WoW.CastSpell("stopcasting");
                        return;
                    }
                }
            }
            else
            {
                if (combatRoutine.Type == RotationType.SingleTarget && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling) // Do Single Target Stuff here
                {
                    partyTargetSelector();
                    if (tankPartyID != -1)
                    {
                        if (!PartyHasBuff("Beacon of Light", tankPartyID) && IsInHealRangeParty(tankPartyID) && WoW.CanCast("Beacon of Light", true, true, false, false, false))
                        {
                            castSpellOnGrp("Beacon of Light", tankPartyID);
                            return;
                        }
                    }
                    if (targetPartyID != -1)
                    {
                        if (targetHealth <= LayonHandsHp && !PartyHasDeBuff("Forbearance", targetPartyID) && WoW.CanCast("Lay on Hands", true, true, false, false, false))
                        {
                            castSpellOnGrp("Lay on Hands", targetPartyID);
                            return;
                        }

                        /*if (targetHealth <= BlessingofProtectionHp && targetPartyID != tankPartyID && !PartyHasDeBuff("Forbearance", targetPartyID) && WoW.CanCast("Blessing of Protection", true, true, false, false, false))
                         * {
                         *  castSpellOnGrp("Blessing of Protection", targetPartyID);
                         *  return;
                         * }*/
                        if (targetPartyID == tankPartyID && targetHealth <= BlessingofSacrificeHp && targetPartyID != 0 && WoW.HealthPercent >= 90 && WoW.CanCast("Blessing of Sacrifice", true, true, false, false, false))
                        {
                            castSpellOnGrp("Blessing of Sacrifice", targetPartyID);
                            return;
                        }

                        /* if (partyMemberReallyLow >= 3 && WoW.CanCast("Tyrs Deliverance", true, true, false, false, false))
                         * {
                         *   WoW.CastSpell("Tyrs Deliverance");
                         *   return;
                         * }*/
                        /* if (partyMemberLow >= 3 && WoW.CanCast("Light of Dawn", true, true, false, false, false))
                         * {
                         *   WoW.CastSpell("Light of Dawn");
                         *   return;
                         * }*/
                        if (targetHealth <= HolyShockHp && WoW.CanCast("Holy Shock", true, true, false, false, false))
                        {
                            castSpellOnGrp("Holy Shock", targetPartyID);
                            return;
                        }
                        if (targetHealth <= LightoftheMartyrHp && WoW.HealthPercent >= 85 && targetPartyID != 0 && WoW.CanCast("Light of the Martyr", true, true, false, false, false))
                        {
                            castSpellOnGrp("Light of the Martyr", targetPartyID);
                            return;
                        }
                        if (isTalentBestowFaith && targetHealth <= BestowFaithHp && WoW.CanCast("Bestow Faith", true, true, false, false, false))
                        {
                            castSpellOnGrp("Bestow Faith", targetPartyID);
                            return;
                        }
                        if (targetHealth <= FlashofLightHp && WoW.CanCast("Flash of Light", true, true, false, false, false))
                        {
                            castSpellOnGrp("Flash of Light", targetPartyID);
                            return;
                        }
                        if (targetHealth <= HolyLightHp && WoW.CanCast("Holy Light", true, true, false, false, false) && WoW.IsInCombat)
                        {
                            castSpellOnGrp("Holy Light", targetPartyID);
                            return;
                        }
                    }
                    if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                    {
                        if (WoW.CanCast("Judgment", true, true, true, false, true))
                        {
                            WoW.CastSpell("Judgment");
                            return;
                        }
                        if (WoW.CanCast("Holy Shock", true, true, true, false, true))
                        {
                            WoW.CastSpell("Holy Shock");
                            return;
                        }
                        if (WoW.CanCast("Crusader Strike", true, true, true, true, true))
                        {
                            WoW.CastSpell("Crusader Strike");
                            return;
                        }
                        if (WoW.CanCast("Consecration", false, true, false, false, false) && WoW.CanCast("Crusader Strike", true, false, true, false, true))
                        {
                            WoW.CastSpell("Consecration");
                            return;
                        }
                    }
                    if (WoW.HasTarget && !WoW.TargetIsEnemy && WoW.IsInCombat)
                    {
                        if (WoW.TargetHealthPercent <= LayonHandsHp && !WoW.TargetHasDebuff("Forbearance") && WoW.CanCast("Lay on Hands", true, true, false, false, false))
                        {
                            WoW.CastSpell("Lay on Hands");
                            return;
                        }
                        if (WoW.TargetHealthPercent <= HolyShockHp && WoW.CanCast("Holy Shock", true, true, false, false, false))
                        {
                            WoW.CastSpell("Holy Shock");
                            return;
                        }
                        if (WoW.TargetHealthPercent <= LightoftheMartyrHp && WoW.HealthPercent >= 85 && WoW.CanCast("Light of the Martyr", true, true, false, false, false))
                        {
                            WoW.CastSpell("Light of the Martyr");
                            return;
                        }
                        if (isTalentBestowFaith && WoW.TargetHealthPercent <= BestowFaithHp && WoW.CanCast("Bestow Faith", true, true, false, false, false))
                        {
                            WoW.CastSpell("Bestow Faith");
                            return;
                        }
                        if (WoW.TargetHealthPercent <= FlashofLightHp && WoW.CanCast("Flash of Light", true, true, false, false, false))
                        {
                            WoW.CastSpell("Flash of Light");
                            return;
                        }
                        if (WoW.TargetHealthPercent <= HolyLightHp && WoW.CanCast("Holy Light", true, true, false, false, false))
                        {
                            WoW.CastSpell("Holy Light");
                            return;
                        }
                    }

                    /*if (tankPartyID != -1 && WoW.IsInCombat && IsInHealRangeParty(tankPartyID) && WoW.CanCast("Holy Light", true, true, false, false, false))
                     * {
                     * castSpellOnGrp("Holy Light", tankPartyID);
                     * return;
                     * }*/
                }
                if (combatRoutine.Type == RotationType.SingleTargetCleave) // Do Single Target Stuff here
                {
                    partyTargetSelector();
                    if (tankPartyID != -1)
                    {
                        if (!PartyHasBuff("Beacon of Light", tankPartyID) && IsInHealRangeParty(tankPartyID) && WoW.CanCast("Beacon of Light", true, true, false, false, false))
                        {
                            castSpellOnGrp("Beacon of Light", tankPartyID);
                            return;
                        }
                    }
                    if (targetPartyID != -1)
                    {
                        if (targetHealth <= LayonHandsHp && !PartyHasDeBuff("Forbearance", targetPartyID) && WoW.CanCast("Lay on Hands", true, true, false, false, false))
                        {
                            castSpellOnGrp("Lay on Hands", targetPartyID);
                            return;
                        }
                        if (targetHealth <= BlessingofProtectionHp && !PartyHasDeBuff("Forbearance", targetPartyID) && targetPartyID != tankPartyID && WoW.CanCast("Blessing of Protection", true, true, false, false, false))
                        {
                            castSpellOnGrp("Blessing of Protection", targetPartyID);
                            return;
                        }
                        if (targetHealth <= BlessingofSacrificeHp && !PartyHasDeBuff("Forbearance", targetPartyID) && targetPartyID != 0 && WoW.HealthPercent >= 90 && WoW.CanCast("Blessing of Sacrifice", true, true, false, false, false))
                        {
                            castSpellOnGrp("Blessing of Sacrifice", targetPartyID);
                            return;
                        }

                        /*if (partyMemberReallyLow >= 3 && WoW.CanCast("Tyrs Deliverance", true, true, false, false, false))
                         * {
                         *  WoW.CastSpell("Tyrs Deliverance");
                         *  return;
                         * }*/
                        /*if (partyMemberLow >= 3 && WoW.CanCast("Light of Dawn", true, true, false, false, false))
                         * {
                         *  WoW.CastSpell("Light of Dawn");
                         *  return;
                         * }*/
                        if (targetHealth <= HolyShockHp && WoW.CanCast("Holy Shock", true, true, false, false, false))
                        {
                            castSpellOnGrp("Holy Shock", targetPartyID);
                            return;
                        }
                        if (targetHealth <= LightoftheMartyrHp && WoW.HealthPercent >= 85 && targetPartyID != 0 && WoW.CanCast("Light of the Martyr", true, true, false, false, false))
                        {
                            castSpellOnGrp("Light of the Martyr", targetPartyID);
                            return;
                        }
                        if (isTalentBestowFaith && targetHealth <= BestowFaithHp && WoW.CanCast("Bestow Faith", true, true, false, false, false))
                        {
                            castSpellOnGrp("Bestow Faith", targetPartyID);
                            return;
                        }
                        if (targetHealth <= HolyLightHp && WoW.CanCast("Flash of Light", true, true, false, false, false))
                        {
                            castSpellOnGrp("Flash of Light", targetPartyID);
                            return;
                        }
                    }
                    if (tankPartyID != -1 && WoW.IsInCombat && IsInHealRangeParty(tankPartyID) && WoW.CanCast("Holy Light", true, true, false, false, false))
                    {
                        castSpellOnGrp("Holy Light", tankPartyID);
                        return;
                    }
                }
                if (combatRoutine.Type == RotationType.AOE)
                {
                    if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                    {
                        if (WoW.CanCast("Judgment", true, true, true, false, true))
                        {
                            WoW.CastSpell("Judgment");
                            return;
                        }
                        if (WoW.CanCast("Holy Shock", true, true, true, false, true))
                        {
                            WoW.CastSpell("Holy Shock");
                            return;
                        }
                        if (WoW.CanCast("Crusader Strike", true, true, true, true, true))
                        {
                            WoW.CastSpell("Crusader Strike");
                            return;
                        }
                        if (WoW.CanCast("Consecration", false, true, false, false, false) && WoW.CanCast("Crusader Strike", true, false, true, false, true))
                        {
                            WoW.CastSpell("Consecration");
                            return;
                        }
                    }
                    partyTargetSelector();
                    if (targetPartyID != -1)
                    {
                        /*if (partyMemberLow >= 3 && WoW.CanCast("Light of Dawn", true, true, false, false, false))
                         * {
                         *  WoW.CastSpell("Light of Dawn");
                         *  return;
                         * }*/
                        if (targetHealth <= LightoftheMartyrHp && WoW.HealthPercent >= 85 && targetPartyID != 0 && WoW.CanCast("Light of the Martyr", true, true, false, false, false))
                        {
                            castSpellOnGrp("Light of the Martyr", targetPartyID);
                            return;
                        }
                        if (isTalentBestowFaith && targetPartyID != -1 && targetHealth <= BestowFaithHp && WoW.CanCast("Bestow Faith", true, true, false, false, false))
                        {
                            castSpellOnGrp("Bestow Faith", targetPartyID);
                            return;
                        }
                    }
                }
            }
        }
Ejemplo n.º 9
0
        public override void Pulse()
        {
            if (!WoW.InGame)
            {
                return;
            }

            if (WoW.TankId == 0)
            {
                string currentTalents = WoW.Talent(1) + "" + WoW.Talent(2) + "" + WoW.Talent(3) + "" + WoW.Talent(4) + "" + WoW.Talent(5) + "" + WoW.Talent(6) + "" + WoW.Talent(7);
                if (supportedTalents != currentTalents)
                {
                    MessageBox.Show("You are not using the supported talents " + supportedTalents + ", your currnet talents are " + currentTalents + ".", "Frozen", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    Log.Write("Talents are correct", Color.Green);
                }

                if (!WoW.PlayerHasBuff("Beacon of Faith") && !WoW.PlayerHasBuff("Beacon of Light") &&
                    WoW.CanCast("Beacon of Faith"))
                {
                    WoW.CastSpellOnMe("Beacon of Faith");
                }

                var f = new frmEnterTankId {
                    TopMost = true
                };
                f.ShowDialog();
            }

            if (WoW.PlayerHealthPercent == 0 || WoW.IsMounted)
            {
                return;
            }
            if (WoW.PlayerIsCasting)
            {
                return;
            }

            var lowest = WoW.PartyLowestHealthPercent;

            int currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent;

            if (WoW.PartyMemberIsNeedingADispel != 0)
            {
                currentTargetId = WoW.PartyMemberIsNeedingADispel;
            }

            if (currentTargetId == 0)
            {
                return;
            }
            if (lowest == 100)
            {
                return;
            }

            var averageHp = WoW.PartyAverageHealthPercent;

            if (WoW.PlayerHealthPercent < 10 && WoW.IsInCombat && WoW.CanCast("Divine Shield") &&
                !WoW.PlayerHasDebuff("Forbearance"))
            {
                WoW.CastSpell("Divine Shield");
            }

            if (averageHp < 80 && WoW.CanCast("Aura Mastery"))
            {
                WoW.CastSpell("Aura Mastery");
            }

            if (averageHp < 60 && WoW.CanCast("Avenging Wrath") && !WoW.PlayerHasBuff("Aura Mastery"))
            {
                WoW.CastSpell("Avenging Wrath");
            }

            WoW.TargetMember(currentTargetId); // Target the lowest health party member

            if (WoW.PartyMemberIsNeedingADispel != 0 && WoW.CanCast("Cleanse"))
            {
                WoW.CastSpell("Cleanse");
                return;
            }

            // Beacon of Light or Beacon of Virtue(if selected) maintain on your primary target at all times.
            if (WoW.Talent(7) == 3)
            {
                if (WoW.TankHealth > 50 &&
                    averageHp > 90 &&
                    WoW.CanCast("Beacon of Virtue") &&
                    WoW.TankId == currentTargetId &&
                    !WoW.TargetHasBuff("Beacon of Virtue"))
                {
                    WoW.CastSpell("Beacon of Virtue");
                }
            }
            if (WoW.Talent(7) == 1)
            {
                if (WoW.CanCast("Beacon of Light") &&
                    WoW.TankId == currentTargetId &&
                    !WoW.TargetHasBuff("Beacon of Light"))
                {
                    WoW.CastSpell("Beacon of Light");
                }
            }

            if (WoW.CanCast("Lay On Hands") &&
                lowest <= 20 &&                        // Use LOH if tanks health < 20 %
                !WoW.TargetHasDebuff("Forbearance") && // Make sure we dont LOH a tank with forbearance debuff
                WoW.TankId == currentTargetId)         // Make sure we only use LOH on tank
            {
                WoW.CastSpell("Lay On Hands");
                return;
            }

            if (WoW.CanCast("Blessing of Sacrifice") &&
                lowest <= 30 &&
                WoW.TankId == currentTargetId &&
                !WoW.TargetHasBuff("Shield Wall Oto"))
            {
                WoW.CastSpell("Blessing of Sacrifice");
                return;
            }

            // Holy Shock use on cooldown to generate Infusion of Light procs.
            // Consume Infusion of Light procs using the appropriate heal before your next Holy Shock.
            if (WoW.CanCast("Holy Shock") && !WoW.PlayerHasBuff("Infusion of Light"))
            {
                WoW.CastSpell("Holy Shock");
                return;
            }

            if (WoW.Talent(5) == 3)
            {
                if (WoW.CanCast("Holy Prism") &&
                    WoW.TankId == currentTargetId &&
                    WoW.IsInCombat)
                {
                    WoW.CastSpell("Holy Prism");
                    return;
                }
            }

            //                  Bestow Faith on cooldown (if selected).
            //                  Judgment to maintain the buff from Judgment of Light (if selected).

            // Light of the Martyr a potent emergency heal as long as you have health to spare.
            if (WoW.CanCast("Light of the Martyr") && lowest <= 40 && WoW.PlayerHealthPercent >= 70)
            {
                WoW.CastSpell("Light of the Martyr");
                return;
            }

            // Flash of Light use as an emergency heal to save players facing death.
            if (WoW.CanCast("Flash of Light") && lowest <= 50 && !WoW.IsMoving)
            {
                WoW.CastSpell("Flash of Light");
                return;
            }

            // Holy Light use to heal moderate to high damage.
            if (WoW.CanCast("Holy Light") && lowest <= 90 && !WoW.IsMoving)
            {
                WoW.CastSpell("Holy Light");
                return;
            }

            if (WoW.CanCast("Tyr's Deliverance") && !WoW.IsMoving)
            {
                WoW.TargetNearestEnemy();
                if (WoW.HasTarget && WoW.TargetIsEnemy)
                {
                    WoW.CastSpell("Tyr's Deliverance");
                }
            }
        }
Ejemplo n.º 10
0
        public override void Pulse()
        {
            if (WoW.IsMounted)
            {
                return;
            }

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

            if (!WoW.IsInCombat && WoW.CanCast("Angelic Feather") && WoW.IsMoving && !WoW.PlayerHasBuff("Angelic Feather"))
            {
                WoW.CastSpell("Angelic Feather");
                return;
            }

            var lowest          = WoW.PartyLowestHealthPercent;
            int currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent;

            Log.Write("Party Lowest HP: " + lowest);

            if (lowest >= 80 && WoW.PartyMemberIsNeedingADispel == 0 && WoW.IsInCombat)
            {
                WoW.TargetNearestEnemy();

                //DPS Rotation
                if (WoW.HasTarget && WoW.TargetIsEnemy)
                {
                    //Maintain Shadow Word: Pain(or Purge the Wicked, if you have taken this talent) on the target.
                    if (WoW.TargetDebuffTimeRemaining("Shadow Word: Pain") < 400 && WoW.CanCast("Shadow Word: Pain") && WoW.Talent(6) != 1)
                    {
                        WoW.CastSpell("Shadow Word: Pain");
                        return;
                    }
                    if (WoW.TargetDebuffTimeRemaining("Purge the Wicked") < 400 && WoW.CanCast("Purge the Wicked") && WoW.Talent(6) == 1)
                    {
                        WoW.CastSpell("Purge the Wicked");
                        return;
                    }

                    //Use Schism on cooldown(if you have taken this talent).
                    if (WoW.CanCast("Schism") && WoW.Talent(1) == 3)
                    {
                        WoW.CastSpell("Schism");
                        return;
                    }

                    if (WoW.PlayerHasBuff("Overloaded with Light") && WoW.CanCast("Light's Wrath"))
                    {
                        WoW.CastSpell("Light's Wrath");
                        return;
                    }

                    //Use Penance on cooldown.
                    if (WoW.CanCast("Penance"))
                    {
                        WoW.CastSpell("Penance");
                        return;
                    }

                    //Use Power Word: Solace on cooldown(if you have taken this talent).
                    if (WoW.CanCast("Power Word: Solace") && WoW.Talent(4) == 1)
                    {
                        WoW.CastSpell("Power Word: Solace");
                        return;
                    }

                    if (WoW.CanCast("Shadowfiend") && WoW.Talent(4) != 3)
                    {
                        WoW.CastSpell("Shadowfiend");
                        return;
                    }

                    if (WoW.CanCast("Mindbender") && WoW.Talent(4) == 3)
                    {
                        WoW.CastSpell("Mindbender");
                        return;
                    }

                    //Use Smite as a filler.
                    if (WoW.CanCast("Smite"))
                    {
                        WoW.CastSpell("Smite");
                        return;
                    }
                }
                return;
            }

            if (WoW.PartyMemberIsNeedingADispel != 0)
            {
                currentTargetId = WoW.PartyMemberIsNeedingADispel;
            }

            var averageHp = WoW.PartyAverageHealthPercent;

            if (averageHp < 60 && WoW.CanCast("Power Infusion"))
            {
                WoW.CastSpell("Power Infusion"); // Off GCD no return needed
            }

            if (WoW.CanCast("Shadowfiend") && WoW.Talent(4) != 3 && WoW.IsInCombat && WoW.Mana < 90)
            {
                WoW.TargetNearestEnemy();
                WoW.CastSpell("Shadowfiend");
                return;
            }

            if (WoW.CanCast("Mindbender") && WoW.Talent(4) == 3 && WoW.IsInCombat && WoW.Mana < 90)
            {
                WoW.TargetNearestEnemy();
                WoW.CastSpell("Mindbender");
                return;
            }

            WoW.TargetMember(currentTargetId); // Target the lowest health party member or the member needing a dispell

            if (WoW.PartyMemberIsNeedingADispel != 0 && WoW.CanCast("Purify"))
            {
                WoW.CastSpell("Purify");
                return;
            }

            // If we are targeting the tank and his HP < 20% Pain Suppression him
            if (lowest <= 20 && WoW.CanCast("Pain Suppression") && WoW.TankId == currentTargetId)
            {
                WoW.CastSpell("Pain Suppression");
                return;
            }

            // If we are targeting the tank and his HP < 20% Pain Suppression him
            if (lowest <= 95 && WoW.CanCast("Power Word: Shield") && WoW.TankId == currentTargetId)
            {
                WoW.CastSpell("Power Word: Shield");
                return;
            }

            if (WoW.CanCast("Penance") && lowest <= 60 && WoW.TankId == currentTargetId)
            {
                WoW.CastSpell("Penance");
                return;
            }

            if (WoW.CanCast("Shadow Mend") && (lowest < 80 || (WoW.TargetHasBuff("Attonement") && lowest < 99)))
            {
                WoW.CastSpell("Shadow Mend");
                return;
            }

            if (WoW.CanCast("Plea") && lowest < 99 && lowest >= 80)
            {
                WoW.CastSpell("Plea");
                return;
            }

            // Mitigate as much damage as possible and always keep PWS up on self
            if (WoW.PlayerBuffTimeRemaining("Power Word: Shield") < 400 && WoW.CanCast("Power Word: Shield"))
            {
                WoW.CastSpell("Power Word: Shield");
                return;
            }
        }
Ejemplo n.º 11
0
        public override void Pulse()
        {
            /*if (WoW.TankId == 0)
             * {
             *  string currentTalents = WoW.Talent(1) + "" + WoW.Talent(2) + "" + WoW.Talent(3) + "" + WoW.Talent(4) + "" + WoW.Talent(5) + "" + WoW.Talent(6) + "" + WoW.Talent(7);
             *  if (supportedTalents != currentTalents)
             *  {
             *      MessageBox.Show($"You are not using the supported talents {supportedTalents}, your currnet talents are {currentTalents}.", "Frozen",
             *          MessageBoxButtons.OK, MessageBoxIcon.Error);
             *  }
             *  else
             *  {
             *      Log.Write("Talents are correct", Color.Green);
             *  }
             *
             *
             *
             *  var f = new frmEnterTankId {TopMost = true};
             *  f.ShowDialog();
             * }*/

            if (WoW.HealthPercent == 0 || WoW.IsMounted)
            {
                return;
            }
            if (WoW.PlayerIsCasting)
            {
                return;
            }

            var lowest = WoW.PartyLowestHealthPercent;

            int currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent;

            if (WoW.PartyMemberIsNeedingADispel != 0)
            {
                currentTargetId = WoW.PartyMemberIsNeedingADispel;
            }

            if (currentTargetId == 0)
            {
                return;
            }
            if (lowest == 100)
            {
                return;
            }



            var averageHp = WoW.PartyAverageHealthPercent;



            //AoE Healing
            if (averageHp < 40 && WoW.CanCast("Divine Hymn"))
            {
                WoW.CastSpell("Divine Hymn");
            }

            if (averageHp < 60 && WoW.CanCast("Apotheosis"))
            {
                WoW.CastSpell("Apotheosis");
            }


            WoW.TargetMember(currentTargetId); // Target the lowest health party member for all abilities below

            if (averageHp < 80 && WoW.CanCast("Prayer of Healing") && lowest > 80)
            {
                WoW.CastSpell("Prayer of Healing");
                return;
            }


            if (WoW.PartyMemberIsNeedingADispel != 0 && WoW.CanCast("Purify"))
            {
                WoW.CastSpell("Purify");
                return;
            }

            if (WoW.CanCast("Guardian Spirit") &&
                lowest <= 20 &&                              // Use LOH if tanks health < 20 %
                !WoW.IsSpellOnCooldown("Guardian Spirit") && // Make sure we dont try and use it whilst on cooldown
                WoW.TankId == currentTargetId)               // Make sure we only use LOH on tank
            {
                WoW.CastSpell("Guardian Spirit");
                return;
            }
            if (WoW.CanCast("Holy Word Serenity") &&
                lowest <= 50 &&                               // Use LOH if tanks health < 20 %
                !WoW.IsSpellOnCooldown("Holy Word Serenity")) // Make sure we dont try and use it whilst on cooldown
            {
                WoW.CastSpell("Holy Word Serenity");
                return;
            }

            // Flash of Light use as an emergency heal to save players facing death.
            if (WoW.CanCast("Flash Heal") && lowest <= 50 && !WoW.IsMoving)
            {
                WoW.CastSpell("Flash Heal");
                return;
            }

            // Holy Light use to heal moderate to high damage.
            if (WoW.CanCast("Heal") && lowest <= 80 && !WoW.IsMoving)
            {
                WoW.CastSpell("Heal");
                return;
            }

            if (WoW.CanCast("Light of Tuure") &&
                lowest <= 85 &&
                !WoW.IsSpellOnCooldown("Light of Tuure") &&
                !WoW.TargetHasBuff("Light of Tuure"))           // Make sure we dont try and use it whilst on cooldown

            {
                WoW.CastSpell("Light of Tuure");
                return;
            }

            if (WoW.CanCast("Renew") &&
                lowest <= 90 && // Make sure we dont try and use it whilst on cooldown
                WoW.IsMoving)
            {
                WoW.CastSpell("Renew");
                return;
            }

            if (WoW.CanCast("Prayer of Mending") &&
                lowest <= 95 &&
                !WoW.IsSpellOnCooldown("Prayer of Mending") && // Make sure we dont try and use it whilst on cooldown
                !WoW.TargetHasBuff("Prayer of Mending"))       // Make sure we only use PoM on tank
            {
                WoW.CastSpell("Prayer of Mending");
                return;
            }
        }
Ejemplo n.º 12
0
        public override void Pulse()
        {
            Log.Write("Mana: " + WoW.Mana, Color.Red);

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

            if (WoW.PlayerHealthPercent == 0 || WoW.IsMounted)
            {
                return;
            }
            if (WoW.PlayerIsCasting)
            {
                return;
            }

            var lowest = WoW.PartyLowestHealthPercent;

            var currentTargetId = WoW.PartyMemberIdWithLowestHealthPercent;

            var averageHp = WoW.PartyAverageHealthPercent;

            WoW.TargetMember(currentTargetId);

            if (currentTargetId == 0)
            {
                return;
            }
            if (lowest == 100)
            {
                return;
            }

            if (WoW.GroupSize == 5)
            {
                Log.Write($"Lowest Health Target = [/target party{currentTargetId}] health = {averageHp}");
            }
            else
            {
                Log.Write($"Lowest Health Target = [/target raid{currentTargetId}] health = {averageHp}");
            }

            if (lowest < 85 && !WoW.IsSpellOnCooldown("ThunderFocusTea"))
            {
                WoW.CastSpell("ThunderFocusTea");
            }

            if (WoW.PlayerHasBuff("ThunderFocusTea"))
            {
                if (averageHp < 70 &&
                    WoW.CanCast("EssenceFont") &&
                    !WoW.IsSpellOnCooldown("EssenceFont") &&
                    !WoW.PlayerHasBuff("EssenceFont"))
                {
                    WoW.CastSpell("EssenceFont");
                }

                if (averageHp < 90 &&
                    WoW.CanCast("Vivify") &&
                    !WoW.IsSpellOnCooldown("Vivify"))
                {
                    WoW.CastSpell("Vivify");
                }
            }

            if (WoW.IsInCombat && WoW.Mana <= 70 &&
                !WoW.IsSpellOnCooldown("Manatea"))
            {
                WoW.CastSpell("Manatea");
                return;
            }

            if (WoW.CanCast("RenewingMist") && WoW.IsInCombat &&
                !WoW.TargetHasBuff("RenewingMist") &&
                !WoW.PlayerHasBuff("RenewingMist") &&
                !WoW.IsSpellOnCooldown("RenewingMist"))
            {
                WoW.CastSpell("RenewingMist");
                return;
            }
            if (UseCooldowns)
            {
                if (lowest > 90)
                {
                    if (WoW.CanCast("RSK") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                    {
                        WoW.CastSpell("RSK");
                        return;
                    }

                    if (WoW.CanCast("BlackoutKick") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat &&
                        WoW.PlayerBuffStacks("BlackoutBuff") == 3)
                    {
                        WoW.CastSpell("BlackoutKick");
                        return;
                    }

                    if (WoW.CanCast("Tiger") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat &&
                        WoW.PlayerBuffStacks("BlackoutBuff") < 3)
                    {
                        WoW.CastSpell("Tiger");
                        return;
                    }
                }
            }
            if (WoW.CanCast("Revival") &&
                averageHp < 65 &&
                !WoW.IsSpellOnCooldown("Revival"))
            {
                WoW.CastSpell("Revival");
                return;
            }

            if (WoW.CanCast("LifeCocoon") &&
                lowest <= 25 &&
                !WoW.IsSpellOnCooldown("LifeCocoon"))
            {
                WoW.CastSpell("LifeCocoon");
                return;
            }


            if (averageHp < 75)
            {
                if (WoW.CanCast("InvokeChiJitheRedCrane") &&
                    !WoW.IsSpellOnCooldown("InvokeChiJitheRedCrane"))
                {
                    WoW.CastSpell("InvokeChiJitheRedCrane");
                    return;
                }

                if (WoW.CanCast("EssenceFont") &&
                    !WoW.IsSpellOnCooldown("EssenceFont") &&
                    !WoW.PlayerHasBuff("EssenceFont"))
                {
                    WoW.CastSpell("EssenceFont");
                    return;
                }

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

            if (WoW.Level > 100)
            {
                if (WoW.CanCast("SheilunsGift") &&
                    lowest <= 75 && !WoW.IsMoving &&
                    WoW.PlayerSpellCharges("SheilunsGift") >= 4)
                {
                    WoW.CastSpell("SheilunsGift");
                    return;
                }
            }

            if (WoW.CanCast("EnvelopingMist") &&
                lowest <= 70 &&
                !WoW.IsMoving &&
                !WoW.TargetHasBuff("EnvelopingMist") &&
                WoW.LastSpell != ("EnvelopingMist"))
            {
                WoW.CastSpell("EnvelopingMist");
                return;
            }

            if (WoW.CanCast("Vivify") &&
                lowest <= 65)
            {
                WoW.CastSpell("Vivify");
                return;
            }

            if (WoW.CanCast("Effuse") && lowest <= 90 &&
                !WoW.PlayerIsChanneling)
            {
                WoW.CastSpell("Effuse");
                return;
            }

            if (WoW.CanCast("ChiWave") && lowest <= 90 &&
                WoW.IsInCombat)
            {
                WoW.CastSpell("ChiWave");
                return;
            }

            if (WoW.IsInCombat && WoW.Mana <= 70 &&
                !WoW.IsSpellOnCooldown("Manatea"))
            {
                WoW.CastSpell("Manatea");
            }
        }
Ejemplo n.º 13
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;
            }
        }