Exemplo n.º 1
0
        public static Composite CreateFireMageNormalCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Common.CreateStayAwayFromFrozenTargetsBehavior(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Helpers.Common.CreateAutoAttack(true),
                       Spell.WaitForCast(true),

                       // Defensive stuff
                       new Decorator(
                           ret => StyxWoW.Me.ActiveAuras.ContainsKey("Ice Block"),
                           new ActionIdle()),
                       Spell.BuffSelf("Ice Block", ret => StyxWoW.Me.HealthPercent < 20 && !StyxWoW.Me.ActiveAuras.ContainsKey("Hypothermia")),

                       // Cooldowns
                       Spell.BuffSelf("Evocation",
                                      ret => StyxWoW.Me.ManaPercent < 30 || (TalentManager.HasGlyph("Evocation") && StyxWoW.Me.HealthPercent < 50)),
                       Spell.BuffSelf("Mage Ward", ret => StyxWoW.Me.HealthPercent <= 80),
                       Spell.BuffSelf("Mana Shield", ret => StyxWoW.Me.HealthPercent <= 60),

                       new Decorator(
                           ret => Unit.NearbyUnfriendlyUnits.Count(u => u.IsTargetingMeOrPet) >= 3,
                           new PrioritySelector(
                               Spell.BuffSelf("Mirror Image")
                               )),
                       Common.CreateUseManaGemBehavior(ret => StyxWoW.Me.ManaPercent < 80),

                       // Rotation
                       Spell.Cast("Dragon's Breath",
                                  ret => StyxWoW.Me.IsSafelyFacing(StyxWoW.Me.CurrentTarget, 90) &&
                                  StyxWoW.Me.CurrentTarget.DistanceSqr <= 8 * 8),

                       Spell.Cast("Fire Blast",
                                  ret => StyxWoW.Me.ActiveAuras.ContainsKey("Impact")),

                       new Decorator(
                           ret => !Unit.NearbyUnfriendlyUnits.Any(u => u.DistanceSqr < 10 * 10 && u.IsCrowdControlled()),
                           new PrioritySelector(
                               Spell.BuffSelf("Frost Nova",
                                              ret => Unit.NearbyUnfriendlyUnits.Any(u =>
                                                                                    u.DistanceSqr <= 8 * 8 && !u.HasAura("Freeze") &&
                                                                                    !u.HasAura("Frost Nova") && !u.Stunned))
                               )),

                       Common.CreateMagePolymorphOnAddBehavior(),
                       // Rotation
                       Spell.Cast("Combustion",
                                  ret => (StyxWoW.Me.CurrentTarget.HasMyAura("Living Bomb") || !SpellManager.HasSpell("Living Bomb")) &&
                                  (StyxWoW.Me.CurrentTarget.HasMyAura("Ignite") || TalentManager.GetCount(2, 4) == 0) &&
                                  StyxWoW.Me.CurrentTarget.HasMyAura("Pyroblast!")),
                       Spell.Cast("Scorch", ret => StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Critical Mass", true).TotalSeconds < 1 && TalentManager.GetCount(2, 20) != 0),
                       Spell.Cast("Pyroblast", ret => StyxWoW.Me.ActiveAuras.ContainsKey("Hot Streak")),
                       Spell.BuffSelf("Flame Orb"),
                       Spell.Buff("Living Bomb", true),
                       Spell.Cast("Fireball"),
                       Movement.CreateMoveToTargetBehavior(true, 35f)
                       ));
        }
Exemplo n.º 2
0
        public static Composite CreateSubtletyRogueInstanceCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       new Decorator(
                           ret => !StyxWoW.Me.HasAura("Vanish"),
                           Helpers.Common.CreateAutoAttack(true)),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                       // Defensive
                       Spell.BuffSelf("Evasion",
                                      ret => Unit.NearbyUnfriendlyUnits.Count(u => u.DistanceSqr < 6 * 6 && u.IsTargetingMeOrPet) >= 1),

                       Spell.BuffSelf("Cloak of Shadows",
                                      ret => Unit.NearbyUnfriendlyUnits.Count(u => u.IsTargetingMeOrPet && u.IsCasting) >= 1),

                       // Redirect if we have CP left
                       Spell.Cast("Redirect", ret => StyxWoW.Me.RawComboPoints > 0 && StyxWoW.Me.ComboPoints < 1),

                       // Agro management
                       Spell.Cast(
                           "Tricks of the Trade",
                           ret => Common.BestTricksTarget,
                           ret => SingularSettings.Instance.Rogue.UseTricksOfTheTrade),

                       Spell.Cast("Feint", ret => StyxWoW.Me.CurrentTarget.ThreatInfo.RawPercent > 80),

                       Movement.CreateMoveBehindTargetBehavior(),

                       new Decorator(
                           ret => Unit.NearbyUnfriendlyUnits.Count(u => u.DistanceSqr < 8 * 8) >= 3,
                           Spell.BuffSelf("Fan of Knives", ret => Item.RangedIsType(WoWItemWeaponClass.Thrown))),

                       Spell.BuffSelf("Preparation",
                                      ret => SpellManager.HasSpell("Vanish") && SpellManager.Spells["Vanish"].CooldownTimeLeft.TotalSeconds > 10 &&
                                      SpellManager.Spells["Shadowstep"].CooldownTimeLeft.TotalSeconds > 10),
                       Spell.BuffSelf("Shadow Dance", ret => StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.BuffSelf("Slice and Dice",
                                      ret => StyxWoW.Me.RawComboPoints > 0 && StyxWoW.Me.GetAuraTimeLeft("Slice and Dice", true).TotalSeconds < 3),
                       Spell.Buff("Rupture", true, ret => StyxWoW.Me.ComboPoints >= 4),
                       Spell.BuffSelf("Recuperate", ret => TalentManager.GetCount(3, 8) > 0 && StyxWoW.Me.RawComboPoints > 0),
                       Spell.Cast("Eviscerate", ret => StyxWoW.Me.ComboPoints == 5),
                       // Vanish + Shadowstep + Premeditation + Ambush combo
                       new Decorator(
                           ret => StyxWoW.Me.HasAura("Vanish"),
                           new PrioritySelector(
                               Spell.Cast("Shadowstep"),
                               Spell.BuffSelf("Premeditation", ret => StyxWoW.Me.ComboPoints <= 3),
                               Spell.Cast("Ambush", ret => StyxWoW.Me.CurrentTarget.MeIsBehind)
                               )),
                       Spell.Cast("Ambush", ret => StyxWoW.Me.CurrentTarget.MeIsBehind && StyxWoW.Me.HasAura("Shadow Dance")),
                       Spell.Cast("Backstab", ret => StyxWoW.Me.CurrentTarget.MeIsBehind && !StyxWoW.Me.HasAura("Shadow Dance")),
                       Spell.Cast("Hemorrhage", ret => !StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Sinister Strike", ret => !SpellManager.HasSpell("Hemorrhage") && !StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Exemplo n.º 3
0
        public static Composite CreateFireMageInstancePullAndCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Helpers.Common.CreateAutoAttack(true),
                       Spell.WaitForCast(true),

                       // Defensive stuff
                       new Decorator(
                           ret => StyxWoW.Me.ActiveAuras.ContainsKey("Ice Block"),
                           new ActionIdle()),
                       Spell.BuffSelf("Ice Block", ret => StyxWoW.Me.HealthPercent < 20 && !StyxWoW.Me.ActiveAuras.ContainsKey("Hypothermia")),

                       // Cooldowns
                       Spell.BuffSelf("Evocation", ret => StyxWoW.Me.ManaPercent < 30),
                       Spell.BuffSelf("Mirror Image"),
                       Spell.BuffSelf("Mage Ward", ret => StyxWoW.Me.HealthPercent <= 75),

                       Common.CreateUseManaGemBehavior(ret => StyxWoW.Me.ManaPercent < 80),
                       // AoE comes first
                       new Decorator(
                           ret => Unit.UnfriendlyUnitsNearTarget(10f).Count() >= 3,
                           new PrioritySelector(
                               Spell.Cast("Fire Blast",
                                          ret => StyxWoW.Me.ActiveAuras.ContainsKey("Impact") &&
                                          (StyxWoW.Me.CurrentTarget.HasMyAura("Combustion") || TalentManager.GetCount(2, 13) == 0)),
                               Spell.CastOnGround("Blast Wave",
                                                  ret => Clusters.GetBestUnitForCluster(Unit.NearbyUnfriendlyUnits, ClusterType.Radius, 8f).Location),
                               Spell.Cast("Dragon's Breath",
                                          ret => Clusters.GetClusterCount(StyxWoW.Me.CurrentTarget,
                                                                          Unit.NearbyUnfriendlyUnits,
                                                                          ClusterType.Cone, 15f) >= 3),
                               Spell.CastOnGround("Flamestrike",
                                                  ret => Clusters.GetBestUnitForCluster(Unit.NearbyUnfriendlyUnits, ClusterType.Radius, 8f).Location,
                                                  ret => !ObjectManager.GetObjectsOfType <WoWDynamicObject>().Any(o =>
                                                                                                                  o.CasterGuid == StyxWoW.Me.Guid && o.Spell.Name == "Flamestrike" &&
                                                                                                                  o.Location.Distance(
                                                                                                                      Clusters.GetBestUnitForCluster(Unit.NearbyUnfriendlyUnits, ClusterType.Radius, 8f).Location) < o.Radius))
                               )),

                       Spell.BuffSelf("Time Warp",
                                      ret => !StyxWoW.Me.IsInRaid && StyxWoW.Me.CurrentTarget.HealthPercent > 20 && StyxWoW.Me.CurrentTarget.IsBoss() &&
                                      !StyxWoW.Me.HasAura("Temporal Displacement")),

                       // Rotation
                       Spell.Cast("Combustion",
                                  ret => (StyxWoW.Me.CurrentTarget.HasMyAura("Living Bomb") || !SpellManager.HasSpell("Living Bomb")) &&
                                  (StyxWoW.Me.CurrentTarget.HasMyAura("Ignite") || TalentManager.GetCount(2, 4) == 0) &&
                                  StyxWoW.Me.CurrentTarget.HasMyAura("Pyroblast!")),
                       Spell.Cast("Scorch", ret => StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Critical Mass", true).TotalSeconds < 1 && TalentManager.GetCount(2, 20) != 0),
                       Spell.Cast("Pyroblast", ret => StyxWoW.Me.ActiveAuras.ContainsKey("Hot Streak")),
                       Spell.BuffSelf("Flame Orb"),
                       Spell.Buff("Living Bomb", true),
                       Spell.Cast("Fireball"),
                       Movement.CreateMoveToTargetBehavior(true, 35f)
                       ));
        }
Exemplo n.º 4
0
        public static Composite CreateAssaRoguePvPCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       new Decorator(
                           ret => !StyxWoW.Me.HasAura("Vanish"),
                           Helpers.Common.CreateAutoAttack(true)),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                       // Defensive
                       Spell.BuffSelf("Evasion",
                                      ret => Unit.NearbyUnfriendlyUnits.Count(u => u.DistanceSqr < 6 * 6 && u.IsTargetingMeOrPet) >= 1),

                       Spell.BuffSelf("Cloak of Shadows",
                                      ret => Unit.NearbyUnfriendlyUnits.Count(u => u.IsTargetingMeOrPet && u.IsCasting) >= 1),

                       Spell.BuffSelf("Smoke Bomb", ret => StyxWoW.Me.HealthPercent < 15),

                       // Redirect if we have CP left
                       Spell.Cast("Redirect", ret => StyxWoW.Me.RawComboPoints > 0 && StyxWoW.Me.ComboPoints < 1),

                       Spell.BuffSelf("Vanish",
                                      ret => TalentManager.GetCount(1, 14) > 0 && StyxWoW.Me.CurrentTarget.HasMyAura("Rupture") &&
                                      StyxWoW.Me.HasAura("Slice and Dice")),
                       Spell.Cast("Garrote",
                                  ret => (StyxWoW.Me.HasAura("Vanish") || StyxWoW.Me.IsStealthed) &&
                                  StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.BuffSelf("Vendetta"),
                       Spell.Buff("Rupture", true, ret => StyxWoW.Me.ComboPoints >= 4),
                       Spell.BuffSelf("Slice and Dice",
                                      ret => StyxWoW.Me.RawComboPoints > 0 && StyxWoW.Me.GetAuraTimeLeft("Slice and Dice", true).TotalSeconds < 3),
                       Spell.BuffSelf("Cold Blood",
                                      ret => StyxWoW.Me.ComboPoints >= 4 && StyxWoW.Me.CurrentTarget.HealthPercent >= 35 ||
                                      StyxWoW.Me.ComboPoints == 5 || !SpellManager.HasSpell("Envenom")),
                       Spell.Cast("Eviscerate",
                                  ret => (StyxWoW.Me.CurrentTarget.HealthPercent <= 40 || !SpellManager.HasSpell("Envenom")) && StyxWoW.Me.ComboPoints >= 4),
                       Spell.Cast("Kidney Shot",
                                  ret => StyxWoW.Me.ComboPoints >= 4 && !StyxWoW.Me.CurrentTarget.IsStunned()),
                       Spell.Cast("Envenom",
                                  ret => StyxWoW.Me.CurrentTarget.HealthPercent >= 35 && StyxWoW.Me.ComboPoints >= 4),
                       Spell.Cast("Envenom",
                                  ret => StyxWoW.Me.CurrentTarget.HealthPercent < 35 && StyxWoW.Me.ComboPoints == 5),
                       Spell.Cast("Backstab",
                                  ret => StyxWoW.Me.CurrentTarget.HealthPercent < 35 && TalentManager.GetCount(1, 13) > 0 &&
                                  StyxWoW.Me.CurrentTarget.MeIsBehind && !StyxWoW.Me.HasAura("Cold Blood")),
                       Spell.Cast("Mutilate",
                                  ret => (StyxWoW.Me.CurrentTarget.HealthPercent >= 35 || TalentManager.GetCount(1, 13) == 0 ||
                                          !StyxWoW.Me.CurrentTarget.MeIsBehind) && !StyxWoW.Me.HasAura("Cold Blood")),

                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Exemplo n.º 5
0
        public static Composite CreateSubtletyRogueNormalCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       new Decorator(
                           ret => !StyxWoW.Me.HasAura("Vanish"),
                           Helpers.Common.CreateAutoAttack(true)),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                       // Don't do anything if we casted vanish
                       new Decorator(
                           ret => StyxWoW.Me.HasAura("Vanish"),
                           new ActionAlwaysSucceed()),

                       // Defensive
                       Spell.BuffSelf("Evasion",
                                      ret => Unit.NearbyUnfriendlyUnits.Count(u => u.DistanceSqr < 6 * 6 && u.IsTargetingMeOrPet) >= 2),

                       Spell.BuffSelf("Cloak of Shadows",
                                      ret => Unit.NearbyUnfriendlyUnits.Count(u => u.IsTargetingMeOrPet && u.IsCasting) >= 1),

                       Spell.BuffSelf("Smoke Bomb", ret => StyxWoW.Me.HealthPercent < 15),

                       Common.CreateRogueBlindOnAddBehavior(),

                       // Redirect if we have CP left
                       Spell.Cast("Redirect", ret => StyxWoW.Me.RawComboPoints > 0 && StyxWoW.Me.ComboPoints < 1),

                       Spell.BuffSelf("Vanish",
                                      ret => StyxWoW.Me.HealthPercent < 20),

                       Spell.BuffSelf("Preparation",
                                      ret => SpellManager.HasSpell("Vanish") && SpellManager.Spells["Vanish"].CooldownTimeLeft.TotalSeconds > 10 &&
                                      StyxWoW.Me.HealthPercent < 25),

                       Spell.BuffSelf("Shadow Dance", ret => Unit.NearbyUnfriendlyUnits.Count(u => u.IsTargetingMeOrPet) >= 3),
                       Spell.Cast("Cheap Shot", ret => StyxWoW.Me.HasAura("Shadow Dance")),
                       Spell.BuffSelf("Slice and Dice",
                                      ret => StyxWoW.Me.RawComboPoints > 0 && StyxWoW.Me.GetAuraTimeLeft("Slice and Dice", true).TotalSeconds < 3),
                       Spell.Buff("Rupture", true, ret => StyxWoW.Me.ComboPoints >= 4 && StyxWoW.Me.CurrentTarget.Elite),
                       Spell.BuffSelf("Recuperate", ret => TalentManager.GetCount(3, 8) > 0 && StyxWoW.Me.RawComboPoints > 0),
                       Spell.Cast("Eviscerate", ret => StyxWoW.Me.CurrentTarget.HealthPercent < 40 && StyxWoW.Me.ComboPoints >= 2),
                       Spell.Cast("Eviscerate", ret => StyxWoW.Me.ComboPoints == 5),
                       Spell.Cast("Ambush", ret => StyxWoW.Me.CurrentTarget.MeIsBehind && StyxWoW.Me.HasAura("Shadow Dance")),
                       Spell.Cast("Backstab", ret => StyxWoW.Me.CurrentTarget.MeIsBehind && !StyxWoW.Me.HasAura("Shadow Dance")),
                       Spell.Cast("Hemorrhage", ret => !StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Sinister Strike", ret => !SpellManager.HasSpell("Hemorrhage") && !StyxWoW.Me.CurrentTarget.MeIsBehind),

                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Exemplo n.º 6
0
        /// <summary>
        ///   Finds the max range of a specific totem, where you'll still receive the buff.
        /// </summary>
        /// <remarks>
        ///   Created 3/26/2011.
        /// </remarks>
        /// <param name = "totem">The totem.</param>
        /// <returns>The calculated totem range.</returns>
        public static float GetTotemRange(WoWTotem totem)
        {
            // 15% extra range if talented for Totemic Reach for each point
            float talentFactor = (TalentManager.GetCount(2, 7) * 0.15f) + 1;

            switch (totem)
            {
            case WoWTotem.Flametongue:
            case WoWTotem.Stoneskin:
            case WoWTotem.StrengthOfEarth:
            case WoWTotem.Windfury:
            case WoWTotem.WrathOfAir:
            case WoWTotem.ManaSpring:
                return(40f * talentFactor);

            case WoWTotem.ElementalResistance:
            case WoWTotem.HealingStream:
            case WoWTotem.TranquilMind:
            case WoWTotem.Tremor:
                return(30f * talentFactor);

            case WoWTotem.Searing:
                return(20f * talentFactor);

            case WoWTotem.Earthbind:
                return(10f * talentFactor);

            case WoWTotem.Grounding:
            case WoWTotem.Magma:
                return(8f * talentFactor);

            case WoWTotem.Stoneclaw:
                // stoneclaw isn't effected by Totemic Reach (according to basically everything online)
                return(8f);

            case WoWTotem.EarthElemental:
            case WoWTotem.FireElemental:
                // Not really sure about these 3.
                return(20f);

            case WoWTotem.ManaTide:
                // Again... not sure :S
                return(30f * talentFactor);
            }
            return(0f);
        }
Exemplo n.º 7
0
        /// <summary>Creates an interrupt spell cast composite. This will attempt to use racials before any class/spec abilities. It will attempt to stun if possible!</summary>
        /// <remarks>Created 9/7/2011.</remarks>
        /// <param name="onUnit">The on unit.</param>
        /// <returns>.</returns>
        public static Composite CreateInterruptSpellCast(UnitSelectionDelegate onUnit)
        {
            return
                (new Decorator(
                     // If the target is casting, and can actually be interrupted, AND we've waited out the double-interrupt timer, then find something to interrupt with.
                     ret => onUnit != null && onUnit(ret) != null && onUnit(ret).IsCasting&& onUnit(ret).CanInterruptCurrentSpellCast
                     /* && PreventDoubleInterrupt*/,
                     new PrioritySelector(
                         Spell.Cast("Rebuke", onUnit),
                         Spell.Cast("Avenger's Shield", onUnit),
                         Spell.Cast("Hammer of Justice", onUnit),
                         Spell.Cast("Repentance", onUnit,
                                    ret => onUnit(ret).IsPlayer || onUnit(ret).IsDemon || onUnit(ret).IsHumanoid ||
                                    onUnit(ret).IsDragon || onUnit(ret).IsGiant || onUnit(ret).IsUndead),

                         Spell.Cast("Kick", onUnit),
                         Spell.Cast("Gouge", onUnit, ret => !onUnit(ret).IsBoss() && !onUnit(ret).MeIsSafelyBehind), // Can't gouge bosses.

                         Spell.Cast("Counterspell", onUnit),

                         Spell.Cast("Wind Shear", onUnit),

                         Spell.Cast("Pummel", onUnit),
                         // Gag Order only works on non-bosses due to it being a silence, not an interrupt!
                         Spell.Cast("Heroic Throw", onUnit, ret => TalentManager.GetCount(3, 7) == 2 && !onUnit(ret).IsBoss()),

                         Spell.Cast("Silence", onUnit),

                         Spell.Cast("Silencing Shot", onUnit),

                         // Can't stun most bosses. So use it on trash, etc.
                         Spell.Cast("Bash", onUnit, ret => !onUnit(ret).IsBoss()),
                         Spell.Cast("Skull Bash (Cat)", onUnit, ret => StyxWoW.Me.Shapeshift == ShapeshiftForm.Cat),
                         Spell.Cast("Skull Bash (Bear)", onUnit, ret => StyxWoW.Me.Shapeshift == ShapeshiftForm.Bear),
                         Spell.Cast("Solar Beam", onUnit, ret => StyxWoW.Me.Shapeshift == ShapeshiftForm.Moonkin),

                         Spell.Cast("Strangulate", onUnit),
                         Spell.Cast("Mind Freeze", onUnit),


                         // Racials last.
                         Spell.Cast("Arcane Torrent", onUnit),
                         // Don't waste stomp on bosses. They can't be stunned 99% of the time!
                         Spell.Cast("War Stomp", onUnit, ret => !onUnit(ret).IsBoss() && onUnit(ret).Distance < 8)
                         )));
        }
Exemplo n.º 8
0
        public static Composite CreateElementalShamanInstancePullAndCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.WaitForCast(true),
                       Totems.CreateSetTotems(),
                       Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                       Spell.BuffSelf("Lightning Shield"),
                       Spell.BuffSelf("Spiritwalker's Grace", ret => StyxWoW.Me.IsMoving && StyxWoW.Me.Combat),
                       Spell.BuffSelf("Elemental Mastery",
                                      ret => StyxWoW.Me.HasAnyAura("Bloodlust", "Heroism", "Time Warp", "Ancient Hysteria")),
                       Spell.BuffSelf("Elemental Mastery",
                                      ret => StyxWoW.Me.IsMoving && StyxWoW.Me.Combat &&
                                      (!SpellManager.HasSpell("Spiritwalker's Grace") ||
                                       SpellManager.Spells["Spiritwalker's Grace"].Cooldown && !StyxWoW.Me.HasAura("Spiritwalker's Grace"))),

                       new Decorator(
                           ret => Unit.UnfriendlyUnitsNearTarget(10f).Count() >= 3,
                           new PrioritySelector(
                               Spell.CastOnGround("Earthquake", ret => StyxWoW.Me.CurrentTarget.Location),
                               Spell.Cast("Chain Lightning", ret => Clusters.GetBestUnitForCluster(Unit.UnfriendlyUnitsNearTarget(15f), ClusterType.Chained, 12))
                               )),

                       // Totem stuff
                       // Pop the ele on bosses
                       Spell.BuffSelf("Fire Elemental Totem", ret => StyxWoW.Me.CurrentTarget.IsBoss() && !StyxWoW.Me.Totems.Any(t => t.WoWTotem == WoWTotem.FireElemental)),
                       Spell.BuffSelf("Searing Totem",
                                      ret => StyxWoW.Me.CurrentTarget.Distance < Totems.GetTotemRange(WoWTotem.Searing) - 2f &&
                                      !StyxWoW.Me.Totems.Any(
                                          t => t.Unit != null && t.WoWTotem == WoWTotem.Searing &&
                                          t.Unit.Location.Distance(StyxWoW.Me.CurrentTarget.Location) < Totems.GetTotemRange(WoWTotem.Searing)) &&
                                      !StyxWoW.Me.Totems.Any(t => t.WoWTotem == WoWTotem.FireElemental)),

                       Spell.Buff("Flame Shock", true),
                       Spell.Cast("Lava Burst"),
                       Spell.Cast("Earth Shock",
                                  ret => (StyxWoW.Me.HasAura("Lightning Shield", 7) || TalentManager.GetCount(1, 13) == 0) &&
                                  StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Flame Shock", true).TotalSeconds > 6),
                       Spell.Cast("Unleash Elements",
                                  ret => Item.HasWeaponImbue(WoWInventorySlot.MainHand, "Flametongue") && StyxWoW.Me.IsMoving && !StyxWoW.Me.HasAura("Spiritwalker's Grace")),
                       Spell.Cast("Chain Lightning", ret => Unit.UnfriendlyUnitsNearTarget(10f).Count() >= 2),
                       Spell.Cast("Lightning Bolt"),
                       Movement.CreateMoveToTargetBehavior(true, 35f)
                       ));
        }
Exemplo n.º 9
0
        public static Composite CreateMarksmanHunterInstancePullAndCombat()
        {
            return(new PrioritySelector(
                       Common.CreateHunterCallPetBehavior(true),

                       Safers.EnsureTarget(),
                       Spell.BuffSelf("Disengage",
                                      ret => SingularSettings.Instance.Hunter.UseDisengage && StyxWoW.Me.CurrentTarget.Distance < Spell.MeleeRange + 3f),
                       Common.CreateHunterBackPedal(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Helpers.Common.CreateAutoAttack(true),
                       new Decorator(
                           ret => StyxWoW.Me.CurrentTarget.Distance < 35f,
                           Movement.CreateEnsureMovementStoppedBehavior()),

                       new Decorator(
                           ret => StyxWoW.Me.IsCasting && StyxWoW.Me.CastingSpell.Name == "Steady Shot",
                           new Action(ret => DoubleSteadyCast = true)),

                       Spell.WaitForCast(true),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                       Spell.Buff("Hunter's Mark"),
                       Spell.BuffSelf("Aspect of the Hawk"),

                       Spell.Cast("Mend Pet",
                                  ret => StyxWoW.Me.GotAlivePet && !StyxWoW.Me.Pet.HasAura("Mend Pet") &&
                                  (StyxWoW.Me.Pet.HealthPercent < SingularSettings.Instance.Hunter.MendPetPercent || (StyxWoW.Me.Pet.HappinessPercent < 90 && TalentManager.HasGlyph("Mend Pet")))),

                       // Cooldowns
                       Spell.BuffSelf("Readiness",
                                      ret => !StyxWoW.Me.HasAura("Rapid Fire") && SpellManager.HasSpell("Rapid Fire") &&
                                      SpellManager.Spells["Rapid Fire"].Cooldown),
                       Spell.BuffSelf("Rapid Fire",
                                      ret => (StyxWoW.Me.HasAura("Call of the Wild") ||
                                              !StyxWoW.Me.PetSpells.Any(s => s.Spell != null && s.Spell.Name == "Call of the Wild" && s.Spell.CooldownTimeLeft.TotalSeconds < 60)) &&
                                      !StyxWoW.Me.HasAnyAura("Bloodlust", "Heroism", "Time Warp", "The Beast Within")),

                       new Decorator(
                           ret => Unit.UnfriendlyUnitsNearTarget(10f).Count() >= 3,
                           new PrioritySelector(
                               Common.CreateHunterTrapBehavior("Explosive Trap"),
                               Spell.Cast("Multi Shot"),
                               Spell.Cast("Steady Shot"),
                               Movement.CreateMoveToTargetBehavior(true, 35f)
                               )
                           ),

                       // Above 90% Careful Aim rotation
                       new Decorator(
                           ret => TalentManager.GetCount(2, 6) > 0 && StyxWoW.Me.CurrentTarget.HealthPercent > 90,
                           new PrioritySelector(
                               new Decorator(
                                   ret => StyxWoW.Me.IsMoving,
                                   new PrioritySelector(
                                       Spell.Cast("Aimed Shot", ret => StyxWoW.Me.HasAura("Fire!")),
                                       Spell.Buff("Serpent Sting", true),
                                       Spell.Cast("Chimera Shot")
                                       )),
                               Spell.Cast("Aimed Shot"),
                               Spell.Cast("Steady Shot"),
                               Movement.CreateMoveToTargetBehavior(true, 35f)
                               )),

                       // Rotation
                       Spell.Buff("Serpent Sting", true),
                       Spell.Cast("Chimera Shot"),
                       Spell.Cast("Steady Shot", ret => DoubleSteadyCast),
                       Spell.Cast("Kill Shot"),
                       Spell.Cast("Aimed Shot", ret => StyxWoW.Me.HasAura("Fire!")),
                       Spell.Cast("Arcane Shot", ret => StyxWoW.Me.FocusPercent > 40),
                       Spell.Cast("Steady Shot"),
                       Movement.CreateMoveToTargetBehavior(true, 35f)
                       ));
        }
Exemplo n.º 10
0
        private static Composite CreateFeralCatInstanceCombat()
        {
            return(new PrioritySelector(
                       Spell.BuffSelf("Cat Form"),
                       Spell.Cast("Feral Charge (Cat)"),

                       Spell.Cast("Dash",
                                  ret => StyxWoW.Me.CurrentTarget.Distance > Spell.MeleeRange + 2f &&
                                  !StyxWoW.Me.HasAura("Stampeding Roar")),
                       Spell.BuffSelf("Stampeding Roar (Cat)",
                                      ret => StyxWoW.Me.CurrentTarget.Distance > Spell.MeleeRange + 2f &&
                                      !StyxWoW.Me.HasAura("Dash")),

                       Spell.BuffSelf("Barkskin", ret => StyxWoW.Me.HealthPercent < Settings.FeralBarkskin),
                       Spell.BuffSelf("Survival Instincts", ret => StyxWoW.Me.HealthPercent < Settings.SurvivalInstinctsHealth),

                       new Decorator(
                           ret => Unit.NearbyUnfriendlyUnits.Count(u => u.DistanceSqr < 5 * 5) >= 3,
                           new PrioritySelector(
                               Spell.BuffSelf("Tiger's Fury"),
                               Spell.BuffSelf("Berserk"),
                               Spell.Cast("Swipe (Cat)"),
                               Movement.CreateMoveToMeleeBehavior(true)
                               )),

                       Movement.CreateMoveBehindTargetBehavior(),

                       Spell.BuffSelf("Tiger's Fury", ret => StyxWoW.Me.EnergyPercent < 35 && !StyxWoW.Me.HasAura("Stampede")),
                       Spell.BuffSelf("Berserk", ret => StyxWoW.Me.HasAura("Tiger's Fury")),
                       Spell.Cast("Mangle (Cat)",
                                  ret => Has4PieceTier11Bonus && StyxWoW.Me.GetAuraTimeLeft("Strength of the Panther", false).TotalSeconds < 3),
                       Spell.Buff("Faerie Fire (Feral)", ret => !StyxWoW.Me.CurrentTarget.HasSunders()),
                       Spell.Buff("Mangle (Cat)", "Mangle", "Trauma", "Stampede"),
                       Spell.Cast("Ravage!", ret => StyxWoW.Me.GetAuraTimeLeft("Stampede", true).TotalSeconds < 3),
                       Spell.Cast("Ferocious Bite",
                                  ret => TalentManager.GetCount(2, 19) == 2 && StyxWoW.Me.CurrentTarget.HealthPercent < (Has2PieceTier13Bonus ? 60 : 25) &&
                                  (StyxWoW.Me.ComboPoints == 5 ||
                                   StyxWoW.Me.CurrentTarget.HasMyAura("Rip") && StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Rip", true).TotalSeconds < 3)),
                       Spell.Cast("Shred",
                                  ret => TalentManager.HasGlyph("Bloodletting") && StyxWoW.Me.CurrentTarget.HasMyAura("Rip") &&
                                  StyxWoW.Me.CurrentTarget.MeIsBehind &&
                                  StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Rip", true).TotalSeconds < 14),
                       Spell.Cast("Rip",
                                  ret => StyxWoW.Me.ComboPoints == 5 && StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Rip", true).TotalSeconds < 2),
                       Spell.Cast("Ferocious Bite",
                                  ret => StyxWoW.Me.HasAura("Berserk") && StyxWoW.Me.ComboPoints == 5 &&
                                  StyxWoW.Me.CurrentTarget.HasMyAura("Rip") && StyxWoW.Me.CurrentTarget.HasMyAura("Savage Roar") &&
                                  StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Rip", true).TotalSeconds >= 5 &&
                                  StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Savage Roar", true).TotalSeconds >= 3),
                       Spell.Cast("Rake",
                                  ret => StyxWoW.Me.HasAura("Tiger's Fury") && StyxWoW.Me.CurrentTarget.HasMyAura("Rake") &&
                                  StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Rake", true).TotalSeconds < 9),
                       Spell.Cast("Rake", ret => StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Rake", true).TotalSeconds < 3),
                       Spell.Cast("Shred", ret => StyxWoW.Me.HasAura("Omen of Clarity") && StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Mangle (Cat)", ret => StyxWoW.Me.HasAura("Omen of Clarity") && !StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Savage Roar", ret => StyxWoW.Me.GetAuraTimeLeft("Savage Roar", true).TotalSeconds < 2),
                       Spell.Cast("Ferocious Bite",
                                  ret => StyxWoW.Me.ComboPoints == 5 && StyxWoW.Me.CurrentTarget.HasMyAura("Rip") &&
                                  StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Rip", true).TotalSeconds >= 14 &&
                                  (TalentManager.GetCount(2, 17) < 2 ||
                                   StyxWoW.Me.CurrentTarget.HasMyAura("Savage Roar") &&
                                   StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Savage Roar", true).TotalSeconds >= 10)),
                       Spell.Cast("Ravage!",
                                  ret => StyxWoW.Me.HasAura("Stampede") && !StyxWoW.Me.HasAura("Omen of Clarity") &&
                                  (StyxWoW.Me.HasAura("Tiger's Fury") ||
                                   SpellManager.HasSpell("Tiger's Fury") && !SpellManager.GlobalCooldown &&
                                   SpellManager.Spells["Tiger's Fury"].CooldownTimeLeft.TotalSeconds <= 3)),
                       Spell.Cast("Mangle (Cat)", ret => Has4PieceTier11Bonus && !StyxWoW.Me.HasAura("Strength of the Panther", 3)),
                       new Decorator(
                           ret => StyxWoW.Me.CurrentTarget.MeIsBehind,
                           new PrioritySelector(
                               Spell.Cast("Shred", ret => StyxWoW.Me.HasAura("Tiger's Fury") && StyxWoW.Me.HasAura("Berserk")),
                               Spell.Cast("Shred",
                                          ret => SpellManager.HasSpell("Tiger's Fury") && !SpellManager.GlobalCooldown &&
                                          SpellManager.Spells["Tiger's Fury"].CooldownTimeLeft.TotalSeconds <= 3),
                               Spell.Cast("Shred", ret => StyxWoW.Me.ComboPoints == 4),
                               Spell.Cast("Shred", ret => StyxWoW.Me.EnergyPercent >= 85))),
                       new Decorator(
                           ret => !StyxWoW.Me.CurrentTarget.MeIsBehind,
                           new PrioritySelector(
                               Spell.Cast("Mangle (Cat)", ret => StyxWoW.Me.HasAura("Tiger's Fury") && StyxWoW.Me.HasAura("Berserk")),
                               Spell.Cast("Mangle (Cat)",
                                          ret => SpellManager.HasSpell("Tiger's Fury") && !SpellManager.GlobalCooldown &&
                                          SpellManager.Spells["Tiger's Fury"].CooldownTimeLeft.TotalSeconds <= 3),
                               Spell.Cast("Mangle (Cat)", ret => StyxWoW.Me.ComboPoints == 4),
                               Spell.Cast("Mangle (Cat)", ret => StyxWoW.Me.EnergyPercent >= 85))),
                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Exemplo n.º 11
0
        public static Composite CreateAssaRogueInstanceCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       new Decorator(
                           ret => !StyxWoW.Me.HasAura("Vanish"),
                           Helpers.Common.CreateAutoAttack(true)),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                       // Defensive
                       Spell.BuffSelf("Evasion",
                                      ret => Unit.NearbyUnfriendlyUnits.Count(u => u.DistanceSqr < 6 * 6 && u.IsTargetingMeOrPet) >= 1),

                       Spell.BuffSelf("Cloak of Shadows",
                                      ret => Unit.NearbyUnfriendlyUnits.Count(u => u.IsTargetingMeOrPet && u.IsCasting) >= 1),

                       // Redirect if we have CP left
                       Spell.Cast("Redirect", ret => StyxWoW.Me.RawComboPoints > 0 && StyxWoW.Me.ComboPoints < 1),

                       // Agro management
                       Spell.Cast(
                           "Tricks of the Trade",
                           ret => Common.BestTricksTarget,
                           ret => SingularSettings.Instance.Rogue.UseTricksOfTheTrade),

                       Spell.Cast("Feint", ret => StyxWoW.Me.CurrentTarget.ThreatInfo.RawPercent > 80),

                       Movement.CreateMoveBehindTargetBehavior(),

                       Spell.BuffSelf("Vanish",
                                      ret => TalentManager.GetCount(1, 14) > 0 && StyxWoW.Me.CurrentTarget.HasMyAura("Rupture") &&
                                      StyxWoW.Me.HasAura("Slice and Dice")),
                       Spell.Cast("Garrote",
                                  ret => (StyxWoW.Me.HasAura("Vanish") || StyxWoW.Me.IsStealthed) &&
                                  StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.BuffSelf("Vendetta",
                                      ret => StyxWoW.Me.CurrentTarget.IsBoss() &&
                                      (StyxWoW.Me.CurrentTarget.HealthPercent < 35 || TalentManager.GetCount(1, 13) == 0)),

                       new Decorator(
                           ret => Unit.NearbyUnfriendlyUnits.Count(u => u.DistanceSqr < 8 * 8) >= 3,
                           Spell.BuffSelf("Fan of Knives", ret => Item.RangedIsType(WoWItemWeaponClass.Thrown))),

                       Spell.Buff("Rupture", true, ret => StyxWoW.Me.ComboPoints >= 4),
                       Spell.BuffSelf("Slice and Dice",
                                      ret => StyxWoW.Me.RawComboPoints > 0 && StyxWoW.Me.GetAuraTimeLeft("Slice and Dice", true).TotalSeconds < 3),
                       Spell.BuffSelf("Cold Blood",
                                      ret => StyxWoW.Me.ComboPoints >= 4 && StyxWoW.Me.CurrentTarget.HealthPercent >= 35 ||
                                      StyxWoW.Me.ComboPoints == 5 || !SpellManager.HasSpell("Envenom")),
                       Spell.Cast("Eviscerate",
                                  ret => (!StyxWoW.Me.CurrentTarget.Elite || !SpellManager.HasSpell("Envenom")) && StyxWoW.Me.ComboPoints >= 4),
                       Spell.Cast("Envenom",
                                  ret => StyxWoW.Me.CurrentTarget.HealthPercent >= 35 && StyxWoW.Me.ComboPoints >= 4),
                       Spell.Cast("Envenom",
                                  ret => StyxWoW.Me.CurrentTarget.HealthPercent < 35 && StyxWoW.Me.ComboPoints == 5),
                       Spell.Cast("Backstab",
                                  ret => StyxWoW.Me.CurrentTarget.HealthPercent < 35 && TalentManager.GetCount(1, 13) > 0 &&
                                  StyxWoW.Me.CurrentTarget.MeIsBehind && !StyxWoW.Me.HasAura("Cold Blood")),
                       Spell.Cast("Mutilate",
                                  ret => (StyxWoW.Me.CurrentTarget.HealthPercent >= 35 || TalentManager.GetCount(1, 13) == 0 ||
                                          !StyxWoW.Me.CurrentTarget.MeIsBehind) && !StyxWoW.Me.HasAura("Cold Blood")),

                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Exemplo n.º 12
0
        public static Composite CreateBloodDeathKnightInstanceCombat()
        {
            return
                (new PrioritySelector(
                     Safers.EnsureTarget(),
                     Movement.CreateMoveToLosBehavior(),
                     Movement.CreateFaceTargetBehavior(),
                     Spell.WaitForCast(),
                     Helpers.Common.CreateAutoAttack(true),
                     Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),
                     Spell.BuffSelf("Blood Presence"),

                     // Anti-magic shell
                     Spell.BuffSelf("Anti-Magic Shell",
                                    ret => Unit.NearbyUnfriendlyUnits.Any(u =>
                                                                          (u.IsCasting || u.ChanneledCastingSpellId != 0) &&
                                                                          u.CurrentTargetGuid == StyxWoW.Me.Guid &&
                                                                          SingularSettings.Instance.DeathKnight.UseAntiMagicShell)),

                     /*
                      *  Big cooldown section. By default, all cooldowns are priorotized by their time ascending
                      *  for maximum uptime in the long term. By default, all cooldowns are also exlusive. This
                      *  means they will be used in rotation rather than conjunction. This is required for high
                      *  end blood tanking.
                      */
                     Spell.BuffSelf("Death Pact",
                                    ret => StyxWoW.Me.HealthPercent < SingularSettings.Instance.DeathKnight.PetSacrificePercent &&
                                    StyxWoW.Me.GotAlivePet),
                     Spell.BuffSelf("Rune Tap",
                                    ret => StyxWoW.Me.HealthPercent < 90 && StyxWoW.Me.HasAura("Will of the Necropolis")),
                     Spell.BuffSelf("Death Coil",
                                    ret => StyxWoW.Me.HealthPercent < 70 && StyxWoW.Me.HasAura("Lichborne")),
                     Spell.Cast("Dancing Rune Weapon",
                                ret => SingularSettings.Instance.DeathKnight.UseDancingRuneWeapon &&
                                Unit.NearbyUnfriendlyUnits.Count() > 2),
                     Spell.BuffSelf("Bone Shield",
                                    ret => SingularSettings.Instance.DeathKnight.UseBoneShield &&
                                    (!SingularSettings.Instance.DeathKnight.BoneShieldExclusive ||
                                     (!StyxWoW.Me.HasAura("Vampiric Blood") &&
                                      !StyxWoW.Me.HasAura("Dancing Rune Weapon") &&
                                      !StyxWoW.Me.HasAura("Lichborne") &&
                                      !StyxWoW.Me.HasAura("Icebound Fortitude")))),
                     Spell.BuffSelf("Vampiric Blood",
                                    ret => SingularSettings.Instance.DeathKnight.UseVampiricBlood &&
                                    StyxWoW.Me.HealthPercent < SingularSettings.Instance.DeathKnight.VampiricBloodPercent &&
                                    (!SingularSettings.Instance.DeathKnight.VampiricBloodExclusive ||
                                     (!StyxWoW.Me.HasAura("Bone Shield") &&
                                      !StyxWoW.Me.HasAura("Dancing Rune Weapon") &&
                                      !StyxWoW.Me.HasAura("Lichborne") &&
                                      !StyxWoW.Me.HasAura("Icebound Fortitude")))),
                     Spell.BuffSelf("Lichborne",
                                    ret => SingularSettings.Instance.DeathKnight.UseLichborne &&
                                    StyxWoW.Me.HealthPercent < SingularSettings.Instance.DeathKnight.LichbornePercent &&
                                    StyxWoW.Me.CurrentRunicPower >= 60 &&
                                    (!SingularSettings.Instance.DeathKnight.LichborneExclusive ||
                                     (!StyxWoW.Me.HasAura("Bone Shield") &&
                                      !StyxWoW.Me.HasAura("Vampiric Blood") &&
                                      !StyxWoW.Me.HasAura("Dancing Rune Weapon") &&
                                      !StyxWoW.Me.HasAura("Icebound Fortitude")))),
                     Spell.BuffSelf("Raise Dead",
                                    ret => SingularSettings.Instance.DeathKnight.UsePetSacrifice &&
                                    StyxWoW.Me.HealthPercent < SingularSettings.Instance.DeathKnight.PetSacrificeSummonPercent &&
                                    (!SingularSettings.Instance.DeathKnight.PetSacrificeExclusive ||
                                     (!StyxWoW.Me.HasAura("Bone Shield") &&
                                      !StyxWoW.Me.HasAura("Vampiric Blood") &&
                                      !StyxWoW.Me.HasAura("Dancing Rune Weapon") &&
                                      !StyxWoW.Me.HasAura("Lichborne") &&
                                      !StyxWoW.Me.HasAura("Icebound Fortitude")))),
                     Spell.BuffSelf("Icebound Fortitude",
                                    ret => SingularSettings.Instance.DeathKnight.UseIceboundFortitude &&
                                    StyxWoW.Me.HealthPercent < SingularSettings.Instance.DeathKnight.IceboundFortitudePercent &&
                                    (!SingularSettings.Instance.DeathKnight.IceboundFortitudeExclusive ||
                                     (!StyxWoW.Me.HasAura("Bone Shield") &&
                                      !StyxWoW.Me.HasAura("Vampiric Blood") &&
                                      !StyxWoW.Me.HasAura("Dancing Rune Weapon") &&
                                      !StyxWoW.Me.HasAura("Lichborne")))),
                     Spell.BuffSelf("Empower Rune Weapon",
                                    ret => StyxWoW.Me.HealthPercent < SingularSettings.Instance.DeathKnight.EmpowerRuneWeaponPercent &&
                                    !SpellManager.CanCast("Death Strike")),
                     Spell.BuffSelf("Army of the Dead",
                                    ret => SingularSettings.Instance.DeathKnight.UseArmyOfTheDead &&
                                    StyxWoW.Me.HealthPercent < SingularSettings.Instance.DeathKnight.ArmyOfTheDeadPercent),

                     new Sequence(
                         Spell.Cast("Death Grip",
                                    ret => SingularSettings.Instance.EnableTaunting &&
                                    StyxWoW.Me.CurrentTarget.DistanceSqr > 10 * 10),
                         new DecoratorContinue(
                             ret => StyxWoW.Me.IsMoving,
                             new Action(ret => Navigator.PlayerMover.MoveStop())),
                         new WaitContinue(1, new ActionAlwaysSucceed())
                         ),

                     Spell.Cast("Dark Command",
                                ret => TankManager.Instance.NeedToTaunt.FirstOrDefault(),
                                ret => SingularSettings.Instance.EnableTaunting),

                     // Start AoE section
                     new Decorator(ret => Unit.UnfriendlyUnitsNearTarget(15f).Count() >= SingularSettings.Instance.DeathKnight.DeathAndDecayCount,
                                   new PrioritySelector(
                                       Spell.CastOnGround("Death and Decay",
                                                          ret => StyxWoW.Me.CurrentTarget.Location,
                                                          ret => SingularSettings.Instance.DeathKnight.UseDeathAndDecay),
                                       Spell.Cast("Outbreak",
                                                  ret => !StyxWoW.Me.CurrentTarget.HasMyAura("Frost Fever") ||
                                                  !StyxWoW.Me.CurrentTarget.HasAura("Blood Plague")),
                                       Spell.Buff("Icy Touch", true,
                                                  ret => Spell.GetSpellCooldown("Outbreak").TotalSeconds > 10,
                                                  "Frost Fever"),
                                       Spell.Buff("Plague Strike", true,
                                                  ret => Spell.GetSpellCooldown("Outbreak").TotalSeconds > 10,
                                                  "Blood Plague"),
                                       Spell.Cast("Pestilence",
                                                  ret => StyxWoW.Me.CurrentTarget.HasMyAura("Blood Plague") &&
                                                  StyxWoW.Me.CurrentTarget.HasMyAura("Frost Fever") &&
                                                  Unit.UnfriendlyUnitsNearTarget(10f).Count(u =>
                                                                                            !u.HasMyAura("Blood Plague") &&
                                                                                            !u.HasMyAura("Frost Fever")) > 0),
                                       Spell.Cast("Blood Boil",
                                                  ret => TalentManager.GetCount(1, 6) > 0 &&
                                                  Unit.UnfriendlyUnitsNearTarget(12f).Count(u => !u.HasMyAura("Scarlet Fever")) > 0),
                                       new Sequence(
                                           Spell.Cast("Death Strike", ret => DeathStrikeTimer.IsFinished),
                                           new Action(ret => DeathStrikeTimer.Reset())),
                                       Spell.Cast("Blood Boil"),
                                       Spell.Cast("Heart Strike"),
                                       Spell.Cast("Rune Strike"),
                                       Spell.Cast("Icy Touch"),
                                       Movement.CreateMoveToMeleeBehavior(true)
                                       )),

                     Spell.Cast("Outbreak",
                                ret => !StyxWoW.Me.CurrentTarget.HasMyAura("Frost Fever") ||
                                !StyxWoW.Me.CurrentTarget.HasAura("Blood Plague")),
                     Spell.Buff("Icy Touch", true,
                                ret => Spell.GetSpellCooldown("Outbreak").TotalSeconds > 10,
                                "Frost Fever"),
                     Spell.Buff("Plague Strike", true,
                                ret => Spell.GetSpellCooldown("Outbreak").TotalSeconds > 10,
                                "Blood Plague"),
                     // If we don't have RS yet, just resort to DC. Its not the greatest, but oh well. Make sure we keep enough RP banked for a self-heal if need be.
                     Spell.Cast("Death Coil",
                                ret => !SpellManager.HasSpell("Rune Strike") && StyxWoW.Me.CurrentRunicPower >= 80),
                     Spell.Cast("Death Coil",
                                ret => !StyxWoW.Me.CurrentTarget.IsWithinMeleeRange),
                     Spell.Cast("Rune Strike"),
                     new Sequence(
                         Spell.Cast("Death Strike", ret => DeathStrikeTimer.IsFinished),
                         new Action(ret => DeathStrikeTimer.Reset())),
                     Spell.Cast("Blood Boil"),
                     Spell.Cast("Heart Strike"),
                     Spell.Cast("Icy Touch"),
                     Movement.CreateMoveToMeleeBehavior(true)
                     ));
        }
Exemplo n.º 13
0
        public static Composite CreateAfflictionCombat()
        {
            PetManager.WantedPet = "Felhunter";

            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.WaitForCast(true),
                       Helpers.Common.CreateAutoAttack(true),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),
                       // Emergencies
                       new Decorator(
                           ret => StyxWoW.Me.HealthPercent < 20,
                           new PrioritySelector(
                               //Spell.Buff("Fear", ret => !Me.CurrentTarget.HasAura("Fear")),
                               Spell.Cast("Howl of Terror", ret => StyxWoW.Me.CurrentTarget.Distance < 10 && StyxWoW.Me.CurrentTarget.IsPlayer),
                               Spell.Cast(
                                   "Death Coil", ret => !StyxWoW.Me.CurrentTarget.HasAura("Howl of Terror") && !StyxWoW.Me.CurrentTarget.HasAura("Fear")),
                               Spell.BuffSelf("Soulburn", ret => StyxWoW.Me.CurrentSoulShards > 0),
                               Spell.Cast("Drain Life")
                               )),
                       Spell.Cast("Life Tap", ret => StyxWoW.Me.ManaPercent < 10),
                       Spell.Cast("Health Funnel", ret => StyxWoW.Me.GotAlivePet && PetManager.PetTimer.IsFinished && StyxWoW.Me.Pet.HealthPercent < 30),
                       // Finishing sequence
                       Spell.Cast(
                           "Soul Swap",
                           ret =>
                           !StyxWoW.Me.HasAura("Soul Swap") && StyxWoW.Me.CurrentTarget.HealthPercent < 10 &&
                           StyxWoW.Me.CurrentTarget.HasAura("Unstable Affliction") &&
                           !StyxWoW.Me.CurrentTarget.IsBoss()),
                       Spell.Cast("Drain Soul", ret => StyxWoW.Me.CurrentTarget.HealthPercent < 10),
                       // Elites
                       new Decorator(
                           ret => StyxWoW.Me.CurrentTarget.IsBoss(),
                           new PrioritySelector(
                               Spell.BuffSelf("Demon Soul"),
                               Spell.Buff("Curse of Elements", ret => !StyxWoW.Me.CurrentTarget.HasAura("Curse of Elements")),
                               new Decorator(
                                   ret => SpellManager.CanCast("Summon Infernal"),
                                   new Action(
                                       ret =>
            {
                SpellManager.Cast("Summon Infernal");
                LegacySpellManager.ClickRemoteLocation(StyxWoW.Me.CurrentTarget.Location);
            }))
                               )),
                       // AoE
                       new Decorator(
                           ret => Unit.NearbyUnfriendlyUnits.Count(u => u.Distance < 15) >= 5,
                           new PrioritySelector(
                               Spell.BuffSelf("Demon Soul"),
                               Spell.BuffSelf(
                                   "Soulburn",
                                   ret =>
                                   !StyxWoW.Me.CurrentTarget.HasAura("Seed of Corruption") && StyxWoW.Me.CurrentSoulShards > 0 &&
                                   TalentManager.GetCount(1, 15) == 1),
                               Spell.Buff("Seed of Corruption", ret => !StyxWoW.Me.CurrentTarget.HasAura("Seed of Corruption"))
                               )),
                       // Standard Nuking
                       Spell.Cast("Shadow Bolt", ret => StyxWoW.Me.HasAura("Shadow Trance")),
                       Spell.Cast("Haunt"),
                       Spell.Cast("Soul Swap", ret => StyxWoW.Me.HasAura("Soul Swap") && StyxWoW.Me.CurrentTarget.HealthPercent > 10),
                       Spell.Buff("Bane of Doom", ret => StyxWoW.Me.CurrentTarget.IsBoss() && !StyxWoW.Me.CurrentTarget.HasAura("Bane of Doom")),
                       Spell.Buff(
                           "Bane of Agony", ret => !StyxWoW.Me.CurrentTarget.HasAura("Bane of Agony") && !StyxWoW.Me.CurrentTarget.HasAura("Bane of Doom")),
                       Spell.Buff(
                           "Corruption", ret => !StyxWoW.Me.CurrentTarget.HasAura("Corruption") && !StyxWoW.Me.CurrentTarget.HasAura("Seed of Corruption")),
                       Spell.Buff("Unstable Affliction", ret => StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Unstable Affliction", true).TotalSeconds < 2),
                       Spell.Cast("Drain Soul", ret => StyxWoW.Me.CurrentTarget.HealthPercent < 25),
                       Spell.Cast("Shadowflame", ret => StyxWoW.Me.CurrentTarget.Distance < 5),
                       Spell.BuffSelf("Demon Soul"),
                       Spell.Buff("Curse of the Elements", ret => !StyxWoW.Me.CurrentTarget.IsPlayer),
                       Spell.Buff("Curse of Weakness", ret => StyxWoW.Me.CurrentTarget.IsPlayer && !StyxWoW.Me.CurrentTarget.HasAura("Curse of Weakness")),
                       Spell.Cast("Life Tap", ret => StyxWoW.Me.ManaPercent < 50 && StyxWoW.Me.HealthPercent > 70),
                       Spell.Cast("Drain Life", ret => StyxWoW.Me.HealthPercent < 70),
                       Spell.Cast("Health Funnel", ret => StyxWoW.Me.GotAlivePet && PetManager.PetTimer.IsFinished && StyxWoW.Me.Pet.HealthPercent < 70),
                       Spell.Cast("Shadow Bolt"),
                       Spell.Cast("Fel Flame", ret => StyxWoW.Me.IsMoving),
                       Movement.CreateMoveToTargetBehavior(true, 35f)
                       ));
        }