Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 14. leden 2014, 21:03:23 Předmět: Jak vytvořit vlastního bota do hry, který skenuje obrazovku? |
|
|
Jde o výzvu vytvořit AI do komerční hry.
Nejdřív ale musím vyřešit získávání informací o stavu hry a její ovládání. Informace chci získávat z obrazovky, ne z dešifrování dat/paměti. K ovládání stačí mít možnost "posuň myš na pozici", "klikni levým tlačítkem myši na pozici".
Nějaké zkušenosti s touto problematikou? A případně možnost doporučení frameworku/"návodu" ideálně pro některý z jazyků C++/C#/Java?
Vím, že Mem má s tím zkušenosti, tak Meme, spoléhám na tebe, že mi poradíš. Nepotřebuji prakticky nic jiného než ty jsi potřeboval u bota pro Letterii - rozpoznání statického textu z okna a posílání eventů myši do okna. _________________
![](http://button.slidedb.com/popularity/medium/games/42907.png) |
|
Návrat nahoru |
|
![](templates/subSilver/images/spacer.gif) |
micky
![](images/avatars/87589810259749f32f0368.png)
Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
Zaslal: 15. leden 2014, 13:40:04 Předmět: |
|
|
Něco takového jsem kdysi dělal... Ke čtení jsem používal winapi (C/C++), dostal jsem pak "raw" data. Ke změně pozice kurzoru taky winapi, kliknutí jsem ale nechával až na uživateli. Nebylo to zase tak těžké - pokud chceš, můžu ti někde nasdílet tuhle část kódu. _________________ https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/ |
|
Návrat nahoru |
|
![](templates/subSilver/images/spacer.gif) |
Mem
![](images/avatars/78647774153fca021e5ea2.png)
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 17. leden 2014, 08:46:24 Předmět: |
|
|
Jo já takových botů dělal víc... Jak u Letterie tak třeba u RuneScape jsem snímal okno klienta do bitmapy a pak si tam analyzoval, co bylo třeba. Žádné pokročilé OCR to ale nebylo, jen předzpracování na úrovni pixelů (většinou převedení na ČB, abych nemusel řešit odstíny) a porovnání s předuloženým vzorkem (typy písem v Letterii, typy textů v RuneScape - tam jsem totiž posouval kurzor po krocích po celé obrazovce a kontroloval tooltip. Když byl třeba Attack, Take nebo Bury, tak jsem začal klikat ).
Na screenshoty jsem používal klasické WinAPI (GetWindowDC, BitBlt), na práci s kurzorem a okny taky (WindowFromPoint, Keybd_Event, mouse_event - ten vlastně používám doteď i v C#, i když kurzor už nastavuju přes System.Windows.Forms.Cursor.Position)
Jinak u RuneScape nebo WoW jsem měl i autologin, protože hra často vypadávala. Tam jsem myslím detekoval class nebo titulek okna a když to byl login screen, tak buď podle ID nebo odpočítáváním přes TABy trefil políčka a vyplnil tam username a password a vyčkával, jestli došlo ke změně. Když ne (např. server byl přetížený), opakoval jsem to. Díky tomu mohl klient běžet autonomně a hezky farmil .
Nějakou detekci obrazu mám myslím i ve WebMapSaveru (utilita pro hromadné interaktivní ukládání webových map, např. od Seznamu, která posouvá výřez mapy tažením myši).
Všechno to ale byly takové humpolácké metody hrubou silou, nemusela by být špatná nějaká knihovna na detekci obrazu nebo u 3D her technika používaná u aimbotů, vyčíslení objektů scény. Budu rád, pokud se potom podělíš o svoje zkušenosti ![Smile](images/smiles/icon_smile.gif) |
|
Návrat nahoru |
|
![](templates/subSilver/images/spacer.gif) |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 17. leden 2014, 18:02:10 Předmět: |
|
|
micky: pokud se tu chceš podělit i s ostatními, tak to určitě zde nebude na škodu. Já se zatím budu pokoušet najít nějaké řešení spíš pro C#/Javu
Mem: dík za info. Já konkrétně chci zkusit bota do Might and Magic: Duels of champions. Co jsem zatím našel, tak do té hry jsou jen vyloženě primitivní boti, kteří jen zkouší zahrát jakoukoli kartu, neřeší vůbec, co je na obrazovce. _________________
![](http://button.slidedb.com/popularity/medium/games/42907.png) |
|
Návrat nahoru |
|
![](templates/subSilver/images/spacer.gif) |
Vilem Otte
![](images/avatars/7720396584e6d563282b1e.jpg)
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 18. leden 2014, 14:59:57 Předmět: |
|
|
Pro detekci objektů teoreticky můžeš použít např. OpenCV (i ve hrách by měl detekovat (a na herních snímcích detekuje) obličeje, postavy, apod.). Navíc běží teď i pod CUDA/OpenCL, takže bys to teoreticky měl zvládnout dostatečně rychle. _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
![](templates/subSilver/images/spacer.gif) |
micky
![](images/avatars/87589810259749f32f0368.png)
Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
Zaslal: 20. leden 2014, 15:26:48 Předmět: |
|
|
Tedy fragment kódu pro udělání screenshotu:
http://pastebin.com/MKhNTX1f
Je to jen inicializace + provedení, typy proměnných viz MSDN podle volaných funkcí winapi. Nebere fullscreen.
Zkoušel jsem s tím napsat color aimbot, to byla relativně zábava. No a potom jsem nechal program učit se hrát hru QWOP (genetické algoritmy + čtení obrazu + tesseract pro rozpoznání počtu uběhnutých metrů).[/code] _________________ https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/ |
|
Návrat nahoru |
|
![](templates/subSilver/images/spacer.gif) |
|