Третья и заключительная часть статьи о макросах в WoW. Базовая информация о том, как кастовать заклинания, юзать предемты из сумок, выбирать цели и делать с помощью макросов другие простейшие действия описана в первой части. Условия, модификаторы и способы задания логики любой сложности разобраны во второй части. Здесь же будет в основном не о том, как правильно написать, а о том, что ещё можно сделать.
Как поставить всю ротацию на одну кнопку? Как одним кликом запустить цепочку из нескольких макросов? Как проще всего сбрасывать настройки на минимум и возвращать обратно? Как заставить игру отображать больше крови? Собственно, всё самое интересное будет здесь.
A perfect raid
Вооружившись знаниями о синтаксисе макросов и условий, продолжим улучшать нашу производительность в бою и рейде. Давайте посмотрим на некоторые команды, которые, будучи частью более сложных макросов, могут нам в этом пригодиться.
Бывают моменты, когда нужно быстро перестать атаковать цель, например босс собрался отражать входящий в него урон. Для ближнего боя в этом случае используется команда /stopattack, которая говорит сама за себя, а если мы что-то кастуем, то можно применить /stopcasting. Те же команды можно вкрутить и в других случаях, например варлок перед смертью моба может юзануть макрос
/stopcasting
/cast Shadowburn
который мгновенно прервёт текущий каст и использует добивалку.
Иногда во время боя требуется быстро снять с себя какой-либо бафф. Делать это мышкой довольно неудобно, и есть большой шанс промахнуться. Чтобы так не мучиться, существует команда /cancelaura, параметром для которой служит название баффа. А вот таким макросом, в котором она использована, можно включать и отключать левитацию:
/cancelaura [modifier:shift] Levitate
/cast [nomodifier] Levitate
Существуют способности, которые применяются непрерывно в течение некоторого времени, например Похищение жизни у варлока или Пытка разума у
/cast [nochanneling:Arcane Missiles] Polymorph
Кроме прерывания каста или атаки, можно при соблюдении определённых условий вообще останавливать выполнение макроса. Делается это командой /stopmacro. В качестве примера снова исользуем маговский макрос для овцевания, но на этот раз вот в таком виде:
/focus [@focus, noharm] [@focus, dead] [modifier]
/stopmacro [@focus, noexists]
/cast [@focus] Polymorph
Здесь второй строкой мы проверяем, есть ли цель в фокусе, и при её отсутствии останавливаемся.
Как мы уже знаем, нельзя одним макросом использовать подряд несколько способностей, если они кастуются не мгновенно или вызывают глобальный кулдаун. Тем не менее, есть способ использовать серию способностей одной кнопкой, но нажимать эту кнопку придётся уже не один раз, а как минимум столько, сколько способностей или предметов мы хотим заюзать. Делается это при помощи команды /castsequence. В качестве примера рассмотрим вот такой макрос для варлока:
/castsequence Immolate, Corruption, Bane of Agony, Siphon Life
Здесь при первом клике скастуется Immolate, при втором клике Corruption и так далее. Когда последовательность дойдёт до конца, она вернётся к первоначальному заклинанию. Если по какой-то причине при использовании макроса одна из способностей не сработала (слишком далеко, нет маны, ГКД от предыдущей и т.п.), то действие макроса не будет перескакивать на следующую, пока текущая не скастуется, т.е. макрос можно спамить не опасаясь того, что порядок собьётся.
Кроме того, можно задать условия, при которых макрос автоматически вернётся в начало последовательности. Такими условиями могут быть:
reset=n - прошло n секунд с момента последнего использования
reset=target - смена цели
reset=combat - выход из боя
reset=shift/alt/ctrl - использование макроса с зажатым Shift/Alt/Ctrl (или одним из них)
Например, вот такой макрос
/castsequence reset=10/shift Заклинание, Другое заклинание, 14
будет последовательно юзать две способности и нижний тринкет, а сбрасывается к началу он по прошествии 10 секунд с момента последнего применения или при использовании с зажатым шифтом. Стоит обратить внимание, что для команды /castsequence условие ресета является параметром (да, они извращенцы), поэтому пишется без квадратных скобок, а все остальные условия, если они имеются, должны быть в квадратных скобках и перед ним.
Те классы, у которых есть петы, отлично знают, какой морокой иногда бывает в рейде контролировать действия этого идиота, чтобы он бил кого надо и не сдох в самый неподходящий момент. Для контроля пета тоже существуют свои макросы.
Наличие активного пета и его тип проверяются условием pet:Тип пета, где в качестве типов могут выступать Voidwalker, Boar, Imp, Wolf и так далее. Пример макроса для мага:
/cast [pet] Freeze; Frost Nova
Команды для управления петом:
Spoiler
/petattack - фас!
/petstay - сидеть!
/petfollow - к ноге!
/petmoveto - переместить пета в точку, указанную мышкой
/petassist - переключить пета в режим помощи (assist)
/petdefensive - переключить пета в режим защиты
/petpassive - переключить пета в пассивный режим
/petautocaston Название Способности - включить автоматическое использование способности петом
/petautocastoff Название Способности - выключить автоматическое использование способности петом
/petautocasttoggle Название Способности - включить автоматическое использование способности петом (если выключено) или выключить автоматическое использование способности петом (если включено)
/petstay - сидеть!
/petfollow - к ноге!
/petmoveto - переместить пета в точку, указанную мышкой
/petassist - переключить пета в режим помощи (assist)
/petdefensive - переключить пета в режим защиты
/petpassive - переключить пета в пассивный режим
/petautocaston Название Способности - включить автоматическое использование способности петом
/petautocastoff Название Способности - выключить автоматическое использование способности петом
/petautocasttoggle Название Способности - включить автоматическое использование способности петом (если выключено) или выключить автоматическое использование способности петом (если включено)
Ну а если управлять приходится уже не только своим петом, а целым рейдом, то полезными будут команды:
Spoiler
Контроль популяции хомяков:
/inv (/invite) - заинвайтить указанного игрока в рейд
/kick (/uninvite, /u, /un) - кикнуть указанного игрока из рейда
Настроить лут:
/ffa - каждый за себя
/group - групповой (ролл)
/master - ответственный за добычу
/needbeforegreed - ещё одна вариация группового
/roundrobin - всем по очереди
/threshold - установить минимальное качество вещей. которые будут разроливаться
Проверить сейвы и готовность:
/raidinfo - посмотреть информацию о сохранённых рейдах
/readycheck - проверка готовности
Расставить или убрать метки:
/targetmarker, (/tm) - метка цели (0 - очистить, 1 - жёлтая звезда, 2 - оранжевая резинка, 3 - фиолетовый ромб, 4 - зелёный треугольник, 5 - голубой полумесяц, 6 - синий квадрат, 7 - красный крест, 8 - черепушка)
/worldmarker (/wm) - метка области (1 - синий квадрат, 2 - зелёный треугольник, 3 - фиолетовый ромб, 4 - красный крест, 5 - жёлтая звезда)
/clearworldmarker (/cwm) - снять метку области
Назначить роли:
/mainassist (/ma) - ассистент
/maintank (/mt) - основной танк
/clearmainassist (/clearma, /mainassistoff, /maoff) - снять статус ассистента
/clearmaintank (/clearmt, /maintankoff, /mtoff) - снять статус основного танка
/promote (/pr) - назначить другого РЛаи пойти застрелиться
/inv (/invite) - заинвайтить указанного игрока в рейд
/kick (/uninvite, /u, /un) - кикнуть указанного игрока из рейда
Настроить лут:
/ffa - каждый за себя
/group - групповой (ролл)
/master - ответственный за добычу
/needbeforegreed - ещё одна вариация группового
/roundrobin - всем по очереди
/threshold - установить минимальное качество вещей. которые будут разроливаться
Проверить сейвы и готовность:
/raidinfo - посмотреть информацию о сохранённых рейдах
/readycheck - проверка готовности
Расставить или убрать метки:
/targetmarker, (/tm) - метка цели (0 - очистить, 1 - жёлтая звезда, 2 - оранжевая резинка, 3 - фиолетовый ромб, 4 - зелёный треугольник, 5 - голубой полумесяц, 6 - синий квадрат, 7 - красный крест, 8 - черепушка)
/worldmarker (/wm) - метка области (1 - синий квадрат, 2 - зелёный треугольник, 3 - фиолетовый ромб, 4 - красный крест, 5 - жёлтая звезда)
/clearworldmarker (/cwm) - снять метку области
Назначить роли:
/mainassist (/ma) - ассистент
/maintank (/mt) - основной танк
/clearmainassist (/clearma, /mainassistoff, /maoff) - снять статус ассистента
/clearmaintank (/clearmt, /maintankoff, /mtoff) - снять статус основного танка
/promote (/pr) - назначить другого РЛа
Сontrol everything
Теперь поговорим о том, как с помощью макросов управлять интерфейсом, а именно всеми теми панельками, значками и кнопочками, которые отображаются у нас на экране. С учётом возможности поставить кучу разных аддонов, интерфейс, конечно, у каждого может быть свой, однако его основная функциональность обычно сохраняется, пусть и в визуально изменённом виде. Панельки другие, а действуют так же. Впрочем, корректную работу всех макросов при установленных аддонах никто никогда не гарантирует.
Основная панель с абилками (в стандартном интерфейсе левая нижняя) имеет 6 страниц, между которыми можно переключаться. У классов с несколькими формами или стойками она при смене формы переключается автоматически.
Чтобы проверить, какая страница на данный момент активна, используется условие bar:N или actionbar:N, где N может быть от 1 до 6. Например, bar:1/3/4 означает "активна страница 1 или страница 3 или страница 4". Если мы берём моба или другого игрока под контроль, его абилки у нас всегда появляются на пятой странице, а наличие такой активной панельки можно проверить условием bonusbar:5.
Для переключения страниц юзается команда /changeactionbar с параметром в виде номера страницы, на которую переключаемся. С помощью двух вот таких макросов можно симулировать для ханта стойки, как у вара, при переключении аспекта:
/cast Aspect of the Hawk
/changeactionbar 1
и
/cast Aspect of the Monkey
/changeactionbar 2
Для переключения между двумя заданными страницами при каждом использовании можно применять макрос
/swapactionbar 1 2
который при открытой первой странице переключится на вторую, а при открытой второй или какой-либо ещё переключится на первую.
С помощью макросов можно симулировать клик мышью. Да-да, мы нажимаем кнопку на клавиатуре, а эффект получается точно такой же, как если бы мы одной из кнопок мыши кликнули в нужную область экрана. Это делается командой
/click ButtonName MouseButton
Здесь ButtonName указывает, какую кнопку и на какой панели мы хотим кликнуть. Для этого указывается название панели с номером кнопки:
ActionButtonN - основаня панель (левая нижняя)
BonusActionButtonN - дополнительная страница основной панели (для форм, стоек и т.п.)
MultiBarBottomLeftButtonN - левая верхняя панель (над основной)
MultiBarBottomRightButtonN - правая верхняя панель
MultiBarRightButtonN - боковая панель (в правой части экрана)
MultiBarLeftButtonN - вторая боковая панель (левее предыдущей)
PetActionButtonN - панель способностей пета
ShapeshiftButtonN - кнопки для смены форм или стоек
Здесь повсюду вместо N на конце нужно подставлять номер кнопки.
Кнопки мыши (MouseButton):
1 или LeftButton - левая кнопка (по умолчанию)
2 или RightButton - правая кнопка
3 или MiddleButton - средняя кнопка
4 и 5 - кнопка 4 и кнопка 5
Пара примеров:
/click MultiBarRightButton1 3 - симулируем клик на первую кнопку боковой панели средней кнопкой мыши
/click PetActionButton5 RightButton - симулируем клик на пятую кнопку панели абилок пета правой кнопкой мыши (включится/выключится автоматическое использование абилки петом)
Команда /click позволяет нажатием одной кнопки запустить цепочку из макросов. Это удобно, если например текст одного макроса не помещается в 255 символов. Делаем несколько макросов, перетаскиваем на нужные панельки и в конце каждого из них прописываем клик на следующий. Жмакаем самый первый, радуемся происходящему.
Другие условия для проверки наличия активных панелей интерфейса:
extrabar —активна дополнительная кнопка (бонусные абилки в сценариях и т.п.)
overridebar — основная панель заменена дополнительной страницей
possessbar — основная панель заменена абилками для контроля моба или другого персонажа
unithasvehicleui — у цели (UnitID) активен интерфейс средства передвижения
vehicleui — у персонажа активен интерфейс средства передвижения
Другие команды интерфейса, которые можно юзать вместо соответствующих менюшек и кнопок:
Spoiler
Окна и вкладки:
/ach (/achieve, /achievement, /achievements) - открыть окно ачивок
/calendar - открыть календарь
/guildfinder (/gf) - открыть окно поиска гильдии
/lfg (/lfd, /df, /dungeonfinder) - открыть окно поиска группы
/lfr (/raidbrowser, /rb, /or, /otherraids) - открыть окно поиска рейда
/macro (/m) - открыть интерфейс создания макроса
/stopwatch (/timer, /sw) - открыть секундомер (таймер)
/who - открыть окно поиска персонажей по заданному тексту
Взаимодействие с другими игроками:
/trade - открыть окно торговли
/ins (/inspect) - открыть окно просмотра экипировки другого игрока
/friend (/friends) - добавить игрока в друзья
/removefriend (/remfriend) - выкинуть игрока из друзей
/ignore - добавить игрока в список игнорируемых
/unignore - вытащить игрока из списка игнорируемых
/settitle - поставить себе выбранный титул (из имеющихся)
/leavevehicle - слезть со средства передвижения (с многоместного, например)
/duel - вызвать указанного персонажа на дуэль
/forfeit (/yield, /concede) - закончить дуэль (сбежать, сдаться)
/pvp - активирует возможность быть атакованным игроками другой фракции (для PvE-серверов)
/f (/follow, /fol) - следовать за указанным персонажем
Управление гильдией:
/groster (/guildroster) - открыть окно гильдии (список)
/ginfo (/guildinfo) - открыть окно новостей гильдии
/gmotd (/guildmotd) - установить сообщение дня для гильдии
/ginvite (/guildinvite) - пригласить указанного персонажа в гильдию
/guildremove (/gremove, /gkick) - выкинуть указанного персонажа из гильдии
/gpromote (/guildpromote) - повысить ранг указанного персонажа
/gdemote (/guilddemote) - понизить ранг указанного персонажа
/gleader (/guildleader) - назначить указанного персонажа лидером гильдии
/gquit (/guildquit) - покинуть гильдию (а ещё можно вставить это в длинный макрос и подсунуть его нубу)
/gdisband (/guilddisband) - распустить гильдию
Управление командой арены:
/teaminvite (/tinvite) - пригласить в команду
/teamremove (/tremove) - выкинуть указанного игрока из команды
/teamcaptain (/tcaptain) - назначить капитана
/teamquit (/tquit) - покинуть команду
/teamdisband (/tdisband) - распустить команду
/ach (/achieve, /achievement, /achievements) - открыть окно ачивок
/calendar - открыть календарь
/guildfinder (/gf) - открыть окно поиска гильдии
/lfg (/lfd, /df, /dungeonfinder) - открыть окно поиска группы
/lfr (/raidbrowser, /rb, /or, /otherraids) - открыть окно поиска рейда
/macro (/m) - открыть интерфейс создания макроса
/stopwatch (/timer, /sw) - открыть секундомер (таймер)
/who - открыть окно поиска персонажей по заданному тексту
Взаимодействие с другими игроками:
/trade - открыть окно торговли
/ins (/inspect) - открыть окно просмотра экипировки другого игрока
/friend (/friends) - добавить игрока в друзья
/removefriend (/remfriend) - выкинуть игрока из друзей
/ignore - добавить игрока в список игнорируемых
/unignore - вытащить игрока из списка игнорируемых
/settitle - поставить себе выбранный титул (из имеющихся)
/leavevehicle - слезть со средства передвижения (с многоместного, например)
/duel - вызвать указанного персонажа на дуэль
/forfeit (/yield, /concede) - закончить дуэль (сбежать, сдаться)
/pvp - активирует возможность быть атакованным игроками другой фракции (для PvE-серверов)
/f (/follow, /fol) - следовать за указанным персонажем
Управление гильдией:
/groster (/guildroster) - открыть окно гильдии (список)
/ginfo (/guildinfo) - открыть окно новостей гильдии
/gmotd (/guildmotd) - установить сообщение дня для гильдии
/ginvite (/guildinvite) - пригласить указанного персонажа в гильдию
/guildremove (/gremove, /gkick) - выкинуть указанного персонажа из гильдии
/gpromote (/guildpromote) - повысить ранг указанного персонажа
/gdemote (/guilddemote) - понизить ранг указанного персонажа
/gleader (/guildleader) - назначить указанного персонажа лидером гильдии
/gquit (/guildquit) - покинуть гильдию (а ещё можно вставить это в длинный макрос и подсунуть его нубу)
/gdisband (/guilddisband) - распустить гильдию
Управление командой арены:
/teaminvite (/tinvite) - пригласить в команду
/teamremove (/tremove) - выкинуть указанного игрока из команды
/teamcaptain (/tcaptain) - назначить капитана
/teamquit (/tquit) - покинуть команду
/teamdisband (/tdisband) - распустить команду
Above the system
С помощью макросов можно не только выполнять какие-то действия от лица персонажа, но и менять практически любые настройки игры, такие как параметры графики, звука, особенности интерфейса и много чего ещё. Причём, это даёт более широкие возможности, чем стандартное меню настроек. Делается это с помощью команды
/console Переменная Значение
которая задаёт значения системных переменных, отвечающих за различные настройки. Список этих переменных достаточно большой, а посмотреть его с пояснениями можно, например, здесь.
Вот такой макрос
/console violenceLevel 5
/reload
заставит игру отображать больше крови во время боя (по умолчанию 2), а использованная здесь команда /reload перезагружает интерфейс для вступления изменений в силу.
Для слабых компов бывает полезным переключаться на низкие настройки в городе или во время рейда, но при этом бегать с хорошей графикой в локациях, где нет большого скопления народа, да и лаг в случае чего не будет сильно критичен. Во многих играх реализована функция сброса настроек на минимум и возвращения к запомненной конфигурации, однако в WoW по умолчанию такого нет. Эту кнопку можно сделать самому, сохранив в макрос выбранные значения настроек графики для низкого и высокого уровней и одним нажатием переключаясь между ними при необходимости. Если не умещаемся в 255 симоволов, применяем симуляцию клика, описанную выше.
Другие системные команды:
/dump Переменная - показывает текущее значение системной переменной
/eventtrace (/etrace) - открывает окно трассировки системных событий
/disableaddons - отключить все аддоны
/enableaddons - включить аддоны
/timetest - проверяет производительность компьютера и показывает текущий FPS (Frames Per Second)
/time - служба точного серверного времени
/played - показывает суммарное время игры за данного персонажа
/random (/rand, /rnd, /roll) - генерация случайных чисел
/logout (/camp) - выйти в меню выбора персонажа
/quit (/exit) - выйти из игры
Scripting and WoW API
И наконец, мы добрались до того, что уже вполне можно назвать программированием. Макросы позволяют запускать блоки кода, написанного с соблюдением правил языка Lua. Это делается при помощи команды /run или /script, параметром для который служит соответствующий блок кода. Весь код должен быть написан в одну строку, поскольку при смене строки макрос пытается найти новую команду. Если в самом коде несколько строк, то для их разделения используется символ ";".
Тут сразу добавлю небольшое общее пояснение. Для того, чтобы различные языки программирования можно было использовать в разных средах, для них существуют наборы библиотек с функциями, структурами, классами, переменными и прочим барахлом, которое позволяет работать с данными этой среды. Такие наборы называются API (Application Programming Interface). Например, для С++ существует WinAPI, который позволяет писать на этом языке программы под интерфейс Windows.
Так вот, для языка Lua, который, вообще говоря, применяется и в других местах, существует WoW API, позволяющий писать на нём код для аддонов. С имеющимися в нём функциями можно ознакомиться, например, вот здесь. Кусочки такого кода мы и запускаем в макросах командой /run или /script.
И в качестве примера, давайте разберём обещанный макрос, который одним кликом продаёт торговцу все серые предметы из сумок:
/run local c,i,n,v=0;for b=0,4 do for s=1,GetContainerNumSlots(b)do i={GetContainerItemInfo(b,s)}n=i[7]if n and string.find(n,"9d9d9d")then v={GetItemInfo(n)}q=i[2]c=c+v[11]*q;UseContainerItem(b,s)print(n,q)end;end;end;print(GetCoinText(c))
В нём делается следующее:
/run - запустили код
local c, i, n, v=0; - объявляем переменные
for b=0,4 do - запустили цикл для b от 0 до 4 (пробегаем по сумкам)
for s=1,GetContainerNumSlots(b) do - запустили цикл для s от 1 до количества слотов в сумке (пробегаем по слотам внутри сумки)
i={GetContainerItemInfo(b,s)} - получили данные о конкретном слоте
n=i[7] - вытащили из этих данных информацию о предмете
if n - если предмет существует...
and string.find(n, "9d9d9d") then - и в информации о нём содержится серый цвет (9d9d9d), то...
v={GetItemInfo(n)} q=i[2] - получаем и записываем его название и стоимость
c=c+v[11]*q; - прибавляем его стоимость к общей сумме
UseContainerItem(b,s) - продаём предмет (должно быть открыто окно торговца!)
print(n,q) end; - печатаем название предмета в чат и закрываем блок условия
end; end; - закрываем циклы по s и b
print(GetCoinText(c)) - печатаем в чат общую сумму в виде монеток
Здесь надо обратить внимание, что для корректной работы такого макроса обязательно должно быть открыто окно торговца. В противном случае функция UseContainerItem() мило нацепит все одевабельные серые шмотки из сумок на персонажа.
На этом, пожалуй, закончим. В сети есть довольно много различных гайдов, где перечисляются полезные макросы для разных классов и ситуаций. Но в этой статье я ставил несколько другу цель. Не просто собрать и перечислить, а понять и разобраться. И надеюсь, что тот, кто внимательно её прочитал, получит достаточно полное представление о работе макросов, чтобы уметь при желании самостоятельно написать себе всё, что ему необходимо. Или, по крайней мере, понимать те макросы, которые найдёт на других ресурсах.
to be continued...
- 8968
- 21