Wow как сделать макросы


Wow как сделать макросы

Wow как сделать макросы

Wow как сделать макросы



Изначально это было опубликовано у меня в блоге: , , . Но не каждому, кто ищет подобную инфу, придёт в голову искать её там. Поэтому дополнительно выкладываю сюда.

Гайд построен по принципу «от простого к сложному». Для каждой фичи показан пример. Все элементы, используемые в примерах, объясняются сразу же, либо объяснены в тексте ранее. Тому, кто уже знаком с макросами, можно начинать читать с того места, где синим цветом написано непонятное. Но можно и с начала - во всяком случае, я пытался писать не занудно. Разжёван весь синтаксис, показано 95% существующих в игре команд.

Вопросы, дополнения, конструктивная критика и прочая обратная связь приветствуется.

Intro

Если что-то из того, что мы делаем, подчиняется чёткому и строгому алгоритму - значит это можно автоматизировать. И чем больше скучных и рутинных задач мы перекладываем на робота или программу, тем проще и интереснее становится наша жизнь. Когда мы играем, здесь, конечно, интересным должен быть сам процесс, а не только результат. Но даже в этом процессе есть моменты, которые делать самому не хочется, особенно из раза в раз. Да и скорость часто бывает решающей: гораздо эффективнее сбросить бафф или выбрать требуемую цель за доли секунды одним нажатием кнопки, чем тянуться мышкой в нужную область экрана, который в рейде  переливается тысячами огней, как новогодняя ёлка.

По этим самым причинам любой более-менее опытный игрок так или иначе использует макросы. Хотя многие, как ни странно, просто копируют их с разных форумов и сайтов, абсолютно не разбираясь в том, как эти макросы работают. В этой статье я попытаюсь собрать о них наиболее полезную информацию и простым языком объяснить принципы их действия, начав с самых основ и заканчивая написанием скрипта, который одним кликом продаёт все серые предметы из сумок.

Making a macro

Не хочу показаться Капитаном Очевидность, но для полноты картины это должно здесь быть. Допустим, что мы хотим сотворить макрос, но никогда раньше этого не делали. Для начала, нужно открыть интерфейс создания макроса. Для этого можно на панельке рядом с чатом выбрать нижнюю строчку "Макросы", либо просто в любом канале игрового чата с начала строки прописать /m.


Откроется вот такое окно. Все кнопки в нём, в принципе, интуитивны и говорят сами за себя, а в поле для ввода прописывается текст самого макроса.
Перед созданием макроса надо определиться, собираемся мы его юзать на разных персонажах или только на одном. Если это будет нечто универсальное, например случайный выбор из нескольких маунтов, то логично поместить такой макрос в общую вкладку, где он будет виден всем персонажам на аккаунте. Если же мы планируем написать в макросе какую-то последовательность классовых способностей, то нам ни к чему видеть его на другом персонаже, поэтому логичнее засунуть его на вкладку конкретного перса.

На текущий момент в игре доступно 36 слотов для общих макросов и по 18 для каждого персонажа, итого 54, что для среднестатистического игрока вполне достаточно. Если нужно больше - этого можно добиться с помощью аддонов. Все макросы хранятся на стороне сервера, поэтому, зайдя в игру с любого другого компа, нам не потребуется настраивать их заново.

Итак, нажимаем соответствующую кнопку и создаём макрос. При этом откроется дополнительное окошко, где предлагается выбрать название макроса и иконку.


С названием всё легко - пишем любое, чтобы было примерно ясно, что этот макрос делает. С иконкой сложнее, но для начала можно выбрать первую попавшуюся, а чуть ниже я опишу, как найти именно ту, которую хочется. Нажимаем "ок" - теперь у нас появился пустой макрос, в который можно вводить текст. Тому, что именно можно туда вводить, посвящено всё дальнейшее описание. Если это ваш первый макрос, напишите туда /s Hello World. Перетаскиваем иконку макроса на любой слот панели с абилками. Всё - можно пользоваться так же, как обычными способностями. На этом Капитан Очевидность с довольным видом удаляется, а мы переходим к более интересному.

Commands, conditionals and parameters

В общем виде синтаксис строки макроса можно записать следующим образом

/команда [условия_1] параметры_1; [условия_2] параметры_2; ...

Команда определяет, какой тип действия мы хотим совершить. Например, использовать способность персонажа, написать в чат или выбрать цель. Наличие команды является обязательным, иначе макрос не делает ничего.

Условия определяют, при каких обстоятельствах это действие будет совершаться, а при каких нет.  В показанной записи, если условия_1 соблюдены, то команда выполняется с параметрами_1, в противном случае управление передаётся дальше, за символ ";", после чего проверяются условия_2 и так далее. Условия не являются обязательным элементом, т.е. их можно не указывать, если они не требуются. Многие команды, например команды чата, вообще не принимают условия.

Параметры определяют, что конкретно мы хотим сделать данной командой. Например, какую именно способность использовать, что именно написать в чат или какого игрока выбрать в цель. Для некоторых команд параметры могут быть пустыми.

Чтобы всё это было понятнее, сразу приведу несколько простых примеров. Вот такой макрос, состоящий всего из одной команды, заставит персонажа слезть с маунта:


Здесь ни условий, ни параметров не требуется, поэтому они отсутствуют.

Следующий макрос скастует маговскую абилку :


В качестве параметра тут выступает название способности, а условия, по прежнему, отсутствуют.

Теперь представим, что мы играем разбойником и хотим запилить такую кнопку, которая из стелса цель, а если мы не в стелсе, то просто юзает . Это делается с использованием условия:


Для понимания общей картины пока что ограничимся этим, а более сложные примеры будут приведены позже.

Когда мы хотим, чтобы выполнялись одновременно несколько условий, их можно перечислить внутри квадратных скобок через запятую. Например, запись вот такого вида

[условие_1, условие_2, условие_3]

будет означать: "если выполняется условие_1 и выполняется условие_2 и выполняется условие_3".

Когда мы хотим, чтобы выполнялось хотя бы одно из нескольких условий, каждое из них указывается в квадратных скобках через пробел. Например, такая запись

[условие_1] [условие_2] [условие_3]

будет означать: "если выполняется условие_1 или выполняется условие_2 или выполняется условие_3".

Когда параметров несколько, они просто разделяются пробелом. Таким образом, более подробно синтаксис строки макроса можно переписать в виде

/команда [условие_1, условие_2, ...] [условие_3, условие_4, ...] ... параметр_1 параметр_2 ... ; [условие_5, условие_6, ...] [условие_7, условие_8, ...] ... параметр_3 параметр_4 ... ; ...

Тут надо понимать, что условия и параметры сами могут иметь собственный внутренний синтаксис, поэтому макрос может быть совсем не похожим на такую запись или выглядеть гораздо более запутанным. Тем не менее, данный формат всегда соблюдается.


В макросе может быть несколько таких строк, т.е. один макрос может выполнять несколько команд. При этом, во время использования макроса они выполняются последовательно и без какой-либо задержки. Это означает две важные вещи:

- Если одна из команд по какой-то причине не сработала, то выполнение макроса не прерывается, и все дальнейшие команды будут выполняться независимо от результата предыдущих. Скажем, если мы первой командой выбираем танка в  цель, а второй юзаем мощную хилящую абилку, то при отсутствии танка в цели эта абилка всё равно используется, например, на себя.

- Если в качестве одной из команд используется абилка, которая включает глобальный кулдаун, то последующие абилки в этом макросе попытаются выполниться мгновенно после неё и, естественно, не сработают.

Chat commands

Уловив общую суть, перейдём уже к конкретике и начнём с самого простого. С помощью макроса можно открывать любой канал чата и писать туда готовые фразы. Это удобно, например, для объявлений о наборе в гильдию в общем чате или для анонсирования определённых абилок в рейд. Например, макрос

/s Hello World

одним кликом напишет "Hello World" в белый чат, а макрос

/raid убиваем {skull}
/raid заовцуйте {moon}

позволит быстро распределить цели в рейде и будет выглядеть примерно так


Полный список команд для стандартных каналов чата:

(показать/скрыть)

/s (/say) - "белый" чат (виден только недалеко от персонажа)
/y (/yell, /sh, /shout) - кричать, "красный" чат (виден в большой области вокруг персонажа)
/1 - чат локации
/2 - торговый чат (виден во всех столицах)
/p (/party) - чат группы
/raid (/rsay) - чат рейда
/rw (/raidwarning) - объявление для рейда (отобразится по центру экрана, доступно только РЛу и ассистентам)
/i (/instance) - чат подземелья или сценария
/bg (/battleground) - чат поля боя
/g (/guild, /gc) - чат гильдии
/o (/officer, /osay) - чат офицеров гильдии (как правило, доступен только главе гильдии и высшим рангам, но можно настроить доступность для всех)
/e (/emote, /em, /me) - показывает текст в виде эмоции
/w (/whisper, /tell, /t, /send) - личное сообщение конкретному персонажу
/r (/reply) - написать последнему персонажу, с которым общался через личку
/chatlog - включает/выключает запись чата
/combatlog - включает/выключает запись журнала боя
/chatlist (/chatwho, /chatinfo) - показывает полный список персонажей в указанном канале чата
/chat (/chathelp) - показывает список всех доступных команд чата


Как не сложно догадаться, можно писать таким образом сразу в несколько разных каналов или одним кликом делать несколько строк. Можно рисовать в чате всякие ASCII-арты.  

Полезной фичей здесь является конструкция %t, которая автоматически подставляет в текст имя текущей цели.

Кроме стандартных, можно создать собственный канал чата, запаролить его и устраивать там оргии с дренейками установить там свои правила. Удобно, например, для общения игроков конкретного класса в пределах рейда или гильдии.

Команды для управления собственным каналом:

(показать/скрыть)

/join (/channel, /chan) - присоединиться к указанному каналу чата или создать его (если канала с таким названием ещё не существует)
/leave (/chatleave, /chatexit) - выйти из указанного канала чата
/pass (/password) - установить на вход в чат указанный пароль
/c (/csay) - написать в указанный канал чата
/cinvite (/chatinvite) - пригласить указанного персонажа в чат
/ckick - выкинуть указанного персонажа из чата
/mute (/squelch, /unvoice) - запретить выбранному персонажу писать в чат
/unmute (/unsquelch, /voice) - разрешить выбранному персонажу писать в чат
/ban - забанить указанного персонажа
/unban - разбанить указанного персонажа
/mod (/moderator) - назначить указанного персонажа модератором чата
/unmod (/unmoderator) - отобрать права модератора у указанного персонажа
/ann (/announce) - включить анонсы (кто вошёл, кто вышел и т.п.)
/owner - показывает владельца чата или меняет на указанного
/resetchat - сбросить все настройки канала на стандартные


Кроме всего прочего, можно выставить статус и автоответ для всех, кто напишет в личку:

/afk (/away) - выставляет статус "Отошёл" ("Away From Keyboard")
/dnd (/busy) - выставляет статус "Не беспокоить" ("Do Not Disturb")

Например, вот так

/dnd Хочу пофармить один. Не помогаю, не пойду, не дам.

Emotes

Эмоции представляют из себя команды с пустыми параметрами, запускающие определённую анимацию персонажа или просто заранее встроенное в игру сообщение для чата. Юзается вся эта прелесть в основном РПшниками и практической ценности даёт мало. Но можно, например, прописать определённую эмоцию в макрос, вытащить на панель, забиндить на кнопку и, с убранным интерфейсом, нажимая эту кнопку, ловить оригинальные скриншоты или снимать видео.

Бойся мну


Полный список доступных в игре эмоций приведён под спойлерами, а их названия говорят сами за себя. Я перечислю их в алфавитном порядке, а в одну строку записаны те, которые делают одно и то же. Часть из них локализованы и могут быть написаны на русском языке, но не все.

Имеют анимацию:

(показать/скрыть)

/applaud, /applause, /bravo
/beg
/bow
/chicken, /flap, /strut
/cry, /sob, /weep
/dance
/eat, /chew, /feast
/fear, /cower
/flex, /strong
/flirt
/kiss, /blow
/kneel
/laugh, /lol
/point
/roar, /rawr
/rude
/salute
/shy
/sit
/sleep
/talk
/wave
/yawn


Имеют озвучку:

(показать/скрыть)

/attacktarget
/bye, /goodbye, /farewell
/charge
/cheer
/flirt
/followme
/grats, /congrats
/healme
/hello, /hi
/helpme
/incoming, /inc
/no
/nod, /yes
/oom
/openfire
/rasp
/retreat, /flee
/silly
/thank, /thanks, /ty
/train
/wait
/welcome


Отображаются в виде текста (дофига их!):

(показать/скрыть)

/absent
/agree
/amaze
/angry, /mad
/apologize, /sorry
/arm
/awe
/backpack
/badfeeling, /bad
/bark
/bashful
/beckon
/bite
/blame
/blank
/bleed, /blood
/blink
/blush
/boggle
/bonk, /doh
/bored
/bounce
/brandish
/brb
/breath
/brow
/burp, /belch
/cackle
/calm
/challenge
/charm
/chuckle
/chug
/clap
/cold
/comfort
/commend
/confused
/cough
/coverears
/crack, /knuckles
/cringe
/crossarms
/cuddle, /spoon
/curious
/curtsey
/ding
/disagree
/doubt
/drink, /shindig
/drool
/duck
/embarrass
/encourage
/enemy
/eye
/eyebrow
/facepalm, /palm
/faint
/fart
/fidget, /impatient
/flop
/frown, /disappointed
/gasp
/gaze
/giggle
/glare
/gloat
/glower
/go
/going
/golfclap
/greet, /greetings
/grin, /wicked, /wickedly
/groan
/grovel, /peon
/growl
/guffaw
/hail
/happy, /glad, /yay
/headache
/hiccup
/highfive
/hiss
/holdhand
/hug
/hungry, /food, /pizza
/hurry
/idea
/insult
/introduce
/jealous
/jk
/lavish, /praise
/laydown, /liedown, /lay, /lie
/lick
/listen
/look
/lost
/love
/luck
/map
/massage
/mercy
/moan
/mock
/moo
/moon
/mourn
/mutter
/nervous
/nosepick, /pick
/object, /holdit
/offer
/pack
/panic
/pat
/peer
/pet
/pinch
/pity
/plead
/poke
/ponder
/pounce
/pout
/pray
/promise
/proud
/pulse
/punch
/purr
/puzzled
/raise, /volunteer
/ready, /rdy
/regret
/revenge
/rofl
/rolleyes, /eyeroll
/ruffle
/sad
/scared
/scoff
/scold
/scowl
/scratch, /cat, /catty
/search
/sexy
/shake, /rear
/shakefist, /fist
/shifty
/shimmy
/shiver
/shoo, /pest
/shout, /holler
/shrug
/shudder
/sigh
/signal
/silence, /shush
/sing
/slap
/smack
/smile
/smirk
/snap
/snarl
/sneak
/sneeze
/snicker
/sniff
/snort
/snub
/soothe
/spit
/spoon
/squeal
/stand
/stare
/stink, /smell
/surprised
/surrender
/suspicious
/sweat
/talkex, /excited
/talkq, /question
/tap
/taunt
/tease
/think
/thirsty
/threaten, /doom, /wrath
/tickle
/tired
/truce
/twiddle
/veto
/victory
/violin
/warn
/whine
/whistle
/wink
/woot
/work


А ещё, сидя а маунте, можно поюзать /mountspecial, что формально тоже относится к эмоциям. Это заставит лошадь встать на дыбы, ездового кошака потянуться, скорпиона помахать клешнями и так далее.

How to choose an icon

Когда мы вытаскиваем макрос на панель, хочется визуально отличать его от всего остального, либо просто интуитивно связывать с какой-либо абилкой. В качестве иконки для макроса нам на выбор предлагается туева куча картинок, которые запихнуты в маленькое окно без возможности масштабирования. Поэтому просматривать их с целью выбора подходящей довольно неудобно, а найти там что-то конкретное - вообще титанический геморрой.


Но есть простой выход из этого положения. Если мы хотим поставить в качестве иконки для макроса иконку какой-то определённой способности, то при создании макроса выбираем самую первую иконку со знаком вопроса, а перед текстом самого макроса прописываем метакоманду

#show Название Способности

Независимо от того, что мы напишем дальше, наш макрос будет отображаться на панели именно с той картинкой, которая соответствует этой абилке. Единственный минус - это работает только для абилок своего класса. Кроме способностей можно указывать название любой вещи, если она есть на персонаже или в сумках.

Если же мы хотим, чтобы не только картинка соответствовала выбранной абилке, но и при наведении на иконку макроса в качестве всплывающей подсказки появлялось её описание, то для этого нужно прописать

#showtooltip Название Способности

Таким образом, если мы, например, хотим разбойнику сделать макрос для эмоции типа "порычать" с иконкой в виде , делаем это вот так:

#show Adrenaline Rush
/roar

А если  хотим сделать макрос для сообщения в чат с иконкой и всплывающей подсказкой маговского , то делается это следующим образом:

#showtooltip Polymorph
/p Овцую %t! Не сбивать!

Названия способностей можно писать на русском.

Casting spells and using items

В показанном выше макросе было бы логично добавить и использование самой абилки овцевания, которая анонсируется. Делается это при помощи команды /cast или /use, которые полностью взаимозаменяемы, а парметром для них является название используемой способности. Например, вот такой макрос

/cast Превращение

выполнит то же самое, что и клик на саму абилку. Если же мы хотим сообщить об этом в чат, макрос  можно написать вот в таком виде:

#showtooltip
/p Овцую %t! Не сбивать!
/use Превращение

Если в макросе используется только одна абилка, то параметры после метакоманды #showtooltip можно оставлять пустыми - название абилки выцепится из текста автоматически. Если же абилок несколько, или в качестве иконки мы хотим поставить нечто другое - нужно указать название.

Здесь я ещё раз напомню, что команды в макросе выполняются последовательно и независимо друг от друга, поэтому надпись в чате появится абсолютно независимо от успешности превращения. Если с первого раза не получилось (слишком далеко, вне поля зрения и т.п.), то при каждом повторном клике на такой макрос в чате снова появится та же фраза.

У команды /cast есть одна важная особенность. Для таких абилок, которые могут быть во включённом или выключенном состоянии, например стелс у разбойника, эта команда может быть использована как для включения, так и для выключения способности. Поэтому, нажав макрос дважды, мы можем, например, включить стелс и сразу из него выйти. Чтобы такой фигни не происходило, перед названием способности можно добавить восклицательный знак.

/cast !Stealth

В этом случае макрос сможет только включать способность, а клик при уже включённом режиме будет игнорироваться.

С помощью /cast и /use можно не только использовать способности, но и вызывать маунтов или юзать предметы из сумок, используя в качестве параметров соответствующие названия. Например,

/use Green Mechanostrider

вызовет зелёного гномского маунта, если конечно он есть на данном аккаунте, а команда

/use Master Healing Potion

использует банку на хп, если такая имеется в сумках.

Кроме того, предметы из сумок можно юзать по номеру сумки и номеру слота, записывая команду в формате

/use сумка слот

Сумки нумеруются от нуля до 4, начиная со стандартного рюкзака, а слоты в сумках - сверху вниз и слева направо, как это показано на картинке.


Например, макрос

/use 1 4

попытается заюзать предмет, находящийся в первой сумке в 4-й ячейке.

Аналогично, можно юзать надетые на персонаже предметы, например тринкеты, используя номера слотов.


К примеру,

/use 13

активирует эффект верхнего тринкета.

Те же самые номера слотов используются для команд одевания персонажа. Если какой-либо предмет из сумок можно надеть или взять в руки, то это можно сделать командами  /equip и /equipslot. Первая требует в качестве параметра только название вещи, а нужный слот подберёт автоматически:

/equip Saltstone Legplates

Втрая команда позволяет выбрать, в какой слот на персонаже поместить вещь, например, так:

/equipslot 7 Няшные Трусики

В этом примере она по сути дублирует предыдущую, но бывают случаи, когда указывать слот критично, например поместить определённый тринкет в верхнюю ячейку (13), чтобы потом юзать именно его.

В дополнение к /cast и /use существуют команды /castrandom и /userandom, которые позволяют использовать несколько предметов или способностей из списка в случайном порядке. Так можно, например, играть паладином вызывать случайного маунта из нескольких перечисленных

/userandom Swift White Mechanostrider, Swift frostsaber, Swift White Ram, Great Purple Elekk, Swift Palomino

Тут может возникнуть вопрос - какого фига параметры указаны через запятую, а не через пробел? Но на самом деле всё в порядке. Как я уже отмечал ранее, параметры могут иметь собственный внутренний синтаксис. В частности, для такой команды весь список является одним большим параметром, а его элементы перечисляются через запятую.

Targeting

С помощью макросов удобно выбирать или переключать цели. Особенно полезно это в толпе, где много движущихся объектов, которые быстро перемещаются, и попасть по нужному бывает проблематично.


В простейшем случае цель выбирается командой /target. В качестве параметра можно использовать имена персонажей, либо названия мобов или любых других объектов, которые можно взять в цель. Выглядит это так:

/target Blackwing Mage

Вместо команды /target можно точно так же использовать её сокращённый вариант /tar. Стоит иметь в виду, что /target ищет только приблизительное соответствие названию цели. Если в показанном примере такого моба рядом не оказалось, то в цели может легко оказаться, скажем, игрок, чьё имя начинается на "Black...". Если требуется точное соответствие, это делается таким образом:

/targetexact Blackwing Mage

Ещё одна полезная команда для выбора цели - это /assist. Она позволяет выбрать цель того игрока или моба, чьё имя указано в качестве параметра. Удобная вещь, например, чтобы в толпе легко найти цель танка. Если, скажем, танк с именем Lickmeslowly держит в таргете , то

/assist Lickmeslowly

одним кликом выберет этого кролика и сразу же начнёт его атаковать.

Другие команды для выбора или смены цели, которые могут быть полезны для создания макросов под рейды или PvP:

(показать/скрыть)

/focus - запоминает цель (фокус)
/clearfocus - очистить фокус
/cleartarget - очистить цель
/targetparty - выбрать члена группы
/targetraid - выбрать члена рейда
/targetenemy - выбрать вреждебную цель (аналогично прожиманию tab)
/targetfriend - выбрать дружественную цель (аналогично прожиманию ctrl-tab)
/targetenemyplayer - выбрать игрока вражеской фракции
/targetfriendplayer - выбрать игрока своей фракции
/targetlastenemy - выбрать последнюю из выбранных ранее враждебных целей
/targetlastfriend - выбрать последнюю из выбранных ранее дружественных целей
/targetlasttarget - выбрать цель последней выбранной ранее цели


Кроме непосредственно названия или имени цели, можно выбирать объекты в таргет при помощи UnitID. Фактически, это ключевые слова, которые указывают на другие цели относительно данного игрока в конкретной ситуации. К примеру, макрос

/target pet

выберет текущего пета, а макрос

/target player

выберет себя.

Для выбора в цель доступны следующие UnitID:

arenaN - член вражеской команды арены, где N от 1 до 5
arenapetN -  пет члена вражеской команды арены, где N от 1 до 5
bossN - активный босс в текущем энкаунтере,  где N от 1 до 4 (если имеются)
focus - цель, выбранная в фокус
mouseover - цель под курсором мышки, фактически это имитирует клик
none - эквивалентно очистке цели (/cleartarget)
partyN - член группы,  где N от 1 до 4 (если имеются)
partypetN - пет члена группы,  где N от 1 до 4 (если имеются)
raidN -  член рейда,  где N от 1 до 40 (если имеются)
raidpetN -  пет члена рейда,  где N от 1 до 40 (если имеются)
vehicle - средство передвижения, на котором находится персонаж

Если в конце соответствующего UnitID без пробела дописать "target", то это укажет на цель данной цели. Например, макрос

/target boss1target
/cast Holy Light

выберет и похилит текущую цель основного босса в текущем энкаунтере. Приписку "target" можно стакать, что позволяет выбирать цель цели цели цели цели и так далее до посинения.

Conditionals (macro options)

Научившись пользоваться набором простых команд, вспомним о том, что с помощью макроса можно не только выполнять какие-либо действия одно за другим, но и задавать алгоритм их выполнения в зависимости от окружающих условий.

Для того, чтобы проверка условий была простой и компактной, существует встроенный в игру набор заранее определённых ключевых слов, которые означают, что соответствующие им условия соблюдаются. Например, stealth означает, что "персонаж находится в режиме невидимости", а harm означает "в таргет выбрана цель, которую можно атаковать".

Приведём примеры того, как это используется. Допустим, мы играем разбойником и хотим сделать макрос, который использует атакующую способность только в том случае, если цель враждебна. Это делается таким образом:

/cast [harm] Sinister Strike

Если цель дружественная или вообще не выбрана, такой макрос не сделает ничего, избавляя игрока от фразы наподобие «я не могу атаковать эту цель». Теперь вспомним макрос из первой части, в котором мы цель, если находимся в стесле, либо просто её в противном случае:

/cast [stealth] Sap; Sinister Strike

Здесь мы сначала проверяем, находится ли персонаж в режиме невидимости, а затем выполняем команду /cast с параметром Sap в случае положительного результата, либо с параметром Sinister Strike в случае отрицательного. Этот же макрос можно усложнить:

/cast [stealth, harm] Sap; [harm] Sinister Strike

Логика подробно и разноцветно показана на рисунке:


Естественно, двумя показанными условиями возможности написания макросов не ограничиваются. Здесь приведён список ключевых слов для проверки условий, которые не требуют дополнительного пояснения:

exists — цель существует (выбрана)
dead — цель существует и мертва
harm — цель существует, и её можно атаковать
help — цель существует и является дружественной
party — цель существует и находится в одной группе с персонажем
raid — цель существует и находится в одном рейде с персонажем
combat — персонаж в бою
stealth — персонаж в режиме невидимости
swimming — персонаж плавает
mounted — персонаж находится на средстве передвижения
flying — персонаж находится в воздухе на летающем средстве передвижения
indoors — персонаж находится в помещении
outdoors — персонаж находится на улице (не в помещении)
flyable — персонаж находится в зоне, где можно летать
petbattle — персонаж находится в режиме битвы питомцев

Если к началу любого из этих слов приписать no, то получим отрицание соответствующего условия. Например, nocombat будет означать "персонаж не в бою".


Некоторые условия требуют наличия своих собственных внутренних параметров. Эти параметры указываются сразу же после ключевого слова через двоеточие - условие:параметр.

Например, условие  equipped проверяет, одет ли предмет определённого типа на персонаже и требует название этого типа экипировки в качестве параметра. Вот в таком макросе

/equipslot [equipped:Shields] 17 Merciless Gladiator's Cleaver; 17 Crest of the Sha'tar

условие equipped:Shields означает "на персонаже надет щит" и используется для выбора действия: взять оружие (если надет щит) или взять щит (если он не надет).

Фактически, это позволяет сделать кнопку для переключения между несколькими типами оружия, которую можно юзать не заботясь о том, что именно надето сейчас, а иконка будет показывать результат такого переключения. Таким же образом можно не только переодевать одну вещь, но и вне боя менять сразу всю экипировку, используя встроенный менеджер сетов и соответствующую ему команду /equipset. Если у нас сет для танкования назван Tank, а сет на дд называется DPS, то для быстрого переключения можно юзать макрос:

/equipset [equipped:Shields] DPS; Tank

А как добавить сюда проверку, находится ли персонаж в бою, читатель уже легко догадается сам. Здесь же сразу стоит отметить, что условия и их параметры чувствительны к регистру, поэтому нельзя писать вместо маленьких букв большие или вместо больших маленькие, иначе нифига не будет работать.

Другие типы экипировки, которые можно скормить условию equipped:

(показать/скрыть)

Броня:

Cloth
Leather
Mail
Plate
Shields

Оружие:

Bows
Crossbows
Daggers
Guns
Fishing Poles
Fist Weapons
Miscellaneous
One-Handed Axes
One-Handed Maces
One-Handed Swords
Polearms
Staves
Thrown
Two-Handed Axes
Two-Handed Maces
Two-Handed Swords
Wands

Типы оружия:

One-Hand
Two-Hand


Вместо слова equipped можно использовать worn, которое работает точно так же.
Иногда условия могут принимать несколько параметров. Для их разделения используется символ "/", который здесь означает "или". В общем виде это можно записать так:

условие:параметр_1/параметр_2/.../параметр_N

Например, условие group проверяет, находится ли персонаж в группе или рейде:

group:party - персонаж находится в группе
group:raid - персонаж находится в рейде
group:party/raid - персонаж находится в группе или рейде

Аналогично работает условие spec, которым можно проверить, какой из двух наборов талантов на данный момент активен:

spec:1 - активна первая специализация
spec:2 - активна вторая специализация
spec:1/2 - активна первая или вторая специализация (фактически, любой спек)

Команда /usetalents с параметрами 1 или 2 переключает персонажа в соответствующий спек. Респекаться удобно вот таким макросом:

/usetalents [spec:1] 2; 1

So sweet stances, so cute forms...

Многие классы имеют несколько форм или стоек, в которых могут работать или не работать те или иные способности. Поэтому при использовании макроса бывает важно проверить, в какой форме или стойке в этот момент находится персонаж. Делается это с помощью условия stance или form, которые взаимозаменяемы и действуют абсолютно одинаково. В качестве параметров они принимают номера стоек от 0 до 6. Соответствие этих номеров формам различных классов показано в таблице:


Если у друида нет формы совуха или дерева, то формы для полётов вместо номера 6 будут иметь номер 5. Ноль всегда означает, что ни одна из форм не включена.

В качестве примера используем макрос для друля, который в форме медведя или кошки кастует , а вне какой-либо формы кастует :

/cast [form:1/3] Mangle; [noform] Wrath

Здесь вместо noform точно так же можно было использовать form:0 или stance:0.

Более сложный пример - макрос для воина:

#show [equipped:Shields] Shield Bash; Pummel
/cast [equipped:Shields,stance:1/2] Shield Bash; [equipped:Shields] Defensive Stance; [stance:3] Pummel; Berserker Stance

Во-первых, здесь мы заставляем метакоманду #show показывать иконку или в зависимости от того, надет ли на персонаже щит. Во-вторых, запускаем алгоритм действий, логика которого показана на картинке:


Для быстрого выхода из формы можно использовать макрос с командой /cancelform. Эта команда тоже способна принимать условия, например вот в таком виде у друида она сработает только для формы тюленя:

/cancelform [form:2]

Hold her keys, click her buttons...

Можно заставить макрос вести себя по разному, если мы используем его при зажатой кнопке Shift, Ctrl или Alt. Для этого используется условие mod или modifier c соответствующими параметрами:

mod:shift - зажат Shift
mod:ctrl - зажат Ctrl
mod:alt - зажат Alt

Если написать mod без параметров, то это будет эквивалентно записи mod:shift/ctrl/alt, т.е. "зажата любая из кнопок Shift, Ctrl и Alt ".

Пример использования для мага, где мы при зажатом шифте или альте делаем нямку, в противном случае делаем воду:

/cast [mod:shift/alt] Conjure Food; Conjure Water

Более сложный пример с извращениями для ханта:

/cast [mod:alt, mod:ctrl] Chimera Shot; [mod:ctrl] Arcane Shot; Steady Shot

Здесь мы кастуем при одновременно зажатых Ctrl и Alt, при зажатом Ctrl, либо во всех остальных случаях.

Условие mod можно юзать с некоторыми системными переменными. Например, если в настройках игры мы поставили, чтобы при какой-либо зажатой кнопке заклинание кастовалось на себя, то эта информация запишется в переменной SELFCAST, а макросом

/cast [mod:SELFCAST] Renew; Greater Heal

мы при этой зажатой кнопке похилим себя, причём абсолютно независимо от того, какая именно кнопка для этого выбрана и что у нас находится в таргете. Удобно.


Можно заставить макрос вести себя по разному в зависимости от того, какой кнопкой мыши мы его кликнули. Для этого используется условие btn или button, которое принимает параметры от 1 до 5, соответствующие кнопкам мыши:

1 - левая кнопка (по умолчанию)
2 - правая кнопка
3 - средняя кнопка
4 и 5 - кнопка 4 и кнопка 5

Владельцы более продвинутых мышей и инопланетяне с количеством пальцев на руке больше пяти тихо негодуют в сторонке. Пример использования:

/userandom [nobtn:2, flyable, nomounted] Ebon Gryphon; [nomounted] Black Battlestrider, Swift Green Mechanostrider
/dismount [noflying] [btn:2]

Здесь логика такова:

- если мы не на маунте, левый клик выберет грифона в зоне с разрешёнными полётами или случайного из двух наземных маунтов в бесполётной зоне, правый клик всегда выберет случайного из двух наземных маунтов

- если мы на маунте, левый клик заставит персонажа слезть только когда он не в воздухе, правый клик заставит слезть всегда.

Хватит заваливать любимыми маунтами боковые панельки, засуньте их всех в один макрос.

Show me your units

Когда шла речь командах для выбора цели, был приведён список UnitID, которые можно использовать в качестве параметра для таких команд, и которые фактически являются ссылками на различные окружающие объекты относительно текущего состояния персонажа. Многие из показанных выше ключевых слов для проверки условий (такие как harm, dead, exists и т.д.) проверяют состояние текущей цели, т.е. по умолчанию привязаны к юниту target. Похожим образом ведут себя и некоторые команды, например /focus так же по умолчанию принимает параметр target и устанавливает в качестве фокуса текущую цель.

Так вот, существует возможность привязать эти ключевые слова и команды вместо target к любому другому UnitID. Чтобы это сделать, нужно в качестве одного из условий указать соответствующий UnitID с символом @ впереди него. Таким образом, например, в записи [@party3, dead] условие dead вместо текущей цели проверит, мёртв ли третий персонаж в группе.

Вот в таком макросе

/cast [@mouseover, harm] Corruption; Life Tap

условие harm будет применяться к объекту под курсором мыши, поскольку его UnitID по умолчанию target заменён на mouseover, а в случае невыполнения условия команда /cast Life Tap скастуется как обычно, поскольку никаких модификаторов перед этим заклинанием нет.

Ещё один пример: команда

/focus [dead] [noharm]

выберет цель в фокус, если цель мертва или не враждебна, а команда

/focus [@focus, dead] [@focus, noharm]

выберет цель в фокус, если текущий объект в фокусе мёртв или не враждебен.


Что нам даёт вся эта хрень? Допустим, мы играем магом, и РЛ хочет, чтобы мы постоянно контролили определённую цель. Заранее сохраняем её в фокус и, когда необходимо, кастуем на неё овцу, не меняя текущего таргета:

/cast [@focus] Polymorph

Усложним задачу. Допустим, у нас кривой РЛ, и цели раздать нормально не может. Тогда делаем так:

/focus [@focus, noharm] [@focus, dead] [mod:shift]
/cast [@focus, exists] Polymorph

Здесь мы сами выбираем новую цель в фокус, если текущая цель в фокусе мертва или не враждебна, либо если нам так захотелось и мы нажали Shift, после чего овцуем фокус. Если цель в фокусе уже была выбрана ранее, просто переовцовываем её же, не меняя своей текущей цели.

В некоторых случаях можно заставить одну и ту же команду в макросе применяться к разным UnitID в зависимости от поставленных условий. Для этого, в частности, можно юзануть пустые условия [ ], которые всегда означают "да". Молчание - знак согласия:

/cast [@focus, help] [ ] Holy Light

Здесь мы хилим фокус, если там дружественный юнит, либо хилим текущую цель в противном случае. Так происходит потому, что хил в этом макросе должен скастоваться при выполнении первого или второго условия. Срабатывание первого заставит команду /cast к привязаться юниту focus. Если же первое условие не выполняется, то второе выполняется всегда, заставив хил скастоваться на юнит по умолчанию, т.е. на цель.

A perfect raid

Вооружившись знаниями о синтаксисе макросов и условий, продолжим улучшать нашу производительность в бою и рейде. Давайте посмотрим на некоторые команды, которые, будучи частью более сложных макросов,  могут нам в этом пригодиться.

Бывают моменты, когда нужно быстро перестать атаковать цель, например босс собрался отражать входящий в него урон. Для ближнего боя в этом случае используется команда /stopattack, которая говорит сама за себя, а если мы что-то кастуем, то можно применить /stopcasting. Те же команды можно вкрутить и в других случаях, например варлок перед смертью моба может юзануть макрос

/stopcasting
/cast Shadowburn

который мгновенно прервёт текущий каст и использует добивалку.

Иногда во время боя требуется быстро снять с себя какой-либо бафф. Делать это мышкой довольно неудобно, и есть большой шанс промахнуться. Чтобы так не мучиться, существует команда /cancelaura, параметром для которой служит название баффа. А вот таким макросом, в котором она использована, можно включать и отключать левитацию:

/cancelaura [modifier:shift] Levitate
/cast [nomodifier] Levitate

Существуют способности, которые применяются непрерывно в течение некоторого времени, например у варлока или у девушки приста. Если во время их использования юзануть какой-либо макрос с другой абилкой, то оно прервётся. Чтобы этого избежать, можно сделать в макросе проверку условия channeling:Название способности, например вот так:

/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

Команды для управления петом:

(показать/скрыть)

/petattack - фас!
/petstay - сидеть!
/petfollow - к ноге!
/petmoveto - переместить пета в точку, указанную мышкой
/petassist - переключить пета в режим помощи (assist)
/petdefensive - переключить пета в режим защиты
/petpassive - переключить пета в пассивный режим
/petautocaston Название Способности - включить автоматическое использование способности петом
/petautocastoff Название Способности - выключить автоматическое использование способности петом
/petautocasttoggle Название Способности - включить автоматическое использование способности петом (если выключено) или выключить автоматическое использование способности петом (если включено)


Ну а если управлять приходится уже не только своим петом, а целым рейдом, то полезными будут команды:

(показать/скрыть)

Контроль популяции хомяков:

/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 — у персонажа активен интерфейс средства передвижения

Другие команды интерфейса, которые можно юзать вместо соответствующих менюшек и кнопок:

(показать/скрыть)

Окна и вкладки:

/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

И наконец, мы добрались до того, что уже вполне можно назвать программированием. Макросы позволяют запускать блоки кода, написанного с соблюдением правил языка . Это делается при помощи команды /run или /script, параметром для который служит соответствующий блок кода. Весь код должен быть написан в одну строку, поскольку при смене строки макрос пытается найти новую команду. Если в самом коде несколько строк, то для их разделения используется символ ";".

Тут сразу добавлю небольшое общее пояснение. Для того, чтобы различные языки программирования можно было использовать в разных средах, для них существуют наборы библиотек с функциями, структурами, классами, переменными и прочим барахлом, которое позволяет работать с данными этой среды. Такие наборы называются . Например, для С++ существует 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() мило нацепит все одевабельные серые шмотки из сумок на персонажа.

И напоследок, пусть здесь будет ещё немного няшности:

(показать/скрыть)

                                                              ..---..._
                                                        ..--""         "-.
                                                   ..-"""                 ".
                                               ..-""                        "
                                            .-"
                                         .-"      ... -_
                                     .="   _..-" F   .-"-.....___-..
                                     "L_ _-'    ."  j"  .-":   /"-._ "-
                                        "      :  ."  j"  :   :    |"" ".
                                  ......---------"""""""""""-:_     |   |\
                        ...---""""                             -.   f   | "
                ...---""       . ..----""""""""..                ".-... f  ".
         ..---"""       ..---""""""""-..--"""""""""^^::            |. "-.    .
     .--"           .mm::::::::::::::::::::::::::...  ""L           |x   ".
   -"             mm;;;;;;;;;;XXXXXXXXXXXXX:::::::::::.. |           |x.   -
 xF        -._ .mF;;;;;;XXXXXXXXXXXXXXXXXXXXXXXXXX:::::::|            |X:.  "
j         |   j;;;;;XXX#############################::::::|            XX::::
|          |.#;::XXX##################################::::|            |XX:::
|          j#::XXX#######################################::             XXX::
|         .#:XXX###########################################             |XX::
|         #XXX##############################XX############Fl             XXX:
|        .XXX###################XX#######X##XXX###########Fl             lXX:
 |       #XX##################XXX######XXXXXXX###########F j             lXXX
 |       #X#########X#X#####XXX#######XXXXXX#######XXX##F  jl            XXXX
 |       #X#######XX#"  V###XX#' ####XXXXXX##F"T##XXXXXX.  V   /  .    .#XXXX
  |       #########"     V#XX#'  "####XXXX##.---.##XXXXXX.    /  /  / .##XXXX
  |       "######X' .--"" "V##L   #####XXX#"      "###XXXX. ."  /  / .###XXXX
  |         #####X "   .m###m##L   ####XX#      m###m"###XX#   /  / .#####XXX
   |         "###X   .mF""   "y     #####     mX"   "Y#"^####X   / .######XXX
   |           "T#   #"        #     ####    X"       "F""###XX"###########XX
   |             L  d"     dXX  xm   "^##L mx     dXX  YL-"##XX"S""##########
    |            xL J     Xd%    T      ""  T    XdX    L. "##XS.f |#########
    |             BL      X## X                  X## X      T#SS"  |#########
    |              #L     X%##X                  X%##X|     j#SSS /##########
     |              #L  ._ TXXX-"           "-._  XXXF.-    ###SS\###########
     |              ##   """""                  """"""      ##DS.\###########
     |              TF                                      ##BBS.T#########F
      |             #L           ---                        ###BBS.T########'
      |            '##            ""                     jL|###BSSS.T#######
       |          '####             ______              .:#|##WWBBBSS.T####F
      J L        '######.            \___/            _c::#|###WWWBSSS|####
     J ;;       '########m            \_/            c:::'#|###WWWBBSS.T##"
    J ;;;L      :########.:m.          _          _cf:::'.L|####WWWWSSS|#"
  .J ;;;;B      ########B....:m..             _,c%%%:::'...L####WWWBBSSj
 x  ;;;;dB      #######BB.......##m...___..cc%%%%%::::'....|#####WWBBDS.|
" ;;;;;ABB#     #######BB........##j%%%%%%%%%%%%%%:::'..... #####WWWWDDS|
.;;;;;dBBB#     #######BB.........%%%%%%%%%%%%%%%:::'...   j####WWWWWBDF
;;;;;BBB####    ######BBB.........%%%%%%%%%%%%%%:::'..     #####WWWWWWS
;;;;dBBB####    ######BBB..........^%%%%%%%%%%:::"         #####WWWWWWB
;;;:BBB######   X#####BBB"..........."^YYYYY::"            #####WWWWWWW
;;.BB#########  X######BBB........:''                      #####WWWWWWW
;;BB##########L X######BBB.......mmmm..                 ..x#####WWWWWWB.
;dBB########### X#######BB.....        "-._           x""  #####WWWWWWBL
;BBB###########L X######BB...              "-              ######WWWWBBBL
BBB#############. ######BBB.                                #####WWWWBBBB
BBB############## X#####BBB                                 #####WWWWWBBB
BBB############### T#####BB                                  #####WWWBBB     :
BB################# T###BBP                                   #####WWBB"    .#
BB##################..W##P                                      ###BBB"    .##
BB###################..l                                         "WW"      ###
BB####################j ___                                        " l    j###
BBB##################J_-   """-..             ':::'   .-""""""""""-.  l  .####
BBB######B##########J########    "-.           ::'  -" ..mmm####mm.."-.< #####
BBBBBBBB8 BBB#####J############    "-_        :|  " .###############mmLlR####
BBBBBBBBBBBBBBB###/         #######    -.     .:| ".#####F^^^P^^"""^^^Y#lT####
BBBBBBBBBBBBBBBBBj|####mm        ######xx-...:::|" ###f      .....      "#T###
BBBBBBBBBBBBBBBBjj##########mm..           ":::."j##F  .mm#########mmm.. Yj###
BBBBBBBBBBBBBBBB|^WWWSRR############mmmmm xx """mjF.mm####################j###
BBBBBBBBBBBBBBBB|                      ######mmmmmm#######################j###
BBBBBBBBBBBBBBBBY#m...   ..mmm##########PPPPP#####m..                    lj###
BBBBBBBBBBBBBBBBB2##############^^""     ..umF^^^Tx ^##mmmm........mmmmmmlj###
BBBBBBBBBBBBBBBBBJT######^^^""     .mm##PPPF"...."m.  "^^###############lj####
BBBBBBBBBBBBBBBBB##^L         .mmm###PPP............"m..    """"^^^^^"" lj####
BBBBBBBBBBBBBBBB#####Y#mmx#########P.................."^:muuuummmmmm###^.#####
BBBBBBBBBBBBBBBB#####::Y##mPPPPF^".......|.............. ""^^######^^"...#####
BBBBBBBBBBBBBB########..................F............      \     ........#####
BBBBBBBBBBBBB#########.................|..........          :       ....l#####
BBBBBBBBBBBB###########...............F.........             \        ..######
BBBBBBBBBBB#############.............|........                :         dA####
BBBBBBBBBB##############.....................                           kM####
BBBBBBBBB################..................                             k#####
BBBBBBB##################................                               k#####
BBBBB#####################.............                                 t#####
BB########################............                                  "E####
B########################F............                           .       "####
#########################............'      |                    ..       "L##
########################F............                           ...        "L#
#######################F............'                           .....       "#
######################F.............                           .......       "
#####################$..............                         .........
#####################lmmm.............                      ...........   ..m#
####################j########mmmm.............            ......mmmmmm########
###################j###::::;:::::########mmmmmmm##############################
##################j:::::::;:::::::;;::##############################^^^""""
##################.mm:::mmm######mmmm:::' ^^^^^^""#######^^""""
#################F...^m::;::################mmm  .mm"""
#################.......m;::::::::::::#########^"
################F.........###mmm::::;' .##^"""
 ##############F...........:#######m.m#"
   ############..............':####
     #########F............mm^""
       #######..........m^""
          ####.......%^"
             #.....x"
             |.x""
            .-"
          .-
        .-
      .-
     -
   -"
 -"
"
                                                                             x
                                                                           xx
                                                                         xx
                                                                     xxx"
                                                                 xxx"
                                                           .xxxx"
                                                   ___xxx""
                                             .xxxx""....F
                """"mmxxxxx          ___xxx^^^..........'
                   .xx^^^^YYYY###xxx^^.................|
                .xx^"        #######x..................|
             .xx"          ###########mx..............f
           .x^            ##############xx............|
          j"             ##############    x..........;
.........#              ############       #x.........|
x.......j"              ##########       ####x.......f
 xxx....#..            ########        #######x......|
   xxxx.#....         #######        ##########x.....|
      xxx......       #####         #########   x....|
         xxx......    ###          #######      #m...|
           xxx......  ##           ######      ####..|
             xxx......#.          #####       ######m|
               xxxx.......        ###        #######Fx
                   xxx......      #         j#####    m
                      xx......              ####      Jxm
                       xxx......           ####      j###Km
                          xxx.....         ###      j####F  m
                             xx......       #       ###F    .m
                               xxx ....            j##F    .###m
                               m..xx.....          ##F    j#####K^mm.


Источник: http://www.noob-club.ru/index.php?topic=26207.0


Wow как сделать макросы фото


Wow как сделать макросы

Wow как сделать макросы

Wow как сделать макросы

Wow как сделать макросы

Wow как сделать макросы

Wow как сделать макросы

Wow как сделать макросы

Далее: