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