This routine is updated every few days to maybe once a week at the latest. So if checking for a 'routine update', check THIS FIRST POST, and not the date on the thread. The FIRST POST date will show you the last date I updated the routine. Installation Go through your BuddyWing folder, and delete anything under CompiledAssemblies. Ditto, anything under any Routines folder in bin or obj folders. Unzip "Joes" into the Routines folder so it looks something like Drive:\BuddyWing\Routines\Joes. It is STRONGLY recommended you keep only ONE CC in the Routines folder, and save-off/move any others you're not using at the moment. GET RID of any plug-ins - from my experience they only cause problems. What it DOES Combat Routines for All Classes/Specs and (Group) Heals where applicable (I'm not claiming any of these are perfect - if you're familiar with writing a routine and using Joes - and have a better combat routine than what's in there, send it across to me and I'll incorporate it.). Reliably (Within Reason) fights and heals in combat, in instances. When you enter an instance/Ops/Flashpoint, you will need to restart the bot/executable, and also run the CombatBot.xml profile. In Combat (Op/FP), acquires the Group Target when In-Group (for Ranged Specs), or the Nearest Target (for Melee Specs, if movement disabled) - configurable per the Weakest Target key described below. Harvests corpses on droids and creatures, where you have the skills. Runs random grinding, killing/looting/harvesting any nearby mobs it finds per the DoRandomGrind setting.. Runs Garbage Collection internally in order to try and prevent hangs. Provides an XP/Hour message every two minutes, along with an ETA-To-Level time. Provides a rough DPS value after each encounter. Provides customizable Affinity and Priority settings for both the Bot and the game. Provides customizable Hotkeys for: Pausing the Bot, Setting Target-Weakest (if In-Group and Ranged), Toggling Tank- (Guard-) Targeting if tanking, Toggling Combat, Toggling Movement, Aborting on Hang Uses the appropriate Class Stim if you have them on-hand (thanks to Cryogenesis on this request) Uses XP Boosters in inventory if UseXPBoosters is set.(thanks to Cryogenesis on this request) Uses a Mount per the key set, described below.(thanks to Cryogenesis on this request) Uses Rocket Boost per the key set, described below.(thanks to Cryogenesis on this request) Resurrects you using the Medical Probe if you die (and not in-group, and Rez enabled, described below) (thanks to Rostol on this skill) Uses Reputation Boosters periodically in inventory if present (thanks to Cryogenesis on this request) Resurrects your Companion if dead, and resummons them if not present, when not In-Group. Summons and uses a Field Repair Droid if the Legacy Ability has been acquired (recommended if you get it, Max-It-Out). What it does NOT do PvP - you can try it - on your own. I've gotten it to work - just a pain restarting the bot in every warzone, and I had to highly customize the combat routines. Note that this CC is geared for fighting NPCs (as-queried, and per-rotation). For an example of coding for PvP, scan for 'BGCombatPvP' within MercHelpers.cs. Two main considerations for coding PvP: (1) OOC will need to constantly monitor for a valid target and enter combat if one has been acquired, and (2) The actual combat routine itself needs to override the Attackers() list etc, as the default Attackers() list is set up w/TorNpc's. Provide an absolute guarantee of stability - BuddyWing is well beyond any other SWTOR bots I've seen, but nothing is ever perfect, and problems occur. General Notes for Usage in Ops/FPs/Etc Run CombatBot.xml - otherwise the bot will be trying to run off to run a quest, and more-than-likely won't even fight as it's all confused with questing directives inside of an INSTANCE. Recommended you do your own movement and disable bot-controlled-movement via the Delete Key (toggle) after you start the bot and the CC has been loaded - issues with meshing in most instances. So far as targeting, if you're Melee and have movement disabled, the CLOSEST mob is targeted, so move accordingly. Movement inside of Ops/FPs, sketchy at best, which is why I recommend you DISABLE IT. Recommended you load and run the bot once the instance is 30%-or-so-loaded (basic hooking etc can be done at that point). If you're running with movement disabled and using a class that has abilities that (a) MOVE YOU (Force Leap,etc), or (b) PUT YOU IN COVER (Crouch, Take Cover, etc) you will need to do those abilities ON YOUR OWN. Cover stops movement, and obviously Force Leap, etc, moves you. IF YOU'RE RUNNING A TANK, STRONGLY SUGGESTED you set AutoTarget to false. Auto-Targeting will STILL occur with a tank, but ONLY to hit mobs attacking other group members in HandleGuarding(). As a tank, YOU will need to do the initial pull. You'll also need to perform the initial Guard. And for tanking, this is geared for FPs, NOT Ops. In Ops (TFB etc) you may- or may-not of course be the Main Tank, stack/taunt-handling varies depending on the group and boss, and this is NOT CODED for all that. FPs, and FPs, ONLY. Customization Edit the file drive:\BuddyWing\Routines\Joes\Helpers\MercHelpers.cs - If you don't have C# Express or C# installed, you can simply edit it in Notepad or Wordpad, and then rerun the bot. When saving (outside of C#), be sure the file is in UNICODE character-format (as text). Customizable Variables (These are found at the top of MercHelpers.cs) DoRandomGrind - Default - false - Set to true to just run around and kill shit. With this, you'll need to park it in a 'Mob-Rich' area first, so it will have plenty to kill. MedProbeMaxWait - Default - 30 - Maximum amount of time in Seconds to wait for the Med Probe Rez to become available after death. After this, a Medcenter Rez will be used. EnableMount - Default - false - Set to true if you wish to use a mount. EnableRocketboost - Default - false - Set to true if you wish to use the Legacy Ability, Rocket Boost. chMount - Default - 'X' - Set this to the upper-case-equivalent for what you have aliased in SWTOR. an 'x' in SWTOR, translates to 'X' in MercHelpers.cs, for example. chRocketBoost - Default - 'Y' - Rocket Boost, same setup as with Mount. BotDefaultPriority - Default ProcessPriorityClass.BelowNormal - adjust this if you know what you're doing here - otherwise leave it alone. SWTORDefaultPriority - Default ProcessPriorityClass.AboveNormal - adjust this if you know what you're doing here - otherwise leave it alone. ProcessSetAffin - true - Ditto re: Priority.. ProcessSetPriority - true - Ditto re: Priority. MountCheckFreq - Default - 15 - if a mount has been enabled via EnableMount, this is the frequency in seconds for a mount attempt, out-of-combat. AutoTarget - Default - true - Auto-Target. ONLY set this to false when you're running CombatBot and running all your targeting MANUALLY, or tanking in FPs. Defaults to true when DoRandomGrind is set to true. AutoTargetExplicit - true - Explicitly target the Auto-Target On-Screen. Defaults to false if AutoTarget is false. AutoTargetTank - true - As part of targeting will first run Guard-Targeting (target mobs attacking other members of the group, and THEN attack using the standard methods). AutoTargetLOSOnly - Mainly for out-of-group: ONLY Auto-Target mobs meeting the rest of the standard criteria (Hostile, in PullRange, etc) and ALSO in Line-Of-Sight. MaxNodesBetweenFights - Default - 2 - Used with DoRandomGrind - Maximum number of nodes to hit between fights if you have Scav/Bio/Etc. ScanForLoot - Default - true - Run scan for Loot - Mainly for use with DoRandomGrind. ScanForNodes - Default - true - Run scan for harvestable nodes - Mainly for use with DoRandomGrind. ScanForChests - Default - true - Include chests in the placeables scan - set to false if meshing issues. DRGMinToughness - Combattoughness.Standard - Minimum mob Toughness to consider within DoRandomGrind. PullIG - Default - false - Pull-In-Group - Only set to true if you're running a tank within a group/instance/etc. HarvestCorpses - Default - true - Harvest corpses with Scav/Bio if possible. MovementToggleHotKey - Default - Keys.Delete - Key to toggle movement - mainly used In-Group, in instances, to disable bot-controlled-movement. TargetingToggle - Keys.Add (+) - See notes below. PauseToggle - Keys.Subtract (-) - Pause the bot. CombatToggle - Keys.Home - Toggle Combat - To allow/disallow combat - mainly for use in groups. RehookFreq - Default - 60 - Frequency - in seconds - to do an 'internal restart' on the bot. This is basically something to try and clean things up if the bot has gone haywire/unresponsive. ReportDurs - Default - false - report durations of various components in the log as the bot is run. Helps with debugging and performance issues (scanning for loot/nodes/etc) DisableAutoRez - Default - false - Disable (so effectively sit-and-wait) when death is detected (i.e. you're running quests etc manually, with CombatBot.xml, and out-of-group) UseVendor - Default - true - Use Vendor on rez at medcenter EnableGC - Default - true - Run periodic GC to try and avoid 'Haywire Moments' ProtectCompWhenWeak - false - Attack mobs attacking your comp when weak (<=70% Comp Health and CHP<HP). I added this to avoid the 'combat chicken dance' when running a Melee Class/Spec - so STRONGLY suggested you leave this at false. If your comp is constantly running low on health, I suggest your regear them or use a different comp. Special Keys (Discussed in -Customizing It- Above) MovementToggleHotKey - Default - Keys.Delete - Key to toggle movement - mainly used In-Group, in instances, to disable bot-controlled-movement. TargetingToggle - Keys.Add (+) - If you're a tank, toggles Guard and Weakest, both (so if false, you're manually targeting). If not In-Group, toggles Auto-Target. If In-Group, toggles TargetWeakest. PauseToggle - Keys.Subtract (-) - Pause the bot. If Movement has been disabled, then of course so will Group Tag-Along. CombatToggleHotKey - Keys.Home - Toggle Combat.. ForceAbortHotKey - Keys.NumPad0 - Force Bot Main Thread ABORT (if hung) Updates 08/16/2014 FRD bullshit. 08/17/2014 Performance tweaks to HasQuestAndNotStepComplete() (in re: to CheckQuestingPOI()/OOC()). 08/18/2014 Targeting fix for (when In-Group and combat begins, or out-of-group and 'walking into combat'), added variable UseXPBoosters and CheckForXPBoost(), added code to automatically use Kolto Stations if In-Group and one is within 4m (as with CZ SMs), correction to SageCombat() on pull, update for OperativeCombat() re: Cull. 08/24/2014 Updates for: FRD (now even a little more 'Brute-Force' on the scan), DPS Calc (in GetAttackers() - was being understated much of the time, framelocking issue), CanHarvestObj() (framelocking), CanHarvestUnit(), added InteractWithUnit() (scav/harvesting), GunslingerCombat(), Buff-Detection (in GetEffects()), ScanForGoodies() (Dark/Light Stronghold Datacron check added) 08/29/2014 Updates to movement, added AutoTargetLOSOnly, correction to MercFaceAndCast (would 'hang' causing delays in combat), updates to SageCombat(), MercenaryCombat(), GuardianCombat(), RunRandomGrind(). Later, an update to better support Sage Balance builds. And later-still, an update per suggestion from Alltruist (TWToggle changed to TargetingToggle, if not In-Group, it will toggle AutoTarget). Added In-Group Unrefined Kolto Auto-Use, added Auto-Target-Toggle (while In-Group). 08/30/2014 Updates to MercCast() and MercCastOnGround(), update to the Root Folder Name - now called FightAtJoes - had to do with the SVN Trunk name. Also, an update to MercenaryCombat() (to run Group Heals at-or-below 80% Player Health if you're Heals - mistakenly running at 50% prior). 09/05/2014 Updates to MercenaryCombat() (performance), SawbonesHeals(), RunRandomGrind(), IAmDead() (re: rez), GuardianCombat(), ScoundrelCombat() (cleanup, DPS). Credits & Special Thanks 1. Aevitas and Apoc: For development of the bot in the first-place - it can do a hell of alot. And Aevitas has done alot to improve the bot and keep up with all of the updates to SWTOR - no easy task. 2. Walter And Crew - For their dedication to the bot, all help to everyone, and work on Walter's Waltz - a great CC. 3. ChinaJade - I've referred to her code infinitely in development of this. 4. xMasterPandax - The 'Bling' in this post . SVN: FightAtJoes
Will be testing later tonight! Your last profile helped my BH alot when i made my grind profiles, so please do not discontinue your work! Thanks for the work you put in to this
I agree with Mizzle. Using his profiles and your modified class files (both awesome stuff) and for the first time i can see the HUGE potential of BW. I mean, i have always known there was one but seeing it is pretty damn nice. And for some reason i'm not actually crashing even close to as much as when i use stock DefaultCombat. I managed to run BW the entire night on one VMWare and one "physical" computer. Sadly my programming skills are so lacking... if i could i would make similar stuff as Brewski for republic side.
VERY interesting implementation, JoeBrewski. It looks like you've side-stepped a large chunk of BT-processing in favor of using native C#. I've always suspected that visiting all the BT nodes were costing significant performance, can you speak to your findings with this implementation? Is it significantly faster (as I suspect it is)? Can you express the performance improvement in terms of percentages or any other relatable quantity? Did you run into any 'gotchas' (e.g., logic gets twisted in some areas while doing this--particularly in areas needing a 'wait' or 'waitcontinue')? Thanks for your time, and taking the risk to do something innovative! cheers, chinajade
Percentages, no. PvP, all I can tell you is, fewer errors. Much of it comes from my HonorBuddy coding a couple of years back (prior to PrioritySelectors). In short, so far as the 'reliability' of the code, fewer moving parts, less to break, perhaps. And of course your knowledge on the framework is vastly superior to mine - I just ran with trial-and-error testing to see what would work reliably in my testing. One of th biggest things I was trying to avoid was the plethora of hangs that would occur originally, particularly with the Bounty Hunter code, which from what I could see hadn't been touched in quite awhile - and it wasn't 'pure' to begin with so far as 'using the framework' - I haven't revisited it since. Joe
Thank you for responding! I like your "fewer moving parts" comment a lot. I've forked the WingIt codebase into a Google project to try out some of your techniques. I sure hope you don't mind. Thanks again for the great contribution! chinajade
Not a problem - to you, True, Mizzle, and everyone else - thank YOU And the code-sharing - BuddyWing by its very nature makes it possible - amazing product - so many capabilities.
I apologize when I accidentally deleted this thread I didn't say any attachments. Hope I didn't screw anything up/ P.S Suck it chinajade! I finally passed your post count.
Sorry for the long time between responses but it works awesome as allways joe! Only tested as bodyguard Any chanse you could make it use "concussion missile" when lets say mobs >= 3? And it would also be awesome if you could get it to interupt spell casting with disabling shot And use the electro dart stun Alot of "And" there i know It might do all those things already just that i have done something wrong aswell. i downloaded your pack and moved the "Boduguard.cs" and "MercHelpers.cs" into: Buddywing\Routines\DefaultCombat\DefaultCombat\Routines\Advanced\Mercenary
Seems i have found some kind of problem... Running Mizzles Alderaan grind there are some mob packs that have a strong "dog" like creature that's melee and 2 or so ranged normal mobs. When the bot engages them it starts by opening on the normal mob but then the "dog" creature charges you and the bot changes target to that "dog" even though the ranged normal mobs are like 15-20 meters from me. The problem with this is that my char dies A LOT as he isn't able to kill the strong mob before getting heat problems.
I believe this has to do with the (I believe compiled - in the .exe) targeting system. Priority is with anything within melee distance FIRST, and then ranged (starting with the weakest first). Will see if I can override it somehow - I've seen the same issue, but I've been able to outlast the strong mob in melee. Will notify and post another set in the orig if I can find a way around it. Thanks for the feedback! Joe
Hi, Truestorybro, If you're using WingIt CC, its priority is to kill non-crowdcontrolled mobs that will die the quickest. If a strong mob has significant damage, it should die faster than a normal (lower armor, fewer total hitpoints) mob that has full health. If the strong mob doesn't have enough damage, then it will prefer the full health 'normal' mob since they die faster. In general, strong mobs are harder to kill, but also don't do as much damage as 'normal' mobs in the questing world (i.e., not flashpoints). The WingIt kill order takes mob distance, mob armor/strength, and mob hitpoints into consideration when selecting target priority. Ideally, it would take damage dealt by each mob into consideration, but there is no BW API for adding this to the calculation. There could be a bug in WingIt's assessment of which mob will die the fastest, or you've just gotten into a really bad situation that requires finesse (i.e., a human brain) beyond what WingIt is currently capable. Not sure which target JoeBrewski's CC prefers. If you're using the DefaultCombat CC, it just uses whatever target the BWcore has picked. If I'm not mistaken, outside of the pull, BWcore selects the next kill target solely on the distance from the toon. I also believe that DefaultCombat CC won't change targets until the selected mob is dead, whereas JoeBrewski's and WingIt will. Might try a different CC and see if it fares any better to get you over this hump, then go back to JoeBrewski's. I believe Mizzle indicated that all his testing was on the DefaultCombat CC. cheers, chinajade
Where do I put the MercHelper.cs file ? Do I have to use a specific build ? Can I use both empire and republic ?
Where do I put the MercHelper.cs file ? Buddywing\Routines\DefaultCombat\DefaultCombat\Routines\Advanced\Mercenary Do I have to use a specific build ? It is my understanding that it will work with every build in the merceneary tree's since there is a routine for each spec (only tested bodyguard myself)
Either of Firebug or Bodyguard: - Replace the DefaultCombat.cs script with that from the .zip (eliminates wasted resting time and ensures that the Out-of-Combat you're running is scrictly from within MercHelpers) If you're running Firebug - due to the bug in the Spec Handler - just follow the note from my original post regarding SpecHandler.cs (needs to return tree3 on the first function listed in the script). I'd strongly also suggest a rename of all original scripts with a .csx extension before copying over the scripts from the zip. Hope it Helps Joe
Hi Joe, I am using firebug - forced tree 3 - DoRandomGrind - true and using cobat.xml and working ok until a mob out of range of my character but not out of range of mako is fighting mako. My character just stands there. and mako and the mobs duke it out.