예제 #1
0
 public Composite CreateElementalShamanPull()
 {
     return(new PrioritySelector(
                CreateEnsureTarget(),
                CreateMoveToAndFace(40, ret => Me.CurrentTarget),
                CreateWaitForCast(true),
                //Totems
                new Decorator(
                    ret => TotemManager.TotemsInRange == 0 && SpellManager.HasSpell("Call of the Elements"),
                    new Sequence(
                        new Action(ret => TotemManager.SetupTotemBar()),
                        new Action(ret => TotemManager.CallTotems()))),
                CreateSpellCast("Lightning Bolt")
                ));
 }
예제 #2
0
        public Composite CreateElementalShamanCombat()
        {
            return(new PrioritySelector(
                       CreateEnsureTarget(),
                       CreateMoveToAndFace(39, ret => Me.CurrentTarget),
                       CreateWaitForCast(true),

                       //Healing Basic
                       CreateSpellCast("Healing Surge", ret => (Me.HealthPercent <= SingularSettings.Instance.Shaman.Elemental_HealingSurge_Health)),
                       //Interupt spell casters
                       CreateSpellCast("Wind Shear", ret => Me.CurrentTarget.IsCasting),

                       //For low levels we are avoiding this.
                       new Decorator(
                           ret => TotemManager.TotemsInRange == 0 && SpellManager.HasSpell("Call of the Elements"),
                           new Sequence(
                               new Action(ret => TotemManager.SetupTotemBar()),
                               new Action(ret => TotemManager.CallTotems()))),

                       // add check for reinforcements ( elem totems )

                       // clip the debuff if less than 2 secs remaining (don't chance a LvB with no FS dot)
                       //  .. note:  flame shock doesn't stack, so be sure to pass 0 for stack test
                       CreateSpellBuff("Flame Shock", ret => !HasMyAura("Flame Shock", Me.CurrentTarget, TimeSpan.FromSeconds(2), 0)),

                       // unleash elements buff is lower dps than additional procs by lightning bolt
                       // .. it is best used in movement fights as an additional instant
                       // CreateSpellCast("Unleash Elements"),    // if we have this, make sure its before Flame Shock

                       CreateSpellCast("Elemental Mastery"),
                       CreateSpellCast("Lava Burst"),

                       // atleast (6 lightning shield stacks or no Fulmination talent) and FS has > 5 secs left before casting
                       //  .. note:  flame shock doesn't stack, so be sure to pass 0 for stack test
                       CreateSpellCast("Earth Shock", ret =>
                                       (HasAuraStacks("Lightning Shield", 7) || !HaveTalentFulmination) && HasMyAura("Flame Shock", Me.CurrentTarget, TimeSpan.FromSeconds(5), 0)),

                       CreateSpellCast("Chain Lightning", ret => WillChainLightningHop()),

                       CreateSpellCast("Lightning Bolt")
                       ));
        }
예제 #3
0
        private Composite CreateRestoShamanHealOnlyBehavior(bool selfOnly)
        {
            NeedHealTargeting = true;

            return(new
                   PrioritySelector(
                       CreateWaitForCastWithCancel(SingularSettings.Instance.IgnoreHealTargetsAboveHealth),

                       new Decorator(
                           ret => SpellManager.HasSpell("Call of the Elements") &&
                           RaFHelper.Leader != null &&
                           TotemManager.TotemsInRangeOf(RaFHelper.Leader) == 0 &&
                           (Me.Combat || RaFHelper.Leader.Combat),
                           new Sequence(
                               new DecoratorContinue(ret => (Me.Totems.Count(t => t.Unit != null) != 0),
                                                     new Action(ret => TotemManager.RecallTotems())),
                               new Action(ret => TotemManager.SetupTotemBar()),
                               new Action(ret => TotemManager.CallTotems()))),

                       new Decorator(
                           ret => HealTargeting.Instance.FirstUnit != null,
                           new PrioritySelector(
                               ctx => selfOnly ? Me : HealTargeting.Instance.FirstUnit,

                               CreateSpellCast(
                                   "Earth Shield",
                                   ret => RaFHelper.Leader != null && (WoWUnit)ret == RaFHelper.Leader &&
                                   (!RaFHelper.Leader.HasAura("Earth Shield") || RaFHelper.Leader.Auras["Earth Shield"].StackCount < (Me.Combat ? 1 : 4)),
                                   ret => RaFHelper.Leader),

                               CreateSpellCast(
                                   "Healing Surge",
                                   ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Shaman.RAF_HealingSurge_Health,
                                   ret => (WoWUnit)ret),

                               CreateSpellCast(
                                   "Riptide",
                                   ret => !HasAuraStacks("Tidal Waves", 1, Me),
                                   ret => (WoWUnit)ret),

                               new Decorator(ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Shaman.RAF_GreaterHealingWave_Health,
                                             new Sequence(
                                                 CreateSpellCast(
                                                     "Unleash Elements",
                                                     ret => true,
                                                     ret => (WoWUnit)ret),
                                                 CreateSpellCast(
                                                     "Greater Healing Wave",
                                                     ret => true,
                                                     ret => (WoWUnit)ret)
                                                 )
                                             ),

                               CreateSpellCast(
                                   "Chain Heal",
                                   ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Shaman.RAF_ChainHeal_Health && WillChainHealHop((WoWUnit)ret),
                                   ret => (WoWUnit)ret),

                               CreateSpellCast(
                                   "Riptide",
                                   ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Shaman.RAF_Riptide_Health,
                                   ret => (WoWUnit)ret),

                               CreateSpellCast(
                                   "Healing Wave",
                                   ret => ((WoWUnit)ret).HealthPercent <= SingularSettings.Instance.Shaman.RAF_HealingWave_Health,
                                   ret => (WoWUnit)ret)
                               )
                           )
                       ));
        }