Ejemplo n.º 1
0
 public Composite CreateDruidBuffComposite()
 {
     return(new PrioritySelector(
                CreateSpellCast(
                    "Mark of the Wild",
                    ret => NearbyFriendlyPlayers.Any(u => !u.Dead && !u.IsGhost && u.IsInMyPartyOrRaid && CanCastMotWOn(u)),
                    ret => Me)
                // TODO: Have it buff MotW when nearby party/raid members are missing the buff.
                ));
 }
Ejemplo n.º 2
0
 public Composite CreatePriestPreCombatBuffs()
 {
     return new PrioritySelector(
         CreateSpellBuffOnSelf("Power Word: Fortitude", ret => NearbyFriendlyPlayers.Any(u => !u.Dead && !u.IsGhost && (u.IsInMyPartyOrRaid || u.IsMe) && CanCastFortitudeOn(u))),
         CreateSpellBuffOnSelf("Shadow Protection", ret => SingularSettings.Instance.Priest.UseShadowProtection && NearbyFriendlyPlayers.Any(u => !u.Dead && !u.IsGhost && (u.IsInMyPartyOrRaid || u.IsMe) && !HasAuraStacks("Shadow Protection", 0))),
         CreateSpellBuffOnSelf("Inner Fire", ret => SingularSettings.Instance.Priest.UseInnerFire),
         CreateSpellBuffOnSelf("Inner Will", ret => !SingularSettings.Instance.Priest.UseInnerFire),
         CreateSpellBuffOnSelf("Fear Ward", ret => SingularSettings.Instance.Priest.UseFearWard),
         CreateSpellBuffOnSelf("Shadowform"),
         CreateSpellBuffOnSelf("Vampiric Embrace")
         );
 }
Ejemplo n.º 3
0
        private Composite CreateDiscHealOnlyBehavior(bool selfOnly)
        {
            // Atonement - Tab 1  index 10 - 1/2 pts
            NeedHealTargeting = true;
            return(new
                   Decorator(
                       ret => HealTargeting.Instance.FirstUnit != null,
                       new PrioritySelector(
                           ctx => selfOnly ? Me : HealTargeting.Instance.FirstUnit,
                           CreateWaitForCast(),
                           // Ensure we're in range of the unit to heal, and it's in LOS.
                           //CreateMoveToAndFace(35f, ret => (WoWUnit)ret),
                           //CreateSpellBuff("Renew", ret => HealTargeting.Instance.TargetList.FirstOrDefault(u => !u.HasAura("Renew") && u.HealthPercent < 90) != null, ret => HealTargeting.Instance.TargetList.FirstOrDefault(u => !u.HasAura("Renew") && u.HealthPercent < 90)),
                           CreateSpellBuff(
                               "Power Word: Shield", ret => !((WoWUnit)ret).HasAura("Weakened Soul") && ((WoWUnit)ret).Combat, ret => (WoWUnit)ret),
                           new Decorator(
                               ret =>
                               NearbyFriendlyPlayers.Count(p => !p.Dead && p.HealthPercent < SingularSettings.Instance.Priest.PrayerOfHealing) >
                               SingularSettings.Instance.Priest.PrayerOfHealingCount &&
                               (SpellManager.CanCast("Prayer of Healing") || SpellManager.CanCast("Divine Hymn")),
                               new Sequence(
                                   CreateSpellCast("Archangel"),
                                   // This will skip over DH if we can't cast it.
                                   // If we can, the sequence fails, since PoH can't be cast (as we're still casting at this point)
                                   new DecoratorContinue(
                                       ret => SpellManager.CanCast("Divine Hymn"),
                                       CreateSpellCast("Divine Hymn")),
                                   CreateSpellCast("Prayer of Healing"))),
                           CreateSpellBuff(
                               "Pain Supression", ret => ((WoWUnit)ret).HealthPercent < SingularSettings.Instance.Priest.PainSuppression, ret => (WoWUnit)ret),
                           CreateSpellBuff("Penance", ret => ((WoWUnit)ret).HealthPercent < SingularSettings.Instance.Priest.Penance, ret => (WoWUnit)ret),
                           CreateSpellCast(
                               "Flash Heal", ret => ((WoWUnit)ret).HealthPercent < SingularSettings.Instance.Priest.FlashHeal, ret => (WoWUnit)ret),
                           CreateSpellCast(
                               "Binding Heal",
                               ret =>
                               (WoWUnit)ret != Me && ((WoWUnit)ret).HealthPercent < SingularSettings.Instance.Priest.BindingHealThem &&
                               Me.HealthPercent < SingularSettings.Instance.Priest.BindingHealMe,
                               ret => (WoWUnit)ret),
                           CreateSpellCast(
                               "Greater Heal", ret => ((WoWUnit)ret).HealthPercent < SingularSettings.Instance.Priest.GreaterHeal, ret => (WoWUnit)ret),
                           CreateSpellCast("Heal", ret => ((WoWUnit)ret).HealthPercent < SingularSettings.Instance.Priest.Heal, ret => (WoWUnit)ret),
                           CreateSpellBuff("Renew", ret => ((WoWUnit)ret).HealthPercent < SingularSettings.Instance.Priest.Renew, ret => (WoWUnit)ret),
                           CreateSpellBuff("Prayer of Mending", ret => ((WoWUnit)ret).HealthPercent < 90, ret => (WoWUnit)ret)

                           // Divine Hymn
                           // Desperate Prayer
                           // Prayer of Mending
                           // Prayer of Healing
                           // Power Word: Barrier
                           // TODO: Add smite healing. Only if Atonement is talented. (Its useless otherwise)
                           )));
        }
Ejemplo n.º 4
0
        private Composite CreatePaladinHealBehavior(bool selfOnly)
        {
            NeedHealTargeting = true;

            return
                (new PrioritySelector(
                     CreateWaitForCastWithCancel(),
                     new Decorator(
                         ret => HealTargeting.Instance.FirstUnit != null,
                         new PrioritySelector(
                             ctx => selfOnly ? Me : HealTargeting.Instance.FirstUnit,
                             CreateSpellBuff(
                                 "Beacon of Light",
                                 ret => (Me.IsInParty || Me.IsInRaid) && RaFHelper.Leader != null && (WoWUnit)ret == RaFHelper.Leader,
                                 ret => (WoWUnit)ret),
                             CreateSpellCast(
                                 "Lay on Hands",
                                 ret => Me.Combat && !((WoWUnit)ret).HasAura("Forbearance") &&
                                 ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Paladin.LayOnHandsHealthHoly,
                                 ret => (WoWUnit)ret),
                             CreateSpellCast(
                                 "Light of Dawn",
                                 ret => Me.CurrentHolyPower == 3 &&
                                 NearbyFriendlyPlayers.Count(p =>
                                                             p.HealthPercent <= SingularSettings.Instance.Paladin.LightOfDawnHealth && p != Me &&
                                                             p.Distance < 30 && Me.IsSafelyFacing(p.Location)) >= SingularSettings.Instance.Paladin.LightOfDawnCount,
                                 ret => (WoWUnit)ret),
                             CreateSpellCast(
                                 "Word of Glory",
                                 ret => Me.CurrentHolyPower == 3 && ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Paladin.WordOfGloryHealth,
                                 ret => (WoWUnit)ret),
                             CreateSpellCast(
                                 "Holy Shock",
                                 ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Paladin.HolyLightHealth,
                                 ret => (WoWUnit)ret),
                             CreateSpellCast(
                                 "Flash of Light",
                                 ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Paladin.FlashOfLightHealth,
                                 ret => (WoWUnit)ret),
                             CreateSpellCast(
                                 "Divine Light",
                                 ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Paladin.DivineLightHealth,
                                 ret => (WoWUnit)ret),
                             CreateSpellCast(
                                 "Holy Light",
                                 ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Paladin.HolyLightHealth,
                                 ret => (WoWUnit)ret)
                             ))));
        }
Ejemplo n.º 5
0
 public Composite CreateRestoDruidCombatBuffs()
 {
     return
         (new PrioritySelector(
              CreateSpellBuffOnSelf(
                  "Tree of Life",
                  ret => Me.IsInParty && NearbyFriendlyPlayers.Count(
                      p => p.IsAlive && p.HealthPercent <= SingularSettings.Instance.Druid.TreeOfLifeHealth) >=
                  SingularSettings.Instance.Druid.TreeOfLifeCount),
              CreateSpellBuffOnSelf(
                  "Innervate",
                  ret => Me.ManaPercent <= SingularSettings.Instance.Druid.InnervateMana),
              CreateSpellBuffOnSelf(
                  "Barkskin",
                  ret => Me.HealthPercent <= SingularSettings.Instance.Druid.Barkskin)
              ));
 }
Ejemplo n.º 6
0
        private Composite CreateRestoDruidHealOnlyBehavior(bool selfOnly)
        {
            NeedHealTargeting = true;
            const uint MAPLE_SEED_ID = 17034;

            return(new
                   Decorator(
                       ret => HealTargeting.Instance.FirstUnit != null,
                       new PrioritySelector(
                           ctx => selfOnly ? Me : HealTargeting.Instance.FirstUnit,
                           CreateWaitForCast(),
                           // Ensure we're in range of the unit to heal, and it's in LOS.
                           //CreateMoveToAndFace(35f, ret => (WoWUnit)ret),
                           //Cast Lifebloom on tank if
                           //1- Tank doesn't have lifebloom
                           //2- Tank has less then 3 stacks of lifebloom
                           //3- Tank has 3 stacks of lifebloom but it will expire in 3 seconds
                           CreateSpellCast(
                               "Lifebloom",
                               ret =>
                               Me.Combat &&
                               // Keep 3 stacks up on the tank/leader at all times.
                               // If we're in ToL form, we can do rolling LBs for everyone. So ignore the fact that its the leader or not.
                               // LB is cheap, and VERY powerful in ToL form since you can spam it on the entire raid, for a cheap HoT and quite good 'bloom'
                               ((RaFHelper.Leader != null && (WoWUnit)ret == RaFHelper.Leader) || Me.Shapeshift == ShapeshiftForm.TreeOfLife) &&
                               ((WoWUnit)ret).HealthPercent > 60 &&
                               (!((WoWUnit)ret).HasAura("Lifebloom") || ((WoWUnit)ret).Auras["Lifebloom"].StackCount < 3 ||
                                ((WoWUnit)ret).Auras["Lifebloom"].TimeLeft <= TimeSpan.FromSeconds(3)),
                               ret => (WoWUnit)ret),
                           //Cast rebirth if the tank is dead. Check for Unburdened Rebirth glyph or Maple seed reagent
                           CreateSpellCast(
                               "Rebirth",
                               ret => Me.Combat && RaFHelper.Leader != null && (WoWUnit)ret == RaFHelper.Leader &&
                               ((WoWUnit)ret).Dead && (TalentManager.HasGlyph("Unburdened Rebirth") || Me.BagItems.Any(i => i.Entry == MAPLE_SEED_ID)),
                               ret => (WoWUnit)ret),
                           CreateSpellCast(
                               "Tranquility",
                               ret => Me.Combat && Me.IsInParty && NearbyFriendlyPlayers.Count(
                                   p =>
                                   p.IsAlive && p.HealthPercent <= SingularSettings.Instance.Druid.TranquilityHealth && p.Distance <= 30) >=
                               SingularSettings.Instance.Druid.TranquilityCount),
                           //Use Innervate on party members if we have Glyph of Innervate
                           CreateSpellBuff(
                               "Innervate",
                               ret =>
                               TalentManager.HasGlyph("Innervate") && Me.Combat && (WoWUnit)ret != Me &&
                               Me.ManaPercent <= SingularSettings.Instance.Druid.InnervateMana &&
                               ((WoWUnit)ret).PowerType == WoWPowerType.Mana && ((WoWUnit)ret).ManaPercent <= SingularSettings.Instance.Druid.InnervateMana,
                               ret => (WoWUnit)ret),
                           CreateSpellCast(
                               "Swiftmend",
                               ret => Me.Combat && ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Druid.Swiftmend &&
                               (((WoWUnit)ret).HasAura("Rejuvenation") || ((WoWUnit)ret).HasAura("Regrowth")),
                               ret => (WoWUnit)ret),
                           CreateSpellCast(
                               "Wild Growth",
                               ret => Me.IsInParty && NearbyFriendlyPlayers.Count(
                                   p => p.IsAlive && p.HealthPercent <= SingularSettings.Instance.Druid.WildGrowthHealth &&
                                   p.Location.Distance(((WoWUnit)ret).Location) <= 30) >= SingularSettings.Instance.Druid.WildGrowthCount,
                               ret => (WoWUnit)ret),
                           CreateSpellBuff(
                               "Regrowth",
                               ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Druid.Regrowth,
                               ret => (WoWUnit)ret),
                           CreateSpellCast(
                               "Healing Touch",
                               ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Druid.HealingTouch,
                               ret => (WoWUnit)ret),
                           CreateSpellCast(
                               "Nourish",
                               ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Druid.Nourish &&
                               (((WoWUnit)ret).HasAura("Rejuvenation") || ((WoWUnit)ret).HasAura("Regrowth") ||
                                ((WoWUnit)ret).HasAura("Lifebloom") || ((WoWUnit)ret).HasAura("Wild Growth")),
                               ret => (WoWUnit)ret),
                           CreateSpellBuff(
                               "Rejuvenation",
                               ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Druid.Rejuvenation,
                               ret => (WoWUnit)ret)
                           )));
        }