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!

Default Combat Discussion

Update - Kicking my Op to a healer has shown me that companion isn't being auto selected when no other tank is there, not a biggie. So I selected f12 to set him as a tank and 1 Kolto fired and it fell back to me. I went through the tank selection and found that it was never setting the TankName string even though the script does look for it. So I changed this function.

Code:
        public static void SetTank()
        {
            if (Me.CurrentTarget != null && Me.CurrentTarget.IsFriendly)
            {
                Tank = Me.CurrentTarget;
                Logger.Write("Tank set to : " + Tank.Name);
                TankName = Tank.ToString();
            }
        }

This allowed the tank to be set static as it should. Attaching a full copy of everything including this change.

View attachment 199567

Put that Sawbones.cs file I posted just above your post and it works perfectly.
 
Sweet glad to see it's coming along and working, I recall everyone saying setting the tank hasn't worked in forever but it's good now my companion had constant Kolto probes. You found out the companion targeting before, could you see if what you did for that would fix the companion detection under the set tank? I recall you found it was being called out incorrectly before.
 
Sweet glad to see it's coming along and working, I recall everyone saying setting the tank hasn't worked in forever but it's good now my companion had constant Kolto probes. You found out the companion targeting before, could you see if what you did for that would fix the companion detection under the set tank? I recall you found it was being called out incorrectly before.

I think it was because the rotation was looking for TorPlayers but the companion is a TorNPC. They are both under the umbrella of TorCharacters though.

btw, here's Sage/Seer:
PHP:
// Copyright (C) 2011-2015 Bossland GmbH
// See the file LICENSE for the source code's detailed license

using Buddy.BehaviorTree;
using DefaultCombat.Core;
using DefaultCombat.Helpers;

namespace DefaultCombat.Routines
{
    internal class Seer : RotationBase
    {
        public override string Name
        {
            get { return "Sage Seer"; }
        }

        public override Composite Buffs
        {
            get
            {
                return new PrioritySelector(
                    Spell.Buff("Force Valor")
                    );
            }
        }

        public override Composite Cooldowns
        {
            get
            {
                return new PrioritySelector(
                    Spell.Buff("Force Potency", ret => Targeting.ShouldAoeHeal),
                    Spell.Buff("Mental Alacrity", ret => Targeting.ShouldAoeHeal),
                    Spell.Buff("Vindicate", ret => NeedForce()),
                    Spell.Buff("Force Mend", ret => Me.HealthPercent <= 75)
                    );
            }
        }

        public override Composite SingleTarget
        {
            get
            {
                return new PrioritySelector(
                    //Movement
                    CombatMovement.CloseDistance(Distance.Ranged),
                    Spell.Cast("Mind Snap", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
                    Spell.Cast("Force Stun", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
                    Spell.Cast("Forcequake", ret => Targeting.ShouldAoe),
                    Spell.Cast("Mind Crush"),
                    Spell.DoT("Weaken Mind", "Weaken Mind"),
                    Spell.Cast("Project"),
                    Spell.Cast("Telekinetic Throw"),
                    Spell.Cast("Disturbance")
                    );
            }
        }

        public override Composite AreaOfEffect
        {
            get
            {
                return new PrioritySelector(
                    //Cleanse if needed
                    Spell.Cleanse("Restoration"),

                    //Emergency Heal (Insta-cast)
                    Spell.Heal("Benevolence", 80, ret => Me.HasBuff("Altruism")),

                    //Aoe Heal
                    Spell.HealGround("Salvation", ret => Targeting.ShouldAoeHeal),

                    //Single Target Healing
                    Spell.Heal("Healing Trance", 80),
                    Spell.HoT("Force Armor", 90, ret => HealTarget != null && !HealTarget.HasDebuff("Force-imbalance")),

                    //Buff Tank
                    Spell.HoT("Force Armor", onUnit => Tank, 100, ret => Tank != null && Tank.InCombat && !Tank.HasDebuff("Force-imbalance")),
                    Spell.Heal("Wandering Mend", onUnit => Tank, 100,
                        ret => Tank != null && Tank.InCombat && Me.BuffCount("Wandering Mend Charges") <= 1),

                    //Use Force Bending
                    new Decorator(ret => Me.HasBuff("Conveyance"),
                        new PrioritySelector(
                            Spell.Heal("Healing Trance", 90),
                            Spell.Heal("Deliverance", 50)
                            )),

                    //Build Force Bending
                    Spell.HoT("Rejuvenate", 80),
                    Spell.HoT("Rejuvenate", onUnit => Tank, 100, ret => Tank != null && Tank.InCombat),

                    //Single Target Healing                  
                    Spell.Heal("Benevolence", 35),
                    Spell.Heal("Deliverance", 80)
                    );
            }
        }

        private bool NeedForce()
        {
            if (Me.ForcePercent <= 20)
                return true;
            if (Me.HasBuff("Resplendence") && Me.ForcePercent < 80 && !Me.HasBuff("Amnesty"))
                return true;
            return false;
        }
    }
}

and Commando/CombatMedic:
PHP:
// Copyright (C) 2011-2015 Bossland GmbH
// See the file LICENSE for the source code's detailed license

using Buddy.BehaviorTree;
using DefaultCombat.Core;
using DefaultCombat.Helpers;

namespace DefaultCombat.Routines
{
	internal class CombatMedic : RotationBase
	{
		public override string Name
		{
			get { return "Commando Combat Medic"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Fortification"),
					Spell.Buff("Combat Support Cell")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Tenacity"),
					Spell.Buff("Supercharged Cell",
						ret =>
							Me.ResourceStat >= 20 && HealTarget != null && HealTarget.HealthPercent <= 80 &&
							Me.BuffCount("Supercharge") == 10),
					Spell.Buff("Adrenaline Rush", ret => Me.HealthPercent <= 30),
					Spell.Buff("Reactive Shield", ret => Me.HealthPercent <= 70),
					Spell.Buff("Reserve Powercell", ret => Me.ResourceStat <= 60),
					Spell.Buff("Recharge Cells", ret => Me.ResourceStat <= 50),
					Spell.Cast("Tech Override", ret => Tank != null && Tank.HealthPercent <= 50)
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
                    //Movement
                    CombatMovement.CloseDistance(Distance.Ranged),
                    Spell.Cast("Disabling Shot", ret => Me.CurrentTarget.IsCasting),
                    Spell.Cast("High Impact Bolt"),
                    Spell.Cast("Full Auto"),
                    Spell.Cast("Charged Bolts", ret => Me.ResourceStat >= 70),
                    Spell.Cast("Hammer Shot")
                    );
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new PrioritySelector(

                    new Decorator(ret => Me.HasBuff("Supercharged Cell"),
						new PrioritySelector(
							Spell.HealGround("Kolto Bomb", ret => !Tank.HasBuff("Kolto Residue")),
							Spell.Heal("Bacta Infusion", 60),
							Spell.Heal("Advanced Medical Probe", 85)
							)),

					//Dispel
					Spell.Cleanse("Field Aid"),

                    //AoE Healing
                    Spell.HealAoe("Successive Treatment", ret => Targeting.ShouldAoeHeal),
                    Spell.HealGround("Kolto Bomb", ret => !Tank.HasBuff("Kolto Residue")),

					//Single Target Healing
					Spell.Heal("Bacta Infusion", 80),
					Spell.Heal("Advanced Medical Probe", 80),
					Spell.Heal("Medical Probe", 75),

                    //Keep Trauma Probe on Tank
                    Spell.HoT("Trauma Probe", 100),

                    //To keep Supercharge buff up; filler heal
                    Spell.Heal("Med Shot", onUnit => Tank, 100, ret => Tank != null && Me.InCombat)
					);
			}
		}
	}
}
 
Thanks to Alltrueist for making some updated routines we now have Sawbones, Seer, and CombatMedic updates. I keep having to make updates so I'm going to roll a new thread to keep track of all the testing. If we can make sure these fixes are solid for BOTH heals and DPS then we can get them added to GitHub and they will come down with a buddywing update. Thread started, if all checks out and works and is put into general circulation then we will close that thread down and resume back here.

Some people were trying to keep up with the last so many pages and this should make it easier to track.

https://www.thebuddyforum.com/buddy...-default-combat-test-edition.html#post2173809
 
Anyone else having a problem with Watchmen routine? Stops attacking about 2 minutes in. Have to manually start it back
 
deadly saber interrupts ravage

Hello there folks

i did some tweaks on mara anihi rotation would like some feedbacks

PHP:
// Copyright (C) 2011-2015 Bossland GmbH
// See the file LICENSE for the source code's detailed license

using Buddy.BehaviorTree;
using DefaultCombat.Core;
using DefaultCombat.Helpers;
using Buddy.Swtor.Objects;
using Buddy.Swtor;

namespace DefaultCombat.Routines
{
	internal class Annihilation : RotationBase
	{
		public override string Name
		{
			get { return "Marauder Annihilation"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Juyo Form"),
					Spell.Buff("Unnatural Might")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Cloak of Pain", ret => Me.HealthPercent <= 90),
					Spell.Buff("Undying Rage", ret => Me.HealthPercent <= 20),
					Spell.Buff("Saber Ward", ret => Me.HealthPercent <= 50),
					Spell.Buff("Frenzy", ret => Me.BuffCount("Fury") < 5),
					Spell.Buff("Berserk", ret => Me.BuffCount("Fury") > 29)
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					
					//Rotation
					Spell.Cast("Deadly Saber", 
						ret => 
						!Me.HasBuff("Deadly Saber") &&
						!BuddyTor.Me.IsCasting),
					Spell.Cast("Battering Assault", 
						ret => 
						Me.ActionPoints <= 6),
					Spell.Cast("Force Rend", 
						ret => 
						!Me.CurrentTarget.HasDebuff("Force Rend")),
					Spell.Cast("Rupture", 
						ret => 
						!Me.CurrentTarget.HasDebuff("Bleeding (Rupture)")),
					Spell.Cast("Dual Saber Throw", 
						ret => 
						Me.HasBuff("Pulverize")),
					Spell.Cast("Annihilate"),
					Spell.Cast("Vicious Throw", 
						ret => 
						Me.CurrentTarget.HealthPercent <= 30),
					Spell.Cast("Ravage"),
					Spell.Cast("Vicious Slash", 
						ret => 
						Me.ActionPoints >= 7 &&
						!Me.HasBuff("Pulverize") &&
						Me.CurrentTarget.HasDebuff("Force Rend") &&
						Me.CurrentTarget.HasDebuff("Bleeding (Rupture)") &&
						!Buddy.CommonBot.AbilityManager.CanCast("Vicious Throw", Me.CurrentTarget) &&
						!Buddy.CommonBot.AbilityManager.CanCast("Ravage", Me.CurrentTarget) &&
						!Buddy.CommonBot.AbilityManager.CanCast("Annihilate", Me.CurrentTarget)),
					Spell.Cast("Assault", 
						ret => 
						Me.ActionPoints < 7)
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldPbaoe,
					new PrioritySelector(
						Spell.Cast("Dual Saber Throw",
							ret => !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 1f && Me.CurrentTarget.Distance <= 3f),
						Spell.Cast("Smash",
							ret => Me.CurrentTarget.HasDebuff("Bleeding (Rupture)") && Me.CurrentTarget.HasDebuff("Force Rend")),
						Spell.DoT("Force Rend", "Force Rend"),
						Spell.DoT("Rupture", "Bleeding (Rupture)"),
						Spell.Cast("Sweeping Slash")
						));
			}
		}
	}
}

One thing i tried to fix but couldnt its that deadlysaber casts in the middle of ravage sometimes, interupting it.
I tried using deadly saber as buff, as spell.cast and finnaly put a check for iscasting but none of them worked so far.
Anyone have any ideia what could i do to fix this?
 
That's weird because there is a built-in check for the entire bot Spell.WaitForCast() that won't fire off an ability while we're casting. Hmm.
 
That's weird because there is a built-in check for the entire bot Spell.WaitForCast() that won't fire off an ability while we're casting. Hmm.
Maybe its because the lockselectors are gone, it might not read the correct state of casting.
 
Ok so i updated my Rest.cs to use Stims and XP Boosters.
For testing purposes:
Code:
        private static Composite Stims
        {
            get
            {
                bool StimBuffed = false;
                bool StimUsed = false;
                TorItem tiu = null;

                using (BuddyTor.Memory.AcquireFrame())
                {
                    return new Action(delegate
                    {
                        foreach (TorEffect te in Me.Buffs) if (te.Name.Contains("Stim")) { StimBuffed = true; break; }
                        if (!StimBuffed)
                        {
                            var Attrs = ("Command;Fortitude;Versatile;Skill;Might;Resolve;Reflex").Split(';');
                            foreach (TorItem ti in Me.InventoryEquipment)
                            {
                                bool AttrIn = false;
                                foreach (string attr in Attrs) if (ti != null && !ti.IsDeleted && ti.Name.Contains(attr)) { AttrIn = true; break; }
                                if (AttrIn && ti != null && !ti.IsDeleted && ti.Name != null && ti.Name.Contains(" Stim"))
                                {
                                    bool UseIt = false;
                                    if (ti.Name.Contains("Command") || ti.Name.Contains("Fortitude") || ti.Name.Contains("Versatile") || ti.Name.Contains("Skill") || ti.Name.Contains("Might") || ti.Name.Contains("Resolve") || ti.Name.Contains("Reflex"))
                                    {
                                        UseIt = true;
                                        if (UseIt)
                                        {
                                            ti.Use();
                                            ti.Interact();
                                            tiu = ti;
                                            StimUsed = true;
                                            Thread.Sleep(500);
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        if (StimUsed)
                        {
                            Logger.Write("Stim -" + tiu.Name + "- found in inventory and used.");
                            StimUsed = false;
                            return RunStatus.Success;
                        }
                        return RunStatus.Failure;
                    });
                }
            }
        }

        private static Composite XPBoost
        {
            get
            {
                bool XPBuffed = false;
                bool XPUsed = false;
                TorItem tiu = null;

                using (BuddyTor.Memory.AcquireFrame())
                {
                    return new Action(delegate
                    {
                        foreach (TorEffect te in Me.Buffs) if (te.Name.Contains("Experience Boost")) { XPBuffed = true; break; }
                        if (!XPBuffed && Me.Level < 65)
                        {
                            foreach (TorItem ti in Me.InventoryEquipment)
                            {
                                bool UseIt = false;
                                if (ti.Name.Contains("Experience Boost"))
                                {
                                    UseIt = true;
                                    if (UseIt)
                                    {
                                        ti.Use();
                                        ti.Interact();
                                        tiu = ti;
                                        XPUsed = true;
                                        Thread.Sleep(500);
                                        break;
                                    }
                                }
                            }
                        }
                        if (XPUsed)
                        {
                            Logger.Write("XP Booster -" + tiu.Name + "- found in inventory and used.");
                            XPUsed = false;
                            return RunStatus.Success;
                        }
                        return RunStatus.Failure;
                    });
                }
            }
        }

        public static Composite HandleRest
		{
			get
			{
				return new PrioritySelector(
					ReviveCompanion,
					Rejuvenate,
                    Stims,
                    XPBoost
					);
			}
		}

Past it under Rejuvenate and overwrite public static Composite HandleRest.
Do note XP booster will be used if you have any and are below lvl 65, but will not always report what booster is used.
 
Last edited:
Made some changes to the Marksman Routine:

Added popping Crouch if you weren't already crouched as most abilities need that to work and it wasn't doing that.
Added low health Ballistic Shield.
Added Cover Pulse on point blank StrongOrGreater targets (to get them out of your face).

Code:
// Copyright (C) 2011-2016 Bossland GmbH
// See the file LICENSE for the source code's detailed license

using Buddy.BehaviorTree;
using DefaultCombat.Core;
using DefaultCombat.Helpers;

namespace DefaultCombat.Routines
{
    internal class Marksmanship : RotationBase
    {
        public override string Name
        {
            get { return "Sniper Marksmanship"; }
        }

        public override Composite Buffs
        {
            get
            {
                return new PrioritySelector(
                    Spell.Buff("Coordination")
                    );
            }
        }

        public override Composite Cooldowns
        {
            get
            {
                return new PrioritySelector(
                    Spell.Buff("Escape", ret => Me.IsStunned),
                    Spell.Buff("Shield Probe", ret => Me.HealthPercent <= 70),
                    Spell.Buff("Evasion", ret => Me.HealthPercent <= 30),
                    Spell.Buff("Ballstic Shield", ret => Me.HealthPercent <=15),
                    Spell.Buff("Adrenaline Probe", ret => Me.EnergyPercent <= 40),
                    Spell.Buff("Sniper Volley", ret => Me.EnergyPercent <= 60),
                    Spell.Buff("Entrench", ret => Me.CurrentTarget.StrongOrGreater() && Me.IsInCover()),
                    Spell.Buff("Cover Pulse", ret => Me.CurrentTarget.Distance <= 1f && Me.CurrentTarget.StrongOrGreater()),
                    Spell.Buff("Crouch"),
                    Spell.Buff("Laze Target"),
                    Spell.Buff("Target Acquired")
                    );
            }
        }

        public override Composite SingleTarget
        {
            get
            {
                return new PrioritySelector(
                    //Movement
                    CombatMovement.CloseDistance(Distance.Ranged),

                    //Low Energy
                    new Decorator(ret => Me.EnergyPercent < 60,
                        new PrioritySelector(
                            Spell.Cast("Rifle Shot")
                            )),

                    //Rotation
                    Spell.Cast("Distraction", ret => Me.CurrentTarget.IsCasting),
                    Spell.Cast("Followthrough"),
                    Spell.Cast("Penetrating Blasts", ret => Me.Level >= 26),
                    Spell.Cast("Series of Shots", ret => Me.Level < 26),
                    Spell.DoT("Corrosive Dart", "Corrosive Dart"),
                    Spell.Cast("Ambush", ret => Me.BuffCount("Zeroing Shots") == 2),
                    Spell.Cast("Takedown", ret => Me.CurrentTarget.HealthPercent <= 30),
                    Spell.Cast("Snipe")
                    );
            }
        }

        public override Composite AreaOfEffect
        {
            get
            {
                return new Decorator(ret => Targeting.ShouldAoe,
                    new PrioritySelector(
                        Spell.CastOnGround("Orbital Strike"),
                        Spell.Cast("Fragmentation Grenade"),
                        Spell.CastOnGround("Suppressive Fire")
                        ));
            }
        }
    }
}

Will work on the Rotations as I get more familiar with the updated game. I'm still in the pre-60 stuff so we'll see what needs to change.
 
Changed the Kinetic Combat routine. I did not fix the misspelling.

http://pastebin.com/ZAHETVwn

The main changes are based around using Telekinetic Throw / Cascading Debris correctly, as well as fixing some bugs that caused the bot to stop functioning properly (eg, Kinetic Ward should use Spell.Cast instead of Spell.Debuff if you want to refresh before the last stack falls)
 
Last edited:
Working as intended. You do the moving and targeting and bot only does rotations on targeted mobs. Perfect for those losers using a bot for PVP because they will never ever possess the skill set to handle pvp themselves (big teasing grin and ducking incoming missiles).
But for PVE purposes it does not work as well, since we might actually want the bot to auto target and loot esp. when we multibox and we want the bot to follow the leader as in an Isboxer environment.
Jon or Cryogenesis or one of the others might give us a better solution, but for now a really crude way for when we want something similar to the old 'Unpure" combat routine that would actually target and move and loot and make tea etc., while we handle movement, would perhaps be to make the bot believe it is questing. That is because of the way the bot now functions with the default routine. IOW write a fake questing profile similar to this:

<Profile>
<Name>Combat Bot</Name>
<ForceAlignment Type="Dark" AutoSkip="True" />

<Questing>
<If Condition="((not HasQuest(0xE000D81B7BFA4EB9)) and (not IsQuestComplete(0xE000D81B7BFA4EB9)))">
</If>
</Questing>
</Profile>]

Thank you for that but is there any way we can make the profile stop looting and harvesting, especially running to nods on the map.
 
Thank you for that but is there any way we can make the profile stop looting and harvesting, especially running to nods on the map.

Not sure if it still works, but we used to simply edit the "BuddyWingSettings.XML" file that you will find in the "Settings" folder under your character's name.
Look for :

<LootNpcs>true</LootNpcs> and change that to "false"

same with :

LootProfessionHarvestables>true</LootProfessionHarvestables>
 
Not sure if it still works, but we used to simply edit the "BuddyWingSettings.XML" file that you will find in the "Settings" folder under your character's name.
Look for :

<LootNpcs>true</LootNpcs> and change that to "false"

same with :

LootProfessionHarvestables>true</LootProfessionHarvestables>

Thanks that sometimes work sometimes the bot still loots and harvests. Why he does that I have no idea
 
Got some updates, since I've been playing DvL lately:

Vanguard/Tactics:
Code:
// Copyright (C) 2011-2016 Bossland GmbH
// See the file LICENSE for the source code's detailed license

using Buddy.BehaviorTree;
using DefaultCombat.Core;
using DefaultCombat.Helpers;

namespace DefaultCombat.Routines
{
	public class Tactics : RotationBase
	{
		public override string Name
		{
			get { return "Vanguard Tactics"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("High Energy Cell"),
					Spell.Buff("Fortification")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Tenacity"),
                    Spell.Buff("Shoulder Cannon", ret => Me.CurrentTarget.BossOrGreater()),
                    Spell.Buff("Recharge Cells", ret => Me.ResourcePercent() <= 50),
					Spell.Buff("Reactive Shield", ret => Me.HealthPercent <= 60),
					Spell.Buff("Adrenaline Rush", ret => Me.HealthPercent <= 30),
					Spell.Buff("Reserve Powercell", ret => Me.ResourceStat <= 60),
					Spell.Buff("Battle Focus")
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					//Movement
					Spell.Cast("Storm", ret => Me.CurrentTarget.Distance >= 1f && !DefaultCombat.MovementDisabled),
					CombatMovement.CloseDistance(Distance.Melee),
                    Spell.Cast("Shoulder Cannon", ret => Me.HasBuff("Shoulder Cannon") && Me.CurrentTarget.BossOrGreater()),
                    new Decorator(ret => Me.ResourcePercent() < 60,
						new PrioritySelector(
							Spell.Cast("High Impact Bolt", ret => Me.HasBuff("Tactical Accelerator")),
							Spell.Cast("Hammer Shot")
							)),
					Spell.Cast("Riot Strike", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
					Spell.Cast("Cell Burst", ret => Me.BuffCount("Energy Lode") == 4),
					Spell.Cast("High Impact Bolt",
						ret => Me.CurrentTarget.HasDebuff("Bleeding") && Me.HasBuff("Tactical Accelerator")),
					Spell.DoT("Gut", "Bleeding"),
					Spell.Cast("Assault Plastique", ret => Me.CurrentTarget.StrongOrGreater()),
					Spell.Cast("Stockstrike", ret => Me.ResourcePercent() >= 60),
					Spell.Cast("Tactical Surge", ret => Me.Level >= 26 && Me.ResourcePercent() >= 60),
					Spell.Cast("Ion Pulse", ret => Me.Level < 26 && Me.ResourcePercent() >= 60)
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new PrioritySelector(
					new Decorator(ret => Targeting.ShouldAoe,
						new PrioritySelector(
							Spell.CastOnGround("Mortar Volley"),
							Spell.Cast("Sticky Grenade", ret => Me.CurrentTarget.HasDebuff("Bleeding"))
							)),
					new Decorator(ret => Targeting.ShouldPbaoe,
						new PrioritySelector(
							Spell.Cast("Explosive Surge", ret => Me.ResourcePercent() >= 60))
						));
			}
		}
	}
}

Juggernaut/Vengeance:
Code:
// Copyright (C) 2011-2016 Bossland GmbH
// See the file LICENSE for the source code's detailed license

using Buddy.BehaviorTree;
using DefaultCombat.Core;
using DefaultCombat.Helpers;

namespace DefaultCombat.Routines
{
	internal class Vengeance : RotationBase
	{
		public override string Name
		{
			get { return "Juggernaut Vengeance"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Shien Form"),
					Spell.Buff("Unnatural Might")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Unleash", ret => Me.IsStunned),
					Spell.Buff("Enraged Defense", ret => Me.HealthPercent <= 50),
					Spell.Buff("Saber Reflect", ret => Me.HealthPercent <= 90),
					Spell.Buff("Saber Ward", ret => Me.HealthPercent <= 70),
					Spell.Buff("Endure Pain", ret => Me.HealthPercent <= 30),
					Spell.Buff("Enrage", ret => Me.ActionPoints <= 6)
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					Spell.Cast("Saber Throw",
						ret => !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 0.5f && Me.CurrentTarget.Distance <= 3f),
					Spell.Cast("Force Charge",
						ret => !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 1f && Me.CurrentTarget.Distance <= 3f),

					//Movement
					CombatMovement.CloseDistance(Distance.Melee),

					//Rotation
					Spell.Cast("Disruption", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
					Spell.Cast("Force Scream", ret => Me.BuffCount("Savagery") == 2),
					Spell.Cast("Vicious Throw", ret => Me.HasBuff("Destroyer") || Me.CurrentTarget.HealthPercent <= 30),
					Spell.Cast("Shatter"),
					Spell.Cast("Impale"),
					Spell.Cast("Sundering Assault", ret => Me.ActionPoints <= 7),
					Spell.Cast("Ravage"),
					Spell.Cast("Vicious Slash", ret => Me.ActionPoints >= 9),
					Spell.Cast("Assault", ret => Me.ActionPoints < 9),
					Spell.Cast("Retaliation")
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldPbaoe,
					new PrioritySelector(
						Spell.Cast("Vengeful Slam"),
						Spell.Cast("Smash"),
						Spell.Cast("Sweeping Slash")
						));
			}
		}
	}
}

Both work great, tested over many hours solo and in Flashpoints. Tactics especially destroys stuff in good gear. If anyone still has GIT rights (I lost my login info) please upload these to the base bot.
 
I think it was because the rotation was looking for TorPlayers but the companion is a TorNPC. They are both under the umbrella of TorCharacters though.

btw, here's Sage/Seer:
PHP:
// Copyright (C) 2011-2015 Bossland GmbH
// See the file LICENSE for the source code's detailed license

using Buddy.BehaviorTree;
using DefaultCombat.Core;
using DefaultCombat.Helpers;

namespace DefaultCombat.Routines
{
    internal class Seer : RotationBase
    {
        public override string Name
        {
            get { return "Sage Seer"; }
        }

        public override Composite Buffs
        {
            get
            {
                return new PrioritySelector(
                    Spell.Buff("Force Valor")
                    );
            }
        }

        public override Composite Cooldowns
        {
            get
            {
                return new PrioritySelector(
                    Spell.Buff("Force Potency", ret => Targeting.ShouldAoeHeal),
                    Spell.Buff("Mental Alacrity", ret => Targeting.ShouldAoeHeal),
                    Spell.Buff("Vindicate", ret => NeedForce()),
                    Spell.Buff("Force Mend", ret => Me.HealthPercent <= 75)
                    );
            }
        }

        public override Composite SingleTarget
        {
            get
            {
                return new PrioritySelector(
                    //Movement
                    CombatMovement.CloseDistance(Distance.Ranged),
                    Spell.Cast("Mind Snap", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
                    Spell.Cast("Force Stun", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
                    Spell.Cast("Forcequake", ret => Targeting.ShouldAoe),
                    Spell.Cast("Mind Crush"),
                    Spell.DoT("Weaken Mind", "Weaken Mind"),
                    Spell.Cast("Project"),
                    Spell.Cast("Telekinetic Throw"),
                    Spell.Cast("Disturbance")
                    );
            }
        }

        public override Composite AreaOfEffect
        {
            get
            {
                return new PrioritySelector(
                    //Cleanse if needed
                    Spell.Cleanse("Restoration"),

                    //Emergency Heal (Insta-cast)
                    Spell.Heal("Benevolence", 80, ret => Me.HasBuff("Altruism")),

                    //Aoe Heal
                    Spell.HealGround("Salvation", ret => Targeting.ShouldAoeHeal),

                    //Single Target Healing
                    Spell.Heal("Healing Trance", 80),
                    Spell.HoT("Force Armor", 90, ret => HealTarget != null && !HealTarget.HasDebuff("Force-imbalance")),

                    //Buff Tank
                    Spell.HoT("Force Armor", onUnit => Tank, 100, ret => Tank != null && Tank.InCombat && !Tank.HasDebuff("Force-imbalance")),
                    Spell.Heal("Wandering Mend", onUnit => Tank, 100,
                        ret => Tank != null && Tank.InCombat && Me.BuffCount("Wandering Mend Charges") <= 1),

                    //Use Force Bending
                    new Decorator(ret => Me.HasBuff("Conveyance"),
                        new PrioritySelector(
                            Spell.Heal("Healing Trance", 90),
                            Spell.Heal("Deliverance", 50)
                            )),

                    //Build Force Bending
                    Spell.HoT("Rejuvenate", 80),
                    Spell.HoT("Rejuvenate", onUnit => Tank, 100, ret => Tank != null && Tank.InCombat),

                    //Single Target Healing                  
                    Spell.Heal("Benevolence", 35),
                    Spell.Heal("Deliverance", 80)
                    );
            }
        }

        private bool NeedForce()
        {
            if (Me.ForcePercent <= 20)
                return true;
            if (Me.HasBuff("Resplendence") && Me.ForcePercent < 80 && !Me.HasBuff("Amnesty"))
                return true;
            return false;
        }
    }
}

and Commando/CombatMedic:
PHP:
// Copyright (C) 2011-2015 Bossland GmbH
// See the file LICENSE for the source code's detailed license

using Buddy.BehaviorTree;
using DefaultCombat.Core;
using DefaultCombat.Helpers;

namespace DefaultCombat.Routines
{
	internal class CombatMedic : RotationBase
	{
		public override string Name
		{
			get { return "Commando Combat Medic"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Fortification"),
					Spell.Buff("Combat Support Cell")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Tenacity"),
					Spell.Buff("Supercharged Cell",
						ret =>
							Me.ResourceStat >= 20 && HealTarget != null && HealTarget.HealthPercent <= 80 &&
							Me.BuffCount("Supercharge") == 10),
					Spell.Buff("Adrenaline Rush", ret => Me.HealthPercent <= 30),
					Spell.Buff("Reactive Shield", ret => Me.HealthPercent <= 70),
					Spell.Buff("Reserve Powercell", ret => Me.ResourceStat <= 60),
					Spell.Buff("Recharge Cells", ret => Me.ResourceStat <= 50),
					Spell.Cast("Tech Override", ret => Tank != null && Tank.HealthPercent <= 50)
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
                    //Movement
                    CombatMovement.CloseDistance(Distance.Ranged),
                    Spell.Cast("Disabling Shot", ret => Me.CurrentTarget.IsCasting),
                    Spell.Cast("High Impact Bolt"),
                    Spell.Cast("Full Auto"),
                    Spell.Cast("Charged Bolts", ret => Me.ResourceStat >= 70),
                    Spell.Cast("Hammer Shot")
                    );
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new PrioritySelector(

                    new Decorator(ret => Me.HasBuff("Supercharged Cell"),
						new PrioritySelector(
							Spell.HealGround("Kolto Bomb", ret => !Tank.HasBuff("Kolto Residue")),
							Spell.Heal("Bacta Infusion", 60),
							Spell.Heal("Advanced Medical Probe", 85)
							)),

					//Dispel
					Spell.Cleanse("Field Aid"),

                    //AoE Healing
                    Spell.HealAoe("Successive Treatment", ret => Targeting.ShouldAoeHeal),
                    Spell.HealGround("Kolto Bomb", ret => !Tank.HasBuff("Kolto Residue")),

					//Single Target Healing
					Spell.Heal("Bacta Infusion", 80),
					Spell.Heal("Advanced Medical Probe", 80),
					Spell.Heal("Medical Probe", 75),

                    //Keep Trauma Probe on Tank
                    Spell.HoT("Trauma Probe", 100),

                    //To keep Supercharge buff up; filler heal
                    Spell.Heal("Med Shot", onUnit => Tank, 100, ret => Tank != null && Me.InCombat)
					);
			}
		}
	}
}



has this been tested in a grp ?
 
For combat, i was referring to this guide: it seems to be pretty up to date and he is quite known in the swtor community. Hayete
I honestly dont know when the changes regarding saber throw being removed were changed. I only started playing swtor on patch 5.0. After doing a google search, it was before the latest expansion though. If you are not following a guide, how do you know the combat routines do at least half decent dps?
 
Sorry if i am being stupid guys but where can i find the SVN for the default with the latest updates ?!?!? it seems i am not able to find it anywhere
Thanks in advance
 
Back
Top