Thanks for the info !!
Gonna see if this works the way i want it and hope![]()
Have you had any success with this? Can you post your rotation?
Thanks for the info !!
Gonna see if this works the way i want it and hope![]()
using Buddy.BehaviorTree;
using DefaultCombat.Core;
using DefaultCombat.Helpers;
namespace DefaultCombat.Routines
{
class Combat : RotationBase
{
public override string Name { get { return "Sentinel Combat"; } }
public override Composite Buffs
{
get
{
return new PrioritySelector(
//Handling Buffs
);
}
}
public override Composite Cooldowns
{
get
{
return new LockSelector(
//Handling Cooldowns
);
}
}
private Composite HandleEngage
{
get
{
return new LockSelector(
//CastOrder: Twin Saber Throw - Force Leap - Zealous Strike
);
}
}
private Composite HandleFillerMS
{
get
{
return new LockSelector(
//CastOrder: Zen - Precision - Master Strike - Clashing Blast
);
}
}
private Composite HandleFillerDP
{
get
{
return new LockSelector(
//CastOrder: Precision - Dispatch - Clashing Blast
);
}
}
public override Composite SingleTarget
{
get
{
return new LockSelector(
//Engage Combat
new Decorator(ret => !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 1f && Me.CurrentTarget.Distance <= 3f, HandleEngage),
//Movement
CombatMovement.CloseDistance(Distance.Melee),
//Rotation
Spell.Cast("Force Kick", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
Spell.Cast("Zealous Strike", ret => Me.ActionPoints <= 6 && !Me.HasBuff("Precision")), // Go zealous strike if we are low on AP (private composite is not needed really, one line will do)
new Decorator(ret => Is Precision+ZEN+MS+OppertuneAttack Ready?, HandleFillerMS), // Check for Master Strike Filler
new Decorator(ret => Is Precision+Dispatch+OppertuneAttack Ready?, HandleFillerDP), // Check for Dispatch Filler
Spell.Cast("Blade Storm", ret => (Me.HasBuff("Opportune Attack") && Me.Level >= 28 && Me.Level < 57) || Me.Level < 28),
Spell.Cast("Blade Rush"),
Spell.Cast("Slash", ret => Me.ActionPoints >= 7 && Me.Level < 26),
Spell.Cast("Strike", ret => Me.ActionPoints <= 10)
);
}
}
/* Old code
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("Dual Saber Throw", ret => !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 1f && Me.CurrentTarget.Distance <= 3f && !Me.HasBuff("Precision")),
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("Zealous Strike", ret => Me.ActionPoints <= 7 && !Me.HasBuff("Precision")),
Spell.Cast("Precision", ret => Me.CurrentTarget.Distance <= 0.4f),
Spell.Cast("Master Strike", ret => (Me.HasBuff("Precision") && (Me.HasBuff("Zen") || (Me.Level >= 30 && Me.Level < 60))) || Me.Level < 30),
Spell.Cast("Dispatch", ret => Me.HasBuff("Hand of Justice") || Me.CurrentTarget.HealthPercent <= 30),
Spell.Cast("Clashing Blast", ret => Me.HasBuff("Opportune Attack") && Me.Level >= 57),
Spell.Cast("Blade Storm", ret => (Me.HasBuff("Opportune Attack") && Me.Level >= 28 && Me.Level < 57) || Me.Level < 28),
Spell.Cast("Blade Rush"),
Spell.Cast("Slash", ret => Me.ActionPoints >= 7 && Me.Level < 26),
Spell.Cast("Strike", ret => Me.ActionPoints <= 10)
);
}
}
*/
public override Composite AreaOfEffect
{
get
{
return new Decorator(ret => Targeting.ShouldPBAOE,
new LockSelector(
//Handle AOE Rotation
)
);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using Buddy.BehaviorTree;
using Buddy.Swtor;
using Buddy.Swtor.Objects;
using PureSWTor.Helpers;
using PureSWTor.Core;
using PureSWTor.Managers;
using Action = Buddy.BehaviorTree.Action;
using Distance = PureSWTor.Helpers.Global.Distance;
namespace PureSWTor.Classes.Commando
{
class Gunnery : RotationBase
{
#region Overrides of RotationBase
public override string Revision
{
get { return ""; }
}
public override CharacterDiscipline KeySpec
{
get { return CharacterDiscipline.Gunnery; }
}
public override string Name
{
get { return "Commando Gunnery by alltrueist"; }
}
public override Composite PreCombat
{
get
{
return new PrioritySelector(
Spell.Buff("Armor-piercing Cell"),
Spell.Buff("Fortification"),
Rest.HandleRest
);
}
}
private Composite HandleCoolDowns
{
get
{
return new LockSelector(
Spell.Buff("Tenacity"),
MedPack.UseItem(ret => Me.HealthPercent <= 40),
Spell.Buff("Reactive Shield", ret => Me.HealthPercent <= 70),
Spell.Buff("Adrenaline Rush", ret => Me.HealthPercent <= 30),
Spell.Buff("Recharge Cells", ret => Me.ResourceStat <= 40),
Spell.Buff("Supercharged Cell", ret => Me.BuffCount("Supercharge") == 10),
Spell.Buff("Reserve Powercell", ret => Me.ResourceStat <= 60)
);
}
}
private Composite HandleLowCells
{
get
{
return new LockSelector(
Spell.Cast("Hammer Shot")
);
}
}
private Composite HandleSingleTarget
{
get
{
return new LockSelector(
//Movement
CloseDistance(Distance.Ranged),
Spell.Cast("Disabling Shot", ret => Me.CurrentTarget.IsCasting && !LazyRaider.MovementDisabled),
Spell.Cast("Boltstorm", ret => Me.HasBuff("Curtain of Fire") && Me.Level >= 57),
Spell.Cast("Full Auto", ret => Me.HasBuff("Curtain of Fire") && Me.Level < 57),
Spell.Cast("Demolition Round", ret => Me.CurrentTarget.HasDebuff("Gravity Vortex")),
Spell.Cast("Electro Net", ret => Me.CurrentTarget.StrongOrGreater()),
Spell.Cast("Vortex Bolt"),
Spell.Cast("High Impact Bolt", ret => Me.BuffCount("Charged Barrel") == 5),
Spell.Cast("Grav Round")
);
}
}
private Composite HandleAOE
{
get
{
return new Decorator(ret => ShouldAOE(2, Distance.MeleeAoE),
new LockSelector(
Spell.Cast("Tech Override"),
Spell.CastOnGround("Mortar Volley", ret => Me.CurrentTarget.Distance > 0.5f),
Spell.Cast("Plasma Grenade", ret => Me.ResourceStat >= 90 && Me.HasBuff("Tech Override")),
Spell.Cast("Pulse Cannon", ret => Me.CurrentTarget.Distance <= 1f),
Spell.CastOnGround("Hail of Bolts", ret => Me.ResourceStat >= 90)
));
}
}
private class LockSelector : PrioritySelector
{
public LockSelector(params Composite[] children)
: base(children)
{
}
public override RunStatus Tick(object context)
{
using (BuddyTor.Memory.AcquireFrame())
{
return base.Tick(context);
}
}
}
public override Composite PVERotation
{
get
{
return new PrioritySelector(
Spell.WaitForCast(),
HandleCoolDowns,
HandleAOE,
new Decorator(ret => Me.ResourcePercent() < 60, HandleLowCells),
new Decorator(ret => Me.ResourcePercent() >= 60, HandleSingleTarget)
);
}
}
public override Composite PVPRotation
{
get { return PVERotation; }
}
#endregion
}
}
public override Composite SingleTarget
{
get
{
return new LockSelector(
//Movement
CombatMovement.CloseDistance(Distance.Ranged),
//Low Energy
new Decorator(ret => Me.EnergyPercent < 60,
new LockSelector(
Spell.Cast("Rifle Shot")
)),
//Rotation
Spell.Cast("Distraction", ret => Me.CurrentTarget.IsCasting),
Spell.Buff("Crouch", ret => !Me.IsInCover() && !Me.IsMoving),
Spell.Cast("Followthrough"),
Spell.Cast("Penetrating Blasts", ret => Me.IsInCover() && Me.Level >= 26),
Spell.Cast("Series of Shots", ret => Me.IsInCover() && Me.Level < 26),
Spell.DoT("Corrosive Dart", "Poisoned (Corrosive Dart)"),
Spell.Cast("Ambush", ret => Me.IsInCover() && Me.BuffCount("Zeroing Shots") == 2),
Spell.Cast("Takedown", ret => Me.CurrentTarget.HealthPercent <= 30),
Spell.Cast("Snipe", ret => Me.IsInCover()),
Spell.Cast("Overload Shot", ret => !Me.IsInCover())
);
}
}
Yes but you need Combat Bot.xml to manually move.Ok so, no matter what class I have in game, all I need is the defaultcombat routine here and it will work as a basic rotation for PvE?
More accurately, I would like to control my character myself, enter combat manually, and it will cast my spells in an efficient manner for me?
Alright thanksYes but you need Combat Bot.xml to manually move.
download it from here: http://kicks-swtor-scripts.googlecode.com/svn/trunk/Useful Profiles/
using Buddy.BehaviorTree;
using DefaultCombat.Core;
using DefaultCombat.Helpers;
namespace DefaultCombat.Routines
{
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 && !Me.HasBuff("Precision")),
Spell.Buff("Saber Reflect", ret => Me.HealthPercent <= 70 && !Me.HasBuff("Precision")),
//Spell.Buff("Awe", ret => Me.HealthPercent <= 50 && Me.Level < 60 && Targeting.CheckDPSAOE(2, Distance.MeleeAoE, Me.Position) && !Me.HasBuff("Precision")),
Spell.Buff("Saber Ward", ret => Me.HealthPercent <= 50 && !Me.HasBuff("Precision")),
//Spell.Buff("Heroic Moment: Call on the Force", ret => Me.HealthPercent <= 10 && Me.Companion != null && !Me.HasBuff("Precision")),
//Spell.Buff("Guarded by the Force", ret => Me.HealthPercent <= 5),
Spell.Buff("Valorous Call", ret => Me.BuffCount("Centering") < 5 && !Me.HasBuff("Precision")),
Spell.Buff("Zen", ret => Me.CurrentTarget.Distance <= 0.4f && !Me.HasBuff("Precision")),
Spell.Cast("Precision", ret => Me.CurrentTarget.Distance <= 0.4f && (Buddy.CommonBot.AbilityManager.CanCast("Master Strike", Me.CurrentTarget) || Buddy.CommonBot.AbilityManager.CanCast("Dispatch", Me.CurrentTarget)))
);
}
}
public override Composite SingleTarget
{
get
{
return new LockSelector(
new Decorator(ret => Me.CurrentTarget.Distance >= 1f && Me.CurrentTarget.Distance <= 3f && !Me.HasBuff("Precision"),
new LockSelector(
Spell.Cast("Twin Saber Throw"),
Spell.Cast("Force Leap"),
Spell.Cast("Zealous Strike", ret => Me.ActionPoints <= 7)
)),
//Movement
CombatMovement.CloseDistance(Distance.Melee),
//Rotation
Spell.Cast("Force Kick", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
//Filler Master Strike
new Decorator(ret => Me.HasBuff("Precision") && Me.HasBuff("Zen"),
new LockSelector(
Spell.Cast("Master Strike"),
Spell.Cast("Clashing Blast", ret => Me.HasBuff("Opportune Attack") && Me.Level >= 57)
)),
//Filler Dispatch
new Decorator(ret => Me.HasBuff("Precision"),
new LockSelector(
Spell.Cast("Dispatch", ret => Me.HasBuff("Hand of Justice") || Me.CurrentTarget.HealthPercent <= 30),
Spell.Cast("Clashing Blast", ret => Me.HasBuff("Opportune Attack") && Me.Level >= 57)
)),
Spell.Cast("Clashing Blast", ret => Me.HasBuff("Opportune Attack") && Me.Level >= 57 && (!Buddy.CommonBot.AbilityManager.CanCast("Master Strike", Me.CurrentTarget) || !Buddy.CommonBot.AbilityManager.CanCast("Dispatch", Me.CurrentTarget))),
//Other Filler
Spell.Cast("Blade Rush"),
Spell.Cast("Zealous Strike", ret => Me.ActionPoints <= 6),
Spell.Cast("Slash", ret => Me.ActionPoints >= 7 && Me.Level < 26),
Spell.Cast("Strike", ret => Me.ActionPoints <= 10)
);
}
}
public override Composite AreaOfEffect
{
get
{
return new Decorator(ret => Targeting.ShouldPBAOE,
new LockSelector(
Spell.Cast("Precision", ret => Me.CurrentTarget.Distance <= 0.4f),
Spell.Cast("Legacy Force Sweep"),
Spell.Cast("Force Sweep"),
Spell.Cast("Cyclone Slash")
)
);
}
}
}
}
Thx for the reply and info...If you're having issues just clamp the ActionPoints values on both sides. I struggled so much with this on my Guardian rotations-- you can tweak and tweak and never figure out the "correct" value. It sounds like you're low, do you know which spell is using force points but not doing much for DPS? That would the spell to add an ActionPoints > x clamp to. Otherwise, you'll just have to lower the requirements for Strike-- I know the Guardian routines have it at 9.
Otherwise it all looks good. I'm glad you got the cooldown checks to work, I was never able to get them to work. It also sounds like the multiple Decorators had a massive impact (+500 dps), so that's good.
[18:34:40.853 N] [DefaultCombat] >> Casting << Force Leap
[18:34:41.664 N] [DefaultCombat] >> Casting << Zen
[18:34:42.422 N] [DefaultCombat] >> Casting << Precision
[18:34:42.595 N] [DefaultCombat] >> Casting << Master Strike
[18:34:45.185 N] [DefaultCombat] >> Casting << Blade Rush
[18:34:46.317 N] [DefaultCombat] >> Casting << Zealous Strike
[18:34:47.461 N] [DefaultCombat] >> Casting << Clashing Blast
[18:34:48.618 N] [DefaultCombat] >> Casting << Blade Rush
[18:34:52.427 N] [DefaultCombat] >> Casting << Precision
[18:34:52.612 N] [DefaultCombat] >> Casting << Dispatch
[18:34:54.098 N] [DefaultCombat] >> Casting << Strike
[18:34:55.585 N] [DefaultCombat] >> Casting << Clashing Blast
[18:34:57.053 N] [DefaultCombat] >> Casting << Zealous Strike
[18:34:58.563 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:03.055 N] [DefaultCombat] >> Casting << Strike
[18:35:04.540 N] [DefaultCombat] >> Casting << Precision
[18:35:04.667 N] [DefaultCombat] >> Casting << Dispatch
[18:35:06.134 N] [DefaultCombat] >> Casting << Strike
[18:35:07.651 N] [DefaultCombat] >> Casting << Clashing Blast
[18:35:07.764 N] [DefaultCombat] >> Casting << Zen
[18:35:09.153 N] [DefaultCombat] >> Casting << Clashing Blast
[18:35:10.293 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:13.769 N] [DefaultCombat] >> Casting << Zealous Strike
[18:35:15.026 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:16.189 N] [DefaultCombat] >> Casting << Clashing Blast
[18:35:17.697 N] [DefaultCombat] >> Casting << Precision
[18:35:17.895 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:19.401 N] [DefaultCombat] >> Casting << Strike
[18:35:20.931 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:22.413 N] [DefaultCombat] >> Casting << Strike
[18:35:23.972 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:25.531 N] [DefaultCombat] >> Casting << Zealous Strike
[18:35:27.093 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:30.044 N] [DefaultCombat] >> Casting << Precision
[18:35:30.235 N] [DefaultCombat] >> Casting << Dispatch
[18:35:31.701 N] [DefaultCombat] >> Casting << Strike
[18:35:33.189 N] [DefaultCombat] >> Casting << Clashing Blast
[18:35:33.298 N] [DefaultCombat] >> Casting << Zen
[18:35:34.714 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:37.023 N] [DefaultCombat] >> Casting << Strike
[18:35:38.175 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:39.306 N] [DefaultCombat] >> Casting << Zealous Strike
[18:35:40.451 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:43.109 N] [DefaultCombat] >> Casting << Clashing Blast
[18:35:44.575 N] [DefaultCombat] >> Casting << Precision
[18:35:44.864 N] [DefaultCombat] >> Casting << Dispatch
[18:35:46.330 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:47.873 N] [DefaultCombat] >> Casting << Strike
[18:35:49.409 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:50.911 N] [DefaultCombat] >> Casting << Zealous Strike
[18:35:52.421 N] [DefaultCombat] >> Casting << Clashing Blast
[18:35:53.886 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:54.731 N] [DefaultCombat] >> Casting << Zen
[18:35:54.930 N] [DefaultCombat] >> Casting << Valorous Call
[18:35:55.394 N] [DefaultCombat] >> Casting << Blade Rush
[18:35:57.682 N] [DefaultCombat] >> Casting << Precision
[18:35:57.811 N] [DefaultCombat] >> Casting << Master Strike
[18:36:00.910 N] [DefaultCombat] >> Casting << Strike
[18:36:02.136 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:03.301 N] [DefaultCombat] >> Casting << Zealous Strike
[18:36:03.615 N] [DefaultCombat] >> Casting << Zen
[18:36:04.538 N] [DefaultCombat] >> Casting << Clashing Blast
[18:36:05.685 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:07.985 N] [DefaultCombat] >> Casting << Precision
[18:36:08.123 N] [DefaultCombat] >> Casting << Dispatch
[18:36:09.261 N] [DefaultCombat] >> Casting << Strike
[18:36:10.423 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:11.579 N] [DefaultCombat] >> Casting << Clashing Blast
[18:36:13.040 N] [DefaultCombat] >> Casting << Zealous Strike
[18:36:14.519 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:18.950 N] [DefaultCombat] >> Casting << Precision
[18:36:19.142 N] [DefaultCombat] >> Casting << Dispatch
[18:36:20.629 N] [DefaultCombat] >> Casting << Strike
[18:36:22.124 N] [DefaultCombat] >> Casting << Clashing Blast
[18:36:23.623 N] [DefaultCombat] >> Casting << Strike
[18:36:25.085 N] [DefaultCombat] >> Casting << Zealous Strike
[18:36:26.614 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:27.135 N] [DefaultCombat] >> Casting << Zen
[18:36:28.138 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:31.631 N] [DefaultCombat] >> Casting << Clashing Blast
[18:36:32.857 N] [DefaultCombat] >> Casting << Precision
[18:36:33.029 N] [DefaultCombat] >> Casting << Master Strike
[18:36:36.006 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:37.139 N] [DefaultCombat] >> Casting << Zealous Strike
[18:36:38.708 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:40.177 N] [DefaultCombat] >> Casting << Clashing Blast
[18:36:41.651 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:43.132 N] [DefaultCombat] >> Casting << Precision
[18:36:43.324 N] [DefaultCombat] >> Casting << Dispatch
[18:36:44.791 N] [DefaultCombat] >> Casting << Strike
[18:36:46.292 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:47.784 N] [DefaultCombat] >> Casting << Strike
[18:36:49.267 N] [DefaultCombat] >> Casting << Clashing Blast
[18:36:50.786 N] [DefaultCombat] >> Casting << Zealous Strike
[18:36:52.292 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:52.877 N] [DefaultCombat] >> Casting << Zen
[18:36:53.809 N] [DefaultCombat] >> Casting << Blade Rush
[18:36:56.688 N] [DefaultCombat] >> Casting << Twin Saber Throw
[18:36:57.834 N] [DefaultCombat] >> Casting << Force Leap
[18:36:58.983 N] [DefaultCombat] >> Casting << Precision
[18:36:59.162 N] [DefaultCombat] >> Casting << Master Strike
[18:37:01.631 N] [DefaultCombat] >> Casting << Clashing Blast
[18:37:02.812 N] [DefaultCombat] >> Casting << Blade Rush
[18:37:04.271 N] [DefaultCombat] >> Casting << Strike
[18:37:05.804 N] [DefaultCombat] >> Casting << Blade Rush
[18:37:08.793 N] [DefaultCombat] >> Casting << Precision
[18:37:09.086 N] [DefaultCombat] >> Casting << Dispatch
[18:37:10.560 N] [DefaultCombat] >> Casting << Zealous Strike
[18:37:12.065 N] [DefaultCombat] >> Casting << Clashing Blast
[18:37:13.614 N] [DefaultCombat] >> Casting << Blade Rush
[18:37:15.436 N] [DefaultCombat] >> Casting << Zen
[18:50:10.559 N] [DefaultCombat] >> Casting << Precision
[18:50:10.761 N] [DefaultCombat] >> Casting << Dispatch
[18:50:12.236 N] [DefaultCombat] >> Casting << Blade Rush
[18:50:15.200 N] [DefaultCombat] >> Casting << Strike
[18:50:16.677 N] [DefaultCombat] >> Casting << Clashing Blast
[18:50:18.248 N] [DefaultCombat] >> Casting << Strike
[18:50:19.707 N] [DefaultCombat] >> Casting << Blade Rush
[18:50:20.271 N] [DefaultCombat] >> Casting << Zen
[18:50:21.227 N] [DefaultCombat] >> Casting << Blade Rush
[18:50:22.386 N] [DefaultCombat] >> Casting << Precision
[18:50:22.522 N] [DefaultCombat] >> Casting << Master Strike
[18:50:25.197 N] [DefaultCombat] >> Casting << Zealous Strike
[18:50:26.330 N] [DefaultCombat] >> Casting << Blade Rush
[18:50:27.502 N] [DefaultCombat] >> Casting << Clashing Blast
[18:50:28.682 N] [DefaultCombat] >> Casting << Blade Rush
[18:50:29.828 N] [DefaultCombat] >> Casting << Strike
[18:50:31.393 N] [DefaultCombat] >> Casting << Blade Rush
[18:50:32.904 N] [DefaultCombat] >> Casting << Strike
[18:50:35.835 N] [DefaultCombat] >> Casting << Clashing Blast
[18:50:37.382 N] [DefaultCombat] >> Casting << Precision
[18:50:37.557 N] [DefaultCombat] >> Casting << Dispatch
[18:50:39.022 N] [DefaultCombat] >> Casting << Blade Rush
[18:50:40.568 N] [DefaultCombat] >> Casting << Zealous Strike
[18:50:42.072 N] [DefaultCombat] >> Casting << Blade Rush
[18:50:45.647 N] [DefaultCombat] >> Casting << Zen
[18:50:46.516 N] [DefaultCombat] >> Casting << Blade Rush
[18:50:47.676 N] [DefaultCombat] >> Casting << Strike
[18:50:48.840 N] [DefaultCombat] >> Casting << Clashing Blast
[18:50:50.013 N] [DefaultCombat] >> Casting << Precision
[18:50:50.140 N] [DefaultCombat] >> Casting << Master Strike
[18:50:53.136 N] [DefaultCombat] >> Casting << Zealous Strike
[18:50:54.316 N] [DefaultCombat] >> Casting << Blade Rush
[18:50:56.925 N] [DefaultCombat] >> Casting << Strike
[18:50:59.862 N] [DefaultCombat] >> Casting << Precision
[18:50:59.994 N] [DefaultCombat] >> Casting << Dispatch
[18:51:01.479 N] [DefaultCombat] >> Casting << Clashing Blast
[18:51:02.993 N] [DefaultCombat] >> Casting << Blade Rush
[18:51:05.985 N] [DefaultCombat] >> Casting << Zealous Strike
[18:51:07.483 N] [DefaultCombat] >> Casting << Blade Rush
[18:51:09.371 N] [DefaultCombat] >> Casting << Zen
[18:51:09.479 N] [DefaultCombat] >> Casting << Valorous Call
[18:51:10.444 N] [DefaultCombat] >> Casting << Blade Rush
[18:51:11.604 N] [DefaultCombat] >> Casting << Precision
[18:51:11.963 N] [DefaultCombat] >> Casting << Master Strike
[18:51:14.566 N] [DefaultCombat] >> Casting << Dispatch
[18:51:15.705 N] [DefaultCombat] >> Casting << Strike
[18:51:16.863 N] [DefaultCombat] >> Casting << Clashing Blast
[18:51:17.994 N] [DefaultCombat] >> Casting << Strike
[18:51:18.372 N] [DefaultCombat] >> Casting << Zen
[18:51:19.126 N] [DefaultCombat] >> Casting << Strike
[18:51:20.308 N] [DefaultCombat] >> Casting << Blade Rush
[18:51:23.780 N] [DefaultCombat] >> Casting << Clashing Blast
[18:51:24.929 N] [DefaultCombat] >> Casting << Zealous Strike
[18:51:26.061 N] [DefaultCombat] >> Casting << Blade Rush
[18:51:27.549 N] [DefaultCombat] >> Casting << Precision
[18:51:27.750 N] [DefaultCombat] >> Casting << Blade Rush
[18:51:29.278 N] [DefaultCombat] >> Casting << Strike
[18:51:30.743 N] [DefaultCombat] >> Casting << Dispatch
[18:51:32.267 N] [DefaultCombat] >> Casting << Clashing Blast
[18:51:33.744 N] [DefaultCombat] >> Casting << Blade Rush
[18:51:35.215 N] [DefaultCombat] >> Casting << Zealous Strike
[18:51:36.734 N] [DefaultCombat] >> Casting << Blade Rush
[18:51:39.116 N] [DefaultCombat] >> Casting << Zen
[18:51:39.741 N] [DefaultCombat] >> Casting << Precision
[18:51:39.925 N] [DefaultCombat] >> Casting << Master Strike
[18:51:43.015 N] [DefaultCombat] >> Casting << Blade Rush
[18:51:44.179 N] [DefaultCombat] >> Casting << Strike
[18:51:45.328 N] [DefaultCombat] >> Casting << Clashing Blast
[18:51:46.497 N] [DefaultCombat] >> Casting << Strike
[18:51:47.648 N] [DefaultCombat] >> Casting << Blade Rush
[18:51:48.831 N] [DefaultCombat] >> Casting << Zealous Strike
[18:51:50.294 N] [DefaultCombat] >> Casting << Blade Rush
[18:51:51.778 N] [DefaultCombat] >> Casting << Precision
[18:51:51.978 N] [DefaultCombat] >> Casting << Dispatch
[18:51:53.452 N] [DefaultCombat] >> Casting << Clashing Blast
Hmm made me wonder yesterday. The code Jon gave, reports if a spell is ready to be casted, but if its on cooldown by the 'universal main hand cooldown of <1sec' it will report back to the bot, as not ready.At this level of precision, especially on a complex rotation like this, you'll have to tweak until you like. There's some things the bot simply can't do, and pooling resources for burst phases is up there.
With Pure, I used a ton of LockSelectors to make sure the bot chose the correct action. I got criticized for using too many, but even then the bot would skip over the correct ability numerous times during a play session. No idea why. This is why coding is so damn frustrating![]()
Shadow
Serenity
• Prolific Justice now spreads periodic Force Breach and Sever Force effects with Whirling Blow (instead of Force in Balance).
Can you explain me the spell Force in balance? when do you use it? only to apply Prolific justice or what?Need any changes to DefaultRoutine?
Can you explain me the spell Force in balance? when do you use it? only to apply Prolific justice or what?
Edit:
Nvm i think i found it:
Force in Balance (FiB) is an incredibly important ability.
It does not hit quite as hard as in 2.10, but still packs quite a punch, and now hits up to 8 targets.
It also leaves 15 Stacks of Force Suppression on its targets, and will spread your Force Breach and Sever Force effects to its targets that are not already affected by them.
For single target situations, it is best to use this ability on its 15 second cooldown. With 3.0, this ability causes its targets to take 10% increased area of effect damage.
If i read this, i think we only have to add Whirling Blow in the single rotation just to get those debuffs back in. What you think?
For testing purposes i added these lines as they are under the AOE part.
If it hogs the dps to much revert back to the old files.
Ok makes sence. Althow the Hatred version (serenities counterpart) hasnt got this implemented:No, we don't need to change anything here. Whirling Blow doesn't refresh the debuff on the target, it only spreads it to other targets. In the AoE section, you can see that I already forced it to check if those debuffs are on the target before casting Whirling Blow. All that really changed here is that instead of FiB spreading the DoTs, now Whirling Blow does.
public override Composite SingleTarget
{
get
{
return new LockSelector(
Spell.Buff("Force Speed", ret => !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 1f && Me.CurrentTarget.Distance <= 3f),
//Movement
CombatMovement.CloseDistance(Distance.Melee),
Spell.Cast("Jolt", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
Spell.CastOnGround("Death Field"),
Spell.Cast("Lacerate", ret => Me.ForcePercent >= 60 && Targeting.ShouldPBAOE),
Spell.DoT("Discharge", "Discharge"),
Spell.DoT("Creeping Terror", "Creeping Terror"),
Spell.Cast("Crushing Darkness", ret => Me.HasBuff("Raze")),
Spell.Cast("Assassinate", ret => Me.CurrentTarget.HealthPercent <= 30),
Spell.Cast("Thrash"),
Spell.Buff("Force Speed", ret => Me.CurrentTarget.Distance >= 1.1f && Me.IsMoving && Me.InCombat)
);
}
}
public override Composite AreaOfEffect
{
get
{
return new LockSelector(
Spell.CastOnGround("Death Field", ret => Targeting.ShouldAOE),
Spell.Cast("Lacerate", ret => Me.ForcePercent >= 60 && Targeting.ShouldPBAOE)
);
}
}
using Buddy.BehaviorTree;
using DefaultCombat.Core;
using DefaultCombat.Helpers;
namespace DefaultCombat.Routines
{
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("Gore", ret => !Me.HasBuff("Gore")),
Spell.Cast("Ravage", ret => Me.HasBuff("Gore") || Me.Level < 41), //Double check level when Gore is obtained!!
Spell.Cast("Vicious Throw", ret => Me.HasBuff("Slaughter") || Me.CurrentTarget.HealthPercent <= 30),
Spell.Cast("Force Scream", ret => Me.HasBuff("Execute") || Me.Level < 28), //Double check level when Execute is obtained!!
Spell.Cast("Rupture", ret => Me.HasBuff("Massacre")),
Spell.Cast("Massacre"),
Spell.Cast("Battering Assault", ret => Me.ActionPoints <= 7),
Spell.Cast("Vicious Slash", ret => Me.ActionPoints >= 7 && Me.Level < 30), //Double check level if we want to use it further then level 30!!
Spell.Cast("Assault", ret => Me.ActionPoints <= 9),
Spell.Cast("Retaliation")
// See http://theblackforge.eu/mobile/forum/viewthread/m/13971628/id/7171060-marauder for more info.
);
}
}
public override Composite AreaOfEffect
{
get
{
return new Decorator(ret => Targeting.ShouldPBAOE,
new LockSelector(
Spell.Cast("Smash"),
Spell.Cast("Sweeping Slash")
));
}
}
}
}