Sweet glad to see it's coming along and working, I recall everyone saying setting the tank hasn't worked in forever but it's good now my companion had constant Kolto probes. You found out the companion targeting before, could you see if what you did for that would fix the companion detection under the set tank? I recall you found it was being called out incorrectly before.
I think it was because the rotation was looking for TorPlayers but the companion is a TorNPC. They are both under the umbrella of TorCharacters though. btw, here's Sage/Seer: 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 { internal class Seer : RotationBase { public override string Name { get { return "Sage Seer"; } } public override Composite Buffs { get { return new PrioritySelector( Spell.Buff("Force Valor") ); } } public override Composite Cooldowns { get { return new PrioritySelector( Spell.Buff("Force Potency", ret => Targeting.ShouldAoeHeal), Spell.Buff("Mental Alacrity", ret => Targeting.ShouldAoeHeal), Spell.Buff("Vindicate", ret => NeedForce()), Spell.Buff("Force Mend", ret => Me.HealthPercent <= 75) ); } } public override Composite SingleTarget { get { return new PrioritySelector( //Movement CombatMovement.CloseDistance(Distance.Ranged), Spell.Cast("Mind Snap", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled), Spell.Cast("Force Stun", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled), Spell.Cast("Forcequake", ret => Targeting.ShouldAoe), Spell.Cast("Mind Crush"), Spell.DoT("Weaken Mind", "Weaken Mind"), Spell.Cast("Project"), Spell.Cast("Telekinetic Throw"), Spell.Cast("Disturbance") ); } } public override Composite AreaOfEffect { get { return new PrioritySelector( //Cleanse if needed Spell.Cleanse("Restoration"), //Emergency Heal (Insta-cast) Spell.Heal("Benevolence", 80, ret => Me.HasBuff("Altruism")), //Aoe Heal Spell.HealGround("Salvation", ret => Targeting.ShouldAoeHeal), //Single Target Healing Spell.Heal("Healing Trance", 80), Spell.HoT("Force Armor", 90, ret => HealTarget != null && !HealTarget.HasDebuff("Force-imbalance")), //Buff Tank Spell.HoT("Force Armor", onUnit => Tank, 100, ret => Tank != null && Tank.InCombat && !Tank.HasDebuff("Force-imbalance")), Spell.Heal("Wandering Mend", onUnit => Tank, 100, ret => Tank != null && Tank.InCombat && Me.BuffCount("Wandering Mend Charges") <= 1), //Use Force Bending new Decorator(ret => Me.HasBuff("Conveyance"), new PrioritySelector( Spell.Heal("Healing Trance", 90), Spell.Heal("Deliverance", 50) )), //Build Force Bending Spell.HoT("Rejuvenate", 80), Spell.HoT("Rejuvenate", onUnit => Tank, 100, ret => Tank != null && Tank.InCombat), //Single Target Healing Spell.Heal("Benevolence", 35), Spell.Heal("Deliverance", 80) ); } } private bool NeedForce() { if (Me.ForcePercent <= 20) return true; if (Me.HasBuff("Resplendence") && Me.ForcePercent < 80 && !Me.HasBuff("Amnesty")) return true; return false; } } } and Commando/CombatMedic: 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 { internal class CombatMedic : RotationBase { public override string Name { get { return "Commando Combat Medic"; } } public override Composite Buffs { get { return new PrioritySelector( Spell.Buff("Fortification"), Spell.Buff("Combat Support Cell") ); } } 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) ); } } 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.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) ); } } } }
Thanks to Alltrueist for making some updated routines we now have Sawbones, Seer, and CombatMedic updates. I keep having to make updates so I'm going to roll a new thread to keep track of all the testing. If we can make sure these fixes are solid for BOTH heals and DPS then we can get them added to GitHub and they will come down with a buddywing update. Thread started, if all checks out and works and is put into general circulation then we will close that thread down and resume back here. Some people were trying to keep up with the last so many pages and this should make it easier to track. https://www.thebuddyforum.com/buddy...-default-combat-test-edition.html#post2173809
Anyone else having a problem with Watchmen routine? Stops attacking about 2 minutes in. Have to manually start it back
deadly saber interrupts ravage Hello there folks i did some tweaks on mara anihi rotation would like some feedbacks 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; using Buddy.Swtor.Objects; using Buddy.Swtor; namespace DefaultCombat.Routines { internal class Annihilation : RotationBase { public override string Name { get { return "Marauder Annihilation"; } } public override Composite Buffs { get { return new PrioritySelector( Spell.Buff("Juyo Form"), Spell.Buff("Unnatural Might") ); } } public override Composite Cooldowns { get { return new PrioritySelector( Spell.Buff("Cloak of Pain", ret => Me.HealthPercent <= 90), Spell.Buff("Undying Rage", ret => Me.HealthPercent <= 20), Spell.Buff("Saber Ward", ret => Me.HealthPercent <= 50), Spell.Buff("Frenzy", ret => Me.BuffCount("Fury") < 5), Spell.Buff("Berserk", ret => Me.BuffCount("Fury") > 29) ); } } public override Composite SingleTarget { get { return new PrioritySelector( //Rotation Spell.Cast("Deadly Saber", ret => !Me.HasBuff("Deadly Saber") && !BuddyTor.Me.IsCasting), Spell.Cast("Battering Assault", ret => Me.ActionPoints <= 6), Spell.Cast("Force Rend", ret => !Me.CurrentTarget.HasDebuff("Force Rend")), Spell.Cast("Rupture", ret => !Me.CurrentTarget.HasDebuff("Bleeding (Rupture)")), Spell.Cast("Dual Saber Throw", ret => Me.HasBuff("Pulverize")), Spell.Cast("Annihilate"), Spell.Cast("Vicious Throw", ret => Me.CurrentTarget.HealthPercent <= 30), Spell.Cast("Ravage"), Spell.Cast("Vicious Slash", ret => Me.ActionPoints >= 7 && !Me.HasBuff("Pulverize") && Me.CurrentTarget.HasDebuff("Force Rend") && Me.CurrentTarget.HasDebuff("Bleeding (Rupture)") && !Buddy.CommonBot.AbilityManager.CanCast("Vicious Throw", Me.CurrentTarget) && !Buddy.CommonBot.AbilityManager.CanCast("Ravage", Me.CurrentTarget) && !Buddy.CommonBot.AbilityManager.CanCast("Annihilate", Me.CurrentTarget)), Spell.Cast("Assault", ret => Me.ActionPoints < 7) ); } } public override Composite AreaOfEffect { get { return new Decorator(ret => Targeting.ShouldPbaoe, new PrioritySelector( Spell.Cast("Dual Saber Throw", ret => !DefaultCombat.MovementDisabled && Me.CurrentTarget.Distance >= 1f && Me.CurrentTarget.Distance <= 3f), Spell.Cast("Smash", ret => Me.CurrentTarget.HasDebuff("Bleeding (Rupture)") && Me.CurrentTarget.HasDebuff("Force Rend")), Spell.DoT("Force Rend", "Force Rend"), Spell.DoT("Rupture", "Bleeding (Rupture)"), Spell.Cast("Sweeping Slash") )); } } } } One thing i tried to fix but couldnt its that deadlysaber casts in the middle of ravage sometimes, interupting it. I tried using deadly saber as buff, as spell.cast and finnaly put a check for iscasting but none of them worked so far. Anyone have any ideia what could i do to fix this?
That's weird because there is a built-in check for the entire bot Spell.WaitForCast() that won't fire off an ability while we're casting. Hmm.
Ok so i updated my Rest.cs to use Stims and XP Boosters. For testing purposes: Code: private static Composite Stims { get { bool StimBuffed = false; bool StimUsed = false; TorItem tiu = null; using (BuddyTor.Memory.AcquireFrame()) { return new Action(delegate { foreach (TorEffect te in Me.Buffs) if (te.Name.Contains("Stim")) { StimBuffed = true; break; } if (!StimBuffed) { var Attrs = ("Command;Fortitude;Versatile;Skill;Might;Resolve;Reflex").Split(';'); foreach (TorItem ti in Me.InventoryEquipment) { bool AttrIn = false; foreach (string attr in Attrs) if (ti != null && !ti.IsDeleted && ti.Name.Contains(attr)) { AttrIn = true; break; } if (AttrIn && ti != null && !ti.IsDeleted && ti.Name != null && ti.Name.Contains(" Stim")) { bool UseIt = false; if (ti.Name.Contains("Command") || ti.Name.Contains("Fortitude") || ti.Name.Contains("Versatile") || ti.Name.Contains("Skill") || ti.Name.Contains("Might") || ti.Name.Contains("Resolve") || ti.Name.Contains("Reflex")) { UseIt = true; if (UseIt) { ti.Use(); ti.Interact(); tiu = ti; StimUsed = true; Thread.Sleep(500); break; } } } } } if (StimUsed) { Logger.Write("Stim -" + tiu.Name + "- found in inventory and used."); StimUsed = false; return RunStatus.Success; } return RunStatus.Failure; }); } } } private static Composite XPBoost { get { bool XPBuffed = false; bool XPUsed = false; TorItem tiu = null; using (BuddyTor.Memory.AcquireFrame()) { return new Action(delegate { foreach (TorEffect te in Me.Buffs) if (te.Name.Contains("Experience Boost")) { XPBuffed = true; break; } if (!XPBuffed && Me.Level < 65) { foreach (TorItem ti in Me.InventoryEquipment) { bool UseIt = false; if (ti.Name.Contains("Experience Boost")) { UseIt = true; if (UseIt) { ti.Use(); ti.Interact(); tiu = ti; XPUsed = true; Thread.Sleep(500); break; } } } } if (XPUsed) { Logger.Write("XP Booster -" + tiu.Name + "- found in inventory and used."); XPUsed = false; return RunStatus.Success; } return RunStatus.Failure; }); } } } public static Composite HandleRest { get { return new PrioritySelector( ReviveCompanion, Rejuvenate, Stims, XPBoost ); } } Past it under Rejuvenate and overwrite public static Composite HandleRest. Do note XP booster will be used if you have any and are below lvl 65, but will not always report what booster is used.
Made some changes to the Marksman Routine: Added popping Crouch if you weren't already crouched as most abilities need that to work and it wasn't doing that. Added low health Ballistic Shield. Added Cover Pulse on point blank StrongOrGreater targets (to get them out of your face). 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 Marksmanship : RotationBase { public override string Name { get { return "Sniper Marksmanship"; } } public override Composite Buffs { get { return new PrioritySelector( Spell.Buff("Coordination") ); } } public override Composite Cooldowns { get { return new PrioritySelector( Spell.Buff("Escape", ret => Me.IsStunned), Spell.Buff("Shield Probe", ret => Me.HealthPercent <= 70), Spell.Buff("Evasion", ret => Me.HealthPercent <= 30), Spell.Buff("Ballstic Shield", ret => Me.HealthPercent <=15), Spell.Buff("Adrenaline Probe", ret => Me.EnergyPercent <= 40), Spell.Buff("Sniper Volley", ret => Me.EnergyPercent <= 60), Spell.Buff("Entrench", ret => Me.CurrentTarget.StrongOrGreater() && Me.IsInCover()), Spell.Buff("Cover Pulse", ret => Me.CurrentTarget.Distance <= 1f && Me.CurrentTarget.StrongOrGreater()), Spell.Buff("Crouch"), Spell.Buff("Laze Target"), Spell.Buff("Target Acquired") ); } } public override Composite SingleTarget { get { return new PrioritySelector( //Movement CombatMovement.CloseDistance(Distance.Ranged), //Low Energy new Decorator(ret => Me.EnergyPercent < 60, new PrioritySelector( Spell.Cast("Rifle Shot") )), //Rotation Spell.Cast("Distraction", ret => Me.CurrentTarget.IsCasting), Spell.Cast("Followthrough"), Spell.Cast("Penetrating Blasts", ret => Me.Level >= 26), Spell.Cast("Series of Shots", ret => Me.Level < 26), Spell.DoT("Corrosive Dart", "Corrosive Dart"), Spell.Cast("Ambush", ret => Me.BuffCount("Zeroing Shots") == 2), Spell.Cast("Takedown", ret => Me.CurrentTarget.HealthPercent <= 30), Spell.Cast("Snipe") ); } } public override Composite AreaOfEffect { get { return new Decorator(ret => Targeting.ShouldAoe, new PrioritySelector( Spell.CastOnGround("Orbital Strike"), Spell.Cast("Fragmentation Grenade"), Spell.CastOnGround("Suppressive Fire") )); } } } } Will work on the Rotations as I get more familiar with the updated game. I'm still in the pre-60 stuff so we'll see what needs to change.
Changed the Kinetic Combat routine. I did not fix the misspelling. http://pastebin.com/ZAHETVwn The main changes are based around using Telekinetic Throw / Cascading Debris correctly, as well as fixing some bugs that caused the bot to stop functioning properly (eg, Kinetic Ward should use Spell.Cast instead of Spell.Debuff if you want to refresh before the last stack falls)
Thank you for that but is there any way we can make the profile stop looting and harvesting, especially running to nods on the map.
Not sure if it still works, but we used to simply edit the "BuddyWingSettings.XML" file that you will find in the "Settings" folder under your character's name. Look for : <LootNpcs>true</LootNpcs> and change that to "false" same with : LootProfessionHarvestables>true</LootProfessionHarvestables>
Thanks that sometimes work sometimes the bot still loots and harvests. Why he does that I have no idea
Got some updates, since I've been playing DvL lately: Vanguard/Tactics: 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("High Energy Cell"), Spell.Buff("Fortification") ); } } public override Composite Cooldowns { get { return new PrioritySelector( Spell.Buff("Tenacity"), Spell.Buff("Shoulder Cannon", ret => Me.CurrentTarget.BossOrGreater()), 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 <= 60), 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), Spell.Cast("Shoulder Cannon", ret => Me.HasBuff("Shoulder Cannon") && Me.CurrentTarget.BossOrGreater()), new Decorator(ret => Me.ResourcePercent() < 60, 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") && Me.HasBuff("Tactical Accelerator")), Spell.DoT("Gut", "Bleeding"), Spell.Cast("Assault Plastique", ret => Me.CurrentTarget.StrongOrGreater()), Spell.Cast("Stockstrike", ret => Me.ResourcePercent() >= 60), Spell.Cast("Tactical Surge", ret => Me.Level >= 26 && Me.ResourcePercent() >= 60), Spell.Cast("Ion Pulse", ret => Me.Level < 26 && Me.ResourcePercent() >= 60) ); } } public override Composite AreaOfEffect { get { return new PrioritySelector( new Decorator(ret => Targeting.ShouldAoe, new PrioritySelector( Spell.CastOnGround("Mortar Volley"), Spell.Cast("Sticky Grenade", ret => Me.CurrentTarget.HasDebuff("Bleeding")) )), new Decorator(ret => Targeting.ShouldPbaoe, new PrioritySelector( Spell.Cast("Explosive Surge", ret => Me.ResourcePercent() >= 60)) )); } } } } Juggernaut/Vengeance: 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 Vengeance : RotationBase { public override string Name { get { return "Juggernaut Vengeance"; } } public override Composite Buffs { get { return new PrioritySelector( Spell.Buff("Shien Form"), Spell.Buff("Unnatural Might") ); } } public override Composite Cooldowns { get { return new PrioritySelector( Spell.Buff("Unleash", ret => Me.IsStunned), Spell.Buff("Enraged Defense", ret => Me.HealthPercent <= 50), Spell.Buff("Saber Reflect", ret => Me.HealthPercent <= 90), Spell.Buff("Saber Ward", ret => Me.HealthPercent <= 70), Spell.Buff("Endure Pain", ret => Me.HealthPercent <= 30), Spell.Buff("Enrage", ret => Me.ActionPoints <= 6) ); } } public override Composite SingleTarget { get { return new PrioritySelector( 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), //Movement CombatMovement.CloseDistance(Distance.Melee), //Rotation Spell.Cast("Disruption", ret => Me.CurrentTarget.IsCasting && !DefaultCombat.MovementDisabled), Spell.Cast("Force Scream", ret => Me.BuffCount("Savagery") == 2), Spell.Cast("Vicious Throw", ret => Me.HasBuff("Destroyer") || Me.CurrentTarget.HealthPercent <= 30), Spell.Cast("Shatter"), Spell.Cast("Impale"), Spell.Cast("Sundering Assault", ret => Me.ActionPoints <= 7), Spell.Cast("Ravage"), Spell.Cast("Vicious Slash", ret => Me.ActionPoints >= 9), Spell.Cast("Assault", ret => Me.ActionPoints < 9), Spell.Cast("Retaliation") ); } } public override Composite AreaOfEffect { get { return new Decorator(ret => Targeting.ShouldPbaoe, new PrioritySelector( Spell.Cast("Vengeful Slam"), Spell.Cast("Smash"), Spell.Cast("Sweeping Slash") )); } } } } Both work great, tested over many hours solo and in Flashpoints. Tactics especially destroys stuff in good gear. If anyone still has GIT rights (I lost my login info) please upload these to the base bot.
The code will work 100% if we ever get the health issue fixed. Right now, the bot can't read other players' health numbers, so it always thinks everyone is at 0 health.
For combat, i was referring to this guide: it seems to be pretty up to date and he is quite known in the swtor community. Hayete I honestly dont know when the changes regarding saber throw being removed were changed. I only started playing swtor on patch 5.0. After doing a google search, it was before the latest expansion though. If you are not following a guide, how do you know the combat routines do at least half decent dps?
Sorry if i am being stupid guys but where can i find the SVN for the default with the latest updates ?!?!? it seems i am not able to find it anywhere Thanks in advance