Ejemplo n.º 1
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget)  // Do Single Target Stuff here
            {
                /*
                 * Endless Rage / War Machine
                 * Double Time
                 * Avatar
                 * Warpaint
                 * Frothing Zerker/Massacre
                 * Inner Rage
                 * Reckless Abandon
                 */


                //AOE on Press
                if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_Z) < 0)
                {
                    if (WoW.HasTarget && WoW.IsInCombat && WoW.TargetIsEnemy)
                    {
                        if (TFZFMint)
                        {
                            if (WoW.CanCast("Whirlwind") &&
                                !WoW.PlayerHasBuff("Meat Cleaver"))
                            {
                                WoW.CastSpell("Whirlwind"); return;
                            }

                            if (WoW.CanCast("Rampage") &&
                                WoW.Rage >= 100 &&
                                WoW.PlayerHasBuff("Meat Cleaver"))
                            {
                                WoW.CastSpell("Rampage"); return;
                            }

                            if (WoW.CanCast("Bloodthirst") &&
                                !WoW.PlayerHasBuff("Enrage") &&
                                WoW.PlayerHasBuff("Meat Cleaver"))
                            {
                                WoW.CastSpell("Bloodthirst"); return;
                            }

                            if (WoW.CanCast("Execute") &&
                                WoW.IsSpellOverlayed("Execute"))
                            {
                                WoW.CastSpell("Execute"); return;
                            }

                            if (WoW.CanCast("Raging Blow") &&
                                !WoW.CanCast("Bloodthirst") &&
                                !WoW.CanCast("Rampage"))
                            {
                                WoW.CastSpell("Raging Blow"); return;
                            }

                            if (WoW.CanCast("Bloodthirst") &&
                                WoW.PlayerHasBuff("Enrage") &&
                                WoW.PlayerHasBuff("Meat Cleaver"))
                            {
                                WoW.CastSpell("Bloodthirst"); return;
                            }
                        }

                        if (!TFZFMint)
                        {
                            if (WoW.CanCast("Whirlwind") &&
                                !WoW.PlayerHasBuff("Meat Cleaver"))
                            {
                                WoW.CastSpell("Whirlwind"); return;
                            }

                            if (WoW.CanCast("Rampage") &&
                                !WoW.PlayerHasBuff("Enrage"))
                            {
                                WoW.CastSpell("Rampage"); return;
                            }

                            if (WoW.CanCast("Bloodthirst") &&
                                !WoW.PlayerHasBuff("Enrage") &&
                                WoW.PlayerHasBuff("Meat Cleaver"))
                            {
                                WoW.CastSpell("Bloodthirst"); return;
                            }

                            if (WoW.CanCast("Execute") &&
                                WoW.IsSpellOverlayed("Execute"))
                            {
                                WoW.CastSpell("Execute"); return;
                            }

                            if (WoW.CanCast("Raging Blow") &&
                                !WoW.CanCast("Bloodthirst") &&
                                !WoW.CanCast("Rampage"))
                            {
                                WoW.CastSpell("Raging Blow"); return;
                            }

                            if (WoW.CanCast("Bloodthirst") &&
                                WoW.PlayerHasBuff("Enrage") &&
                                WoW.PlayerHasBuff("Meat Cleaver"))
                            {
                                WoW.CastSpell("Bloodthirst"); return;
                            }
                        }
                    }
                }

                //Normal ST rotation
                if (WoW.HasTarget && WoW.IsInCombat && WoW.TargetIsEnemy && WoW.IsSpellInRange("Bloodthirst"))
                {
                    if (WoW.TargetHealthPercent >= 20)
                    {
                        //When targets are above 20%. Not in Execute phase. (need to change this to TTExecute)
                        //Single target with Reckless Abandon -  Battle Cry  Avatar  Rampage -  Raging Blow -  Odyn's Fury -  Bloodthirst - Raging Blow -  Furious Slash -  Bloodthirst
                        if (MplusAoEint)
                        {
                            if (WoW.CanCast("Whirlwind") &&
                                !WoW.PlayerHasBuff("Meat Cleaver"))
                            {
                                WoW.CastSpell("Whirlwind"); return;
                            }


                            if (WoW.CanCast("Whirlwind") &&
                                !WoW.CanCast("Bloodthirst") &&
                                !WoW.CanCast("Raging Blow") &&
                                !WoW.CanCast("Rampage")
                                )
                            {
                                WoW.CastSpell("Whirlwind"); return;
                            }

                            if (WoW.CanCast("Raging Blow") &&
                                !WoW.CanCast("Bloodthirst"))
                            {
                                WoW.CastSpell("Raging Blow"); return;
                            }
                        }
                    }
                    if (TFZFMint)
                    {
                        if (WoW.CanCast("Rampage") &&
                            WoW.Rage >= 100)
                        {
                            WoW.CastSpell("Rampage"); return;
                        }

                        if (WoW.CanCast("Bloodthirst") &&
                            !WoW.PlayerHasBuff("Enrage"))
                        {
                            WoW.CastSpell("Bloodthirst"); return;
                        }

                        if (WoW.CanCast("Execute") &&
                            WoW.IsSpellOverlayed("Execute"))
                        {
                            WoW.CastSpell("Execute"); return;
                        }

                        if (!MplusAoEint && WoW.CanCast("Raging Blow") &&
                            !WoW.CanCast("Bloodthirst"))
                        {
                            WoW.CastSpell("Raging Blow"); return;
                        }

                        if (WoW.CanCast("Bloodthirst") &&
                            WoW.PlayerHasBuff("Enrage"))
                        {
                            WoW.CastSpell("Bloodthirst"); return;
                        }

                        if (WoW.CanCast("Furious Slash") &&
                            !WoW.CanCast("Bloodthirst") &&
                            !WoW.CanCast("Raging Blow"))
                        {
                            WoW.CastSpell("Furious Slash"); return;
                        }
                    }

                    if (!TFZFMint)
                    {
                        if (WoW.CanCast("Rampage") &&
                            !WoW.PlayerHasBuff("Enrage"))
                        {
                            WoW.CastSpell("Rampage"); return;
                        }

                        if (WoW.CanCast("Bloodthirst") &&
                            !WoW.PlayerHasBuff("Enrage"))
                        {
                            WoW.CastSpell("Bloodthirst"); return;
                        }

                        if (WoW.CanCast("Execute") &&
                            WoW.IsSpellOverlayed("Execute"))
                        {
                            WoW.CastSpell("Execute"); return;
                        }

                        if (WoW.CanCast("Raging Blow") &&
                            !WoW.CanCast("Bloodthirst"))
                        {
                            WoW.CastSpell("Raging Blow"); return;
                        }

                        if (WoW.CanCast("Bloodthirst") &&
                            WoW.PlayerHasBuff("Enrage"))
                        {
                            WoW.CastSpell("Bloodthirst"); return;
                        }

                        if (WoW.CanCast("Furious Slash") &&
                            !WoW.CanCast("Bloodthirst") &&
                            !WoW.CanCast("Raging Blow"))
                        {
                            WoW.CastSpell("Furious Slash"); return;
                        }
                    }


                    if (WoW.TargetHealthPercent <= 20)

                    {
                        if (TFZFMint)
                        {
                            if (WoW.CanCast("Rampage") &&
                                WoW.Rage >= 100)
                            {
                                WoW.CastSpell("Rampage"); return;
                            }

                            if (WoW.CanCast("Bloodthirst") &&
                                !WoW.PlayerHasBuff("Enrage"))
                            {
                                WoW.CastSpell("Bloodthirst"); return;
                            }

                            if (WoW.CanCast("Execute") &&
                                WoW.IsSpellOverlayed("Execute") &&
                                WoW.Rage > 25)
                            {
                                WoW.CastSpell("Execute"); return;
                            }

                            if (WoW.CanCast("Execute") &&
                                WoW.Rage > 25)
                            {
                                WoW.CastSpell("Execute"); return;
                            }

                            if (WoW.CanCast("Raging Blow") &&
                                !WoW.CanCast("Bloodthirst"))
                            {
                                WoW.CastSpell("Raging Blow"); return;
                            }

                            if (WoW.CanCast("Bloodthirst") &&
                                WoW.PlayerHasBuff("Enrage"))
                            {
                                WoW.CastSpell("Bloodthirst"); return;
                            }

                            if (WoW.CanCast("Furious Slash") &&
                                !WoW.CanCast("Bloodthirst") &&
                                !WoW.CanCast("Raging Blow"))
                            {
                                WoW.CastSpell("Furious Slash"); return;
                            }
                        }

                        if (!TFZFMint)
                        {
                            if (WoW.CanCast("Execute") &&
                                !WoW.PlayerHasBuff("Enrage") &&
                                !WoW.PlayerHasBuff("Massacre"))
                            {
                                WoW.CastSpell("Execute"); return;
                            }

                            if (WoW.CanCast("Rampage") &&
                                WoW.PlayerHasBuff("Massacre"))
                            {
                                WoW.CastSpell("Rampage"); return;
                            }

                            if (WoW.CanCast("Execute") &&
                                WoW.PlayerHasBuff("Enrage"))
                            {
                                WoW.CastSpell("Execute"); return;
                            }

                            if (WoW.CanCast("Bloodthirst") &&
                                WoW.Rage < 25)
                            {
                                WoW.CastSpell("Bloodthirst"); return;
                            }

                            if (!MplusAoEint && WoW.CanCast("Raging Blow") &&
                                WoW.Rage < 25)
                            {
                                WoW.CastSpell("Raging Blow"); return;
                            }
                        }
                    }

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

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



            if (combatRoutine.Type == RotationType.AOE)
            {
                // AOE stuff here
            }
            if (combatRoutine.Type == RotationType.SingleTargetCleave)
            {
                // Do Single Target Cleave stuff here if applicable else ignore this one
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Do the rotation.
        /// </summary>
        private void doRotation()
        {
            if (WoW.Insanity >= 70 || WoW.PlayerHasBuff(VOIDFORM_AURA))
            {
                //Expend insanity in voidform.
                if (WoW.HasTarget && !WoW.PlayerHasBuff(VOIDFORM_AURA))
                {
                    castWithRangeCheck(VOID_ERUPTION);
                }
                else
                {
                    //If we can, cast it.
                    castWithRangeCheck(VOID_BOLT);

                    //Cast it.
                    if (WoW.Level > 100)
                    {
                        castWithRangeCheck(VOID_TORRENT);
                    }

                    //If the boss health is at or below our set threshold SW:D
                    if (WoW.TargetHealthPercent <= HEALTH_PERCENT_FOR_SWD)
                    {
                        if (WoW.PlayerSpellCharges(SHADOW_DEATH) == 2 && WoW.Insanity <= 70)
                        {
                            castWithRangeCheck(SHADOW_DEATH);
                        }
                        else if (WoW.PlayerSpellCharges(SHADOW_DEATH) == 1)
                        {
                            if (WoW.Insanity > PANIC_INSANITY_VALUE && !(WoW.IsSpellOnCooldown(MIND_BLAST) || WoW.IsSpellOnCooldown(VOID_BOLT)) ||
                                WoW.Insanity <= calculateInsanityDrain())
                            {
                                castWithRangeCheck(SHADOW_DEATH);
                            }
                        }
                    }

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

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

                    //If we have high stacks, cast shadowfiend.

                    /* Disabled, allow player to cast.
                     * if (WoW.PlayerBuffStacks(VOIDFORM_AURA)>=15) {
                     *  castWithRangeCheck(SHADOWFIEND);
                     * }
                     */

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

                    //If we don't have anything else to do, cast Mind flay.
                    if (!isPlayerBusy(ignoreChanneling: false))
                    {
                        castWithRangeCheck(MIND_FLAY);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted)
                {
                    if (UseCooldowns && RuneOfPower && WoW.PlayerSpellCharges("Rune of Power") >= 1 && WoW.SpellCooldownTimeRemaining("Combustion") >= 4000 &&
                        WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerIsCasting && !WoW.IsMoving && !WoW.PlayerHasBuff("Rune of Power") && !WoW.IsSpellOnCooldown("Rune of Power") ||
                        (UseCooldowns && RuneOfPower && !WoW.PlayerIsCasting && WoW.PlayerSpellCharges("Fire Blast") == 3 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 &&
                         !WoW.IsMoving && !WoW.IsSpellOnCooldown("Combustion") && WoW.PlayerSpellCharges("Rune of Power") >= 1 && WoW.PlayerHasBuff("Hot Streak!") &&
                         !WoW.PlayerHasBuff("Rune of Power") && !WoW.IsSpellOnCooldown("Rune of Power")))
                    {
                        WoW.CastSpell("Rune of Power");
                        return;
                    }
                    if (UseCooldowns && Mirrors && WoW.CanCast("Mirror Image") && !WoW.IsSpellOnCooldown("Mirror Image") && WoW.PlayerHasBuff("Combustion"))
                    {
                        WoW.CastSpell("Mirror Image");
                        return;
                    }
                    if (WoW.CanCast("Scorch") && WoW.IsMoving && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Scorch");
                        return;
                    }
                    if (WoW.IsInCombat && Meteor && Control.ModifierKeys == Keys.Alt && !WoW.PlayerIsCasting)
                    {
                        WoW.CastSpell("Meteor");
                        return;
                    }
                    if (WoW.CanCast("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 &&
                        WoW.PlayerHasBuff("Heating Up") && UseCooldowns && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 && !WoW.IsSpellOnCooldown("Combustion"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }
                    if (WoW.PlayerIsCasting && UseCooldowns && WoW.PlayerHasBuff("Heating Up") && Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") == 3 &&
                        !WoW.IsSpellOnCooldown("Combustion"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }
                    if (WoW.CanCast("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!") && WoW.PlayerHasBuff("Heating Up") && WoW.LastSpell != "Fire Blast" &&
                        WoW.LastSpell != "Phoenix's Flames" && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && !UseCooldowns && Combustion &&
                        WoW.PlayerSpellCharges("Phoenix's Flames") >= 2 && !WoW.IsSpellOnCooldown("Combustion"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }
                    if (!UseCooldowns && Combustion && WoW.PlayerIsCasting && WoW.LastSpell != "Phoenix's Flame" && WoW.LastSpell != "Fire Blast" && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.PlayerSpellCharges("Fire Blast") >= 1 && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fire Blast");
                        return;
                    }
                    if (WoW.CanCast("Phoenix's Flames") && WoW.IsSpellOnCooldown("Fire Blast") && WoW.SpellCooldownTimeRemaining("Fire Blast") > 110 && WoW.PlayerHasBuff("Heating Up") &&
                        Combustion && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 && WoW.SpellCooldownTimeRemaining("Combustion") > 6000 && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Phoenix's Flames");
                        return;
                    }

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

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

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

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

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

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

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

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


                    if (!WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Heating Up") && WoW.CanCast("Fireball") && WoW.IsSpellInRange("Fireball") && !WoW.IsMoving && !WoW.PlayerIsChanneling &&
                        !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (!WoW.PlayerIsCasting && WoW.CanCast("Fireball") && WoW.IsSpellInRange("Fireball") && !WoW.IsMoving && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && !WoW.PlayerHasBuff("Hot Streak!"))
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (WoW.IsMoving && WoW.IsSpellInRange("Fireball") && !WoW.PlayerHasBuff("Hot Streak!") && !WoW.PlayerHasBuff("Heating Up"))
                    {
                        WoW.CastSpell("Fireball");
                        return;
                    }
                    if (!WoW.PlayerHasBuff("Combustion") && !WoW.IsMoving && WoW.CanCast("Fireball") && !WoW.PlayerIsCasting && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 && WoW.PlayerSpellCharges("Fire Blast") >= 1 && WoW.PlayerSpellCharges("Phoenix's Flames") >= 1 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        !WoW.IsSpellOnCooldown("Fire Blast") && WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && !WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") >= 2000 ||
                        WoW.CanCast("Fireball") && !WoW.IsMoving && !WoW.PlayerIsCasting && !WoW.PlayerHasBuff("Combustion") && WoW.PlayerHasBuff("Heating Up") &&
                        WoW.IsSpellOnCooldown("Fire Blast") && !WoW.IsSpellOnCooldown("Phoenix's Flames") && WoW.SpellCooldownTimeRemaining("Combustion") <= 2000)
                    {
                        WoW.CastSpell("Fireball");
                    }
                }
            }
        }
Ejemplo n.º 4
0
        public void MGRotation()
        {
            if (isCheckHotkeysFrostOffensivePillarofFrost && isMelee && combatRoutine.UseCooldowns && !WoW.IsSpellOnCooldown("PillarofFrost") && WoW.Level >= 57)
            {
                WoW.CastSpell("PillarofFrost");
            }
            if (combatRoutine.UseCooldowns && isCheckHotkeysFrostOffensiveErW && isMelee && currentRunes == 0 && WoW.PlayerHasBuff("PillarofFrost") && !WoW.IsSpellOnCooldown("Empower Rune") && WoW.Level >= 57)
            {
                WoW.CastSpell("Empower Rune");
            }
            if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave) // Do Single Target Stuff here
            {
                if (CanCastInRange("Frost Strike") && (!WoW.PlayerHasBuff("Icy Talons") || WoW.PlayerBuffTimeRemaining("Icy Talons") <= 200) && runicPower >= 25 &&
                    !(combatRoutine.UseCooldowns && CanCastNoRange("Obliteration") && WoW.Talent(7) == 1) &&
                    (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration"))))
                {
                    Log.Write("Hasbuff " + WoW.PlayerHasBuff("Icy Talons") + " Remaining " + WoW.PlayerBuffTimeRemaining("Icy Talons"));
                    WoW.CastSpell("Frost Strike");
                    return;
                }
                if (isMelee && WoW.HealthPercent <= 40 && WoW.Level >= 55 && WoW.PlayerHasBuff("Free DeathStrike") && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration"))))
                {
                    WoW.CastSpell("Death Strike");
                    return;
                }
                if (CanCastInRange("Howling Blast") && !WoW.IsSpellOnCooldown("Howling Blast") && WoW.Level >= 55 && !WoW.TargetHasDebuff("Frost Fever") && currentRunes >= 1 &&
                    (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration"))))
                {
                    WoW.CastSpell("Howling Blast");
                    return;
                }
                if (WoW.Talent(6) == 1 && runicPower >= 80 && CanCastInRange("Frost Strike"))
                {
                    WoW.CastSpell("Frost Strike");
                    return;
                }
                if (CanCastInRange("Howling Blast") && WoW.PlayerHasBuff("Rime") && WoW.Level >= 55 && (WoW.Talent(7) != 1 || (WoW.Talent(7) == 1 && !WoW.PlayerHasBuff("Obliteration"))))
                {
                    WoW.CastSpell("Howling Blast");
                    return;
                }

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

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

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

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

                if (WoW.CanCast("Sindragosa's Fury") && (DetectKeyPress.GetKeyState(0x5A) < 0) && WoW.Level >= 110)
                {
                    WoW.CastSpell("Sindragosa's Fury");
                    return;
                }
            }
        }
Ejemplo n.º 5
0
        public override void Pulse()
        {
            if (WoW.IsMounted)
            {
                return;
            }

            // if (WoW.TargetIsCasting && interruptwatch.ElapsedMilliseconds > 1200)
            // {
            // if (!WoW.IsSpellOnCooldown("Sigil of Silence") && WoW.WasLastCasted("Arcane Torrent"))
            // {

            // WoW.CastSpell("Sigil of Silence");
            // interruptwatch.Reset();
            // interruptwatch.Start();
            // return;
            // }

            // if (!WoW.IsSpellOnCooldown("Arcane Torrent") && WoW.WasLastCasted("Sigil of Silence"))
            // {

            // WoW.CastSpell("Arcane Torrent");
            // interruptwatch.Reset();
            // interruptwatch.Start();
            // return;
            // }
            // }
            if (UseCooldowns)
            {
            }

            if (combatRoutine.Type != RotationType.SingleTarget && combatRoutine.Type != RotationType.AOE)
            {
                return;
            }

            if (!WoW.HasTarget || !WoW.TargetIsEnemy)
            {
                return;
            }

            if (WoW.HasBossTarget && !WoW.IsSpellOnCooldown("FOTI") && WoW.IsSpellInRange("Chaos Strike"))
            {
                WoW.CastSpell("FOTI");
                return;
            }

            if (WoW.CanCast("FOTI") && !WoW.IsSpellOnCooldown("FOTI") && WoW.IsSpellInRange("Chaos Strike") &&
                WoW.CountEnemyNPCsInRange >= 2 && !WoW.IsMoving)
            {
                WoW.CastSpell("FOTI");
                return;
            }

            if (WoW.CanCast("Eye Beam") && WoW.Fury > 50 && WoW.CountEnemyNPCsInRange >= 2 &&
                !WoW.IsMoving)
            {
                WoW.CastSpell("Eye Beam");
                return;
            }
            {
                if (WoW.PlayerHasBuff("Metamorphosis"))
                {
                    if (WoW.CanCast("Nemesis") && !WoW.IsSpellOnCooldown("Nemesis"))
                    {
                        WoW.CastSpell("Nemesis");
                    }

                    if (WoW.CanCast("Chaos Blades") && (!WoW.IsSpellOnCooldown("Chaos Blades") && (!WoW.PlayerHasBuff("Chaos Blades Buff"))))
                    {
                        WoW.CastSpell("Chaos Blades");
                    }

                    if (WoW.CanCast("Death Sweep") && !WoW.IsSpellOnCooldown("Death Sweep") && WoW.IsSpellInRange("Annihilation") &&
                        WoW.Fury > 15)
                    {
                        WoW.CastSpell("Death Sweep");
                        return;
                    }

                    if (WoW.CanCast("Annihilation") && !WoW.IsSpellOnCooldown("Annihilation") && WoW.IsSpellInRange("Annihilation") &&
                        WoW.Fury > 40)
                    {
                        WoW.CastSpell("Annihilation");
                        return;
                    }

                    if (WoW.CanCast("Felblade") && WoW.IsSpellInRange("Annihilation"))
                    {
                        WoW.CastSpell("Felblade");
                        return;
                    }
                    if (WoW.CanCast("Throw Glaive") && !WoW.TargetHasDebuff("Bloodlet"))
                    {
                        WoW.CastSpell("Throw Glaive");
                        return;
                    }
                }
                if (!WoW.PlayerHasBuff("Metamorphosis"))
                {
                    if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.IsSpellInRange("Chaos Strike"))
                    {
                        WoW.CastSpell("Eye Beam");
                        return;
                    }
                    if (WoW.CanCast("Throw Glaive") && !WoW.TargetHasDebuff("Bloodlet"))
                    {
                        WoW.CastSpell("Throw Glaive");
                        return;
                    }
                    if (WoW.CanCast("Felblade"))                             // Fury Generator
                    {
                        WoW.CastSpell("Felblade");
                        return;
                    }
                    if (WoW.CanCast("Chaos Blades") && (!WoW.IsSpellOnCooldown("Chaos Blades") && (!WoW.PlayerHasBuff("Chaos Blades Buff"))))
                    {
                        WoW.CastSpell("Chaos Blades");
                    }
                    if (WoW.CanCast("Nemesis") && !WoW.IsSpellOnCooldown("Nemesis") && WoW.IsSpellInRange("Chaos Strike"))
                    {
                        WoW.CastSpell("Nemesis");
                        return;
                    }
                    if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike") && !WoW.IsSpellOnCooldown("FOTI") && !WoW.IsMoving)
                    {
                        WoW.CastSpell("FOTI");
                        return;
                    }
                    if (WoW.CanCast("Eye Beam") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 50)
                    {
                        WoW.CastSpell("Eye Beam");
                        return;
                    }
                    if (WoW.CanCast("Blade Dance") && WoW.IsSpellInRange("Chaos Strike"))
                    {
                        WoW.CastSpell("Blade Dance");
                        return;
                    }
                    if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") && WoW.IsSpellOnCooldown("Eye Beam") && (WoW.Fury >= 40 || WoW.Fury >= 70))
                    {
                        WoW.CastSpell("Chaos Strike");
                        return;
                    }
                }
                if (WoW.CanCast("Blade Dance") && !WoW.IsSpellOnCooldown("Blade Dance") && WoW.IsSpellInRange("Chaos Strike") &&
                    WoW.Fury > 15)
                {
                    WoW.CastSpell("Blade Dance");
                    return;
                }

                if (WoW.CanCast("Felblade") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury < 110)
                {
                    WoW.CastSpell("Felblade");
                    return;
                }

                if (WoW.CanCast("Chaos Strike") && !WoW.IsSpellOnCooldown("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") &&
                    WoW.Fury > 40)
                {
                    WoW.CastSpell("Chaos Strike");
                    return;
                }

                if (WoW.CanCast("Felblade") && WoW.IsSpellInRange("Chaos Strike"))
                {
                    WoW.CastSpell("Felblade");
                    return;
                }
            }
            //if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator
            //{
            //    WoW.CastSpell("Demons Bite");
            //}
        }
        public override void Pulse() // Updated for Legion (tested and working for single target)
        {
            if (WoW.IsInCombat && Control.IsKeyLocked(Keys.Scroll) && !WoW.TargetIsPlayer && !WoW.IsMounted)
            {
                SelectRotation(4, 9999, 1);
            }

            //Dark Pact
            if (WoW.CanCast("Dark Pact") &&
                WoW.Talent(5) == 3 &&
                WoW.HealthPercent <= 30 &&
                !WoW.IsMounted)
            {
                WoW.CastSpell("Dark Pact");
                return;
            }

            //Shadowfury
            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LMENU) < 0 &&
                WoW.Talent(3) == 3 &&
                !WoW.IsMoving &&
                WoW.CanCast("Shadowfury"))
            {
                WoW.CastSpell("Shadowfury");
                return;
            }

            if (UseCooldowns)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted)
                {
                    //Doomguard
                    if (WoW.CanCast("Doomguard") &&
                        (WoW.Talent(6) == 0 || WoW.Talent(6) == 2 || WoW.Talent(6) == 3) &&
                        WoW.CurrentSoulShards >= 1 &&
                        WoW.IsSpellInRange("Doom"))
                    {
                        WoW.CastSpell("Doomguard");
                        return;
                    }

                    //Grimoire of Service
                    if (WoW.CanCast("Grimoire: Felguard") &&
                        WoW.Talent(6) == 2 &&
                        WoW.CurrentSoulShards >= 1 &&
                        WoW.IsSpellInRange("Doom"))
                    {
                        WoW.CastSpell("Grimoire: Felguard");
                        return;
                    }

                    //Soul Harvest
                    if (WoW.CanCast("Soul Harvest") &&
                        WoW.Talent(4) == 3 &&
                        !WoW.IsMoving &&
                        WoW.IsSpellInRange("Doom") &&
                        (WoW.PlayerHasBuff("Bloodlust") || WoW.PlayerHasBuff("Time Warp") || WoW.PlayerHasBuff("Netherwinds") || WoW.PlayerHasBuff("Drums of War") || WoW.PlayerHasBuff("Heroism")))
                    {
                        WoW.CastSpell("Soul Harvest");
                        return;
                    }
                }
            }

            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted)
                {
                    if ((!WoW.TargetHasDebuff("Doom") || WoW.TargetDebuffTimeRemaining("Doom") <= 150) &&
                        WoW.CanCast("Doom") &&
                        WoW.IsSpellInRange("Doom"))
                    {
                        WoW.CastSpell("Doom");
                        return;
                    }

                    if (WoW.CanCast("Darkglare") &&
                        WoW.Talent(7) == 1 &&
                        WoW.CurrentSoulShards >= 1 &&
                        WoW.IsSpellInRange("Doom"))
                    {
                        WoW.CastSpell("Darkglare");
                        return;
                    }

                    if (WoW.CanCast("Call Dreadstalkers") &&
                        (WoW.CurrentSoulShards >= 2 || WoW.TargetHasDebuff("Demonic Calling")) &&
                        WoW.IsSpellInRange("Doom") &&
                        !WoW.IsMoving)
                    {
                        WoW.CastSpell("Call Dreadstalkers");
                        return;
                    }

                    if (WoW.CanCast("Hand of Guldan") &&
                        WoW.CurrentSoulShards >= 4 &&
                        WoW.IsSpellInRange("Doom") &&
                        !WoW.IsMoving)
                    {
                        WoW.CastSpell("Hand of Guldan");
                        return;
                    }

                    if (WoW.CanCast("Demonic Empowerment") &&
                        !WoW.IsMoving &&
                        !WoW.WasLastCasted("Demonic Empowerment") &&
                        (!WoW.PetHasBuff("Demonic Empowerment") || WoW.PetBuffTimeRemaining("Demonic Empowerment") <= 1.5 ||
                         WoW.WasLastCasted("Call Dreadstalkers") || WoW.WasLastCasted("Grimoire: Felguard") || WoW.WasLastCasted("Doomguard") || WoW.WasLastCasted("Hand of Guldan")))
                    {
                        WoW.CastSpell("Demonic Empowerment");
                        Thread.Sleep(1000);
                        return;
                    }

                    if (WoW.CanCast("Talkiels Consumption") &&
                        WoW.PetHasBuff("Demonic Empowerment") &&
                        WoW.PetBuffTimeRemaining("Demonic Empowerment") >= 2 &&
                        WoW.DreadstalkersCount >= 1 &&
                        WoW.IsSpellInRange("Doom") &&
                        !WoW.IsMoving)
                    {
                        WoW.CastSpell("Talkiels Consumption");
                        return;
                    }

                    if (WoW.CanCast("Felstorm") &&
                        WoW.PetHasBuff("Demonic Empowerment") &&
                        WoW.PetBuffTimeRemaining("Demonic Empowerment") >= 6 &&
                        WoW.IsSpellInRange("Doom"))
                    {
                        WoW.CastSpell("Felstorm");
                        return;
                    }

                    if (WoW.CanCast("Shadowflame") &&
                        WoW.Talent(1) == 2 &&
                        !WoW.TargetHasDebuff("Shadowflame") &&
                        WoW.CanCast("Shadowflame") &&
                        WoW.IsSpellInRange("Doom"))
                    {
                        WoW.CastSpell("Shadowflame");
                        return;
                    }

                    if (WoW.CanCast("Life Tap") &&
                        WoW.Mana < 60 &&
                        WoW.HealthPercent > 50)
                    {
                        WoW.CastSpell("Life Tap");
                        return;
                    }

                    if (WoW.CanCast("Demonwrath") &&
                        WoW.Mana > 60 &&
                        WoW.IsMoving)
                    {
                        WoW.CastSpell("Demonwrath");
                        return;
                    }

                    if ((WoW.CanCast("Shadow Bolt") || WoW.CanCast("Demonbolt")) &&
                        WoW.IsSpellInRange("Doom") &&
                        !WoW.IsMoving)
                    {
                        WoW.CastSpell("Shadow Bolt");
                        WoW.CastSpell("Demonbolt");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted)
                {
                    if (WoW.CanCast("Hand of Guldan") &&
                        WoW.CurrentSoulShards >= 4 &&
                        WoW.IsSpellInRange("Doom") &&
                        !WoW.IsMoving)
                    {
                        WoW.CastSpell("Hand of Guldan");
                        return;
                    }

                    if (WoW.CanCast("Implosion") &&
                        WoW.Talent(2) == 3 &&
                        WoW.WildImpsCount >= 1 &&
                        WoW.IsSpellInRange("Doom"))
                    {
                        WoW.CastSpell("Implosion");
                        return;
                    }

                    if (WoW.CanCast("Darkglare") &&
                        WoW.Talent(7) == 1 &&
                        WoW.CurrentSoulShards >= 1 &&
                        WoW.IsSpellInRange("Doom"))
                    {
                        WoW.CastSpell("Darkglare");
                        return;
                    }

                    if (WoW.CanCast("Demonic Empowerment") &&
                        WoW.CanCast("Felstorm") &&
                        !WoW.IsMoving &&
                        !WoW.WasLastCasted("Demonic Empowerment") &&
                        (!WoW.PetHasBuff("Demonic Empowerment") || WoW.PetBuffTimeRemaining("Demonic Empowerment") <= 6))
                    {
                        WoW.CastSpell("Demonic Empowerment");
                        Thread.Sleep(2000);
                        return;
                    }

                    if (WoW.CanCast("Felstorm") &&
                        WoW.PetHasBuff("Demonic Empowerment") &&
                        WoW.PetBuffTimeRemaining("Demonic Empowerment") >= 6 &&
                        WoW.IsSpellInRange("Doom"))
                    {
                        WoW.CastSpell("Felstorm");
                        return;
                    }

                    if (WoW.CanCast("Life Tap") &&
                        WoW.Mana < 60 &&
                        WoW.HealthPercent > 50)
                    {
                        WoW.CastSpell("Life Tap");
                        return;
                    }

                    if (WoW.CanCast("Demonwrath") &&
                        WoW.Mana > 60)
                    {
                        WoW.CastSpell("Demonwrath");
                        return;
                    }
                }
            }

            if (combatRoutine.Type == RotationType.SingleTargetCleave)
            {
                // Do Single Target Cleave stuff here if applicable else ignore this one
            }
        }
Ejemplo n.º 7
0
        public override void Pulse()
        {
            //Combat Time
            if (CombatTime.IsRunning && !WoW.IsInCombat)
            {
                CombatTime.Reset();
            }
            if (!CombatTime.IsRunning && WoW.IsInCombat)
            {
                CombatTime.Start();
            }

            if (!WoW.PlayerHasBuff("HitCombo"))
            {
                HitCombo = "";
            }

            if (!WoW.IsInCombat || (!WoW.TargetHasDebuff("TouchOfDeath") && !WoW.PlayerHasBuff("Serenity")) || (IsOpenerDone && !Serenity))
            {
                OpenerOrder = 1;
            }

            var EnergyPct = WoW.Energy / EnergyMax * 100f;

            // Single Target Rotation
            if (combatRoutine.Type == RotationType.SingleTarget)
            {
                //Log.Write($"[HitCombo] '{HitCombo}'");
                //Stop Casting CJL
                if (HitCombo == "CracklingJadeLightning" && WoW.PlayerIsChanneling)
                {
                    WoW.CastSpell("StopCasting");
                    return;
                }

                //Cooldowns
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
                {
                    //Touch Of Death
                    if (WoW.CanCast("TouchOfDeath") && WoW.IsSpellInRange("TigerPalm") && !GaleBurst && UseCooldowns)
                    {
                        WoW.CastSpell("TouchOfDeath");
                        HitCombo = "TouchOfDeath";
                        return;
                    }

                    //Touch Of Death (Serenity talent) [Gale]
                    if (WoW.CanCast("TouchOfDeath") && WoW.IsSpellInRange("TigerPalm") && WoW.SpellCooldownTimeRemaining("Serenity") < 2 && WoW.SpellCooldownTimeRemaining("RisingSunKick") < 2 &&
                        WoW.SpellCooldownTimeRemaining("FistsOfFury") < 8 && WoW.SpellCooldownTimeRemaining("StrikeOfTheWindlord") <= 4 && Serenity && GaleBurst && WoW.CurrentChi >= 2 &&
                        UseCooldowns)
                    {
                        WoW.CastSpell("TouchOfDeath");
                        HitCombo = "TouchOfDeath";
                        return;
                    }

                    //Touch Of Death (WDP talent) [Gale]
                    if (WoW.CanCast("TouchOfDeath") && WoW.IsSpellInRange("TigerPalm") && WoW.SpellCooldownTimeRemaining("RisingSunKick") < 7 &&
                        WoW.SpellCooldownTimeRemaining("FistsOfFury") <= 4 && WoW.SpellCooldownTimeRemaining("StrikeOfTheWindlord") < 8 && !Serenity && GaleBurst && WoW.CurrentChi >= 2 &&
                        UseCooldowns)
                    {
                        WoW.CastSpell("TouchOfDeath");
                        HitCombo = "TouchOfDeath";
                        return;
                    }

                    //Serenity
                    if (WoW.CanCast("Serenity") && WoW.IsSpellInRange("TigerPalm") && (WoW.IsSpellOnCooldown("TouchOfDeath") || WoW.TargetHasDebuff("TouchOfDeath")) &&
                        WoW.SpellCooldownTimeRemaining("FistsOfFury") < 15 && WoW.SpellCooldownTimeRemaining("StrikeOfTheWindlord") < 13 && !WoW.IsSpellOnCooldown("RisingSunKick") && Serenity &&
                        UseCooldowns)
                    {
                        WoW.CastSpell("Serenity");
                        return;
                    }

                    //SEF (Opener not done)
                    if (WoW.CanCast("SEF") && WoW.IsSpellInRange("TigerPalm") && WoW.CurrentChi >= 2 && !IsOpenerDone && !WoW.PlayerHasBuff("SEF") && !Serenity && UseCooldowns)
                    {
                        WoW.CastSpell("SEF");
                        return;
                    }

                    //SEF
                    if (WoW.CanCast("SEF") && WoW.IsSpellInRange("TigerPalm") && IsOpenerDone && (WoW.IsSpellOnCooldown("TouchOfDeath") || WoW.TargetHasDebuff("TouchOfDeath")) &&
                        WoW.SpellCooldownTimeRemaining("FistsOfFury") <= 6 && WoW.SpellCooldownTimeRemaining("StrikeOfTheWindlord") <= 14 &&
                        WoW.SpellCooldownTimeRemaining("RisingSunKick") <= 6 && !WoW.PlayerHasBuff("SEF") && !Serenity &&
                        (!WoW.IsSpellOnCooldown("EnergizingElixir") || WoW.PlayerSpellCharges("SEF") == 2 || WoW.TargetHasDebuff("TouchOfDeath")) && UseCooldowns)
                    {
                        WoW.CastSpell("SEF");
                        return;
                    }

                    //Energizing Elixir
                    if (WoW.CanCast("EnergizingElixir") && WoW.IsSpellInRange("TigerPalm") && IsOpenerDone && WoW.PlayerHasBuff("SEF"))
                    {
                        WoW.CastSpell("EnergizingElixir");
                        return;
                    }

                    //Energizing Elixir
                    if (WoW.CanCast("EnergizingElixir") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy < EnergyMax && (IsOpenerDone || !Serenity) && WoW.CurrentChi <= 1 &&
                        (!WoW.IsSpellOnCooldown("StrikeOfTheWindlord") || !WoW.IsSpellOnCooldown("RisingSunKick")))
                    {
                        WoW.CastSpell("EnergizingElixir");
                        return;
                    }
                }

                //Serenity Opener (With Touch of Death)
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("Serenity") &&
                    WoW.TargetHasDebuff("TouchOfDeath"))
                {
                    //Rising Sun Kick
                    if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 1)
                    {
                        WoW.CastSpell("RisingSunKick");
                        HitCombo    = "RisingSunKick";
                        OpenerOrder = 2;
                        return;
                    }

                    //Strike Of The Windlord
                    if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 2)
                    {
                        WoW.CastSpell("StrikeOfTheWindlord");
                        HitCombo    = "StrikeOfTheWindlord";
                        OpenerOrder = 3;
                        return;
                    }

                    //Fists of Fury
                    if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 3)
                    {
                        WoW.CastSpell("FistsOfFury");
                        HitCombo    = "FistsOfFury";
                        OpenerOrder = 4;
                        return;
                    }

                    //Rising Sun Kick
                    if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 4)
                    {
                        WoW.CastSpell("RisingSunKick");
                        HitCombo    = "RisingSunKick";
                        OpenerOrder = 5;
                        return;
                    }

                    //Spinning Crane Kick
                    if (WoW.CanCast("SpinningCraneKick") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 5)
                    {
                        WoW.CastSpell("SpinningCraneKick");
                        HitCombo    = "SpinningCraneKick";
                        OpenerOrder = 6;
                        return;
                    }

                    //Blackout Kick
                    if (WoW.CanCast("BlackoutKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "BlackoutKick" && OpenerOrder == 6)
                    {
                        WoW.CastSpell("BlackoutKick");
                        HitCombo = "BlackoutKick";
                        return;
                    }
                }

                //WDP Opener
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("SEF") && WoW.TargetHasDebuff("TouchOfDeath") &&
                    !IsOpenerDone)
                {
                    //Rising Sun Kick
                    if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 1)
                    {
                        WoW.CastSpell("RisingSunKick");
                        HitCombo    = "RisingSunKick";
                        OpenerOrder = 2;
                        return;
                    }

                    //Energizing Elixir
                    if (WoW.CanCast("EnergizingElixir") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 2)
                    {
                        WoW.CastSpell("EnergizingElixir");
                        OpenerOrder = 3;
                        return;
                    }

                    //Fists of Fury
                    if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 3)
                    {
                        WoW.CastSpell("FistsOfFury");
                        HitCombo    = "FistsOfFury";
                        OpenerOrder = 4;
                        return;
                    }

                    //Strike Of The Windlord
                    if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm") && OpenerOrder == 4)
                    {
                        WoW.CastSpell("StrikeOfTheWindlord");
                        HitCombo    = "StrikeOfTheWindlord";
                        OpenerOrder = 5;
                        return;
                    }

                    //Tiger Palm
                    if (WoW.CanCast("TigerPalm") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "TigerPalm" && OpenerOrder == 5)
                    {
                        WoW.CastSpell("TigerPalm");
                        HitCombo    = "TigerPalm";
                        OpenerOrder = 6;
                        return;
                    }

                    //Whirling Dragon Punch
                    if (WoW.CanCast("WhirlingDragonPunch") && WoW.IsSpellInRange("TigerPalm") && WoW.IsSpellOnCooldown("FistsOfFury") && WoW.IsSpellOnCooldown("RisingSunKick") &&
                        OpenerOrder == 6)
                    {
                        WoW.CastSpell("WhirlingDragonPunch");
                        HitCombo     = "WhirlingDragonPunch";
                        IsOpenerDone = true;
                        return;
                    }
                }

                //Serenity Rotation
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("Serenity") &&
                    !WoW.TargetHasDebuff("TouchOfDeath"))
                {
                    //Strike Of The Windlord
                    if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm"))
                    {
                        WoW.CastSpell("StrikeOfTheWindlord");
                        HitCombo = "StrikeOfTheWindlord";
                        WasStrikeOfTheWindlordCasted = true;
                        return;
                    }

                    //Rising Sun Kick
                    if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm"))
                    {
                        WoW.CastSpell("RisingSunKick");
                        HitCombo = "RisingSunKick";
                        return;
                    }

                    //Fists of Fury
                    if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && WasStrikeOfTheWindlordCasted && WoW.PlayerBuffTimeRemaining("Serenity") <= 2)
                    {
                        WoW.CastSpell("FistsOfFury");
                        HitCombo = "FistsOfFury";
                        WasStrikeOfTheWindlordCasted = false;
                        return;
                    }

                    //Spinning Crane Kick
                    if (WoW.CanCast("SpinningCraneKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "SpinningCraneKick" && (HitCombo == "BlackoutKick" || OpenerOrder == 5))
                    {
                        WoW.CastSpell("SpinningCraneKick");
                        HitCombo = "SpinningCraneKick";
                        return;
                    }

                    //Blackout Kick
                    if (WoW.CanCast("BlackoutKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "BlackoutKick")
                    {
                        WoW.CastSpell("BlackoutKick");
                        HitCombo = "BlackoutKick";
                        return;
                    }
                }

                // Normal Rotation
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Serenity") &&
                    (!WoW.TargetHasDebuff("TouchOfDeath") || !Serenity))
                {
                    //Fists of Fury
                    if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && (WoW.CurrentChi >= 3 || (Katsuo && WoW.CurrentChi >= 1)) && !WoW.WasLastCasted("EnergizingElixir"))
                    {
                        WoW.CastSpell("FistsOfFury");
                        HitCombo = "FistsOfFury";
                        return;
                    }

                    //Strike Of The Windlord
                    if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm") && WoW.CurrentChi >= 2)
                    {
                        WoW.CastSpell("StrikeOfTheWindlord");
                        HitCombo = "StrikeOfTheWindlord";
                        return;
                    }

                    //Tiger Palm (if <4 Chi and about to cap energy)
                    if (WoW.CanCast("TigerPalm") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy >= 50 && EnergyPct > 90 && !WoW.WasLastCasted("EnergizingElixir") && WoW.CurrentChi < 4 &&
                        HitCombo != "TigerPalm")
                    {
                        WoW.CastSpell("TigerPalm");
                        HitCombo = "TigerPalm";
                        return;
                    }

                    //Rising Sun Kick
                    if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm") && WoW.CurrentChi >= 2)
                    {
                        WoW.CastSpell("RisingSunKick");
                        HitCombo = "RisingSunKick";
                        return;
                    }

                    //Whirling Dragon Punch
                    if (WoW.CanCast("WhirlingDragonPunch") && WoW.IsSpellInRange("TigerPalm") && WoW.IsSpellOnCooldown("FistsOfFury") && WoW.IsSpellOnCooldown("RisingSunKick") && !Serenity)
                    {
                        WoW.CastSpell("WhirlingDragonPunch");
                        HitCombo = "WhirlingDragonPunch";
                        return;
                    }

                    //Chi Wave
                    if (WoW.CanCast("ChiWave") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy < 50 && WoW.CurrentChi < 5 && !WoW.PlayerHasBuff("SEF"))
                    {
                        WoW.CastSpell("ChiWave");
                        HitCombo = "ChiWave";
                        return;
                    }

                    //Blackout Kick
                    if (WoW.CanCast("BlackoutKick") && WoW.IsSpellInRange("TigerPalm") && (WoW.CurrentChi > 1 || WoW.PlayerHasBuff("BlackoutKick!")) && HitCombo != "BlackoutKick")
                    {
                        WoW.CastSpell("BlackoutKick");
                        HitCombo = "BlackoutKick";
                        return;
                    }

                    //Tiger Palm
                    if (WoW.CanCast("TigerPalm") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy >= 50 && HitCombo != "TigerPalm")
                    {
                        WoW.CastSpell("TigerPalm");
                        HitCombo = "TigerPalm";
                        return;
                    }

                    //CracklingJadeLightning (only to counter the Tiger Palm issue)
                    if (WoW.CanCast("CracklingJadeLightning") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy >= 20 && HitCombo == "TigerPalm" && WoW.CurrentChi == 0)
                    {
                        WoW.CastSpell("CracklingJadeLightning");
                        HitCombo = "CracklingJadeLightning";
                        return;
                    }
                }
            }

            // AoE Rotation
            if (combatRoutine.Type == RotationType.AOE)
            {
                if (HitCombo == "CracklingJadeLightning" && WoW.PlayerIsChanneling)
                {
                    WoW.CastSpell("StopCasting");
                    return;
                }

                //Cooldowns
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
                {
                    //Energizing Elixir
                    if (WoW.CanCast("EnergizingElixir") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy < EnergyMax && WoW.CurrentChi <= 1 &&
                        (!WoW.IsSpellOnCooldown("StrikeOfTheWindlord") || !WoW.IsSpellOnCooldown("RisingSunKick")))
                    {
                        WoW.CastSpell("EnergizingElixir");
                        return;
                    }
                }

                //Serenity Rotation
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.PlayerHasBuff("Serenity"))
                {
                    //Strike Of The Windlord
                    if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm"))
                    {
                        WoW.CastSpell("StrikeOfTheWindlord");
                        HitCombo = "StrikeOfTheWindlord";
                        WasStrikeOfTheWindlordCasted = true;
                        return;
                    }

                    //Rising Sun Kick
                    if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm"))
                    {
                        WoW.CastSpell("RisingSunKick");
                        HitCombo = "RisingSunKick";
                        return;
                    }

                    //Fists of Fury
                    if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && WasStrikeOfTheWindlordCasted && WoW.PlayerBuffTimeRemaining("Serenity") <= 2)
                    {
                        WoW.CastSpell("FistsOfFury");
                        HitCombo = "FistsOfFury";
                        WasStrikeOfTheWindlordCasted = false;
                        return;
                    }

                    //Spinning Crane Kick
                    if (WoW.CanCast("SpinningCraneKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "SpinningCraneKick" && (HitCombo == "BlackoutKick" || OpenerOrder == 5))
                    {
                        WoW.CastSpell("SpinningCraneKick");
                        HitCombo = "SpinningCraneKick";
                        return;
                    }

                    //Blackout Kick
                    if (WoW.CanCast("BlackoutKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "BlackoutKick")
                    {
                        WoW.CastSpell("BlackoutKick");
                        HitCombo = "BlackoutKick";
                        return;
                    }
                }

                // Normal Rotation
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Serenity") &&
                    (!WoW.TargetHasDebuff("TouchOfDeath") || !Serenity))
                {
                    //Fists of Fury
                    if (WoW.CanCast("FistsOfFury") && WoW.IsSpellInRange("TigerPalm") && (WoW.CurrentChi >= 3 || (Katsuo && WoW.CurrentChi >= 1)) && !WoW.WasLastCasted("EnergizingElixir"))
                    {
                        WoW.CastSpell("FistsOfFury");
                        HitCombo = "FistsOfFury";
                        return;
                    }

                    //Whirling Dragon Punch
                    if (WoW.CanCast("WhirlingDragonPunch") && WoW.IsSpellInRange("TigerPalm") && WoW.IsSpellOnCooldown("FistsOfFury") && WoW.IsSpellOnCooldown("RisingSunKick") && !Serenity)
                    {
                        WoW.CastSpell("WhirlingDragonPunch");
                        HitCombo = "WhirlingDragonPunch";
                        return;
                    }

                    //Strike Of The Windlord
                    if (WoW.CanCast("StrikeOfTheWindlord") && WoW.IsSpellInRange("TigerPalm") && WoW.CurrentChi >= 2)
                    {
                        WoW.CastSpell("StrikeOfTheWindlord");
                        HitCombo = "StrikeOfTheWindlord";
                        return;
                    }

                    //Rising Sun Kick
                    if (WoW.CanCast("RisingSunKick") && WoW.IsSpellInRange("TigerPalm") && WoW.CurrentChi >= 2 && !Serenity && WoW.SpellCooldownTimeRemaining("WhirlingDragonPunch") < gcd * 2 &&
                        WoW.IsSpellOnCooldown("FistsOfFury"))
                    {
                        WoW.CastSpell("RisingSunKick");
                        HitCombo = "RisingSunKick";
                        return;
                    }

                    //Spinning Crane Kick
                    if (WoW.CanCast("SpinningCraneKick") && WoW.IsSpellInRange("TigerPalm") && HitCombo != "SpinningCraneKick" && WoW.CurrentChi >= 3)
                    {
                        WoW.CastSpell("SpinningCraneKick");
                        HitCombo = "SpinningCraneKick";
                        return;
                    }

                    //Chi Wave
                    if (WoW.CanCast("ChiWave") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy < 50 && WoW.CurrentChi < 5 && !WoW.PlayerHasBuff("SEF") && HitCombo == "TigerPalm")
                    {
                        WoW.CastSpell("ChiWave");
                        HitCombo = "ChiWave";
                        return;
                    }

                    //Blackout Kick
                    if (WoW.CanCast("BlackoutKick") && WoW.IsSpellInRange("TigerPalm") && (WoW.CurrentChi > 1 || WoW.PlayerHasBuff("BlackoutKick!")) && HitCombo != "BlackoutKick" &&
                        (HitCombo == "TigerPalm" || !WoW.TargetHasDebuff("MotC")))
                    {
                        WoW.CastSpell("BlackoutKick");
                        HitCombo = "BlackoutKick";
                        return;
                    }

                    //Tiger Palm
                    if (WoW.CanCast("TigerPalm") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy >= 50 && HitCombo != "TigerPalm")
                    {
                        WoW.CastSpell("TigerPalm");
                        HitCombo = "TigerPalm";
                        return;
                    }

                    //CracklingJadeLightning (only to counter the Tiger Palm issue)
                    if (WoW.CanCast("CracklingJadeLightning") && WoW.IsSpellInRange("TigerPalm") && WoW.Energy >= 20 && HitCombo == "TigerPalm" && WoW.CurrentChi == 0)
                    {
                        WoW.CastSpell("CracklingJadeLightning");
                        HitCombo = "CracklingJadeLightning";
                    }
                }
            }
        }
Ejemplo n.º 8
0
        public override void Pulse()
        {
            var SavageRoarTime = WoW.PlayerBuffTimeRemaining("SavageRoar"); // 200 = 2 seconds
            var RakeTime       = WoW.TargetDebuffTimeRemaining("Rake");
            var RipTime        = WoW.TargetDebuffTimeRemaining("Rip");
            var MoonfireTime   = WoW.TargetDebuffTimeRemaining("Moonfire");

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

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

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

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

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

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

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

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

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

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

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

            // When using Brutal Slash, try to make sure that you always have at least one charge on cooldown,
            // but have as many charges as possible when a wave of enemies comes into range.
            // Try to have short duration buffs such as Tiger's Fury and Bloodtalons active
            // on as many high target casts of this as possible, as it deals massive AoE burst damage with each cast.
            WoW.CastSpell("BrutalSlash", WoW.Talent(6) == 2 && WoW.Energy >= 20 && WoW.PlayerSpellCharges("BrutalSlash") > 1);
            WoW.CastSpell("BrutalSlash", WoW.Talent(6) == 2 && WoW.Energy >= 20 && WoW.PlayerSpellCharges("BrutalSlash") == 1 && WoW.PlayerHasBuff("TigersFury"));
        }
Ejemplo n.º 9
0
        public override void Pulse() // Updated for Legion (tested and working for single target)
        {
            renewBones   = !WoW.PlayerHasBuff("Bone Shield") || WoW.PlayerBuffTimeRemaining("Bone Shield") <= 500;
            isMelee      = WoW.CanCast("Marrowrend", false, false, true, false, false);
            bonesStack   = WoW.PlayerBuffStacks("Bone Shield");
            currentRunes = WoW.CurrentRunes;
            runicPower   = WoW.RunicPower;
            if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && WoW.TargetIsVisible)
                {
                    if (isCDDefEnable)
                    {
                        useCDDef();
                    }
                    if ((renewBones || bonesStack < 3) && isMelee)
                    {
                        if (currentRunes >= 2)
                        {
                            WoW.CastSpell("Marrowrend");
                            return;
                        }
                    }
                    if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee && !WoW.TargetHasDebuff("Blood Plague"))
                    {
                        WoW.CastSpell("Blood Boil");
                        return;
                    }
                    if (CanCastNoRange("Consumption") && isMelee)
                    {
                        WoW.CastSpell("Consumption");
                        return;
                    }
                    if (isTalentBloodDrinker && CanCastInRange("BD") && !renewBones && currentRunes >= 1)
                    {
                        WoW.CastSpell("BD");
                        return;
                    }
                    if (isMelee && WoW.PlayerHasBuff("Crimson Scourge") && WoW.TargetHealthPercent >= 10)
                    {
                        WoW.CastSpell("DnD");
                        return;
                    }
                    if (isMelee && runicPower >= 45 && ((WoW.PlayerHasBuff("Ossuary") && (runicPower >= 85 || WoW.HealthPercent < 80)) || WoW.HealthPercent < 50))
                    {
                        WoW.CastSpell("Death Strike");
                        return;
                    }
                    if (isMelee && currentRunes >= 2 && bonesStack <= 6)
                    {
                        WoW.CastSpell("Marrowrend");
                        return;
                    }
                    if (WoW.SpellCooldownTimeRemaining("DnD") == 0 && isMelee && currentRunes >= 2 && WoW.TargetHealthPercent >= 10 && !renewBones && bonesStack > 6)
                    {
                        WoW.CastSpell("DnD");
                        return;
                    }
                    if (isMelee && currentRunes >= 2 && !renewBones && bonesStack > 6)
                    {
                        WoW.CastSpell("Heart Strike");
                        return;
                    }
                    if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee)
                    {
                        WoW.CastSpell("Blood Boil");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && WoW.TargetIsVisible)
                {
                    if (isCDDefEnable)
                    {
                        useCDDef();
                    }
                    if ((renewBones || bonesStack < 3) && isMelee)
                    {
                        if (currentRunes >= 2)
                        {
                            WoW.CastSpell("Marrowrend");
                            return;
                        }
                    }
                    if (WoW.CanCast("Blood Boil", true, true, false, true, true) && isMelee && !WoW.TargetHasDebuff("Blood Plague"))
                    {
                        WoW.CastSpell("Blood Boil");
                        return;
                    }
                    if (isTalentBloodDrinker && CanCastInRange("BD") && WoW.HealthPercent <= 60 && !renewBones && currentRunes >= 1)
                    {
                        WoW.CastSpell("BD");
                        return;
                    }
                    if (CanCastNoRange("Consumption") && isMelee)
                    {
                        WoW.CastSpell("Consumption");
                        return;
                    }
                    if (isMelee && WoW.PlayerHasBuff("Crimson Scourge") && WoW.TargetHealthPercent >= 10)
                    {
                        WoW.CastSpell("DnD");
                        return;
                    }
                    if (isTalentBoneStorm && WoW.SpellCooldownTimeRemaining("Bonestorm") == 0 && isMelee && runicPower >= 100)
                    {
                        WoW.CastSpell("Bonestorm");
                        return;
                    }
                    if (isTalentBoneStorm && isMelee && runicPower >= 45 &&
                        ((runicPower >= 85 && WoW.SpellCooldownTimeRemaining("Bonestorm") >= 300) || WoW.HealthPercent < 70 || WoW.HealthPercent < 50))
                    {
                        WoW.CastSpell("Death Strike");
                        return;
                    }
                    if (!isTalentBoneStorm && isMelee && runicPower >= 45 && (runicPower >= 85 || WoW.HealthPercent < 70))
                    {
                        WoW.CastSpell("Death Strike");
                        return;
                    }

                    if (WoW.SpellCooldownTimeRemaining("DnD") == 0 && isMelee && currentRunes >= 1 && WoW.TargetHealthPercent >= 10 && !renewBones && bonesStack > 2)
                    {
                        WoW.CastSpell("DnD");
                        return;
                    }
                    if (isMelee && currentRunes >= 1 && !renewBones && bonesStack > 2)
                    {
                        WoW.CastSpell("Heart Strike");
                        return;
                    }
                    if (WoW.CanCast("Blood Boil", false, true, false, true, false) && isMelee)
                    {
                        WoW.CastSpell("Blood Boil");
                        return;
                    }
                    if (isTalentBloodDrinker && CanCastInRange("BD") && !renewBones && currentRunes >= 1)
                    {
                        WoW.CastSpell("BD");
                    }
                }
            }
        }
Ejemplo n.º 10
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.º 11
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.CanCast("Summon Water Elemental") && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.HasPet)
                {
                    WoW.CastSpell("Summon Water Elemental");
                    return;
                }

                if (WoW.HasTarget && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Invisibility"))

                {
                    //Movement Control
                    if (WoW.CanCast("Ice Floes") && WoW.IsMoving && !WoW.PlayerHasBuff("Ice Floes"))
                    {
                        WoW.CastSpell("Ice Floes");
                    }
                    //Insta-Cast Flurry on Proc and ice lance for shatter.
                    if (WoW.CanCast("Flurry") && WoW.PlayerHasBuff("Brain Freeze"))
                    {
                        WoW.CastSpell("Flurry");
                    }
                    if (WoW.CanCast("Ice Lance") && WoW.WasLastCasted("Flurry") && WoW.PlayerHasBuff("Icy Veins"))
                    {
                        WoW.CastSpell("Ice Lance");
                    }
                    //RoP Control
                    if (WoW.CanCast("Rune of Power") && !WoW.PlayerHasBuff("Rune of Power") && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 120)
                    {
                        WoW.CastSpell("Rune of Power");
                        return;
                    }
                    //Ray of Frost control
                    if (WoW.CanCast("Ray of Frost") && WoW.PlayerHasBuff("Rune of Power") && WoW.PlayerSpellCharges("Rune of Power") == 0 && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 60)
                    {
                        WoW.CastSpell("Ray of Frost");
                    }

                    // FoF Creation
                    if (WoW.PlayerBuffStacks("Chain Reaction") >= 1 && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 30 && !WoW.WasLastCasted("Flurry"))
                    {
                        if (WoW.CanCast("Frozen Orb") && !WoW.IsSpellOnCooldown("Frozen Orb") && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 60)
                        {
                            WoW.CastSpell("Frozen Orb");
                        }
                        if (WoW.CanCast("Frozen Touch") && WoW.PlayerBuffStacks("Fingers of Frost") <= 1 && WoW.IsSpellOnCooldown("Frozen Orb") && !WoW.WasLastCasted("Frozen Orb"))
                        {
                            WoW.CastSpell("Frozen Touch");
                        }

                        if (WoW.CanCast("Ebonbolt") && !WoW.PlayerHasBuff("Fingers of Frost") && !WoW.PlayerHasBuff("Brain Freeze") && WoW.SpellCooldownTimeRemaining("Icy Veins") >= 45)
                        {
                            WoW.CastSpell("Ebonbolt");
                            return;
                        }
                        //Waterjet on cooldown within parameters
                        if (WoW.CanCast("Water Jet") && WoW.PlayerBuffStacks("Fingers of Frost") <= 1 && !WoW.WasLastCasted("Frozen Touch") && !WoW.WasLastCasted("Frozen Orb") &&
                            WoW.IsSpellOnCooldown("Frozen Orb") && WoW.IsSpellOnCooldown("Frozen Touch"))
                        {
                            WoW.CastSpell("Water Jet");
                        }
                        if (WoW.CanCast("Frostbolt") && WoW.TargetHasDebuff("Water Jet"))
                        {
                            WoW.CastSpell("Frostbolt");
                            return;
                        }
                    }
                    //Ice Lance Control
                    if (WoW.CanCast("Ice Lance") && WoW.WasLastCasted("Frostbolt") && WoW.PlayerHasBuff("Chain Reaction") && WoW.PlayerBuffStacks("Chain Reaction") >= 1 &&
                        WoW.PlayerHasBuff("Fingers of Frost") && WoW.PlayerBuffStacks("Fingers of Frost") >= 2)
                    {
                        WoW.CastSpell("Ice Lance");
                    }
                    if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Fingers of Frost") == 3)
                    {
                        WoW.CastSpell("Ice Lance");
                    }

                    if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Fingers of Frost") >= 1 && WoW.WasLastCasted("Ice Lance"))
                    {
                        WoW.CastSpell("Ice Lance");
                    }
                    if (WoW.CanCast("Ice Lance") && !WoW.PlayerHasBuff("Brain Freeze") && WoW.WasLastCasted("Flurry"))
                    {
                        WoW.CastSpell("Ice Lance");
                    }
                    if (WoW.CanCast("Ice Lance") && WoW.PlayerBuffStacks("Chain Reaction") >= 1 && WoW.PlayerHasBuff("Fingers of Frost") && WoW.PlayerBuffStacks("Fingers of Frost") >= 1)
                    {
                        WoW.CastSpell("Ice Lance");
                        return;
                    }
                    //Frostbolt Control
                    if (!WoW.PlayerHasBuff("Brain Freeze") && !WoW.WasLastCasted("Flurry"))
                    {
                        if (WoW.CanCast("Frostbolt") && !WoW.PlayerHasBuff("Fingers of Frost") && !WoW.WasLastCasted("Frostbolt"))
                        {
                            WoW.CastSpell("Frostbolt");
                            return;
                        }

                        if (WoW.CanCast("Frostbolt") && WoW.PlayerBuffStacks("Chain Reaction") <= 2 && !WoW.WasLastCasted("Frostbolt"))
                        {
                            WoW.CastSpell("Frostbolt");
                            return;
                        }
                        if (WoW.CanCast("Frostbolt") && WoW.PlayerHasBuff("Chain Reaction") && WoW.PlayerBuffStacks("Chain Reaction") == 3 && WoW.PlayerBuffTimeRemaining("Chain Reaction") <= 2)
                        {
                            WoW.CastSpell("Frostbolt");
                            return;
                        }
                    }

                    //Frost Bomb - i dont use
                    //if	((WoW.CanCast("Frost Bomb")&&WoW.PlayerHasBuff("Fingers of Frost")&&WoW.PlayerBuffStacks("Fingers of Frost") == 2)&&!WoW.TargetHasDebuff("Frost Bomb")&&!WoW.WasLastCasted("Ice Lance")&&!WoW.WasLastCasted("Rune of Power"))
                    //		{
                    //		WoW.CastSpell("Frost Bomb");
                    //		return;
                    //		}
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                if (combatRoutine.Type == RotationType.SingleTargetCleave)
                {
                    // Do Single Target Cleave stuff here if applicable else ignore this one
                }
            }
        }
        public override void Pulse() // Updated for Legion (tested and working for single target)
        {
            if (WoW.IsInCombat && Control.IsKeyLocked(Keys.Scroll) && !WoW.TargetIsPlayer && !WoW.IsMounted)
            {
                SelectRotation(4, 9999, 1);
            }

            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted)
                {
                    if ((!WoW.TargetHasDebuff("Agony") || WoW.TargetDebuffTimeRemaining("Agony") <= 540) &&
                        (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Agony") <= 150) &&
                        WoW.CanCast("Agony") &&
                        WoW.IsSpellInRange("Agony"))
                    {
                        WoW.CastSpell("Agony");
                        return;
                    }

                    if ((WoW.CurrentSoulShards >= 3 || (WoW.CurrentSoulShards >= 2 && WoW.WasLastCasted("Unstable Affliction"))) &&
                        !WoW.IsMoving &&
                        WoW.CanCast("Unstable Affliction") &&
                        WoW.IsSpellInRange("Agony"))
                    {
                        WoW.CastSpell("Unstable Affliction");
                        Thread.Sleep(200);
                        return;
                    }

                    if ((WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction2") ||
                         WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction3") ||
                         WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction4") ||
                         WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction5") ||
                         WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction3") ||
                         WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction4") ||
                         WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction5") ||
                         WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction4") ||
                         WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction5") ||
                         WoW.TargetHasDebuff("Unstable Affliction4") && WoW.TargetHasDebuff("Unstable Affliction5") ||
                         WoW.PlayerBuffStacks("Reap Souls") >= 12) &&
                        !WoW.PlayerIsCasting &&
                        WoW.CanCast("Reap Souls") &&
                        !WoW.PlayerHasBuff("Deadwind Harvester") &&
                        WoW.PlayerHasBuff("Tormented Souls"))
                    {
                        WoW.CastSpell("Reap Souls");
                        return;
                    }

                    if (WoW.CanCast("Life Tap") && !WoW.PlayerIsChanneling && WoW.Talent(2) == 3 && !WoW.PlayerHasBuff("Empowered Life Tap"))
                    {
                        WoW.CastSpell("Life Tap");
                        return;
                    }

                    if ((!WoW.TargetHasDebuff("Corruption") || WoW.TargetDebuffTimeRemaining("Corruption") <= 420) &&
                        (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Corruption") <= 150) &&
                        WoW.CanCast("Corruption") &&
                        WoW.IsSpellInRange("Agony"))
                    {
                        WoW.CastSpell("Corruption");
                        return;
                    }

                    if ((!WoW.TargetHasDebuff("Siphon Life") || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 420) &&
                        (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 150) &&
                        WoW.Talent(4) == 1 &&
                        WoW.CanCast("Siphon Life") &&
                        WoW.IsSpellInRange("Agony"))
                    {
                        WoW.CastSpell("Siphon Life");
                        return;
                    }

                    if (WoW.CanCast("Felhunter") && WoW.Talent(6) == 2 && !WoW.IsSpellOnCooldown("Felhunter") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting)
                    {
                        WoW.CastSpell("Felhunter");
                        return;
                    }

                    if (WoW.CanCast("Unstable Affliction") && !WoW.IsMoving && WoW.Talent(2) == 1 && !WoW.IsMoving && WoW.IsSpellInRange("Unstable Affliction") && !WoW.PlayerIsChanneling && WoW.CurrentSoulShards >= 1 &&
                        (!WoW.TargetHasDebuff("Unstable Affliction1") || !WoW.TargetHasDebuff("Unstable Affliction2") || !WoW.TargetHasDebuff("Unstable Affliction3") || !WoW.TargetHasDebuff("Unstable Affliction4") || !WoW.TargetHasDebuff("Unstable Affliction5") ||
                         (WoW.TargetDebuffTimeRemaining("Unstable Affliction1") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction2") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction3") <= 150) ||
                         (WoW.TargetDebuffTimeRemaining("Unstable Affliction4") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction5") <= 150)))
                    {
                        WoW.CastSpell("Unstable Affliction");
                        Thread.Sleep(200);
                        return;
                    }

                    if (WoW.IsInCombat && WoW.Mana < 70 && WoW.HealthPercent > 70 && WoW.CanCast("Life Tap"))
                    {
                        WoW.CastSpell("Life Tap");
                        return;
                    }

                    if (WoW.CanCast("Haunt") && WoW.Talent(1) == 1 && !WoW.IsSpellOnCooldown("Haunt") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving)
                    {
                        WoW.CastSpell("Haunt");
                        return;
                    }

                    if (WoW.CanCast("Drain Soul") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving)
                    {
                        WoW.CastSpell("Drain Soul");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMounted) // Do AOE stuff here
                {
                    if (WoW.CanCast("Agony") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Agony") || (WoW.TargetDebuffTimeRemaining("Agony") <= 540)))
                    {
                        WoW.CastSpell("Agony");
                        return;
                    }

                    if (WoW.CanCast("Corruption") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Corruption") || (WoW.TargetDebuffTimeRemaining("Corruption") <= 420)))
                    {
                        WoW.CastSpell("Corruption");
                        return;
                    }

                    if (WoW.CanCast("Seed of Corruption") && WoW.IsSpellInRange("Agony") && !WoW.TargetHasDebuff("Seed of Corruption") && !WoW.IsMoving && WoW.CurrentSoulShards >= 1)
                    {
                        WoW.CastSpell("Seed of Corruption");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.SingleTargetCleave)
            {
                // Do Single Target Cleave stuff here if applicable else ignore this one
            }
        }
Ejemplo n.º 13
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.PlayerHasBuff("Stealth") || WoW.PlayerHasBuff("Subterfuge") || WoW.PlayerHasBuff("Shadow Dance"))
                    {
                        if (WoW.CanCast("Symbols of Death") && WoW.Energy >= 35 && (!WoW.PlayerHasBuff("Symbols of Death") || WoW.PlayerBuffTimeRemaining("Symbols of Death") <= 10))
                        {
                            WoW.CastSpell("Symbols of Death");
                            return;
                        }

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

                    if (WoW.CanCast("Shuriken Storm") && WoW.CurrentComboPoints < 6 && WoW.Energy >= 35 && WoW.IsSpellInRange("Eviscerate"))
                    {
                        WoW.CastSpell("Shuriken Storm");
                    }
                }
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        ///     Do the rotation.
        /// </summary>
        private void doRotation(bool isSingleTarget = true)
        {
            bool ignoreMovement = WoW.PlayerHasBuff(SURRENDER_MADNESS);

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

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

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

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

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

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

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

                    //If we don't have anything else to do, cast Mind flay.
                    if (!isPlayerBusy(ignoreChanneling: false))
                    {
                        castWithRangeCheck(MIND_FLAY);
                    }
                }
            }
        }
Ejemplo n.º 15
0
        public override void Pulse() // Updated for Legion (tested and working for single target)
        {
            if (WoW.CanCast("Healthstone") && WoW.ItemCount("Healthstone") >= 1 && !WoW.ItemOnCooldown("Healthstone") && WoW.HealthPercent <= 60 && WoW.HealthPercent != 0 && WoW.IsInCombat)
            {
                WoW.CastSpell("Healthstone");
                return;
            }
            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsCasting && !WoW.IsMounted)
                {
                    if ((!WoW.TargetHasDebuff("Agony") || WoW.TargetDebuffTimeRemaining("Agony") <= 540) &&
                        (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Agony") <= 150) &&
                        WoW.CanCast("Agony") &&
                        WoW.IsSpellInRange("Agony"))
                    {
                        WoW.CastSpell("Agony");
                        return;
                    }
                    if ((WoW.CurrentSoulShards >= 3 || (WoW.CurrentSoulShards >= 2 && WoW.WasLastCasted("Unstable Affliction"))) &&
                        !WoW.IsMoving &&
                        WoW.CanCast("Unstable Affliction") &&
                        WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption"))
                    {
                        WoW.CastSpell("Unstable Affliction");
                        Thread.Sleep(200);
                        return;
                    }
                    if ((WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction2") ||
                         WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction3") ||
                         WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction4") ||
                         WoW.TargetHasDebuff("Unstable Affliction1") && WoW.TargetHasDebuff("Unstable Affliction5") ||
                         WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction3") ||
                         WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction4") ||
                         WoW.TargetHasDebuff("Unstable Affliction2") && WoW.TargetHasDebuff("Unstable Affliction5") ||
                         WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction4") ||
                         WoW.TargetHasDebuff("Unstable Affliction3") && WoW.TargetHasDebuff("Unstable Affliction5") ||
                         WoW.TargetHasDebuff("Unstable Affliction4") && WoW.TargetHasDebuff("Unstable Affliction5") ||
                         WoW.PlayerBuffStacks("Reap Souls") >= 12) &&
                        !WoW.PlayerIsCasting &&
                        WoW.CanCast("Reap Souls") &&
                        !WoW.PlayerHasBuff("Deadwind Harvester") &&
                        WoW.PlayerHasBuff("Tormented Souls") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption"))
                    {
                        WoW.CastSpell("Reap Souls");
                        return;
                    }
                    if (WoW.CanCast("Phantom") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption"))
                    {
                        WoW.CastSpell("Phantom");
                        return;
                    }

                    /*if (WoW.IsSpellInRange("Agony") && WoW.CanCast("Trinket") &&!WoW.ItemOnCooldown("Trinket") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption"))
                     * {
                     *      WoW.CastSpell("Trinket");
                     *      return;
                     * }*/
                    if (WoW.CanCast("Berserk") && UseCooldowns && !WoW.IsSpellOnCooldown("Berserk") && WoW.PlayerRace == "Troll")
                    {
                        WoW.CastSpell("Berserk");
                        return;
                    }
                    if (WoW.CanCast("Life Tap") && !WoW.PlayerIsChanneling && WoW.Talent(2) == 3 && !WoW.PlayerHasBuff("Empowered Life Tap"))
                    {
                        WoW.CastSpell("Life Tap");
                        return;
                    }
                    if ((!WoW.TargetHasDebuff("Corruption") || WoW.TargetDebuffTimeRemaining("Corruption") <= 420) &&
                        (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Corruption") <= 150) &&
                        WoW.CanCast("Corruption") &&
                        WoW.IsSpellInRange("Agony"))
                    {
                        WoW.CastSpell("Corruption");
                        return;
                    }
                    if ((!WoW.TargetHasDebuff("Siphon Life") || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 420) &&
                        (!WoW.PlayerIsChanneling || WoW.TargetDebuffTimeRemaining("Siphon Life") <= 150) &&
                        WoW.Talent(4) == 1 &&
                        WoW.CanCast("Siphon Life") &&
                        WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption"))
                    {
                        WoW.CastSpell("Siphon Life");
                        return;
                    }
                    if (WoW.CanCast("Unstable Affliction") && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption") && !WoW.IsMoving && WoW.Talent(2) == 1 && !WoW.IsMoving && WoW.IsSpellInRange("Unstable Affliction") && !WoW.PlayerIsChanneling && WoW.CurrentSoulShards >= 1 &&
                        (!WoW.TargetHasDebuff("Unstable Affliction1") || !WoW.TargetHasDebuff("Unstable Affliction2") || !WoW.TargetHasDebuff("Unstable Affliction3") || !WoW.TargetHasDebuff("Unstable Affliction4") || !WoW.TargetHasDebuff("Unstable Affliction5") ||
                         (WoW.TargetDebuffTimeRemaining("Unstable Affliction1") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction2") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction3") <= 150) ||
                         (WoW.TargetDebuffTimeRemaining("Unstable Affliction4") <= 150) || (WoW.TargetDebuffTimeRemaining("Unstable Affliction5") <= 150)))
                    {
                        WoW.CastSpell("Unstable Affliction");
                        Thread.Sleep(200);
                        return;
                    }
                    if (WoW.IsInCombat && WoW.Mana < 70 && WoW.HealthPercent > 70 && WoW.CanCast("Life Tap"))
                    {
                        WoW.CastSpell("Life Tap");
                        return;
                    }
                    if (WoW.CanCast("Drain Soul") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption"))
                    {
                        WoW.CastSpell("Drain Soul");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMounted) // Do AOE stuff here
                {
                    if (WoW.CanCast("Agony") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Agony") || (WoW.TargetDebuffTimeRemaining("Agony") <= 540)))
                    {
                        WoW.CastSpell("Agony");
                        return;
                    }

                    if (WoW.CanCast("Corruption") && WoW.IsSpellInRange("Agony") && WoW.TargetHasDebuff("Seed of Corruption") && (!WoW.TargetHasDebuff("Corruption") || (WoW.TargetDebuffTimeRemaining("Corruption") <= 420)))
                    {
                        WoW.CastSpell("Corruption");
                        return;
                    }
                    if (WoW.CanCast("Seed of Corruption") && WoW.IsSpellInRange("Agony") && !WoW.TargetHasDebuff("Seed of Corruption") && !WoW.IsMoving && WoW.CurrentSoulShards >= 1 && !WoW.WasLastCasted("Seed of Corruption"))
                    {
                        WoW.CastSpell("Seed of Corruption");
                        return;
                    }
                    if (WoW.CanCast("Drain Soul") && WoW.IsSpellInRange("Agony") && !WoW.PlayerIsChanneling && !WoW.PlayerIsCasting && !WoW.IsMoving && WoW.TargetHasDebuff("Agony") && WoW.TargetHasDebuff("Corruption"))
                    {
                        WoW.CastSpell("Drain Soul");
                        return;
                    }
                }
            }
        }
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget)
            {
                //Heal if not in combat
                if (!WoW.IsInCombat && WoW.HealthPercent <= 95 & WoW.Energy >= 30 && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
                {
                    //WoW.SendMacro("/cast [@player] Effuse");
                    return;
                }

                //Sanity Checks
                if (WoW.PlayerIsChanneling)
                {
                    return;
                }
                if (!WoW.HasTarget)
                {
                    return;
                }
                if (!WoW.TargetIsEnemy)
                {
                    return;
                }
                if (WoW.PlayerIsCasting)
                {
                    return;
                }
                if (!WoW.IsInCombat)
                {
                    return;
                }
            }


            //Cooldown saves
            if (WoW.HealthPercent <= 85 && WoW.PlayerSpellCharges("Healing Elixir") > 0 && !WoW.IsSpellOnCooldown("Healing Elixir"))
            {
                WoW.CastSpell("Healing Elixir");
                return;
            }

            //Interrupts or Damage negation
            if (WoW.TargetIsCasting && WoW.CanCast("Spear Hand Strike") && !WoW.IsSpellOnCooldown("Spear Hand Strike") && WoW.IsSpellInRange("Spear Hand Strike"))
            {
                WoW.CastSpell("Spear Hand Strike");
                return;
            }

            //Leg Sweep to open, or mitigate damage
            if (WoW.CanCast("Leg Sweep") && !WoW.IsSpellOnCooldown("Leg Sweep") && WoW.IsSpellInRange("Tiger Palm"))
            {
                WoW.CastSpell("Leg Sweep");
                return;
            }

            //Look for Expel Harm Charges.. if 3 and health low then hit
            if (WoW.PlayerSpellCharges("Expel Harm") >= 3 && WoW.HealthPercent <= 75 && WoW.Energy >= 15)
            {
                WoW.CastSpell("Expel Harm");
                return;
            }

            //If Target is almost dead, and we have Expel Harm charges use up -- we don't want to leave it
            if (WoW.TargetHealthPercent <= 10 && WoW.PlayerSpellCharges("Expel Harm") != 100 && WoW.CanCast("Expel Harm") && !WoW.IsSpellOnCooldown("Expel Harm") && WoW.Energy >= 15)
            {
                Log.Write(string.Format("Expel Harm Count {0}", WoW.PlayerSpellCharges("Expel Harm")));
                WoW.CastSpell("Expel Harm");
                return;
            }


            //Maintain Eye of the Tiger
            if (!WoW.PlayerHasBuff("Eye of the Tiger") && !WoW.IsSpellOnCooldown("Tiger Palm") && WoW.IsSpellInRange("Tiger Palm"))
            {
                WoW.CastSpell("Tiger Palm");
                return;
            }


            //Breath of fire if Vulnerable
            if (WoW.TargetHasDebuff("Keg Smash") && !WoW.TargetHasDebuff("Breath of Fire") && WoW.CanCast("Breath of Fire") && !WoW.IsSpellOnCooldown("Breath of Fire"))
            {
                WoW.CastSpell("Breath of Fire");
                return;
            }

            if (!WoW.TargetHasDebuff("Keg Smash") && WoW.CanCast("Keg Smash") && !WoW.IsSpellOnCooldown("Keg Smash") && WoW.Energy >= 40)
            {
                WoW.CastSpell("Keg Smash");
                return;
            }

            //Energy dump if High
            if (WoW.Energy >= 65 && WoW.CanCast("Tiger Palm") && !WoW.IsSpellOnCooldown("Tiger Palm") && WoW.IsSpellInRange("Tiger Palm"))
            {
                WoW.CastSpell("Tiger Palm");
                return;
            }

            //if Ironskin count = 3 and in Melee range (or we cast too early as we approach)

            if (WoW.PlayerSpellCharges("Ironskin Brew") >= 2 && !WoW.PlayerHasBuff("Ironskin Brew") && WoW.IsSpellInRange("Tiger Palm"))
            {
                _ironSkinFired = true;
                WoW.CastSpell("Ironskin Brew");
                return;
            }
            if (_ironSkinFired && !WoW.PlayerHasBuff("Ironskin Brew"))
            {
                _ironSkinFired = false;
                if (WoW.PlayerSpellCharges("Purifying Brew") >= 1)
                {
                    WoW.CastSpell("Purifying Brew");
                    return;
                }
            }

            //if We Can Cast Exploding Keg and in Melee range then do so
            if (WoW.CanCast("Exploding Keg") && !WoW.IsSpellOnCooldown("Exploding Keg") && WoW.IsSpellInRange("Tiger Palm"))
            {
                //WoW.SendMacro("/cast [@player] Exploding Keg");
                return;
            }

            //TODO NEED F*****g ability to detect staggers so we can use our spare Purifying Brew here.. We are not
            //Optimized until this behavior exists.  We need to use it, then pop Fortifying Brew


            if (WoW.CanCast("Blackout Strike") && !WoW.IsSpellOnCooldown("Blackout Strike") && WoW.IsSpellInRange("Tiger Palm"))
            {
                WoW.CastSpell("Blackout Strike");
            }

            if (WoW.CanCast("Tiger Palm") && !WoW.IsSpellOnCooldown("Tiger Palm") && WoW.IsSpellInRange("Tiger Palm") && WoW.TargetHasDebuff("Keg Smash"))
            {
                WoW.CastSpell("Tiger Palm");
            }
        }
Ejemplo n.º 17
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.IsMounted)
                {
                    if (WoW.PlayerHasBuff("Metamorphosis"))
                    {
                        if (WoW.CanCast("Nemesis") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("Nemesis");
                            return;
                        }
                        if (WoW.CanCast("Chaos Blades") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("Chaos Blades");
                            return;
                        }

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

                        if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("FOTI");
                            return;
                        }
                    }
                    if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike"))
                    {
                        WoW.CastSpell("FOTI");
                        return;
                    }
                    if (WoW.CanCast("Blade Dance") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 15)
                    {
                        WoW.CastSpell("Blade Dance");
                        return;
                    }
                    if (WoW.CanCast("Felblade") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury < 100)
                    {
                        WoW.CastSpell("Felblade"); //Felblade only at melee range to not make worse (if you need to gtfo)
                        return;
                    }
                    if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.IsSpellInRange("Chaos Strike") && (DetectKeyPress.GetKeyState(0x5A) < 0))
                    {
                        WoW.CastSpell("Eye Beam"); //Use Eyebeam by Z press
                        return;
                    }
                    if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") &&
                        (WoW.Fury >= 70 || (WoW.Fury >= 55 && (WoW.PlayerHasBuff("Chaos Blades") || WoW.SpellCooldownTimeRemaining("Nemesis") >= 60))))
                    {
                        WoW.CastSpell("Chaos Strike"); //If we got damage buffs - spent fury on CS instantly (15 save for Blade Dance)
                        return;
                    }
                    if (WoW.CanCast("Blur") && WoW.IsInCombat && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Blur Usage Percent"))
                    {
                        WoW.CastSpell("Blur");
                        return;
                    }
                    //if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70)  // Fury Generator
                    //{
                    //    WoW.CastSpell("Demons Bite");
                    //   return;
                    //}
                    if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive"))
                    {
                        WoW.CastSpell("Throw Glaive");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.SingleTargetCleave)
            {
                // Do AOE Stuff here
                if (WoW.HasTarget && !WoW.PlayerIsChanneling && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.PlayerHasBuff("Metamorphosis"))
                    {
                        if (WoW.CanCast("FOTI") && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("FOTI");
                            return;
                        }
                        if (WoW.CanCast("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") == 5 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) &&
                            WoW.IsSpellInRange("Fel Barrage"))
                        {
                            WoW.CastSpell("Fel Barrage");
                            return;
                        }
                        if (WoW.CanCast("Death Sweep") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 15)
                        {
                            WoW.CastSpell("Death Sweep");
                            return;
                        }
                        if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) && WoW.IsSpellInRange("Chaos Strike"))
                        {
                            WoW.CastSpell("Eye Beam");
                            return;
                        }
                        if (WoW.CanCast("Annihilation") && WoW.IsSpellInRange("Chaos Strike") && (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70))
                        {
                            WoW.CastSpell("Annihilation");
                            return;
                        }
                        if (WoW.CanCast("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") >= 4 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) &&
                            WoW.IsSpellInRange("Fel Barrage"))
                        {
                            WoW.CastSpell("Fel Barrage");
                            return;
                        }
                        //if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70)  // Fury Generator
                        //{
                        //    WoW.CastSpell("Demons Bite");
                        //    return;
                        //}
                        if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && WoW.PlayerHasBuff("Momentum"))
                        {
                            WoW.CastSpell("Throw Glaive");
                            return;
                        }
                    }
                    if (WoW.CanCast("FOTI") && WoW.PlayerHasBuff("Momentum") && WoW.IsSpellInRange("Chaos Strike"))
                    {
                        WoW.CastSpell("FOTI");
                        return;
                    }
                    if (WoW.CanCast("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") == 5 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) &&
                        WoW.IsSpellInRange("Fel Barrage"))
                    {
                        WoW.CastSpell("Fel Barrage");
                        return;
                    }
                    if (WoW.CanCast("Blade Dance") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 15)
                    {
                        WoW.CastSpell("Blade Dance");
                        return;
                    }
                    if (WoW.CanCast("Eye Beam") && WoW.Fury >= 50 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") > 1) && WoW.IsSpellInRange("Chaos Strike"))
                    {
                        WoW.CastSpell("Eye Beam");
                        return;
                    }
                    if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") && (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70)) // Fury Spender
                    {
                        WoW.CastSpell("Chaos Strike");
                        return;
                    }
                    if (WoW.CanCast("Fel Barrage") && WoW.PlayerSpellCharges("Fel Barrage") >= 4 && WoW.PlayerHasBuff("Momentum") && (WoW.PlayerBuffTimeRemaining("Momentum") >= 1) &&
                        WoW.IsSpellInRange("Fel Barrage"))
                    {
                        WoW.CastSpell("Fel Barrage");
                        return;
                    }
                    if (WoW.CanCast("Blur") && WoW.IsInCombat && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Blur Usage Percent"))
                    {
                        WoW.CastSpell("Blur");
                        return;
                    }
                    //if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70)  // Fury Generator
                    //{
                    //    WoW.CastSpell("Demons Bite");
                    //   return;
                    //}
                    if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && WoW.PlayerHasBuff("Momentum"))
                    {
                        WoW.CastSpell("Throw Glaive");
                    }
                }
            }
        }
Ejemplo n.º 18
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget) // Do Single Target Stuff here
            {
                if (!WoW.PlayerHasBuff("Battle Cry"))
                {
                    if (WoW.TargetHealthPercent > 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)
                    {
                        if (WoW.CanCast("Focused Rage") && WoW.WasLastCasted("Charge"))
                        {
                            WoW.CastSpell("Focused Rage");
                        }
                        if (WoW.CanCast("Focused Rage") && WoW.WasLastCasted("Colossus Smash"))
                        {
                            WoW.CastSpell("Focused Rage");
                        }
                        if (WoW.CanCast("Focused Rage") && WoW.Rage >= 105)
                        {
                            WoW.CastSpell("Focused Rage");
                        }
                        if (WoW.CanCast("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses"))
                        {
                            WoW.CastSpell("Colossus Smash");
                            return;
                        }
                        if (WoW.CanCast("Mortal Strike") && !WoW.IsSpellOnCooldown("Mortal Strike"))
                        {
                            WoW.CastSpell("Mortal Strike");
                            return;
                        }

                        if (WoW.CanCast("Slam") && WoW.Rage >= 32 && WoW.IsSpellOnCooldown("Colossus Smash") && WoW.IsSpellOnCooldown("Mortal Strike"))
                        {
                            WoW.CastSpell("Slam");
                            return;
                        }
                        if (WoW.CanCast("Warbreaker") && !WoW.IsSpellOnCooldown("Battle Cry") && !WoW.TargetHasDebuff("Colossus Smash"))
                        {
                            WoW.CastSpell("Warbreaker");
                            return;
                        }
                    }
                    if (WoW.TargetHealthPercent < 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)

                    {
                        if (WoW.CanCast("Focused Rage") && WoW.WasLastCasted("Charge"))
                        {
                            WoW.CastSpell("Focused Rage");
                        }
                        if (WoW.CanCast("Focused Rage") && WoW.Rage > 105)
                        {
                            WoW.CastSpell("Focused Rage");
                        }
                        if (WoW.CanCast("Mortal Strike") && WoW.PlayerHasBuff("Focused Rage") && WoW.PlayerBuffStacks("Focused Rage") == 3)
                        {
                            WoW.CastSpell("Mortal Strike");
                            return;
                        }
                        if (WoW.CanCast("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses"))
                        {
                            WoW.CastSpell("Colossus Smash");
                            return;
                        }
                        if (WoW.CanCast("Execute") && WoW.Rage == 18 && WoW.PlayerHasBuff("Precise Strikes"))
                        {
                            WoW.CastSpell("Execute");
                            return;
                        }
                        if (WoW.CanCast("Execute") && WoW.Rage == 38 && !WoW.PlayerHasBuff("Precise Strikes"))
                        {
                            WoW.CastSpell("Execute");
                            return;
                        }
                        if (WoW.CanCast("Slam") && WoW.Rage > 32 && WoW.IsSpellOnCooldown("Colossus Smash") && WoW.IsSpellOnCooldown("Mortal Strike"))
                        {
                            WoW.CastSpell("Slam");
                            return;
                        }
                        if (WoW.CanCast("Warbreaker") && !WoW.IsSpellOnCooldown("Battle Cry") && !WoW.TargetHasDebuff("Colossus Smash"))
                        {
                            WoW.CastSpell("Warbreaker");
                            return;
                        }
                    }
                }
                if (WoW.PlayerHasBuff("Battle Cry"))
                {
                    if (WoW.TargetHealthPercent > 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)

                    {
                        if (WoW.CanCast("Focused Rage") && WoW.PlayerBuffStacks("Focused Rage") < 3)
                        {
                            WoW.CastSpell("Focused Rage");
                        }

                        if (WoW.CanCast("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash") && !WoW.PlayerHasBuff("Shattered Defenses"))
                        {
                            WoW.CastSpell("Colossus Smash");
                            return;
                        }
                        if (WoW.CanCast("Mortal Strike") && WoW.PlayerHasBuff("Shattered Defenses") && !WoW.IsSpellOnCooldown("Mortal Strike") && WoW.PlayerBuffStacks("Focused Rage") == 3)
                        {
                            WoW.CastSpell("Mortal Strike");
                            return;
                        }
                        if (WoW.CanCast("Slam") && WoW.IsSpellOnCooldown("Colossus Smash") && WoW.IsSpellOnCooldown("Mortal Strike"))
                        {
                            WoW.CastSpell("Slam");
                            return;
                        }
                    }
                    if (WoW.TargetHealthPercent < 20 && WoW.IsInCombat && WoW.TargetIsEnemy && !WoW.PlayerIsCasting && !WoW.PlayerIsChanneling)

                    {
                        if (WoW.CanCast("Focused Rage") && WoW.PlayerBuffStacks("Focused Rage") < 3)
                        {
                            WoW.CastSpell("Focused Rage");
                        }

                        if (WoW.CanCast("Colossus Smash") && !WoW.TargetHasDebuff("Colossus Smash") && !WoW.IsSpellOnCooldown("Colossus Smash"))
                        {
                            WoW.CastSpell("Colossus Smash");
                            return;
                        }
                        if (WoW.CanCast("Mortal Strike") && !WoW.IsSpellOnCooldown("Mortal Strike") && (WoW.PlayerBuffStacks("Focused Rage") == 3))
                        {
                            WoW.CastSpell("Mortal Strike");
                            return;
                        }
                        if (WoW.CanCast("Execute"))
                        {
                            WoW.CastSpell("Execute");
                            return;
                        }
                    }
                }
            }


            if (combatRoutine.Type == RotationType.AOE)
            {
                if (combatRoutine.Type == RotationType.SingleTargetCleave)
                {
                    // Do Single Target Cleave stuff here if applicable else ignore this one
                }
            }
        }
Ejemplo n.º 19
0
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget)                                                       // Do Single Target Stuff here
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat && !WoW.IsMounted) //Pull need to do by yourself - to prevent a mess
                {
                    if (WoW.CanCast("Metamorphosis") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Metamorphosis Usage Percent"))
                    {
                        Log.Write("Health low < set % using CDs...", Color.Red);
                        WoW.CastSpell("Metamorphosis"); // Off the GCD no return needed
                    }
                    if (WoW.CanCast("Consume Magic") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Soul Carver"))
                    {
                        WoW.CastSpell("Consume Magic");
                        return;
                    }
                    if (Bloodelf && WoW.CanCast("Arcane Torrent") && WoW.IsSpellOnCooldown("Consume Magic") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Soul Carver"))
                    {
                        WoW.CastSpell("Arcane Torrent");
                        return;
                    }
                    if (WoW.CanCast("Sigil of Silence") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellOnCooldown("Consume Magic") && (WoW.IsSpellOnCooldown("Arcane Torrent") || !Bloodelf) && WoW.IsSpellInRange("Soul Carver"))
                    {
                        WoW.CastSpell("Sigil of Silence");
                        return;
                    }
                    if (WoW.CanCast("Fiery Brand") && WoW.IsSpellInRange("Soul Carver") && !WoW.TargetHasDebuff("Fiery Demise"))
                    {
                        WoW.CastSpell("Fiery Brand");
                    }

                    if (WoW.CanCast("Soul Carver") && WoW.IsSpellInRange("Soul Carver") && WoW.SpellCooldownTimeRemaining("Fiery Brand") >= 10)
                    {
                        WoW.CastSpell("Soul Carver");
                        return;
                    }

                    if (WoW.CanCast("Spirit Bomb") && WoW.Level >= 108 && WoW.IsSpellInRange("Soul Carver") && WoW.PlayerHasBuff("Soul Fragments") && !WoW.TargetHasDebuff("Frailty"))
                    {
                        WoW.CastSpell("Spirit Bomb");
                        return;
                    }

                    if (WoW.CanCast("Sigil of Flame") && WoW.IsSpellInRange("Soul Carver") && WoW.TargetHasDebuff("Fiery Demise") && WoW.TargetDebuffTimeRemaining("Fiery Demise") >= 7)
                    {
                        WoW.CastSpell("Sigil of Flame");
                        return;
                    }

                    if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10 && WoW.TargetHasDebuff("Fiery Demise"))
                    {
                        WoW.CastSpell("Fel Eruption");
                        return;
                    }

                    if (WoW.CanCast("Soul Barrier") && WoW.Level >= 110 && WoW.Pain >= 10 && WoW.PlayerHasBuff("Soul Fragments") && WoW.PlayerBuffStacks("Soul Fragments") >= 4)
                    {
                        WoW.CastSpell("Soul Barrier");
                        return;
                    }

                    if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && (WoW.Pain >= 92 || WoW.HealthPercent < 90 && WoW.Pain >= 20)) // to not waste cd and pain
                    {
                        WoW.CastSpell("Demon Spikes");
                    }

                    if (WoW.IsSpellInRange("Soul Carver"))
                    {
                        if (WoW.CanCast("Soul Cleave") && ((WoW.Pain >= 30 && WoW.HealthPercent < 25) || (WoW.Pain >= 80 && WoW.HealthPercent < 50 && !WoW.CanCast("Demon Spikes")) ||
                                                           (WoW.Pain >= 60 && WoW.HealthPercent < 50 && WoW.PlayerHasBuff("Demon Spikes"))))
                        {
                            WoW.CastSpell("Soul Cleave");
                            return;
                        }

                        if (WoW.CanCast("Fracture") && ((WoW.Pain >= 30 && WoW.HealthPercent >= 50 && WoW.PlayerHasBuff("Demon Spikes")) ||
                                                        (WoW.Pain >= 80 && WoW.HealthPercent >= 50 && !WoW.CanCast("Demon Spikes"))))
                        {
                            WoW.CastSpell("Fracture");
                            return;
                        }

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

                        if (WoW.CanCast("Sigil of Flame"))
                        {
                            WoW.CastSpell("Sigil of Flame");
                            return;
                        }
                    }

                    if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10)
                    {
                        WoW.CastSpell("Fel Eruption");
                        return;
                    }

                    if (WoW.CanCast("Sever") && WoW.IsSpellInRange("Soul Carver") && WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator
                    {
                        WoW.CastSpell("Sever");
                        return;
                    }

                    if (WoW.CanCast("Shear") && WoW.IsSpellInRange("Soul Carver") && !WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator
                    {
                        WoW.CastSpell("Shear");
                        return;
                    }

                    if (WoW.CanCast("Throw Glaive") && !WoW.IsSpellInRange("Soul Carver") && WoW.IsSpellInRange("Throw Glaive"))                     //Need to implement range 30y for Throw Glaive spell 204157
                    {
                        WoW.CastSpell("Throw Glaive");
                        return;
                    }
                }
            }
            if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.SingleTargetCleave)
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling && WoW.IsInCombat)                 //Pull need to do by yourself - to prevent a mess
                {
                    if (WoW.CanCast("Metamorphosis") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Metamorphosis Usage Percent"))
                    {
                        //Log.Write("Metamorphosis");
                        Log.Write("Health low < set % using CDs...", Color.Red);
                        WoW.CastSpell("Metamorphosis"); // Off the GCD no return needed
                    }
                    if (WoW.CanCast("Consume Magic") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Soul Carver"))
                    {
                        WoW.CastSpell("Consume Magic");
                        return;
                    }
                    if (Bloodelf && WoW.CanCast("Arcane Torrent") && WoW.IsSpellOnCooldown("Consume Magic") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellInRange("Soul Carver"))
                    {
                        WoW.CastSpell("Arcane Torrent");
                        return;
                    }
                    if (WoW.CanCast("Sigil of Silence") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 60 && WoW.IsSpellOnCooldown("Consume Magic") && (WoW.IsSpellOnCooldown("Arcane Torrent") || !Bloodelf) && WoW.IsSpellInRange("Soul Carver"))
                    {
                        WoW.CastSpell("Sigil of Silence");
                        return;
                    }
                    if (WoW.CanCast("Fiery Brand") && WoW.IsSpellInRange("Soul Carver") && !WoW.TargetHasDebuff("Fiery Demise"))
                    {
                        WoW.CastSpell("Fiery Brand");
                    }

                    if (WoW.CanCast("Soul Carver") && WoW.IsSpellInRange("Soul Carver") && WoW.SpellCooldownTimeRemaining("Fiery Brand") >= 10)
                    {
                        WoW.CastSpell("Soul Carver");
                        return;
                    }

                    if (WoW.CanCast("Spirit Bomb") && WoW.Level >= 108 && WoW.IsSpellInRange("Soul Carver") && WoW.PlayerHasBuff("Soul Fragments") && !WoW.TargetHasDebuff("Frailty"))
                    {
                        WoW.CastSpell("Spirit Bomb");
                        return;
                    }

                    if (WoW.CanCast("Sigil of Flame") && WoW.IsSpellInRange("Soul Carver") && WoW.TargetHasDebuff("Fiery Demise") && WoW.TargetDebuffTimeRemaining("Fiery Demise") >= 7)
                    {
                        WoW.CastSpell("Sigil of Flame");
                        return;
                    }

                    if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10 && WoW.TargetHasDebuff("Fiery Demise"))
                    {
                        WoW.CastSpell("Fel Eruption");
                        return;
                    }

                    if (WoW.CanCast("Soul Barrier") && WoW.Level >= 110 && WoW.Pain >= 10 && WoW.PlayerHasBuff("Soul Fragments") && WoW.PlayerBuffStacks("Soul Fragments") >= 4)
                    {
                        WoW.CastSpell("Soul Barrier");
                        return;
                    }

                    if (WoW.CanCast("Demon Spikes") && !WoW.PlayerHasBuff("Demon Spikes") && (WoW.Pain >= 92 || WoW.HealthPercent < 90 && WoW.Pain >= 20)) // to not waste cd and pain
                    {
                        WoW.CastSpell("Demon Spikes");
                    }

                    if (WoW.IsSpellInRange("Soul Carver"))
                    {
                        if (WoW.CanCast("Soul Cleave") && ((WoW.Pain >= 30 && WoW.HealthPercent < 25) || (WoW.Pain >= 80 && !WoW.CanCast("Demon Spikes")) ||
                                                           (WoW.Pain >= 60 && WoW.PlayerHasBuff("Demon Spikes"))))
                        {
                            WoW.CastSpell("Soul Cleave");
                            return;
                        }

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

                        if (WoW.CanCast("Sigil of Flame"))
                        {
                            WoW.CastSpell("Sigil of Flame");
                            return;
                        }
                    }

                    if (WoW.CanCast("Fel Eruption") && WoW.IsSpellInRange("Fel Eruption") && WoW.Pain >= 10)
                    {
                        WoW.CastSpell("Fel Eruption");
                        return;
                    }

                    if (WoW.CanCast("Sever") && WoW.IsSpellInRange("Soul Carver") && WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator
                    {
                        WoW.CastSpell("Sever");
                        return;
                    }

                    if (WoW.CanCast("Shear") && WoW.IsSpellInRange("Soul Carver") && !WoW.PlayerHasBuff("Metamorphosis")) // Pain Generator
                    {
                        WoW.CastSpell("Shear");
                        return;
                    }

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

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

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

                    if (WoW.CanCast("FOTI") && WoW.IsSpellInRange("Chaos Strike") && !WoW.IsSpellOnCooldown("FOTI") && !WoW.IsMoving && WoW.PlayerHasBuff("Momentum"))
                    {
                        WoW.CastSpell("FOTI");
                        return;
                    }
                    if (WoW.CanCast("Eye Beam") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 50 && WoW.PlayerHasBuff("Momentum"))
                    {
                        WoW.CastSpell("Eye Beam");
                        return;
                    }
                    if (WoW.CanCast("Blade Dance") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury >= 35 && WoW.IsSpellOnCooldown("Eye Beam") && WoW.PlayerHasBuff("Momentum"))
                    {
                        WoW.CastSpell("Blade Dance");
                        return;
                    }
                    if (WoW.CanCast("Chaos Strike") && WoW.IsSpellInRange("Chaos Strike") && WoW.IsSpellOnCooldown("Eye Beam") &&
                        (WoW.Fury >= 40 && WoW.PlayerHasBuff("Momentum") || WoW.Fury >= 70))
                    {
                        WoW.CastSpell("Chaos Strike");
                        return;
                    }
                    if (WoW.CanCast("Throw Glaive") && WoW.IsSpellInRange("Throw Glaive") && (WoW.PlayerHasBuff("Momentum") || WoW.PlayerSpellCharges("Throw Glaive") == 2))
                    {
                        WoW.CastSpell("Throw Glaive");
                        return;
                    }
                    if (WoW.CanCast("Blur") && WoW.IsInCombat && !WoW.IsSpellOnCooldown("Blur") && WoW.HealthPercent <= ConfigFile.ReadValue <int>("Demonhunter", "Blur Usage Percent"))
                    {
                        WoW.CastSpell("Blur");
                        return;
                    }
                    if (WoW.CanCast("Demons Bite") && WoW.IsSpellInRange("Chaos Strike") && WoW.Fury <= 70) // Fury Generator
                    {
                        WoW.CastSpell("Demons Bite");
                    }
                }
            }
        }
Ejemplo n.º 21
0
        public void BreathRotation()
        {
            hasBreath = WoW.PlayerHasBuff("Breath");
            if (combatRoutine.UseCooldowns && isCheckHotkeysFrostOffensivePillarofFrost && !WoW.IsSpellOnCooldown("PillarofFrost") && hasBreath && WoW.Level >= 57)
            {
                WoW.CastSpell("PillarofFrost");
            }
            if (combatRoutine.UseCooldowns && isCheckHotkeysFrostOffensivePillarofFrost && !WoW.IsSpellOnCooldown("PillarofFrost") && !hasBreath && WoW.SpellCooldownTimeRemaining("Breath") >= 5900 && WoW.Level >= 57)
            {
                WoW.CastSpell("PillarofFrost");
            }
            if ((haveCoF || useNextHRWCharge) && isCheckHotkeyslegyring && haveHRW && runicPower <= 30 && isCheckHotkeysFrostOffensiveErW && combatRoutine.UseCooldowns && !WoW.PlayerHasBuff("HEmpower Rune") && !WoW.IsSpellOnCooldown("HEmpower Rune") && hasBreath && legyringtest == true && WoW.Level >= 58)
            {
                useNextHRWCharge = false;
                WoW.CastSpell("HEmpower Rune");
                legyringtest = false;
            }
            if ((haveCoF || useNextHRWCharge) && !isCheckHotkeyslegyring && haveHRW && runicPower <= 30 && isCheckHotkeysFrostOffensiveErW && combatRoutine.UseCooldowns && !WoW.PlayerHasBuff("HEmpower Rune") && !WoW.IsSpellOnCooldown("HEmpower Rune") && hasBreath && WoW.Level >= 58)
            {
                useNextHRWCharge = false;
                WoW.CastSpell("HEmpower Rune");
            }
            if (isCheckHotkeyslegyring && !WoW.PlayerHasBuff("Breath"))
            {
                legyringtest = true;
            }
            if ((haveCoF || useNextHRWCharge) && !haveHRW && runicPower <= 50 && currentRunes <= 1 && isCheckHotkeysFrostOffensiveErW && combatRoutine.UseCooldowns && !WoW.IsSpellOnCooldown("HEmpower Rune") && hasBreath && WoW.Level >= 57)
            {
                WoW.CastSpell("Empower Rune");
            }
            if (combatRoutine.UseCooldowns && isMelee && currentRunes >= 2 && runicPower >= 70 && CanCastNoRange("Breath") && WoW.Level >= 100)
            {
                WoW.CastSpell("Breath");
                useNextHRWCharge = true;
                return;
            }
            if (combatRoutine.UseCooldowns && isMelee && runicPower >= 70 && CanCastNoRange("Breath"))
            {
                return;
            }
            if (!WoW.TargetHasDebuff("Frost Fever") && currentRunes >= 1 && !hasBreath && CanCastInRange("Howling Blast") && !WoW.IsSpellOnCooldown("Howling Blast") && WoW.Level >= 55)
            {
                WoW.CastSpell("Howling Blast");
                return;
            }
            if (isMelee && currentRunes >= 1 && WoW.Level >= 57 && ((runicPower >= 48 && hasBreath) || !hasBreath) && (!combatRoutine.UseCooldowns || (combatRoutine.UseCooldowns && WoW.SpellCooldownTimeRemaining("Breath") >= 1500)) && CanCastNoRange("Remorseless Winter"))
            {
                WoW.CastSpell("Remorseless Winter");
                return;
            }
            if (((runicPower >= 46 && hasBreath) || !hasBreath) && CanCastInRange("Howling Blast") && WoW.PlayerHasBuff("Rime") && WoW.Level >= 55)
            {
                WoW.CastSpell("Howling Blast");
                return;
            }
            if (WoW.Talent(6) != 1 && isMelee && currentRunes >= 2 && !hasBreath && WoW.PlayerHasBuff("Gathering Storm") && WoW.Level >= 55)
            {
                WoW.CastSpell("Obliterate");
                return;
            }
            if (runicPower >= 70 && !hasBreath && CanCastInRange("Frost Strike"))
            {
                WoW.CastSpell("Frost Strike");
                return;
            }
            if (WoW.Talent(6) == 1 && CanCastInRange("Frost Strike") && currentRunes >= 1 && WoW.PlayerHasBuff("Killing Machine") && !hasBreath && WoW.Level >= 90)
            {
                WoW.CastSpell("Frostscythe");
                return;
            }

            if (isMelee && currentRunes >= 2 && WoW.Level >= 55 && (!hasBreath || (hasBreath && (runicPower <= 70 || hasBreath && currentRunes > 3))))
            {
                WoW.CastSpell("Obliterate");
                return;
            }
            if (runicPower >= 25 && CanCastInRange("Frost Strike") && !hasBreath && (!combatRoutine.UseCooldowns || (combatRoutine.UseCooldowns && WoW.SpellCooldownTimeRemaining("Breath") >= 1500)))
            {
                WoW.CastSpell("Frost Strike");
                return;
            }
            if (WoW.Talent(2) == 3 && currentRunes <= 4 && runicPower <= 70 && WoW.Level >= 57 && CanCastNoRange("Horn") && !WoW.PlayerHasBuff("HEmpower Rune") && (hasBreath || (!hasBreath && WoW.SpellCooldownTimeRemaining("Breath") >= 1500)))
            {
                WoW.CastSpell("Horn");
            }
            if (isMelee && WoW.HealthPercent <= 40 && WoW.PlayerHasBuff("Free DeathStrike") && !hasBreath && WoW.Level >= 55)
            {
                WoW.CastSpell("Death Strike");
                return;
            }
        }
Ejemplo n.º 22
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");
            }
        }
        public override void Pulse()
        {
            if (combatRoutine.Type == RotationType.SingleTarget) /* Singel Target Rotation*/
            {
                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.HasTarget && WoW.IsInCombat && WoW.HealthPercent <= 20)
                /* Defensive Cooldowns */
                {
                    if (WoW.IsMoving && WoW.CanCast("UnendingResolve"))
                    {
                        WoW.CastSpell("UnendingResolve");
                        return;
                    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    if (!WoW.PlayerIsCasting && !WoW.PlayerIsChanneling && WoW.CanCast("Conflagrate"))
                    {
                        WoW.CastSpell("Conflagrate");
                    }
                }
            }
        }
        public override void Pulse()
        {
            if (interruptwatch.ElapsedMilliseconds == 0)
            {
                interruptwatch.Start();
                return;
            }


            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_F3) < 0)
            {
                if (interruptwatch.ElapsedMilliseconds > 1000)
                {
                    autointerrupt = !autointerrupt;
                    WoW.Speak("Interrupt " + (autointerrupt ? "On" : "Off"));
                    Log.WritePixelMagic("Auto interrupt " + (autointerrupt ? "ON" : "OFF"), Color.Red);
                    interruptwatch.Restart();
                }
            }

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

            if (WoW.IsInCombat && WoW.HealthPercent < 35 && WoW.CanCast("Last Stand") && !WoW.IsSpellOnCooldown("Last Stand"))
            {
                WoW.CastSpell("Last Stand");
                return;
            }
            if (WoW.IsInCombat && WoW.HealthPercent < 20 && WoW.CanCast("Shield Wall") && !WoW.IsSpellOnCooldown("Shield Wall"))
            {
                WoW.CastSpell("Shield Wall");
                return;
            }

            if (autointerrupt && WoW.IsInCombat && !WoW.IsSpellOnCooldown("Pummel") && WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Shield Slam") && WoW.TargetIsCasting &&
                WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast >= 80)
            {
                WoW.CastSpell("Pummel");
                return;
            }


            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LCONTROL) < 0)
            {
                if (WoW.IsInCombat && !WoW.IsSpellOnCooldown("HeroicLeap"))
                {
                    WoW.CastSpell("HeroicLeap");
                    return;
                }
                return;
            }
            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_KEY_1) < 0)
            {
                if (WoW.IsInCombat && !WoW.IsSpellOnCooldown("Thunder Clap"))
                {
                    WoW.CastSpell("Thunder Clap");
                    return;
                }
                return;
            }
            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_LMENU) < 0)
            {
                if (WoW.IsInCombat && !WoW.IsSpellOnCooldown("Shockwave"))
                {
                    WoW.CastSpell("Shockwave");
                    return;
                }
                return;
            }

            if (combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.AOE) // Do Single Target Stuff here
            {
                if (CombatWatch.IsRunning && !WoW.IsInCombat)
                {
                    CombatWatch.Reset();
                }
                if (!CombatWatch.IsRunning && WoW.IsInCombat)
                {
                    CombatWatch.Start();
                }

                if (WoW.HasTarget && WoW.TargetIsEnemy && !WoW.PlayerIsChanneling)
                {
                    if (!WoW.TargetHasDebuff("ShockWavestun") && WoW.IsInCombat)

                    {
                        if (WoW.CanCast("Shield Block") && WoW.Rage >= 15 && !WoW.PlayerIsChanneling &&
                            (WoW.PlayerSpellCharges("Shield Block") == 2 ||
                             (WoW.PlayerSpellCharges("Shield Block") >= 1 && WoW.HealthPercent < 100 && WoW.PlayerBuffTimeRemaining("ShieldBlockAura") <= 2) ||
                             WoW.PlayerSpellCharges("Shield Block") == 1 && WoW.HealthPercent < 100))
                        {
                            WoW.CastSpell("Shield Block");
                            return;
                        }

                        if (WoW.IsSpellInRange("Shield Slam") && WoW.CanCast("Thunder Clap") && !WoW.IsSpellOnCooldown("Thunder Clap") && CombatWatch.ElapsedMilliseconds > 1000 &&
                            CombatWatch.ElapsedMilliseconds < 5000)
                        {
                            WoW.CastSpell("Thunder Clap");
                            return;
                        }

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

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

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

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

                        if (WoW.TargetIsCasting && WoW.CanCast("SpellReflect") && !WoW.IsSpellOnCooldown("SpellReflect"))
                        {
                            WoW.CastSpell("SpellReflect");
                        }
                        if (WoW.IsSpellInRange("Shield Slam") && WoW.CanCast("Battle Cry") && !WoW.IsSpellOnCooldown("Battle Cry"))
                        {
                            WoW.CastSpell("Battle Cry");
                            return;
                        }
                        if (WoW.IsSpellInRange("Shield Slam") && WoW.CanCast("Shield Slam") && !WoW.IsSpellOnCooldown("Shield Slam") && WoW.PlayerHasBuff("Legendary"))
                        {
                            WoW.CastSpell("Shield Slam");
                            return;
                        }
                        if (WoW.IsSpellInRange("Shield Slam") && WoW.CanCast("Thunder Clap") && !WoW.IsSpellOnCooldown("Thunder Clap"))
                        {
                            WoW.CastSpell("Thunder Clap");
                            return;
                        }
                        if (WoW.CanCast("Revenge") && !WoW.IsSpellOnCooldown("Revenge") && WoW.IsSpellInRange("Shield Slam") && WoW.IsSpellOverlayed("Revenge") &&
                            !WoW.PlayerHasBuff("Vengeance: Ignore Pain"))
                        {
                            WoW.CastSpell("Revenge");
                            return;
                        }
                        if (WoW.CanCast("Revenge") && !WoW.IsSpellOnCooldown("Revenge") && WoW.IsSpellInRange("Shield Slam") && WoW.PlayerHasBuff("Vengeance: Focused Rage") && WoW.Rage > 59)
                        {
                            WoW.CastSpell("Revenge");
                            return;
                        }
                        if (WoW.CanCast("Revenge") && !WoW.IsSpellOnCooldown("Revenge") && WoW.IsSpellInRange("Shield Slam") && !WoW.PlayerHasBuff("Ignore Pain") && WoW.Rage > 35 &&
                            WoW.HealthPercent < 100)
                        {
                            WoW.CastSpell("Revenge");
                            return;
                        }
                        if (WoW.CanCast("Revenge") && !WoW.IsSpellOnCooldown("Revenge") && WoW.IsSpellInRange("Shield Slam") && WoW.PlayerHasBuff("Ignore Pain") &&
                            WoW.PlayerBuffTimeRemaining("Ignore Pain") <= 3 && WoW.Rage > 40 && WoW.HealthPercent < 100)
                        {
                            WoW.CastSpell("Revenge");
                            return;
                        }
                        if (WoW.CanCast("Revenge") && !WoW.IsSpellOnCooldown("Revenge") && WoW.IsSpellInRange("Shield Slam") && !WoW.PlayerHasBuff("Vengeance: Focused Rage") &&
                            !WoW.PlayerHasBuff("Vengeance: Ignore Pain") && WoW.Rage > 69)
                        {
                            WoW.CastSpell("Revenge");
                            return;
                        }
                        if (WoW.CanCast("Victory Rush") && !WoW.IsSpellOnCooldown("Victory Rush") && WoW.IsSpellInRange("Shield Slam") && WoW.HealthPercent < 90 &&
                            WoW.PlayerHasBuff("VictoryRush"))
                        {
                            WoW.CastSpell("Victory Rush");
                            return;
                        }
                        if (WoW.IsSpellInRange("Devastate") && WoW.CanCast("Devastate"))
                        {
                            WoW.CastSpell("Devastate");
                            return;
                        }
                    }
                    if (WoW.CanCast("Neltharion's Fury") && WoW.TargetHasDebuff("ShockWavestun"))
                    {
                        WoW.CastSpell("Neltharion's Fury");
                        return;
                    }

                    /* actions.prot=spell_reflection,if=incoming_damage_2500ms>health.max*0.20
                     *                                  actions.prot+=/demoralizing_shout,if=incoming_damage_2500ms>health.max*0.20&!talent.booming_voice.enabled
                     *                                  actions.prot+=/last_stand,if=incoming_damage_2500ms>health.max*0.40
                     *                                  actions.prot+=/shield_wall,if=incoming_damage_2500ms>health.max*0.40&!cooldown.last_stand.remains=0
                     *                                  actions.prot+=/potion,name=unbending_potion,if=(incoming_damage_2500ms>health.max*0.15&!buff.potion.up)|target.time_to_die<=25
                     *                                  actions.prot+=/battle_cry,if=cooldown.shield_slam.remains=0
                     *                                  actions.prot+=/demoralizing_shout,if=talent.booming_voice.enabled&buff.battle_cry.up
                     *                                  actions.prot+=/ravager,if=talent.ravager.enabled&buff.battle_cry.up
                     *                                  actions.prot+=/neltharions_fury,if=!buff.shield_block.up&cooldown.shield_block.remains>3&((cooldown.shield_slam.remains>3&talent.heavy_repercussions.enabled)|(!talent.heavy_repercussions.enabled))
                     *                                  actions.prot+=/shield_block,if=!buff.neltharions_fury.up&((cooldown.shield_slam.remains=0&talent.heavy_repercussions.enabled)|action.shield_block.charges=2|!talent.heavy_repercussions.enabled)
                     *                                  actions.prot+=/ignore_pain,if=(rage>=60&!talent.vengeance.enabled)|(buff.vengeance_ignore_pain.up&rage>=39)|(talent.vengeance.enabled&!buff.vengeance_ignore_pain.up&!buff.vengeance_revenge.up&rage<30&!buff.revenge.react)
                     *                                  actions.prot+=/shield_slam,if=(!(cooldown.shield_block.remains<=gcd.max*2&!buff.shield_block.up)&talent.heavy_repercussions.enabled)|!talent.heavy_repercussions.enabled
                     *                                  actions.prot+=/thunder_clap
                     *                                  actions.prot+=/revenge,if=(talent.vengeance.enabled&buff.revenge.react&!buff.vengeance_ignore_pain.up)|(buff.vengeance_revenge.up&rage>=59)|(talent.vengeance.enabled&!buff.vengeance_ignore_pain.up&!buff.vengeance_revenge.up&rage>=69)|(!talent.vengeance.enabled&buff.revenge.react)
                     *                                  actions.prot+=/devastate */
                }
            }
            if (combatRoutine.Type == RotationType.AOE)
            {
                // Do AOE Stuff here
            }
        }
Ejemplo n.º 25
0
        public override void Pulse()
        {
            {
                if (combatRoutine.Type == RotationType.SingleTarget)
                {
                    if (WoW.IsSpellInRange("Rupture") && WoW.IsInCombat && !WoW.IsMounted)
                    {
                        if (UseCooldowns &&
                            WoW.CanCast("Kingsbane") && WoW.CurrentComboPoints <= 4 && WoW.Energy >= 35 && WoW.PlayerHasBuff("Envenom") && WoW.PlayerBuffTimeRemaining("Envenom") >= 150 &&
                            !WoW.IsSpellOnCooldown("Kingsbane") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") >= 1400 &&
                            (
                                WoW.SpellCooldownTimeRemaining("Vendetta") >= 1000 ||
                                WoW.TargetHasDebuff("Vendetta")
                            ))
                        {
                            WoW.CastSpell("Kingsbane");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Toxic Blade") && WoW.Energy >= 20 && !WoW.IsSpellOnCooldown("Toxic Blade") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote") && WoW.Talent(6) == 1)
                        {
                            WoW.CastSpell("Toxic Blade");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Exsanguinate") && WoW.Energy >= 25 && !WoW.IsSpellOnCooldown("Exsanguinate") && WoW.IsSpellInRange("Garrote") && WoW.Talent(6) == 3)
                        {
                            WoW.CastSpell("Exsanguinate");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Garrote") && WoW.Energy >= 45 && !WoW.TargetHasDebuff("Garrote") && !WoW.IsSpellOnCooldown("Garrote") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Garrote");
                            return;
                        }
                        if (WoW.TargetHasDebuff("Vendetta") && WoW.CanCast("Fan Of Knives") && WoW.Energy >= 35 && WoW.PlayerHasBuff("FoK") && WoW.PlayerBuffStacks("FoK") == 30 && WoW.CurrentComboPoints <= 4)
                        {
                            WoW.CastSpell("Fan Of Knives");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Garrote") && WoW.Energy >= 45 && WoW.TargetHasDebuff("Garrote") && WoW.TargetDebuffTimeRemaining("Garrote") <= 300 && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Garrote");
                            return;
                        }
                        if (WoW.CurrentComboPoints == 4 && WoW.Energy >= 25 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture") && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (WoW.CurrentComboPoints == 4 && WoW.Energy >= 25 && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") <= 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (WoW.CurrentComboPoints == 5 && WoW.Energy >= 25 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture") && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (WoW.CurrentComboPoints == 5 && WoW.Energy >= 25 && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") <= 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetDebuffTimeRemaining("Toxins") <= 150 && WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetDebuffTimeRemaining("Toxins") <= 150 && WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (WoW.TargetHasDebuff("Kingsbane") && WoW.TargetDebuffTimeRemaining("Rupture") >= 400 && WoW.Energy >= 35 && WoW.CurrentComboPoints >= 2 && WoW.PlayerHasBuff("Envenom") && WoW.PlayerBuffTimeRemaining("Envenom") <= 150)
                        {
                            WoW.CastSpell("Envenom");
                            Log.Write("Extend Envenom remaining");
                            return;
                        }
                        if (WoW.TargetHasDebuff("Kingsbane") && WoW.TargetDebuffTimeRemaining("Rupture") >= 400 && WoW.Energy >= 35 && WoW.CurrentComboPoints >= 2 && !WoW.PlayerHasBuff("Envenom"))
                        {
                            WoW.CastSpell("Envenom");
                            Log.Write("Getting Envenom up for kingsbane");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && !WoW.TargetHasDebuff("Toxins") && WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && !WoW.TargetHasDebuff("Toxins") && WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.TargetHasDebuff("Toxins") && WoW.TargetHasDebuff("Vendetta") && WoW.Energy >= 140 && WoW.CurrentComboPoints >= 4 && WoW.CanCast("Envenom") && WoW.TargetHasDebuff("Rupture") && WoW.TargetDebuffTimeRemaining("Rupture") > 600 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (WoW.CanCast("Mutilate") && WoW.Energy >= 55 && WoW.CurrentComboPoints <= 3)
                        {
                            WoW.CastSpell("Mutilate");
                            return;
                        }
                        if (UseCooldowns && WoW.CanCast("Vendetta") &&
                            !WoW.IsSpellOnCooldown("Vendetta") &&
                            WoW.Energy <= 50
                            )
                        {
                            WoW.CastSpell("Vendetta");
                            return;
                        }

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


                if (combatRoutine.Type == RotationType.AOE || combatRoutine.Type == RotationType.SingleTargetCleave) // Do AoE Target Stuff here
                {
                    if (WoW.HasTarget && WoW.IsSpellInRange("Rupture") && WoW.IsInCombat && !WoW.IsMounted)
                    {
                        if (WoW.Energy >= 35 && WoW.CurrentComboPoints <= 4 && WoW.CanCast("Fan Of Knives"))
                        {
                            WoW.CastSpell("Fan Of Knives");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Toxic Blade") && WoW.Energy >= 20 && !WoW.IsSpellOnCooldown("Toxic Blade") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote") && WoW.Talent(6) == 1)
                        {
                            WoW.CastSpell("Toxic Blade");
                            return;
                        }
                        if (!WoW.PlayerHasBuff("Vanish") && WoW.CanCast("Exsanguinate") && WoW.Energy >= 25 && !WoW.IsSpellOnCooldown("Exsanguinate") && WoW.IsSpellInRange("Garrote") && WoW.Talent(6) == 3)
                        {
                            WoW.CastSpell("Exsanguinate");
                            return;
                        }
                        if (WoW.Energy >= 35 && WoW.CurrentComboPoints == 4 && WoW.TargetHealthPercent <= 35 && WoW.CanCast("Envenom"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (WoW.Energy >= 35 && WoW.CurrentComboPoints == 5 && WoW.TargetHealthPercent <= 35 && WoW.CanCast("Envenom"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (WoW.Energy >= 25 && WoW.CurrentComboPoints == 4 && WoW.TargetHealthPercent >= 36 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (WoW.Energy >= 25 && WoW.CurrentComboPoints == 5 && WoW.TargetHealthPercent >= 36 && WoW.CanCast("Rupture") && !WoW.TargetHasDebuff("Rupture"))
                        {
                            WoW.CastSpell("Rupture");
                            return;
                        }
                        if (WoW.Energy >= 35 && WoW.CurrentComboPoints >= 4 && WoW.TargetHealthPercent >= 36 && WoW.TargetHasDebuff("Rupture") && WoW.CanCast("Envenom"))
                        {
                            WoW.CastSpell("Envenom");
                            return;
                        }
                        if (WoW.CanCast("Garrote") && WoW.Energy >= 45 && !WoW.TargetHasDebuff("Garrote") && !WoW.IsSpellOnCooldown("Garrote") && WoW.CurrentComboPoints <= 4 && WoW.IsSpellInRange("Garrote"))
                        {
                            WoW.CastSpell("Garrote");
                            return;
                        }
                        if (UseCooldowns && WoW.CanCast("Berserk") && !WoW.IsSpellOnCooldown("Berserk"))
                        {
                            WoW.CastSpell("Berserk");
                            return;
                        }
                    }
                }
            }
        }
Ejemplo n.º 26
0
        public override void Pulse()
        {
            if (!coolDownStopWatch.IsRunning || coolDownStopWatch.ElapsedMilliseconds > 60000)
            {
                coolDownStopWatch.Restart();
            }
            if (DetectKeyPress.GetKeyState(DetectKeyPress.VK_MULTIPLY) < 0)                              //Use cooldowns manage by *numButton
            {
                if (coolDownStopWatch.ElapsedMilliseconds > 1000)
                {
                    combatRoutine.UseCooldowns = !combatRoutine.UseCooldowns;
                    //Log.Write("Cooldowns " + (combatRoutine.UseCooldowns ? "On" : "Off"));
                    coolDownStopWatch.Restart();
                }
            }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                    if (WoW.CanCast("Astral Shift") && WoW.HealthPercent < 60) //ASTRAL SHIFT - DMG REDUCTION if we are below 60% of HP
                    {
                        WoW.CastSpell("Astral Shift");
                        return;
                    }
                }
            }
        }
Ejemplo n.º 27
0
        public override void Pulse()
        {
            if (WoW.PlayerHealthPercent <= 1)
            {
                return;
            }

            //Heal yourself, Can't do damage if you're dead.
            if (WoW.PlayerHealthPercent <= 60)
            {
                if (isPlayerBusy(true, false) && !WoW.PlayerHasBuff(POWER_WORD_SHIELD))
                {
                    castWithRangeCheck(POWER_WORD_SHIELD);
                }
                castWithRangeCheck(SHADOW_MEND);
            }
            //Shield if health is dropping.
            if (WoW.PlayerHealthPercent <= 80 && !WoW.PlayerHasBuff(POWER_WORD_SHIELD))
            {
                castWithRangeCheck(POWER_WORD_SHIELD, true);
            }

            //Always have shadowform.
            if (!(WoW.PlayerHasBuff(SHADOWFORM_AURA) || WoW.PlayerHasBuff(VOIDFORM_AURA)))
            {
                castWithRangeCheck(SHADOWFORM);
            }

            if (WoW.HasTarget && WoW.TargetIsEnemy)
            {
                if (!WoW.PlayerHasBuff(VOIDFORM_AURA))
                {
                    //Just so happens that the spell and debuff name are the same, this is not ALWAYS the case.
                    maintainDebuff(VAMPIRIC_TOUCH, VAMPIRIC_TOUCH, 5);
                    maintainDebuff(SHADOW_PAIN, SHADOW_PAIN, 2);
                }
                else
                {
                    maintainDebuff(VAMPIRIC_TOUCH, VAMPIRIC_TOUCH, WoW.SpellCooldownTimeRemaining(VOID_BOLT));
                    maintainDebuff(SHADOW_PAIN, SHADOW_PAIN, WoW.SpellCooldownTimeRemaining(VOID_BOLT));
                }

                switch (combatRoutine.Type)
                {
                //Single target
                case RotationType.SingleTarget:
                    doRotation();
                    break;

                //Against 2 or more
                case RotationType.AOE:
                case RotationType.Cleave:
                    doRotation();
                    break;
                }
            }

            //Interrupt after a delay.
            if (WoW.TargetIsCasting && WoW.TargetIsEnemy)
            {
                if (timer.ElapsedMilliseconds >= INTERRUPT_DELAY)
                {
                    castWithRangeCheck(SILENCE);
                }
                else
                {
                    timer.Reset();
                    timer.Start();
                }
            }
        }
Ejemplo n.º 28
0
        public override void Pulse()        // Updated for Legion (tested and working for single target)
        {
            AddonCreationPulse();
            PlayerStats();
            AoEStuff();
            if (WoW.IsInCombat && !WoW.PlayerHasBuff("Mount"))
            {
                SelectRotation();
            }

            //Healthstone - Potion
            if ((WoW.CanCast("Healthstone") || WoW.CanCast("Potion")) &&
                (WoW.ItemCount("Healthstone") >= 1 || WoW.ItemCount("Potion") >= 1) &&
                (!WoW.ItemOnCooldown("Healthstone") || !WoW.ItemOnCooldown("Potion")) &&
                !WoW.PlayerHasBuff("Feign Death") &&
                WoW.HealthPercent <= 30 &&
                !WoW.PlayerHasBuff("Mount") &&
                WoW.HealthPercent != 0)
            {
                WoW.CastSpell("Healthstone");
                WoW.CastSpell("Potion");
                return;
            }

            //Exhilaration
            if (WoW.CanCast("Exhilaration") &&
                WoW.HealthPercent <= 20 &&
                !WoW.PlayerHasBuff("Mount") &&
                !WoW.PlayerHasBuff("Feign Death") &&
                WoW.HealthPercent != 0)
            {
                WoW.CastSpell("Exhilaration");
                return;
            }

            //Call pet
            if (!WoW.HasPet &&
                !WoW.PlayerHasBuff("Mount") &&
                !WoW.PlayerHasBuff("Feign Death") &&
                WoW.HealthPercent != 0)
            {
                WoW.CastSpell("Call Pet");
                return;
            }

            //Revive Pet
            if ((!WoW.HasPet || WoW.PetHealthPercent < 1) &&
                !WoW.PlayerHasBuff("Mount") &&
                !WoW.PlayerHasBuff("Feign Death") &&
                WoW.HealthPercent != 0)
            {
                WoW.CastSpell("Heart of the Phoenix");
                WoW.CastSpell("Revive Pet");
                return;
            }

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

            if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat && !WoW.PlayerHasBuff("Mount") && !WoW.PlayerIsChanneling && !WoW.PlayerHasBuff("Feign Death") && WoW.HealthPercent != 0)
            {
                //Stampede
                if (DetectKeyPress.GetKeyState(DetectKeyPress.Shift) < 0 &&
                    WoW.CanCast("Stampede") &&
                    CharInfo.T7 == 1)
                {
                    WoW.CastSpell("Stampede");
                    return;
                }

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

                //Cooldowns
                if (UseCooldowns)
                {
                    //Aspect of the Wild
                    if (WoW.CanCast("Aspect of the Wild") &&
                        !WoW.PlayerHasBuff("Aspect of the Turtle") &&
                        WoW.PlayerHasBuff("Bestial Wrath") &&
                        WoW.PlayerBuffTimeRemaining("Bestial Wrath") >= 12)
                    {
                        WoW.CastSpell("Aspect of the Wild");
                        return;
                    }
                }

                //Legendary Trinket
                if (WoW.CanCast("Kil'jaeden's Burning Wish") &&
                    (((WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 15 && WoW.SpellCooldownTimeRemaining("Dire Beast") > 5)) || WoW.PlayerHasBuff("Bestial Wrath")) &&
                    !WoW.ItemOnCooldown("Kil'jaeden's Burning Wish") &&
                    WoW.IsSpellInRange("Cobra Shot"))
                {
                    WoW.CastSpell("Kil'jaeden's Burning Wish");
                }

                //SINGLE TARGET

                //Bestial Wrath
                if ((combatRoutine.Type == RotationType.SingleTarget || combatRoutine.Type == RotationType.SingleTargetCleave) &&
                    WoW.CanCast("Bestial Wrath") &&
                    !WoW.PlayerHasBuff("Aspect of the Turtle") &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    (WoW.Focus >= 110))
                {
                    WoW.CastSpell("Bestial Wrath");
                    WoW.CastSpell("Kill Command");
                    if (WoW.CanCast("A Murder of Crows") &&
                        WoW.IsSpellInRange("Cobra Shot") &&
                        CharInfo.T6 == 1 &&
                        WoW.Focus >= 30)
                    {
                        WoW.CastSpell("A Murder of Crows");
                    }

                    return;
                }

                //A Murder of Crows
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 23 &&
                    WoW.CanCast("A Murder of Crows") &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    CharInfo.T6 == 1 &&
                    WoW.Focus >= 25)
                {
                    WoW.CastSpell("A Murder of Crows");
                    return;
                }

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

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

                //Dire Frenzy
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    WoW.CanCast("Dire Frenzy") &&
                    WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 6 &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    CharInfo.T2 == 2)
                {
                    WoW.CastSpell("Titan's Thunder");
                    WoW.CastSpell("Dire Frenzy");
                    return;
                }

                //Kill Command
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    WoW.CanCast("Kill Command") &&
                    (WoW.SpellCooldownTimeRemaining("Bestial Wrath") - WoW.SpellCooldownTimeRemaining("Kill Command") > 2 || (WoW.SpellCooldownTimeRemaining("Bestial Wrath") >= 23 && WoW.SpellCooldownTimeRemaining("Dire Beast") - WoW.SpellCooldownTimeRemaining("Kill Command") > 2)) &&
                    WoW.Focus >= 25)
                {
                    WoW.CastSpell("Kill Command");
                    return;
                }

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

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

                //AOE

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

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

                //Dire Frenzy
                if (combatRoutine.Type == RotationType.AOE &&
                    WoW.CanCast("Dire Frenzy") &&
                    WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 6 &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    CharInfo.T2 == 2)
                {
                    WoW.CastSpell("Dire Frenzy");
                    WoW.CastSpell("Titan's Thunder");
                    return;
                }

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

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

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

                //CLEAVE

                //A Murder of Crows
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 23 &&
                    WoW.CanCast("A Murder of Crows") &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    CharInfo.T6 == 1 &&
                    WoW.Focus >= 25)
                {
                    WoW.CastSpell("A Murder of Crows");
                    return;
                }

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

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

                //Dire Frenzy
                if (combatRoutine.Type == RotationType.SingleTargetCleave &&
                    WoW.CanCast("Dire Frenzy") &&
                    WoW.SpellCooldownTimeRemaining("Bestial Wrath") > 6 &&
                    WoW.IsSpellInRange("Cobra Shot") &&
                    CharInfo.T2 == 2)
                {
                    WoW.CastSpell("Dire Frenzy");
                    WoW.CastSpell("Titan's Thunder");
                    return;
                }

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

                //Kill Command
                if (combatRoutine.Type == RotationType.SingleTarget &&
                    WoW.CanCast("Kill Command") &&
                    (WoW.SpellCooldownTimeRemaining("Bestial Wrath") - WoW.SpellCooldownTimeRemaining("Kill Command") > 2 || (WoW.SpellCooldownTimeRemaining("Bestial Wrath") >= 23 && WoW.SpellCooldownTimeRemaining("Dire Beast") - WoW.SpellCooldownTimeRemaining("Kill Command") > 2)) &&
                    WoW.Focus >= 25)
                {
                    WoW.CastSpell("Kill Command");
                    return;
                }

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

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

                //Mend Pet
                if (WoW.HasPet &&
                    WoW.CanCast("Mend Pet") &&
                    WoW.PetHealthPercent <= 70 &&
                    !WoW.PlayerHasBuff("Feign Death"))
                {
                    WoW.CastSpell("Mend Pet");
                    return;
                }
            }
        }
Ejemplo n.º 29
0
 public override void Pulse()
 {
     if (WoW.IsInCombat)
     {
         interruptwatch.Start();
     }
     // if (WoW.HasBuff("Mount")) return;
     // COOLDOWNS
     if (WoW.IsInCombat && WoW.TargetIsEnemy && WoW.IsSpellInRange("Rebuke"))
     {
         if (SeraphimBoss && !WoW.IsSpellOnCooldown("Seraphim") && WoW.PlayerSpellCharges("Shield of the Righteous") >= 2 && WoW.HealthPercent >= 80)
         {
             Log.Write("Seraphim", Color.Red);
             WoW.CastSpell("Seraphim");
             return;
         }
         if (WoW.PlayerSpellCharges("Shield of the Righteous") == 3)
         {
             Log.Write("SoTR 3 Stacks, casting SoTR.", Color.Red);
             WoW.CastSpell("Shield of the Righteous");
             return;
         }
         if (WoW.PlayerHasBuff("Shield of the Righteous") && WoW.PlayerBuffTimeRemaining("Shield of the Righteous") <= 1.5)
         {
             Log.Write("SoTR remaining under 1.5seconds on target, cast SoTR.", Color.Red);
             WoW.CastSpell("Shield of the Righteous");
             return;
         }
         if (WoW.PlayerSpellCharges("Shield of the Righteous") >= 1 && WoW.HealthPercent <= 80 &&
             (!WoW.PlayerHasBuff("Shield of the Righteous") || WoW.PlayerBuffTimeRemaining("Shield of the Righteous") <= 1.5))
         {
             Log.Write("SoTR 1+ Stack and Health under 80%.", Color.Red);
             WoW.CastSpell("Shield of the Righteous");
             return;
         }
         if (WoW.CanCast("Eye of Tyr") && !WoW.IsSpellOnCooldown("Eye of Tyr") && WoW.HealthPercent <= 60)
         {
             Log.Write("Health under 60%, casting Eye of Tyr.", Color.Red);
             WoW.CastSpell("Eye of Tyr");
             return;
         }
         if (WoW.CanCast("Ardent Defender") && !WoW.IsSpellOnCooldown("Ardent Defender") && WoW.HealthPercent <= 10)
         {
             Log.Write("Health Critical casting Ardent Defender.", Color.Red);
             WoW.CastSpell("Ardent Defender");
             return;
         }
         if (WoW.CanCast("Guardian of the Ancient Kings") && !WoW.IsSpellOnCooldown("Guardian of the Ancient Kings") && WoW.HealthPercent <= 30)
         {
             Log.Write("Health low casting GoAK.", Color.Red);
             WoW.CastSpell("Guardian of the Ancient Kings");
             return;
         }
         if (WoW.CanCast("Lay on Hands") && !WoW.IsSpellOnCooldown("Lay on Hands") && WoW.HealthPercent <= 20)
         {
             Log.Write("Health low casting LoH.", Color.Red);
             WoW.CastSpell("Lay on Hands");
             return;
         }
         if (WoW.TargetIsCasting && interruptwatch.ElapsedMilliseconds > 1500)
         {
             //    if (!WoW.IsSpellOnCooldown("Rebuke"))
             //    {
             //        WoW.CastSpellByName("Rebuke");
             //        interruptwatch.Reset();
             //        interruptwatch.Start();
             //        return;
             //    }
             if (!WoW.IsSpellOnCooldown("Avenger's Shield") && !WoW.IsSpellOnGCD("Avenger's Shield"))
             {
                 WoW.CastSpell("Avenger's Shield");
                 interruptwatch.Reset();
                 interruptwatch.Start();
                 return;
             }
         }
     }
     // SINGLE
     if (combatRoutine.Type == RotationType.SingleTarget)
     {
         if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsSpellInRange("Rebuke")) //GCD and Melee range Check
         {
             // Hand of the Protector under 60% health
             if (HotPBoss && WoW.CanCast("Hand of the Protector") && !WoW.IsSpellOnCooldown("Hand of the Protector") && WoW.HealthPercent <= 60)
             {
                 Log.Write("Health under 60%, Hand of Protector.", Color.Red);
                 WoW.CastSpell("Hand of the Protector");
                 return;
             }
             // Light of the Protector under 60% health
             if (!HotPBoss && WoW.CanCast("Light of the Protector") && !WoW.IsSpellOnCooldown("Light of the Protector") && WoW.HealthPercent <= 60)
             {
                 Log.Write("Health under 60%, Light of Protector.", Color.Red);
                 WoW.CastSpell("Light of the Protector");
                 return;
             }
             // Cast Hammer if max stacks
             if (BlessedHammerBoss && WoW.CanCast("Blessed Hammer") && WoW.PlayerSpellCharges("Blessed Hammer") >= 3 && !WoW.IsSpellOnGCD("Blessed Hammer"))
             {
                 Log.Write("Blessed Hammer max stacks, casting Blessed Hammer.", Color.Red);
                 WoW.CastSpell("Blessed Hammer");
                 return;
             }
             // Cast Hammer
             if (!BlessedHammerBoss && WoW.CanCast("Hammer of the Righteous") && WoW.PlayerSpellCharges("Hammer of the Righteous") >= 1 && !WoW.IsSpellOnGCD("Hammer of the Righteous"))
             {
                 Log.Write("Hammer of the Righteous.", Color.Red);
                 WoW.CastSpell("Hammer of the Righteous");
                 return;
             }
             // Judgement on Cooldown
             if (WoW.CanCast("Judgement") && !WoW.IsSpellOnGCD("Judgement"))
             {
                 WoW.CastSpell("Judgement");
                 return;
             }
             // Consecration on cooldown
             if (WoW.CanCast("Consecration") && !WoW.IsSpellOnGCD("Consecration") && !WoW.TargetHasDebuff("Consecration"))
             {
                 Log.Write("Consecration debuff not active, casting Consecration.", Color.Red);
                 WoW.CastSpell("Consecration");
                 return;
             }
             // Avenger's Shield on cooldown
             if (WoW.CanCast("Avenger's Shield") && !WoW.IsSpellOnGCD("Avenger's Shield"))
             {
                 WoW.CastSpell("Avenger's Shield");
                 return;
             }
             // Cast Blessed Hammer at 1 + stacks
             if (BlessedHammerBoss && WoW.CanCast("Blessed Hammer") && WoW.PlayerSpellCharges("Blessed Hammer") >= 1 && !WoW.IsSpellOnGCD("Blessed Hammer") &&
                 !WoW.TargetHasDebuff("Blessed Hammer"))
             {
                 Log.Write("Nothing to do, casting Blessed Hammer.", Color.Red);
                 WoW.CastSpell("Blessed Hammer");
                 return;
             }
         }
     }
     // AOE/CLEAVE
     if (combatRoutine.Type == RotationType.AOE) // AoE/Cleave
     {
         if (WoW.HasTarget && WoW.TargetIsEnemy) //
         {
             // Hand of the Protector under 60% health
             if (HotPBoss && WoW.CanCast("Hand of the Protector") && !WoW.IsSpellOnCooldown("Hand of the Protector") && WoW.HealthPercent <= 60)
             {
                 Log.Write("Health under 60%, Hand of Protector.", Color.Red);
                 WoW.CastSpell("Hand of the Protector");
                 return;
             }
             // Light of the Protector under 60% health
             if (!HotPBoss && WoW.CanCast("Light of the Protector") && !WoW.IsSpellOnCooldown("Light of the Protector") && WoW.HealthPercent <= 60)
             {
                 Log.Write("Health under 60%, Light of Protector.", Color.Red);
                 WoW.CastSpell("Light of the Protector");
                 return;
             }
             if (WoW.PlayerSpellCharges("Blessed Hammer") >= 3 && !WoW.IsSpellOnGCD("Blessed Hammer")) // Cast Hammer if max stacks
             {
                 WoW.CastSpell("Blessed Hammer");
                 return;
             }
             if (WoW.CanCast("Avenger's Shield") && !WoW.IsSpellOnGCD("Avenger's Shield")) // Avenger's Shield on cooldown
             {
                 WoW.CastSpell("Avenger's Shield");
                 return;
             }
             if (WoW.CanCast("Consecration") && !WoW.IsSpellOnGCD("Consecration") && !WoW.TargetHasDebuff("Consecration")) // Consecration on cooldown
             {
                 Log.Write("Consecration debuff not active, casting Consecration.", Color.Red);
                 WoW.CastSpell("Consecration");
                 return;
             }
             if (WoW.CanCast("Blessed Hammer") && // Cast Hammer at 1 + stacks
                 WoW.PlayerSpellCharges("Blessed Hammer") >= 1 && !WoW.IsSpellOnGCD("Blessed Hammer"))
             {
                 Log.Write("AoE, casting Blessed Hammer.", Color.Red);
                 WoW.CastSpell("Blessed Hammer");
                 return;
             }
             if (WoW.CanCast("Judgement") && !WoW.IsSpellOnGCD("Judgement")) // Judgement on Cooldown
             {
                 WoW.CastSpell("Judgement");
             }
         }
     }
 }
Ejemplo n.º 30
0
        // Pulse Rotation
        public override void Pulse()
        {
            if (WoW.CanCast("Moonkin Form") && !WoW.PlayerHasBuff("Moonkin Form") && WoW.HasTarget && WoW.TargetIsEnemy && !WoW.IsMounted && !WoW.PlayerHasBuff("Travel Form") && !WoW.PlayerHasBuff("Bear Form") && !WoW.PlayerHasBuff("Cat Form"))
            {
                WoW.CastSpell("Moonkin Form");
                return;
            }

            if (WoW.CanCast("Celestial Alignment") && WoW.HasBossTarget && WoW.IsInCombat || WoW.CanCast("Celestial Alignment") && WoW.IsInCombat && UseCooldowns)
            {
                WoW.CastSpell("Celestial Alignment");
                return;
            }

            if (combatRoutine.Type == RotationType.SingleTarget)  // Do Single Target Stuff here
            {
                Log.Write("Doing Singletarget", Color.Red);

                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.CanCast("Solar Beam") && WoW.TargetIsCastingAndSpellIsInterruptible && WoW.TargetPercentCast > 35)
                    {
                        WoW.CastSpell("Solar Beam");
                        return;
                    }

                    if (WoW.CanCast("Starsurge") && WoW.CurrentAstralPower > 70)
                    {
                        WoW.CastSpell("Starsurge");
                        return;
                    }

                    if (WoW.CanCast("Moonfire") && !WoW.TargetHasDebuff("Moonfire") || WoW.TargetDebuffTimeRemaining("Moonfire") < 300)
                    {
                        WoW.CastSpell("Moonfire");
                        return;
                    }

                    if (WoW.CanCast("Sunfire") && !WoW.TargetHasDebuff("Sunfire") && WoW.LastSpell != "Sunfire" || WoW.TargetDebuffTimeRemaining("Sunfire") < 300)
                    {
                        WoW.CastSpell("Sunfire");
                        return;
                    }

                    if (WoW.CanCast("Lunar Strike") && WoW.LastSpell != "Lunar Strike" && WoW.PlayerBuffTimeRemaining("Lunar Empowerment") > GCD && !WoW.IsMoving || WoW.CanCast("Lunar Strike") && WoW.PlayerBuffTimeRemaining("Lunar Empowerment") > GCD && !WoW.IsMoving && WoW.PlayerBuffStacks("Lunar Empowerment") >= 2)
                    {
                        WoW.CastSpell("Lunar Strike");
                        return;
                    }

                    if (WoW.CanCast("Solar Wrath") && WoW.PlayerBuffTimeRemaining("Solar Empowerment") > GCD && !WoW.IsMoving || WoW.CanCast("Solar Wrath") && WoW.CurrentAstralPower < 85 && !WoW.IsMoving || WoW.CanCast("Solar Wrath") && WoW.PlayerBuffTimeRemaining("Solar Empowerment") > GCD && !WoW.IsMoving && WoW.PlayerBuffStacks("Solar Empowerment") >= 2)
                    {
                        WoW.CastSpell("Solar Wrath");
                        return;
                    }

                    if (WoW.CanCast("Rejuv") && WoW.HealthPercent < 85 && !WoW.PlayerHasBuff("Rejuv") && !WoW.IsMounted && !WoW.PlayerHasBuff("Travel Form"))
                    {
                        WoW.CastSpell("Rejuv");
                        return;
                    }

                    if (WoW.CanCast("Regrowth") && WoW.HealthPercent < 50 && !WoW.IsMoving)
                    {
                        WoW.CastSpell("Regrowth");
                        return;
                    }
                }
            }

            if (combatRoutine.Type == RotationType.SingleTargetCleave)
            {
            }

            if (combatRoutine.Type == RotationType.AOE)
            {
                Log.Write("Doing AOE", Color.Red);

                if (WoW.HasTarget && WoW.TargetIsEnemy && WoW.IsInCombat)
                {
                    if (WoW.CanCast("Starfall") && !WoW.PlayerHasBuff("Starfall") && WoW.CurrentAstralPower > 85)
                    {
                        //WoW.CastSpell("Starfall");
                        WoW.CastSpellOnMe("Starfall");
                        return;
                    }

                    if (WoW.CanCast("Starsurge") && WoW.CurrentAstralPower > 40)
                    {
                        WoW.CastSpell("Starsurge");
                        return;
                    }

                    if (WoW.CanCast("Moonfire") && !WoW.TargetHasDebuff("Moonfire") || WoW.TargetDebuffTimeRemaining("Moonfire") < 300)
                    {
                        WoW.CastSpell("Moonfire");
                        return;
                    }

                    if (WoW.CanCast("Sunfire") && !WoW.TargetHasDebuff("Sunfire") || WoW.TargetDebuffTimeRemaining("Sunfire") < 300)
                    {
                        WoW.CastSpell("Sunfire");
                        return;
                    }

                    if (WoW.CanCast("Lunar Strike") && WoW.LastSpell != "Lunar Strike" && WoW.PlayerBuffTimeRemaining("Lunar Empowerment") > GCD && !WoW.IsMoving)
                    {
                        WoW.CastSpell("Lunar Strike");
                        return;
                    }

                    if (WoW.CanCast("Solar Wrath") && WoW.PlayerBuffTimeRemaining("Solar Empowerment") > GCD && !WoW.IsMoving || WoW.CanCast("Solar Wrath") && WoW.CurrentAstralPower < 85 && !WoW.IsMoving)
                    {
                        WoW.CastSpell("Solar Wrath");
                        return;
                    }

                    if (WoW.CanCast("Rejuv") && WoW.HealthPercent < 85 && !WoW.PlayerHasBuff("Rejuv") && WoW.IsInCombat)
                    {
                        WoW.CastSpell("Rejuv");
                        return;
                    }

                    if (WoW.CanCast("Regrowth") && WoW.HealthPercent < 50 && !WoW.IsMoving && WoW.IsInCombat)
                    {
                        WoW.CastSpell("Regrowth");
                        return;
                    }
                }
            }
        }