1.9.5. Манипулирование панелью действий
Имеются две команды, позволяющие переключать страницы панели действий: /changeactionbar и /swapactionbar. /changeactionbar использует параметром одно число и всегда переключает панель на эту страницу. Одним из возможных применений – эмуляция позиций-стансов (stances) у хантеров, за счет пары макросов вида:
Цитата:
/cast Aspect of the Hawk
/changeactionbar 1
или
Цитата:
/cast Aspect of the Monkey
/changeactionbar 2
/swapactionbar использует параметрами два номера страниц и переключает между ними во времякаждого исполнения. Если у вас активна другая страница панели действий, команда сменит ее на первую из двух.
Цитата:
/swapactionbar 1 2
1.9.6. Удаление баффов
Команда /cancelaura позволяет удалять ненужные баффы. Например, так может снимать бафф в макросе с помощью такой команды:
Цитата:
/cancelaura Blessing of Salvation
1.9.7. Выход из форм
За исключением воинов, любой класс со стансами (stances) (друиды, присты с Shadowform, и прочие) могут использовать команду /cancelform чтобы выходить из текущей формы. Значит, можно делать нечто в духе:
Цитата:
/cancelform
/use Super Healing Potion
1.9.8. Прерывание заклинаний
/stopcasting, как можно догадаться, используется для прерывания заклинания во время его использования. Это полезно для создания макроса отмены, прерывающего любые действия выполняемые вами в данный момент, в угоду чего-то более важного. Мой варлок, к примеру, пользуется таким макросом:
Цитата:
/stopcasting
/cast Shadowburn
1.9.10. Преждевременное прерывание макросов
/stopmacro одна из тех команд, бесполезных сами по себе, кроме тех случаем когда используется вместе с опциями макросами. Ее основное использование – создание «провальной» логики, предупреждающей исполнение макроса при срабатывании определенных условий. Для примера смотрите раздел «Использование фокуса» в конце Части 2.
1.9.11. Спешивание
Цитата:
/dismount
Ну что тут еще сказать…
1.9.12. Сохранение целей для последующих нужд
Команда /focus разрешает сохранять цель, чтобы вернуться к ней позже. К примеру, скажем ваш лидер рейда отдает указание превратить цель в овцу. Первым делом, выберете монстра, и введите /focus. Теперь воспользуйтесь макросом, чтобы прочесть заклинание на фокусную цель.
Цитата:
/target focus
/cast Polymorph
/targetlasttarget
Замечу, что это не самый эффективный способ использовать возможности фокуса. Читайте «Использование фокуса» в Части 2 для более глубокого разбора этой механики.
1.9.13. Симуляция нажатия кнопок
Команда /click берет имя кнопки и действует так же, как если вы нажали эту кнопку мышкой. По умолчанию, она ведет себя как левый щелчок, но можно указывать команде другие кнопки. Есть пару способов определить имя интересующего вас элемента:
* Вы можете воспользоваться аддоном. Некоторые аддоны, включая MoveAnything, показывают имя элемента под курсором мыши.
* Можно просмотреть программный код UI для нужного элемента. Это подходит людям, разбирающимся в программировании аддонов.
* Можно назначить на клавишу следующий макрос и активировать его во время наведения курсора мышки на нужный элемент:
/run local f = GetMouseFocus(); if f then DEFAULT_CHAT_FRAME:AddMessage(f:GetName()) end
/click можно применять во многих случаях. Вы можете связывать множественные макросы посредством симуляции щелчков мыши по другим макросам. К примеру, у вас есть весьма длинный макрос, длиннее ограничения в 255 символов. Поместите сколько влезет в первый макрос, дописав в конце следующую строку
Цитата:
/click MultiBarRightButton1
Остальную часть кода поместите в новый макрос, который затем вставьте в MultiBarRightButton1 (это первая кнопка правой вертикальной панели действий).
Можно также делать такие вещи, которые обычно не доступны в макросах или требуют сложных скриптов на Lua. Вот пример макроса, который автоматически выкупает и подтверждает выкуп на лоте аукциона (убедитесь, что выбрали нужный лот; все случайно неверные покупки будут на вашей совести):
Цитата:
/click BrowseBuyoutButton
/click StaticPopup1Button1
Вершина использования – это сложные разветвления с помощью /click, которые будут рассмотрены в Части 2.
1.10. Продвинутые скрипты
1.10.1. Чего не могут скрипты
Скрипты очень мощный инструмент, позволяющий принимать сложные решения на основе каких-то критериев. Из-за этой мощи, Blizzard ограничил тип дозволенных вещей, чтобы запретить макросам и аддонам выполнять действия, которые должен выполнять сам игрок. Я начинаю этот раздел с ограничений, чтобы у вас не было неоправданных надежд. Хотя скрипты полезны во многом, вы не можете использовать их чтобы читать заклинания, применять предметы, менять страницы панелей действий или влиять на вашу цель. Вы ограничены набором «безопасных» команд, уже описанных нами выше.
1.10.2. Что такое скрипт?
WoW UI контролируется кодом написанным на скриптовом языке Lua. Можно воспользоваться преимуществом скриптовой системы в макросах посредством команды /run или /script (но /run позволяет сэкономить пару символов). Весь скрипт должен находиться в одной строке, хотя дозволено иметь множество команд /run в одном макросе.
Полный курс Lua и программирование, безусловно, вне пределов этого руководства.
Blizzard предоставляет множество функций (именуемых API), которые могут использовать Lua скрипты, чтобы контролировать UI. Вы можете просмотреть API и другие возможности системы UI по ссылке http://www.wowwiki.com/Interface_Customization (если вы начнете писать скрипты и аддоны, то обнаружите WoWWiki незаменимым ресурсом в этом деле). Я не могу открыть вам все детали окружения UI, потому просто приведу в пример одного из моих любимых скриптов.
Следующий макрос (его я положил в основу моего аддона CCWarn), прошепчет всем в вашем рейде просьбу сменить цель, если она совпадает с вашей. Это поможет им избежать сбивания с монстра состояния овцы, которое накладывает этот макрос.
Цитата:
/cast Polymorph
/run for i=1,GetNumRaidMembers()-1 do local u,t=”raid”..i,”target”if UnitIsUnit(u..t,t)then SendChatMessage(”Change targets! Trying to sheep…”,”WHISPER”,nil,UnitName(u))end end
Есть две причины, по которым все выглядит крайне запутанным. Первая – ограничение в 255 символов; вам часто придется «срезать углы» чтобы засунуть ваш макрос в этот предел. Вторая – необходимо чтобы весь скрипт находился на в одной строке. При более идеальных условиях, этот скрипт мог бы выглядеть так:
Цитата:
for i = 1, GetNumRaidMembers() - 1 do
local unit = “raid”..i
if UnitIsUnit(unit..”target”, “target”) then
SendChatMessage(”Change targets! Trying to sheep…”, “WHISPER”, nil, UnitName(unit))
end.
---------- Добавлено в 21:50 ---------- Предыдущее сообщение было размещено в 21:50 ----------
Часть 2
1.1 Что такое опции макросов?
Опции макросов это способ контролировать действия макросов, основываясь на разной информации. Чтобы сразу привести пример, следующий макрос прочитает заклинание Renew на дружественную цель и Shadow Word: Pain на враждебную.
Цитата:
/cast [help] Renew; [harm] Shadow Word: Pain
Во время выполнения этого макроса, проверяется состояние [help]. Оно определяет, является ли ваша цель той, на которую допустимо накладывать дружественные заклинания. Если состояние [help] истинно, дальше выполняется заклинание Renew, и макрос переходит к следующей строке. В противном случае (у вас или нету цели, или вы не можете использовать дружеское заклинание на текущую цель), неудача приводи к обработке следующего условия. Теперь макрос проверяет состояние [harm]. [harm] работает по принципу [help] только для атакующих заклинаний. Если условие истинно, используется Shadow Word: Pain. Если нет – (опять же нет цели, или цели невозможно навредить) больше ничего не выполняется, так как условий больше нет.
Примечание: Можно было убрать проверку на [harm] и макрос работал бы в практически также. Однако, если у вас нет цели или на нее невозможно использовать дружественные или атакующие заклинания, вы получили бы сообщение об ошибке, или, в зависимости от заклинания, курсор выбора цели.
1.2 Команды, допускающие опции
Только «безопасные» команды отвечают на опции макросов. Фактически, безопасные команды это та причина, по которой возникли опции. Небезопасные команды, вроде команд для чата, эмоции и так далее, могут выполнятся в скриптах на Lua и командой /run. Говоря больше, Blizzard не хотели путать людей использующих точку с запятой «;» в чате. Если бы команда /say могла использовать опции для макросов, следующий пример вывел бы только «Привет»:
Цитата:
/say Привет; Я нуб
Вот список всех безопасных команд доступных в WoW:
* #show *
* #showtooltip *
* /assist
* /cancelaura
* /cancelform
* /cast
* /castrandom
* /castsequence
* /changeactionbar
* /clearfocus
* /cleartarget
* /click
* /dismount
* /equip +
* /equipslot +
* /focus
* /petagressive
* /petattack
* /petautocastoff
* /petautocaston
* /petautocasttoggle
* /petdefensive
* /petfollow
* /petpassive
* /petstay
* /startattack
* /stopattack
* /stopcasting
* /stopmacro
* /swapactionbar
* /target
* /targetenemy
* /targetexact
* /targetfriend
* /targetlastenemy
* /targetlastfriend
* /targetlasttarget
* /targetparty
* /targetraid
* /use
* /userandom
* #show и #showtooltip технически не безопасные команды, но они оперируют с опциями макросов как /use и /cast.
+ /equip и /equipslot также технически не безопасны, так как их возможности доступны аддонам и макро-скриптам.
Если вы пожелаете использовать опции для макросов с небезопасными командам, есть аддоны которые предоставляют такую возможность. Мой аддон, MacroTalk (http://www.wowinterface.com/download...MacroTalk.html), добавляет несколько команд /opt____ для каждой команды чата и общую команду /opt, которая позволяет добавлять опции для прочих небезопасных команд.
1.3 [target=unit]
В дополнения к проверке условий, система макро опций предоставляет способ назначать цели для разных действий. К примеру, следующий макрос всегда использует бинты на игрока, независимо от текущей цели (для полного списка ID целей читайте http://www.wowwiki.com/UnitId).
Цитата:
/use [target=player] Heavy Netherweave Bandage
Кроме установки цели для выполняемого действия, опция [target=] также задает цель для проверки условий. Это может звучать несколько непонятно, так что вот пример макроса, совмещающий концепцию двух примеров, использованных мной ранее:
Цитата:
/cast [help] [target=targettarget, help] [target=player] Flash Heal
Сначала он проверяет на срабатывание условия [help]. Если оно истинно, управление передается команде /cast c параметром Flash Heal. Если нет – переходит к следующему условию, [target=targettarget, help]. Здесь происходит та же проверка на дружественность цели, но в этот раз определяется, является ли цель вашей цели дружественной. Если так, выполняется /cast Flash Heal, но целью для команды /cast устанавливается цель вашей цели. Если же нужная цель так и не найдена, макрос перейдет к следующему условию, [target=player]. Так как действительных условий здесь нет, оно всегда будет истинно, что приведет к накладыванию заклинания Flash Heal на самого игрока.
---------- Добавлено в 21:51 ---------- Предыдущее сообщение было размещено в 21:50 ----------
2.4 Обзор синтаксиса
С пониманием как работают опции для макросов, может быть ужасная путаница, так что я воспользуюсь ранней возможностью, чтобы разъяснить их общую концепцию. Я буду использовать реальные примеры использующие действенные опции. Все опции будут раскрыты в деталях несколько позже.
2.4.1 Общие опции синтаксиса
Все консольные команды в принципе работают одинаково. У вас есть команда, и набор параметров для нее. Параметры зависят от команды, и некоторые команды используются без них. Вот несколько примеров:
Цитата:
/cast Smite
\___/ \___/
| |
| — параметр
– команда
Цитата:
/petattack
\________/ V
| |
| параметры (пустые)
|
команда
Цитата:
/castsequence reset=target Immolate, Corruption, Curse of Agony, Siphon Life
\___________/ \_________________________________________________ ___________/
| |
command parameters
Опции для макросов позволяют выбирать набор параметров на основе нескольких критериев. На наивысшем уровне, у вас есть набор групп критериев/параметров, разделенных точками с запятыми. Критерии состоят из нулевого или больше количества наборов условий. Каждый набор условий задается внутри квадратных скобок []. Вот иллюстрация общего синтаксиса:
Цитата:
/команда [условия] [еще условия] параметры; [условия] параметры …
Как видно из простых примеров, описанных выше, команда выполняется слева направо. Как только найден набор условий который является истинным, выполняется команд с соответствующими параметрами. Если условий в записи нет, она всегда будет истинна. По сути, можно представить команду /cast с одним заклинанием в качестве опции макроса, в единственной записи без условий. Если команда не может найти истинных условий, она вообще не выполнится.
2.4.2 Синтаксис для условий
Каждый из наборов условий есть простым списком разделенный запятыми. Условия могут задаваться в любом порядке, но [target=] всегда учитывается первым, перед любыми другими условиями. О разделителе «,» (запятая) можно думать как о слове «и». Условие вроде [help, nodead, target=focus] означает «Мой фокус дружественная цель И она не мертва».
Замечание: Условия чувствительны к регистру. Если использовать [Help] вместо [help], макрос выдаст ошибку. Однако, это не относится к параметрам условий (описанных ниже). По-прежнему, обычно лучше писать прописными буквами. Записывайте заклинания и предметы точно так же, как вы видите названия в их подсказках. И в точности следуйте примерам в этом руководстве.
Условия сами по себе строятся из нескольких блоков. Во-первых, как вы могли видеть в примере с «nodead», можно добавить приставку «no» перед условием для получения обратного значения. Заметьте, что [nohelp] не обозначает тоже что и [harm]. [harm] и [help] вернут истинное значение как минимум при наличии цели. По мимо этого, существуют некоторые цели, которым невозможно помочь или навредить (игроки с выключенным ПвП, небоевые питомцы, эскорт-квесты и так далее).
Некоторые из условий также требуют своего собственного набора параметров. Например, [stance] обозначает «Если включена любая стойка» (полезно для всех классов со стойками, кроме воинов так как они всегда находятся в стойке). Но можно указать одну или несколько конкретных стоек для проверки. Набор параметров начинается с двоеточия «:» и каждый параметр отделяется косой чертой «/», которая значит «или». Вот общая иллюстрация синтаксиса для одного условия, а все что в угловых скобках «<>» опционально.
Цитата:
[<no>condition<parameter</parameter</parameter<...>>>>]
Вот простой пример использования умения Shield Bash в Defensive или Battle стойках, но если активна Berserker стойка – она переключается на Defensive.
Цитата:
/cast [stance:1/2] Shield Bash; Defensive Stance
Примечание: приставка «no» применяется ко всему условию и его параметрам. [nostance:1/2] будет означать «любая из стоек кроме 1 или 2»
2.4.3 Пустые параметры
Путаница возникает при использовании команд, не требующих параметров. Самая распространенная ошибка в написании макроса – добавлять лишнюю точку с запятой в конце, что приводит к неожиданным глюкам. Рассмотрим такой макрос:
Цитата:
/petattack [target=focus, harm];
Для не посвященных, выглядит будто я посылаю питомца на цель в фокусе если она враждебна, и больше ничего. Но давайте разобьем макрос на составляющие:
/petattack [target=focus, harm] ;
\________/ \__________________/ V V V
| | | | |
command options | | parameters (empty)
| |
| options (empty)
|
parameters (empty)
Видите дополнительный пустой набор опций и параметров? Запомните – пустые наборы опций всегда возвращают «истину», так что второй пустой параметр передается /petattack если первое условие не было истинно.
2.4.4 Пустые условия
Иногда нужна команда использующая умения при нужных условиях на определенную цель, но ведущая себя как обычно, если условия не истинны. В этом случае вы пожелаете использовать пустой набор условий, который всегда возвращает истину. Этот макрос прочитает Flash of Light на цель под курсором вашей мыши. Если цель под мышью враждебна или ее просто нет, макрос поведет себя как обычная команда /cast Flash of Light и выполнит заклинание на вашу цель, учитывая опции по авто-использованию умений на себя в настройках интерфейса.
Цитата:
/cast [target=mouseover, help] [ ] Flash of Light
2.4.5 [target=] с параметрами единицы
Некоторые команды разрешают использовать напрямую ID целей как свои параметры. Например, /target party1 использует целью первого человека в вашей партии. Команда /target [target=party1] более понятна, но ведет себя абсолютно так же. В то же время, разработчики в множестве случаев не дают использовать ID целей для проверки условий напрямую, по этому приходится использовать один или другой способ в зависимости от ситуации. К примеру, такой макрос не будет работать как надо:
Цитата:
/target [target=focus, dead] party1
WoW проигнорирует параметр party1, так как мы уже установили цель с помощью [target=]. Есть правда особые исключения из этого правила. Пару команд имеют «ключевые цели» в качестве основных для этих команд. Если вы используете некую цель в [target=], WoW разрешит задать еще одну, либо выберет цель по умолчанию, если ничего не задано. Этот нюанс требует конкретного примера:
Цитата:
/focus [target=focus, dead] [target=focus, noharm] target
Здесь «ключевая цель» это фокус. Так как используется [target=focus], WoW передаст цель команде /focus. Можно убрать «target» в конце, так как команда /focus берет по умолчанию вашу текущую цель. Ниже приведен список всех команд с их ключевыми целями и целями по умолчанию, если такие есть. Повторим еще раз, для ясности – ключевая цель это такая цель, которую можно использовать в [target=] и она позволит вам передать команде еще одну другую цель. Цель по умолчанию – эта такая цель, которая будет передана команде если цели не задано.
Команда______Ключевая цель______Цель по умолчанию
/target_______target
/focus________focus______________target
/startattack___target______________target
/petattack____pettarget___________target





