HotkeyNet: создание простейших ботов
Речь сегодня пойдёт не об искусственном интеллекте, как может показаться сначала, а об алгоритмизации и её месте в скриптах HotkeyNet. Я не являюсь сторонником такого подхода к играм, поэтому эта статья опубликована исключительно для демонстрации возможностей программы. Во многих играх за применение ботов жёстко наказывают - используйте полученные знания на свой страх и риск.
Прежде всего стоит дать определение термину "алгоритм". Это последовательность команд, предназначенная исполнителю, в результате выполнения которой он должен решить поставленную задачу. Поскольку HotkeyNet не сможет определить, что в игре происходит на момент выполнения алгоритма, удастся воспроизвести лишь простые ситуации с однозначным набором действий.
Вероятно, вы уже видели скрипт, который многократно посылает в игру нажатие, пока удерживается клавиша, имитируя тем самым обычное поведение клавиатуры при наборе текста. В нём задействован простой цикл, который выполняется при нажатии на клавишу и останавливается при отпускании. Этим он напоминает другие скрипты, представленные в этом материале.
Как всегда, в роли подопытного выступит игра World of Warcraft. Используемые далее цифры очень условны, так как сильно отличаются в разных играх или ситуациях.
Ротация способностей в рейде
Чаще всего заклинания и способности, которые нужны для поддержания хорошего DPS (количество урона в секунду), необходимо прожимать в определённом порядке. После применения скрипта с правильной последовательностью некоторые игроки отмечали прирост DPS.
Допустим, я играю в "World of Warcraft: The Burning Crusade". Чтобы пример был простым и понятным, я выберу паладина с двуручным оружием в руках. Необходимые способности я расположил следующим образом:
- Удар воина Света.
- Печать повиновения.
- Правосудие.
Вставив задержки между нажатиями, получаем вот такой незамысловатый скрипт:
//-----------------------------------------------------------
// Ротация паладина для лучшего DPS.
//-----------------------------------------------------------
<Hotkey F1> // запуск цикла
<SendFocusWin>
<Key 1> // удар воина Света
<Key 3> // правосудие
<Wait 1550>
<Key 2> // печать повиновения
<Wait 4550>
<Key 1> // удар воина Света
<Wait 2050>
<Key 3> // правосудие
<Key 2> // печать повиновения
<Wait 4050>
<Key 1> // удар воина Света
<Wait 4050>
<Key 3> // правосудие
<Key 2> // печать повиновения
<Wait 2050>
<Key 1> // удар воина Света
<Wait 6050>
<DoHotkey Hotkey %Trigger%> // следующая итерация цикла
<HotkeyUp F1> // остановка цикла
<SendPC local>
<Cancel>
Простое удерживание F1 запустит алгоритм, который заставит персонажа бить босса вместо вас. Для ручного управления в любой момент можно отпустить клавишу.
Задержки рассчитываются на основе времени до отката следующей способности, глобальной перезарядки всех заклинаний (1.5 сек) и вашего пинга в игре (в этом примере добавлено по 50 мс).
В разных версиях игры у одного и того же класса последовательность будет разной. Чтобы создаваемый скрипт давал эффект, вы должны хорошо понимать механику выбранного героя. Однако, не всегда ротация настолько простая - в DPS-цикле часто бывает неопределённость (случайные проки пассивных способностей или талантов). В таком случае прироста урона ждать не приходится.
Вскрытие сундуков
Многие разбойники наверняка знакомы с ситуацией, когда запаривает сидеть и ждать респауна сундука десятки минут. HotkeyNet поможет прокачать взлом замков, если воспользоваться таким скриптом:
//-----------------------------------------------------------
// Вскрытие сундуков.
//-----------------------------------------------------------
<Hotkey F1> // запуск цикла
<SendFocusWin>
<Key 1> // отправка нажатия
<Wait 100>
<ClickMouse RButton NoMove> // клик ПКМ на месте курсора
<Wait 6000>
<DoHotkey Hotkey %Trigger%> // следующая итерация цикла
<Hotkey F2> // остановка цикла
<SendPC local>
<Cancel>
Если сундук заперт, то под клавишей 1 должна быть закреплена способность или предмет для взлома замка. Далее наводим курсор на сундук, нажимаем F1 и идём пить чай. То же самое применимо для сбора травы или руды в определённых местах. Желательно установить в настройках игры режим автоматического сбора добычи.
Покупка предметов у торговцев
Иногда у торговцев можно встретить экипировку, рецепты, реагенты и прочую утварь, которая доступна в ограниченном количестве и появляется вновь только через некоторое время. А что, если мы захотим воспользоваться услугами торговца для фарма приглянувшихся товаров? Сидеть из-за этого весь день у компьютера вряд ли кому-то по душе. Обратимся к HotkeyNet за помощью в этом нелёгком деле.
Для мультибоксеров в WoW доступен незаменимый аддон Jamba. В число его функций входит возможность автоматически закупаться у торговцев теми товарами, которые вы укажите в разделе "Торговля > Покупка". Позаимствуем его на время, чтобы сократить объём кода:
Обычно предмет появляется повторно в продаже через 30 минут. Из этого следует, что нам придётся ждать возле торговца минимум полчаса. Знаю о чём вы подумали. Если кто-то заметит нашего героя и отправит к праотцам, вся миссия окажется под угрозой. Мне будет спокойнее, если я буду выходить из игры после каждой покупки, а потом вновь заходить. Вот, что в итоге у меня получилось:
//-----------------------------------------------------------
// Автоматическая покупка товаров каждые полчаса.
//-----------------------------------------------------------
<Hotkey F1> // запуск цикла
<SendWin "World of Warcraft">
<Key Enter>
<Wait 100>
<Text /target Bro'kin> // выбор цели
<Key Enter>
<Key T> // взаимодействие с целью
<Wait 1000>
<Key Enter>
<Wait 100>
<Text /logout> // выход на страницу выбора персонажа
<Key Enter>
<Wait 22000>
<Key Esc> // выход на страницу авторизации
<Wait 1800000> // ожидание респауна товаров в течение 30 мин
<Text LOGIN> // ввод логина
<Key Tab>
<Text PASSWORD> // ввод пароля
<Key Enter>
<Wait 6000> // ожидание авторизации
<Key Enter> // вход в игровой мир
<Wait 15000> // ожидание загрузки игрового мира
<DoHotkey Hotkey %Trigger%> // следующая итерация цикла
<Hotkey F2> // остановка цикла
<SendPC local>
<Cancel>
Цикл следует запускать, находясь непосредственно возле торговца.
Чтобы чат-команды, логин и пароль печатались на латинице, на момент нажатия F1 раскладка в игре должна быть английская. Если у вас русская версия игры, то имейте ввиду, кириллицу HotkeyNet не понимает. В принципе, можно переключить раскладку в игре на русскую, а в коде написать латинские буквы, соответствующие русским ("qwerty" > "йцукен"). Но правильнее будет добавить в игру макрос и указать в скрипте присвоенную ему клавишу.
Хорошо, если у вас в игре назначена горячая клавиша для взаимодействия с целью. Если это сделать невозможно, воспользуйтесь командой ClickMouse, как это реализовано в примере с сундуками.
Анти-AFK
Ни для кого не секрет, что игроков в онлайн-играх автоматически выкидывает спустя несколько минут бездействия. Но иногда этого совсем не хочется, и люди вынуждены идти на хитрость, чтобы обмануть систему. Спорить о том, хорошо это или плохо, мы не будем - я просто покажу, как это удобно реализовать через HotkeyNet:
//-----------------------------------------------------------
// Анти-AFK.
//-----------------------------------------------------------
<Command AutoExec> // добавление кнопки на экран
<CreateColoredButton StartButton 0 500 80 32 0x202020 0xFFFFFF START>
<SetButtonCommand StartButton Start>
<TargetWin StartButton>
<AlwaysOnTop On>
<Command Start> // запуск цикла
<SetButtonText StartButton STOP>
<SetButtonColors StartButton 0xAA3333>
<SetButtonCommand StartButton Stop>
<DoHotkey Hotkey Ctrl Alt Shift 0>
<Command Stop> // остановка цикла
<SetButtonText StartButton START>
<SetButtonColors StartButton 0x202020>
<SetButtonCommand StartButton Start>
<SendPC local>
<Cancel>
<Hotkey Ctrl Alt Shift 0>
<SendWinM "World of Warcraft">
<Key F1> // отправка нажатия
<SendPC local>
<Wait 60000> // ожидание 1 мин
<DoHotkey Hotkey %Trigger%> // следующая итерация цикла
После активации кнопки "START" в указанное окно раз в минуту будет отправляться нажатие клавиши F1. В игре под этой клавишей можно закрепить какое-нибудь заклинание или макрос, например, отправляющий сообщение в чат. А если заменить F1 на Space, то раз в минуту персонаж будет подпрыгивать.
Переименование файлов
HotkeyNet не ограничивается только играми - программа может взаимодействовать с любыми окнами. К примеру, вот такой код позволит переименовать группу файлов в проводнике Windows:
//-----------------------------------------------------------
// Переименование файлов.
//-----------------------------------------------------------
<Command Rename>
<SendFocusWin>
<Key F2> // переименование файла
<Text %1% New_document_%2%> // маска нового имени
<Key Enter>
<Key Down> // выбор следующего файла
<Hotkey F1>
<Rename 1 one>
<Rename 2 two>
<Rename 3 three>
<Rename 4 four>
<Rename 5 five>
<Rename 6 six>
<Rename 7 seven>
В Windows есть встроенная система переименования большого количества файлов, о которой всем известно. Это неважно. Важно то, что программа HotkeyNet способна упростить множество рутинных задач при работе за компьютером. Даже для написания этой статьи я использовал HotkeyNet, заменяя в веб-редакторе неразрывные пробелы на обычные одним нажатием вместо четырёх, быстро расставляя отступы в скриптах и оформляя примечания серым цветом.
А как вам помогает HotkeyNet? Пишите в комментариях.
Евгений
У меня получилось подружить хоткейнет с Excel. Иногда в таблицах нужно сделать много телодвижений, очень похожих друг на друга и крайне утомительных.
Например, для каталога в интернет-магазине пришлось делать много похожих свойств товаров, и для этого нужно продублировать строки (каждую определенное количество раз) и заполнить их своими значениями, и так 1000 строк. Раньше я руками это забивал по 2 дня. А теперь с написанием скрипта и прочим - максимум 2 часа. Это вам не в игрушки играть=)
А за статью спасибо, было интересно.