public static Composite BarbarianCombat()
{
return
new PrioritySelector(ctx => CombatTargeting.Instance.FirstNpc,
// Buff attack rate!
Spell.Buff(SNOPower.Barbarian_WrathOfTheBerserker,
extra => (Clusters.GetClusterCount(ZetaDia.Me, CombatTargeting.Instance.LastObjects, ClusterType.Radius, 12f) >= 6 ||
ZetaDia.Me.IsFeared || ZetaDia.Me.IsStunned || ZetaDia.Me.IsFrozen || ZetaDia.Me.IsBlind || ZetaDia.Me.IsRooted)
),
Common.CreateWaitWhileIncapacitated(),
Common.CreateWaitForAttack(),
BarbarianBuffs(),
Common.CreateUsePotion(),
// Defence low hp or many attackers.
Spell.Buff(SNOPower.Barbarian_IgnorePain,
require => ZetaDia.Me.HitpointsCurrentPct <= 0.25
),
// Pull phase.
new Decorator(ctx => ctx != null && ((DiaUnit)ctx).Distance > 15f || Clusters.GetClusterCount(CombatTargeting.Instance.FirstNpc, CombatTargeting.Instance.LastObjects, ClusterType.Radius, 12f) >= 3,
new PrioritySelector(
Spell.CastOnUnit(SNOPower.Barbarian_FuriousCharge, 1, ctx => CombatTargeting.Instance.FirstNpc.ACDGuid),
Spell.CastAtLocation(SNOPower.Barbarian_Leap, ctx => ((DiaUnit)ctx).Position),
Spell.CastOnUnit(SNOPower.Barbarian_AncientSpear, 1, ctx => CombatTargeting.Instance.FirstNpc.ACDGuid)
)
),
// Revenge.
Spell.CastAOESpell(SNOPower.Barbarian_Revenge,
require => Zeta.CommonBot.PowerManager.CanCast(SNOPower.Barbarian_Revenge)
),
Spell.Buff(SNOPower.Barbarian_BattleRage,
require => !ZetaDia.Me.HasBuff(SNOPower.Barbarian_BattleRage)
),
// AOE
Spell.CastAOESpell(SNOPower.Barbarian_Earthquake,
require => ZetaDia.Me.HitpointsCurrentPct <= 0.25 || Clusters.GetClusterCount(ZetaDia.Me, CombatTargeting.Instance.LastObjects, ClusterType.Radius, 12f) >= 3
),
Spell.CastAOESpell(SNOPower.Barbarian_GroundStomp,
extra => Clusters.GetClusterCount(ZetaDia.Me, CombatTargeting.Instance.LastObjects, ClusterType.Radius, 12f) >= 2
),
Spell.CastAOESpell(SNOPower.Barbarian_Overpower,
require => Clusters.GetClusterCount(ZetaDia.Me, CombatTargeting.Instance.LastObjects, ClusterType.Radius, 12f) >= 2
),
// Threatning shout.
Spell.CastAOESpell(SNOPower.Barbarian_ThreateningShout,
extra => Clusters.GetClusterCount(ZetaDia.Me, CombatTargeting.Instance.LastObjects, ClusterType.Radius, 25f) >= 2
),
// Fury spenders.
Spell.CastAtLocation(SNOPower.Barbarian_HammerOfTheAncients, ctx => ((DiaUnit)ctx).Position),
Spell.CastAtLocation(SNOPower.Barbarian_Rend, ctx => ((DiaUnit)ctx).Position),
Spell.CastAtLocation(SNOPower.Barbarian_SeismicSlam, ctx => ((DiaUnit)ctx).Position),
Spell.CastOnUnit(SNOPower.Barbarian_WeaponThrow, 1, ctx => CombatTargeting.Instance.FirstNpc.ACDGuid),
// Fury Generators
Spell.CastOnUnit(SNOPower.Barbarian_Cleave, 1, ctx => CombatTargeting.Instance.FirstNpc.ACDGuid),
Spell.CastOnUnit(SNOPower.Barbarian_Bash, 1, ctx => CombatTargeting.Instance.FirstNpc.ACDGuid),
Spell.CastOnUnit(SNOPower.Barbarian_Frenzy, 1, ctx => CombatTargeting.Instance.FirstNpc.ACDGuid)
);
}