What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal
RebornBuddy Forums

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

WingIt - All In One

F
what did you change for corruption? Does it heal in groups?
Ofc, it will heal and do dmg if youre not in a group or in a group with less than 3 player.

@protopally
When I add a gui to relicmanager, u can choose when to use the relicts e.g. If u have buff xyz

Another cc just for 2 lines of code?srsly?Just add a boolean ?useAoe?
 
Will have the updated Madness Assassin CC as well as Deception and Darkness in about 24 hours. These are entirely based upon Ops best priority list. I will add in coding for lower level ability support if it actually does need extra code for that.
 
Will have the updated Madness Assassin CC as well as Deception and Darkness in about 24 hours. These are entirely based upon Ops best priority list. I will add in coding for lower level ability support if it actually does need extra code for that.

Hello all, impressive work actually. Still a lots of things to fix but really impressive.

When a CC is updated, is it updated directly on the Wingit-All-In-One SVN ?

I was testing the sage seer yesterday, it work really well.
 
I will add in coding for lower level ability support if it actually does need extra code for that.
Well its normally the same code, just with extra conditions.

When a CC is updated, is it updated directly on the Wingit-All-In-One SVN ?
When I commit a CC u can directly update it via the SVN.

I was testing the sage seer yesterday, it work really well.
Sounds good. Where did u test it? Solo, group?
 
Last edited:
Sounds good. Where did u test it? Solo, group?

Tested on Correlia, level 50 with a companion. Healing work really well but always slow to kill as a seer.

I didnt see if we are low on mana, the CC will use Noble Sacrifice. And if Healing Trance crits, Noble Sacrifice is automaticaly used.

Will be great if we can add force lift to the CC when there is more than one strong target (and breaking force lift with an attack when everything else is already dead).
 
We currently have no Darkness cc

We will Soon... now could someone assist me with some coding for getting behind a target? I need this for the two DPS specs on Assassin, Two DPS specs on Shadow and the 2 Operative Specs for DPS. Without it i can not complete a combat pull sequence and I am at a loss atm. This is my first few things coding for thebuddyforums and TBH I am not a pro-coder. I am just a man that knows how to use his noodle and do by example.
 
Converted the Neo's Marauder CC to Sentinel>Combat.

This works really well except the detection of the Centering buff. Currently using:

castWhen => BuddyTor.Me.HasBuff("Centering")

This doesn't seem to ever be true.

The rest of the spell conditions have tested out and the CC works awesome (replaced the single Sentinel advanced class CS to test)
 

Attachments

N
Converted the Neo's Marauder CC to Sentinel>Combat.

This works really well except the detection of the Centering buff. Currently using:

castWhen => BuddyTor.Me.HasBuff("Centering")

This doesn't seem to ever be true.

The rest of the spell conditions have tested out and the CC works awesome (replaced the single Sentinel advanced class CS to test)

Thank you :)
 
New Madness Assassin... and can we change the "Assasin" Directory to "Assassin", which is how it is spelled? Also, the basefile too...

Code:
// Madness Assassin v1.0 - Cystacae
// Known Bugs: Can't Maul on Stealth Pull.  Waiting for some help on this.

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 AssassinMadness
    {
        
        [Behavior(BehaviorType.Pull)]
        [Class(CharacterClass.Inquisitor, AdvancedClass.Assassin, SkillTreeId.AssassinMadness)]
        public static Composite AssassinMadnessPull()
        {
        	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(),
	        Spell.CastOnGround("Death Field", castWhen => Helpers.Targets.Count() >= 1 && BuddyTor.Me.CurrentTarget.Distance <= Global.rangeDist, location => BuddyTor.Me.CurrentTarget.Position)
		);		  
	}

        [Behavior(BehaviorType.Combat)]
        [Class(CharacterClass.Inquisitor, AdvancedClass.Assassin, SkillTreeId.AssassinMadness)]
        public static Composite AssassinMadnessCombat()
        {
            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("Lightning Charge", ret => !BuddyTor.Me.HasBuff("Lightning 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),  

            // Interrupts
            Spell.Cast("Jolt", ret => BuddyTor.Me.CurrentTarget.IsCasting),
            Spell.Cast("Electrocute", 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("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", ret => BuddyTor.Me.HasBuff("Stealth")),
	    Spell.CastOnGround("Death Field", castWhen => Helpers.Targets.Count() >= 1 && BuddyTor.Me.CurrentTarget.Distance <= Global.rangeDist, location => BuddyTor.Me.CurrentTarget.Position),
            Spell.Debuff("Crushing Darkness", castWhen => BuddyTor.Me.HasBuff("Raze") && !BuddyTor.Me.CurrentTarget.HasDebuff("Crushed (Force)")),
            Spell.Debuff("Discharge", castWhen => !BuddyTor.Me.CurrentTarget.HasDebuff("Shocked (Force)")),
            Spell.Cast("Assassinate", castWhen => BuddyTor.Me.CurrentTarget.HealthPercent <= 30),
            Spell.Debuff("Creeping Terror", castWhen => !BuddyTor.Me.CurrentTarget.HasDebuff("Creeping Terror (Force)")),
            Spell.Cast("Maul", castWhen => BuddyTor.Me.HasBuff("Exploit Weakness")),
            Spell.Cast("Lacerate", castWhen => Helpers.Targets.Count() >= 3), 
            Spell.Cast("Thrash", 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.AssassinMadness)]
	public static Composite AssassinMadnessRest()
        {
            return new PrioritySelector(
            Spell.Cast("Seethe", ret => BuddyTor.Me.HealthPercent <= 90),
            Spell.Cast("Stealth", castWhen => !BuddyTor.Me.HasBuff("Stealth")),
	    Spell.Cast("Lightning Charge", ret => !BuddyTor.Me.HasBuff("Lightning Charge")),
	    Spell.Cast("Mark of Power", ret => !BuddyTor.Me.HasBuff("Mark of Power"))
	    );
        }

    }
}
 
Last edited:
Balance Shadow is done and tested... except for Battle Readiness as I am not 50 yet on my shadow (only 44) and 50 is Battle Readiness. This is based upon a similar build to Madness Assassin I believe 5/5/31.

Code:
// Balance Shadow v1.0 - Cystacae
// Known Bugs: I am nearly sure Base Shadow file interferes with proper rotation as well as Telekinetic Throw (Similar to Madness Assassin).  Force Breach and Mind Crush share same "Crushed (Force)" debuff name.  Can't Shadow Strike on Stealth Pull.  Waiting for some help on this.

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 ShadowBalance
    {

	[Behavior(BehaviorType.Pull)]
	[Class(CharacterClass.Consular, AdvancedClass.Shadow, SkillTreeId.ShadowBalance)]
        public static Composite ShadowBalancePull()
        {
		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("Shadow Strike", ret => BuddyTor.Me.HasBuff("Stealth")),
		//Spell.WaitForCast(),
   	        Spell.CastOnGround("Force in Balance", castWhen => Helpers.Targets.Count() >= 1 && BuddyTor.Me.CurrentTarget.Distance <= Global.rangeDist, location => BuddyTor.Me.CurrentTarget.Position)
		);
    	}

        [Behavior(BehaviorType.Combat)]
	[Class(CharacterClass.Consular, AdvancedClass.Shadow, SkillTreeId.ShadowBalance)]
        public static Composite ShadowBalanceCombat()
        {
            return new PrioritySelector(
		Movement.StopInRange(Global.meleeDist),
                Spell.WaitForCast(),

		// General
                Spell.Cast("Force Speed", ret => BuddyTor.Me.CurrentTarget.Distance >= Global.meleeDist && BuddyTor.Me.CurrentTarget.Distance <= 4f),
                Spell.Cast("Force Technique", ret => !BuddyTor.Me.HasBuff("Force Technique")),
                Spell.Cast("Force Valor", ret => !BuddyTor.Me.HasBuff("Force Valor")),
		Spell.Cast("Force of Will", ret => BuddyTor.Me.IsStunned),

                // Crowd controls!
                Spell.Cast("Force Lift", 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("Force Stun", 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("Mind Snap", ret => BuddyTor.Me.CurrentTarget.IsCasting),
		Spell.Cast("Force Stun", ret => BuddyTor.Me.CurrentTarget.IsCasting),
		Spell.Cast("Force Wave", ret => BuddyTor.Me.CurrentTarget.IsCasting),

                // Defensive Cooldowns
                Spell.Cast("Deflection", ret => BuddyTor.Me.InCombat && BuddyTor.Me.HealthPercent <= 80),
                Spell.Cast("Resilience", ret => BuddyTor.Me.InCombat && BuddyTor.Me.HealthPercent <= 70),
		
		// Buffs
		Spell.Cast("Force Potency", castWhen => BuddyTor.Me.InCombat && !BuddyTor.Me.HasBuff("Force Potency")),
		Spell.Cast("Force Cloak", castWhen => BuddyTor.Me.InCombat && !BuddyTor.Me.HasBuff("Shadow's Respite")),
                Spell.Cast("Battle Readiness", castWhen => BuddyTor.Me.InCombat && !BuddyTor.Me.HasBuff("Battle Readiness")),
                
		// Attack Sequence
		Spell.Cast("Shadow Strike", castWhen => BuddyTor.Me.HasBuff("Stealth")),
		Spell.CastOnGround("Force in Balance", castWhen => Helpers.Targets.Count() >= 1 && BuddyTor.Me.CurrentTarget.Distance <= Global.rangeDist, location => BuddyTor.Me.CurrentTarget.Position),
		Spell.Debuff("Mind Crush", castWhen => BuddyTor.Me.HasBuff("Force Strike")),
		Spell.Debuff("Force Breach", castWhen => !BuddyTor.Me.CurrentTarget.HasDebuff("Crushed (Force)")),
                Spell.Cast("Spinning Strike", castWhen => BuddyTor.Me.CurrentTarget.HealthPercent <= 30),
                Spell.Debuff("Sever Force", castWhen => !BuddyTor.Me.CurrentTarget.HasDebuff("Sever Force (Force)")),
                Spell.Cast("Shadow Strike", castWhen => BuddyTor.Me.HasBuff("Find Weakness")),
		Spell.Cast("Whirling Blow", castWhen => Helpers.Targets.Count() >= 3),                
		Spell.Cast("Double Strike", castWhen => BuddyTor.Me.ResourceStat > 45),
                Spell.Cast("Saber Strike"),                
		Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, Global.meleeDist)
                );
        }

	[Behavior(BehaviorType.OutOfCombat)]
	[Class(CharacterClass.Consular, AdvancedClass.Shadow, SkillTreeId.ShadowBalance)]
        public static Composite ShadowBalanceRest()
        {
            	return new PrioritySelector(
                Spell.Cast("Meditation", ret => BuddyTor.Me.HealthPercent <= 90),
		Spell.Cast("Stealth", ret => !BuddyTor.Me.HasBuff("Stealth")),
		Spell.Cast("Force Technique", ret => !BuddyTor.Me.HasBuff("Force Technique")),
                Spell.Cast("Force Valor", ret => !BuddyTor.Me.HasBuff("Force Valor"))
		);        
	}
    }
}
 
Last edited:
Deception Assassin CC based on simulations being the best possible build and rotation 2/31/8.

Code:
// 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"))
                );
        }  
    }
}
 
Last edited:
Infiltration Shadow Based upon similar simcraft reports from the counterpart Deception Assassin 2/31/8. this was Tested at level 44 so Battle Readiness was not sure about.
Code:
// Infiltration Shadow v1.0 - Cystacae
// Known Bugs:  Can't get behind on pull, and same as madness/balance about their cast spell from base class.

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 ShadowInfiltration
    {        
	
        [Behavior(BehaviorType.Pull)]
        [Class(CharacterClass.Consular, AdvancedClass.Shadow, SkillTreeId.ShadowInfiltration)]
	public static Composite ShadowInfiltrationPull()
        {
        	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("Shadow Strike", ret => BuddyTor.Me.HasBuff("Stealth")) //,
		//Spell.WaitForCast(),
		);		  
	}
	
        [Behavior(BehaviorType.Combat)]
        [Class(CharacterClass.Consular, AdvancedClass.Shadow, SkillTreeId.ShadowInfiltration)]
	public static Composite ShadowInfiltrationCombat()
        {
            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("Shadow Technique", ret => !BuddyTor.Me.HasBuff("Shadow Technique")),
                Spell.Cast("Force Valor", ret => !BuddyTor.Me.HasBuff("Force Valor")),
                Spell.Cast("Force of Will", ret => BuddyTor.Me.IsStunned),

                // Crowd Controls
		Spell.Cast("Force Lift", 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() >= 2),             
	        Spell.Cast("Force Stun", 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() >= 2),
	        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() >= 2),

	        // Interrupts
                Spell.Cast("Mind Snap", ret => BuddyTor.Me.CurrentTarget.IsCasting),
                Spell.Cast("Force Stun", ret => BuddyTor.Me.CurrentTarget.IsCasting),
	        Spell.Cast("Low Slash", ret => BuddyTor.Me.CurrentTarget.IsCasting),
	        Spell.Cast("Force Wave", 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("Force Potency", castWhen => BuddyTor.Me.InCombat && !BuddyTor.Me.HasBuff("Force Potency")),
		Spell.Cast("Blackout", castWhen => BuddyTor.Me.InCombat && BuddyTor.Me.ResourceStat < 90 && !BuddyTor.Me.HasBuff("Shadow's Respite")),
		Spell.Cast("Force Cloak", castWhen => BuddyTor.Me.InCombat && !BuddyTor.Me.HasBuff("Shadow's Respite")),
                Spell.Cast("Battle Readiness", castWhen => BuddyTor.Me.InCombat && !BuddyTor.Me.HasBuff("Battle Readiness")),
                
	        // General Attack Sequence
		Spell.Cast("Shadow Strike", castWhen => BuddyTor.Me.HasBuff("Stealth")),
		Spell.Cast("Project", ret => BuddyTor.Me.HasBuff("Circling Shadows") && BuddyTor.Me.Buffs.FirstOrDefault(B => B.Name == "Circling Shadows").Stacks > 1),
	        Spell.Cast("Spinning Strike", castWhen => BuddyTor.Me.CurrentTarget.HealthPercent <= 30),
	        Spell.Cast("Shadow Strike", castWhen => BuddyTor.Me.HasBuff("Find Weakness")),
		Spell.Cast("Force Breach", ret => BuddyTor.Me.HasBuff("Exit Strategy") && BuddyTor.Me.Buffs.FirstOrDefault(B => B.Name == "Exit Strategy").Stacks > 0),
		Spell.Cast("Whirling Blow", castWhen => Helpers.Targets.Count() >= 3), 
                Spell.Cast("Clairvoyant Strike", castWhen => BuddyTor.Me.ResourceStat > 45),
                Spell.Cast("Saber Strike"),
                Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, Global.meleeDist)
                );
        }

        [Behavior(BehaviorType.OutOfCombat)]
        [Class(CharacterClass.Consular, AdvancedClass.Shadow, SkillTreeId.ShadowInfiltration)]
	public static Composite ShadowInfiltrationRest()
        {
            return new PrioritySelector(
            Spell.Cast("Meditation", ret => BuddyTor.Me.HealthPercent <= 90),
            Spell.Cast("Stealth", castWhen => !BuddyTor.Me.HasBuff("Stealth")),
	    Spell.Cast("Shadow Technique", ret => !BuddyTor.Me.HasBuff("Shadow Technique")),
	    Spell.Cast("Force Valor", ret => !BuddyTor.Me.HasBuff("Force Valor"))
                );
        }  
    }
}
 
Last edited:
Working on Darkness Assassin and Kinetic Combat Shadow. These are primarily tank specs and the CC will be written as such. The hybrid Darkness/Madness build that is NOT tanking I will also build but after these last two. Notice, I have some known bugs and I have been trying to squash them but I am stuck.
 
@cystacae
Thank you :)

Edit:

You don't need to add an extra buff in the priorityselector and you dont need to add the rest buff to you OOC comp, its all there....
 
Last edited:
@cystacae
Thank you :)

Edit:

You don't need to add an extra buff in the priorityselector and you dont need to add the rest buff to you OOC comp, its all there....

Still learning man... you have access to it so where you see it needs fixing be my guest and I will re-evaluate it after that to see if it still adheres properly to rotational needs by the simulations. I am having issues with the darkness build. I can get it to do the rotation properly and then after a little bit there seems to be a conflicting issue that causes the script to lockup until I manually cast lightning so I know it is a conflict of something then going into force lightning but no error to report only a stall.
 
Here is the updated code for Sniper/Gunslinger. From now on to edit gunslinger just edit sniper classes and use Sniper.Cast etc... these functions mirror so a call to Sniper.Cast("Ambush") will auto cast the mirror skill on a gunslinger.

View attachment SniperPlusMirror.zip

The marksmanship rotation is working very well for OpsRotations. Back to d3
 
Here is the updated code for Sniper/Gunslinger. From now on to edit gunslinger just edit sniper classes and use Sniper.Cast etc... these functions mirror so a call to Sniper.Cast("Ambush") will auto cast the mirror skill on a gunslinger.

View attachment 42220

The marksmanship rotation is working very well for OpsRotations. Back to d3

Dude, great idea, may I look at your coding and see how you handled it and use it for assassin/shadow and operative/scoundrel when I can figure out how to do it properly?
 
Dude, great idea, may I look at your coding and see how you handled it and use it for assassin/shadow and operative/scoundrel when I can figure out how to do it properly?

Sure, the code is not anything fancy, but it gets the jobs done.
 
Back
Top