Cryogenesis
Community Developer
- Joined
- Jul 13, 2010
- Messages
- 2,128
I can run the numbers for You tonight. Ilvl 220.is anyone here tryend sentinel any spec on dummy with endgame gear or close to endgame gear on ops dummy ? dps
I can run the numbers for You tonight. Ilvl 220.is anyone here tryend sentinel any spec on dummy with endgame gear or close to endgame gear on ops dummy ? dps
// 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"))
);
}
}
}
}
// 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)
)
);
}
}
}
}
// 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"))
);
}
}
}
}
Spell.Buff("Dark Ward", ret => Me.BuffCount("Dark Ward") <= 2 || Me.BuffTimeLeft("Dark Ward") < 3)
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 workSpell.Buff ignore everything except "Me.HealthPercent" which is kinda sad..
tried even with 3000 instead 3 but it still cast ward only after buff vanishI 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.
//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)
);
Spell.Cast("Depredating Volts", ret => Me.BuffCount("Harnessed Darkness") == 3), <-- since we don't have Force lightning after lvl 58
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.
Also how are the healing profiles for sorc or any other class in general?
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.
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?
Spell.Cast("Demolish", ret => Me.CurrentTarget.DebuffTimeLeft("Vulnerable") <= 2),
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.Try this:
Code:Spell.Cast("Demolish", ret => Me.CurrentTarget.DebuffTimeLeft("Vulnerable") <= 2),