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!

yea I see what you are saying we could make some cool progress at this by starting a guide thread about how to use the modifiers for spells and such. such as leap to if at 100% or battering assault if at less that 50% resource. I wonder what would happen if you put multiple lines with the same attack or dot but placed different modifiers on them? one for the opening phase and one for the burn phase. I am sure we could get some pretty complex routines.
 
This would not fire an entire group of abilities for the opening.
I think what he means is
Code:
New Decorator(Opening Sequence)
{
If not in Combat
{
Fire all spells inside this If statement, then we are in combat and go to resource
}
}

New Decorator(Resources)
{
If In Combat but low on resources
{
Fire all spells inside this If statement, then we are high on resources and go to burst
}
}

New Decorator(Burst)
{
If In Combat and high on resources
{
Fire all spells inside this If statement, then when low go back to resources
}
}

This is not real code, but you get the idea.
 
yea I see what you are saying we could make some cool progress at this by starting a guide thread about how to use the modifiers for spells and such. such as leap to if at 100% or battering assault if at less that 50% resource. I wonder what would happen if you put multiple lines with the same attack or dot but placed different modifiers on them? one for the opening phase and one for the burn phase. I am sure we could get some pretty complex routines.
Already did that, just put one ability with a shitload of conditions behind it.

For instance:
Code:
Spell.Buff("Awe", ret => Me.HealthPercent <= 50 && Me.Level < 60 && Targeting.CheckDPSAOE(2, Distance.MeleeAoE, Me.Position) && !Me.HasBuff("Precision")),

or

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("Twin 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),
					Spell.Cast("Twin Saber Throw", ret => Me.CurrentTarget.Distance >= 1f && Me.CurrentTarget.Distance <= 3f && !Me.HasBuff("Precision")),
                    Spell.Cast("Force Leap", ret => 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 <= 6 && !Me.HasBuff("Precision") && !Me.HasBuff("Opportune Attack") && !Buddy.CommonBot.AbilityManager.CanCast("Clashing Blast", Me.CurrentTarget)),
					Spell.Cast("Precision", ret => Me.CurrentTarget.Distance <= 0.4f && ((Buddy.CommonBot.AbilityManager.CanCast("Master Strike", Me.CurrentTarget) && Buddy.CommonBot.AbilityManager.CanCast("Zen", Me) && Me.HasBuff("Opportune Attack")) || (Buddy.CommonBot.AbilityManager.CanCast("Dispatch", Me.CurrentTarget) && Me.HasBuff("Opportune Attack")))),
                    Spell.Cast("Dispatch", ret => (Me.HasBuff("Hand of Justice") && Me.HasBuff("Precision") && Me.HasBuff("Opportune Attack")) || Me.CurrentTarget.HealthPercent <= 30),
					Spell.Cast("Master Strike", ret => ((Me.HasBuff("Precision") && Me.HasBuff("Zen") && Me.HasBuff("Opportune Attack")) || (Me.Level >= 30 && Me.Level < 60)) || Me.Level < 30),			
					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))),
                    //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)
                    );
            }
        }

But like said, this is unstable due to Global Cooldown, because it checks for spells but they are not ready during GCD
 
Last edited:
Here's what you need to be doing (I think):
Code:
new Decorator(ret => !Me.InCombat,
                        new Decorator(ret => Me.CurrentTarget.Distance >= 1f,
                        new Sequence(
                            Spell.Cast("Force Leap"),
                            Spell.Cast("Presicion"),
                            Spell.Cast("Blade Dance"))
                        )),

A Sequence is different than a PrioritySelector because a sequence will execute the commands in order. No idea how this work with BW since I've never tried it-- maybe the 1.5 second GCD fucks everything up. But a sequence is what you guys are looking for. When the bot comes back up, try it out.

BTW: the larger code looks like this:
Code:
public override Composite SingleTarget
		{
			get
			{
				return new LockSelector(
                    new Decorator(ret => !Me.InCombat,
                        new Decorator(ret => Me.CurrentTarget.Distance >= 1f,
                        new Sequence(
                            Spell.Cast("Force Leap"),
                            Spell.Cast("Presicion"),
                            Spell.Cast("Blade Dance"))
                        )),

					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("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)
					);
			}
		}
 
man this sucks! I have like a million ideas for new rotations but I cant test them without a bot that is working :mad:. I will probably forget half the things I am thinking by the time the bot comes back up :rolleyes:
 
man this sucks! I have like a million ideas for new rotations but I cant test them without a bot that is working :mad:. I will probably forget half the things I am thinking by the time the bot comes back up :rolleyes:

Nothing stopping you from writing the rotation and saving the Sentinel.cs file in a different folder until the bot comes back up!
 
@alltruist I think that will only execute Force Leap as an "opener" and ignore the Presicion and Blade Dance because he is already in combat AND in range but could be wrong though :) can't test it right now
 
That's my fear as well. I've never used Sequences before, so I can tell if the bot will finish the sequence before moving on, or if it will instantly move to the next session upon Me.inCombat returning true. Oh well, a few more days according to Aevitas.
 
What about this one? Found in the API linked:

CastTimeEnd "Stores the game time in which the currently casting ability should be finished"

be good for skills like unload/blade dance to ensure they're finished before firing next skill.

Other I saw was IsCasting which should class blade dance as a casting. You'd need to add a (not) Me.IsCasting to everything though I guess. Need to test whether it would count instants/GCD abilities as casting. Also good for a interrupt check.
 
Last edited:
Hello there

I was tweking Lethality single target rotation on Combat Default and its using lots of old abilities

As it was stated here there is the gcd problem thats messing on part of the rotation

Can anyone check the rotation below and see if its fine?

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

I already tested the old debuff name "Poisoned (Corrosive Dart)" but it seems to be changed just to the name of the skill as with the old name the rotation keep casting corrosive dart non stop

On the API there is something on TorAbility.GlobalCooldownTime Property but i dont know if it states the current cooldown of just the time from the cooldown ability regardless of being in use or not.

How could we get the current cooldown from shiv and Toxic Blast so i could put a condition to use overload shot or rifle shot when cd > 1.5 or something ?(so that i could avoid mistaking use of those two when the other 2 are ready)

Thanks for any help
 
Last edited:
I don't have an Operative, so I can't test. What happens when you run that? It seems like a lot of checks.
 
Is a little bit laggy, but is was laggy anyway even before the changes

Regarding the rotation what happens its that when shiv and toxic blast are about to be rady to use and the rotation uses overload shot or rifle shot, it activate the gcd and it shots again.

Houd could i track shiv and toxic blast cooldown to avoid this?
i tried to use

Code:
!Buddy.CommonBot.AbilityManager.CanCast("Shiv", Me.CurrentTarget))

as a conditional, but as stated before the same thing about the gcd make the bot thinks that the skill its not ready.

I have to tweak a little bit more the rotation from when im not on melee range

edit: TorAbility.CooldownTime gives me the total cooldown or the current cooldown?
 
Last edited:
Not sure if it would be Spell.cast or Spell.Dot. I know some damage over time require a Spell.Dot but others don't. so watch that context

Code:
 Spell.DoT("Corrosive Dart", "", 15000),
	     Spell.DoT("Corrosive Grenade", "", 18000),

don't forget the time in m/s at the end
 
Last edited:
Back
Top