Макросы в вов
Макросы в ВОВ применяются для оптимизации и упрощения интерфейса игрока. Начиная от наиболее простых макросов подобных как высказывание в чат "полечите мну срочно", когда ваше здоровье опускается ниже 20%, и заканчивая более сложными макросами такими как смена стоек у воина или каст лечащего заклинания во 2ую или 3ю строчку Эмерженси монитора, стандартного для большей части геймеров аддона - CT_raid. Итак начнем с общих макросов, и после перейдем к конкретным примерам.
Для просмотра макросов на данном персонаже, а так же для создания новых и редактирования уже имеющихся используется команда:
/macro
Она позволяет открыть окно менеджмента макросов. Всего у вас может оказаться 18 макросов общих для Аккаунта и 18 для конкретного персонажа, итого в сумме 36 макросов, что довольно немало.
Заклинания
Замечание: Начиная с патча 1.хх колдовство заклинаний более не требует конца в записи "(rank X)". Довольно записать: /cast Holy Light для колдовства спела максимального ранга. Макросы подобного типа не позволяют кастить спелы более низкого ранга на выбранную цель, для эксплуатации низких рангов требуется дописывать окончание (rank X), где Х - нужный ранг спела. Пример: /cast Holy Light (rank 1);
Колдовство заклинаний на наиболее себя без утраты фокуса на цели:
/script CASTSPELLBYNAME('Holy Light', 1)
Колдовство заклинаний на максимально себя если нельзя колдовать заклинание на выбранную цель:
Данный макрос кастует заклинание "spell" на максимально себя лишь в том случае если цель враждебна
/script if ( not UNITISFRIEND("player", "target") ) then CASTSPELLBYNAME("Spell", 1); end
Колдовство заклинаний на цель конкретного класса:
Используется в основном для баффов рейда, по конкретным классам, возможны модификации применительно к ПВП
/script class = UNITCLASS("target"); if ( ( class == "Rogue" ) or ( class == "Warrior" ) ) then
CASTSPELLBYNAME("Blessing of Might"); else CASTSPELLBYNAME("Blessing of Wisdom"); end
Колдовство заклинаний на цели различных уровней(баффы):
Используется весьма нечасто, однако я все-таки приведу пример пристовского макроса для баффа на стамину, с проверкой уровня цели:
/script Pre="Power Word: Fortitude(Rank " Sp={1,2,14,26,38,50} if (UNITLEVEL("target") ~= nil and UNITISFRIEND("player","target")) then
for i=6,1,-1 do if (UNITLEVEL("target") >= Sp[i]) then CASTSPELLBYNAME(Pre..i..")") return end end end
Колдовство заклинаний на ближайшую цели с проверкой кол-ва % здоровья цели:
Приведу пример на основе каста хилиерских заклинаний на ближайшие цели с проверкой на кол-во здоровья цели, макрос лечит ближайшую дружественную цель со здоровьем ниже 70%, проверяются лишь ближайшие 40 целей.
/script for i=1,40 do TARGETNEARESTFRIEND(); if UNITHEALTH("target")/UNITHEALTHMAX("target") < .7 then if UNITISPLAYER("target") then CASTSPELLBYNAME("Lesser Healing Wave") end end end; TARGETLASTENEMY();
Анонсирование кастуемых заклинаний в пати-чат:
/cast Healing Touch
/party Healing %t in 3.5 seconds
Колдовство заклинаний на определенных геймеров партии:
Постоянно лечит I-го игрока партии Флешкой, при том не сбивает фокуса на выделенной цели.
/script TARGETUNIT("party1")
/cast Flash Heal
/script TARGETLASTTARGET()
Колдовство некоторого количества заклинаний (баффов) с проверкой на наличие оных на цели:
Кастует разные баффы на цель, лишь в том случае если на цели еще нет подобного заклинания(баффа), пример версии для друида:
/script i=1;m=;while(UNITBUFF("target",i)~=nil) do if(strfind(UNITBUFF("target",i),"Regeneration")~=nil) then m=1; end;i=i+1;end; c=CASTSPELLBYNAME; if(m==1) then c("Mark of the Wild(Rank 10)");else c("Thorns(Rank 10)");end;
Макрос для поиска номера заклинания в книге умений:
Временами эксплуатации скриптов CASTSPELLBYNAME приводит к тому что длинна макроса превышает допустимые 255 символов, к примеру макрос: /script CASTSPELLBYNAME('Holy Light', 1) занимает довольно немало символов, когда как легче юзать макрос: /script CASTSPELLBYNUMBER(); Однако как же выяснить какой номер у какого-либо заклинания из вашей книги? На поддержка приходит весьма распространенный и полезный макрос проверки номера заклинания, он выдает на экран имя спела с соответствующим номером:
/script SPELLNUMBER=26; SPELLNAME,SPELLRANK=GETSPELLNAME(SPELLNUMBER,"spell");
M=format("Spell %d: %s %s",SPELLNUMBER,SPELLNAME,SPELLRANK); DEFAULT_CHAT_FRAME:ADDMESSAGE(M);
Инвентарь и Предметы
Юзать предмет:
/script USECONTAINERITEM(bag, slot);
*
Bag - номер сумки, от до 4, где - начальная сумка.
*
Slot - номер слота в сумке от 1 до 20.
Макрос автоматически использует предмет в заданной сумке на заданном месте, полезен при использовании алхимии или просто при переодевании тринкетов.
Быстрое применение Бинтов на наиболее себя:
/target [Player Name]
/script USECONTAINERITEM(#, #);
/script TARGETLASTENEMY();
Весьма полезный макрос для дуэлей 1v1. Вот еще 1 пример макроса для бинтов, более трудный, с проверкой на наличие бинтов в инвентаре, фокусировки на предыдущей цели или сбросе фокуса, если цель - вы сами:
/script if (not GETCONTAINERITEMLINK(x,x)) then OPENBAG([same bag number as before]); else
TARGETUNIT("player");USECONTAINERITEM(3,15);TARGETUNIT("playertarget");if (UNITISPLAYER("target"))
then CLEARTARGET() end end
Применение предмета из Хот-бара:
Приведу пример эксплуатации Бинтов лежащих в одном из слоте одного из шести хот-баров, макрос использует бинты на выбранную дружественную цели, или на максимально себя если цель враждебна:
/script USEACTION(ACTIONID, , 1);
/script if( SPELLISTARGETING() ) then SPELLTARGETUNIT("player"); end
*
ACTIONID - номер слота одного из шести хот-баров, он выбирается соответственно из таблицы:
Хот-бар: Номер слота
1: 1 2 3 4 5 6 7 8 9 10 11 12
2: 13 14 15 16 17 18 19 20 21 22 23 24
3: 25 26 27 28 29 30 31 32 33 34 35 36
4: 37 38 39 40 41 42 43 44 45 46 47 48
5: 49 50 51 52 53 54 55 56 57 58 59 60
6: 61 62 63 64 65 66 67 68 69 70 71 72
Более продвинутый вариант того же макроса, использует бинты на максимально себя так или иначе, даже если цель дружественна и располагается в радиусе действия, весьма полезен в ПВЕ:
/scriptp="player";t="target";if(not UNITCANATTACK(t, p))then ot=UNITNAME(t);TARGETUNIT(p);
else ot=nil;end;USEACTION(ACTIONID);if(SPELLISTARGETING())then SPELLTARGETUNIT(p);
end if(ot) then TARGETBYNAME(ot);end
Применение точильных камней на оружие:
Простой макрос сократит вам время
/script USECONTAINERITEM (#,#);
/script PICKUPINVENTORYITEM (16);
Меняя в последней строке 16 на 17 получим макросы для заточки левой и правой рук.
Интерфейс
Переключение Хот-баров:
/script CURRENT_ACTIONBAR_PAGE = X;
/script CHANGEACTIONBARPAGE();
*
Где X - номер нужного нам хот-бара, от 1 до 6.
Пример готового и усложненного макроса, выводом на экран сообщения о смене макроса:
/script CURRENT_ACTIONBAR_PAGE = 1;
/script CHANGEACTIONBARPAGE(); == Macro Frame Toggling ==
/script if ( not MACROFRAME:ISVISIBLE() ) then SHOWUIPANEL(MACROFRAME);
else HIDEUIPANEL(MACROFRAME); end;
Изменение видео опций
Порой хочется изменить видео опции игры, что бы комфортнее себя чувствовать в густо населенных игроками зонах, подобных как Банк или Аукцион, так же при огромной нагрузке в ПВЕ зонах, примером может служить I-я фаза Разоргора ( 1 босс БВЛ ):
Для хорошего качества видео:
/z SETFARCLIP(777)
/z SETWORLDDETAIL(2)
/z SETBASEMIP(1)
Для среднего качества видео:
/z SETFARCLIP(477)
/z SETWORLDDETAIL(1)
/z SETBASEMIP(1)
Для плохого качества видео:
/z SETFARCLIP(177)
/z SETWORLDDETAIL()
/z SETBASEMIP()
Переключение игры из Full-screen в Window режим:
Полезен для съемки видео или просто для удобной настройки посторонних программ:
/script Currentres = GETCURRENTRESOLUTION(); if (Currentres == 3)
then SETSCREENRESOLUTION(15); SETCVAR("Gxwindow", ); SETMULTISAMPLEFORMAT(16);
else SETCVAR("Gxwindow", 1); SETSCREENRESOLUTION(3); SETMULTISAMPLEFORMAT(1); end;
Числовые значения подобраны для переключения из разрешения 1600x1200 full anti-aliasing в разрешение 1024x768 1x anti-aliasing
Отключение имен игроков / npc:
Полезный макрос, для снятия нагрузки с экрана и любителям скриншотов
Для имен игроков:
/script if ( GETCVAR("UNITNAMEPLAYER") == "1" ) then SETCVAR("UNITNAMEPLAYER",) else SETCVAR("UNITNAMEPLAYER",1) end
Для имен npc:
/script if ( GETCVAR("UNITNAMENPC") == "1" ) then SETCVAR("UNITNAMENPC",) else SETCVAR("UNITNAMENPC",1) end
Окно чата
Автоматическая смена чата:
Макрос для автоматической смены м/у чатам /s если вы вне партии, /p если вы в партии на 5 человек, /raid если вы находитесь в рейде, макрос лишь устанавливает чат, однако не пишет сообщения:
/script if (GETNUMRAIDMEMBERS() > ) then PR = "Raid"; elseif (GETNUMPARTYMEMBERS() > )
then PR = "Party"; else PR = "Say"; end;
Для того что бы автоматически написать какую или фразу в выбранный чат, добавьте строку:
/script SENDCHATMESSAGE("Ты Gijdalah новичок и ничего не понимаешь!!!",PR);
Бой
Макросы для поддержки танку:
Наиболее простой макрос для атаки цели которую атакует выбранный заблаговременно танк:
/assist %t
/script ATTACKTARGET();
Этот макрос чересчур простой и не может покрыть всего того функционала который необходим чаще всего в с большой скоростью протекающем бое, попробуем сделать более трудный вариант макроса, разделив при том часть автоматической выборки подходящего танка, и часть фокуса на цели выбранного танка:
---- Для выбора танка ----
/script LEADERPLAYERNAME = UNITNAME("target") or UNITNAME("party1") or "";
/script DEFAULT_CHAT_FRAME:ADDMESSAGE("######## Set main assist to: " .. LEADERPLAYERNAME);
---- Для атаки цели танка ----
/script ASSISTBYNAME(LEADERPLAYERNAME or UNITNAME("party1") or UNITNAME("player"));
/script DEFAULT_CHAT_FRAME:ADDMESSAGE("######## Assisting ".. LEADERPLAYERNAME .. " with target " .. (UNITNAME("target") or "NO TARGET"));
При использовании I-го макроса, в памяти интерфейса запоминается псевдоним выбранного игрока, что бы при нажатии II-го макроса, выбиралась цель раньше запомненного танка, не зависимо от того где он располагается, не требуется юзать I макрос всегда, лишь 1 раз для начальной установки танка.
Однако это 2 макроса, они будут занимать 2 слота на вашем интерфейсе, впрочем они и весьма удобные. Попробуем совместить оба макроса в 1 не потеряв при том функциональности. Макрос будет выглядеть так:
/script p=PASI or""u=UNITNAME;t="target"c=ISCONTROLKEYDOWN()if(c)then p=u(t)or u("party1")or""else ASSISTBYNAME(p)end;DEFAULT_CHAT_FRAME:ADDMESSAGE("######## "..(c and("Set assist: "..p)or("Assisting "..p.." with "..(u(t)or"NO TARGET"))))PASI=p
Тот же макрос в более удобном для чтения виде, потому как выше приведенный, не читаем из за оптимизации под длину в 255 символов:
/script
p=PASI or"";
u=UNITNAME;
t="target";
c=ISCONTROLKEYDOWN();
if(c) then
p=u(t) or u("party1") or ""
else
ASSISTBYNAME(p)
end;
DEFAULT_CHAT_FRAME:ADDMESSAGE("######## "..
(c and
("Set assist: "..p)
or
("Assisting "..p.." with "..(u(t) or "NO TARGET"))));
PASI=p;
Итак, как же пользоваться этим макросом:
Для установки нужного танка, удерживая Ctrl кликните на иконку эксплуатации макроса.
Обыкновенный клик на иконку эксплуатации макроса выберет необходимую цель.
Модификация этого макроса с возможностью колдовства различных заклинаний на цель выбранного танка (выбрано заклинание Полиморф, что может оказаться заменено на каждое иное):
/script t=Tg1 or""c=ISCONTROLKEYDOWN()if(c)then t=UNITNAME("target")or""else TARGETBYNAME(t)if(ISSHIFTKEYDOWN())then CASTSPELLBYNAME('Polymorph')end end CHATFRAME1:ADDMESSAGE("######## "..(c and("Tg1 set to: "..t)or("Targeting: "..t)))Tg1=t
Тот же макрос в удобном виде:
/script
t=Tg1 or""
c=ISCONTROLKEYDOWN()
if(c) then
t=UNITNAME("target")or""
else
TARGETBYNAME(t)
if(ISSHIFTKEYDOWN()) then
CASTSPELLBYNAME('Polymorph')
end
end
DEFAULT_CHAT_FRAME:ADDMESSAGE("######## "..
(c and
("Tg1 set to: "..t)
or
("Targeting: "..t)))
Tg1=t
Итак, как же пользоваться этим макросом:
Для установки нужного танка, удерживая Ctrl кликните на иконку эксплуатации макроса.
Обыкновенный клик на иконку эксплуатации макроса выберет необходимую цель.
Если удерживая Shift кликнуть на иконку эксплуатации макроса, то персонаж начнет колдовать выбранное заклинание (полиморф) на текущую цель выбранного раньше танка.
Макросы для уничтожения тотемов:
Простейший вариант:
/target Totem
/cast Moonfire(Rank 1)
Более трудный вариант:
/script u=UNITNAME;
s=strfind;
t="target";
for i = 1,10,1 do TARGETNEARESTENEMY()
if (not UNITCANATTACK("player",t))then
break;
end;
if ((s(u(t),"Totem") or s(u(t),"Ward")) and not s(UNITCREATURETYPE(t),"Human")) then
CASTSPELLBYNAME("Shoot");
break;
end;
end;
Таймер:
/script if ISALTKEYDOWN() then L1="Instance Start"; T1=GETTIME();
M=format("Timer Set [%s]",L1); else N=GETTIME(); D=N-T1;
M=format("Time Elapsed - [%s]: %02dh:%02dm:%02ds",L1, D/3600,mod((D/60),60), mod(D,60)); end
SENDCHATMESSAGE(M,"SAY");
Макрос отсчитывает время с момента установки начального времени отсчета, что бы установить оное, требуется зажав Alt кликнуть на иконку эксплуатации макроса. При использовании макроса, выдается искомое время с точностью до сек..
Макросы для петов
Атака петом:
Простой макрос атаки пета по выбранной цели
/script PETATTACK();
Более продвинутый вариант:
/target player
/assist
/script PETATTACK();
Атака специальным заклинанием пета (к примеру Dash):
/script PETATTACK(); CASTPETACTION(4);
Команды для пета:
Перечень всех команд пету
/script PETAGGRESSIVEMODE();
/script PETDEFENSIVEMODE();
/script PETPASSIVEMODE();
/script PETFOLLOW();
/script PETATTACK();
/script PETSTOPATTACK();
/script CASTPETACTION(X);
*
Для последней строки, X - номер заклинания пета в панели управления петом.
Примеры классовых макросов
Просто перечислю кое-какие примеры оригинальных макросов для каждого класса.
Друид:
Nature's Swiftness + Healing Touch - без глобального кулдауна:
/cast Nature's Swiftness
/script SPELLSTOPCASTING();
/cast Healing Touch(Rank 10)
/script if ( SPELLISTARGETING() ) then SPELLTARGETUNIT ("player"); end
Хантер:
Выбор ближайшей цели, если цель рога - выстрел Scatter Shot:
/script TARGETNEARESTENEMY(); if (UNITCLASS("target")=="rogue") then CASTSPELLBYNAME("Scatter Shot"); CASTSPELLBYNAME("Hunter's
Mark (Rank 4)");end
Raptor strike + Wing clip:
/cast Raptor Strike
/cast Wing Clip
Макрос для Пула с одновременной привязкой марки к цели:
/cast Hunters Mark(Rank #);
/cast Concussive Shot();
/cast Autoshoot();
Автоматическое кормление пета:
/cast Feed Pet
/script PICKUPCONTAINERITEM (#,#)
Маг:
Макрос для вызова всех типов мана-кристалов, требует многочисленного нажатия:
/script local c=function(a) local f,d a="Mana "..a for i=,4 do for k=1,GETCONTAINERNUMSLOTS(i) do
d=GETCONTAINERITEMLINK(i,k) or "" if strfind(d,a) then f = 1 end end end if not f then CASTSPELLBYNAME("Conjure "..a) end end
c "Ruby" c "Citrine" c "Jade"
Колдовство заклинаний с использованием тринкетов / ПОМА, как мы знаем ТОЕП не стекается с ЗХЧ после патча 1.10, однако макрос все же весьма полезен, приведу пример ЗХЧ + ПОМ + фростболт 11 ранга:
/script USEACTION(37); SPELLSTOPCASTING(); CASTSPELL(82,"spells"); SPELLSTOPCASTING(); CASTSPELL(158,"spells"
Макрос отправляющий висперы, о прекращении атаки игрокам партии, монстра которого вы хотите полиморфить:
/cast Polymorph
/script local n,p,t=UNITNAME,"party","target" for i=2,5 do if n(p..i) then if
UNITISUNIT(p..i..t,t) then SENDCHATMESSAGE("I am about to sheep your target, please change
targets.","WHISPER",nil,n(p..i)) end end end
Паладин:
Авто-бафф дружественных целей использующих Ману - Wisdom Blessing и прочих, включая себя - Might Blessing:
/script power = UNITPOWERTYPE("target"); if ( power == ) then CASTSPELLBYNAME("Blessing of Wisdom") else CASTSPELLBYNAME("Blessing of Might") end; if ( SPELLISTARGETING() ) then CASTSPELLBYNAME("Blessing of Might"); TARGETUNIT("player"); end;
Рога:
Макрос для рог которые применяют Sinister Strike как основную атаку, макрос использует Riposte, если вероятно:
/script if (UNITMANA("Player")>=999) then CASTSPELLBYNAME("Sinister Strike"); end;if (ISUSABLEACTION(18) and UNITMANA("Player")>=10) then CASTSPELLBYNAME("Riposte"); end;
/script if UNITMANA("Player")>=40 then CASTSPELLBYNAME("Sinister Strike"); end;
Шаман:
Nature Swiftness + healing
/script local a=ISALTKEYDOWN();local c,d=GETSPELLCOOLDOWN(157,);if(c==)then CASTSPELL(157,) else if(a)then TARGETUNIT("player")
end;if(d==.001)then CASTSPELL(146,) else CASTSPELL(152,) end;if(a)then TARGETLASTTARGET() end;end
Макрос делает следующее:
*
если Nature Swiftness не на кулдавне, кастует его.
*
если на вас активен Nature Swiftness, кастует Healing Wave 9 rank на выбранную цель
*
во всех прочих ситуациях кастует Lesser healing wave rank 6 на выбранную цель.
Макрос анонса тотемов в пати-чат:
/party +88 agility totem, 30 yards, stay close
/cast Grace of Air
Stormstrike + тринкет:
/script USEINVENTORYITEM(14);
/script SPELLSTOPCASTING();
/cast Stormstrike(Rank 1)
Варлок:
Колдовство страха и одновременное отключение атаки пета:
/cast Fear(Rank #)
/script PETFOLLOW();
Воин:
Battle stance -> Mocking blow:
/script texture,name,Isactive,Iscastable = GETSHAPESHIFTFORMINFO(1); if Isactive then CASTSPELLBYNAME("Mocking Blow()"); else CASTSPELLBYNAME("Battle Stance()"); end;
Требуется min 2 нажатия.
Defensive stance -> Taunt:
/script texture,name,Isactive,Iscastable = GETSHAPESHIFTFORMINFO(2); if Isactive then CASTSPELLBYNAME("Taunt()"); else CASTSPELLBYNAME("Defensive Stance()"); end;
Требуется min 2 нажатия.
Berserker stance -> Berserker rage
/script texture,name,Isactive,Iscastable = GETSHAPESHIFTFORMINFO(3); if Isactive then CASTSPELLBYNAME("Berserker Rage()"); else CASTSPELLBYNAME("Berserker Stance()"); end;
Требуется min 2 нажатия.
Прочие макросы
Серверное время:
Макрос выдает на экран, серверное время
/script hour,min=GETGAMETIME()
/script DEFAULT_CHAT_FRAME:ADDMESSAGE(format("Server time is %s:%s",hour,min));
Координаты и локация:
/script px,py=GETPLAYERMAPPOSITION("player")
/script DEFAULT_CHAT_FRAME:ADDMESSAGE(format("[ %s ] %s , %s",GETZONETEXT(),px,py));
Макрос печатающий цели квеста в пати-чат:
/script i = GETNUMQUESTLEADERBOARDS(); for j = 1, i, 1 do a1, a2, a3 = GETQUESTLOGLEADERBOARD(j); SENDCHATMESSSAGE(a1, "PARTY"); end;
Макрос автоматической сдачи квеста неограниченное кол-во раз:
/script SELECTGOSSIPAVAILABLEQUEST(1); COMPLETEQUEST(); GETQUESTREWARD();
Макрос нередко применяют для неоднократного исполнения квеста - Dark Iron Residue
Макрос лечения 2 строки Эмерженси монитора, аддона CT_raid:
Весьма полезный для любого лекаря макрос, спам которого позволяет сократить оверхил, и четко и с высокой скоростью реагировать на повреждения рейда
/script CT_RA_Emergency_TARGETMEMBER(1)
/script CT_RA_Emergency_TARGETMEMBER(2)
/cast Lesser Healing Wave(Rank 6);
/script TARGETLASTTARGET();
Макрос подбирает 2 строчку монитора, если подобный нет, то I-ю, и кастует на цель Lesser healing wave rank 6.
Заключение
Макросы экстремально полезны для вашей боеспособности или оптимизации игры, потому как реакция человека не совершенна, макросы позволяют нам сократить кол-во действий необходимых для исполнения тех или других необходимостей как в рейдах так и в ПВП.
P.S не забывайте, что многообразие макросов ограничено лишь вашей фантазией и длинной в 255 символов.