Beispiel #1
0
 private static async Task <bool> UseRacialToClearLoC()
 {
     if (Main.Debug)
     {
         Log.Diagnostics("In UseRacialToClearLoc() call");
     }
     if (!_locDelay.IsRunning)
     {
         _locDelay.Start();
         return(false);
     }
     if (_locDelay.ElapsedMilliseconds > SettingsManager.Instance.LoCDelay)
     {
         if (WoWSpell.FromId(SpellBook.RacialHumanEveryManForHimself).CooldownTimeLeft.TotalMilliseconds == 0)
         {
             if (await Abilities.Cast <Shared.Racials.RacialHumanAbility>(Me))
             {
                 _locDelay.Reset();
                 return(true);
             }
         }
         else
         {
             Log.Diagnostics("Human Racial is on Cooldown.");
         }
         return(true);
     }
     return(true);
 }
Beispiel #2
0
        private static async Task <bool> BurstRotation()
        {
            if (await Abilities.Cast <KidneyShotAbility>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <KillingSpree>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <VanishOffensive>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <GarotteAbility>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <DeathFromAboveAbility>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <MarkedForDeathAbility>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <EviscerateAbility>(MyCurrentTarget))
            {
                return(true);
            }

            return(await CombatRotation());
        }
Beispiel #3
0
        /// <summary>
        ///     Force combat with your current target.
        /// </summary>
        public async Task <bool> ForceCombat()
        {
            if (Settings.ForceCombat)
            {
                if (!Me.Combat && Me.HasAttackableTarget())
                {
                    if (Me.HasAura(SpellBook.Prowl))
                    {
                        if (await Abilities.Cast <ProwlOpenerAbility>(Me.CurrentTarget))
                        {
                            return(true);
                        }
                    }
                    else
                    {
                        if (await Abilities.Cast <RakeAbility>(Me.CurrentTarget))
                        {
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
Beispiel #4
0
        public async Task <bool> CheckAndApplyBloodtalons()
        {
            // Do I have Blood Talons Talent?
            var hasBloodTalonsTalent = Me.KnowsSpell(SpellBook.Bloodtalons);

            // Do I have Predatory Swiftness Proc?
            var hasPredatorySwiftnessProc = Me.HasAura(SpellBook.PredatorySwiftnessProc);

            var accessGranted = false;

            if (Settings.BloodtalonsApplyToFinishers)
            {
                // Do I have 4 combo points?
                accessGranted = Me.ComboPoints >= 4;
            }

            if (Settings.BloodtalonsApplyImmediately)
            {
                accessGranted = hasPredatorySwiftnessProc;
            }

            if (hasBloodTalonsTalent && hasPredatorySwiftnessProc)
            {
                if (accessGranted ||
                    Me.GetAuraById(SpellBook.PredatorySwiftnessProc).TimeLeft <= TimeSpan.FromSeconds(3))
                {
                    if (await Abilities.Cast <HealingTouchSnapshotAbility>(Me))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Beispiel #5
0
        private static async Task <bool> SubtletyRotationAoE()
        {
            if (HotKeyManager.NoAoe)
            {
                return(await SubtletySingleRotation());
            }

            //Finisher
            if (await Abilities.Cast <SliceNDiceAbility>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <CrimsonTempest>(MyCurrentTarget))
            {
                return(true);
            }
            //Generator
            if (!(Me.AuraStacks(SpellBook.AuraAnticipation) >= 1))
            {
                if (await Abilities.Cast <FanOfKnives>(MyCurrentTarget))
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #6
0
        private static async Task <bool> AssassinationRotationTwoTargets()
        {
            //NoAoe
            if (HotKeyManager.NoAoe)
            {
                return(await AssassinationSingleRotation());
            }

            if (!Me.HasAura(SpellBook.CastEnvenom) && Me.ComboPoints == 5 && (Me.HasAttackableTarget() && !Me.CurrentTarget.HasAura(SpellBook.CastVendetta)))
            {
                return(await AssasinPoolRotation());
            }

            if (HotKeyManager.CooldownsOn)
            {
                if (await Abilities.Cast <ShadowReflection>(MyCurrentTarget))
                {
                    return(true);
                }
                if (await Abilities.Cast <Vendetta>(MyCurrentTarget))
                {
                    return(false);                                                 // no GCD
                }
            }

            if (await Abilities.Cast <Rupture>(UnitManager.Instance.LastKnownNonBleedingEnemies.FirstOrDefault()))
            {
                return(true);
            }
            if (await Abilities.Cast <Rupture>(UnitManager.Instance.LastKnownBleedingEnemies.FirstOrDefault()))
            {
                return(true);
            }
            if (UnitManager.Instance.LastKnownNotPoisonedEnemies.Count >= 1)
            {
                if (await Abilities.Cast <FanOfKnives>(MyCurrentTarget))
                {
                    return(true);
                }
            }
            if (await Abilities.Cast <Envenom>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <Dispatch>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <Mutilate>(MyCurrentTarget))
            {
                return(true);
            }
            return(false);
        }
Beispiel #7
0
        private static async Task <bool> CombatSpeccAoeRotation()
        {
            if (HotKeyManager.NoAoe)
            {
                return(await CombatSpeccRotation());
            }

            if (HotKeyManager.CooldownsOn)
            {
                if (await Abilities.Cast <KillingSpree>(MyCurrentTarget))
                {
                    return(true);
                }
                if (await Abilities.Cast <AdrenalineRush>(MyCurrentTarget))
                {
                    return(true);
                }
            }
            if (UnitManager.Instance.MfDTarget != null && !UnitManager.Instance.MfDTarget.IsBoss)
            {
                if (await Abilities.Cast <MarkedForDeathAbility>(UnitManager.Instance.MfDTarget))
                {
                    return(true);
                }
            }

            if (await Abilities.Cast <BladeFlurry>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <SliceNDiceAbility>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <EviscerateAbility>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <RevealingStrikeAbility>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <SinisterStrikeAbility>(MyCurrentTarget))
            {
                return(true);
            }
            return(false);
        }
Beispiel #8
0
        /// <summary>
        ///     Helper function to resurrenct a dead ally.
        /// </summary>
        private static async Task <bool> ResurrectDeadAlly(WoWPartyMember.GroupRole role)
        {
            var theDead = StyxWoW.Me.GroupInfo.RaidMembers
                          .Where(o =>
                                 o.Role == role &&
                                 o.Dead &&
                                 o.ToPlayer().Distance <= 30.0
                                 )
                          .OrderBy(o => o.ToPlayer().Distance);

            if (role == WoWPartyMember.GroupRole.Tank && (!theDead.Any()))
            {
                // check on main/assist tanks just in case.
                theDead = StyxWoW.Me.GroupInfo.RaidMembers
                          .Where(o =>
                                 (o.IsMainTank || o.IsMainAssist || (int)o.Role == 50 || (int)o.Role == 51) &&
                                 o.Dead &&
                                 o.ToPlayer().Distance <= 30.0
                                 )
                          .OrderBy(o => o.ToPlayer().Distance);
            }

            if (!theDead.Any())
            {
                return(false);
            }
            var first = theDead.FirstOrDefault();

            if (first == null)
            {
                return(false);
            }
            var deadPlayer = first.ToPlayer();

            deadPlayer.Target();

            if (!await Abilities.Cast <RebirthAbility>(deadPlayer))
            {
                return(false);
            }
            Log.Gui(string.Format("Resurrected dead ally: {0} [{1}] (Role: {2}) [G: {3}]]",
                                  deadPlayer.SafeName,
                                  GuidToUnitId(deadPlayer.Guid),
                                  (int)role == 50 ? "LFR Tank" : role.ToString(),
                                  Me.GroupInfo.NumRaidMembers));

            return(true);
        }
Beispiel #9
0
 private static async Task <bool> PoolForDanceRotation()
 {
     if (Me.AuraStacks(SpellBook.AuraAnticipation) >= 3)
     {
         return(await CombatRotation());
     }
     if (await Abilities.Cast <Rupture>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <SliceNDiceAbility>(MyCurrentTarget))
     {
         return(true);
     }
     return(true);
 }
Beispiel #10
0
        /// <summary>
        ///     Helper function to heal a nearby ally.
        /// </summary>
        private async Task <bool> HealMyAlly <T>(WoWUnit ally, WoWPartyMember.GroupRole role, double minHealth) where T : IAbility
        {
            if (ally.HealthPercent < minHealth && ally.HealthPercent > 1.0)
            {
                var cachedHealth = ally.HealthPercent;

                // Will need to work on this a little, since coroutine does not happen immediately,
                // we may try and heal someone who's already dead by the time the coroutine kicks off
                if (await Abilities.Cast <T>(ally))
                {
                    Log.Diagnostics(string.Format("Healed the most hurt ally: {0} (Role: {1}) @ {2:0.##}% health [G: {3} R: {4}]", ally.SafeName, (int)role == 50 || (int)role == 51 ? "LFR Tank" : role.ToString(), cachedHealth, Me.GroupInfo.NumRaidMembers, LastKnownRejuvenatedAllies.Count));

                    return(true);
                }
            }

            return(false);
        }
Beispiel #11
0
        private static async Task <bool> AssassinationRotationAoE()
        {
            //NoAoe
            if (HotKeyManager.NoAoe)
            {
                return(await AssassinationSingleRotation());
            }

            if (await Abilities.Cast <AoERupture>(UnitManager.Instance.LastKnownNonBleedingEnemies.FirstOrDefault()))
            {
                return(true);
            }
            if (await Abilities.Cast <AoERupture>(UnitManager.Instance.LastKnownBleedingEnemies.FirstOrDefault()))
            {
                return(true);
            }
            if (UnitManager.Instance.LastKnownNotPoisonedEnemies.Count >= 1)
            {
                if (await Abilities.Cast <FanOfKnives>(MyCurrentTarget))
                {
                    return(true);
                }
            }
            if (await Abilities.Cast <Envenom>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <Dispatch>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <Mutilate>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <FanOfKnives>(MyCurrentTarget))
            {
                return(true);
            }

            return(false);
        }
Beispiel #12
0
 /// <summary>
 ///     Soothes an enraged target.
 /// </summary>
 public async Task <bool> SootheEnragedTarget(WoWUnit target)
 {
     if (target == null || !target.HasCancelableEnragedEffect())
     {
         return(false);
     }
     if (!_sootheTimer.IsRunning)
     {
         _sootheTimer.Start();
     }
     if (_sootheTimer.ElapsedMilliseconds < Settings.SootheReactionTimeInMs)
     {
         return(false);
     }
     if (!await Abilities.Cast <SootheAbility>(target))
     {
         return(false);
     }
     _sootheTimer.Reset();
     return(true);
 }
Beispiel #13
0
        private static async Task <bool> AssassinationSingleRotation()
        {
            /*
             * if (!Me.HasAura(SpellBook.CastEnvenom) && Me.ComboPoints == 5 && (Me.CurrentTarget != null && !Me.CurrentTarget.HasAura(SpellBook.CastVendetta)) && !HotKeyManager.Questing)
             * {
             *  return await AssasinPoolRotation();
             * }
             * */
            if (HotKeyManager.CooldownsOn)
            {
                if (await Abilities.Cast <ShadowReflection>(MyCurrentTarget))
                {
                    return(true);
                }
                if (await Abilities.Cast <Vendetta>(MyCurrentTarget))
                {
                    return(false);                                                 // no GCD
                }
            }

            if (await Abilities.Cast <Rupture>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <Envenom>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <Dispatch>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <Mutilate>(MyCurrentTarget))
            {
                return(true);
            }
            return(false);
        }
Beispiel #14
0
 private static async Task <bool> AssasinPoolRotation()
 {
     if (Main.Debug)
     {
         Log.Diagnostics("In AssasinPoolRotation() with " + Me.CurrentEnergy + " Energy.");
     }
     if (Me.CurrentEnergy >= 90 && Me.ComboPoints == 5 && MyCurrentTarget.HasAura(SpellBook.CastRupture))
     {
         if (await Abilities.Cast <Envenom>(MyCurrentTarget))
         {
             return(true);
         }
     }
     if (await Abilities.Cast <Rupture>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <Dispatch>(MyCurrentTarget))
     {
         return(true);
     }
     return(true);
 }
Beispiel #15
0
        private static async Task <bool> CombatBuffRotation()
        {
            if (Main.Debug)
            {
                Log.Diagnostics("In CombatBuffsRotation() call");
            }
            // if (await Abilities.Cast<BurstOfSpeedAbility>(Me)) return true;


            //   if (await Abilities.Cast<SliceNDiceAbility>(Me)) return true;
            if (HotKeyManager.Questing)
            {
                if (await Abilities.Cast <FeintAbility>(Me))
                {
                    return(true);
                }
                if (await Abilities.Cast <RecupAbility>(Me))
                {
                    return(true);
                }
            }

            return(false);
        }
Beispiel #16
0
 private static async Task <bool> FeralCombatRotation()
 {
     if (await Snapshots.CheckAndApplyBloodtalons())
     {
         return(true);
     }
     if (await Abilities.Cast <MoonfireHeightIssueAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <DashAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <StampedingRoarAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <ProwlAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <CatFormAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <Abilities.Feral.SurvivalInstinctsAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <CenarionWardAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <HeartOfTheWildAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <SavageRoarAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <Abilities.Feral.WildChargeAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <ProwlOpenerAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <DisplacerBeastAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <Abilities.Feral.FaerieFireAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await InterruptManager.CheckMyTarget())
     {
         return(true);
     }
     if (await ItemManager.UseTrinket1())
     {
         return(true);
     }
     if (await ItemManager.UseTrinket2())
     {
         return(true);
     }
     if (await Abilities.Cast <ForceOfNatureAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <WarStompAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <IncapacitatingRoarAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <MassEntanglementAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <Abilities.Feral.IncarnationAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <BerserkingAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <TigersFuryAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <Abilities.Feral.BerserkAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <Abilities.Feral.ThrashAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <RipAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <FerociousBiteAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <RakeAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <SwipeAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <MoonfireAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <WrathAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <ShredAbility>(MyCurrentTarget))
     {
         return(true);
     }
     return(await Abilities.Cast <ShredAtFiveComboPointsAbility>(MyCurrentTarget));
 }
Beispiel #17
0
        public static async Task <bool> Rotation()
        {
            if (Me.IsCasting || Me.IsChanneling || Me.IsFlying || Me.OnTaxi)
            {
                return(false);
            }

            if (BotManager.Current.IsRoutineBased() && Me.Mounted)
            {
                return(false);
            }

            if (BotManager.Current.IsRoutineBased() && !Me.Combat)
            {
                return(false);
            }

            if (!Chains.TriggerInAction)
            {
                //Chains.Check();

                if (Me.Specialization == WoWSpec.DruidFeral && SnareManager.BearFormBlockedTimer.IsRunning &&
                    Me.Shapeshift == ShapeshiftForm.Bear)
                {
                    if (!await Abilities.Cast <CatFormPowerShiftAbility>(Me))
                    {
                        return(false);
                    }
                    Log.Gui("Switching to Cat Form after Bear Form Powershift.");
                    return(true);
                }

                // Clear loss of control if we can //
                if (await ItemManager.ClearLossOfControlWithTrinkets())
                {
                    return(true);
                }

                // Don't go any further if we have total loss of control //
                if (Me.HasTotalLossOfControl())
                {
                    return(false);
                }

                // Clear Roots and Snares if we can //
                if (Me.Specialization != WoWSpec.DruidGuardian) // Will add Guardian Clears at a later time.
                {
                    if (await SnareManager.CheckAndClear())
                    {
                        return(true);
                    }
                }

                // Use eligible items //
                if (await ItemManager.UseEligibleItems(MyState.InCombat))
                {
                    return(true);
                }

                // Check on my minions //
                if (!BotManager.Current.IsRoutineBased())
                {
                    if (await Units.CheckForMyMinionsBeingAttacked())
                    {
                        return(false);
                    }
                }

                // Check for dead party members (ignore if in a BG or Arena) //
                if (Me.Specialization != WoWSpec.DruidGuardian) // Will add Guardian Battle Rez at a later time.
                {
                    if (!Me.GroupInfo.IsInBattlegroundParty && !Me.IsInArena)
                    {
                        if (await Units.CheckAndResurrectDeadAllies())
                        {
                            return(true);
                        }
                    }
                }

                // Check for allies that need to be healed //
                if (Me.Specialization != WoWSpec.DruidGuardian)
                {
                    if (await Units.CheckForAlliesNeedHealing())
                    {
                        return(true);
                    }
                }

                // Movement //
                if (SettingsManager.Instance.AllowMovement)
                {
                    await MovementHelper.MoveToMyCurrentTarget();
                }
                if (SettingsManager.Instance.AllowTargetFacing)
                {
                    await MovementHelper.FaceMyCurrentTarget();
                }

                // Clear Dead Target - useful in some situations for the questing bot //
                if (!BotManager.Current.IsRoutineBased())
                {
                    if (await MovementHelper.ClearMyDeadTarget())
                    {
                        return(true);
                    }
                }

                // Soothe an Enraged Target //
                if (await Units.SootheEnragedTarget(MyCurrentTarget))
                {
                    return(true);
                }

                if (Me.Specialization == WoWSpec.DruidGuardian)
                {
                    return(await GuardianCombatRotation());
                }
                return(await FeralCombatRotation());
            }
            // The normal rotation is paused because an ability chain has been triggered.
            return(await Chains.TriggeredRotation());
        }
Beispiel #18
0
 private static async Task <bool> GuardianCombatRotation()
 {
     if (await Units.TauntTarget(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <FaerieFireAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <DashAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <StampedingRoarAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <BearFormAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <WildChargeAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <CenarionWardAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <FrenziedRegenerationAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <BarkskinAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <SurvivalInstinctsAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <BristlingFurAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <SavageDefenseAbility>(Me))
     {
         return(true);
     }
     if (await InterruptManager.CheckMyTarget())
     {
         return(true);
     }
     if (await ItemManager.UseTrinket1())
     {
         return(true);
     }
     if (await ItemManager.UseTrinket2())
     {
         return(true);
     }
     if (await Abilities.Cast <IncapacitatingRoarAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <MassEntanglementAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <IncarnationAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <BerserkAbility>(Me))
     {
         return(true);
     }
     if (await Abilities.Cast <PulverizeAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <MangleAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <ThrashAbility>(MyCurrentTarget))
     {
         return(true);
     }
     if (await Abilities.Cast <MaulAbility>(MyCurrentTarget))
     {
         return(true);
     }
     return(await Abilities.Cast <LacerateAbility>(MyCurrentTarget));
 }
Beispiel #19
0
        public static async Task <bool> Rotation()
        {
            if (Main.Debug)
            {
                Log.Diagnostics("InCombatBuffRotationCall()");
            }
            if (Me.IsCasting || Me.IsChanneling || Me.IsFlying || Me.OnTaxi)
            {
                return(false);
            }

            if (BotManager.Current.IsRoutineBased() && Me.Mounted)
            {
                return(false);
            }

            if (BotManager.Current.IsRoutineBased() && !Me.Combat)
            {
                return(false);
            }

            if (Me.HasLossOfControl() || Me.HasTotalLossOfControl())
            {
                if (await UseRacialToClearLoC())
                {
                    return(true);
                }
                if (await UseTrinketsToClearLoC())
                {
                    return(true);
                }
            }

            #region [IR] - Trinkets

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

            #endregion

            #region [IR] - Racials

            if (await Abilities.Cast <Shared.Racials.RacialOrcBloodFuryAbility>(Me))
            {
                return(true);
            }
            if (await Abilities.Cast <Shared.Racials.RacialsTrollBerserkingAbility>(Me))
            {
                return(true);
            }
            if (await Abilities.Cast <Shared.Racials.RacialsBloodElfAbility>(Me))
            {
                return(true);
            }


            #endregion

            return(await CombatBuffRotation());
        }
Beispiel #20
0
        /// <summary>
        ///     Taunts the target away from other players/ncps.
        /// </summary>
        public async Task <bool> TauntTarget(WoWUnit target)
        {
            if (target != null && target.IsValid && target.IsAlive && target.Attackable && !target.IsPlayer)
            {
                if (target.CurrentTarget != null && target.CurrentTarget.IsValid && target.CurrentTarget.IsAlive &&
                    !target.CurrentTarget.IsMe)
                {
                    var canTaunt = false;

                    if (Me.GroupInfo.NumRaidMembers > 1)
                    {
                        var playerInGroup =
                            Me.GroupInfo.RaidMembers.SingleOrDefault(o => o.Guid == target.CurrentTarget.Guid);

                        if (playerInGroup != null)
                        {
                            if (playerInGroup.Role == WoWPartyMember.GroupRole.Tank && Settings.GrowlGroupTank)
                            {
                                canTaunt = true;
                            }
                            if (((int)playerInGroup.Role == 50 || (int)playerInGroup.Role == 51) &&
                                Settings.GrowlGroupTank)
                            {
                                canTaunt = true;
                            }
                            if (playerInGroup.Role == WoWPartyMember.GroupRole.Healer && Settings.GrowlGroupHealer)
                            {
                                canTaunt = true;
                            }
                            if (playerInGroup.Role == WoWPartyMember.GroupRole.Damage && Settings.GrowlGroupDps)
                            {
                                canTaunt = true;
                            }
                        }

                        // Check for player pet...
                        if (target.CurrentTarget.IsPet && Settings.GrowlGroupPlayerPet)
                        {
                            if (Me.GroupInfo.RaidMembers.Any(o => o.Guid == target.CurrentTarget.OwnedByUnit.Guid))
                            {
                                canTaunt = true;
                            }
                        }
                    }

                    if (Settings.GrowlAnythingNotMe)
                    {
                        canTaunt = true;
                    }

                    if (canTaunt)
                    {
                        if (await Abilities.Cast <GrowlAbility>(target))
                        {
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
Beispiel #21
0
        private static async Task <bool> SubtletySingleRotation()
        {
            if ((Me.CurrentTarget != null && !Me.CurrentTarget.HasAura(SpellBook.AuraFindWeakness) && !Me.AuraExists(SpellBook.AuraSubterfuge) && !Me.AuraExists(SpellBook.AuraVanish) && !Me.AuraExists(SpellBook.AuraShadowDance))
                // && (WoWSpell.FromId(SpellBook.CastVanish).CooldownTimeLeft.TotalSeconds < 10
                //     || !WoWSpell.FromId(SpellBook.CastVanish).IsOnCooldown()
                //     || WoWSpell.FromId(SpellBook.AuraShadowDance).CooldownTimeLeft.TotalSeconds < 10)
                && StyxWoW.Me.AuraStacks(SpellBook.AuraAnticipation) < 3 &&
                Me.CurrentEnergy <= 90)
            {
                return(await PoolRotation());
            }

            /*
             * if ((Me.CurrentTarget != null && !Me.CurrentTarget.HasAura(SpellBook.AuraFindWeakness)) && Me.AuraStacks(SpellBook.AuraAnticipation) < 3 && Me.CurrentEnergy <= 90)
             * {
             *   return await PoolRotation();
             * }
             *
             */



            //Make sure to refresh Findweakness
            if (Me.AuraRemainingTime(SpellBook.AuraShadowDance).TotalSeconds < 1.2 || Me.AuraRemainingTime(SpellBook.AuraSubterfuge).TotalSeconds < 1.2)
            {
                if (await Abilities.Cast <Ambush>(MyCurrentTarget))
                {
                    return(true);
                }
            }

            //Cast another rupture regardless of it being already up when you use SReflection

            if (SRtimer.IsRunning && !ruptureRefreshed)
            {
                if (await Abilities.Cast <RefreshRupture>(MyCurrentTarget))
                {
                    ruptureRefreshed = true;
                    return(true);
                }
            }
            if (SRtimer.ElapsedMilliseconds > 16000)
            {
                SRtimer.Reset();
                ruptureRefreshed = false;
            }


            if (HotKeyManager.CooldownsOn)
            {
                if (await CombatBuff.UseTrinketsToBurst())
                {
                    return(true);
                }
                if (await Abilities.Cast <ShadowReflection>(MyCurrentTarget))
                {
                    SRtimer.Restart();
                    return(false);
                }
                if (await Abilities.Cast <ShadowDance>(Me))
                {
                    return(false);
                }
                if (await Abilities.Cast <VanishOffensive>(MyCurrentTarget))
                {
                    return(true);
                }
                if (await Abilities.Cast <Premed>(MyCurrentTarget))
                {
                    return(true);
                }
                if (await Abilities.Cast <Preperation>(Me))
                {
                    return(true);
                }
            }

            if (await Abilities.Cast <SliceNDiceAbility>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <Rupture>(MyCurrentTarget))
            {
                return(true);
            }

            if (await Abilities.Cast <EviscerateAbility>(MyCurrentTarget))
            {
                return(true);
            }


            if (await Abilities.Cast <Ambush>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <Backstab>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <Hemorrhage>(MyCurrentTarget))
            {
                return(true);
            }
            return(false);
        }
Beispiel #22
0
        private static async Task <bool> SubtletyRotationTwoToFourTargets()
        {
            if (HotKeyManager.NoAoe)
            {
                return(await SubtletySingleRotation());
            }

            //Make sure to refresh Findweakness
            if (Me.AuraRemainingTime(SpellBook.AuraShadowDance).TotalSeconds < 1.2)
            {
                if (await Abilities.Cast <Ambush>(MyCurrentTarget))
                {
                    return(true);
                }
            }

            // if (await Abilities.Cast<VanishOffensive>(Me)) return true;
            //  if (await Abilities.Cast<Preperation>(Me)) return true;

            if (SRtimer.IsRunning && !ruptureRefreshed)
            {
                if (await Abilities.Cast <RefreshRupture>(MyCurrentTarget))
                {
                    ruptureRefreshed = true;
                    return(true);
                }
            }
            if (SRtimer.ElapsedMilliseconds > 16000)
            {
                SRtimer.Reset();
                ruptureRefreshed = false;
            }

            if (HotKeyManager.CooldownsOn)
            {
                if (await Abilities.Cast <ShadowReflection>(MyCurrentTarget))
                {
                    SRtimer.Restart();
                    return(true);
                }
                if (await Abilities.Cast <ShadowDance>(Me))
                {
                    return(true);
                }
                if (await Abilities.Cast <VanishOffensive>(MyCurrentTarget))
                {
                    return(true);
                }
                if (await Abilities.Cast <Preperation>(Me))
                {
                    return(true);
                }
            }

            //Finisher
            if (await Abilities.Cast <SliceNDiceAbility>(MyCurrentTarget))
            {
                return(true);
            }
            if (await Abilities.Cast <Rupture>(UnitManager.Instance.LastKnownNonBleedingEnemies.FirstOrDefault()))
            {
                return(true);
            }
            if (await Abilities.Cast <Rupture>(UnitManager.Instance.LastKnownBleedingEnemies.FirstOrDefault()))
            {
                return(true);
            }
            if (Me.CurrentTarget.AuraExists(SpellBook.AuraFindWeakness) && UnitManager.Instance.LastKnownSurroundingEnemies.Count < 3)
            {
                if (await Abilities.Cast <EviscerateAbility>(MyCurrentTarget))
                {
                    return(true);
                }
            }
            if (MyCurrentTarget.AuraRemainingTime(SpellBook.AuraCrimsonTempest).TotalSeconds < 2)
            {
                if (await Abilities.Cast <CrimsonTempest>(MyCurrentTarget))
                {
                    return(true);
                }
            }
            if (await Abilities.Cast <EviscerateAbility>(MyCurrentTarget))
            {
                return(true);
            }
            //Generator
            if (!Me.AuraExists(SpellBook.AuraShadowDance) || UnitManager.Instance.LastKnownSurroundingEnemies.Count >= 5)
            {
                if (await Abilities.Cast <FanOfKnives>(MyCurrentTarget))
                {
                    return(true);
                }
            }
            if (await Abilities.Cast <Ambush>(MyCurrentTarget))
            {
                return(true);
            }
            return(false);
        }