예제 #1
0
        public static Composite CreateShamanEnhancementNormalPull()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.WaitForCast(true),

                       Common.CreateShamanImbueMainHandBehavior(Imbue.Windfury, Imbue.Flametongue),
                       Common.CreateShamanImbueOffHandBehavior(Imbue.Flametongue),

                       Spell.BuffSelf("Lightning Shield"),

                       new Decorator(
                           ret => StyxWoW.Me.Level < 20,
                           new PrioritySelector(
                               Spell.Cast("Lightning Bolt"),
                               Movement.CreateMoveToTargetBehavior(true, 35f)
                               )),

                       Helpers.Common.CreateAutoAttack(true),
                       new Decorator(ret => StyxWoW.Me.CurrentTarget.DistanceSqr < 20 * 20,
                                     Totems.CreateTotemsNormalBehavior()),
                       Spell.Cast("Lightning Bolt", ret => StyxWoW.Me.HasAura("Maelstrom Weapon", 5)),
                       Spell.Cast("Unleash Weapon",
                                  ret => StyxWoW.Me.Inventory.Equipped.OffHand != null &&
                                  StyxWoW.Me.Inventory.Equipped.OffHand.TemporaryEnchantment.Id == 5),
                       Spell.Cast("Earth Shock"),
                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
예제 #2
0
        public static Composite CreateShamanEnhancementNormalCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.WaitForCast(true),
                       Helpers.Common.CreateAutoAttack(true),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                       Common.CreateShamanImbueMainHandBehavior(Imbue.Windfury, Imbue.Flametongue),
                       Common.CreateShamanImbueOffHandBehavior(Imbue.Flametongue),

                       Spell.BuffSelf("Lightning Shield"),
                       Spell.BuffSelf("Spiritwalker's Grace", ret => StyxWoW.Me.IsMoving && StyxWoW.Me.Combat),
                       Spell.BuffSelf("Feral Spirit", ret =>
                                      SingularSettings.Instance.Shaman.FeralSpiritCastOn == CastOn.All ||
                                      (SingularSettings.Instance.Shaman.FeralSpiritCastOn == CastOn.Bosses && StyxWoW.Me.CurrentTarget.Elite) ||
                                      (SingularSettings.Instance.Shaman.FeralSpiritCastOn == CastOn.Players && Unit.NearbyUnfriendlyUnits.Any(u => u.IsPlayer && u.Combat && u.IsTargetingMeOrPet))),

                       Totems.CreateTotemsNormalBehavior(),

                       Spell.BuffSelf("Elemental Mastery",
                                      ret => !StyxWoW.Me.HasAnyAura(Common.BloodlustName, "Time Warp", "Ancient Hysteria")),

                       Common.CreateShamanInCombatBuffs(true),

                       Spell.Cast("Stormstrike"),
                       Spell.Buff("Flame Shock", true,
                                  ret => (StyxWoW.Me.HasAura("Unleash Flame") || !SpellManager.HasSpell("Unleash Elements")) &&
                                  (StyxWoW.Me.CurrentTarget.Elite || (SpellManager.HasSpell("Fire Nova") && Unit.UnfriendlyUnitsNearTarget(10).Count(u => u.IsTargetingMeOrPet) >= 3))),
                       Spell.Cast("Earth Shock",
                                  ret => StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Flame Shock", true).TotalSeconds > 3 ||
                                  !StyxWoW.Me.CurrentTarget.Elite ||
                                  !SpellManager.HasSpell("Flame Shock")),
                       Spell.Cast("Lava Lash",
                                  ret => StyxWoW.Me.Inventory.Equipped.OffHand != null &&
                                  StyxWoW.Me.Inventory.Equipped.OffHand.ItemInfo.ItemClass == WoWItemClass.Weapon),
                       Spell.BuffSelf("Fire Nova",
                                      ret => StyxWoW.Me.CurrentTarget.HasMyAura("Flame Shock") &&
                                      Unit.NearbyUnfriendlyUnits.Count(u =>
                                                                       u.IsTargetingMeOrPet &&
                                                                       u.Location.DistanceSqr(StyxWoW.Me.CurrentTarget.Location) < 10 * 10) >= 3),
                       Spell.Cast("Primal Strike", ret => !SpellManager.HasSpell("Stormstrike")),
                       Spell.Cast("Unleash Elements"),

                       new Decorator(ret => StyxWoW.Me.HasAura("Maelstrom Weapon", 5),
                                     new PrioritySelector(
                                         Spell.Cast("Chain Lightning", ret => Unit.UnfriendlyUnitsNearTarget(10f).Count() >= 2),
                                         Spell.Cast("Lightning Bolt")
                                         )
                                     ),

                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
예제 #3
0
        public static Composite CreateShamanElementalNormalPull()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.WaitForCast(true),

                       Spell.BuffSelf("Lightning Shield"),

                       new Decorator(
                           ret => StyxWoW.Me.CurrentTarget.DistanceSqr < 40 * 40,
                           Totems.CreateTotemsNormalBehavior()),

                       // grinding or questing, if target meets these cast Flame Shock if possible
                       // 1. mob is less than 12 yds, so no benefit from delay in Lightning Bolt missile arrival
                       // 2. area has another player competing for mobs (we want to tag the mob quickly)
                       new Decorator(
                           ret => StyxWoW.Me.CurrentTarget.Distance < 12 ||
                           ObjectManager.GetObjectsOfType <WoWPlayer>(true, false).Any(p => p.Location.DistanceSqr(StyxWoW.Me.CurrentTarget.Location) <= 40 * 40),
                           new PrioritySelector(
                               Spell.Buff("Flame Shock", true),
                               Spell.Cast("Unleash Weapon", ret => Common.IsImbuedForDPS(StyxWoW.Me.Inventory.Equipped.MainHand)),
                               Spell.Cast("Earth Shock", ret => !SpellManager.HasSpell("Flame Shock"))
                               )
                           ),

                       // have a big attack loaded up, so don't waste it
                       Spell.Cast("Earth Shock",
                                  ret => StyxWoW.Me.HasAura("Lightning Shield", 5)),

                       // otherwise, start with Lightning Bolt so we can follow with an instant
                       // to maximize damage at initial aggro
                       Spell.Cast("Lightning Bolt", ret => !StyxWoW.Me.IsMoving || StyxWoW.Me.HasAura("Spiritwalker's Grace") || TalentManager.HasGlyph("Unleashed Lightning")),

                       // we are moving so throw an instant of some type
                       Spell.Cast("Flame Shock"),
                       Spell.Cast("Unleash Weapon", ret => Common.IsImbuedForDPS(StyxWoW.Me.Inventory.Equipped.MainHand)),

                       Movement.CreateMoveToTargetBehavior(true, 35f)
                       ));
        }
예제 #4
0
        public static Composite CreateShamanEnhancementInstancePullAndCombat()
        {
            return(new PrioritySelector(
                       Spell.WaitForCast(true),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                       Spell.BuffSelf("Lightning Shield"),
                       Spell.BuffSelf("Spiritwalker's Grace", ret => StyxWoW.Me.IsMoving && StyxWoW.Me.Combat),
                       Spell.BuffSelf("Feral Spirit", ret => Unit.IsBoss(Me.CurrentTarget)),

                       Totems.CreateTotemsNormalBehavior(),
                       new Decorator(
                           ret => Unit.UnfriendlyUnitsNearTarget(10f).Count() >= 3,
                           new PrioritySelector(
                               Spell.Cast("Shamanistic Rage", ret => Me.CurrentMana <= 70),
                               Spell.Cast("Unleash Elements"),
                               Spell.Buff("Flame Shock", true),
                               Spell.Cast("Lava Lash",
                                          ret => StyxWoW.Me.CurrentTarget.HasMyAura("Flame Shock") &&
                                          StyxWoW.Me.Inventory.Equipped.OffHand != null &&
                                          StyxWoW.Me.Inventory.Equipped.OffHand.ItemInfo.ItemClass == WoWItemClass.Weapon),
                               Spell.Cast("Fire Nova"),
                               Spell.Cast("Chain Lightning", ret => StyxWoW.Me.HasAura("Maelstrom Weapon", 5)),
                               Spell.Cast("Stormstrike"),
                               Movement.CreateMoveToMeleeBehavior(true)
                               )),

                       Spell.Cast("Stormstrike"),
                       Spell.Cast("Primal Strike", ret => !SpellManager.HasSpell("Stormstrike")),
                       Spell.Cast("Lava Lash",
                                  ret => StyxWoW.Me.Inventory.Equipped.OffHand != null &&
                                  StyxWoW.Me.Inventory.Equipped.OffHand.ItemInfo.ItemClass == WoWItemClass.Weapon),
                       Spell.Cast("Lightning Bolt", ret => StyxWoW.Me.HasAura("Maelstrom Weapon", 5)),
                       Spell.Cast("Unleash Elements"),
                       Spell.Buff("Flame Shock", true, ret => StyxWoW.Me.HasAura("Unleash Flame") || !SpellManager.HasSpell("Unleash Elements")),
                       Spell.Cast("Earth Shock", ret => StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Flame Shock", true).TotalSeconds > 6)
                       ));
        }
예제 #5
0
        public static Composite CreateShamanElementalNormalCombat()
        {
            return(new PrioritySelector(

                       new ThrottlePasses(1, CreateElementalDiagnosticOutputBehavior()),

                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.WaitForCast(true),

                       new Decorator(
                           ret => !Common.InGCD,
                           new PrioritySelector(
                               Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                               new Decorator(
                                   ret => Common.GetImbue(StyxWoW.Me.Inventory.Equipped.MainHand) == Imbue.None,
                                   Common.CreateShamanImbueMainHandBehavior(Imbue.Flametongue)),

                               Spell.BuffSelf("Lightning Shield"),

                               Spell.BuffSelf("Elemental Mastery",
                                              ret => Unit.NearbyUnitsInCombatWithMe.Any(u => u.Elite || u.IsPlayer) &&
                                              !StyxWoW.Me.HasAnyAura(Common.BloodlustName, "Time Warp", "Ancient Hysteria")),

                               Common.CreateShamanInCombatBuffs(true),

                               Spell.BuffSelf("Spiritwalker's Grace", ret => StyxWoW.Me.IsMoving),

                               Spell.BuffSelf("Thunderstorm", ret => Unit.NearbyUnfriendlyUnits.Count(u => u.Distance < 10f) >= 3),

                               Totems.CreateTotemsNormalBehavior(),

                               new Decorator(
                                   ret => Unit.UnfriendlyUnitsNearTarget(10f).Count() >= 3,
                                   new PrioritySelector(
                                       new Action(act => { Logger.WriteDebug("performing aoe behavior"); return RunStatus.Failure; }),

                                       Spell.BuffSelf("Astral Shift", ret => StyxWoW.Me.HealthPercent < 40 || Unit.NearbyUnitsInCombatWithMe.Count() >= 5),

                                       Spell.BuffSelf(Common.BloodlustName,
                                                      ret => Unit.NearbyUnitsInCombatWithMe.Count() >= 5 ||
                                                      Unit.NearbyUnitsInCombatWithMe.Any(u => u.Elite || u.IsPlayer)),

                                       Spell.BuffSelf("Elemental Mastery", ret =>
                                                      !StyxWoW.Me.HasAnyAura(Common.BloodlustName, "Time Warp", "Ancient Hysteria")),

                                       Spell.CastOnGround("Earthquake", ret => StyxWoW.Me.CurrentTarget.Location, req =>
                                                          (StyxWoW.Me.ManaPercent > 60 || StyxWoW.Me.HasAura("Clearcasting")) &&
                                                          Unit.UnfriendlyUnitsNearTarget(10f).Count() >= 6),

                                       Spell.Cast("Chain Lightning", ret => Clusters.GetBestUnitForCluster(Unit.UnfriendlyUnitsNearTarget(15f), ClusterType.Chained, 12))
                                       )),

                               Spell.Buff("Flame Shock", true),

                               Spell.Cast("Lava Burst"),
                               Spell.Cast("Earth Shock",
                                          ret => StyxWoW.Me.HasAura("Lightning Shield", 5) &&
                                          StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Flame Shock", true).TotalSeconds > 3),

                               Spell.Cast("Unleash Elements", ret =>
                                          StyxWoW.Me.IsMoving &&
                                          !StyxWoW.Me.HasAura("Spiritwalker's Grace") &&
                                          Common.IsImbuedForDPS(StyxWoW.Me.Inventory.Equipped.MainHand)),

                               Spell.Cast("Chain Lightning", ret => Unit.UnfriendlyUnitsNearTarget(10f).Count() >= 2),
                               Spell.Cast("Lightning Bolt")
                               )
                           ),

                       Movement.CreateMoveToTargetBehavior(true, 35f)
                       ));
        }