TG Daily interview: Chat with a World of Warcraft bot programmer
How does WoWglider work?
TG Daily: How does the program detect a mob and kill it? Are there areas in the game where Glider works very well and others that it doesn't work well? I can imagine that instances and mobs that do spellcasting or stunning might be a problem.
Mercury: Glider finds monsters in the game just by reading the program's memory, which changes from patch to patch. When it finds something that it wants to kill, from your instructions, it sends keystrokes and mouse input into the game. It reads memory to see your health and mana, the monster's health, what it's doing, et cetera. It works pretty much you would, pressing keys and moving around in response to what's happening in the game. So it'll rotate to the monster, press Tab, see if the monster got targeted, then start casting spells.
As the fight goes, it keeps an eye on things and acts just like you: it'll use Hamstring when monsters get low if you want, it'll use Shield Bash if they start to cast spells, etc. It doesn't do anything you wouldn't be able to do, like find stealthed monsters or teleport or anything like that.
And, yeah, certain monster types and areas are very problematic for it because it's not as smart as a human. Stuns really ruin some classes and effects that move you, such as fear-casting banshees or punting Silithus snakes, wreak havoc on it, since it simply sees the distance between you and the monster increase and thinks the monster is running away, not you.
In keeping with the original reason for designing it, we don't worry that much about those monsters. The whole point of Glider is to get a character to 60 with minimal effort. So if those demon-summoning healer stun-caster guys are too tough, then go find some bears and wolves to kill. It's a tricky balancing act to keep Glider growing in a good way, but not try to make it the be-all, end-all tool that can magically wreck anything. There's a real human (hopefully!) picking the areas and monsters to work, so pick some good ones.
TG Daily: I know just enough programming to get myself into trouble. Does Glider shoot keystroke information into the WoW program or does it throw it into the operating system, which then goes into the client?
Mercury: Yeah, just into Windows. Injecting input into the game is more detectable and also creates more opportunity for an abnormal situation that could be detected as side-effect. For instance, the game client could simply ask Windows which application currently has the input focus while processing a keystroke. If that window is not the game, then it knows right away that there's some serious funny business going on.
Stay On the Cutting Edge: Get the Tom's Hardware Newsletter
Get Tom's Hardware's best news and in-depth reviews, straight to your inbox.
TG Daily: In your experience, does Blizzard change the memory locations with every patch?
Mercury: Yes, but this isn't intentional. Any time you change a lot of code or move things around, the physical locations in memory change. It's a non-issue for the developer, since your compiler and linker take care of that for you. But for somebody looking in on the outside, it creates work. It would be convenient for them to provide an API that we can call to get pointers to the structures we need, but I have a feeling that it won't happen soon. ;)