Basically only thing that i left in it was the color grid stuff. Deleted / rewrote everything else. The bot logic was such a mess i just deleted it lol. Kinda nice to make a bot again:P. Puzzle Pirates is a Java-based, cross-platform, pirated-themed MMO puzzle game run by Grey Havens. Fell in love with poker. Banned 3 days later. I use the bots.
Active1 year, 10 months ago
Bots, how do they work? Do they tell the video game a key was pressed or the mouse was clicked?
If not is there a way to have your program tell another program a key was pressed? I would like to make a program to beat some game. So any resources or examples are appreciated.
Update: So one way is to emulate keystrokes, so what are some methods to do this (in any language)?
user4157124
2,25866 gold badges1717 silver badges3333 bronze badges
AntonAnton
6,5461919 gold badges5858 silver badges8282 bronze badges
12 Answers
I've written a bunch of bots at one time or another (from Pogo games to Yohoho Puzzle Pirates). For windows, you're usually going to either be sending Win32 events to simulate mouse movements, or spoof the actually low-level messages sent between windows when the mouse is actually clicked. A lot of it really depends on how the program reacts (by accepting the message with the coordinates, or, in Java's case, immediately reading the mouse coordinates). The 'automation' part usually involves reading the screen and writing heuristics or algorithms for determining the state, but can also be as nice as packet sniffing (a lot of information there in poor poker implementations) or as hacky as reading memory locations directly. Pretty big 'field', and poorly documented as it's pretty profitable and not hard to get into.
Sending InputC/C++ (in Windows)
For keys, try CodeProject:
And messages:
Your best bet is to learn to send messages using the Win32 API, then use something like Spy++ or its derivatives to 'reverse engineer' how KeyPresses and mouse movements are sent to the window.
Java
Java has an amazingly portable Robot class that is able to:
I'd give that a shot if you're looking for quick and easy.
Basic Logic
This is described elsewhere on the internet in depth, but most bots follow a simple state-machine program flow. You read the screen (or packets, or memory), find out what 'state' you're in based on your readings and past data, do calculations, and send the result back out to the program.
Reading the screen can be difficult, but can be made easier if you consider that a lot of times, there are a few 'lucky' pixels relative to the window that will give you an idea of what state the program is in. The process of finding these pixels can be automated.
Stefan MaiStefan Mai
18.1k66 gold badges4646 silver badges5656 bronze badges
There are a couple of kinds of bots. From what I remember when I used to play CS (a long, long time ago)
Some bots use the libraries of the application itself to inspect the environment (the map, where players are etc..) The bots also use the library to control movement. I doubt there are many bot implementations that invoke mouse messages to tell the game how to move etc..
Some bots emulate the application level protocol (if it's multi-player). So in other words, the game doesn't even need to run. A bot can run in a virtual game.
I'm going to run counter to what one other poster has suggested: writing a game bot is probably a more valuable exercise than actually playing the game, and being curious about how they work is a good sign. :)
cgpcgp
35.5k1010 gold badges9292 silver badges129129 bronze badges
Some programs (such as ones that grind for you in an MMORPG) are simply emulating keystrokes. A tool to do this is AutoIt.
As for bots that actually play the games themselves, I've not really done anything with them, but I'm assuming they would use some sort of predefined set of actions, maybe a heuristic, but not likely.
samozsamoz
28.8k4949 gold badges130130 silver badges183183 bronze badges
The biggest flaw in this concept is not the input, but the game output. Your bot can't just randomly press keys, it needs to know what is 'happening'. Very few games allow you to query this data which would leave your bot to solve a very tricky problem - Converting 60 frames per second of 2D visual data into a virtual space.
There are actuially games out there that not only allow bot players, but encourage them. Open RTS is one of those but there are also simpler ones like GUN-TACTYX and crobots which are good starting points.
SpliFFSpliFF
29.8k1515 gold badges7272 silver badges106106 bronze badges
A bot like you describe it will simply emulate key presses and mouse movements/clicks, so the game cannot tell if a human is playing or another program. It would not have to interface with the game at all.
AlbertoPLAlbertoPL
10.5k44 gold badges3939 silver badges6969 bronze badges
Bots will be acting as clients to the game (server). Then, they can send appropriate data just as a user may be sending manually. The bot(client) will be analysing the data from the server ('someone is about to attack from the left'), et cetera. The client should be then able to compute the best move and send the appropriate data to the server to execute it.
I am not sure if this will work with all games.
Alan Haggai AlaviAlan Haggai Alavi
61.2k1414 gold badges9090 silver badges121121 bronze badges
It very much depends on the game. For example I made a bot for Travian (which is an online game) that used the internet explorer activeX to automate moves. I worte the application in c# and to get it to do stuff took about 30 minute. It's simple to call methods on the activeX an make it do things like fill in text fields or click on buttons. For login for example i used the folowing :
For those games that are desktop based things get more complicated. Windows allows for one aplication to send messages to another application so i guess you could use that to send messages to a game (although wheather this works for games that use directX for input i don't know)
Titian Cernicova-DragomirTitian Cernicova-Dragomir
97.1k55 gold badges8383 silver badges103103 bronze badges
Microsoft how to password protect a file. You can emulate mouse movements/clicks and keyboard input in Java with the Robot class. It also lets you take screen shots.
Bill the LizardBill the Lizard
306k159159 gold badges506506 silver badges799799 bronze badges
I think AutoIT is a great language for doing this sort of software. Even though I haven't used it to build bots, sending clicks and keys was very easy.
GeoGeo
49.9k9797 gold badges295295 silver badges474474 bronze badges
Puzzle Pirates Manual Bot 2017
My understanding is that most high-end gaming bots use system calls to map themselves into the game client's memory space, reverse engineer its layout, and directly manipulate the client program's internal variables. That's way more work than I'd be up for just for fun.
T.E.D.T.E.D.
37.2k77 gold badges5959 silver badges129129 bronze badges
Puzzle Pirates Manual Bot 2
When you say 'control a program' think about how programs are controlled. Most accept keyboard/mouse input.
If you write a program to simulate keyboard/mouse input, there you go.
A corollary to this would be that if a program accepted arguments passed through an input box, write a program to send arguments as if they were sent through an input box.
This is how all bots work. Hope it sheds some light for you!
Edit: This is how the vast majority of bots work :-)
TravisTravis
7,62688 gold badges3434 silver badges5151 bronze badges
For this you need to know programming.However, there are programs that allow you to program with visual means. For them, you do not need to be able to program.An example is the program Kibor. It is designed specifically for your purposes and has a visual editor with which you can create bots with block diagrams.Description of the program Kibor
It has many ready-made functions for bots. There is even a built-in text recognition moduleScreenshot Kibor. Text recognising
user9052043user9052043
Not the answer you're looking for? Browse other questions tagged bots or ask your own question.Comments are closed.
|
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |