Как сделать бота для игры
Перейти к содержимому

Как сделать бота для игры

Как сделать бота для игры?

Робот или Бот — это ни что иное, как программа-робот, работающая под управлением компьютера и заменяющая партнёров в сетевых играх.

Можно обратиться на сайт habrahabr, где есть подробное описание создания бота для игры.

И посмотрите обучающее видео.

Смотря для чего вам нужен бот. К примеру, в игре "Counter-Strike" во время игры можно добавлять ботов, то есть персонажей за команду, которые управляются не живыми игроками, а бегают сами по себе и выполняют ряд действий. При этом стоит отметить, что бот — это заскриптованный персонаж, которые выполняет команды при стечении обстоятельств и не более. То есть он видит противника — сразу начинает стрелять, при этом рандомно, процент попадания зависит от действий игрока и алгоритма.

Пишем бота для онлайн-игры на JavaScript с применением AOP


Если вы как и я любите онлайн игры, но не любите тратить на них сильно много времени, добро пожаловать под кат. Мы не будем обсуждать боты это хорошо или нет, а просто разберем как можно для конкретной онлайн игры сделать бота. Он будет не тупо клацать по кнопке по таймауту, а будет реагировать на события в браузере. Это мы сделаем с помощью Аспектно-ориентированного программирования (далее AOP). Для примера я выбрал полюбившуюся хабром игру Пернатск.

1. Готовим ингредиенты
  • Собствена сама игра. Я буду показывать на примере Пернатска
  • Браузер. У меня все стандартно — Chrome
  • Текстовый редактор или в чем вы будете редактировать JS код. Notepad++ подойдет
  • Аккаунт для тестов, который не жалко будет потерять в результате бана

Важно! Игра должна работать в браузере, а не в клиенте. Причем не на Flash, а на HTML+JavaScript.
На выходе у нас должно получиться расширение для Chrome, которое будет играть вместо нас.

2. Делаем расширение

О том как делается расширение я не буду подробно расписывать. На хабре об этом уже писали, например, тут.
Приведу лишь коды, нужных нам файлов.
В manifest.json

В строчке «matches»: [ «pernatsk.ru*» ] вам нужно будет указать адрес вашей игры.
Файл background.js я использую для случаев, когда хочу инджектить на сайте свой JS кода. Собственно код background.js:

Важно! Если вы не понимаете, что мы делаем в этой единственной функции, то делать бота вам пока рано. Почитайте основы JavaScript.
Вся работа у нас будет вестись в файле injected.js Его код пока такой:

Все эти файлы сохраняем в одной папке bot.

3. Первый пуск бота
4. Добавляем AOP

Для работы бота нам потребуются библиотеки. Мой любимый jQuery уже используется на Пернатске, поэтому добавлять его не будет.
Добавим плагин AOP for Jquery. По хорошему это стоило запаковать в само расширение в виде отдельного файла, но я ленив. Поэтому просто добавим код bin/aop.pack.js первой строкой в наш injected.js.
Проверим, что это работает изменив ai_on

Проверяем, что AOP нормально подключилось. В консоле разработчика теперь будет строчка «jQuery detected!» Сообщение будет только один раз, так как я отключаю совет после первого же срабатывания.
Важно! Прочитайте документацию AOP for Jquery, чтобы понять jQuery.aop.after и bot[0].unweave().

5. Зачем мы будем использовать AOP
6. Учим бота первой команде

В injected.js добавим такой код:

По этой команде наша бот-птичка будет лететь в Пернатске за шишками. Код слегка мудренный, так как в Пернатске есть небольшая защита от ботов.
Когда вы будете писать свои команды я рекомендую сначала опробовать их работоспособность в console, а уже потом переносить код в редактор.
Чтобы протестировать и проверить работу нашей команды запустим в косноле код commands.conessearch() Все работает.

7. Ищем событие на которое должен реагировать бот

Тут есть два метода первый — анализируем код игры. Долго 🙁
Второй метод — воспользоваться AOP, и после всех функций, который срабатывали вывести в лог их имя. Потом выбрать нужные.
Меняем ai_on()

У нас пойдет много-много функция. Там будет $ от jQuery или стандартная setTimeout.
Работать с этим очень не удобно изменим код еще раз.

Теперь у нас отражаются только те функции, которые еще не отображались. Их полный список мы храним в fnList.
После пары минут там будут такие варианты функции для прицепки [«clearInterval», «$», «setTimeout», «timerTick», «serverTimeUpdate», «getComputedStyle», «setInterval», «tutorialArr», «showQ», «showQc», «updateBirdData», «viz», «unviz», «weatherUpdate»]
Меняя target и регулярное выражение в method мы можем подобрать ту функцию, которая нам подойдет, чтобы к ней прицепиться. Для примера, я выбираю функцию weatherUpdate теперь каждый раз как будет меняться погода наша птичка будет лететь за шишками.

Среда для разработки игровых ботов бесплатно и с открытым кодом

Многие браузерные и сетевые игры, игры в соц.сетях отличаются скучностью и однообразием «фарма». Игрок ставится перед выбором — «фармить» или заплатить. И так получается не только из-за желания разработчиков заработать.

Немного лирики

Проблема в балансе. Если добыть игровые ресурсы, развить своего персонажа — просто, то ценность такого развития не велика. Потому «ценный лут» выпадает из поверженных монстров редко, а каждый следующий шаг в развитии стоит намного дороже, чем предыдущий.

В определенный момент все сводится к тому, чтобы потратить много времени на добычу игровых ресурсов, которые потом можно будет обратить в какие то преимущества в сражениях против игроков (купив/добыв артефакты, прокачав персонажа, развив недостающие навыки и т.п.). Время, потраченное на «скучный фарм», занимает бòльшую часть игры.

Пишем ботов

В большинстве случаев фарм можно автоматизировать. Пусть компьютер, робот сам делает всю скучную работу.

Я не однократно писал роботов для игр.

Первая серьезная поделка была сделана, когда я ещё играл в Ultima Onlne — тогда был создан проект UO Shra pilot. Программа позволяла составлять скрипты для управления персонажем в UO, имитируя нажатия мыши и клавиатуры. С помощью этой программы, например, я записывал специальные скрипты, которые позволяли моему персонажу «летать» по лесу в Ultima Online и рубить лес, собирая бревна. Этот ресурс был довольно ходовым, легко продавался.

В Ogame требовалась другая задача — защитить флот от нападения высоразвитых противников. Разбитые флоты перерабатывались на ресурсы. За «небольшими» и «средними» флотами велась настоящая охота. Стоило уйти в оффлайн, и вы рисковали потерять все ваши корабли. Игроки прибегали к разным тактикам сохранения флота. Например, отправляли корабли в дальний многочасовой поход, где их нельзя было перехватить. Я же написал скрипт-няньку.

Нянька может работать как на локальном компьютере с выходом в интернет, так и на веб-сервере у провайдера, т.к. написана на PHP. Скрипт периодически запускаясь, проверял угрозы нападения на мои колонии. За 5-10 минут до момента атаки флоты поднимались с планеты, а потом возвращались назад, если угроза нападения миновала. Так удавалось сохранять и преумножать свои флоты, несмотря на происки врагов. 🙂

До тех пор, конечно, пока меня не забанили за мою находчивость.

Инструментарий для написания ботов

Я пробовал и сторонние инструментальные средства. Часть из них условно-бесплатна, т.е. в итоге потребует покупки. Другие — очень глючные и нестабильные. Некоторые применимы только для игр с определенной архитектрурой (к примеру только для браузерных HTML игр).

Чаще всего требуется выстроить логику бота в виде директив — найди картинку на экране, кликни/перетащи элемент, введи какие то значения в поля ввода, нажми кнопку и т.п.

Совсем недавно я нашел очень подходящий IDE для реализации подобной логики. Он разработан на JAVA, поэтому установлен может быть куда угодно — на MAC, WIN или UNIX.

siculiX

Рассказывать что то более подробно, чем изложено на www.sikulix.com — нет надобности. IDE имеет открытый код и распространяется бесплатно.

SikuliX использует синтаксис Phyton или Rubi (выбираете при установке), предоставляя для работы свои объекты и классы. Для людей, далеких от программирования, это прозвучит устрашающе. Но вы сами решаете на сколько глубоко залазить в эту кроличью нору. 🙂

Данная запись опубликована в 06.06.2016 19:14 и размещена в Наша жизнь — игра!, Программирование. Вы можете перейти в конец страницы и оставить ваш комментарий.

Мало букафф? Читайте есчо !

Основы программирования ботов на SikuliX

SikuliX имеет ряд особенностей, о которых я расскажу далее. Этот IDE разработан с целью автоматизации рутины, т.е. для создания роботов, в том числе и для игр. Скрипт не вмешивается в обмен данными по сети или работу игрового клиента. Он действует .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *