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