Пишем бота, или «Сказка о добром боте»

27 Сен
2011

Пока ты спишь враг качается! (с)народная мудрость

Всем рано или поздно хочется спать. Как оторваться от монитора, если ты весь в сражении? А тут еще и ресурсы можно копать между поединками. А самое обидное, что ты выкладываешься на 120% но всегда, на любом уровне есть задрот человек, который обходит тебя по параметрам, качеству и количеству одежды, оборудованию, верному питомцу. Что делать? Как быть? Писать бота!

Бот (bot, сокр. от robot) — специальная программа, выполняющая автоматически и/или по заданному расписанию, какие-либо действия через те же интерфейсы, что и обычный пользователь. Так сказано в Википедии. И это примерно 20% от того айсберга, который можно назвать настоящим Ботом.
Рассмотрим простейший вариант. Он-лайн игра с автоматическим ведением боя. Так же есть возможность поискать ресурсы между боями. В нашем арсенале есть LAMP сервер и несколько бутылок пива.
По сути, нам надо сделать несколько простых действий. Войти в игру и напасть на врага.
Вариантов реализации несколько. Рассмотрим один из них — сURL.
Приступим:
1) Вход в игру.
Сначала внимательно изучаем форму входа. Обычно там кроме логина, пароля, галочки «запомнить» есть еще несколько скрытых полей. Например «action».
Далее запускаем скрипт:
//…
$mail = ‘vasyapupkin@url.mail.com’; // логин
$password = ‘11111’; // пароль

//ссылка на игру 
$ch = curl_init("http://game.url/");
//вернуть полученную страницы
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
//передать параметр браузера
 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
// передать куки
 curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookiefile.txt');
//сохранить куки в файл
 curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookiefile.txt');
//передать в POST логин, пароль и необходимые переменные
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, 'action=login&email='.$mail.'&password='.$pass);
 $str = curl_exec($ch);
 curl_close($ch);
//…

Мы передали на игровой сервер свои данные. Если все прошло хорошо то сервер нас авторизировал, вернул нужные нам куки для дальнейшей работы и наш скрипт сохранил их в файл cookiefile.txt.
2) Выбор противника
Ходя по локациям игры мы можем парсить страницы и выбирать на кого напасть. Получить HTML страницы можно следующим образом:
//...
$ch = curl_init("http://game.url/location/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookiefile.txt'); 
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookiefile.txt');
curl_setopt($ch, CURLOPT_REFERER, 'http://www.moswar.ru/metro/');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'action= find'); 
$str = curl_exec($ch);
curl_close($ch);
//…

Используя полученный из прошлого примера файл cookiefile.txt, мы передаем серверу информацию о нашем боте, и сервер радостно отдает нам страницу с выбором противника. На ней мы выбираем ID (никнейм, любой другой нужный для нападения параметр) врага.
3) Атака
Выбрав противника, внимательно изучаем форму для атаки. Выбираем все скрытые поля. Подставляем ID противника в скрипт. Все делаем как в случае выбора противника, только подставив нужные для атаки значения в POST переменные. Атакуем и побеждаем!
Итак, у нас получился примитивный бот, которого можно запускать по расписанию на всю ночь и проснуться миллионером.
Несколько советов по созданию «искусственного интеллекта»:
— Бот должен быть похожим на человека. Он не должен быть точным как часы. Random Вам в помощь. Делайте разные паузы между боями. Участвуйте в игровой атмосфере. Дарите подарки. Добывайте ресурсы. Ходите по локациям.
— Ботов может быть несколько. Они могут заходить под одним аккаунтом в разное время и делать разные действия.
— Тщательно продумайте алгоритм движения бота по игре. Алгоритм должен предусматривать все возможные ситуации, такие как выход из боя, ожидание события, сбор информации и т. д. Например, во время боя никак нельзя пойти в шахту.
— Помните, что Администраторы игры тоже не лыком шиты и уже давно все это знают. Следите с какого IP и как часто заходите в игру. Как ведет себя персонаж, когда им управляете Вы и бот.
Удачной игры!
Полезные ссылки:
PHP сURL: http://php.net/manual/ru/book.curl.php
Регулярные выражения для парсинга страницы на Википедии
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх