F 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.
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.
Well its normally the same code, just with extra conditions. When I commit a CC u can directly update it via the SVN. Sounds good. Where did u test it? Solo, group?
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 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)
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")) ); } } }
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")) ); } } }
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")) ); } } }
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")) ); } } }
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....
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
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?