// Deception Assassin v1.0 - Cystacae
// Known Bugs: Can't get behind on pull, Also same as Madness Assassin that randomly Force Lightning may interfere. I only say may because I have yet to see it but Madness code is relatively the same.
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 AssassinDeception
{
[Behavior(BehaviorType.Pull)]
[Class(CharacterClass.Inquisitor, AdvancedClass.Assassin, SkillTreeId.AssassinDeception)]
public static Composite AssassinDeceptionPull()
{
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")) //,
//Spell.WaitForCast(),
);
}
[Behavior(BehaviorType.Combat)]
[Class(CharacterClass.Inquisitor, AdvancedClass.Assassin, SkillTreeId.AssassinDeception)]
public static Composite AssassinDeceptionCombat()
{
return new PrioritySelector(
Movement.StopInRange(Global.meleeDist),
Spell.WaitForCast(),
// General Abilities
Spell.Cast("Force Speed", ret => BuddyTor.Me.CurrentTarget.Distance >= Global.meleeDist && BuddyTor.Me.CurrentTarget.Distance <= 4f),
Spell.Cast("Surging Charge", ret => !BuddyTor.Me.HasBuff("Surging Charge")),
Spell.Cast("Mark of Power", ret => !BuddyTor.Me.HasBuff("Mark of Power")),
Spell.Cast("Unbreakable Will", ret => BuddyTor.Me.IsStunned),
// Crowd Controls
Spell.Cast("Whirlwind", onUnit =>
{
var previousTarget = BuddyTor.Me.CurrentTarget;
return
Helpers.Targets.FirstOrDefault(
t =>
t != previousTarget && (t.Toughness == CombatToughness.Player || t.Toughness == CombatToughness.Strong || t.Toughness == CombatToughness.Standard || t.Toughness == CombatToughness.Weak) && !t.IsDead) ??
Helpers.Targets.FirstOrDefault(t => t != previousTarget);
}, castWhen => Helpers.Targets.Count() >= 3),
Spell.Cast("Electrocute", onUnit =>
{
var previousTarget = BuddyTor.Me.CurrentTarget;
return
Helpers.Targets.FirstOrDefault(
t =>
t != previousTarget && (t.Toughness == CombatToughness.Player || t.Toughness == CombatToughness.Strong || t.Toughness == CombatToughness.Standard || t.Toughness == CombatToughness.Weak) && !t.IsDead) ??
Helpers.Targets.FirstOrDefault(t => t != previousTarget);
}, castWhen => Helpers.Targets.Count() >= 3),
Spell.Cast("Low Slash", onUnit =>
{
var previousTarget = BuddyTor.Me.CurrentTarget;
return
Helpers.Targets.FirstOrDefault(
t =>
t != previousTarget && (t.Toughness == CombatToughness.Player || t.Toughness == CombatToughness.Strong || t.Toughness == CombatToughness.Standard || t.Toughness == CombatToughness.Weak) && !t.IsDead) ??
Helpers.Targets.FirstOrDefault(t => t != previousTarget);
}, castWhen => Helpers.Targets.Count() >= 3),
// Interrupts
Spell.Cast("Jolt", ret => BuddyTor.Me.CurrentTarget.IsCasting),
Spell.Cast("Electrocute", ret => BuddyTor.Me.CurrentTarget.IsCasting),
Spell.Cast("Low Slash", ret => BuddyTor.Me.CurrentTarget.IsCasting),
Spell.Cast("Overload", ret => BuddyTor.Me.CurrentTarget.IsCasting),
// Defensive Cooldowns
Spell.Cast("Deflection", ret => BuddyTor.Me.InCombat && BuddyTor.Me.HealthPercent <= 80),
Spell.Cast("Force Shroud", ret => BuddyTor.Me.InCombat && BuddyTor.Me.HealthPercent <= 70),
// Buffs
Spell.Cast("Recklessness", castWhen => BuddyTor.Me.InCombat && !BuddyTor.Me.HasBuff("Recklessness")),
Spell.Cast("Blackout", castWhen => BuddyTor.Me.InCombat && BuddyTor.Me.ResourceStat < 90 && !BuddyTor.Me.HasBuff("Dark Embrace")),
Spell.Cast("Force Cloak", castWhen => BuddyTor.Me.InCombat && !BuddyTor.Me.HasBuff("Dark Embrace")),
Spell.Cast("Overcharge Saber", castWhen => BuddyTor.Me.InCombat && !BuddyTor.Me.HasBuff("Overcharge")),
// General Attack Sequence
Spell.Cast("Maul", castWhen => BuddyTor.Me.HasBuff("Stealth")),
Spell.Cast("Shock", ret => BuddyTor.Me.HasBuff("Induction") && BuddyTor.Me.Buffs.FirstOrDefault(B => B.Name == "Induction").Stacks > 1),
Spell.Cast("Assassinate", castWhen => BuddyTor.Me.CurrentTarget.HealthPercent <= 30),
Spell.Cast("Maul", castWhen => BuddyTor.Me.HasBuff("Exploit Weakness")),
Spell.Cast("Discharge", ret => BuddyTor.Me.HasBuff("Static Charge") && BuddyTor.Me.Buffs.FirstOrDefault(B => B.Name == "Static Charge").Stacks > 0),
Spell.Cast("Lacerate", castWhen => Helpers.Targets.Count() >= 3),
Spell.Cast("Voltaic Slash", castWhen => BuddyTor.Me.ResourceStat > 45),
Spell.Cast("Saber Strike"),
Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, Global.meleeDist)
);
}
[Behavior(BehaviorType.OutOfCombat)]
[Class(CharacterClass.Inquisitor, AdvancedClass.Assassin, SkillTreeId.AssassinDeception)]
public static Composite AssassinDeceptionRest()
{
return new PrioritySelector(
Spell.Cast("Seethe", ret => BuddyTor.Me.HealthPercent <= 90),
Spell.Cast("Stealth", castWhen => !BuddyTor.Me.HasBuff("Stealth")),
Spell.Cast("Surging Charge", ret => !BuddyTor.Me.HasBuff("Surging Charge")),
Spell.Cast("Mark of Power", ret => !BuddyTor.Me.HasBuff("Mark of Power"))
);
}
}
}