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!

Would be super nice to have a custom interrupt list. Getting tired of having to do manual interrupts in raids. That possible?
 
Operative Concealment / Lethality

Hello there

Follow below updated rotations for operative dps. Feedbacks are welcome :o

Concealment

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
{
	public class Concealment : RotationBase
	{
		public override string Name
		{
			get { return "Operative Concealment"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Coordination"),
					Spell.Cast("Stealth", ret => !DefaultCombat.MovementDisabled && !Me.InCombat && !Me.HasBuff("Coordination"))
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Adrenaline Probe", ret => Me.EnergyPercent <= 45),
					Spell.Buff("Stim Boost", ret => Me.BuffCount("Tactical Advantage") < 2),
					Spell.Buff("Shield Probe", ret => Me.HealthPercent <= 75),
					Spell.Buff("Evasion", ret => Me.HealthPercent <= 50)
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					Spell.Cast("Backstab", ret => Me.IsStealthed && Me.IsBehind(Me.CurrentTarget)),

					//Movement
					CombatMovement.CloseDistance(Distance.Melee),
					new Decorator(ret => Me.ResourcePercent() < 60 && !Buddy.CommonBot.AbilityManager.CanCast("Adrenaline Probe", Me),
						new PrioritySelector(
							Spell.Cast("Rifle Shot")
							)),
					new Decorator(
						ret => 
						(Me.CurrentTarget.HasDebuff("Poisoned (Acid Blade)") || Me.CurrentTarget.HasDebuff("Corrosive Dart")) &&
						!Me.IsStealthed,
						new PrioritySelector(Spell.Cast("Volatile Substance")))
						,
					new Decorator(
						ret => 
						Me.HasBuff("Tactical Advantage") && 
						!Me.IsStealthed,
						new PrioritySelector(Spell.Cast("Laceration")))
						,
					new Decorator(
						ret => 
						(!Me.CurrentTarget.HasDebuff("Corrosive Dart") || Me.CurrentTarget.DebuffTimeLeft("Corrosive Dart") <= 2) &&
						!Me.IsStealthed,
						new PrioritySelector(Spell.Cast("Corrosive Dart")))
						,
					new Decorator(
						ret => 
						!Me.HasBuff("Tactical Advantage") &&
						!Me.IsStealthed,
						new PrioritySelector(Spell.Cast("Veiled Strike")))
						,
					new Decorator(
						ret => 
						!Me.HasBuff("Tactical Advantage") &&
						!Buddy.CommonBot.AbilityManager.CanCast("Veiled Strike", Me.CurrentTarget) &&
						Me.IsBehind(Me.CurrentTarget),
						new PrioritySelector(Spell.Cast("Backstab")))
						,
					new Decorator(
						ret => 
						!Me.HasBuff("Tactical Advantage") &&
						!Buddy.CommonBot.AbilityManager.CanCast("Veiled Strike", Me.CurrentTarget) &&
						!Buddy.CommonBot.AbilityManager.CanCast("Backstab", Me.CurrentTarget) &&
						!Me.IsStealthed,
						new PrioritySelector(Spell.Cast("Crippling Slice")))
						,
					new Decorator(
						ret => 
						!Me.HasBuff("Tactical Advantage") &&
						Me.EnergyPercent >= 87 &&
						!Buddy.CommonBot.AbilityManager.CanCast("Veiled Strike", Me.CurrentTarget) &&
						!Buddy.CommonBot.AbilityManager.CanCast("Crippling Slice", Me.CurrentTarget) &&
						!Buddy.CommonBot.AbilityManager.CanCast("Backstab", Me.CurrentTarget) &&
						!Me.IsStealthed,
						new PrioritySelector(Spell.Cast("Overload Shot")))
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldAoe,
					new PrioritySelector(
						Spell.Cast("Fragmentation Grenade"),
						Spell.Cast("Carbine Burst"))
					);
			}
		}
	}
}

Lethality

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
{
	public class Lethality : RotationBase
	{
		public override string Name
		{
			get { return "Operative Lethality"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Coordination"),
					Spell.Cast("Stealth", ret => !Me.InCombat && !Me.HasBuff("Coordination"))
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Adrenaline Probe", ret => Me.EnergyPercent <= 45),
					Spell.Buff("Stim Boost", ret => Me.BuffCount("Tactical Advantage") < 1)
				//	Spell.Buff("Shield Probe", ret => Me.HealthPercent <= 75)
				//	Spell.Buff("Evasion", ret => Me.HealthPercent <= 50)
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					Spell.Cast("Hidden Strike", ret => Me.IsStealthed && Me.IsBehind(Me.CurrentTarget)),

					//Movement
					CombatMovement.CloseDistance(Distance.Melee),
					Spell.Cast("Lethal Strike",	
						ret => 
						Me.IsStealthed)
						,
					Spell.Cast("Corrosive Dart", 
						ret => 
						(!Me.CurrentTarget.HasDebuff("Corrosive Dart") || Me.CurrentTarget.DebuffTimeLeft("Corrosive Dart") <= 2) &&
						!Me.IsStealthed)
						,
					Spell.Cast("Corrosive Grenade", 
						ret => 
					//	Me.HasBuff("Cut Down") && 
						(!Me.CurrentTarget.HasDebuff("Corrosive Grenade") || Me.CurrentTarget.DebuffTimeLeft("Corrosive Grenade") <= 2) &&
						!Me.IsStealthed)
						,
					Spell.Cast("Corrosive Assault", 
						ret => 
						Me.HasBuff("Tactical Advantage") && 
						Me.CurrentTarget.HasDebuff("Corrosive Dart") && 
						Me.CurrentTarget.HasDebuff("Corrosive Grenade") &&
						!Me.IsStealthed)
						,
					Spell.Cast("Toxic Blast", 
						ret => 
						Me.BuffCount("Tactical Advantage") < 2 && 
						Me.CurrentTarget.HasDebuff("Corrosive Dart") && 
						Me.CurrentTarget.HasDebuff("Corrosive Grenade") &&
						!Me.IsStealthed)
						,
					Spell.Cast("Shiv", 
						ret => 
						Me.BuffCount("Tactical Advantage") < 2 && 
						Me.CurrentTarget.HasDebuff("Corrosive Dart") && 
						Me.CurrentTarget.HasDebuff("Corrosive Grenade") &&
						!Buddy.CommonBot.AbilityManager.CanCast("Toxic Blast", Me.CurrentTarget) &&
						!Me.IsStealthed)
						,
					Spell.Cast("Lethal Strike",	
						ret => 
						Me.CurrentTarget.HasDebuff("Corrosive Dart") && 
						Me.CurrentTarget.HasDebuff("Corrosive Grenade"))
						,
					Spell.Cast("Overload Shot",	
						ret => 
						Me.EnergyPercent > 85 &&
						!Me.HasBuff("Tactical Advantage") && 
						!Buddy.CommonBot.AbilityManager.CanCast("Shiv", Me.CurrentTarget) &&
						!Buddy.CommonBot.AbilityManager.CanCast("Toxic Blast", Me.CurrentTarget) &&
						!Buddy.CommonBot.AbilityManager.CanCast("Lethal Strike", Me.CurrentTarget) &&
						Me.CurrentTarget.HasDebuff("Corrosive Dart") && 
						Me.CurrentTarget.HasDebuff("Corrosive Grenade") &&
						!Me.IsStealthed)
						,
					Spell.Cast("Rifle Shot",
						ret =>
						Me.EnergyPercent < 85 &&
						!Me.HasBuff("Tactical Advantage") && 
						!Buddy.CommonBot.AbilityManager.CanCast("Shiv", Me.CurrentTarget) &&
						!Buddy.CommonBot.AbilityManager.CanCast("Toxic Blast", Me.CurrentTarget) &&
						!Buddy.CommonBot.AbilityManager.CanCast("Lethal Strike", Me.CurrentTarget) &&
						Me.CurrentTarget.HasDebuff("Corrosive Dart") && 
						Me.CurrentTarget.HasDebuff("Corrosive Grenade") &&
						!Me.IsStealthed)
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldAoe,
					new PrioritySelector(
						Spell.Cast("Corrosive Grenade", 
							ret => 
							!Me.CurrentTarget.HasDebuff("Corrosive Grenade") &&
							!Me.IsStealthed)
							,
						Spell.Cast("Fragmentation Grenade", 
							ret => 
							Me.CurrentTarget.HasDebuff("Corrosive Grenade") &&
							!Me.IsStealthed)
							,
						Spell.Cast("Carbine Burst", 
							ret => 
							Me.CurrentTarget.HasDebuff("Corrosive Grenade") &&
							!Me.IsStealthed)
						)
					);
			}
		}
	}
}
 
Mercenary IO

Hello there

Bellow there is a alternative rotation for merc IO for feedback.

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
{
	public class InnovativeOrdnance : RotationBase
	{
		public override string Name
		{
			get { return "Mercenary Innovative Ordnance"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Combustible Gas Cylinder"),
					Spell.Buff("Hunter's Boon")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Determination", ret => Me.IsStunned),
					Spell.Buff("Supercharged Gas", ret => Me.BuffCount("Supercharge") == 10),
					Spell.Buff("Thermal Sensor Override", ret => Me.InCombat && Me.CurrentTarget.BossOrGreater()),
					Spell.Buff("Vent Heat", ret => Me.ResourcePercent() >= 50),
					Spell.Buff("Energy Shield", ret => Me.HealthPercent <= 50),
					Spell.Buff("Kolto Overload", ret => Me.HealthPercent <= 30)
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new LockSelector(

					//Movement
					CombatMovement.CloseDistance(Distance.Ranged),
					new Decorator(ret => Me.ResourcePercent() > 40 && !Buddy.CommonBot.AbilityManager.CanCast("Vent Heat", Me),
						new PrioritySelector(
							Spell.Cast("Mag Shot", ret => Me.HasBuff("Innovative Particle Accelerator")),
							Spell.Cast("Rapid Shots")
							)),

					//Rotation
					Spell.Cast("Disabling Shot",
						ret =>
							Me.CurrentTarget.IsCasting && Me.CurrentTarget.Distance <= Distance.Melee && !DefaultCombat.MovementDisabled),
					new Decorator(
						ret => 
						!Me.CurrentTarget.HasDebuff("Burning (Incendiary Missile)") || Me.CurrentTarget.DebuffTimeLeft("Burning (Incendiary Missile)") <= 2,
						new PrioritySelector(Spell.Cast("Incendiary Missile")))
						,
					new Decorator(
						ret => 
						Me.HasBuff("Innovative Particle Accelerator"),
						new PrioritySelector(Spell.Cast("Mag Shot")))
						,
					new Decorator(
						ret => 
						!Me.CurrentTarget.HasDebuff("Bleeding") || Me.CurrentTarget.DebuffTimeLeft("Bleeding") <= 2,
						new PrioritySelector(Spell.Cast("Serrated Shot")))
						,
					new Decorator(
						ret => 
						Me.BuffCount("Surging Shots") == 10,
						new PrioritySelector(Spell.Cast("Power Shot")))
						,
					new Decorator(
						ret => 
						Me.CurrentTarget.HasDebuff("Burning (Incendiary Missile)") &&
						Me.CurrentTarget.HasDebuff("Bleeding") &&
						!Me.HasBuff("Innovative Particle Accelerator"),
						new PrioritySelector(
							Spell.Cast("Thermal Detonator"),
							Spell.Cast("Electro Net"),
							Spell.Cast("Unload"),
							Spell.Cast("Missile Blast", ret => Me.HasBuff("Volatile Warhead")),
							Spell.Cast("Power Shot")))
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldAoe,
					new PrioritySelector(
						Spell.CastOnGround("Death from Above"),
						Spell.Cast("Fusion Missle", ret => Me.HasBuff("Thermal Sensor Override")),
						Spell.Cast("Explosive Dart"))
					);
			}
		}
	}
}
 
Would be nice if you guys. those who posted the new routines, would underbuild there new rotation with DPS numbers.
Is it an increase then the devs can implement it. If you added stuff to make it more dynamic / wider in spell usage, please also state it :)
More info why you made changes, the better they can understand why you did it and if its a viable alternative or new main rotation.
 
The rotations for operative that come with defaultcombat are not 4.0 compliant with old skills and missing the new ones.

About the merc IO since my char its not well geared so i couldnt use as a proper dps value.

As the PrioritySelector seems to skip some parts of the rotations. I tried to use decorators as a way to ensure that the conditionals are met when executing it, without sacrificing fps. It seems to help a bit, at least for me, but not 100%. Thats why i asked the feedback for.;)
 
I was looking at the routine for Advanced Prototype and noticed something that may cause it to not work right.

//Low Energy
new Decorator(ret => Me.ResourcePercent() < 50,
new PrioritySelector(
Spell.Cast("Rail Shot", ret => Me.HasBuff("Prototype Particle Accelerator")),
Spell.Cast("Rapid Shots")
)),

On a bounty hunter, heat starts at 0 resources and goes up as you use abilities. The code says to use rapid shots when below 50 heat. It should be > 50 so it will only use it once you have used half your heat. I personally changed it to >75 and noticed a huge increase in dps in PVP. Probably just a small typo when it was being coded.
 
Tweaked a bit on the Mercenary Arsenal rotation. Its very good as it is in DefaultCombat, so it might not be worth it to implement. I did 3 rounds on 1.5M dummy on my ship with Default, and calculated an average, then 3 rounds with my added tweaks. The difference was 55 dps, so it was not really that much. (From average 4901 to 4956)

What i like about it, is that i implement the usage of Power Surge to pop a couple of fast Tracer Missiles. (I do have the talent, so i guess without that the difference would be very little).

Anyway:
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
{
	public class Arsenal : RotationBase
	{
		public override string Name
		{
			get { return "Mercenary Arsenal"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("High Velocity Gas Cylinder"),
					Spell.Buff("Hunter's Boon")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Determination", ret => Me.IsStunned),
					Spell.Buff("Vent Heat", ret => Me.ResourcePercent() >= 60),
					Spell.Buff("Supercharged Gas", ret => Me.BuffCount("Supercharge") == 10),
					Spell.Buff("Energy Shield", ret => Me.HealthPercent <= 60),
					Spell.Buff("Emergency Scan", ret => Me.HealthPercent <= 40),
					Spell.Buff("Kolto Overload", ret => Me.HealthPercent <= 30),
					Spell.Buff("Power Surge", ret => !Me.HasBuff("Barrage"))
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					//Movement
					CombatMovement.CloseDistance(Distance.Ranged),
		
					//Interrupts
					Spell.Cast("Disabling Shot", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
					Spell.Cast("Electro Dart", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
					
					//Rotation
					Spell.Cast("Rapid Shots", ret => Me.ResourcePercent() > 70),
					Spell.Cast("Blazing Bolts", ret => Me.HasBuff("Barrage") && Me.Level >= 57),
					Spell.Cast("Unload", ret => Me.Level < 57),
					Spell.Cast("Priming Shot", ret => !Me.HasBuff("Power Surge")),
					Spell.Cast("Heatseeker Missiles", ret => Me.CurrentTarget.HasDebuff("Heat Signature")),
					Spell.Cast("Rail Shot", ret => Me.BuffCount("Tracer Lock") == 5),
					Spell.Cast("Electro Net"),
					Spell.Cast("Tracer Missile", ret => !Me.HasBuff("Barrage")),
					Spell.Cast("Rapid Shots", ret => Me.BuffCount("Tracer Lock") < 5 && !Me.HasBuff("Barrage"))
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldAoe,
					new PrioritySelector(
						Spell.Buff("Thermal Sensor Override"),
						Spell.Buff("Power Surge"),
						Spell.CastOnGround("Death from Above"),
						Spell.Cast("Fusion Missile", ret => Me.ResourcePercent() <= 10 && Me.HasBuff("Power Surge")),
						Spell.Cast("Flame Thrower", ret => Me.CurrentTarget.Distance <= 1f),
						Spell.CastOnGround("Sweeping Blasters", ret => Me.ResourcePercent() <= 60))
					);
			}
		}
	}
}

C
 
Last edited:
Hello there

Bellow there is a alternative rotation for merc IO for feedback.
Did a test with your rotation, and although not testing many rounds on the 1.5M dummy, dps increased vs. the DefaultCombat rotation. Increasing 364 dps (from 3296 -> 3660 in my gear and level 65). However, reading guides on Dulfy it states IO should be slightly above Arsenal but has a more difficult rotation. The test i did was a lot lower than my Arsenal rotation, so i think some more work need to be done :)

And i felt some lagging while running it, so it may need some work on that part aswell.

C
 
Last edited:
Did a test with your rotation, and although not testing many rounds on the 1.5M dummy, dps increased vs. the DefaultCombat rotation. Increasing 364 dps (from 3296 -> 3660 in my gear and level 65). However, reading guides on Dulfy it states IO should be slightly above Arsenal but has a more difficult rotation. The test i did was a lot lower than my Arsenal rotation, so i think some more work need to be done :)

And i felt some lagging while running it, so it may need some work on that part aswell.

C

Thanks for the feedback.
The lag come from a Lockselector on the rotation to ensure that doesnt skip conditionals. If we change the lockselector from the io rotation it will be even worse dps.
Indeed arsenal its more reliable to use with bw.
 
The new Operative-Concealment seems to be much slower than the earlier version. Granted Im only level 13, it has a lot of downtime.
 
The new Operative-Concealment seems to be much slower than the earlier version. Granted Im only level 13, it has a lot of downtime.
Can you check, the routine for the basic rotation if its in?
I think in the advanced routines you miss to many low level spells.

What you can do is copy them over in the advanced one and give that a go.
 
The new Operative-Concealment seems to be much slower than the earlier version. Granted Im only level 13, it has a lot of downtime.

Concealment at lv 13 dont have enough fillers between shiv and laceration, and backstab have to be in the back of the target what sometimes isnt achievable when soloing stuff on leveling.

In case you tried the rotation i posted it doesnt have rifle shot so it wont mess with priorityselector. In some cases it will keep casting rifle shot regardless of shiv or laceration being available. And its coded for lv65.

You can replace the "Veiled Strike" parts for "Shiv" and you can add the same code for overload shot below it replacing for rifle shot and changing one conditional: Me.EnergyPercent >= 87 for Me.EnergyPercent < 87.

I guess that should help you until lv58 thats when you learn veiled strike ;)
 
Concealment at lv 13 dont have enough fillers between shiv and laceration, and backstab have to be in the back of the target what sometimes isnt achievable when soloing stuff on leveling.

In case you tried the rotation i posted it doesnt have rifle shot so it wont mess with priorityselector. In some cases it will keep casting rifle shot regardless of shiv or laceration being available. And its coded for lv65.

You can replace the "Veiled Strike" parts for "Shiv" and you can add the same code for overload shot below it replacing for rifle shot and changing one conditional: Me.EnergyPercent >= 87 for Me.EnergyPercent < 87.

I guess that should help you until lv58 thats when you learn veiled strike ;)

You can also make this part of the base code by using Me.Level <58 and Me.Level >= 58 for each item. You can find examples of this in several other routines that get a key rotational replacement at a higher level.
 
Example would be

Code:
Spell.Cast("Magnetic Blast", ret => Me.Level >= 26),
Spell.Cast("Flame Burst", ret => Me.Level < 26)
 
Back
Top