Operative Concealment / Lethality Hello there Follow bellow updated rotations for operative concealment and lethality 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) ) ); } } } } Feedbacks are appreciated
Mercenary Innovative Ordnance Hello there Follow bellow alternative rotation for merc IO. Feedback would be awesome 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")) ); } } } }
@Cass put them here please -> https://www.thebuddyforum.com/buddy...-4-0-consolidated-changes-11.html#post2131510
PHP: Spell.Buff("Dark Ward", ret => Me.BuffCount("Dark Ward") <= 2 || Me.BuffTimeLeft("Dark Ward") < 3) seems its still not work, it will cast Dark Ward only when buff is COMPLETELY GONE i even tried to move it to single target rotation and change it into "Spell.Cast" but when i do that routine is broken so i guess its not way to make it work Spell.Buff ignore everything except "Me.HealthPercent" which is kinda sad..
I think BuffTimeLeft calculates in ms, doesn't it? If so, you'd want 3000 instead of 3. If I'm wrong then it sounds like that's an issue though.
Have the stealth issue been fixed yet for pvp? Would be awesome if it has or a way to work around it, thinking about going to get a BW license
Hello, English isn't my first language, so please excuse any mistakes. i am using this for my sentinal watchman i find that the original routine will not use Slash. this will make ur fousc always full and lose a lot dps i have mainly 220 gear (some 216) i have around 45xx dps when i use the current one for dummy (1.5M HP) but i will have around 49xx (almost 5k) dps if i added slash into routine. Feedback would be awesome Code: //Rotation Spell.Cast("Force Kick", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled), Spell.Buff("Zen", ret => Me.BuffCount("Centering") > 29), Spell.Buff("Valorous Call", ret => Me.BuffCount("Centering") < 5), Spell.Buff("Overload Saber", ret => !Me.HasBuff("Overload Saber")), Spell.DoT("Cauterize", "Burning (Cauterize)"), Spell.DoT("Force Melt", "Burning (Force Melt)"), Spell.Cast("Dispatch", ret => Me.CurrentTarget.HealthPercent <= 30), Spell.Cast("Merciless Slash"), Spell.Cast("Zealous Strike", ret => Me.ActionPoints <= 5), Spell.Cast("Blade Dance"), Spell.Cast("Slash"), Spell.Cast("Strike", ret => Me.ActionPoints <= 10) );
Dunno if it's just me but Assa darkness won't do my Depredating Volts even tho i changed it in the file Code: Spell.Cast("Depredating Volts", ret => Me.BuffCount("Harnessed Darkness") == 3), <-- since we don't have Force lightning after lvl 58 oki tested some more and it does cast it sometimes, but way to little considering it's prolly the hardest hitting ability we have...some help would be appriciated
So I've been tweaking the madness.cs file a bit but it still doesn't feel right. It'll cast force lightning 4-5 times after the proc to instant cast Lightning strike is up and it does the same with demolish when the proc is up.. Can someone shed some light as to why it's doing that and if i should change anything else? EDIT: also just wanted some help on a line of code and if it works itll be universal for all dps classes that need/have threat dropping spells. Spell.Buff("Cloud Mind"ret => Me.CurrentTarget.IsFocusTarget)) What I'm trying to do is make it cast Cloud mind when my currently selected target has me focused (e.g. I've pulled threat so i need to drop it to help tank asap). I'm pretty sure "IsFocusTarget" is wrong. EDIT 2: our profiles management of Demolish is terrible at the moment I need to know the code to set it to cast only when "Vulernable" debuff isn't on target.
That's because we had to switch from LockSelectors (which lock the frames to ensure that the bot executes the right ability) to PrioritySelectors (don't lock frames, better framerate). Try switching your PrioritySelectors to Lockselectors and see if that helps the problem. Be warned that it may lock up your FPS big time.
Heal targeting is still messed up. The profiles work great, they just don't target the right person :/
Thanks, I just fixed that problem. whoever coded the profile misspelt a spell or two and was forgetting one important spell in rotation. So it's casting everything in right priority now except for the demolish problem im having where its just being cast off cooldown or if you set it to the default profile it'll cast it randomly lol. Any chance you could tell me a line of code to use to allow me to cast demolish only when a debuff called vulnerable has 2 seconds left on it?
Still casting at exactly 23 seconds of debuff time left (i even changed it to 2000). How about an if command for it to cast only when debuff "vulnerable" is present? That way i don't mind it dropping off and it wont be over spamming the skill during critical rotation phase.
hey alltrueist, dude i love you - because you code the combat routines for that amazing game. currently i am playing a sorcerer - corruption (heal) and the routine is spamming heals do you need a logfile or do you know the problem ? best regards legit