RIFT: сложный скрипт для простого управления

В материале HotkeyNet и RIFT: взгляд мультибоксера содержится больше информации об этом скрипте.

//======================================================================
// Скрипт для простого управления пятью окнами в игре RIFT
// с помощью программы HotkeyNet на одном компьютере с минимальным количеством макросов.
//
// Автор скрипта: Pashted
// Источник: www.slashfocus.ru
//======================================================================


//----------------------------------------------------------------------
// Команда, автоматически запускаемая при загрузке скрипта.
//
// Перейдите в настройки HotkeyNet и убедитесь, что название команды в разделе
// "Execute command automatically" совпадает с указанным здесь.
//----------------------------------------------------------------------
<Command AutoExec>
// создание панелей на экране
    <CreatePanel SwitchPanel 810 0 300 24>
<CreatePanel ControlPanel 0 745 28 64>

<SetPanelStyle SwitchPanel Frameless>
<SetPanelStyle ControlPanel Frameless>

<TargetWin SwitchPanel>
<SetWinOpacity 92>
<TargetWin ControlPanel>
<SetWinOpacity 92>

// создание кнопок
  <CreateColoredButton Button1 0 0 60 24 0x0B0B0B 0x8F73E5 1>
<CreateColoredButton Button2 0 0 60 24 0x0B0B0B 0x8F73E5 2>
<CreateColoredButton Button3 0 0 60 24 0x0B0B0B 0x8F73E5 3>
<CreateColoredButton Button4 0 0 60 24 0x0B0B0B 0x8F73E5 4>
<CreateColoredButton Button5 0 0 60 24 0x0B0B0B 0x8F73E5 5>
<CreateColoredButton ButtonH 0 0 28 32 0x33AA33 0xFFFFFF H> // состояние горячих клавиш
<CreateColoredButton ButtonS 0 0 28 32 0x101010 0xFFFFFF S> // состояние отправки всех

// назначение команд кнопкам
<SetButtonHotkey Button1 Hotkey ScrollLockOff Shift 1>
<SetButtonHotkey Button2 Hotkey ScrollLockOff Shift 2>
<SetButtonHotkey Button3 Hotkey ScrollLockOff Shift 3>
<SetButtonHotkey Button4 Hotkey ScrollLockOff Shift 4>
<SetButtonHotkey Button5 Hotkey ScrollLockOff Shift 5>
<SetButtonHotkey ButtonH Hotkey Pause>
<SetButtonHotkey ButtonS Hotkey ScrollLockOff ScrollLock>

// перемещение кнопок на панели
  <AddButtonToPanel Button1 SwitchPanel 0 0>
<AddButtonToPanel Button2 SwitchPanel 60 0>
<AddButtonToPanel Button3 SwitchPanel 120 0>
<AddButtonToPanel Button4 SwitchPanel 180 0>
<AddButtonToPanel Button5 SwitchPanel 240 0>
<AddButtonToPanel ButtonH ControlPanel 0 0>
<AddButtonToPanel ButtonS ControlPanel 0 32>

// принудительный перенос панелей на передний план
<TargetWin SwitchPanel>
<AlwaysOnTop On>
<TargetWin ControlPanel>
<AlwaysOnTop On>


//----------------------------------------------------------------------
// Подпрограмма для изменения цвета кнопок на панели после переключения.
//----------------------------------------------------------------------
<Command SwitchColors>
<SetButtonColors Button%1% 0x793CF4 0xFFFFFF>
<SetButtonColors Button%2% 0x0B0B0B 0x8F73E5>
<SetButtonColors Button%3% 0x0B0B0B 0x8F73E5>
<SetButtonColors Button%4% 0x0B0B0B 0x8F73E5>
<SetButtonColors Button%5% 0x0B0B0B 0x8F73E5>


//----------------------------------------------------------------------
// Подпрограмма для изменения размеров и размещения окон на одном мониторе с разрешением 1920x1080.
//----------------------------------------------------------------------

<Command ResizeAndPosition>
<SendWinM Rift%1%>
<SetWinRect -6 -30 1932 865>
<SendWinM Rift%2%>
<SetWinRect -8 805 490 243>
<SendWinM Rift%3%>
<SetWinRect 474 805 490 243>
<SendWinM Rift%4%>
<SetWinRect 956 805 490 243>
<SendWinM Rift%5%>
<SetWinRect 1438 805 490 243>


//----------------------------------------------------------------------
// Шаблон для запуска и переименования окон.
//----------------------------------------------------------------------
<Template LaunchAndRename>
<TurnHotkeysOff> // выключение отправки нажатий в окна
<SetButtonColors ButtonH 0x151515> // изменение цвета кнопки H на чёрный

<SendFocusWin>
<KeyUp Ctrl Alt>
<Key Shift Tab>
<Text %2%>
<Key Tab>

<WaitForWin RIFT 120000> // ожидание открытия нового окна в течение 2 мин
<RenameTargetWin Rift%1%> // переименование окна
<SetAffinity %3% %4%> // распределение нагрузки на процессор

// создание эффекта полосы загрузки
<SetButtonColors Button%1% 0x500000 0xFFFFFF>

// перемещение окон на исходные позиции
<ResizeAndPosition 1 2 3 4 5>

// принудительный перенос панелей на передний план
<TargetWin SwitchPanel>
<AlwaysOnTop On>
<TargetWin ControlPanel>
<AlwaysOnTop On>
<EndTemplate>


//----------------------------------------------------------------------
// Ввод почтового адреса в открытом окне авторизации.
//
// В шаблон LaunchAndRename подставляются в виде двух последних цифр номера логических ядер процессора.
// Применяемая здесь схема рассчитана на четыре логических ядра.
// Подробности смотрите в описании команды SetAffinity:
// www.slashfocus.ru/hotkeynet/commands/item/setaffinity
//----------------------------------------------------------------------
<Hotkey Ctrl Alt L>
<If WinDoesNotExist Rift1>
<ApplyTemplate LaunchAndRename 1 Email1 0 1>

<Else If WinDoesNotExist Rift2>
<ApplyTemplate LaunchAndRename 2 Email2 0 1>

<Else If WinDoesNotExist Rift3>
<ApplyTemplate LaunchAndRename 3 Email3 2 3>

<Else If WinDoesNotExist Rift4>
<ApplyTemplate LaunchAndRename 4 Email4 2 3>

<Else If WinDoesNotExist Rift5>
<ApplyTemplate LaunchAndRename 5 Email5 2 3>

<TurnHotkeysOn> // включение отправки нажатий в окна
<SetButtonColors ButtonH 0x33AA33> // изменение цвета кнопки H на зелёный

<SetActiveWindowTrackingDelay 0> // установка задержки перед активацией окна в мс
<SetActiveWindowTracking On> // включение активного отслеживания окон

<SwitchColors 1 2 3 4 5>


//----------------------------------------------------------------------
// Закрытие игровых клиентов.
//----------------------------------------------------------------------
<Command Exit>
<SendWin %1%>
<CloseWin>


<Hotkey Alt F4>
<Exit Rift1>
<Exit Rift2>
<Exit Rift3>
<Exit Rift4>
<Exit Rift5>
<Exit RIFT>

<SetActiveWindowTracking Off> // выключение активного отслеживания окон

<TurnHotkeysOff> // выключение отправки нажатий
<SetButtonColors ButtonH 0x151515> // изменение цвета кнопки H на чёрный

<ResetToggles> // сброс состояния переключателей
<Cancel> // отмена текущих и запланированных действий


//----------------------------------------------------------------------
// Назначение меток окнам для отправки нажатий.
//----------------------------------------------------------------------
<Label r1 local SendWinSF Rift1>
<Label r2 local SendWinSF Rift2>
<Label r3 local SendWinSF Rift3>
<Label r4 local SendWinSF Rift4>
<Label r5 local SendWinSF Rift5>


//----------------------------------------------------------------------
// Создание списка и назначение основных горячих клавиш.
//
// Напротив except указаны исключения, которые не нужно назначать или уже были назначены.
// Используйте в игре ScrollLock для включения режима полной отправки клавиш.
//----------------------------------------------------------------------
<KeyList MainList F1-F12, NumpadMinus, NumpadPlus>


<Template Assign>
<Hotkey %1%>
<SendLabel r1, r2, r3, r4, r5>
<Key %Trigger%>
<EndTemplate>


<ApplyTemplate Assign "ScrollLockOn AllMainKeys except ScrollLock, Pause">
<ApplyTemplate Assign "Shift ScrollLockOn AllMainKeys except ScrollLock, Pause">

<ApplyTemplate Assign "ScrollLockOff MainList, P">
<ApplyTemplate Assign "Shift ScrollLockOff MainList">
<ApplyTemplate Assign "Ctrl MainList">
<ApplyTemplate Assign "Alt MainList except F4">
<ApplyTemplate Assign "Ctrl Alt MainList">


//----------------------------------------------------------------------
// Назначение горячих клавиш c автоматическим содействием ведущему персонажу.
//
// Для корректной работы в игре должны быть назначены дополнительные действия.
//
// Подробнее об этом смотрите на странице:
// www.slashfocus.ru/hotkeynet/item/hotkeynet-i-rift-vzglyad-multiboxera

//----------------------------------------------------------------------
<KeyList AssistList 0-9, Minus, Plus, T>


<Template TargetMain>
// отправка каких-то нажатий в какие-то четыре окна
<SendLabel %1%>
<Key %5%>
<Key %9%>
<SendLabel %2%>
<Key %6%>
<Key %9%>
<SendLabel %3%>
<Key %7%>
<Key %9%>
<SendLabel %4%>
<Key %8%>
<Key %9%>
<EndTemplate>


<Template Slaves>
<If ActiveWinIs Rift1>
<ApplyTemplate TargetMain r2 r3 r4 r5 F2 F2 F2 F2 %1%>

<Else If ActiveWinIs Rift2>
<ApplyTemplate TargetMain r1 r3 r4 r5 F2 F3 F3 F3 %1%>

<Else If ActiveWinIs Rift3>
<ApplyTemplate TargetMain r2 r1 r4 r5 F3 F3 F4 F4 %1%>

<Else If ActiveWinIs Rift4>
<ApplyTemplate TargetMain r2 r3 r1 r5 F4 F4 F4 F5 %1%>

<Else If ActiveWinIs Rift5>
<ApplyTemplate TargetMain r2 r3 r4 r1 F5 F5 F5 F5 %1%>
<EndIf>
<EndTemplate>


<Hotkey ScrollLockOff AssistList; Ctrl AssistList; Alt AssistList except 5, 6>
<ApplyTemplate Slaves F>

// атака общей цели
<SendLabel r1, r2, r3, r4, r5>
<Key %Trigger%>


<Hotkey Alt F> // следование за главным
<ApplyTemplate Slaves G>


<Hotkey Shift 7> // следование друг за другом
<SendLabel r2>
<Key F2>
<Key G>
<SendLabel r3>
<Key F3>
<Key G>
<SendLabel r4>
<Key F4>
<Key G>
<SendLabel r5>
<Key F5>
<Key G>


<Hotkey Alt 5, 6> // лечение главного персонажа
<SendFocusWin>
<Key %Trigger%>

    <ApplyTemplate Slaves %TriggerMainKey%>


//---------------------------------------------------------------------- // Назначение дополнительных горячих клавиш.
//
// При обычном нажатии произойдёт отправка в активное окно.
// Нажатие вместе с клавишей Shift отправится во все окна. //----------------------------------------------------------------------

<Hotkey ScrollLockOff Esc>
<SendFocusWin> // отправка нажатия в активное на данный момент окно
<Key %Trigger%>

<SendPC local>
<ResetToggles> // сброс состояния переключателей
<Cancel> // отмена текущих и запланированных действий


<Hotkey ScrollLockOff Shift Esc, Tab, Enter, Divide, Backspace>
<SendFocusWin>
<KeyUp Shift> // отпускание клавиши Shift

<SendLabel r1, r2, r3, r4, r5>
<Key %TriggerMainKey%> // отправка нажатия без модификатора Shift


//----------------------------------------------------------------------
// Клавиша Pause быстро включает либо отключает передачу клавиш.
// Требуется в случаях, когда нужно напечатать что-то в чате или другом приложении.
//----------------------------------------------------------------------
<Hotkey Pause>
<If HotkeysAreOn> // если оправка нажатий в окна активна
<TurnHotkeysOff> // выключаем отправку нажатий
<SetActiveWindowTracking Off> // выключаем активное отслеживание окон
        <SetButtonColors ButtonH 0x151515>  // изменяем цвет кнопки H на чёрный

<Else> // если отправка нажатий в окна неактивна
<TurnHotkeysOn> // включаем отправку нажатий
<SetActiveWindowTracking On> // включаем активное отслеживание окон
<SetButtonColors ButtonH 0x33AA33> // изменяем цвет кнопки H на зелёный
<EndIf>

// принудительно закрепляем панели на переднем плане
<TargetWin SwitchPanel>
<AlwaysOnTop On>
<TargetWin ControlPanel>
<AlwaysOnTop On>


//----------------------------------------------------------------------
// Клавиша ScrollLock переключает режим отправки всех нажатий в окна.
// Требуется в случаях, когда нужно напечатать текст сразу во всех окнах, например, ввести пароль.
//----------------------------------------------------------------------
<Hotkey ScrollLockOff ScrollLock>
// отправка нажатия в активное окно
<PassThrough>
// измененяем цвет кнопки S на жёлтый
<SetButtonColors ButtonS 0xEEEE55 0x151515>
// изменяем команду на кнопке для правильной работы клика
<SetButtonHotkey ButtonS Hotkey ScrollLockOn ScrollLock>


<Hotkey ScrollLockOn ScrollLock>
// отправка нажатия в активное окно
<PassThrough>
// измененяем цвет кнопки S на чёрный
<SetButtonColors ButtonS 0x101010 0xFFFFFF>
// изменяем команду на кнопке для правильной работы клика
<SetButtonHotkey ButtonS Hotkey ScrollLockOff ScrollLock>


//----------------------------------------------------------------------
// Управление расстановкой пяти персонажей
//----------------------------------------------------------------------
<Template Move>
<MovementHotkey ScrollLockOff Ctrl Right>
<SendLabel r2, r3>
<Key %3%>
<SendLabel r4, r5>
<Key %4%>

<MovementHotkey ScrollLockOff Ctrl Left>
<SendLabel r2, r3>
<Key %4%>
<SendLabel r4, r5>
<Key %3%>

<MovementHotkey ScrollLockOff Right>
<SendLabel r2>
<Key %3%>
<SendLabel r5>
<Key %4%>

<MovementHotkey ScrollLockOff Left>
<SendLabel r2>
<Key %4%>
<SendLabel r5>
<Key %3%>

<MovementHotkey ScrollLockOff Ctrl Up>
<SendLabel r2, r3, r4, r5>
<Key %1%>

<MovementHotkey ScrollLockOff Ctrl Down>
<SendLabel r2, r3, r4, r5>
<Key %2%>

<MovementHotkey ScrollLockOff Up>
<SendLabel r2, r5>
<Key %1%>

<MovementHotkey ScrollLockOff Down>
<SendLabel r2, r5>
<Key %2%>
<EndTemplate>


<ApplyTemplate Move W S Q E>


//----------------------------------------------------------------------
// Переопределение действий для пробела - после прыжка побочные персонажи продолжат следовать за главным.
// Требуется во время полёта и плавания.
//----------------------------------------------------------------------
<Hotkey ScrollLockOff Space>
<SendLabel r1, r2, r3, r4, r5>
<KeyDown Space> // нажатие и удержание клавиши Пробел


<HotkeyUp ScrollLockOff Space>
<SendLabel r1, r2, r3, r4, r5>
<KeyUp Space> // отпускание клавиши Пробел

// следование за тем персонажем, от лица которого на данный момент осуществляется управление
<SendPC local>
<DoHotkey Hotkey Alt F>


//----------------------------------------------------------------------
// Переключение между окнами.
//
// Для корректной работы в игре должны быть назначены дополнительные действия.
//
// Подробнее об этом смотрите на странице:
// www.slashfocus.ru/hotkeynet/item/hotkeynet-i-rift-vzglyad-multiboxera
//
// Поочерёдное переключение между окнами осуществляется по Alt+Tab.

//----------------------------------------------------------------------
<Template Switch> // шаблон для создания кнопок переключения
<Hotkey ScrollLockOff Shift %1%>
<SwitchColors %1% %2% %3% %4% %5%>
<ResizeAndPosition %1% %2% %3% %4% %5%>

<TargetWin Rift%1%>
<SetActiveWin> // активация окна, на которое было произведено переключение

<ApplyTemplate TargetMain r%2% r%3% r%4% r%5% %6% %7% %8% %9% G>
<EndTemplate>


<ApplyTemplate Switch 1 2 3 4 5 F2 F2 F2 F2>
<ApplyTemplate Switch 2 1 3 4 5 F2 F3 F3 F3>
<ApplyTemplate Switch 3 2 1 4 5 F3 F3 F4 F4>
<ApplyTemplate Switch 4 2 3 1 5 F4 F4 F4 F5>
<ApplyTemplate Switch 5 2 3 4 1 F5 F5 F5 F5>


<Hotkey Ctrl Enter>
// если навести курсор на одно из окон и нажать Ctrl+Enter, будет произведено переключение на это окно
<If ActiveWinIs Rift1>
<DoHotkey Hotkey ScrollLockOff Shift 1>
<Else If ActiveWinIs Rift2>
<DoHotkey Hotkey ScrollLockOff Shift 2>
<Else If ActiveWinIs Rift3>
<DoHotkey Hotkey ScrollLockOff Shift 3>
<Else If ActiveWinIs Rift4>
<DoHotkey Hotkey ScrollLockOff Shift 4>
<Else If ActiveWinIs Rift5>
<DoHotkey Hotkey ScrollLockOff Shift 5>


<Hotkey Alt Tab> // поочерёдное переключение между окнами
<Toggle>
<DoHotkey Hotkey ScrollLockOff Shift 2>
<Toggle>
<DoHotkey Hotkey ScrollLockOff Shift 3>
<Toggle>
<DoHotkey Hotkey ScrollLockOff Shift 4>
<Toggle>
<DoHotkey Hotkey ScrollLockOff Shift 5>
<Toggle>
<DoHotkey Hotkey ScrollLockOff Shift 1>


//----------------------------------------------------------------------
// Исправление выбора целей в группе после вылета одного или нескольких её участников.
//
// Подробнее об этом смотрите на странице:
// www.slashfocus.ru/hotkeynet/item/eksperiment-s-hotkeynet-izbavlyaemsya-ot-makrosov
//----------------------------------------------------------------------
<Command Party>
<RenameWin Rift1 Rift_1>
<RenameWin Rift2 Rift_2>
<RenameWin Rift3 Rift_3>
<RenameWin Rift4 Rift_4>
<RenameWin Rift5 Rift_5>

<RenameWin Rift_%1% Rift1>
<RenameWin Rift_%2% Rift2>
<RenameWin Rift_%3% Rift3>
<RenameWin Rift_%4% Rift4>
<RenameWin Rift_%5% Rift5>

<DoHotkey Hotkey Pause>


<Hotkey Ctrl Esc>
<ThirdPartyCommandLine Party Oem2 Esc 100>
<DoHotkey Hotkey Pause>


//----------------------------------------------------------------------
// Передача кликов мыши.
//----------------------------------------------------------------------
<Template Mouse>
<SendWinS Rift1>
<ClickMouse %1%>
<SendWinS Rift2>
<ClickMouse %1%>
<SendWinS Rift3>
<ClickMouse %1%>
<SendWinS Rift4>
<ClickMouse %1%>
<SendWinS Rift5>
<ClickMouse %1%>
<EndTemplate>


<Hotkey ScrollLockOff Insert>
<ApplyTemplate Mouse LButton> // клик левой кнопкой мыши


<Hotkey ScrollLockOff Delete>
<ApplyTemplate Mouse RButton> // клик правой кнопкой мыши


//----------------------------------------------------------------------
// Дополнительные кнопки мыши.
//
// В связи с тем, что дополнительные кнопки не совершают клик как таковой,
// нам не нужно передавать их нажатия так же, как обычные клики.
// Вместо этого мы передадим в окна нажатие другой клавиши,
// которую можно назначить в самой игре на любое действие.
//----------------------------------------------------------------------
<Template MouseButton>
<Hotkey ScrollLockOff %1%>
<SendLabel r1, r2, r3, r4, r5>
<Key %2%>

<Hotkey ScrollLockOff Shift %1%>
<SendLabel r1, r2, r3, r4, r5>
<Key Shift %2%>

<Hotkey Ctrl %1%>
<SendLabel r1, r2, r3, r4, r5>
<Key Ctrl %2%>

<Hotkey Alt %1%>
<SendLabel r1, r2, r3, r4, r5>
<Key Alt %2%>
<EndTemplate>


<ApplyTemplate MouseButton MButton 0> // средняя кнопка передаст в окна нажатие клавиши 0
<ApplyTemplate MouseButton Button4 Minus> // первая боковая кнопка передаст в окна нажатие клавиши Minus
<ApplyTemplate MouseButton Button5 Plus> // вторая боковая кнопка передаст в окна нажатие клавиши Plus