// Darkness Assassin v1.0 - Cystacae
// Known Bugs: For some reason it is glitchy on Force Lightning randomly and will lock rotation until a Force Lightning is cast. I need assistance in debugging. Stealth to Maul maybe glitchy also as it is for other specs.
using System;
using System.Linq;
using Buddy.BehaviorTree;
using Buddy.Common;
using Buddy.CommonBot;
using Buddy.Swtor;
using WingIt.Dynamics;
using Action = Buddy.BehaviorTree.Action;
namespace WingIt.Routines
{
public static class AssassinDarkness
{
[Behavior(BehaviorType.Pull)]
[Class(CharacterClass.Inquisitor, AdvancedClass.Assassin, SkillTreeId.AssassinDarkness)]
public static Composite AssassinDarknessPull()
{
return new PrioritySelector(
Spell.Cast("Force Speed", ret => BuddyTor.Me.CurrentTarget.Distance >= Global.meleeDist && BuddyTor.Me.CurrentTarget.Distance <= 4f),
Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, Global.meleeDist),
Spell.Cast("Maul", ret => BuddyTor.Me.HasBuff("Stealth"))
);
}
[Behavior(BehaviorType.Combat)]
[Class(CharacterClass.Inquisitor, AdvancedClass.Assassin, SkillTreeId.AssassinDarkness)]
public static Composite AssassinDarknessCombat()
{
return new PrioritySelector(
Spell.WaitForCast(),
Movement.StopInRange(Global.meleeDist),
// General Abilities
Spell.Cast("Force Speed", ret => BuddyTor.Me.CurrentTarget.Distance >= Global.meleeDist && BuddyTor.Me.CurrentTarget.Distance <= 4f),
Spell.Cast("Dark Charge", ret => !BuddyTor.Me.HasBuff("Dark Charge")),
Spell.Cast("Mark of Power", ret => !BuddyTor.Me.HasBuff("Mark of Power")),
Spell.Cast("Unbreakable Will", ret => BuddyTor.Me.IsStunned),
Spell.Cast("Recklessness", castWhen => BuddyTor.Me.InCombat && !BuddyTor.Me.HasBuff("Recklessness")),
// Crowd Controls
Spell.Cast("Whirlwind", on => Helpers.ccTarget(), castWhen => Helpers.Targets.Count() >= 2),
Spell.Cast("Electrocute", on => Helpers.ccTarget(), castWhen => Helpers.Targets.Count() >= 2),
Spell.Cast("Spike", on => Helpers.ccTarget(), castWhen => Helpers.Targets.Count(t => t.Distance <= .4f) >= 2),
// Interrupts
Spell.Cast("Jolt", ret => BuddyTor.Me.CurrentTarget.IsCasting),
Spell.Cast("Electrocute", ret => BuddyTor.Me.CurrentTarget.IsCasting),
Spell.Cast("Spike", ret => BuddyTor.Me.CurrentTarget.IsCasting),
Spell.Cast("Overload", ret => BuddyTor.Me.CurrentTarget.IsCasting),
// Defensive Cooldowns
Spell.Cast("Dark Ward", ret => AbilityManager.CanCast("Dark Ward") && (!BuddyTor.Me.HasBuff("Dark Ward") || BuddyTor.Me.Buffs.FirstOrDefault(B => B.Name == "Dark Ward" && B.Duration == TimeSpan.FromSeconds(20)).TimeLeft.Seconds < 2 || BuddyTor.Me.HasBuff("Dark Ward") && BuddyTor.Me.Buffs.FirstOrDefault(B => B.Name == "Dark Ward").Stacks < 2)),
Spell.Cast("Deflection", ret => BuddyTor.Me.InCombat && BuddyTor.Me.HealthPercent <= 70),
Spell.Cast("Force Shroud", ret => BuddyTor.Me.InCombat && BuddyTor.Me.HealthPercent <= 60),
Spell.Cast("Overcharge Saber", castWhen => BuddyTor.Me.InCombat && BuddyTor.Me.HealthPercent <= 40),
// General Attack Sequence
Spell.Cast("Discharge", castWhen => BuddyTor.Me.HasBuff("Dark Charge")),
Spell.Cast("Wither", ret => AbilityManager.CanCast("Wither") && (!BuddyTor.Me.CurrentTarget.HasDebuff("Wither (Force)") || BuddyTor.Me.CurrentTarget.Debuffs.FirstOrDefault(B => B.Name == "Wither (Force)" && B.Duration == TimeSpan.FromSeconds(15)).TimeLeft.Seconds < 2)),
Spell.CastOnGround("Death Field", castWhen => AbilityManager.CanCast(" Death Field") && Helpers.Targets.Count() >= 1 && BuddyTor.Me.CurrentTarget.Distance <= Global.rangeDist, location => BuddyTor.Me.CurrentTarget.Position),
Spell.Cast("Force Lightning", ret => BuddyTor.Me.HasBuff("Harnessed Darkness") && BuddyTor.Me.Buffs.FirstOrDefault(B => B.Name == "Harnessed Darkness").Stacks == 3 && BuddyTor.Me.ResourceStat > 45),
Spell.Cast("Assassinate", castWhen => BuddyTor.Me.CurrentTarget.HealthPercent <= 30),
Spell.Debuff("Crushing Darkness", castWhen => AbilityManager.CanCast("Crushing Darkness") && BuddyTor.Me.HasBuff("Raze") && !BuddyTor.Me.CurrentTarget.HasDebuff("Crushed (Force)")),
Spell.Cast("Shock", ret => BuddyTor.Me.HasBuff("Energize") && BuddyTor.Me.ResourceStat > 45),
Spell.Cast("Lacerate", castWhen => Helpers.Targets.Count() >= 2 && BuddyTor.Me.ResourceStat > 45),
Spell.Cast("Thrash", castWhen => BuddyTor.Me.ResourceStat > 45),
Spell.Cast("Saber Strike", ret => true),
// Movement
Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, Global.meleeDist)
);
}
[Behavior(BehaviorType.OutOfCombat)]
[Class(CharacterClass.Inquisitor, AdvancedClass.Assassin, SkillTreeId.AssassinDarkness)]
public static Composite AssassinDarknessRest()
{
return new PrioritySelector(
Spell.Cast("Seethe", ret => BuddyTor.Me.HealthPercent <= 90),
Spell.Cast("Stealth", castWhen => !BuddyTor.Me.HasBuff("Stealth")),
Spell.Cast("Dark Charge", ret => !BuddyTor.Me.HasBuff("Dark Charge")),
Spell.Cast("Mark of Power", ret => !BuddyTor.Me.HasBuff("Mark of Power"))
);
}
}
}