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!

alltrueist

Active Member
Joined
Dec 10, 2012
Messages
1,424
Hey all,
I'm going to set up this thread as a consolidated place for us to discuss and share new routine code for 4.0. At the moment, I'm tracking 4+ threads where people are suggesting different changes for different specs; it's too much.

I'm going to ask Cryogensis (or whomever can) to heavily moderate this thread: no outside discussions, no routine support, only code sharing and theorycrafting.

As of right now, I know the following rotations are working 100% smoothly:

Jedi Guardian/Defense
Jedi Sage/Balance
Scoundrel/Scrapper
Commando/Gunnery

RULES FOR THIS THREAD
1. Do not post support issues here. Please post issues with DefaultCombat in the general DefaultCombat thread.
2. Off-topic, arguments, and troll posts will not be tolerated.
3. If you have a suggestion, please post the following: What the rotation is currently doing; what the rotation SHOULD BE doing; EXACT names of buff/debuffs (including capitalization); specific dependencies (energy level above 60, etc.); what type of ability this is (single target, aoe, click on ground, defensive, offensive buff, etc.); who the target of the ability is (player, friendly target, enemy); anything else you can think of. The more information the better.

If you have already posted a fixed routine elsewhere, please also post it here.
 
FAQs:

Q. I want to help, but I can't code! What can I do?
A. You can still help! If you know of a rotation that's currently working, please help me translate it! Look at the list in the above post for rotations that are 100% working, and give me the mirror-class names for every ability, buff, and debuff. This requires no coding knowledge-- all you have to do is give me proper spelling and capitalization!
 
Posts not related to this thread will be deleted.
If you need support post them in the support page for general help or in defaultcombat if you need specific help for this routine.
 
over haul on Sniper Engineer tested and works
**EDIT** AOE update
Code:
// 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 Engineering : RotationBase
	{
		public override string Name
		{
			get { return "Sniper Engineering"; }
		}

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

		public override Composite Cooldowns
		{
			get
			{
				return new LockSelector(
					Spell.Buff("Escape"),
					Spell.Buff("Shield Probe", ret => Me.HealthPercent <= 50),
					Spell.Buff("Evasion", ret => Me.HealthPercent <= 30),
					Spell.Buff("Adrenaline Probe", ret => Me.EnergyPercent <= 50),
					Spell.Buff("Laze Target"),
					Spell.Cast("Target Acquired")
					);
			}
		}

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

                    //Low Energy

                    //Low Energy
                    new Decorator(ret => Me.EnergyPercent < 35,
                        new LockSelector(
                            Spell.Cast("Rifle Shot"),
                            Spell.Cast("Fragmentation Grenade", ret => Me.HasBuff("Energy Overrides"))
                            )),
                    //Rotation
                    Spell.Cast("Distraction", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
                    Spell.Cast("Series of Shots"),
                    Spell.Cast("EMP Discharge", ret => Me.CurrentTarget.HasDebuff("Interrogation Probe")),
                    Spell.CastOnGround("Plasma Probe", ret => Me.CurrentTarget.DebuffTimeLeft("Overwhelmed (Mental)") < 41),
                    Spell.Cast("Explosive Probe"),
                    Spell.Cast("Fragmentation Grenade", ret => Me.HasBuff("Energy Overrides")),
                    Spell.DoT("Interrogation Probe", "Interrogation Probe"),
                    Spell.DoT("Corrosive Dart", "Corrosive Dart"),
                    Spell.CastOnGround("Orbital Strike", ret => Me.EnergyPercent > 65),
                    Spell.Cast("Takedown", ret => Me.CurrentTarget.HealthPercent <= 30),
                    Spell.Cast("Fragmentation Grenade"),
                    Spell.Cast("Snipe", ret => Me.EnergyPercent > 75),
                    Spell.Cast("Rifle Shot")
                    );
            }
        }

        public override Composite AreaOfEffect
        {
            get
            {
                return new Decorator(ret => Targeting.ShouldAoe,
                    new LockSelector(
                        Spell.CastOnGround("Orbital Strike"),
                        Spell.CastOnGround("Plasma Probe", ret => Me.CurrentTarget.DebuffTimeLeft("Overwhelmed (Mental)") < 41),
                        Spell.Cast("Suppressive Fire")
                        ));
            }
        }
	}
}
 
Last edited:
My attempt at Immortal Jugg conversion:

Code:
// 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 Immortal : RotationBase
	{
		public override string Name
		{
			get { return "Juggernaut Immortal"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Soresu Form"),
					Spell.Buff("Unnatural Might"),
					Spell.Cast("Guard", on => Me.Companion,
						ret => Me.Companion != null && !Me.Companion.IsDead && !Me.Companion.HasBuff("Guard"))
					);
			}
		}

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

		public override Composite SingleTarget
		{
			get
			{
				return new LockSelector(
					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("Retaliation"),
					Spell.Cast("Crushing Blow"),
					Spell.Cast("Force Scream"),
					Spell.Cast("Aegis Assault", ret => Me.ActionPoints <= 7 || !Me.HasBuff("Aegis")),
					Spell.Cast("Smash", ret => !Me.CurrentTarget.HasDebuff("Unsteady (Force)") && Targeting.ShouldPbaoe),
					Spell.Cast("Backhand", ret => !Me.CurrentTarget.IsStunned),
					Spell.Cast("Ravage"),
					Spell.Cast("Vicious Throw", ret => Me.CurrentTarget.HealthPercent <= 30 || Me.HasBuff("War Bringer")),
					Spell.Cast("Vicious Slash", ret => Me.ActionPoints >= 9),
					Spell.Cast("Assault"),
					Spell.Cast("Saber Throw", ret => Me.CurrentTarget.Distance >= 0.5f && Me.InCombat)
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldPbaoe,
					new LockSelector(
						Spell.Cast("Smash"),
						Spell.Cast("Crushing Blow", ret => Me.HasBuff("Aegis")),
						Spell.Cast("Aegis Assault", ret => !Me.HasBuff("Aegis")),
						Spell.Cast("Retaliation"),
						Spell.Cast("Force Scream"),
						Spell.Cast("Sweeping Slash")
						));
			}
		}
	}
}
 
Mercenary - Arsenal

"Death From Above" in AOE doesn't need any (ret) conditions otherwhise it never uses it. I tested it. Probably same goes for mirror discipline (I think its Mortar Volley or smth like that there).
 
My Carnage Marauder
Code:
// 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 Carnage : RotationBase
	{
		public override string Name
		{
			get { return "Marauder Carnage"; }
		}

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

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

		public override Composite SingleTarget
		{
			get
			{
				return new LockSelector(
					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),
					Spell.Cast("Dual Saber Throw",
						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("Massacre", ret => !Me.HasBuff("Massacre")),
					Spell.Cast("Gore"),
					Spell.Cast("Ravage", ret => Me.HasBuff("Gore")),
					Spell.Cast("Vicious Throw"),
					Spell.Cast("Force Scream", ret => Me.HasBuff("Execute") && Me.Level < 58),
                    Spell.Cast("Devastating Blast", ret => Me.HasBuff("Execute") && Me.Level > 57),
					Spell.Cast("Massacre"),
                    Spell.Cast("Dual Saber Throw"),
					Spell.Cast("Battering Assault"),
					Spell.Cast("Assault")
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldPbaoe,
					new LockSelector(
						Spell.Cast("Smash"),
						Spell.Cast("Sweeping Slash")
						));
			}
		}
	}
}
 
My Carnage Marauder
Code:
// 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 Carnage : RotationBase
	{
		public override string Name
		{
			get { return "Marauder Carnage"; }
		}

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

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

		public override Composite SingleTarget
		{
			get
			{
				return new LockSelector(
					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),
					Spell.Cast("Dual Saber Throw",
						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("Massacre", ret => !Me.HasBuff("Massacre")),
					Spell.Cast("Gore"),
					Spell.Cast("Ravage", ret => Me.HasBuff("Gore")),
					Spell.Cast("Vicious Throw"),
					Spell.Cast("Force Scream", ret => Me.HasBuff("Execute") && Me.Level < 58),
                    Spell.Cast("Devastating Blast", ret => Me.HasBuff("Execute") && Me.Level > 57),
					Spell.Cast("Massacre"),
                    Spell.Cast("Dual Saber Throw"),
					Spell.Cast("Battering Assault"),
					Spell.Cast("Assault")
					);
			}
		}

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

Everything up to this post has been updated and uploaded. Will be in the next build.
 
I modified my Advanced Sentinel CR.
Just added few abilities that I use and was not there.
Take a look.
If you like it use it or suggest changes.

Code:
// 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 Combat : RotationBase
	{
		public override string Name
		{
			get { return "Sentinel Combat"; }
		}

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

		public override Composite Cooldowns
		{
			get
			{
				return new LockSelector(
					Spell.Buff("Resolute"),
					Spell.Buff("Rebuke", ret => Me.HealthPercent <= 90),
					Spell.Buff("Saber Reflect", ret => Me.HealthPercent <= 70),
					Spell.Buff("Saber Ward", ret => Me.HealthPercent <= 50),
					Spell.Buff("Heroic Moment", ret => Me.HealthPercent <= 30),
					Spell.Buff("Guarded by the Force", ret => Me.HealthPercent <= 20),
					Spell.Buff("Valorous Call", ret => Me.BuffCount("Centering") < 5),
					Spell.Buff("Zen", ret => Me.CurrentTarget.Distance <= 0.4f)
					);
			}
		}

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

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

					//Rotation
					Spell.Cast("Force Kick", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
					Spell.Cast("Force Stasis", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
					Spell.Cast("Dispatch", ret => Me.HasBuff("Hand of Justice") || Me.CurrentTarget.HealthPercent <= 30),
					Spell.Cast("Precision", ret => Me.CurrentTarget.Distance <= 0.4f),
					Spell.Cast("Blade Dance", ret => Me.HasBuff("Precision")),
					Spell.Cast("Clashing Blast", ret => Me.HasBuff("Opportune Attack") && Me.Level >= 57),
					Spell.Cast("Blade Storm", ret => Me.HasBuff("Opportune Attack") && Me.Level < 57),
					Spell.Cast("Blade Rush"),
					Spell.Cast("Slash", ret => Me.ActionPoints >= 7 && Me.Level < 26),
					Spell.Cast("Zealous Strike", ret => Me.ActionPoints <= 7),
					Spell.Cast("Strike", ret => Me.ActionPoints <= 10)
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldPbaoe,
					new LockSelector(
						Spell.Cast("Force Sweep"),
						Spell.Cast("Awe"),
						Spell.Cast("Cyclone Slash")
						));
			}
		}
	}
}

One thing I noticed is that bot never use "Dual Saber Throw": at least I didn't notice.
Any clue?
 
Last edited:
It doesn't use Twin Saber Throw, because you are using Dual Saber Throw which is the marauder mirror move.
 
I doubt heroic moment will do anything.
Heroic moment itself will be fired, but not the 8 spells behind It.
 
So for Sentinel Combat im looking at this code:
Code:
// Copyright (C) 2011-2015 Bossland GmbH
// See the file LICENSE for the source code's detailed license

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

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

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

		public override Composite Cooldowns
		{
			get
			{
				return new LockSelector(
					Spell.Buff("Resolute"),
					Spell.Buff("Rebuke", ret => Me.HealthPercent <= 90),
					Spell.Buff("Saber Reflect", ret => Me.HealthPercent <= 75),
					Spell.Buff("Saber Ward", ret => Me.HealthPercent <= 50),
					Spell.Buff("Force Camouflage", ret => Me.HealthPercent <= 50 && !Me.HasBuff("Saber Ward")),
					Spell.Buff("Guarded By The Force", ret => Me.HealthPercent <= 25 && !Me.HasBuff("Saber Ward") || !Me.HasBuff("Force Camouflage")),
					Spell.Buff("Valorous Call", ret => Me.BuffCount("Centering") < 5),
					Spell.Buff("Zen", ret => Me.CurrentTarget.Distance <= 0.4f),
					Spell.Cast("Pacify", ret => Me.CurrentTarget.StrongOrGreater() && !Me.CurrentTarget.BossOrGreater())
					);
			}
		}

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

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

					//Rotation
					Spell.Cast("Force Kick", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
					Spell.Cast("Force Stasis", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled && !Me.CurrentTarget.BossOrGreater()),
					Spell.Cast("Dispatch", ret => Me.HasBuff("Hand of Justice") || Me.CurrentTarget.HealthPercent <= 30),
					Spell.Cast("Precision", ret => Me.CurrentTarget.Distance <= 0.4f),
					Spell.Cast("Blade Dance", ret => Me.HasBuff("Precision")),
					Spell.Cast("Clashing Blast", ret => Me.HasBuff("Opportune Attack") && Me.Level >= 57),
					Spell.Cast("Blade Storm", ret => Me.HasBuff("Opportune Attack") && Me.Level < 57),
					Spell.Cast("Blade Rush"),
					Spell.Cast("Slash", ret => Me.ActionPoints >= 7 && Me.Level < 26),
					Spell.Cast("Zealous Strike", ret => Me.ActionPoints <= 7),
					Spell.Cast("Strike", ret => Me.ActionPoints <= 10)
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldPbaoe,
					new LockSelector(
						Spell.Cast("Force Sweep"),
						Spell.Buff("Awe", AbilityManager.CanCast("Force Sweep", Me.CurrentTarget) || AbilityManager.CanCast("Cyclone Slash", Me.CurrentTarget)),
						Spell.Cast("Cyclone Slash")
						));
			}
		}
	}
}
It has more defensive spells in it, one more spell cancel Force Statis and Awe for Multi targets.

I have to still check this code for bugs (ie if it runs) and i need to tweak it for engaging combat, low resource phase and burst phase. (Which i was doing months ago).
 
So for Sentinel Combat im looking at this code:
Code:
// Copyright (C) 2011-2015 Bossland GmbH
// See the file LICENSE for the source code's detailed license

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

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

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

		public override Composite Cooldowns
		{
			get
			{
				return new LockSelector(
					Spell.Buff("Resolute"),
					Spell.Buff("Rebuke", ret => Me.HealthPercent <= 90),
					Spell.Buff("Saber Reflect", ret => Me.HealthPercent <= 75),
					Spell.Buff("Saber Ward", ret => Me.HealthPercent <= 50),
					Spell.Buff("Force Camouflage", ret => Me.HealthPercent <= 50 && !Me.HasBuff("Saber Ward")),
					Spell.Buff("Guarded By The Force", ret => Me.HealthPercent <= 25 && !Me.HasBuff("Saber Ward") || !Me.HasBuff("Force Camouflage")),
					Spell.Buff("Valorous Call", ret => Me.BuffCount("Centering") < 5),
					Spell.Buff("Zen", ret => Me.CurrentTarget.Distance <= 0.4f),
					Spell.Cast("Pacify", ret => Me.CurrentTarget.StrongOrGreater() && !Me.CurrentTarget.BossOrGreater())
					);
			}
		}

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

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

					//Rotation
					Spell.Cast("Force Kick", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
					Spell.Cast("Force Stasis", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled && !Me.CurrentTarget.BossOrGreater()),
					Spell.Cast("Dispatch", ret => Me.HasBuff("Hand of Justice") || Me.CurrentTarget.HealthPercent <= 30),
					Spell.Cast("Precision", ret => Me.CurrentTarget.Distance <= 0.4f),
					Spell.Cast("Blade Dance", ret => Me.HasBuff("Precision")),
					Spell.Cast("Clashing Blast", ret => Me.HasBuff("Opportune Attack") && Me.Level >= 57),
					Spell.Cast("Blade Storm", ret => Me.HasBuff("Opportune Attack") && Me.Level < 57),
					Spell.Cast("Blade Rush"),
					Spell.Cast("Slash", ret => Me.ActionPoints >= 7 && Me.Level < 26),
					Spell.Cast("Zealous Strike", ret => Me.ActionPoints <= 7),
					Spell.Cast("Strike", ret => Me.ActionPoints <= 10)
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldPbaoe,
					new LockSelector(
						Spell.Cast("Force Sweep"),
						Spell.Buff("Awe", AbilityManager.CanCast("Force Sweep", Me.CurrentTarget) || AbilityManager.CanCast("Cyclone Slash", Me.CurrentTarget)),
						Spell.Cast("Cyclone Slash")
						));
			}
		}
	}
}
It has more defensive spells in it, one more spell cancel Force Statis and Awe for Multi targets.

I have to still check this code for bugs (ie if it runs) and i need to tweak it for engaging combat, low resource phase and burst phase. (Which i was doing months ago).

How do you code a burst phase?
 
Something along the lines of sequence and amount of resources.
Dont know how to pull it off right now.
 
Something along the lines of sequence and amount of resources.
Dont know how to pull it off right now.

Wouldn't "precision is on cooldown" and "precision is NOT on cooldown" be an easy way to organize the 2 routines?

NOTE: I don't play a Sentinel
 
It doesnt completely rely on precision.
I'll try to cook up something tomorrow...
 
I just tried your code out and it doesn't compile =/. Wasn't sure how far along it was.
Sorry, you are right.
Code:
// 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 Combat : RotationBase
	{
		public override string Name
		{
			get { return "Sentinel Combat"; }
		}

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

		public override Composite Cooldowns
		{
			get
			{
				return new LockSelector(
					Spell.Buff("Resolute"),
					Spell.Buff("Rebuke", ret => Me.HealthPercent <= 90),
					Spell.Buff("Saber Reflect", ret => Me.HealthPercent <= 75),
					Spell.Buff("Saber Ward", ret => Me.HealthPercent <= 50),
					Spell.Buff("Force Camouflage", ret => Me.HealthPercent <= 50 && !Me.HasBuff("Saber Ward")),
					Spell.Buff("Guarded By The Force", ret => Me.HealthPercent <= 25 && !Me.HasBuff("Saber Ward") || !Me.HasBuff("Force Camouflage")),
					Spell.Buff("Valorous Call", ret => Me.BuffCount("Centering") < 5),
					Spell.Buff("Zen", ret => Me.CurrentTarget.Distance <= 0.4f),
					Spell.Cast("Pacify", ret => Me.CurrentTarget.StrongOrGreater() && !Me.CurrentTarget.BossOrGreater())
					);
			}
		}

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

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

					//Rotation
					Spell.Cast("Force Kick", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
					Spell.Cast("Force Stasis", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled && !Me.CurrentTarget.BossOrGreater()),
					Spell.Cast("Dispatch", ret => Me.HasBuff("Hand of Justice") || Me.CurrentTarget.HealthPercent <= 30),
					Spell.Cast("Precision", ret => Me.CurrentTarget.Distance <= 0.4f),
					Spell.Cast("Blade Dance", ret => Me.HasBuff("Precision")),
					Spell.Cast("Clashing Blast", ret => Me.HasBuff("Opportune Attack") && Me.Level >= 57),
					Spell.Cast("Blade Storm", ret => Me.HasBuff("Opportune Attack") && Me.Level < 57),
					Spell.Cast("Blade Rush"),
					Spell.Cast("Slash", ret => Me.ActionPoints >= 7 && Me.Level < 26),
					Spell.Cast("Zealous Strike", ret => Me.ActionPoints <= 7),
					Spell.Cast("Strike", ret => Me.ActionPoints <= 10)
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldPbaoe,
					new LockSelector(
						Spell.Cast("Force Sweep"),
						Spell.Buff("Awe", !Buddy.CommonBot.AbilityManager.CanCast("Force Sweep", Me.CurrentTarget) || !Buddy.CommonBot.AbilityManager.CanCast("Cyclone Slash", Me.CurrentTarget)),
						Spell.Cast("Cyclone Slash")
						));
			}
		}
	}
}
This one should run.

If im right you had a CSXXXX error (where XXXX stands for a digit). The problem is with AbilityManager, that needs to be refered to Buddy.Commonbot.
 
Back
Top