Howdy All.
Blizzard has f*&-ed up Cataclysm beyond repair (Tol Barad anyone?) in my opinion, so I am leaving. When a hard core botter going all the way back to the early days of Everquest thinks things are unbalanced you know Blizzard has problems . However, others might still love WoW, or are willing to wait for Blizzard to fix things, so I would like to give back to the community from which I learned so much.
KillBots!
This is now a DISABLED bot , there is no executable just the .cs files. I cannot share the "injection" tools or LUA interpreter that allowed for the bot to manipulate WoW (sorry!) since that code had a lot of advanced Warden avoidance systems and other tricks that I am not going to share. However, I am hoping some of the "logic" or ideas in the C# files, and the very large database of "contexts" I have created can be of use to the community. Feel free to borrow from the code at will and use the ideas in your own bots if you want. If you happen to acknowledge me, that's great, but don't feel obliged.
I attach therefore my C# bot that is a semi-automatic bot with considerable flexibility. Consider it a "party" bot. In arenas, it can run a party and get arena scores to around 1500 or 1600 (WOTLK) in PvP. My parties of 3 to 5 would simply rock BGs (PUGs are relatively stupid, so much easier to beat). There is a "main tank" that all the other bots follow, and take their lead from, though in fight situations, they will also choose their own actions as necessary.
NOT an afk bot. Not a walkaway bot. No "speed" hacks or collision hacks. This is for people who still want to enjoy the game, but want to run 5-10 bots at once as their own party or raid.
Features you will find in the bot:
Added after original post:
- An Access DB with all the situational contexts and actions. Updated for Cata for Death Knights, Warriors, Priests. Will need some work to update for the other classes. Yes, I know Access SUCKS. I just never got around to coding it in MySQL.
- Program reads the DB in a class specific manner, and then several times per second compares the "state" of WoW against the conditions. If a condition exists, it activates a set of tasks in a queue format.
- A large "interpreter" code for many more kinds of situations and conditions than I have seen in any public bot.
- Party format where a main tank (you) is moved semi-manually. The rest of the bot party will follow along (as needed the rest of the party will follow your MT lead in casting mounts, following on foot or in air). Once the MT locks on a target, everything is pretty much automated from there (with key-based options to take manual control as needed).
- "Steer" and vector-based Class/Project for positioning on battlefield (adapted from the well known, classic Autonomous Steering Behavoirs library) . Bots will followMT as per "Boids" (looks more natural), and positioning on battlefield is based on repulsion/attraction. Basically, with this system you inform the routine of all the positions of your party or PvPs/NPCs/Objects to avoid or move towards and the routine will determine an appropriate crowd-based positioning. Code has ability to look for cliffs and avoid. Totally self-sufficient Project that can be hooked into any other project.
- A publish/subscribe system for interfacing with a pathserver. Pathserver read the MPQs and gave back paths. ClickToMove was used to move. Correction algorithms to stay away from cliffs, objects etc. I had just finished rehacking the new Cataclysm MPQs when I decided to quit, so sadly I did not get the final version into this package. Happy to upload the "old" pathserver I had if people request it, but it only works with the old MPQs from WOTLK.
- Publish/Subscribe server was also used for inter-bot communication as needed.
- A "smart" condition hashing system that only needs to check each "condition" once per cycle. Certain condition checks are costly, so the caching/hashing system sped things up a lot.
- Conditional moveto systems for pathing. That is, a given situation could activate a task-based call to the pathing system to go somewhere. Easy to set up for your style of play in BGs to make a fully automatic bot that looks real, fights better than most real players, auto-caps, TARGETS cappers immediately for attack to prevent capping of flags, etc.
- Advanced radar system to display all nearby objects, click on screen for retargeting, automatic radar zoom when in fights to only focus on objects of relevance.
- Looting/Mining/Gathering code. Blacklisting, etc.
Database:
- If there are more than one members in your party that are "seen" in the list, and which are "bots" of yours, then those members will be protected or healed. The logic in the system checks first for your party members listed in the Party class and gives them preferential treatment, but non-bot party members or raid members are then next in preference (protecting and healing).
- Extremely deep "CanCast" routine that checks movement, LOS conditions, and many other features before it allows for a Context that is going to cast a spell to be called as "true".
- If a spell to be cast needs a "stop movement", multiple checks to stop movement and wait until ready to cast.
- A mostly finished CC routine that is meant to "share" CC tasks among the party to ensure all bots don't shoot their CC wad on the same caster, and "parse" out CC tasks to each other to spread the CC gain around the party. Works by the inter-process Subscribe/Publish routine.
- A "needs to be reworked for Cata" routine that follows diminishing returns for PvP and PvE. Reads auras and spells cast, places them into categories and then calls a spell as "not castable" if it is maxxed on diminishing returns for a given target.
- Movement depends (corrects/self-heals) A LOT based on an in process LOS function that can determine collision between two points. There is a routine that checks all around a given point, determines if a collision or cliff is nearby, and adjusts the point to move to AWAY from that point. Great for cliff avoidance and bridges and tight spaces.
- A "jump" routine that looks ahead and slightly to the sides in an oblique angle for an object ahead to "jump" over. It then activates a jump to get over fences, etc. Far from perfect, but better than that bot you see humping the rock for 5 minutes before it times out the server and crashes.
The database is essentially a formalized "if X elseif Y then Z" format with a priority system applied. It was basically to get around the huge spaghetti coding that one usually finds in class specific bot code and allow for large condition sets and priority based task queueing to be set up and re-used. The most flexible coding is the Method and Method_Equal columns (corresponding to similar classes in the C# program).
Tasks could be queued, and could be anything from casting spells, switching stances, calling for a path to be found and enacted, changing equipment, eating food etc, avoiding certain players or characters... basically anything.
The access DB provides some rudimentary search functions.
Program Logic (to help those trying to read this):
1. Cycles through logic each frame.
2. A throttle to keep in frame CPU usuage to below FPS time.
3. Check most relevant states (Health, object positioning, threats, etc.) 5 times per second. Hash and cache conditions for efficiency.
4. Check for targets/threats. Measure against DB conditions.
5. Queue up tasks.
6. Do tasks. Interrupt tasks if certain threat conditions are met and go back to 1.
Ok, I am biased... but this party bot kicked butt. I could do PvP or PvE. I rarely grouped with others (job constraints), and I frankly liked just doing dungeons and PvP by myself. I was never accused of being a bot, was never banned-- and I ran as many as 10 accounts at once on this at times-- over the course of nearly 3 years. The bots look and act like natural players with a lot of the features I added in. There are nearly a thousand "conditions" set up within the bot DB. Again, my preferred characters were DK and Priest, and they are most sophisticated in the DB, but Warrior and Druid were pretty far along for the Cata redesign-- and I was about to redo the Shaman and Paladin. Warlock is partly in there, and Mage spells are listed but nowork at all done on them. No DB coding at all for Mage or Rogue. I used ElitistJerks.com rotation recommendations for most of my priority spell and action setups.
Again, don't ask as I simply cannot share the LUA code or the injection code. However, I am happy to answer limited questions on the .CS code. The code, again, is really for more advanced programmers to scrounge for idea scraps. IT WILL NOT RUN and if you pull it up in Visual Studio it will show a zillion errors because the corresponding injection, LUA, and memory read DLLs are removed to protect the ideas behind the inject and anti warden code.