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); }
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()); }
/// <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); }
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); }
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); }
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); }
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); }
/// <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); }
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); }
/// <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); }
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); }
/// <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); }
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); }
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); }
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); }
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)); }
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()); }
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)); }
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()); }
/// <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); }
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); }
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); }