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!

Default Combat Test Edition

Status
Not open for further replies.
We used to check the specific spells (didn't have to be active spells, we'd find passive ones too) to detect some disciplines that couldn't be read properly by using their nodes. It looked something like this:

Code:
			if (HasAbility("Death Field") && advancedClass == AdvancedClass.Sorcerer)
			{
				discipline = CharacterDiscipline.Madness;
				return true;
			}

			if (HasAbility("Death Field") && advancedClass == AdvancedClass.Assassin)
			{
				discipline = CharacterDiscipline.Hatred;
				return true;
			}

For advanced classes, the bot always read it properly from the game itself. If that has changed, I'll need to implement some additional code to handle cases where the bot doesn't manage to read them properly before we release.

Also, how do you guys propose we get these updates on GitHub? I could do it, but I can imagine you'd want at least credit for your work. Let me know. :)
 
We used to check the specific spells (didn't have to be active spells, we'd find passive ones too) to detect some disciplines that couldn't be read properly by using their nodes. It looked something like this:

Code:
			if (HasAbility("Death Field") && advancedClass == AdvancedClass.Sorcerer)
			{
				discipline = CharacterDiscipline.Madness;
				return true;
			}

			if (HasAbility("Death Field") && advancedClass == AdvancedClass.Assassin)
			{
				discipline = CharacterDiscipline.Hatred;
				return true;
			}

For advanced classes, the bot always read it properly from the game itself. If that has changed, I'll need to implement some additional code to handle cases where the bot doesn't manage to read them properly before we release.

Also, how do you guys propose we get these updates on GitHub? I could do it, but I can imagine you'd want at least credit for your work. Let me know. :)

If I had GitHub access to the test edition I'd be making changes as I go, I've already finished Consular Shadow and Trooper. But I certainly don't care about the credit, just want to get them all done and updated so that part I will leave up to you. If you want to give me access, I will do the updates. With regards to the advanced class detection. It looks to me now like each advanced class now gets his/her own specific and inc level 10 spells. I could double-check that but if the bot could look for those spells and then load the appropriate advanced class accordingly, I can work on that for you. If you would like to fix Consular Shadow Infiltration then you need to make this change to your code :

Code:
Jedi Consular, Shadow (Jedi Shadow), Infiltration, Vaulting Slash, DPS
 
We used to check the specific spells (didn't have to be active spells, we'd find passive ones too) to detect some disciplines that couldn't be read properly by using their nodes. It looked something like this:

Code:
			if (HasAbility("Death Field") && advancedClass == AdvancedClass.Sorcerer)
			{
				discipline = CharacterDiscipline.Madness;
				return true;
			}

			if (HasAbility("Death Field") && advancedClass == AdvancedClass.Assassin)
			{
				discipline = CharacterDiscipline.Hatred;
				return true;
			}

For advanced classes, the bot always read it properly from the game itself. If that has changed, I'll need to implement some additional code to handle cases where the bot doesn't manage to read them properly before we release.

Also, how do you guys propose we get these updates on GitHub? I could do it, but I can imagine you'd want at least credit for your work. Let me know. :)

No need for credit. Quick updates work best, as long as we get them tested before they go up.

EDIT: and if we can check passives, you could look for stuff like Double-Saber proficiency or Dual Wald passives.
 
I updated that code on patch 4.x, but couldnt find that code anymore. I did send You the full list back then.
Do you have it or was it on github?
 
Fix for Jedi Consular Shadow Infiltration

Code:
if (HasAbility("Vaulting Slash") && advancedClass == AdvancedClass.Shadow)
			{
				discipline = CharacterDiscipline.Infiltration;
				return true;
			}
 
Here are the routine changes that need to be made for the Assassin specs. There are probably more, based on new utilities, but this should get them working in 5.0

Darkness:
Removed line 22 - Spell.Buff("Dark Charge")

Deception:
Removed line 22 - Spell.Buff("Surging Charge")
Removed line 38 - Spell.Buff("Blackout", ret => Me.ForcePercent <= 40)

Hatred:
Removed line 22 - Spell.Buff("Lightning Charge")
Updated line 59 - Spell.Cast("Eradicate", ret => Me.HasBuff("Raze") && Me.Level >= 57), // "Eradicate" - Replaces Demolish
Updated line 76 - Spell.DoT("Discharge", "Shocked (Discharge)"), // Debuff was not named correctly, should be "Shocked (Discharge)"
Updated line 81 - Me.CurrentTarget.HasDebuff("Shocked (Discharge)") && Me.CurrentTarget.HasDebuff("Creeping Terror") && // Debuff was not named correctly, should be "Shocked (Discharge)"
 
I love how you guys work together to get this routine working again..I wish i knew how to code to help :)
 
I love how you guys work together to get this routine working again..I wish i knew how to code to help :)

No need. Just look at the current rotations and tell us what's supposed to happen. Like, when do I cast ability X? What buff/debuff to I need to cast ability Y? I can code rotations for classes I don't even play if someone just tells me what to do.
 
Trooper Commando

Trooper.cs

Code:
// Copyright (C) 2011-2016 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 Trooper : RotationBase
	{
		public override string Name
		{
			get { return "Basic Trooper"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Fortification")
					);
			}
		}

		public override Composite Cooldowns
		{
			get { return new PrioritySelector(); }
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					CombatMovement.CloseDistance(Distance.Ranged),
					Spell.Cast("High Impact Bolt"),
					Spell.Cast("Recharge Cells", ret => Me.ResourcePercent() <= 50),
					Spell.Cast("Ion Pulse", ret => Me.ResourcePercent() >= 50),
					Spell.Cast("Hammer Shot")
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldAoe,
					new PrioritySelector());
			}
		}
	}
}

AssaultSpecialist.cs

Code:
// Copyright (C) 2011-2016 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
{
	internal class AssaultSpecialist : RotationBase
	{
		public override string Name
		{
			get { return "Commando Assault Specialist"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Fortification")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Tenacity", ret => Me.IsStunned),
					Spell.Buff("Recharge Cells", ret => Me.ResourceStat <= 40),
					Spell.Buff("Reactive Shield", ret => Me.HealthPercent <= 70),
					Spell.Buff("Adrenaline Rush", ret => Me.HealthPercent <= 30),
					Spell.Buff("Supercharged Cell", ret => Me.BuffCount("Supercharge") == 10),
					Spell.Buff("Reserve Powercell", ret => Me.ResourceStat <= 60),
					Spell.Cast("Echoing Deterrence", ret => Tank != null && Me.HealthPercent <= 30)
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					new Decorator(ret => Me.ResourcePercent() < 60,
						new PrioritySelector(
							Spell.Cast("Mag Bolt", ret => Me.HasBuff("Ionic Accelerator") && Me.Level >= 57),
							Spell.Cast("High Impact Bolt", ret => Me.HasBuff("Ionic Accelerator") && Me.Level < 57),
							Spell.Cast("Hammer Shot")
							)),

					//Movement
					CombatMovement.CloseDistance(Distance.Ranged),

					//Rotation
					Spell.Cast("Disabling Shot", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
					Spell.Cast("Mag Bolt", ret => Me.HasBuff("Ionic Accelerator") && Me.Level >= 57),
					Spell.Cast("High Impact Bolt", ret => Me.HasBuff("Ionic Accelerator") && Me.Level < 57),
					Spell.Cast("Explosive Round", ret => Me.HasBuff("Hyper Assault Rounds")),
					Spell.Cast("Assault Plastique"),
					Spell.DoT("Serrated Bolt", "Bleeding"),
					Spell.DoT("Incendiary Round", "Burning (Incendiary Round)"),
					Spell.Cast("Electro Net"),
					Spell.Cast("Full Auto"),
					Spell.Cast("Mag Bolt", ret => Me.Level >= 57),
					Spell.Cast("High Impact Bolt", ret => Me.Level < 57),
					Spell.Cast("Charged Bolts")
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldAoe,
					new PrioritySelector(
						Spell.CastOnGround("Mortar Volley"),
						Spell.DoT("Serrated Bolt", "Bleeding"),
						Spell.DoT("Incendiary Round", "Burning (Incendiary Round)"),
						Spell.Cast("Plasma Grenade", ret => Me.CurrentTarget.HasDebuff("Burning (Incendiary Round)")),
						Spell.Cast("Sticky Grenade", ret => Me.CurrentTarget.HasDebuff("Bleeding")),
						Spell.Cast("Explosive Round", ret => Me.HasBuff("Hyper Assault Rounds")),
						Spell.CastOnGround("Hail of Bolts", ret => Me.ResourcePercent() >= 90)
						));
			}
		}
	}
}

CombatMedic.cs

Code:
// Copyright (C) 2011-2016 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
{
	internal class CombatMedic : RotationBase
	{
		public override string Name
		{
			get { return "Commando Combat Medic"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Fortification")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Tenacity"),
					Spell.Buff("Supercharged Cell",	ret => Me.ResourceStat >= 20 && HealTarget != null && HealTarget.HealthPercent <= 80 &&	Me.BuffCount("Supercharge") == 10),
					Spell.Buff("Adrenaline Rush", ret => Me.HealthPercent <= 30),
					Spell.Buff("Reactive Shield", ret => Me.HealthPercent <= 70),
					Spell.Buff("Reserve Powercell", ret => Me.ResourceStat <= 60),
					Spell.Buff("Recharge Cells", ret => Me.ResourceStat <= 50),
					Spell.Cast("Tech Override", ret => Tank != null && Tank.HealthPercent <= 50),
					Spell.Cast("Echoing Deterrence", ret => Tank != null && Me.HealthPercent <= 30)
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					//Movement 
					CombatMovement.CloseDistance(Distance.Ranged),
					Spell.Cast("Disabling Shot", ret => Me.CurrentTarget.IsCasting),
					Spell.Cast("High Impact Bolt"),
					Spell.Cast("Full Auto"),
					Spell.Cast("Charged Bolts", ret => Me.ResourceStat >= 70),
					Spell.Cast("Hammer Shot")
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new PrioritySelector(
					new Decorator(ret => Me.HasBuff("Supercharged Cell"),
						new PrioritySelector(
							Spell.HealGround("Kolto Bomb", ret => !Tank.HasBuff("Kolto Residue")),
							Spell.CastOnGround("Mortar Volley"),
							Spell.Cast("Sticky Grenade"),
							Spell.Heal("Bacta Infusion", 60),
							Spell.Heal("Advanced Medical Probe", 85)
							)),

					//Dispel 
					Spell.Cleanse("Field Aid"),

					//AoE Healing 
					Spell.HealAoe("Successive Treatment", ret => Targeting.ShouldAoeHeal),
					Spell.HealGround("Kolto Bomb", ret => !Tank.HasBuff("Kolto Residue")),

					//Single Target Healing 
					Spell.Heal("Bacta Infusion", 80),
					Spell.Heal("Advanced Medical Probe", 80),
					Spell.Heal("Medical Probe", 75),

					//Keep Trauma Probe on Tank 
					Spell.HoT("Trauma Probe", 100),

					//To keep Supercharge buff up; filler heal 
					Spell.Heal("Med Shot", onUnit => Tank, 100, ret => Tank != null && Me.InCombat)
					);
			}
		}
	}
}

Gunnery.cs

Code:
// Copyright (C) 2011-2016 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
{
	internal class Gunnery : RotationBase
	{
		public override string Name
		{
			get { return "Commando Gunnery"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Fortification")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Tenacity"),
					Spell.Buff("Reactive Shield", ret => Me.HealthPercent <= 70),
					Spell.Cast("Echoing Deterrence", ret => Tank != null && Me.HealthPercent <= 30),
					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)
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					Spell.Cast("Hammer Shot", ret => Me.ResourcePercent() < 60),

					//Movement
					CombatMovement.CloseDistance(Distance.Ranged),

					//Rotation
					Spell.Cast("Disabling Shot", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.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"),
					Spell.Cast("Vortex Bolt"),
					Spell.Cast("High Impact Bolt", ret => Me.BuffCount("Charged Barrel") == 5),
					Spell.Cast("Grav Round")
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldAoe,
					new PrioritySelector(
						Spell.Cast("Sticky Grenade"),
						Spell.Cast("Tech Override"),
						Spell.CastOnGround("Mortar Volley"),
						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)
						));
			}
		}
	}
}
 
Last edited:
Trooper Vanguard

Trooper.cs

Code:
// Copyright (C) 2011-2016 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 Trooper : RotationBase
	{
		public override string Name
		{
			get { return "Basic Trooper"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Fortification")
					);
			}
		}

		public override Composite Cooldowns
		{
			get { return new PrioritySelector(); }
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					CombatMovement.CloseDistance(Distance.Ranged),
					Spell.Cast("High Impact Bolt"),
					Spell.Cast("Recharge Cells", ret => Me.ResourcePercent() <= 50),
					Spell.Cast("Ion Pulse", ret => Me.ResourcePercent() >= 50),
					Spell.Cast("Hammer Shot")
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldAoe,
					new PrioritySelector());
			}
		}
	}
}

Plasmatech.cs

Code:
// Copyright (C) 2011-2016 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 Plasmatech : RotationBase
	{
		public override string Name
		{
			get { return "Vanguard Plasmatech"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Fortification")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Tenacity"),
					Spell.Buff("Battle Focus"),
					Spell.Buff("Recharge Cells", ret => Me.ResourcePercent() <= 50),
					Spell.Buff("Reserve Powercell"),
					Spell.Buff("Reactive Shield", ret => Me.HealthPercent <= 60),
					Spell.Buff("Adrenaline Rush", ret => Me.HealthPercent <= 30)
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					//Movement
					CombatMovement.CloseDistance(Distance.Melee),
					new Decorator(ret => Me.ResourcePercent() < 60,
						new PrioritySelector(
							Spell.Cast("High Impact Bolt", ret => Me.HasBuff("Ionic Accelerator")),
							Spell.Cast("Hammer Shot")
							)),
					Spell.Cast("High Impact Bolt"),
					Spell.Cast("Stockstrike", ret => Me.CurrentTarget.Distance <= .4f),
					Spell.Cast("Assault Plastique"),
					Spell.DoT("Incendiary Round", "", 12000),
					Spell.Cast("Shockstrike"),
					Spell.Cast("Ion Pulse")
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldAoe,
					new PrioritySelector(
						Spell.CastOnGround("Artillery Blitz"),
						Spell.Cast("Ion Wave", ret => Me.CurrentTarget.Distance <= 1f),
						Spell.Cast("Flak Shell", ret => Me.CurrentTarget.Distance <= 1f),
						Spell.Cast("Explosive Surge", ret => Me.CurrentTarget.Distance <= .5f)
						));
			}
		}
	}
}

ShieldSpecialist.cs

Code:
// Copyright (C) 2011-2016 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 ShieldSpecialist : RotationBase
	{
		public override string Name
		{
			get { return "Vanguard Shield Specialist"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Fortification"),
					Spell.Cast("Guard", on => Me.Companion,	ret => Me.Companion != null && !Me.Companion.IsDead && !Me.Companion.HasBuff("Guard"))
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Tenacity", ret => Me.IsStunned),
					Spell.Buff("Recharge Cells", ret => Me.ResourcePercent() >= 50),
					Spell.Buff("Reactive Shield", ret => Me.HealthPercent <= 40),
					Spell.Buff("Adrenaline Rush", ret => Me.HealthPercent <= 30),
					Spell.Buff("Shoulder Cannon", ret => !Me.HasBuff("Shoulder Cannon") && Me.CurrentTarget.BossOrGreater())
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					Spell.Cast("Storm", ret => Me.CurrentTarget.Distance >= 1f && !DefaultCombat.MovementDisabled),

					//Movement
					CombatMovement.CloseDistance(Distance.Melee),
					new Decorator(ret => Me.ResourcePercent() < 60,
						new PrioritySelector(
							Spell.Cast("Energy Blast", ret => Me.BuffCount("Power Screen") == 3),
							Spell.Cast("Pulse Cannon", ret => Me.HasBuff("Pulse Engine") && Me.CurrentTarget.Distance <= 1f),
							Spell.Cast("Stockstrike", ret => Me.CurrentTarget.Distance <= .4f),
							Spell.Cast("Explosive Surge", ret => Me.HasBuff("Static Surge") && Me.CurrentTarget.Distance <= 0.5f),
							Spell.Cast("Hammer Shot")
							)),
					Spell.CastOnGround("Smoke Grenade", ret => Me.CurrentTarget.BossOrGreater() && Me.CurrentTarget.Distance <= 0.8f),
					Spell.Cast("Shoulder Cannon", ret => Me.HasBuff("Shoulder Cannon") && Me.CurrentTarget.BossOrGreater()),
					Spell.Cast("Riot Strike",	ret =>	Me.CurrentTarget.IsCasting && Me.CurrentTarget.Distance <= Distance.Melee && !DefaultCombat.MovementDisabled),
					Spell.Cast("Energy Blast", ret => Me.BuffCount("Power Screen") == 3),
					Spell.Cast("High Impact Bolt"),
					Spell.Cast("Pulse Cannon", ret => Me.HasBuff("Pulse Engine") && Me.CurrentTarget.Distance <= 1f),
					Spell.Cast("Explosive Surge", ret => Me.HasBuff("Static Surge") && Me.CurrentTarget.Distance <= 0.5f),
					Spell.Cast("Ion Pulse")
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new Decorator(ret => Targeting.ShouldAoe,
					new PrioritySelector(
						Spell.CastOnGround("Artillery Blitz"),
						Spell.Cast("Ion Wave", ret => Me.CurrentTarget.Distance <= 1f),
						Spell.Cast("Flak Shell", ret => Me.CurrentTarget.Distance <= 1f),
						Spell.Cast("Explosive Surge")
						));
			}
		}
	}
}

Tactics.cs

Code:
// Copyright (C) 2011-2016 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 Tactics : RotationBase
	{
		public override string Name
		{
			get { return "Vanguard Tactics"; }
		}

		public override Composite Buffs
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Fortification")
					);
			}
		}

		public override Composite Cooldowns
		{
			get
			{
				return new PrioritySelector(
					Spell.Buff("Tenacity"),
					Spell.Buff("Recharge Cells", ret => Me.ResourcePercent() <= 50),
					Spell.Buff("Reactive Shield", ret => Me.HealthPercent <= 60),
					Spell.Buff("Adrenaline Rush", ret => Me.HealthPercent <= 30),
					Spell.Buff("Reserve Powercell", ret => Me.ResourceStat <= 80),
					Spell.Buff("Battle Focus")
					);
			}
		}

		public override Composite SingleTarget
		{
			get
			{
				return new PrioritySelector(
					//Movement
					Spell.Cast("Storm", ret => Me.CurrentTarget.Distance >= 1f && !DefaultCombat.MovementDisabled),
					CombatMovement.CloseDistance(Distance.Melee),
					new Decorator(ret => Me.ResourcePercent() > 40,
						new PrioritySelector(
							Spell.Cast("High Impact Bolt", ret => Me.HasBuff("Tactical Accelerator")),
							Spell.Cast("Hammer Shot")
							)),
					Spell.Cast("Riot Strike", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled),
					Spell.Cast("Cell Burst", ret => Me.BuffCount("Energy Lode") == 4),
					Spell.Cast("High Impact Bolt",
						ret => Me.CurrentTarget.HasDebuff("Bleeding (Gut)") && Me.HasBuff("Tactical Accelerator")),
					Spell.DoT("Gut", "Bleeding (Gut)"),
					Spell.Cast("Assault Plastique"),
					Spell.Cast("Stock Strike"),
					Spell.Cast("Tactical Surge", ret => Me.Level >= 26),
					Spell.Cast("Ion Pulse", ret => Me.Level < 26)
					);
			}
		}

		public override Composite AreaOfEffect
		{
			get
			{
				return new PrioritySelector(
					new Decorator(ret => Targeting.ShouldAoe,
						new PrioritySelector(
							Spell.CastOnGround("Artillery Blitz")
							)),
					new Decorator(ret => Targeting.ShouldPbaoe,
						new PrioritySelector(
							Spell.Cast("Ion Wave", ret => Me.CurrentTarget.Distance <= 1f),
						Spell.Cast("Flak Shell", ret => Me.CurrentTarget.Distance <= 1f),
							Spell.Cast("Explosive Surge"))
						));
			}
		}
	}
}
 
We used to check the specific spells (didn't have to be active spells, we'd find passive ones too) to detect some disciplines that couldn't be read properly by using their nodes. It looked something like this:

Code:
			if (HasAbility("Death Field") && advancedClass == AdvancedClass.Sorcerer)
			{
				discipline = CharacterDiscipline.Madness;
				return true;
			}

			if (HasAbility("Death Field") && advancedClass == AdvancedClass.Assassin)
			{
				discipline = CharacterDiscipline.Hatred;
				return true;
			}

For advanced classes, the bot always read it properly from the game itself. If that has changed, I'll need to implement some additional code to handle cases where the bot doesn't manage to read them properly before we release.

Also, how do you guys propose we get these updates on GitHub? I could do it, but I can imagine you'd want at least credit for your work. Let me know. :)

So i did find the code for patch 4.x, on a different drive, so did a full update on that code for patch 5.x. You can find it on github.
 
Welcome, I think I worded that poorly ... this work you see on the github is going towards a new release.

Nah, your wording was fine and I understood it that way. Was hoping there was a Github repository for the betas for impatient users like me that don't mind buggy beta releases. :)
 
This might sound silly, but is it possible for me to use older combat routines? I just want the bot to gather materials in a zone with barely any mobs.

Thanks.
 
As said, routines dont work untill they are updated as you might encounter issues like this one, or missing spells.
Also without logfiles we cant help you.
 
Status
Not open for further replies.
Back
Top