Расстановка персонажей
Обычно отправка нажатий W, S, Q, E в скриптах HotkeyNet отключается, иначе все персонажи разбегались бы в разные стороны. Поэтому для расстановки привычное всем управление не подойдет.
Предлагаемый ниже способ управления затрагивает только побочные окна. В них будут передаваться клавиши движения, установленные по умолчанию. Если ваши настройки отличаются, то подставьте в код свои значения ("W S Q E" на последней строке) или установите в игре стандартные:
Используйте модификатор Ctrl вместе со стрелками для управления всей группой. Стрелки без Ctrl заставят двигаться только крайних персонажей. Это позволит выстроить их линией, звездой, квадратом и т. д. или просто пройти всем через портал.
Пять окон
//----------------------------------------------------------------------
// Управление расстановкой пяти персонажей
//----------------------------------------------------------------------
<Template Move>
<MovementHotkey ScrollLockOff Ctrl Right>
<SendLabel w2, w3>
<Key %3%>
<SendLabel w4, w5>
<Key %4%>
<MovementHotkey ScrollLockOff Ctrl Left>
<SendLabel w2, w3>
<Key %4%>
<SendLabel w4, w5>
<Key %3%>
<MovementHotkey ScrollLockOff Right>
<SendLabel w2>
<Key %3%>
<SendLabel w5>
<Key %4%>
<MovementHotkey ScrollLockOff Left>
<SendLabel w2>
<Key %4%>
<SendLabel w5>
<Key %3%>
<MovementHotkey ScrollLockOff Ctrl Up>
<SendLabel w2, w3, w4, w5>
<Key %1%>
<MovementHotkey ScrollLockOff Ctrl Down>
<SendLabel w2, w3, w4, w5>
<Key %2%>
<MovementHotkey ScrollLockOff Up>
<SendLabel w2, w5>
<Key %1%>
<MovementHotkey ScrollLockOff Down>
<SendLabel w2, w5>
<Key %2%>
<EndTemplate>
<ApplyTemplate Move W S Q E>
Десять окон
//----------------------------------------------------------------------
// Управление расстановкой десяти персонажей
//----------------------------------------------------------------------
<Template Move>
<MovementHotkey ScrollLockOff Ctrl Right>
<SendLabel w2, w3, w4>
<Key %3%>
<SendLabel w8, w9, w10>
<Key %4%>
<MovementHotkey ScrollLockOff Ctrl Left>
<SendLabel w2, w3, w4>
<Key %4%>
<SendLabel w8, w9, w10>
<Key %3%>
<MovementHotkey ScrollLockOff Right>
<SendLabel w2, w5, w8>
<Key %3%>
<SendLabel w4, w7, w10>
<Key %4%>
<MovementHotkey ScrollLockOff Left>
<SendLabel w2, w5, w8>
<Key %4%>
<SendLabel w4, w7, w10>
<Key %3%>
<MovementHotkey ScrollLockOff Ctrl Up>
<SendLabel w2, w3, w4, w5, w6, w7, w8, w9, w10>
<Key %1%>
<MovementHotkey ScrollLockOff Ctrl Down>
<SendLabel w2, w3, w4, w5, w6, w7, w8, w9, w10>
<Key %2%>
<MovementHotkey ScrollLockOff Up>
<SendLabel w3, w5, w7, w9>
<Key %1%>
<MovementHotkey ScrollLockOff Down>
<SendLabel w3, w5, w7, w9>
<Key %2%>
<EndTemplate>
<ApplyTemplate Move W S Q E>
Как быстро построить круг из любого количества персонажей?
Суть проста - поверните камеру каждому герою и сделайте несколько шагов назад (или вперёд). Чтобы всё было достаточно ровно, поворот должен осуществляться на определённый угол. Для создания скрипта я найду временной эквивалент минимального угла следующим образом:
- Определяем время, за которое один герой делает полный поворот камеры при зажатой кнопке A. Для точности я сделаю несколько оборотов и поделю время на их количество (среднее арифметическое). У меня получилось 2 сек (2000 мс).
- Делим полученное время на число персонажей. Допустим, у меня их 10. Тогда мой "циферблат" будет поделён на равные части по 200 мс.
Далее я создам новую горячую клавишу Numpad0 с применением шаблона, которая будет запускать поворот камеры всем героям одновременно, и каждые 200 мс у одного из персонажей поворот камеры будет завершаться:
//----------------------------------------------------------------------
// Поворот камеры для построения окружности из 10 персонажей
//----------------------------------------------------------------------
<Template Rotate>
<SendPC local>
<Wait 200>
<SendLabel w%1%>
<KeyUp A>
<EndTemplate>
<Hotkey ScrollLockOff Numpad0>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w10>
<KeyDown A>
<ApplyTemplate Rotate 1>
<ApplyTemplate Rotate 2>
<ApplyTemplate Rotate 3>
<ApplyTemplate Rotate 4>
<ApplyTemplate Rotate 5>
<ApplyTemplate Rotate 6>
<ApplyTemplate Rotate 7>
<ApplyTemplate Rotate 8>
<ApplyTemplate Rotate 9>
<ApplyTemplate Rotate 10>
//----------------------------------------------------------------------
// Движение вперед/назад после поворота камеры (Alt+стрелки вверх/вниз)
//----------------------------------------------------------------------
<MovementHotkey ScrollLockOff Alt Down, Up>
<SendLabel w1, w2, w3, w4, w5, w6, w7, w8, w9, w10>
<Key %TriggerMainKey%>
Было замечено, что наиболее точный круг получается, когда во время поворота во всех окнах число кадров в секунду (FPS) равно 60. Если достичь такой производительности невозможно, установите хотя бы одинаковый FPS во всех окнах на время поворота.