Содержание

    HotkeyNet: создание простейших ботов

    Речь сегодня пойдёт не об искусственном интеллекте, как может показаться сначала, а об алгоритмизации и её месте в скриптах HotkeyNet. Я не являюсь сторонником такого подхода к играм, поэтому эта статья опубликована исключительно для демонстрации возможностей программы. Во многих играх за применение ботов жёстко наказывают - используйте полученные знания на свой страх и риск.

    HotkeyNet: создание простейших ботов

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

    Вероятно, вы уже видели скрипт, который многократно посылает в игру нажатие, пока удерживается клавиша, имитируя тем самым обычное поведение клавиатуры при наборе текста. В нём задействован простой цикл, который выполняется при нажатии на клавишу и останавливается при отпускании. Этим он напоминает другие скрипты, представленные в этом материале.

    Как всегда, в роли подопытного выступит игра World of Warcraft. Используемые далее цифры очень условны, так как сильно отличаются в разных играх или ситуациях.

     

    Ротация способностей в рейде

    Чаще всего заклинания и способности, которые нужны для поддержания хорошего DPS (количество урона в секунду), необходимо прожимать в определённом порядке. После применения скрипта с правильной последовательностью некоторые игроки отмечали прирост DPS.

    Допустим, я играю в "World of Warcraft: The Burning Crusade". Чтобы пример был простым и понятным, я выберу паладина с двуручным оружием в руках. Необходимые способности я расположил следующим образом:

    1. Удар воина Света.
    2. Печать повиновения.
    3. Правосудие.

    Вставив задержки между нажатиями, получаем вот такой незамысловатый скрипт:

    //-----------------------------------------------------------
    // Ротация паладина для лучшего 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? Пишите в комментариях.

     


    Понравился материал? Расскажи друзьям!

    Оставить комментарий
    Вы комментируете как Гость.
    Все поля, отмеченные звёздочкой *, являются обязательными.

    Нажимая "Отправить", вы подтверждаете, что ознакомлены с правилами сайта и порядком обработки персональных данных, автоматически соглашаетесь с этими правилами и даёте своё согласие на сбор, обработку, хранение, удаление персональных данных, а также публикацию личных сведений, определённых порядком обработки персональных данных.