Beispiel #1
0
        public static Composite CreateMageFireInstancePullAndCombat()
        {
            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.IsSelected(13))),
                               Spell.CastOnGround("Blast Wave",
                                                  ret => Clusters.GetBestUnitForCluster(Unit.NearbyUnitsInCombatWithMe, ClusterType.Radius, 8f).Location),
                               Spell.Cast("Dragon's Breath",
                                          ret => Clusters.GetClusterCount(StyxWoW.Me,
                                                                          Unit.NearbyUnitsInCombatWithMe,
                                                                          ClusterType.Cone, 15f) >= 3),
                               Spell.CastOnGround("Flamestrike",
                                                  ret => Clusters.GetBestUnitForCluster(Unit.NearbyUnitsInCombatWithMe, 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.NearbyUnitsInCombatWithMe, ClusterType.Radius, 8f).Location) < o.Radius))
                               )),

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

                       // Rotation
                       Spell.Cast("Frostfire Bolt", ret => StyxWoW.Me.CurrentTarget.IsImmune(WoWSpellSchool.Fire)),
                       Spell.Cast("Living Bomb", ret => !StyxWoW.Me.CurrentTarget.HasAura("Living Bomb") || (StyxWoW.Me.CurrentTarget.HasAura("Living Bomb") && StyxWoW.Me.CurrentTarget.GetAuraTimeLeft("Living Bomb", true).TotalSeconds <= 2)),
                       Spell.Cast("Inferno Blast", ret => StyxWoW.Me.HasAura("Heating Up")),
                       Spell.Cast("Frost Bomb", ret => Unit.UnfriendlyUnitsNearTarget(10f).Count() >= 1),
                       Spell.Cast("Combustion", ret => StyxWoW.Me.CurrentTarget.HasMyAura("Ignite") && StyxWoW.Me.CurrentTarget.HasMyAura("Pyroblast")),

                       Spell.Cast("Pyroblast", ret => StyxWoW.Me.ActiveAuras.ContainsKey("Pyroblast!")),
                       Spell.Cast("Fireball", ret => !SpellManager.HasSpell("Scorch")),
                       Spell.Cast("Frostfire bolt", ret => !SpellManager.HasSpell("Fireball")),
                       Spell.Cast("Scorch"),
                       Movement.CreateMoveToTargetBehavior(true, 39f)
                       ));
        }
Beispiel #2
0
 public static Composite CreatePaladinHolyCombatBehavior()
 {
     return
         (new PrioritySelector(
              Spell.Buff("Judgment",
                         ret => SpellManager.HasSpell("Judgment") && StyxWoW.Me.GotTarget &&
                         StyxWoW.Me.CurrentTarget.Distance <= SpellManager.Spells["Judgment"].MaxRange - 2 &&
                         StyxWoW.Me.CurrentTarget.InLineOfSpellSight &&
                         StyxWoW.Me.IsSafelyFacing(StyxWoW.Me.CurrentTarget)),
              new Decorator(
                  ret => Unit.NearbyFriendlyPlayers.Count(u => u.IsInMyPartyOrRaid) == 0,
                  new PrioritySelector(
                      Safers.EnsureTarget(),
                      Movement.CreateMoveToLosBehavior(),
                      Movement.CreateFaceTargetBehavior(),
                      Helpers.Common.CreateAutoAttack(true),
                      Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),
                      Spell.Buff("Judgment"),
                      Spell.Cast("Hammer of Wrath"),
                      Spell.Cast("Holy Shock"),
                      Spell.Cast("Crusader Strike"),
                      Spell.Cast("Denounce"),
                      Movement.CreateMoveToTargetBehavior(true, 5f)
                      ))
              ));
 }
 public static Composite CreateFeralInstanceCombat()
 {
     return(new PrioritySelector(
                Safers.EnsureTarget(),
                Movement.CreateMoveToLosBehavior(),
                Movement.CreateFaceTargetBehavior(),
                Spell.WaitForCast(),
                Helpers.Common.CreateAutoAttack(true),
                Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),
                new Decorator(
                    ret => !Group.Tanks.Any() && !Group.Healers.Any(),
                    new PrioritySelector(
                        new Decorator(
                            ret => SingularSettings.Instance.Druid.ManualFeralForm == FeralForm.None && StyxWoW.Me.CurrentMap.IsDungeon,
                            new Action(ret => Logger.Write("Singular can't decide which form to use since there is no roles set in your raid. Please set ManualFeralForm setting to your desired form from Class Config"))),
                        new Decorator(
                            ret => SingularSettings.Instance.Druid.ManualFeralForm == FeralForm.Cat || !StyxWoW.Me.CurrentMap.IsDungeon,
                            CreateFeralCatInstanceCombat()),
                        CreateFeralBearInstanceCombat()
                        )),
                new Decorator(
                    ret => !Group.MeIsTank && Group.Tanks.Any(t => t.IsAlive),
                    CreateFeralCatInstanceCombat()),
                CreateFeralBearInstanceCombat()
                ));
 }
Beispiel #4
0
        public static Composite CreateDiscCombatComposite()
        {
            return(new PrioritySelector(

                       new Decorator(
                           ret => !Unit.NearbyGroupMembers.Any(),
                           new PrioritySelector(
                               Safers.EnsureTarget(),
                               Movement.CreateMoveToLosBehavior(),
                               Movement.CreateFaceTargetBehavior(),
                               Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),
                               Spell.Cast("Mindbender"),
                               Spell.Cast("Shadowfiend", ret => StyxWoW.Me.ManaPercent < 50),
                               //Spell.Cast("Archangel", ret => StyxWoW.Me.HasAura("Evangelism", 5)),
                               Spell.Cast("Shadow Word: Death", ret => StyxWoW.Me.CurrentTarget.HealthPercent <= 20),
                               Spell.Buff("Shadow Word: Pain", true),
                               Spell.Cast("Penance"),
                               Spell.Cast("Holy Fire"),
                               Spell.Cast("Smite", ret => !SpellManager.HasSpell("Power Word: Solace") || StyxWoW.Me.ManaPercent >= 10),
                               Spell.Cast("Power Word: Solace", ret => StyxWoW.Me.ManaPercent < 10),
                               //Spell.Cast("Mind Spike", ret => !SpellManager.HasSpell("Power Word: Solace")),
                               Movement.CreateMoveToTargetBehavior(true, 30)
                               ))
                       ));
        }
Beispiel #5
0
        public static Composite CreateBeastMasterHunterInstancePullAndCombat()
        {
            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()),

                       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("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")),

                       Spell.BuffSelf("Fervor",
                                      ret => StyxWoW.Me.FocusPercent <= 50 && (!StyxWoW.Me.GotAlivePet || StyxWoW.Me.Pet.FocusPercent <= 50)),

                       Spell.BuffSelf("Bestial Wrath",
                                      ret => StyxWoW.Me.GotAlivePet && (!SpellManager.HasSpell("Kill Command") || SpellManager.Spells["Kill Command"].CooldownTimeLeft.TotalSeconds < 2)),

                       new Decorator(
                           ret => Unit.UnfriendlyUnitsNearTarget(10f).Count() >= 3,
                           new PrioritySelector(
                               Common.CreateHunterTrapBehavior("Explosive Trap"),
                               Spell.Cast("Multi Shot"),
                               Spell.Cast("Cobra Shot"),
                               Spell.Cast("Steady Shot"),
                               Movement.CreateMoveToTargetBehavior(true, 35f)
                               )
                           ),
                       // Rotation
                       Spell.Buff("Serpent Sting", true),
                       Spell.Cast("Kill Command", ret => StyxWoW.Me.GotAlivePet && StyxWoW.Me.Pet.Location.Distance(StyxWoW.Me.CurrentTarget.Location) < Spell.MeleeRange),
                       Spell.Cast("Kill Shot"),
                       Spell.Cast("Focus Fire",
                                  ret => StyxWoW.Me.GotAlivePet && !StyxWoW.Me.HasAura("The Beast Within") && StyxWoW.Me.Pet.HasAura("Frenzy Effect", 5)),
                       Spell.Cast("Arcane Shot", ret => StyxWoW.Me.FocusPercent > 40),
                       Spell.Cast("Cobra Shot"),
                       Spell.Cast("Steady Shot", ret => !SpellManager.HasSpell("Cobra Shot")),
                       Movement.CreateMoveToTargetBehavior(true, 35f)
                       ));
        }
Beispiel #6
0
        public static Composite CreateLowbieWarlockCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Helpers.Common.CreateAutoAttack(false),
                       Spell.WaitForCast(true),

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

                               // Spell.PreventDoubleCast("Immolate"),
                               Spell.Cast("Life Tap", ret => StyxWoW.Me.ManaPercent < 50 && StyxWoW.Me.HealthPercent > 70),
                               Spell.Cast("Drain Life", ret => StyxWoW.Me.HealthPercent < 70),
                               Spell.Buff("Immolate"),
                               Spell.Buff("Corruption"),
                               Spell.Cast("Shadow Bolt")
                               )
                           ),

                       Movement.CreateMoveToTargetBehavior(true, 35f)
                       ));
        }
        public static Composite CreateRogueCombatPull()
        {
            return(new PrioritySelector(
                       Common.CreateRogueDismount("Pulling"),
                       Common.CreateRoguePullBuffs(), // needed because some Bots not calling this behavior
                       Safers.EnsureTarget(),
                       Common.CreateRoguePullSkipNonPickPocketableMob(),
                       Common.CreateRogueControlNearbyEnemyBehavior(),
                       Common.CreateRogueMoveBehindTarget(),
                       Common.RogueEnsureReadyToAttackFromMelee(),
                       Spell.WaitForCastOrChannel(),

                       new Decorator(
                           ret => !Spell.IsGlobalCooldown() && Me.GotTarget() && Me.IsSafelyFacing(Me.CurrentTarget),
                           new PrioritySelector(

                               CreateCombatDiagnosticOutputBehavior("Pull"),

                               Common.CreateRoguePullPickPocketButDontAttack(),

                               Common.CreateRogueOpenerBehavior(),
                               Common.CreatePullMobMovingAwayFromMe(),
                               Common.CreateAttackFlyingOrUnreachableMobs(),

                               // ok, everything else failed so just hit him!!!!
                               Spell.Buff("Revealing Strike", req => true),
                               Spell.Cast("Pistol Shot")
                               )
                           )
                       ));
        }
Beispiel #8
0
        public static Composite CreateProtectionPaladinCombat()
        {
            return(new PrioritySelector(
                       ctx => TankManager.Instance.FirstUnit ?? StyxWoW.Me.CurrentTarget,
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Helpers.Common.CreateAutoAttack(true),
                       Helpers.Common.CreateInterruptSpellCast(ret => (WoWUnit)ret),

                       // Seal twisting. If our mana gets stupid low, just throw on insight to get some mana back quickly, then put our main seal back on.
                       // This is Seal of Truth once we get it, Righteousness when we dont.
                       Spell.BuffSelf("Seal of Insight", ret => StyxWoW.Me.ManaPercent < 5),
                       Spell.BuffSelf("Seal of Truth", ret => StyxWoW.Me.ManaPercent >= 5),
                       Spell.BuffSelf("Seal of Righteousness", ret => StyxWoW.Me.ManaPercent >= 5 && !SpellManager.HasSpell("Seal of Truth")),

                       // Defensive
                       Spell.BuffSelf("Hand of Freedom",
                                      ret => StyxWoW.Me.HasAuraWithMechanic(WoWSpellMechanic.Dazed,
                                                                            WoWSpellMechanic.Disoriented,
                                                                            WoWSpellMechanic.Frozen,
                                                                            WoWSpellMechanic.Incapacitated,
                                                                            WoWSpellMechanic.Rooted,
                                                                            WoWSpellMechanic.Slowed,
                                                                            WoWSpellMechanic.Snared)),

                       Spell.BuffSelf("Divine Shield",
                                      ret => StyxWoW.Me.CurrentMap.IsBattleground && StyxWoW.Me.HealthPercent <= 20 && !StyxWoW.Me.HasAura("Forbearance")),

                       Spell.Cast("Hand of Reckoning",
                                  ret => TankManager.Instance.NeedToTaunt.FirstOrDefault(),
                                  ret => StyxWoW.Me.IsInInstance),

                       //Multi target
                       new Decorator(
                           ret => Unit.UnfriendlyUnitsNearTarget(8f).Count() >= 1,
                           new PrioritySelector(
                               Spell.Cast("Hammer of the Righteous"),
                               Spell.Cast("Hammer of Justice", ctx => !StyxWoW.Me.IsInParty),
                               Spell.Cast("Consecration", ret => Unit.NearbyUnfriendlyUnits.Count(u => u.Distance <= 8) >= 3 || StyxWoW.Me.CurrentTarget.IsBoss()),
                               Spell.Cast("Holy Wrath"),
                               Spell.Cast("Avenger's Shield", ret => !SingularSettings.Instance.Paladin.AvengersPullOnly),
                               Spell.BuffSelf("Inquisition"),
                               Spell.Cast("Shield of the Righteous", ret => StyxWoW.Me.CurrentHolyPower == 3),
                               Spell.Cast("Judgement"),
                               Spell.Cast("Crusader Strike"),
                               Movement.CreateMoveToMeleeBehavior(true)
                               )),
                       //Single target
                       Spell.Cast("Shield of the Righteous", ret => StyxWoW.Me.CurrentHolyPower == 3),
                       Spell.Cast("Crusader Strike"),
                       Spell.Cast("Hammer of Justice"),
                       Spell.Cast("Judgement"),
                       Spell.Cast("Hammer of Wrath", ret => ((WoWUnit)ret).HealthPercent <= 20),
                       Spell.Cast("Avenger's Shield", ret => !SingularSettings.Instance.Paladin.AvengersPullOnly),
                       // Don't waste mana on cons if its not a boss.
                       Spell.Cast("Consecration", ret => Unit.NearbyUnfriendlyUnits.Count(u => u.Distance <= 8) >= 3 || StyxWoW.Me.CurrentTarget.IsBoss()),
                       Spell.Cast("Holy Wrath"),
                       Movement.CreateMoveToMeleeBehavior(true)));
        }
Beispiel #9
0
 public static Composite CreateLowbieDeathKnightCombat()
 {
     return(new PrioritySelector(
                Safers.EnsureTarget(),
                Movement.CreateMoveToLosBehavior(),
                Movement.CreateFaceTargetBehavior(),
                Helpers.Common.CreateAutoAttack(true),
                Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),
                new Sequence(
                    Spell.Cast("Death Grip",
                               ret => 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("Death Coil"),
                Spell.Buff("Icy Touch", true, "Frost Fever"),
                Spell.Buff("Plague Strike", true, "Blood Plague"),
                Spell.Cast("Blood Strike"),
                Spell.Cast("Icy Touch"),
                Spell.Cast("Plague Strike"),
                Movement.CreateMoveToMeleeBehavior(true)
                ));
 }
Beispiel #10
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)
                       ));
        }
Beispiel #11
0
        public static Composite CreateLowbieDeathKnightCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Helpers.Common.CreateAutoAttack(true),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),
                       // Anti-magic shell - no cost and doesnt trigger GCD
                       Spell.BuffSelf("Anti-Magic Shell",
                                      ret => Unit.NearbyUnfriendlyUnits.Any(u =>
                                                                            (u.IsCasting || u.ChanneledCastingSpellId != 0) &&
                                                                            u.CurrentTargetGuid == StyxWoW.Me.Guid)),

                       new Sequence(
                           Spell.Cast("Death Grip",
                                      ret => 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("Death Coil"),
                       Spell.Buff("Icy Touch", true, "Frost Fever"),
                       Spell.Buff("Plague Strike", true, "Blood Plague"),
                       Spell.Cast("Blood Strike"),
                       Spell.Cast("Icy Touch"),
                       Spell.Cast("Plague Strike"),
                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Beispiel #12
0
        public static Composite CreatePriestShadowPvPPullAndCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.WaitForCast(true),
                       Spell.BuffSelf("Shadow Form"),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                       // Defensive stuff
                       Spell.BuffSelf("Power Word: Shield", ret => !StyxWoW.Me.HasAura("Weakened Soul")),
                       Spell.BuffSelf("Dispersion", ret => StyxWoW.Me.HealthPercent < 40),
                       Spell.BuffSelf("Psychic Scream", ret => Unit.NearbyUnfriendlyUnits.Count(u => u.DistanceSqr < 10 * 10) >= 1),

                       // Offensive
                       Spell.Cast("Shadow Word: Death", ret => StyxWoW.Me.CurrentTarget.HealthPercent <= 20),
                       // We don't want to dot targets below 40% hp to conserve mana. Mind Blast/Flay will kill them soon anyway
                       Spell.Cast("Mind Blast", ret => StyxWoW.Me.GetCurrentPower(WoWPowerType.ShadowOrbs) < 3),
                       Spell.Buff("Devouring Plague", true, ret => StyxWoW.Me.GetCurrentPower(WoWPowerType.ShadowOrbs) >= 3),
                       Spell.Buff("Shadow Word: Pain", true, ret => StyxWoW.Me.CurrentTarget.Elite || StyxWoW.Me.CurrentTarget.HealthPercent > 30),
                       Spell.Buff("Vampiric Touch", true, ret => StyxWoW.Me.CurrentTarget.Elite || StyxWoW.Me.CurrentTarget.HealthPercent > 30),
                       Spell.Cast("Mindbender"),
                       Spell.Cast("Power Infusion"),
                       Spell.Cast("Mind Blast"),
                       Spell.Cast("Shadowfiend", ret => StyxWoW.Me.ManaPercent <= SingularSettings.Instance.Priest.ShadowfiendMana && StyxWoW.Me.CurrentTarget.HealthPercent >= 60), // Mana check is for mana management. Don't mess with it
                       Spell.Cast("Mind Flay", ret => StyxWoW.Me.ManaPercent >= SingularSettings.Instance.Priest.MindFlayMana),
                       // Helpers.Common.CreateUseWand(ret => SingularSettings.Instance.Priest.UseWand), // we no longer have wands or shoot
                       Movement.CreateMoveToTargetBehavior(true, 35f)
                       ));
        }
Beispiel #13
0
        public static Composite CreateArcaneMagePvPPullAndCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Common.CreateStayAwayFromFrozenTargetsBehavior(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),

                       Spell.WaitForCast(true),

                       // Defensive stuff
                       new Decorator(
                           ret => StyxWoW.Me.ActiveAuras.ContainsKey("Ice Block"),
                           new ActionIdle()),
                       Spell.BuffSelf("Ice Block", ret => StyxWoW.Me.HealthPercent < 10 && !StyxWoW.Me.ActiveAuras.ContainsKey("Hypothermia")),
                       Spell.BuffSelf("Mana Shield", ret => StyxWoW.Me.HealthPercent <= 75),
                       Spell.BuffSelf("Frost Nova", ret => Unit.NearbyUnfriendlyUnits.Any(u => u.Distance <= 11 && !u.HasAura("Frost Nova"))),
                       Common.CreateMagePolymorphOnAddBehavior(),



                       Spell.BuffSelf("Mana Shield", ret => StyxWoW.Me.ManaPercent < 30),
                       Spell.BuffSelf("Evocation", ret => StyxWoW.Me.ManaPercent < 30 && (StyxWoW.Me.HasAura("Mana Shield") || !SpellManager.HasSpell("Mana Shield"))),
                       Spell.BuffSelf("Arcane Power"),
                       Spell.BuffSelf("Mirror Image"),
                       Spell.BuffSelf("Flame Orb"),
                       Spell.Cast("Arcane Missiles", ret => StyxWoW.Me.HasAura("Arcane Missiles!")),
                       Spell.Cast("Arcane Barrage", ret => StyxWoW.Me.GetAuraByName("Arcane Charge") != null && StyxWoW.Me.GetAuraByName("Arcane Charge").StackCount >= 4),
                       Spell.Cast("Frostfire Bolt", ret => !SpellManager.HasSpell("Arcane Blast")),
                       Spell.Cast("Arcane Blast"),
                       Movement.CreateMoveToTargetBehavior(true, 39f)

                       ));
        }
Beispiel #14
0
        public static Composite CreateArmsNormalPull()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateFaceTargetBehavior(),
                       Movement.CreateMoveToLosBehavior(),
                       Helpers.Common.CreateAutoAttack(false),

                       Spell.WaitForCast(),

                       //Dismount
                       new Decorator(ret => StyxWoW.Me.Mounted,
                                     Helpers.Common.CreateDismount("Pulling")),

                       //Shoot flying targets
                       new Decorator(
                           ret => StyxWoW.Me.CurrentTarget.IsFlying,
                           new PrioritySelector(
                               Spell.Cast("Heroic Throw"),
                               Spell.Cast("Throw"),
                               Movement.CreateMoveToTargetBehavior(true, 27f)
                               )),

                       //Buff up
                       Spell.Cast(Common.SelectedShout),

                       Common.CreateChargeBehavior(),

                       // Move to Melee
                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Beispiel #15
0
        public static Composite CreateFeralNormalPull()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),

                       new Decorator(
                           ret => StyxWoW.Me.Level < 20,
                           CreateFeralLevel1020Pull()),

                       new Decorator(
                           ret => StyxWoW.Me.Level < 46,
                           CreateFeralLevel2046Pull()),

                       Spell.BuffSelf("Cat Form"),
                       Spell.BuffSelf("Prowl", ret => StyxWoW.Me.CurrentTarget.DistanceSqr < 30 * 30),
                       Spell.Cast("Feral Charge (Cat)"),
                       Spell.Cast("Dash",
                                  ret => StyxWoW.Me.CurrentTarget.Distance > Spell.MeleeRange + 2f &&
                                  !StyxWoW.Me.HasAura("Stampeding Roar") &&
                                  (!SpellManager.HasSpell("Feral Charge (Cat)") ||
                                   SpellManager.Spells["Feral Charge (Cat)"].CooldownTimeLeft.TotalSeconds >= 3)),
                       Spell.BuffSelf("Stampeding Roar (Cat)",
                                      ret => StyxWoW.Me.CurrentTarget.Distance > Spell.MeleeRange + 2f &&
                                      !StyxWoW.Me.HasAura("Dash") &&
                                      (!SpellManager.HasSpell("Feral Charge (Cat)") ||
                                       SpellManager.Spells["Feral Charge (Cat)"].CooldownTimeLeft.TotalSeconds >= 3)),
                       Spell.Cast("Pounce"),
                       Spell.Cast("Shred", ret => StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Mangle (Cat)"),
                       Spell.Cast("Moonfire", ret => StyxWoW.Me.CurrentTarget.Distance2DSqr < 10 * 10 && Math.Abs(StyxWoW.Me.CurrentTarget.Z - StyxWoW.Me.Z) > 5),
                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Beispiel #16
0
        public static Composite CreateSubtletyRogueInstancePull()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.BuffSelf("Stealth"),
                       // Garrote if we can, SS is kinda meh as an opener.
                       Spell.Cast("Premeditation", ret => StyxWoW.Me.ComboPoints <= 3),
                       Spell.Cast("Shadowstep"),
                       Spell.Cast("Garrote", ret => StyxWoW.Me.CurrentTarget.MeIsBehind && !StyxWoW.Me.HasAura("Vanish")),
                       Spell.Cast("Ambush", ret => (!SpellManager.HasSpell("Garrote") || StyxWoW.Me.HasAura("Vanish")) && StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Cheap Shot", ret => !StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Hemorrhage", ret => !SpellManager.HasSpell("Cheap Shot") && !StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Sinister Strike", ret => !SpellManager.HasSpell("Hemorrhage")),

                       new Decorator(
                           ret => StyxWoW.Me.CurrentTarget.IsFlying || StyxWoW.Me.CurrentTarget.Distance2DSqr < 5 * 5 && Math.Abs(StyxWoW.Me.Z - StyxWoW.Me.CurrentTarget.Z) >= 5,
                           new PrioritySelector(
                               Spell.Cast("Throw", ret => Item.RangedIsType(WoWItemWeaponClass.Thrown)),
                               Spell.Cast("Shoot", ret => Item.RangedIsType(WoWItemWeaponClass.Bow) || Item.RangedIsType(WoWItemWeaponClass.Gun)),
                               Spell.Cast("Stealth", ret => StyxWoW.Me.HasAura("Stealth"))
                               )),

                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Beispiel #17
0
 public static Composite CreateHolyPaladinCombatBehavior()
 {
     return
         (new PrioritySelector(
              Safers.EnsureTarget(),
              Spell.Buff("Judgement",
                         ret => SpellManager.HasSpell("Judgement") &&
                         StyxWoW.Me.CurrentTarget.Distance <= SpellManager.Spells["Judgement"].MaxRange - 2 &&
                         StyxWoW.Me.CurrentTarget.InLineOfSpellSight &&
                         StyxWoW.Me.IsSafelyFacing(StyxWoW.Me.CurrentTarget)),
              new Decorator(
                  ret => Battlegrounds.IsInsideBattleground || (!StyxWoW.Me.IsInParty && !StyxWoW.Me.IsInRaid),
                  new PrioritySelector(
                      Movement.CreateMoveToLosBehavior(),
                      Movement.CreateFaceTargetBehavior(),
                      Helpers.Common.CreateAutoAttack(true),
                      Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),
                      Spell.Buff("Judgement"),
                      Spell.Cast("Hammer of Wrath"),
                      Spell.Cast("Holy Shock"),
                      Spell.Cast("Crusader Strike"),
                      Spell.Cast("Exorcism"),
                      Spell.Cast("Holy Wrath"),
                      Spell.Cast("Consecration"),
                      Movement.CreateMoveToTargetBehavior(true, 5f)
                      ))
              ));
 }
Beispiel #18
0
        public static Composite CreateAssaRogueNormalPull()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.BuffSelf("Sprint", ret => StyxWoW.Me.IsMoving && StyxWoW.Me.HasAura("Stealth")),
                       Spell.BuffSelf("Stealth"),
                       // Garrote if we can, SS is kinda meh as an opener.
                       Spell.Cast("Garrote", ret => StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Cheap Shot", ret => !SpellManager.HasSpell("Garrote") || !StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Ambush", ret => !SpellManager.HasSpell("Cheap Shot") && StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Mutilate", ret => !SpellManager.HasSpell("Cheap Shot") && !StyxWoW.Me.CurrentTarget.MeIsBehind),

                       new Decorator(
                           ret => StyxWoW.Me.CurrentTarget.IsFlying || StyxWoW.Me.CurrentTarget.Distance2DSqr < 5 * 5 && Math.Abs(StyxWoW.Me.Z - StyxWoW.Me.CurrentTarget.Z) >= 5,
                           new PrioritySelector(
                               Spell.Cast("Throw", ret => Item.RangedIsType(WoWItemWeaponClass.Thrown)),
                               Spell.Cast("Shoot", ret => Item.RangedIsType(WoWItemWeaponClass.Bow) || Item.RangedIsType(WoWItemWeaponClass.Gun)),
                               Spell.Cast("Stealth", ret => StyxWoW.Me.HasAura("Stealth"))
                               )),

                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Beispiel #19
0
        public static Composite CreateRogueSubtletyNormalPull()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.BuffSelf("Stealth"),
                       // Garrote if we can, SS is kinda meh as an opener.
                       Spell.Cast("Premeditation"),
                       Spell.Cast("Shadowstep"),
                       Spell.Cast("Garrote", ret => StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Ambush", ret => !SpellManager.HasSpell("Garrote") && StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Cheap Shot", ret => !StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Hemorrhage", ret => !SpellManager.HasSpell("Cheap Shot") && !StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Sinister Strike", ret => !SpellManager.HasSpell("Hemorrhage")),

                       new Decorator(
                           ret => StyxWoW.Me.CurrentTarget.IsFlying || StyxWoW.Me.CurrentTarget.Distance2DSqr < 5 * 5 && Math.Abs(StyxWoW.Me.Z - StyxWoW.Me.CurrentTarget.Z) >= 5,
                           new PrioritySelector(
                               Spell.Cast("Deadly Throw", ret => SpellManager.HasSpell("Deadly Throw")),
                               Spell.Cast("Throw"),
                               Spell.Cast("Stealth", ret => StyxWoW.Me.HasAura("Stealth"))
                               )),

                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Beispiel #20
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)
                       ));
        }
Beispiel #21
0
 public static Composite CreateLowbieWarriorCombat()
 {
     return(new PrioritySelector(
                // Ensure Target
                Safers.EnsureTarget(),
                // LOS Check
                Movement.CreateMoveToLosBehavior(),
                // face target
                Movement.CreateFaceTargetBehavior(),
                // Auto Attack
                Common.CreateAutoAttack(false),
                Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),
                // Heal
                Spell.Cast("Victory Rush"),
                //rend
                Spell.Buff("Rend"),
                // AOE
                new Decorator(
                    ret => Clusters.GetClusterCount(StyxWoW.Me, Unit.NearbyUnfriendlyUnits, ClusterType.Radius, 6f) >= 2,
                    new PrioritySelector(
                        Spell.Cast("Victory Rush", ret => StyxWoW.Me.HealthPercent < 80),
                        Spell.Cast("Thunder Clap"),
                        Spell.Cast("Strike"))),
                // DPS
                Spell.Cast("Strike"),
                Spell.Cast("Thunder Clap", ret => StyxWoW.Me.RagePercent > 50),
                //move to melee
                Movement.CreateMoveToTargetBehavior(true, 5f)
                ));
 }
Beispiel #22
0
        public static Composite CreateEnhancementShamanNormalPull()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.WaitForCast(true),
                       Spell.Cast("Lightning Shield", ret => StyxWoW.Me, ret => !StyxWoW.Me.HasAura("Lightning Shield", 2)),

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

                       Common.CreateAutoAttack(true),
                       new Decorator(
                           ret => StyxWoW.Me.CurrentTarget.DistanceSqr < 20 * 20,
                           Totems.CreateSetTotems()),
                       Spell.Cast("Earth Shock"),
                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
        public static Composite CreateAssaRoguePull()
        {
            return(new PrioritySelector(
                       Common.CreateRogueDismount("Pulling"),
                       Common.CreateRoguePullBuffs(), // needed because some Bots not calling this behavior
                       Safers.EnsureTarget(),
                       Common.CreateRoguePullSkipNonPickPocketableMob(),
                       Common.CreateRogueControlNearbyEnemyBehavior(),
                       Common.CreateRogueMoveBehindTarget(),
                       Common.RogueEnsureReadyToAttackFromMelee(),
                       Spell.WaitForCastOrChannel(),

                       new Decorator(
                           ret => !Spell.IsGlobalCooldown() && Me.GotTarget() && Me.IsSafelyFacing(Me.CurrentTarget),
                           new PrioritySelector(

                               new Action(ret => { Me.CurrentTarget.TimeToDeath(); return RunStatus.Failure; }),
                               CreateAssaDiagnosticOutputBehavior("Pull"),

                               Common.CreateRoguePullPickPocketButDontAttack(),

                               Common.CreateRogueOpenerBehavior(),
                               Common.CreatePullMobMovingAwayFromMe(),
                               Common.CreateAttackFlyingOrUnreachableMobs(),

                               Spell.Cast("Mutilate", req => Common.HasTwoDaggers),

                               AssaCastSinisterStrike()
                               )
                           )
                       ));
        }
Beispiel #24
0
        public static Composite CreateMistweaverMonkCombatBehavior()
        {
            return(new PrioritySelector(
                       CreateMistweaverMonkHealing(false)
#if NOTYET
                       ,
                       new PrioritySelector(
                           Safers.EnsureTarget(),
                           Movement.CreateMoveToLosBehavior(),
                           Movement.CreateFaceTargetBehavior(),
                           Helpers.Common.CreateAutoAttack(true),

                           Common.CastLikeMonk("Blackout Kick", ret => Me.CurrentChi >= 2 && (!Me.HasAura("Serpent's Zeal", 2) || Me.GetAuraTimeLeft("Serpent's Zeal", true).TotalSeconds < 5)),
                           Common.CastLikeMonk("Tiger Palm", ret => Me.CurrentChi >= 1 && (!Me.HasAura("Vital Mists", 5) || Me.GetAuraTimeLeft("Vital Mists", true).TotalSeconds < 5)),
                           Common.CastLikeMonk("Expel Harm", ret => Me, ret => Me.HealthPercent < 90 && Me.CurrentChi < Me.MaxChi),
                           Common.CastLikeMonk("Jab", ret => Me.CurrentChi < Me.MaxChi),
                           new Decorator(ret => !Me.IsCasting,
                                         new PrioritySelector(
                                             Common.CastLikeMonk("Roll", ret => Me.CurrentTarget.Distance >= 10 && Me.CurrentTarget.Distance <= 25),
                                             Movement.CreateMoveToMeleeBehavior(true)
                                             )
                                         )
                           )
#endif
                       ));
        }
Beispiel #25
0
        public static Composite CreateShadowPriestPvPPullAndCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Spell.WaitForCast(true),
                       Spell.BuffSelf("Shadow Form"),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                       // Defensive stuff
                       Spell.BuffSelf("Power Word: Shield", ret => !StyxWoW.Me.HasAura("Weakened Soul")),
                       Spell.BuffSelf("Dispersion", ret => StyxWoW.Me.HealthPercent < 40),
                       Spell.BuffSelf("Psychic Scream", ret => Unit.NearbyUnfriendlyUnits.Count(u => u.DistanceSqr < 10 * 10) >= 1),

                       // Offensive
                       Spell.Buff("Shadow Word: Pain", true),
                       Spell.Cast("Mind Blast", ret => StyxWoW.Me.HasAura("Shadow Orb")),
                       Spell.Buff("Vampiric Touch", true),
                       Spell.Buff("Devouring Plague", true),
                       Spell.Cast("Mind Blast"),
                       Spell.Cast("Shadow Word: Death", ret => StyxWoW.Me.CurrentTarget.HealthPercent <= 25),
                       Spell.BuffSelf("Archangel"),
                       Spell.Cast("Shadowfiend"),
                       Spell.Cast("Mind Flay"),
                       Movement.CreateMoveToTargetBehavior(true, 35f)
                       ));
        }
Beispiel #26
0
        public static Composite CreateRogueSubtletyNormalPull()
        {
            return(new PrioritySelector(
                       Common.CreateRogueDismount("Pulling"),
                       Common.CreateRoguePullBuffs(), // needed because some Bots not calling this behavior
                       Safers.EnsureTarget(),
                       Common.CreateRoguePullSkipNonPickPocketableMob(),
                       Common.CreateRogueControlNearbyEnemyBehavior(),
                       Common.CreateRogueMoveBehindTarget(),
                       Common.RogueEnsureReadyToAttackFromMelee(),
                       Spell.WaitForCastOrChannel(),

                       new Decorator(
                           ret => !Spell.IsGlobalCooldown() && Me.GotTarget() && Me.IsSafelyFacing(Me.CurrentTarget),
                           new PrioritySelector(

                               CreateSubteltyDiagnosticOutputBehavior("Pull"),

                               Common.CreateRoguePullPickPocketButDontAttack(),

                               Common.CreateRogueOpenerBehavior(),
                               Common.CreatePullMobMovingAwayFromMe(),
                               Common.CreateAttackFlyingOrUnreachableMobs(),

                               // ok, everything else failed so just hit him!!!!
                               Spell.HandleOffGCD(Spell.Buff("Premeditation", req => Common.AreStealthAbilitiesAvailable && Me.ComboPoints < 4 && Me.CurrentTarget.IsWithinMeleeRange))
                               )
                           )
                       ));
        }
Beispiel #27
0
 public static Composite CreateLowbieDruidCombat()
 {
     return(new PrioritySelector(
                Safers.EnsureTarget(),
                Movement.CreateMoveToLosBehavior(),
                Movement.CreateFaceTargetBehavior(),
                // Make sure we're in cat form first, period.
                Spell.BuffSelf("Cat Form"),
                Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),
                //Healing if needed in combat
                Spell.BuffSelf("Rejuvenation", ret => StyxWoW.Me.HealthPercent <= 60),
                Helpers.Common.CreateAutoAttack(true),
                new Decorator(
                    ret => StyxWoW.Me.HasAura("Cat Form"),
                    new PrioritySelector(
                        Spell.Buff("Rake", true),
                        Spell.Cast("Ferocious Bite",
                                   ret => StyxWoW.Me.ComboPoints > 4 ||
                                   StyxWoW.Me.ComboPoints > 1 && StyxWoW.Me.CurrentTarget.HealthPercent < 40),
                        Spell.Cast("Mangle"),
                        Movement.CreateMoveToMeleeBehavior(true))),
                //Pre Cat spells
                Spell.Buff("Moonfire"),
                Spell.Cast("Wrath"),
                Movement.CreateMoveToTargetBehavior(true, 30f)
                ));
 }
Beispiel #28
0
 public static Composite CreateFeralPvPPull()
 {
     return(new PrioritySelector(
                Safers.EnsureTarget(),
                Spell.BuffSelf("Cat Form"),
                Spell.BuffSelf("Prowl"),
                Movement.CreateMoveToLosBehavior(),
                Movement.CreateFaceTargetBehavior(),
                Spell.WaitForCast(),
                Spell.Cast("Feral Charge (Cat)"),
                Spell.Cast("Dash",
                           ret => StyxWoW.Me.CurrentTarget.Distance > Spell.MeleeRange + 2f &&
                           !StyxWoW.Me.HasAura("Stampeding Roar") &&
                           (!SpellManager.HasSpell("Feral Charge (Cat)") ||
                            SpellManager.Spells["Feral Charge (Cat)"].CooldownTimeLeft.TotalSeconds >= 3)),
                Spell.BuffSelf("Stampeding Roar (Cat)",
                               ret => StyxWoW.Me.CurrentTarget.Distance > Spell.MeleeRange + 2f &&
                               !StyxWoW.Me.HasAura("Dash") &&
                               (!SpellManager.HasSpell("Feral Charge (Cat)") ||
                                SpellManager.Spells["Feral Charge (Cat)"].CooldownTimeLeft.TotalSeconds >= 3)),
                //Spell.Cast("Ravage", ret => StyxWoW.Me.CurrentTarget.IsSitting),
                Spell.Cast("Pounce", ret => !StyxWoW.Me.CurrentTarget.IsStunned()),
                Spell.Cast("Ravage"),
                Movement.CreateMoveToMeleeBehavior(true)
                ));
 }
Beispiel #29
0
        public static Composite CreateFeralNormalCombat()
        {
            return(new PrioritySelector(
                       Safers.EnsureTarget(),
                       Common.CreateNonRestoHeals(),
                       Movement.CreateMoveToLosBehavior(),
                       Movement.CreateFaceTargetBehavior(),
                       Helpers.Common.CreateAutoAttack(true),
                       Helpers.Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                       new Decorator(
                           ret => Unit.UnfriendlyUnitsNearTarget(8f).Count() >= 3,
                           new PrioritySelector(
                               Spell.Cast("Swipe (Cat)"),
                               Spell.Cast("Mangle (Cat)")
                               )),

                       new Decorator(
                           ret => StyxWoW.Me.Level < 86,
                           CreateFeralCombat()),

                       Movement.CreateMoveBehindTargetBehavior(),
                       Spell.Cast("Shred", ret => StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Spell.Cast("Mangle (Cat)", ret => !StyxWoW.Me.CurrentTarget.MeIsBehind),
                       Movement.CreateMoveToMeleeBehavior(true)
                       ));
        }
Beispiel #30
0
        public static Composite CreateRestoShamanCombatBehavior()
        {
            return
                (new PrioritySelector(
                     new Decorator(
                         ret => Unit.NearbyFriendlyPlayers.Count(u => u.IsInMyPartyOrRaid) == 0,
                         new PrioritySelector(
                             Safers.EnsureTarget(),
                             Movement.CreateMoveToLosBehavior(),
                             Movement.CreateFaceTargetBehavior(),
                             Common.CreateInterruptSpellCast(ret => StyxWoW.Me.CurrentTarget),

                             Spell.BuffSelf("Fire Elemental Totem",
                                            ret => (StyxWoW.Me.CurrentTarget.Elite || Unit.NearbyUnfriendlyUnits.Count(u => u.IsTargetingMeOrPet) >= 3) &&
                                            !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.Cast("Earth Shock"),
                             Spell.Cast("Lightning Bolt"),
                             Movement.CreateMoveToTargetBehavior(true, 35f)
                             ))
                     ));
        }