예제 #1
0
        public static async Task <bool> RotationSelector()
        {
            // we are playing manual, i am not alive, or I am mounted or on taxi, do not continue
            if (HK.manualOn || !Me.IsAlive || (Me.OnTaxi))
            {
                return(true);
            }

            // face taret, ensure melee, interrupt and taunt do not need to return as they are off of global cooldown.
            await C.FaceTarget(CurrentTarget);

            await C.EnsureMeleeRange(CurrentTarget);

            await InterruptTarget();

            if (await S.GCD(SB.Torment, C.CombatColor, !CurrentTarget.IsTargetingMeOrPet && VS.VengeanceAllowTaunt,
                            string.Format($"CT:{CurrentTarget.SafeName} not targeting me. Taunting!")))
            {
                return(true);
            }

            if (CurrentTarget.IsValidCombatUnit())
            {
                if (await ActiveMitigation())
                {
                    return(true);
                }

                if (await GapCloser())
                {
                    return(true);
                }

                if ((HK.VengeanceAoEOn || U.activeEnemies(Me.Location, 8f).Count() >= 3))
                {
                    if (await MultipleTarget())
                    {
                        return(true);
                    }
                }

                // default to single target if nothing else
                return(await SingleTarget());
            }
            return(false);
        }
예제 #2
0
        //private static Stopwatch _check = new Stopwatch();
        public override void Pulse()
        {
            if (!StyxWoW.IsInGame || !StyxWoW.IsInWorld || Me == null || !Me.IsValid || !Me.IsAlive || Me.Mounted || HK.manualOn)
            {
                return;
            }
            if (!Me.Combat)
            {
                return;
            }

            // if we have an oppsing faction, then clear the target.
            if (U.isOpposingFaction(Me.CurrentTarget) && GeneralSettings.Instance.GeneralIgnoreOpposingFaction)
            {
                Me.ClearTarget();
            }

            // cache a few things like my fury/pain
            C.Cache();

            // grab all enemies within 50 yards to find a valid target
            U.enemyAnnex(50f);

            // make sure we aren't using fel devastation or something before we try to grab targets for no good reason.
            if (!Me.IsCasting || !Me.IsChanneling)
            {
                // grab an interrupt target
                if (GetInterruptTarget())
                {
                    return;
                }

                // get a taunt target, if any
                if (GetTauntTarget())
                {
                    return;
                }

                // get a new target, if any
                if (GetNewTarget())
                {
                    return;
                }
            }
        }
예제 #3
0
        public static async Task <bool> Pull()
        {
            if (CurrentTarget.IsValidCombatUnit())
            {
                await C.EnsureMeleeRange(CurrentTarget);

                await C.FaceTarget(CurrentTarget);

                if (await S.Cast(SB.ThrowGlaive, C.CombatColor, CurrentTarget.Distance <= 30, "Pull - GlaiveTimer: " + glaiveTossTimer.ElapsedMilliseconds + "ms"))
                {
                    glaiveTossTimer.Restart(); return(true);
                }

                // use to engage if you have the charges to do so
                if (await S.CastGround(SB.InfernalStrike, C.CombatColor,
                                       VS.VengeanceCombatInfernalStrikePull &&
                                       CurrentTarget.Distance <= infernalStrikeRange &&
                                       !CurrentTarget.IsWithinMeleeRangeOf(Me) &&
                                       !VS.VengeancePreferPullWithFelblade
                                       , "Pull"))
                {
                    return(true);
                }

                // need to change this to check to see if we want to pull with Fel Blade or Infernal Strike (or which we prefer)
                if (await S.Cast(SB.FelBlade, C.CombatColor, T.VengeanceFelblade &&
                                 !CurrentTarget.IsWithinMeleeRangeOf(Me) &&
                                 CurrentTarget.Distance <= 15, "Pull"))
                {
                    return(true);
                }

                // now use in case felblade was on cd, but don't check prefer
                if (await S.CastGround(SB.InfernalStrike, C.CombatColor,
                                       CurrentTarget.Distance <= infernalStrikeRange &&
                                       VS.VengeanceCombatInfernalStrikePull &&
                                       !CurrentTarget.IsWithinMeleeRangeOf(Me)
                                       , "Pull"))
                {
                    return(true);
                }
            }
            return(false);
        }
예제 #4
0
        public static async Task <bool> Pull()
        {
            if (CurrentTarget.IsValidCombatUnit())
            {
                if (!CurrentTarget.IsWithinMeleeRangeOf(Me) && GS.GeneralMovement)
                {
                    //L.infoLog("Tried to pull");
                    await C.EnsureMeleeRange(CurrentTarget);
                }

                if (GS.GeneralFacing)
                {
                    // check to see if we need to face target
                    await C.FaceTarget(CurrentTarget);
                }



                // throw a glaive first
                if (await S.Cast(SB.ThrowGlaive, C.CombatColor,
                                 CurrentTarget.Distance <= 30))
                {
                    return(true);
                }

                if (await S.Cast(SB.FelBlade, C.CombatColor,
                                 CurrentTarget.Distance <= 15))
                {
                    return(true);
                }

                // use to engage
                return(await S.GCD(SB.FelRush, C.CombatColor, CurrentTarget.Distance <= 20 &&
                                   HS.HavocFelRushOnPull));
            }

            return(true);
        }
예제 #5
0
        public static async Task <bool> RotationSelector()
        {
            // we are playing manual, i am not alive, or I am mounted or on taxi, do not continue
            if (HK.manualOn || !Me.IsAlive || (Me.OnTaxi) || Me.IsCasting || Me.IsChanneling)
            {
                return(true);
            }
            // if I

            // i don't want facing to interfere with vengeful retreat opener.
            if (openingRotationSkillsUsed != OpenerSteps.FaceAwayFromTarget && openingRotationSkillsUsed != OpenerSteps.VengefulRetreat)
            {
                if (GS.GeneralFacing)
                {
                    // check to see if we need to face target
                    await C.FaceTarget(CurrentTarget);
                }
            }

            if (GS.GeneralMovement)
            {
                // ensure we are in melee range and not too close
                await C.EnsureMeleeRange(CurrentTarget);
            }

            if (CurrentTarget.IsValidCombatUnit())
            {
                if (await OpeningRotationSingleTarget())
                {
                    return(true);
                }

                #region Offensive Hotkey
                if (HK.HavocOffensiveOn)
                {
                    // we have offensive cooldowns enabled, let's use them if they are available first.
                    if (await I.UseItem(I.GetItemByID(HS.HavocHealthPotionID), HKS.HotkeyHavocOffensiveAgilityPotion))
                    {
                        return(true);
                    }
                    if (await S.Cast(SB.MetamorphosisSpell, C.CombatColor, HKS.HotkeyHavocOffensiveMetamorphosis))
                    {
                        return(true);
                    }
                    if (await S.Cast(SB.FuryOfTheIllidari, C.CombatColor, HKS.HotkeyHavocOffensiveFoTI))
                    {
                        return(true);
                    }
                    if (await S.Cast(SB.Nemesis, C.CombatColor, HKS.HotkeyHavocOffensiveNemesis))
                    {
                        return(true);
                    }
                    if (await S.Cast(SB.ChaosBlades, C.CombatColor, HKS.HotkeyHavocOffensiveChaosBlades))
                    {
                        return(true);
                    }
                }
                #endregion
                // see if we need any defensive cooldowns
                if (await SaveMe())
                {
                    return(true);
                }

                if ((HK.HavocAoEOn || U.activeEnemies(Me.Location, 8f).Count() >= 2))
                {
                    // try to use aoe abilities
                    if (await AoE(U.activeEnemies(Me.Location, 8f).Count()))
                    {
                        return(true);
                    }
                    // we were supposed to aoe, but nothing to use for aoe (or jumped back out of melee), so use single target
                    if (await AoEDashing(U.activeEnemies(Me.Location, 8f).Count()))
                    {
                        return(true);
                    }
                }



                // default to single target if nothing else
                return(await SingleTarget());
            }
            return(false);
        }