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

CC Enhancemets

xsol

Member
Joined
Nov 7, 2011
Messages
503
Reaction score
12
CC Enhancements Empire

I'm going to be posting and updating some of the CC code for WingIt with specific AC/Specs as I work on them.

Ideas and collaboration are welcome.

This thread will cover Sorc, Mercenary, Juggernaut, and Sniper CCs

I'm probably going to work on some Republic stuff also, but that will be in another thread. I have my ACs split between Republic and Empire, but changing the skill names will switch them easy enough.

I currently have no Powertech/Vanguard as I don't like a "ranged" melee, but I may roll one if I stick with SWTOR.
 
Last edited:
Sniper - Marksman

This is currently working well for level 30+ Sniper.

Current planned spec: Skill Calculator - Star Wars: The Old Republic (SWTOR) Database

Code:
using System;
using System.Linq;

using Buddy.BehaviorTree;
using Buddy.Common;
using Buddy.CommonBot;
using Buddy.Swtor;

using WingIt.Dynamics;
namespace WingIt.Routines.Advanced.Sniper
{
    //currently being developed by xsol
    //5/8/2012
    //testing with lvl 35 sniper
    public class Marksmanship
    {
        /// <summary>
        /// This property simply checks buff to determine if we are in cover.
        /// </summary>
        /// <returns>true - if in cover, false - if not in cover</returns>
        public static bool IsInCover
        {
            get
            {
                return (BuddyTor.Me.HasBuff("Crouch") || BuddyTor.Me.HasBuff("Cover") || BuddyTor.Me.HasBuff("Unshakable"));
            }
        }

        public const int EnergyMin = 60;

        public const float RangedDistance = 2.8f;
        public const float MeleeDistance = 0.3f;

        public const int HealthShield = 90;
        public const int HealthCritical = 40;

        [Behavior(BehaviorType.Combat)]
        [Class(CharacterClass.Agent, AdvancedClass.Sniper, SkillTreeId.SniperMarksmanship)]
        public static Composite MarksmanshipCombat()
        {
            return new PrioritySelector(
                Movement.StopInRange(RangedDistance),
                //Allow Casting to complete
                Spell.WaitForCast(),
                //CC Break
                Spell.Cast("Escape ", castWhen => BuddyTor.Me.IsStunned),

                // Cover so we can use our stuff
                Spell.Cast("Crouch", 
                    ret => BuddyTor.Me,
                    ret => BuddyTor.Me.CurrentTarget.InLineOfSight && !IsInCover && BuddyTor.Me.CurrentTarget.Distance <= RangedDistance),

                //interupt
                Spell.Cast("Distraction", 
                    castWhen => 
                        BuddyTor.Me.CurrentTarget.IsCasting &&
                        BuddyTor.Me.CurrentTarget.Distance >= MeleeDistance),

                //CC
                Spell.Cast("Debilitate", 
                    castWhen => 
                        (BuddyTor.Me.CurrentTarget.IsCasting || BuddyTor.Me.HealthPercent <= HealthCritical) && 
                        BuddyTor.Me.CurrentTarget.Distance <= 0.3f),
                Spell.Cast("Flash Bang", castWhen => Helpers.Targets.Count() >= 2),

                // attempt to debuff any target that can be debuffed and are a "real" threat
                Spell.Cast("Diversion", castWhen => (
                    BuddyTor.Me.CurrentTarget.Toughness != CombatToughness.Weak && 
                    BuddyTor.Me.CurrentTarget.Toughness != CombatToughness.Standard && 
                    BuddyTor.Me.CurrentTarget.Toughness != CombatToughness.RaidBoss)),

                //DPS
                // AoE Grenade, High Damage
                Spell.Cast("Fragmentation Grenade", castWhen => BuddyTor.Me.ResourceStat >= EnergyMin),
                // Medium DPS Grenade, place this every time it is available
                Spell.Cast("Explosive Probe", castWhen => IsInCover),
                //idealy we want to cast this every time it is off cd
                Spell.Cast("Followthrough", castWhen => BuddyTor.Me.ResourceStat >= EnergyMin && IsInCover),
                // Only ambush when we have the buff from a snipe crit and we know we will only dip a little below 60 energy (actually regen will prevent the dip below)
                Spell.Cast("Ambush", castWhen => 
                    IsInCover && 
                    BuddyTor.Me.HasBuff("Reactive Shot") && 
                    BuddyTor.Me.ResourceStat >= EnergyMin),
                //buff snipe to ensure a crit
                Spell.Cast("Laze Target", ret => IsInCover && BuddyTor.Me.ResourceStat >= EnergyMin),
                // Medium DPS Shot, this is our main goto dmg and setup skill
                Spell.Cast("Snipe", ret => IsInCover && BuddyTor.Me.ResourceStat >= EnergyMin),
                //finisher, below 30% health
                Spell.Cast("Takedown", castWhen => AbilityManager.CanCast("Takedown", BuddyTor.Me.CurrentTarget)), 
                // Low DPS shot, allows time for energy to regen and procs Sniper Volly
                Spell.Cast("Rifle Shot"),


                //enery quick fix
                Spell.Cast("Adrenaline Probe", castWhen => BuddyTor.Me.ResourceStat <= EnergyMin),
                //defense
                Spell.Cast("Shield Probe", castWhen => BuddyTor.Me.HealthPercent <= HealthShield),
                //Spell.Cast("Entrench", castWhen => IsInCover), //need some advance logic here for when to use it
                Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, RangedDistance)
            );
        }

        [Behavior(BehaviorType.Pull)]
        [Class(CharacterClass.Agent, AdvancedClass.Sniper, SkillTreeId.SniperMarksmanship)]
        public static Composite MarksmanshipPull()
        {
            return MarksmanshipCombat();
        }
    }
}
 
Last edited:
Sith Juggernaut Immortal

I've only tested this on my level 50.

Spec: Skill Calculator - Star Wars: The Old Republic (SWTOR) Database

Code:
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
{
    //Neo93 07.05.2012
    public static class JuggernautImmortal
    {
        [Class(CharacterClass.Warrior, AdvancedClass.Juggernaut, SkillTreeId.JuggernautImmortal)]
        [Behavior(BehaviorType.Combat)]
        public static Composite JuggernautImmortalPull()
        {
            return JuggernautImmortalCombat();
        }

        public const float RangedDistance = 2.8f;
        public const float MeleeDistance = 0.3f;
        public const float ChargeMinDistance = 1f;
        public const float MinimumAoETargets = 2;
        [Class(CharacterClass.Warrior, AdvancedClass.Juggernaut, SkillTreeId.JuggernautImmortal)]
        [Behavior(BehaviorType.Combat)]
        public static Composite JuggernautImmortalCombat()
        {
            return new PrioritySelector(
                Movement.StopInRange(MeleeDistance), 
                Spell.WaitForCast(),


                //    ***Generel/*** 
                Spell.Cast("Saber Throw", castWhen => 
                    BuddyTor.Me.CurrentTarget.Distance >= MeleeDistance && 
                    BuddyTor.Me.CurrentTarget.Distance <= RangedDistance),
                Spell.Cast("Force Charge", castWhen => 
                    BuddyTor.Me.CurrentTarget.Distance >= ChargeMinDistance &&
                    BuddyTor.Me.CurrentTarget.Distance <= RangedDistance), //+3 Rage/15s CD/30m Range - Pull

                //high priority aggro
                Spell.Cast("Smash", castWhen =>
                    ObjectManager.GetObjects<Buddy.Swtor.Objects.TorNpc>().Count(o => o.Distance <= 0.3 && !o.IsDead) >= 2 &&
                    BuddyTor.Me.ResourceStat >= 3 &&
                    Helpers.Targets.Count() >= MinimumAoETargets),//-3 Rage/15s CD

                //in range is king, it was waiting and force charging to get in range
                Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, MeleeDistance), 

                //needed higher priority
                Spell.Cast("Force Scream", castWhen => BuddyTor.Me.ResourceStat > 3), //-4 Rage without proc, this high priority as it procs a bubble
                Spell.Cast("Retaliation", castWhen => BuddyTor.Me.ResourceStat > 3), //-1 rage off the gcd, high priority

                //debuff target and generate rage, we want to hit this ever time it is up, no need to over complicate it
                Spell.Cast("Sundering Assault"),
                Spell.Cast("Vicious Slash", castWhen => BuddyTor.Me.ResourceStat >= 3), //-3 rage

                //when chained with force choke and backhand creates nice burst/control
                //don't waste it on weak/standard targets
                Spell.Cast("Ravage", castWhen => (int)BuddyTor.Me.CurrentTarget.Toughness >= (int)CombatToughness.Strong), 
                Spell.Cast("Crushing Blow", castWhen => 
                    BuddyTor.Me.ResourceStat >= 4 && 
                    AbilityManager.HasAbility("Crushing Blow")), //xsol - not in my spec

                Spell.Cast("Force Push", castWhen => BuddyTor.Me.CurrentTarget.Toughness == CombatToughness.Player),

                // **Personal Maint.**
                Spell.Cast("Unleash", castWhen => BuddyTor.Me.IsStunned),//Insignia/2m CD
                Spell.Cast("Enrage", castWhen => BuddyTor.Me.ResourceStat <= 6),//+6 Rage

                //    **CC**
                //refactor: add situational check to save for key interupts based on group area context
                Spell.Cast("Disruption", castWhen => 
                    BuddyTor.Me.CurrentTarget.IsCasting && 
                    BuddyTor.Me.CurrentTarget.CastTimeEnd - TimeSpan.FromSeconds(1) >= DateTime.Now),

                //use force choke as an interupt or as a defense cd to stop dmg
                Spell.Cast("Force Choke", castWhen => 
                    ((BuddyTor.Me.CurrentTarget.IsCasting && 
                    !AbilityManager.CanCast("Disruption", BuddyTor.Me.CurrentTarget) || BuddyTor.Me.HealthPercent <= 60)) && 
                    !BuddyTor.Me.HasBuff("Saber Ward")),

                //Spell.Cast("Chilling Scream", castWhen => ObjectManager.GetObjects<Buddy.Swtor.Objects.TorNpc>().Count(o => o.Distance <= .3 && !o.IsDead) >= 3 && BuddyTor.Me.ResourceStat >= 3 && Helpers.Targets.Count() >= 3),
                //Spell.Cast("Intimidating Roar", castWhen => ObjectManager.GetObjects<Buddy.Swtor.Objects.TorNpc>().Count(o => o.Distance <= .3 && !o.IsDead) >= 3 && BuddyTor.Me.ResourceStat >= 3 && Helpers.Targets.Count() >= 3 && BuddyTor.Me.HealthPercent <= 60),
                Spell.Cast("Backhand", castWhen => 
                    ((BuddyTor.Me.CurrentTarget.IsCasting && 
                    (!AbilityManager.CanCast("Force Choke", BuddyTor.Me.CurrentTarget) && 
                        !AbilityManager.CanCast("Disruption", BuddyTor.Me.CurrentTarget)) || 
                        BuddyTor.Me.HealthPercent <= 30)) && 
                    !BuddyTor.Me.HasBuff("Saber Ward")),   
                //Spell.Cast("Intercede", castOn => Helpers.LowestHealthPlayer, castWhen => Helpers.LowestHealthPlayer.GroupId == BuddyTor.Me.GroupId && Helpers.LowestHealthPlayer.HealthPercent <= 50),

                //    **Offensive**
                //strong skill but only usable on stunned - normal or weak - enemys
                Spell.Cast("Pommel Strike", castWhen => 
                    BuddyTor.Me.CurrentTarget.IsStunned && 
                    (BuddyTor.Me.CurrentTarget.Toughness == CombatToughness.Standard || 
                    BuddyTor.Me.CurrentTarget.Toughness == CombatToughness.Weak)),

                Spell.Cast("Savage Kick", castWhen => BuddyTor.Me.CurrentTarget.Toughness != CombatToughness.Player),
                Spell.Cast("Backhand", castWhen => BuddyTor.Me.ResourceStat >= 1 && !BuddyTor.Me.CurrentTarget.IsStunned),
                Spell.Cast("Sweeping Slash", castWhen => 
                    ObjectManager.GetObjects<Buddy.Swtor.Objects.TorNpc>().Count(o => o.Distance <= 0.3 && !o.IsDead) >= 4 && 
                    BuddyTor.Me.ResourceStat >= 4 &&
                    Helpers.Targets.Count() >= MinimumAoETargets),//-3 Rage/15s CD

                //    *Aggro*
                //Spell.Cast("Threatening Scream"),
                //only cast this when we need rage
                Spell.Cast("Assault", castWhen => BuddyTor.Me.ResourceStat <= 5),
              
                Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, MeleeDistance)
              );
        }

        [Class(CharacterClass.Warrior, AdvancedClass.Juggernaut, SkillTreeId.JuggernautImmortal)]
        [Behavior(BehaviorType.Combat)]
        public static Composite JuggernautImmortalOutOfCombat()
        {
            return new PrioritySelector(
                Spell.Cast("Soresu Form", ret => AbilityManager.HasAbility("Soresu Form") && !BuddyTor.Me.HasBuff("Soresu Form")),
                Spell.Cast("Shii-Cho Form", ret => !AbilityManager.HasAbility("Soresu Form") && !BuddyTor.Me.HasBuff("Shii-Cho Form"))
             );
        }
    }
}
 
Last edited:
Bounty Hunter - Pyrotech

Spec - Skill Calculator - Star Wars: The Old Republic (SWTOR) Database

I know most player roll with Arsenal, but I personally run Pyrotech for the extra mobility in PvP. The CC is "okay" it does not do the rotation perfectly, but it does it well enough to be effective.

Code:
using System;
using System.Linq;
using Buddy.BehaviorTree;
using Buddy.CommonBot;
using Buddy.Swtor;
using WingIt.Dynamics;

namespace WingIt.Routines.Advanced.Mercenary
{
    //http://swtor.theplanarcollege.com/bounty-hunter-mercenary-pyrotech-pvp-guide/  the advantage of dot and capping is no longer valid
    //http://torwars.com/2012/01/02/bounty-hunter-weekly-burning-down-the-house-the-pyrotech/
    //
    public class Pyrotech
    {
        [Behavior(BehaviorType.Combat)]
        [Class(CharacterClass.BountyHunter, AdvancedClass.Mercenary, SkillTreeId.MercenaryFirebug)]
        public static Composite PyroCombat()
        {
            return new PrioritySelector(
                //range check
                Movement.StopInRange(2.8f),
                //complete casting
                Spell.WaitForCast(),
                //attempt to open with your aoe nuke
                Spell.CastOnGround("Death From Above", ret => Helpers.Targets.Count() > 3, ret => BuddyTor.Me.CurrentTarget.Position),
                //cause burning
                Spell.Cast("Incendiary Missile",
                        castWhen => BuddyTor.Me.ResourceStat < 10),
                //reduces heat when fired after a proc, high dmg
                Spell.Cast("Rail Shot",
                    castWhen => AbilityManager.CanCast("Rail Shot", BuddyTor.Me.CurrentTarget)),
                //energy refresh
                Spell.Cast("Vent Heat",
                    castWhen => BuddyTor.Me.ResourceStat >= 75),

                //fish for a rail shot
                Spell.Cast("Unload",
                    castWhen => !AbilityManager.CanCast("Rail Shot", BuddyTor.Me.CurrentTarget)
                        && BuddyTor.Me.ResourceStat < 50),
                //attempt to time a thermal with a powershot for burst
                Spell.Cast("Thermal Detonator",
                    castWhen => !AbilityManager.CanCast("Unload", BuddyTor.Me.CurrentTarget)
                        && BuddyTor.Me.ResourceStat < 60),
                //fish for a rail shot
                Spell.Cast("Power Shot",
                    castWhen => !AbilityManager.CanCast("Unload", BuddyTor.Me.CurrentTarget)
                        && BuddyTor.Me.ResourceStat < 75),
                //helps keep heat low and procs burning
                Spell.Cast("Rapid Shots"),
                //merc interupt
                Spell.Cast("Electro-Dart", ret => BuddyTor.Me.CurrentTarget.IsCasting),
                //defense
                Spell.Cast("Energy Shield", ret => BuddyTor.Me.HealthPercent <= 50),
                //cast your big heal
                Spell.Cast("Rapid Scan", ret => BuddyTor.Me.HealthPercent <= 65),
                //weak HoT
                Spell.Cast("Kolto Overload", ret => BuddyTor.Me.HealthPercent <= 70),
                //should not be needed, but wth
                Spell.Cast("Combustible Gas Cylinder", ret => !BuddyTor.Me.HasBuff("High Velocity Gas Cylinder")),
                //stay in range
                Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, 2.8f)

            );
        }
    }
}
 
Last edited:
Sith Inq. Corruption - Skill Calculator - Star Wars: The Old Republic (SWTOR) Database

This is not a CC for use in a party or in PvP this is for grinding dailies etc, the basic idea is to heal, and aoe nuke unless there are only a few targets. It works well for the most part, some advanced pull logic would would be nice to help gather the targets.

The basic idea, run in in order to help target cluster on you (should have bubble) aoe nuke, until healing needed then aoe nuke some more. I leveled using this concept from 30-50 and never died and never upgraded my gear so it works... at 50 with good gear it pretty much dominates. Need to add consumption use.

Code:
using System;
using Buddy.BehaviorTree;
using Buddy.CommonBot;
using Buddy.Swtor;
using System.Linq;
using WingIt.Dynamics;


namespace WingIt.Routines
{
    public static class SithSorcerer
    {
        [Behavior(BehaviorType.Combat)]
        [Class(CharacterClass.Inquisitor, AdvancedClass.Sorcerer)]
        public static Composite SorcererCombat()
        {
            return new PrioritySelector(
                Movement.StopInRange(0.5f),
                //heal
                Spell.Cast("Static Barrier", onUnit => Helpers.Companion, ret => !Helpers.Companion.HasBuff("Static Barrier") && !Helpers.Companion.HasDebuff("Deionized")),
                Spell.Cast("Static Barrier", onUnit => BuddyTor.Me, ret => !BuddyTor.Me.HasBuff("Static Barrier") && !BuddyTor.Me.HasDebuff("Deionized")),
                Spell.Cast("Resurgence", onUnit => Helpers.Companion, ret => Helpers.Companion.HealthPercent < 90),
                Spell.Cast("Resurgence", onUnit => BuddyTor.Me, ret => BuddyTor.Me.HealthPercent < 90),
                Spell.Cast("Innervate", onUnit => Helpers.Companion, ret => Helpers.Companion.HealthPercent < 80),
                Spell.Cast("Innervate", onUnit => BuddyTor.Me, ret => BuddyTor.Me.HealthPercent < 80),
                Spell.Cast("Dark Heal", onUnit => Helpers.Companion, ret => Helpers.Companion.HealthPercent < 80),
                Spell.Cast("Dark Heal", onUnit => BuddyTor.Me, ret => BuddyTor.Me.HealthPercent < 80),
                Spell.Cast("Dark Infusion", onUnit => Helpers.Companion, ret => Helpers.Companion.HealthPercent < 55),
                Spell.Cast("Dark Infusion", onUnit => BuddyTor.Me, ret => BuddyTor.Me.HealthPercent < 65),
                //Generel
                Spell.Cast("Unbreakable Will", castWhen => BuddyTor.Me.IsStunned),//Insignia/2m CD
                Spell.Cast("Recklessness", castWhen => BuddyTor.Me.InCombat && BuddyTor.Me.ResourceStat >= 60),
                Spell.WaitForCast(),
                //aoe burn while companion kicks ass
                Spell.CastOnGround("Force Storm", castWhen =>
                    {
                        if (Helpers.Targets.Count() > 3 && BuddyTor.Me.CurrentTarget.Distance <= 0.5f && BuddyTor.Me.ResourceStat >= 100)
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    },
                    ret => BuddyTor.Me.CurrentTarget.Position
                ),
                //single target burn
                Spell.Cast("Crushing Darkness", castWhen => !BuddyTor.Me.CurrentTarget.HasDebuff("Crushing Darkness") && Helpers.Targets.Count() < 2),
                Spell.Cast("Affliction", castWhen => !BuddyTor.Me.CurrentTarget.HasDebuff("Affliction") && Helpers.Targets.Count() < 2),
                Spell.Cast("Shock", castWhen => Helpers.Targets.Count() < 2),
                Spell.Cast("Force Lightning", castWhen => Helpers.Targets.Count() < 2),
                Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, 0.5f)
            );
        }
        [Class(CharacterClass.Inquisitor, AdvancedClass.Sorcerer)]
        [Behavior(BehaviorType.Pull)]
        public static Composite SorcererPreCombat()
        {
            return new PrioritySelector(
                Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, 0.4f),
                Spell.Cast("Static Barrier", onUnit => Helpers.Companion, ret => !Helpers.Companion.HasBuff("Static Barrier") && !Helpers.Companion.HasDebuff("Deionized")),
                Spell.Cast("Static Barrier", onUnit => BuddyTor.Me, ret => Helpers.Companion.HasBuff("Static Barrier") && !BuddyTor.Me.HasDebuff("Deionized")),
                SorcererCombat()
                );
        }

        [Class(CharacterClass.Inquisitor, AdvancedClass.Sorcerer)]
        [Behavior(BehaviorType.OutOfCombat)]
        public static Composite OutOfCombat()
        {
            return new PrioritySelector(
                Spell.Cast("Static Barrier", onUnit => Helpers.Companion, ret => !Helpers.Companion.HasBuff("Static Barrier") && !Helpers.Companion.HasDebuff("Deionized")),
                Spell.Cast("Static Barrier", onUnit => BuddyTor.Me, ret => !BuddyTor.Me.HasBuff("Static Barrier") && !BuddyTor.Me.HasDebuff("Deionized"))
            );
        }
    }
}
 
Last edited:
Hey,

I appreciate your work and will take a look, improve it and add your code to WingIt.

Use BuddyTor.Me.ResourceStat instead of EnergyPercent and please take a look at the basic cc's, they are made for use in advanced cc's.

What is "Unshakable", did u mean "Crouch"?

Cheers
 
Hey,

I appreciate your work and will take a look, improve it and add your code to WingIt.

Use BuddyTor.Me.ResourceStat instead of EnergyPercent and please take a look at the basic cc's, they are made for use in advanced cc's.

What is "Unshakable", did u mean "Crouch"?

Cheers

Unshakable is the buff you get when you enter cover along with crouch; I chose to use "Unshakable" and not check for two possible other buff as you always get "Unshakable" as a Sniper. But, thinking about it I suppose they could patch "Unshakable" out and it would be better to check for "Crouch"...

Are you planning to check the skill points and return the "correct" selector? I'm working on setting up a method for each tree and then planning to attempt to check skill points to return the "correct" selector.

Why should I use ResourceStat instead of EnergyPercent? Is there a specific reason because % is much more consistent ammo vs. heat for example...

WingIt certainly needs improving; glad I can help you do that. I have most ACs (no powertech) and I'll probably have a CC for each sometime soon if I continue with it.

Ah one more question since you have been working on this for awhile, is there any way to setup the selector to cast spells one after the other without multi entries and complex checks.

For Example Spell.CastSequence(new string[]{"Thermal Sensor Override", "Power Surge", "Fusion Missile"); //Apoc icanhazcake?
 
Last edited:
ive been wanting to use this image for SUCH a LONG time, and now i get too.
132052607580.webp

thanks for helping.
 
Bounty Hunter - Pyrotech

Spec - Skill Calculator - Star Wars: The Old Republic (SWTOR) Database

I know most player roll with Arsenal, but I personally run Pyrotech for the extra mobility in PvP. The CC is "okay" it does not do the rotation perfectly, but it does it well enough to be effective.

Code:
            return new PrioritySelector(
                //range check
                Movement.StopInRange(2.8f),
                //complete casting
                Spell.WaitForCast(),
                //attempt to open with your aoe nuke
                //Spell.CastOnGround("Death From Above", ret => Helpers.Targets.Count() > 3,BuddyTor.Me.CurrentTarget.Position), //position is invalid param...?
                //cause burning
                Spell.Cast("Incendiary Missile", 
                        castWhen => BuddyTor.Me.ResourceStat < 10),
                //reduces heat when fired after a proc, high dmg
                Spell.Cast("Rail Shot", 
                    castWhen => AbilityManager.CanCast("Rail Shot", BuddyTor.Me.CurrentTarget)),
                //energy refresh
                Spell.Cast("Vent Heat",
                    castWhen => BuddyTor.Me.ResourceStat >= 75),
                //fish for a rail shot
                Spell.Cast("Unload", 
                    [COLOR="#008000"]castWhen => !AbilityManager.CanCast("Rail Shot",BuddyTor.Me.CurrentTarget)[/COLOR] <-- You don't need that.
                        && BuddyTor.Me.ResourceStat < 50),
                //attempt to time a thermal with a powershot for burst
                Spell.Cast("Thermal Detonator", 
                    castWhen => !AbilityManager.CanCast("Unload",BuddyTor.Me.CurrentTarget)
                        && BuddyTor.Me.ResourceStat < 60),
                //fish for a rail shot
                Spell.Cast("Power Shot", 
                    castWhen => !AbilityManager.CanCast("Unload", BuddyTor.Me.CurrentTarget)
                        && BuddyTor.Me.ResourceStat < 75),
                //helps keep heat low and procs burning
                Spell.Cast("Rapid Shots"),
                //merc interupt
                Spell.Cast("Electro-Dart", ret => BuddyTor.Me.CurrentTarget.IsCasting),
                //defense
                Spell.Cast("Energy Shield", ret => BuddyTor.Me.HealthPercent <= 50),
                //cast your big heal
                Spell.Cast("Rapid Scan", ret => BuddyTor.Me.HealthPercent <= 65),
                //weak HoT
                Spell.Cast("Kolto Overload", ret => BuddyTor.Me.HealthPercent <= 70),
                //should not be needed, but wth
                Spell.Cast("High Velocity Gas Cylinder", ret => !BuddyTor.Me.HasBuff("High Velocity Gas Cylinder")),
                //stay in range
                Movement.MoveTo(ret => BuddyTor.Me.CurrentTarget.Position, 2.8f)

            );

btw, its really important that u stay under 50 Heat as BH. 40 would be even better, but 50 is ok. Aswell as sniper, dont get under 60 energy.

Are you planning to check the skill points and return the "correct" selector? I'm working on setting up a method for each tree and then planning to attempt to check skill points to return the "correct" selector.
I'm currently working on it.
 
Last edited:
I know about the limits; I also know that not dieing is more important than mana. Those are soft rules and anyone who plays the spec will tell you that often you have to dip below the suggested limit to burn a target before you die, unless you want to die.

Rail Shot fishing therefore if I can cast rail shot I don't want to cast unload and therefore I do need that check because you never want to unload if you can rail shot because unload refreshes the cd on rail shot and makes it a free cast and causes it to vent 8 heat. You sure you understand the spec? Or I need something that will let me set a fixed cycle of cast this then cast this then cast this EXACTLY

If your going to post something I would appreciate it if you would spend the time to explain your reasons; if not please don't post.

ugh need coffee

On the subject of the unload it doesn't appear that the check is even working, I just did a dry run, and burning triggered rail shot which was ready and he unloads before he rail shots which is not how the rotation works.

Rotation: Incendiary Missile > Rail Shot > Unload, Rail Shot, Thermal Detonator, Power Shot, Rail Shot, Power Shot, Rail Shot , Power Shot, Rail Shot ( Incendiary Missile) as needed to keep burning on the target...

Every Rail Shot requires burning and a proc except the first one. hope that clarifies what I am trying to do. The heat usage may be off it is just a place holder, but when the rotation is done properly it is very hard to even get above 25 heat, if you do it will be because of the three power shots with no rail proc (vents heat) and then you will cast Vent Heat or just rapid shots. Also if you put 2 points in Improved Vents vent heat vents 66 heat, which means if you are going for some exact perfect heat management the right number for vent heat is >= 66, but I put 75 to allow a 3rd power shot which will most likely clean up any mess
 
Last edited:
Also, Neo, these aren't "done" yet they are thrown together to get the bot to work at 50 in order to test; I plan to enhance all of them and they may even have bugs.

I have not tested the pyro very much as I moved on to working on my healing sorcs cc and am currently trying to get that to work which is giving me some frustration.

Further more these are currently designed to suit my play style not a guide; my original goal was simply to make them available to those who may also want to play a 50 on empire side and know how to copy paste to the CC...

That said I'm glad you are tweaking my work and putting it in WingIt, but just bear in mind I'm still working on these and will be updating the posts as I test my work further.
 
I know about the limits; I also know that not dieing is more important than mana. Those are soft rules and anyone who plays the spec will tell you that often you have to dip below the suggested limit to burn a target before you die, unless you want to die.
Thats the reason why I said 40-50 heat. It doesn't care if u need to rest because of not enough ressource or because u need more health, but if u wanna use the same cc for questing + raiding/flashpoints and thats my goal btw, then its really important that u don't get under this values.

Rail Shot fishing therefore if I can cast rail shot I don't want to cast unload and therefore I do need that check because you never want to unload if you can rail shot because unload refreshes the cd on rail shot and makes it a free cast and causes it to vent 8 heat. You sure you understand the spec? Or I need something that will let me set a fixed cycle of cast this then cast this then cast this EXACTLY
No ive got no merc and had no time to get into it deeper.

And take a look here http://mmo-mechanics.com/swtor/forums/Forum-Class-Discussion
 
Thats the reason why I said 40-50 heat. It doesn't care if u need to rest because of not enough ressource or because u need more health, but if u wanna use the same cc for questing + raiding/flashpoints and thats my goal btw, then its really important that u don't get under this values.


No ive got no merc and had no time to get into it deeper.

And take a look here SWTOR Mechanics Forums - Class Discussion

Sorry for being jerky needed coffee and just woke up, and what can I say I'm a jerk ;)

I'll check out the threads.

I'm all for using the same cc, in most cases, but I think healers for example are going to need two sets of selectors: one for in group and one for not in group, or just one really big selector... the more you tell me about what you're planning the better I can help and I'm glad to help.

Also, I'm looking at using the OutOfCombat to refill energy if it is low, but have not spent much time on that yet; I'm still sniffing around and trying to see what tools I have.
 
No problem.

Also, I'm looking at using the OutOfCombat to refill energy if it is low, but have not spent much time on that yet; I'm still sniffing around and trying to see what tools I have.

I'll take a look at it.
 
Back
Top