Останній раз оновлення для HotkeyNet виходило 6 років тому. Але навіть через стільки часу ця тиха робоча конячка може змагатися з таким монстром, як ISBoxer. Насправді, нас більше обмежує завантажений скрипт, а не якісь програмні особливості. У цій статті ми спробуємо HotkeyNet на міцність і спробуємо вирішити складну ігрову задачу - додаючи в гру макроси, слідувати за головним персонажем, перемикати роль ведучого на будь-якого героя в групі і атакувати одну і ту ж мету.
Багато хто, кому довелося доторкнутися до ISBoxer, були приємно здивовані, що можна, нічого не налаштовуючи в грі, відразу відправлятися на пошуки пригод. А в кінці пробного періоду вони вже не могли дивитися на HotkeyNet і інші подібні транслятори клавіш. Писати десятки макросів і правити їх на кількох комп'ютерах - заняття зовсім неприємне.
З HotkeyNet цього вдасться уникнути, якщо гра має досить просунутою системою дій, для яких призначено клавіші. На цей раз об'єктом для експерименту стане група з п'яти персонажів в World of Warcraft. У більшості ігор схожого жанру можна виконати ті ж дії і отримати такий же результат.
Якщо ви хочете краще розуміти, що тут відбувається, ознайомтеся з основами написання скриптів HotkeyNet. Однак, знати все необов'язково - ви можете скористатися готовим скриптом в кінці статті.
Підготовка до випробувань
На жаль, повністю уникнути правок в грі не вдасться. Для альтернативного управління повинні бути призначені мінімум шість гарячих клавіш. У чистому клієнті WoW значення за замовчуванням не було визначено тільки для клавіші проходження (follow target):
Для демонстрації використовуються стандартні ігрові настройки. Але можна підставляти свої значення, якщо у вас вони відрізняються.
Закріплені на основній панелі клавіші прибираємо зі списку "MainList" в скрипті і записуємо окремо:
Далі створюємо основу для нових гарячих клавіш:
- Перший рядок означає, що після натискання на будь-яку клавішу зі списку "AssistList" з виключеною кнопкою ScrollLock. будуть виконані пов'язані з нею дії. Також це торкнеться поєднань цих клавіш з Ctrl або Alt.
- Додано декілька умов, щоб виконати потрібну ділянку коду в залежності від того, яке вікно було активно на момент виклику гарячої клавіші.
- В кінці в усі вікна буде відправлено натискання, яке викликало гарячу клавішу.
Щоб було легше вносити зміни, для повторюваних ділянок застосовуються шаблони. Зараз саме така ситуація - значна частина коду буде повторюватися. Тому я створю наступний шаблон з макрокомандами:
Тепер треба згадати, які кнопки відповідають за взяття в ціль інших членів групи. Замість макрокоманд підставляємо мітки чотирьох побічних вікон і значення з таблиці. представленої раніше:
Отже, якщо активно перше вікно, то кнопка 2 передасть в інші чотири вікна натискання F2 і відразу за ним F. Потім в усі вікна, включаючи головне, буде передано натискання кнопки 2. Інша частина списку "AssistList" працює майже так само, тільки натискання будуть інші.
Перемикання на інші вікна
У базовому скрипті за перемикання між вікнами відповідає інший шаблон під назвою "Switch". У ньому передбачена відправка в гру натискань від Shift + 1 до Shift + 5 для активації макросу, в який раніше ми вручну додавали команди "focus" і "follow". Тепер цю функцію виконуватиме наш новий шаблон разом з відправкою Alt + F. Решта в шаблоні "Switch" залишиться колишнім.
Можна помітити, що у вихідному коді шаблон кнопок перемикання вже отримує п'ять макрокоманд з номерами вікон. Скористаємося ними. Нам залишається тільки вибрати ватажка клавішами F2 - F5 і слідувати за ним за допомогою Alt + F:
Оскільки шаблон "TargetMain" закінчується відправкою натискання в побічні вікна, а шаблони є всього лише фрагментами тексту, сюди ж легко вписалася клавіша для вирівнювання кута огляду.
дотримання
Тільки що ми налаштували автоматичне слідування після перемикання. Але що, якщо ми захочемо користуватися однієї окремої комбінацією для проходження за головним, яка буде працювати у всіх вікнах. У базовому скрипті щось подібне вже є на клавіші Space. Вб'ємо відразу двох зайців - додамо універсальну клавішу проходження і поміняємо застарілий варіант пробілу:
Не забуваємо доповнити список винятків, щоб комбінація не призначалася двічі:
решта бонуси
Багато в грі прагнуть підняти настрій собі і оточуючим, і мультібоксери не виняток. Їм є більше можливостей по залученню уваги. Наприклад, всім відома шаманська пентаграма тепер буде повністю управлятися скриптом. якщо ми додамо в нього такий код:
Як розставити персонажів для такого ефекту, ми вже розбирали тут.
Побудувати всіх один за одним для ходи по місту тепер простіше простого:
Раніше жоден серйозний бій не обходився без макросу, що дозволяє при звичайному натисканні лікувати всім одну і ту ж мету, а, натиснувши клавішу Alt лікувати головного персонажа. Скористаюся ситуацією і додам цю функцію в такому вигляді:
Повернемося назад і додамо нові клавіші в виключення, інакше нічого не вийде:
Помилка або втрата з'єднання
Існує багато різних причин, за якими хтось із членів групи може випадково її покинути. І якщо його запросити назад, то учасники будуть розташовані вже по-іншому, що може поламати всю систему вибору цілей. Звичайно, можна пересобрать групу заново, але що робити, якщо ми знаходимося в підземеллі? Адже починати заново ніхто не захоче.
Герой, останній приєднався до групи, виявляється в кінці списку. Відповідно, ті, хто до цього розташовувався за ним, зміщуються ближче до початку. Ніякого хаосу в групі при цьому немає, просто кілька персонажів помінялися місцями. Ось і відповідь! Поміняємо місцями назви вікон:
Для надійності перейменування розділене на два етапи. А на час роботи команди гарячі клавіші відключаються, щоб вони нам не заважали.
На місці макрокоманд повинні виявитися номера вікон, відповідні новим порядком в групі. Для передачі цих значень скрипту, я скористаюся приголомшливою командою ThirdPartyCommandLine:
Як вона працює? Натискаємо в грі Ctrl + Esc. відкривається ігровий чат. Потім пишемо прямо туди цифри, розділені пропуском. Натискаємо Enter. після чого цифри моментально обробляє призначена для користувача команда "Party", і наша група знову життєздатна!
Ще раз на прикладі. Уявімо на хвилину, що третє вікно закрилося з помилкою. Як завжди, я натискаю Ctrl + Alt + L. щоб запустити відсутню вікно. Заходжу, приймаю запрошення в групу, а персонаж з третього вікна виявляється останнім у списку у інших учасників. Четвертий встав на місце третього, а п'ятий перейшов на місце четвертого. Але всі вони отримують колишні натискання.
Дивлячись з головного вікна на групу, видно, що вікна розподілилися в порядку "1 2 4 5 3". Ці цифри і потрібно ввести в чат після виклику команди. Скрипт торкнуться не буде, і при наступному вході порядок відновиться.
Визначення головного в рейді
Наш скрипт майже готовий, але є ще дещо, що заважає йому стати повністю робочим. Уявіть, що ви опинилися в рейді або на поле бою. Якщо ваших клонів розкидало по різних групах, то ви просто будете грушею для биття, поки всіх не зберете. Те ж саме вас чекає, якщо захочете створити більше п'яти персонажів, тільки в цьому випадку в одну групу все не помістяться - ви залишитеся стояти на місці.
Ситуацію виправить один макрос з іменами героїв (якщо вікон 10, то два таких макросу, що відрізняються лише ніками):
Закріпіть їх там, де не застосовуються модифікатори Ctrl. Alt і Shift. Нехай це будyт F11 і F12. Що з цього вийшло, дивіться далі.
Підведемо підсумки
Результати експерименту такі:
Код всередині незначно змінений, щоб його було легше правити, але принцип роботи не змінився. Я не став робити це в ході експерименту, щоб було простіше зрозуміти алгоритм.
Отже, програма HotkeyNet впоралася з головним завданням. Тепер, створюючи групу, не потрібно додавати макроси на проходження, атаку або лікування. Крім того, у нас продовжує працювати зміна головного, і звільнилася мета в фокусі.
Працює все не так чисто, як з системою "FTL" в ISBoxer або зі старими добрими макросами. Майже весь час у назві місії у побічних персонажів знаходиться головний. Проте в порівнянні з грою, заснованої на макросах, великої різниці я не відчув.
Якщо ви захочете потрапити в рейд або прокачати більше персонажів, ніж поміщається в групі, то тут без макросів вже не обійтися. У будь-якому випадку цей скрипт в рази скоротить обсяг підготовчих робіт. Однак, я не бачив ще жодного мультібоксера, який починав свій шлях з великого натовпу в рейді. Створені нами скрипти чудово підійдуть для старту, тому що економиться до 80% часу, необхідного для налаштування системи.
Перед нами не стояло завдання зробити все ідеально і без похибок, так що можна закрити очі на дрібні недоліки. Адже HotkeyNet є безкоштовною програмою, а функціонал її багатшою ніж у деяких платних рішень, в чому ми з вами щойно переконалися.