Как стать автором
Обновить

Пишем бота для флеш игры. Часть 1

На Хабре было уже много статей о создании ботов, но все они были реализованы как автоматизированные кликеры. Мы же подойдём с другой стороны, наш бот будет считывать переменные из игры и отсылать пакеты серверу.

Исследование


Итак, игра для которой будет писаться бот — TimeZero, написанная на ActionScript 2.

Нам понадобится

  • Клиент игры
  • Adobe Flash CS5.5
  • WPE PRO
  • Flash Variable Scanner
  • Flash Decompiler


Клиент

Клиент представляет из себя несколько папок с файлами игры (картинки и .swf файлы), два основных игровых файла (tz.swf — игра и sbtl.swf — бой) и файлы лаунчера.
Для запуска игры можно запустить лаунчер или просто tz.swf. При запуске, лаунчер проверяет хеши всех файлов, и если находи разницу то заменяет фаил, нам это не подходит, поэтому будет использовать второй вариант.

Как работает

Как я уже сказал до этого, в лиенте есть отдельная папка с флеш файлами, т.е. они подгружаются по необходимости. Эти файлы можно поделить на 3 вида: библиотеки (хранение картинок), здания (для каждого здания свой файл) и модули для внутриигрового КПК(мини игры, помощники). Для бота мы будем использовать один из КПК модулей, который отвечает за игру с разборкой/сборкой оружия.

Реализация


Нехитрыми манипуляциями мы узнаём что за сборку отвечает minigame1.swf, поэтому создаём во Флеше свой minigame1.fla размером 860 на 370 пикселей.

Анализ .swf

Как декомпилер будем использовать Flash Decompiler Trillix от Eltima Software.
Посмотрев исходники нескольких файлов можно понять что запросы к серверу передаются через
_root.SendCmd("пакет");
Это нам и надо было.

Скан переменных

К сожаления, когда я писал статью, у меня возникли проблемы со сканнером, так что я просто напишу что перемынные были вида
_root.gameController.character.clan;
_root.USER.HP;
_root.USER.level;


Пакеты

И так, у нас есть всё что надо, кроми самих запросов. Запускаем tz.swf и WPE PRO. В WPE выбираем цель — FlashPlayer.exe и запускаем отлов.
Вот примеры некоторых пакетов:
<GOBLD n="0"_ /> - переход в здание (0 - улица). Поставил _ , т.к. парсер ест тег
<N /> - обновление/проверка активности
<TAKE_OFF id="57009199505.2" /> - снять вещь
<TO_SECTION id="57009199505.2" section="0" /> - положить вещь
<TAKE_ON id="57009195000.2" slot="H" /> - одеть вещь


Немного кода

Самим алгоритмам работы бота я бы хотел посвятить отдельную тему, поэтому тут я покажу лишь пример.


В итоге у нас должно получится чтото вроде такого:


Спасибо за внимание, надеюсь вам понравилось!
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.