• В данный момент наблюдаются проблемы с авторизацией пользователей. Пожалуйста, если вы зарегистрированы были до обновления сайта (03.10.2019), сбросьте свой пароль: https://wowclassic.ru/lost-password/

Гайд по написанию макросов 1.13 1.12

Статус
В этой теме нельзя размещать новые ответы.

ohgodboyyes

Пользователь
Обучение написанию макросов, базовый уровень

Большинство (>95%) макросов написанных по этому гайду не будут работать на классических серверах WoW от Blizzard.

Впрочем как и большинство макросы с версии 1.12 2007 года.

Применимость всего нижеописанного для написания аддонов на актуальной версии Lua сомнительна.

Введение. Возможности макросов и lua.

Гайд написан с целью создать базовое представление о lua для написания макросов и скриптов в связи с отсутствием пособий на русском языке. Стиль изложения — свободный, с применением общепринятых среди геймеров английских аббревиатур и другой лексики. Теории программирования будет по минимуму, который необходим для максимума.

Используется аддон supermacro последней версии.

Если вдруг не понятно: Lua — это язык программирования (версии 5.0), который используется во всех командах /run и аддонах в ванильной wow.

Проще начать с того, чего макросы не могут в ванилле:

Кастануть десять скилов подряд нажатием одной клавиши попивая чаек с вареньицем. Максимум — это два скила и первый из них должен не вызывать отката или cooldown'а (пример: сброс cooldown'ов у фрост мага и разбойника). Однако воины могут одним нажатием поменять стойку и сменить оружие с двуручника на щит и меч. Так что все что касается использования скилов (умений), будем считать, ограничено.

Впрочем, если вы, вдруг, уже разочаровались в макросах и lua.. на ютубе можно найти видео, где рейдовый мейн танк создал макрос, который самостоятельно, в зависимости от ситуации, применяет 1 скилл из десяти+использует банки в критических ситуациях. То есть все его танкование боссов сводится (утрировано) к 2 клавишам — макрос и /lol.

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

Примеры возможных макросов:

* Зажал шифт (или альт, или ctrl)— кастуется одно заклинание, не зажал — другое.

* Макросы, которые можно нажать десять раз подряд, но действовать они будут лишь один раз (стандартно воин может войти в боевую стойку, даже если он уже находится в боевой стойке).

* Если на цели не висит дебаф — кинуть дебаф, если висит — кастануть что-то другое. (этот вариант для чернокнижников можно расширить до макроса, который будет кидать ДОТ (заклинания наносящие урон во времени) за дотом в определенной последовательности, пока на цели не будут висеть все возможные доты. Но клавишу придется нажимать не один раз. Дополнительно, этот макрос может ничего делать, если на цели висят все десять дотов чернокнижника или сколько их там у него… )

* Кинуть фаербол в цель, которая находится на курсоре мыши, и продолжать месить топором ночного эльфа-друида, которого месил.

* и так далее...

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

Как устроены макросы.

Любой макрос состоит из slash (/) команд, которые обязательно разделены абзацем (нажатие клавиши enter). В макросе абзацами разделяются только slash команды! Например:

/yell lok'tar ogar

/attack

В противном случае игра не поймет, что вы хотите. Так что пишите slash команды с новой строки. (можно и не ставить «/» в новой строке, но тогда игра будет считать, что вы хотите что-то написать в чат, что и произойдет)

Этот и все другие гайды будут затрагивать только одну slash команду: /run. Или /script. (Не важно какая из этих двух. Используйте /run, а не /script, в два раза короче.)

А все из-за того, что команда /run позволяет использовать lua код.

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

(Если вы не хотите страдать, то я вам крайне советую создать макрос аккаунта (не персонажа) под названием !!!macro с командой /macro так, чтобы он стоял первым в списке макросов аккаунта. И больше никогда не изменяйте его и не создавайте макросов где более одного восклицательного знака в начале. Вы избежите много проблем)

Переменные и функции.

Переменная – это «объект», который имеет свое уникальное название и имеет свое значение.

Переменные существуют ради того, чтобы им выставляли значения, они их хранили и передавали (при перезагрузке интерфейса и игры все (ваши) переменные сбрасываются).

Названия переменным могут придаваться любые (только буквы английского алфавита + цифры, при этом первым символом названия переменной не может быть цифра).

Возможные виды значений переменных:

* Число (1, 2, 3.14 и т.д.)

* Строка ("строка", "target") и пустая строка ("" – это я так, для галочки указываю)

* Логическая истина (true)

* Логическая ложь (nil). nil – это также значение любой несуществующей переменной (которой еще не было присвоено значение)

Дробные части чисел отделяются от целых только точкой (например 133.1)! Границы строк ообозначаются кавычками ("). Кавычки используются в lua только в качестве границ строк (маленький намек на то, что строки необходимо «закрывать»)

Рассмотрим макрос.

/run a=3.14 Printd(a) a="supermacro" Printd(a)

(Printd() – показывает необходимые данные в чате)

В этом макросе была объявлена переменная a, которой было присвоено значение 3.14, затем ей было присвоено значение supermacro. При запуске этого макроса в чате отобразится два сообщения: 3.14 и supermacro (без кавычек)

Функция - это определенная последовательность кода, которая может быть выполнена в случае ее вызова. Как и переменная, функция имеют свое уникальное название, и свое значение свой код. Функции вы будете создавать позже (если будете).

Запомните, что любое внезапное слово, появившееся в коде, после которого сразу же (читайте - между ними нет ничего) появляются скобки («()») обозначает вызов функции («функции»-исключения – if, elseif, while, for). Перед скобками указывается название функции, а внутри скобок - через запятые - аргументы которые будут переданы этой функции.

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

Рассмотрим макрос.

/run a=3.14 Printd(a) a=2 Printd(a)

Printd(a) - вызов функции Printd.

Функции бывают разные, а в wow’e их можно разделить на 2 вида:

1. которые возвращают определенные данные (н.р. a= функция() )

2. которые совершают некие действия (н.р. CastSpellByName() – скастовать умение)

Схема вызова функции с записью в переменные имеет вид:

/run a, b, c, d, e = функция (arg1, arg2, arg3, arg4, arg5)

Перед знаком равно идет перечисление переменных, которым будет присвоено значение данной функцией.

Внутри скобок идет перечисление конкретных значений, либо переменных, которые будут переданы данной функции (в WoW’е функции обычно не меняют значение переменных, которые вы указали в скобках).

Можно присвоить значения и двадцати переменным таким способом:

/run a,b,c,d,e,f,g,h … = функция()

а можно одной:

/run a = функция()

Также вы можете не тратить свое время на придумывание новых переменных, если вам нужно конкретное не первое значение, которое возвращает функция:

/run _ , _ , a = функция()

Функции, которые вы будете использовать сделаны более 10 лет назад (и их названия не изменились), а переменные вы будете придумавать сегодня. Учтите, что, к примеру, A и a – это две разные переменные (или функции – кто знает, что вы с ними сотворите).

На данный момент вы должны понять из вышенапечатанного как:

* Придать любой переменной значение (а сделать это можно только через знак «=»)

* Как вызвать функцию

* Как передать функции значения.

Как устроен Lua.

Без «блоков» команды /run имеют вид:

/run AttackTarget()AttackTarget()AttackTarget()AttackTarget()AttackTarget()

То есть это банальная последовательность действий, которую вы хотите выполнить. Для начала запомним, что есть 4 вида блоков (пусть будут блоки, не знаю как они правильно называются). Первый блок, который мы с вами пройдем это блок if.

Блок if.

(1) /run if условие()then действие()end

Краткий курс английского: if = если, then = тогда, end = конец.

В этом примере действие будет выполнено только тогда, когда условие истинно. В противном случае, действие не будет выполнено.

/run if UnitHealth("target") / UnitHealthMax("target") < 0.3 then CastSpellByName ("Восстановление") end

Заметьте, что условие хоть и большое, но оно имеет четкие границы. Главное, что сейчас нужно понять – это структуру блока. Все что находится между if и then – это условие. Все что находится между then и end – команды, которые будут выполнены, когда условие выполняется.

(код из примера лечит цель, если у нее меньше 30% здоровья, а если у нее больше 30% здоровья – ничего не происходит)

(2) /run if условие()then действие1()else действие2()end

else = иначе.

Чем отличается код (2) от кода (1)? Наличием действия2, которое будет выполнено, когда не выполнено действие1, то есть когда условие будет ложным. Самое время сказать: мы будем считать, что котов не существует, и условие может быть либо истинным, либо ложным, поэтому в коде (2), будет выполнено только одно действие при любом раскладе

Пример: /run if UnitHealth("target")/ UnitHealthMax ("target")<0.3 then CastSpellByName("Восстановление") else CastSpellByName("Целительное прикосновение")end

(код из примера лечит цель разными заклинаниями в зависимости от её текущего % здоровья)

(3)/run if условие()then действие()elseif условие2()then действие2()else действие3()end

elseif = тогда если

Время картинок.

406148735106678794.png

Сейчас необходимо понять две вещи:

* условия находятся между if (или elseif – для не первых условий) и then

* действия находятся между then (или else для последнего действия) и else/elseif (или end для последнего действия)

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

Условий можно напридумывать бесконечное количество, поэтому частей «elseif условие then действие» можно вставлять в схему сколько угодно.

else можно использовать или не использовать в зависимости от вашего желания.

Ну чтож, достаточно лирики, теперь к практике.

Исходный макрос (русские слова придется удалить):

/run if условие then Print(1) elseif условие then Print(2) elseif условие then Print(3)else Print(4)end

Исходные сведения:

* Ложь в lua обозначается как “nil”, истина - “true”. if true then do()end эквивалентно do(). То есть не важно, напишете ли вы одно или другое, произойдет одно и то же.

* /run IF <условие> ThEn <действие> enD – этот код не будет работать никогда. К примеру, A и a – это две разные вещи, этот же принцип относится ко всему. Следите за этим.

* В «действие» (как и в условие) можно записать сколько угодно кода.

Ваша задачи:

* Используя предоставленный макрос, заменяя условия на nil и true, добейтесь того, чтобы увидеть в чате все цифры от 1 до 4. Поймите почему появляется та или иная цифра. Целеноправленно измените макрос так, чтобы появилась цифра 4.

* Убедитесь в истинности всех пунктов из «исходных сведений» прямо в игре.

* В несколько этапов доведите макрос до вида «if условие then Print(1)end» удаляя не более одного условия и одного действия за один раз.

Условия.

Что такое условие? Это код, который имеет более требовательную структуру всвязи с тем, что его цель – являться условием.

Грубо говоря, условие – уравнение (если оно не состоит из вызова одной единственной функции). Его необходимо решить (не вам, конечно). Как в математике, есть действия, которые выполняются первыми, а другие – последними.

Последовательность расчета в условии:

1 ступень: математические операторы

1. “*” - умножить, “/” - разделить, “+”, “-”

2. “==” – равно, “~=” – не равно, “>”- больше, “>=” - больше либо равно, “<” – меньше, “<=” – меньше либо равно

2 ступень: логические операторы

1. not X – логическое «не», из истины делает ложь, из лжи – истину

2. X and Y– логическое «и» (логическое умножение): истинно только тогда, когда X и Y истинны.

3. X or Y – логическое «или» (логическое сложение):если хотя бы одно значение среди X и Y является истиной – истинно, иначе ложно.

В условии могут находиться только:

* переменные

* вызовы функций (при этом будет учитываться лишь ПЕРВОЕ значение, которое функция вернет)

* операторы (из списка выше)

* конкетные значения.

Вернемся к одному из примеров выше. Сконцентрируйтесь на условии

/run if UnitHealth("target")/UnitHealthMax("target")<0.3 then CastSpellByName("Восстановление") end

UnitHealth("target") и UnitHealthMax("target") – эти функции возвращают текущее и максимальное количество здоровья соответственно.

После этого первое значение делится на второе.

И только затем сравнивается с 0.3.

Логично? Крайне логично. Рассмотрим что происходит по этапам на примере.

1. UnitHealth(“target”)/UnitHealthMax(“target”)<0.3

2. 386/844<0.3

3. 0.457345972<0.3

4. nil (ложь)

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

/run if UnitRace("target") == "Ночной эльф" and UnitSex("target")==3 then CastSpellByName("Казнь")end

А теперь по этапам на примере (в цели стоит орчиха). // UnitSex() выдает номер пола

1. UnitRace("target") == "Ночной эльф" and UnitSex("target")==3

2. "Орк" == "Ночной эльф" and 3==3Q

3. nil and true

4. nil

Чтобы жизнь была проще в условии можно использовать скобки с той же целью, что и в математике. Например

/run if ((UnitRace("target") == "Ночной эльф") and (UnitSex("target")==3)) then CastSpellByName("Казнь")end

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

Помните, что любое значение кроме nil – истинно. То есть все следующие макросы запустят действие1.

/run if 21 then действие() end

/run if "нет" then действие() end

/run if 3.14 then действие() end

Примеры для размышлений

/run f=FindBuff("Метка охотника", "target")if f==nil then CastSpellByName("Метка охотника") end

Находит метку охотника на цели, если не находит – кастует её.

/run if not IsAltKeyDown() and not FindBuff("Волшебный огонь","target")then CastSpellByName("Волшебный огонь")else CastSpellByName("Лунный огонь") end

???

Блок function.

Для максимальной вашей эффективности, нужно понять как создавать свои функции и пользоваться полем «расширенный lua код» в supermacro.

406148735106678794.png

Макрос: /run abcdef()

Расширенный lua код: function abcdef() <что душа пожелает> end

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

Помните, что все что вы напишете справа будет запущено во время нажатия кнопки «сохранить расширение» (Save extend), а не во время нажатия макроса. То есть в примере выше вы объявляете функцию, которую будете использовать позже.

Зачем использовать функции? просто у команды /run есть ограничение на длину строки в 255 символов. А у блока справа (расширенный код) – ограничение семь тысяч символов. А еще можно использовать клавишу enter для себя.

Путь дальнейшего развития.

* Научитесь пользоваться командой Print() для контроля того, какие значения принимают переменные в тот или иной момент.

* Попробуйте вставить блок if в блок if.

* Добавьте в закладки эту страницу (если хоть немного шарите в английском). Это архивный вариант всех основных функций, которые присутствуют в wow. Поизучайте.

* https://www.lua.org/manual/5.0/ - мануал по lua на английском.
 
Последнее редактирование модератором:

ohgodboyyes

Пользователь
Частный lua в wow vanilla

 

Часть 1. Всё что связано с панельками умений игрока

У каждого слота на любой панели умений есть свой номер. Для стандартного интерфейса распределение номеров представлено на картинке:

406148735106678794.png

В Bongos и подобных аддонах номера слотов идут последовательно в соответствии с номером панели.

Следующие функции работают, когда за слотом закреплено умение. Под slot понимается номер слота.

ActionHasRange(slot) - Есть ли ограничение по расстоянию.

IsActionInRange(slot) - Находится ли персонаж в пределах расстояния, в пределах можно использовать действие.

IsAutoRepeatAction(slot) – повторяется ли действие в данный момент (пример: автоматическая стрельба охотников).

IsCurrentAction(slot) – Является ли действие запланированным (многие умения, которые будут использованы при следующей атаке)

IsUsableAction(slot) – Можно ли использовать умение (соблюдены ли условия для использования - будь то форма, уворот и т.д.)

time, duration, isEnoughMana = GetActionCooldown(slot)   - Возвращает данные касательно отката умения на слоте.

time – время, когда последний раз было использовано действие (если отката в данный момент нет – time принимает значение 0)

duration – если сложить первый аргумент (time) и этот – получится время, когда можно будет использовать умение.

(GetTime() – возвращает текущее время.)

 

 

 

Часть 2. Умения и заклинания.

SpellStopCasting()  - отменяет любой каст (и все запланированные умения)

CastSpellByName("Название", [onSelf])   - использовать умение по названию

CastShapeshiftForm(номер) - перейти в определенную форму или стойку (номер – соответствует номеру на панели)

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

GetNumShapeshiftForms() – возвращает число форм.

GetShapeshiftFormInfo(номер)   - Возвращает информацию об определенной форме.

SpellIsTargeting() - есть ли какое-то заклинание, ожидающее выбора цели

SpellStopTargeting() – отменяет заклинание, ожидающее выбора цели





Под unit здесь и далее понимается обозначение определенной цели, которая может быть одной из следующих:

"player" – ваш персонаж

"pet" – ваш питомец

"target" – текущая цель

"mouseover" – цель, находящеяся под курсором мыши.

N – здесь и далее – число от 1 до 4 (или 40 – для рейда)

"partyN" – участник группы (вы – всегда под последним номером в группе).

"partypetN" – питомец учатника группы

"raidN" – участник рейда

"raidpetN" – питомец участника рейда

Вы также можете добавить target к вышеперечисленному, чтобы обозначить цель цели, например:

"pettarget" – цель вашего питомца






 

SpellTargetUnit("unit") – применяет заклинание, ожидающее выбора цели, на определенной цели.

SpellCanTargetUnit("unit")  - Возвращают информацию о том, может ли заклинание, ожидающее выбора цели, быть применено на определенной цели.

 

Часть 2. Выбор целей.

AssistByName("ник")   - выбрать цель цели с определенным ником (именем)

AssistUnit("unit")  - выбрать цель цели

AttackTarget()   - Атаковать (помните, что в WoW вы переключаете атаку этой командой, т.е. этой же командой можете ее отменить)

ClearTarget()   - Сбросить цель

TargetByName("name")   - Выбрать цель по имени (вы можете использовать TargetByName("name", 1) для точного поиска)  

TargetLastEnemy()   - Выбрать предыдущую вражескую цель

TargetLastTarget()  - Выбрать предыдущую вражескую цель

TargetNearestEnemy()   - Выбрать другую вражескую цель (как TAB’ом) (и TargetNearestEnemy(1) – для переключения в обратной последовательности)  

TargetNearestFriend()   - Выбрать другую дружескую цель

TargetNearestPartyMember()   - Выбрать другую цель из вашей группы

TargetNearestRaidMember() - Выбрать другую цель из вашего рейда

TargetUnit("unit")   - Выбрать цель

Часть 3. Информация о целях.

CheckInteractDistance("unit",distIndex)   – при distIndex=3 проверяет находится ли юнит с вами на расстоянии менее 5 футов (или метров, не знаю)

UnitAffectingCombat("unit")    - Находится ли юнит в бою

UnitCanAssist("unit", "unit")    - Могут ли юниты помочь друг другу (???)

UnitCanAttack("unit", "unit")    - Могут ли два юнита атаковать друг друга

UnitClass("unit")   - Возвращает класс юнита

UnitExists("unit")    - Возвращает, существует ли юнит

UnitHealth("unit")   - Возвращает сколько здоровья у юнита

UnitHealthMax("unit")   - Возвращает какой максимум здоровья у юнита

UnitInParty("unit")    - находится ли юнит в вашей группе

UnitInRaid("unit")    - находится ли юнит в вашем рейде

UnitIsCivilian("unit")    - является ли цель мирным жителем (вроде, не проверял)

UnitIsCorpse("unit")    - возвращает труп ли цель

UnitIsDead("unit")    - возвращает мертва ли цель

UnitIsDeadOrGhost("unit")    - возвращает мертва ли цель или в режиме призрака (что после смерти наступает)

UnitIsEnemy("unit", "otherUnit")    - возвращает приходится ли два юнита врагами друг другу

UnitIsPlayer("unit")    - возвращает является ли юнит игроком

UnitIsPlusMob("unit")    - возвращает является ли юнит элитным

UnitIsTrivial("unit")    - является ли игрок низкоуровневым по отношению к вам.

UnitIsUnit("unit", "otherUnit")    - проверяет, являются ли первый юнит вторым (например, игрок – целью)

UnitLevel("unit")   - Возвращает уровень юнита

UnitMana("unit")   - Возвращает сколько маны (энергии или ярости) у юнита

UnitManaMax("unit")   - Возвращает какой максимум маны (энергии или ярости) у юнита

UnitName("unit")   - возвращает имя юнита

 

Часть 4. Разное.

 

PutItemInBackpack() – кинуть вещь, которая висит на курсоре, в сумку.

SetRaidTarget("unit", index)   - в пати и рейде – поставить знак на цель

Значения index:

0 = убрать иконку

1 = звезда

2 = сосок

3 = Purple Diamond

4 = треугольник

5 = луна

6 = квадрат

7 = Х

8 = Череп

Для инвентаря есть свои номера слотов.

406148735106678794.png/monthly_2018_11/406148735106678794.png.b3d387ad16a39f2ed3c7180ff05ad9cc.png" width="409">

start, duration, enable = GetInventoryItemCooldown("unit", invSlot) – узнать откат предмета инвентаря

GetInventoryItemLink("unit",invSlot) – узнать, что находится в инвентаре в определенном слоте.

Применяется так:

if string.find(GetInventoryItemLink("unit",16), "Dirk") then … end – если на 16 слоте – Dirk – сделать следующее…

 

Часть 5. Функции, которые предоставляет supermacro.

 

Бафы:

CancelBuff(buff )  (или unbuff()) – отменить баф с определенным именем

FindBuff(buff , [unit]) (или buffed()) – найти баф по имени (FindBuff(buff , “nil, 1)- на оружии)

 

Предметы:

/equip, /smequip, /eq, /smeq – одеть что-либо

/equipoff, /smequipoff, /eqoff, /smeqoff – одеть что-либо в левую руку

/unequip, /smunequip, /uneq, /smuneq – снять что-либо

 

FindItem(item) – найти предмет по названию

pickup("item") – взять предмет (курсором мыши)

use(bag,slot) (или use(item), /use, /smuse) – использовать предмет, можно использовать номер инвентарного слота или название (эта команда в том числе может продать предмет торговцу)

 

UseItemByName(item) – использовать предмет по названию

Printd(msg [,...]) – вывести сообщение в чат

 
 
Последнее редактирование модератором:

ohgodboyyes

Пользователь
Большинство (>95%) макросов написанных по этому гайду не будут работать на классических серверах WoW от Blizzard.

Впрочем как и большинство макросов с версии 1.12 2007 года.

Применимость всего вышеописанного для написания аддонов на актуальной версии Lua сомнительна.
 

Uswer

Moderator
Большинство (>95%) макросов написанных по этому гайду не будут работать на классических серверах WoW от Blizzard. 

Впрочем как и большинство макросов с версии 1.12 2007 года. 

Применимость всего вышеописанного для написания аддонов на актуальной версии Lua сомнительна. 
Но пока этого нету - данная статья может быть использована как шпаргалка. Лично я вот пользуюсь.
 
Последнее редактирование модератором:

Diatalis

Новый пользователь
Большинство (>95%) макросов написанных по этому гайду не будут работать на классических серверах WoW от Blizzard.

Впрочем как и большинство макросов с версии 1.12 2007 года.

Применимость всего вышеописанного для написания аддонов на актуальной версии Lua сомнительна.
А после стресс-теста появилась информация как оно все будет работать с макросами? Может оно будет как в актуальной версии вов, а-ля написал /каст *абилка* с условиями типа маусовер или все остальное и заработало? (А то вспоминать как пользовать старый lua такой некайф :D)
 

Uswer

Moderator
А после стресс-теста появилась информация как оно все будет работать с макросами? Может оно будет как в актуальной версии вов, а-ля написал /каст *абилка* с условиями типа маусовер или все остальное и заработало? (А то вспоминать как пользовать старый lua такой некайф :D)
Тоже интересно как будут работать макроса. Сам на стресс-тесте к сожалению не был, а другие уважаемые личности получившие доступ, видимо, не хотели заниматься тестированием. Если бы мне дали порулить персонажами на бете, я бы щас фантанировал информацией по разным направлениям. Не представляю свою игру без макросов и уже примерно к 40-50 уровню начинаю упираться в кап слотов под макросы. Благо на этом моменте начинают спасать аддоны.
 

Diatalis

Новый пользователь
Тоже интересно как будут работать макроса. Сам на стресс-тесте к сожалению не был, а другие уважаемые личности получившие доступ, видимо, не хотели заниматься тестированием. Если бы мне дали порулить персонажами на бете, я бы щас фантанировал информацией по разным направлениям. Не представляю свою игру без макросов и уже примерно к 40-50 уровню начинаю упираться в кап слотов под макросы. Благо на этом моменте начинают спасать аддоны.
Я заходил на стресс-тест на пару часов, смог выделить время, но я совершенно забыл про макросы, играл за вара, так что можно было на примере хероик страйка посмотреть что и как примерно.
Так что теперь я за этот фейл сижу и расплачиваюсь гнетущими мыслями xD
 

ohgodboyyes

Пользователь
Пока разбираюсь.

Пара фактов:

1. Как и предполагалось никакие действия, связанные с кастом скиллов или управлением петов невозможно прописывать через /run или /script

2. Добавлены модификаторы в квадратных скобках из Api bfa.

3. (Внезапно) некоторые скилы можно спамить
 
Последнее редактирование модератором:

Пиратика

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

lionet

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

Если на персонаже есть "Баф А", то кастуем "Спелл1"

Если нет этого бафа, то кастуем "Баф А".
 

ohgodboyyes

Пользователь
примеры добавь пожалуйста по 2 и 3 пункту
1. /cast [@mouseover] Charge

2.

/cast Battle Stance

/cast charge

Помогите, плиз, написать макрос для охотника, что бы одной кнопкой цель пета выбирать.
/target PetTarget

или /cast [@pettarget] skill 

Должно работать

Меня конкретно интересует вариант, который работал в Ваниле по следующему алгоритму:

Если на персонаже есть "Баф А", то кастуем "Спелл1"

Если нет этого бафа, то кастуем "Баф А".
Это всё работало изпод /run /script и невозможно. Все макросы завязанные на том, сколько у кого-то там хп, мп, бафов, как далеко стоят и т.д. не работают.
 

lionet

Пользователь
А по новым макросам гайд будет? Мне надо по маусоверу кастовать, но такой макрос не работает:

#showtooltip Flash of Light
/cast [@mouseover,nodead][@target,nodead][@player] Flash of Light




Пишет, что таргет не существует (если взят таргет).
 
Последнее редактирование модератором:

ohgodboyyes

Пользователь
А по новым макросам гайд будет? Мне надо по маусоверу кастовать, но такой макрос не работает:

#showtooltip Flash of Light
/cast [@mouseover,nodead][@target,nodead][@player] Flash of Light




Пишет, что таргет не существует (если взят таргет).
Да думаю как-нить время найду да.

Код:
[COLOR=#fefbec]#showtooltip Flash of Light
/cast [@mouseover,nodead, noharm]Flash of Light;[@target,nodead, noharm]Flash of Light;[@player] Flash of Light[/COLOR]
 

lionet

Пользователь
А зачем после каждого модификатора повторять название спелла?
 

lionet

Пользователь
А, так это можно разные скиллы навесить что ли? Прикольно. 
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу