Требование: PHP => 5.3, часть 2
[cswowd.git] / module / faq / macro.html
blob8ac3df24b43d1ce4c2fcff6da99909cfb216f3e6
1 <h3>Руководство по макросам</h3>
2 <br>
3 <table class=faqctrl>
4 <tr valign="top">
5 <td width="10px">&nbsp;</td>
6 <td>
7 <LI><a href="#1">Общая информация</a></LI>
8 <LI><a href="#2">Заклинания</a></LI>
9 <LI><a href="#3">Инвентарь и Предметы</a></LI>
10 <LI><a href="#4">Интерфейс</a></LI>
11 <LI><a href="#5">Изменение видео опций</a></LI>
12 <LI><a href="#6">Окно чата</a></LI>
13 <LI><a href="#7">Бой</a></LI>
14 <LI><a href="#8">Макросы для петов</a></LI>
15 <LI><a href="#9">Примеры классовых макросов</a></LI>
16 <LI><a href="#10">Прочие макросы</a></LI>
17 <LI><a href="#11">Заключение</a></LI>
18 </td>
19 </tr>
20 </table>
21 <br>
23 <h4 name="1">Общая информация</h4>
24 <P>Макросы в ВоВ используются для оптимизации и упрощения интерфейса игрока.
25 Начиная от самых простых макросов таких как высказывание в чат «полечите меня
26 срочно», когда ваше здоровье опускается ниже 20%, и заканчивая более сложными
27 макросами такими как смена стоек у воина или каст лечащего заклинания во 2ую или
28 3ю строчку Эмерженси монитора, стандартного для большинства игроков аддона –
29 CT_raid. Итак начнем с общих макросов, и затем перейдем к конкретным примерам.</P>
30 <P>Для просмотра макросов на данном персонаже, а так же для
31 создания новых и редактирования уже имеющихся используется команда:</P>
32 <P><EM><STRONG>/macro</STRONG></EM></P>
33 <P>Она позволяет открыть окно менеджмента макросов. Всего у вас
34 может быть 18 макросов общих для Аккаунта и 18 для конкретного персонажа, итого
35 в сумме 36 макросов, что достаточно много.</p>
36 <br>
38 <h4 name="2">Заклинания</h4>
39 <P><STRONG>Замечание:</STRONG> Начиная с патча 1.хх колдовство заклинаний больше не требует
40 окончания в записи “(rank X)”. Достаточно записать: <EM><STRONG>/cast Holy
41 Light</STRONG></EM> для колдовства спела максимального ранга. Макросы такого
42 типа не позволяют кастить спелы более низкого ранга на выбранную цель, для
43 использования низких рангов нужно дописывать окончание (rank X), где Х – нужный
44 ранг спела. Пример:<STRONG><EM> /cast Holy Light (rank 1);</EM></STRONG></P>
46 <P><STRONG>Колдовство заклинаний на самого себя без потери фокуса на цели:</STRONG></P>
47 <P><STRONG><EM>/script CastSpellByName('Holy Light', 1)</EM></STRONG></P>
48 <P><STRONG>Колдовство заклинаний на самого себя если нельзя колдовать заклинание на выбранную цель:</STRONG><BR>
49 Данный макрос кастует заклинание “spell” на самого себя только в том случае если цель враждебна </P>
50 <P><STRONG><EM>/script if ( not UnitIsFriend("player", "target") ) then CastSpellByName("Spell", 1); end</EM></STRONG></P>
52 <P><STRONG>Колдовство заклинаний на цель конкретного класса:</STRONG><BR>
53 Используется в основном для баффов рейда, по конкретным
54 классам, возможны модификации применительно к ПвП</P>
55 <P><STRONG><EM>/script class = UnitClass("target"); if ( ( class
56 == "Rogue" ) or ( class == "Warrior" ) ) then</EM></STRONG></P>
57 <P><STRONG><EM>CastSpellByName("Blessing of Might"); else
58 CastSpellByName("Blessing of Wisdom"); end</EM></STRONG></P><EM>
59 <P><BR></EM><STRONG>Колдовство заклинаний на цели разных
60 уровней(баффы):</STRONG><BR>
61 Используется очень редко, но я все же приведу пример
62 пристовского макроса для баффа на стамину, с проверкой уровня цели:</P>
64 <P><STRONG><EM>/script Pre="Power Word: Fortitude(Rank "
65 Sp={1,2,14,26,38,50} if (UnitLevel("target") ~= nil and
66 UnitIsFriend("player","target")) then</EM></STRONG></P>
67 <P><STRONG><EM>for i=6,1,-1 do if (UnitLevel("target") &gt;=
68 Sp[i]) then CastSpellByName(Pre..i..")") return end end
69 end</EM></STRONG></P><EM>
70 <P><BR></EM><STRONG>Колдовство заклинаний на ближайшую цели с
71 проверкой кол-ва % здоровья цели:<BR></STRONG>Приведу пример на основе каста
72 хилиерских заклинаний на ближайшие цели с проверкой на кол-во здоровья цели,
73 макрос лечит ближайшую дружественную цель со здоровьем ниже 70%, проверяются
74 только ближайшие 40 целей.</P>
75 <P><STRONG><EM>/script for i=1,40 do TargetNearestFriend(); if
76 UnitHealth("target")/UnitHealthMax("target") &lt; 0.7 then if
77 UnitIsPlayer("target") then CastSpellByName("Lesser Healing Wave") end end end;
78 TargetLastEnemy();</EM></STRONG></P><EM>
79 <P><BR></EM><STRONG>Анонсирование кастуемых заклинаний в
80 пати-чат:</STRONG></P>
81 <P><STRONG><EM>/cast Healing Touch</EM></STRONG></P>
82 <P><STRONG><EM>/party Healing %t in 3.5
83 seconds</EM></STRONG></P><EM>
85 <P><BR></EM><STRONG>Колдовство заклинаний на конкретных игроков
86 партии:<BR></STRONG>Всегда лечит первого игрока партии Флешкой, при этом не
87 сбивает фокуса на выделенной цели.</P>
88 <P><STRONG><EM>/script TargetUnit("party1")</EM></STRONG></P>
89 <P><STRONG><EM>/cast Flash Heal</EM></STRONG></P>
90 <P><STRONG><EM>/script TargetLastTarget()</EM></STRONG></P>
91 <P><STRONG><BR>Колдовство нескольких заклинаний (баффов) с
92 проверкой на наличие оных на цели:</STRONG><BR>Кастует различные баффы на цель,
93 только в том случае если на цели еще нет такого заклинания(баффа), пример версии
94 для друида:</P>
95 <P><STRONG><EM>/script i=1;m=0;while(UnitBuff("target",i)~=nil) do
96 if(strfind(UnitBuff("target",i),"Regeneration")~=nil) then m=1; end;i=i+1;end;
97 c=CastSpellByName; if(m==1) then c("Mark of the Wild(Rank 10)");else
98 c("Thorns(Rank 10)");end;</EM></STRONG></P><EM>
99 <P><BR></EM><STRONG>Макрос для поиска номера заклинания в книге
100 умений:<BR></STRONG>Иногда использования скриптов CastSpellByName приводит к
101 тому что длинна макроса превышает допустимые 255 символов, например макрос:
102 /script CastSpellByName('Holy Light', 1) занимает достаточно много символов,
103 когда как проще использовать макрос: /script CastSpellByNumber(); Но как же
104 узнать какой номер у того или иного заклинания из вашей книги? На помощь
105 приходит очень полезный и распространенный макрос проверки номера заклинания, он
106 выдает на экран имя спела с соответствующим номером:</P>
108 <P><STRONG><EM>/script SpellNumber=26;
109 SpellName,SpellRank=GetSpellName(SpellNumber,"spell");</EM></STRONG></P>
110 <P><STRONG><EM>M=format("Spell %d: %s
111 %s",SpellNumber,SpellName,SpellRank);
112 DEFAULT_CHAT_FRAME:AddMessage(M);</EM></STRONG></P>
113 <br>
115 <h4 name="3">Инвентарь и Предметы</h4>
117 <P><STRONG>Использовать предмет:</STRONG></P>
118 <P><STRONG><EM>/script UseContainerItem(bag, slot);</EM></STRONG></P>
120 <UL>
121 <LI><STRONG>Bag</STRONG> – это номер сумки, от 0 до 4, где 0 – начальная сумка.</LI>
122 </UL>
124 <UL>
125 <LI><STRONG>Slot</STRONG> – это номер слота в сумке от 1 до 20.</LI>
126 </UL>
128 <P>Макрос автоматически использует предмет в заданной сумке на
129 заданном месте, полезен при использовании алхимии или просто при переодевании
130 тринкетов.</P>
131 <P><BR><STRONG>Быстрое использование Бинтов на самого
132 себя:</STRONG> </P>
134 <P><STRONG><EM>/target [Player Name]</EM></STRONG></P>
135 <P><STRONG><EM></EM></STRONG></P>
136 <P><STRONG><EM>/script UseContainerItem(#, #);</EM></STRONG></P>
137 <P><STRONG><EM></EM></STRONG></P>
138 <P><STRONG><EM>/script TargetLastEnemy();</EM></STRONG> </P>
140 <P>Очень полезный макрос для дуэлей 1v1. Вот еще один пример
141 макроса для бинтов, более сложный, с проверкой на наличие бинтов в инвентаре,
142 фокусировки на предыдущей цели или сбросе фокуса, если цель – вы сами: </P>
144 <P><STRONG><EM>/script if (not GetContainerItemLink(x,x)) then
145 OpenBag([same bag number as before]); else</EM></STRONG></P>
146 <P><STRONG><EM></EM></STRONG></P>
147 <P align=justify><STRONG><EM>TargetUnit("player");UseContainerItem(3,15);TargetUnit("playertarget");if
148 (UnitIsPlayer("target"))</EM></STRONG></P>
149 <P><STRONG><EM></EM></STRONG></P>
150 <P><STRONG><EM>then ClearTarget() end end</EM></STRONG>
151 </P>
152 <P><BR><STRONG>Использование предмета из
153 Хот-бара:<BR></STRONG>Приведу пример использования Бинтов лежащих в одном из
154 слоте одного из шести хот-баров, макрос использует бинты на выбранную
155 дружественную цели, или на самого себя если цель враждебна: </P>
157 <P><STRONG><EM>/script UseAction(ActionID, 0, 1);
158 </EM></STRONG></P>
159 <P><STRONG><EM></EM></STRONG></P>
160 <P><STRONG><EM>/script if( SpellIsTargeting() ) then
161 SpellTargetUnit("player"); end</EM></STRONG> </P>
163 <UL>
164 <LI>
165 <DIV><STRONG>ActionID</STRONG> – это номер слота одного из шести
166 хот-баров, он выбирается соответственно из таблицы: </LI></UL>
168 <P><STRONG>Хот-бар: Номер слота</STRONG><BR>
169 1: 1 2 3 4 5 6 7 8 9 10 11 12<BR>
170 2: 13 14 15 16 17 18 19 20 21 22 23 24<BR>
171 3: 25 26 27 28 29 30 31 32 33 34 35 36<BR>
172 4: 37 38 39 40 41 42 43 44 45 46 47 48<BR>
173 5: 49 50 51 52 53 54 55 56 57 58 59 60<BR>
174 6: 61 62 63 64 65 66 67 68 69 70 71 72</P>
176 <P>Более продвинутый вариант того же макроса, использует бинты на
177 самого себя в любом случае, даже если цель дружественна и находится в радиусе
178 действия, очень полезен в ПвЕ:</P>
179 <P><STRONG><EM> /scriptp="player";t="target";if(not
180 UnitCanAttack(t, p))then ot=UnitName(t);TargetUnit(p);</EM></STRONG></P>
181 <P><STRONG><EM>else
182 ot=nil;end;UseAction(ActionID);if(SpellIsTargeting())then
183 SpellTargetUnit(p);</EM></STRONG></P>
184 <P><STRONG><EM>end if(ot) then TargetByName(ot);end</EM></STRONG>
185 </P><EM>
186 <P><BR></EM><STRONG>Использование точильных камней на
187 оружие:</STRONG><BR>
188 Простой макрос сократит вам время</P>
189 <P><STRONG><EM>/script UseContainerItem (#,#);</EM></STRONG></P>
190 <P><STRONG><EM>/script PickupInventoryItem (16);</EM></STRONG></P>
192 <P>Меняя в последней строке 16 на 17 получим макросы для заточки
193 правой и левой рук. </P>
194 <br>
196 <h4 name="4">Интерфейс</h4>
197 <P><STRONG>Переключение Хот-баров:</STRONG> </P>
198 <P><STRONG><EM>/script CURRENT_ACTIONBAR_PAGE =
199 X;</EM></STRONG></P>
201 <P><STRONG><EM></EM></STRONG></P>
202 <P><STRONG><EM>/script ChangeActionBarPage();</EM></STRONG></P>
203 <UL>
204 <LI>Где X – номер нужного нам хот-бара, от 1 до 6.</LI>
205 </UL>
206 <P><BR><STRONG>Пример готового и усложненного макроса, выводом на экран
207 сообщения о смене макроса:</STRONG></P>
208 <P><STRONG><EM>/script CURRENT_ACTIONBAR_PAGE = 1;</EM></STRONG></P>
209 <P><STRONG><EM></EM></STRONG></P>
210 <P><STRONG><EM>/script ChangeActionBarPage(); == Macro Frame
211 Toggling ==</EM></STRONG></P>
212 <P><STRONG><EM></EM></STRONG></P>
214 <P><STRONG><EM>/script if ( not MacroFrame:IsVisible() ) then
215 ShowUIPanel(MacroFrame); </EM></STRONG></P>
216 <P><STRONG><EM>else HideUIPanel(MacroFrame); end;</EM></STRONG>
218 <h4 name="5">Изменение видео опций</h4>
219 <P>Иногда хочется изменить видео опции игры, что бы комфортнее себя чувствовать
220 в густо населенных игроками зонах, таких как Банк или Аукцион, так же при
221 большой нагрузке в ПвЕ зонах, примером может служить первая фаза Разоргора ( 1
222 босс БВЛ ): </P>
224 <P><STRONG>Для хорошего качества видео:</STRONG></P>
225 <P><STRONG><EM>/z SetFarclip(777)</EM></STRONG></P>
226 <P><STRONG><EM></EM></STRONG></P>
227 <P><STRONG><EM>/z SetWorldDetail(2)</EM></STRONG></P>
228 <P><STRONG><EM></EM></STRONG></P>
229 <P><STRONG><EM>/z SetBaseMip(1)</EM></STRONG> </P>
231 <P><BR><STRONG>Для среднего качества видео:</STRONG></P>
232 <P><STRONG><EM>/z SetFarclip(477)</EM></STRONG></P>
233 <P><STRONG><EM></EM></STRONG></P>
234 <P><STRONG><EM>/z SetWorldDetail(1)</EM></STRONG></P>
235 <P><STRONG><EM></EM></STRONG></P>
236 <P><STRONG><EM>/z SetBaseMip(1)</EM></STRONG> </P>
238 <P><BR><STRONG>Для плохого качества видео:</STRONG></P>
239 <P><STRONG></STRONG></P>
240 <P><STRONG><EM>/z SetFarclip(177)</EM></STRONG></P>
241 <P><STRONG><EM></EM></STRONG></P>
242 <P><STRONG><EM>/z SetWorldDetail(0)</EM></STRONG></P>
244 <P><STRONG><EM></EM></STRONG></P>
245 <P><STRONG><EM>/z SetBaseMip(0)</EM></STRONG> </P>
247 <P><BR><STRONG>Переключение игры из Full-screen в Window
248 режим:<BR></STRONG>Полезен для съемки видео или просто для удобной настройки
249 посторонних программ: </P>
250 <P><STRONG><EM>/script currentRes = GetCurrentResolution(); if
251 (currentRes == 3)</EM></STRONG></P>
252 <P><STRONG><EM></EM></STRONG></P>
253 <P><STRONG><EM>then SetScreenResolution(15); SetCVar("gxWindow",
254 0); SetMultisampleFormat(16);</EM></STRONG></P>
255 <P><STRONG><EM></EM></STRONG></P>
256 <P><STRONG><EM>else SetCVar("gxWindow", 1);
257 SetScreenResolution(3); SetMultisampleFormat(1); end;</EM></STRONG></P>
259 <P>Числовые значения подобраны для переключения из разрешения
260 1600x1200 full anti-aliasing в разрешение 1024x768 1x anti-aliasing </P>
261 <P><BR><STRONG>Отключение имен игроков / npc:<BR></STRONG>Полезный
262 макрос, для снятия нагрузки с экрана и любителям скриншотов</P>
263 <P><STRONG><BR>Для имен игроков:</STRONG></P>
265 <P><STRONG><EM>/script if ( GetCVar("UnitNamePlayer") == "1" )
266 then SetCVar("UnitNamePlayer",0) else SetCVar("UnitNamePlayer",1)
267 end</EM></STRONG> </P>
269 <P><STRONG><BR>Для имен npc:</STRONG></P>
271 <P><STRONG><EM>/script if ( GetCVar("UnitNameNPC") == "1" ) then
272 SetCVar("UnitNameNPC",0) else SetCVar("UnitNameNPC",1) end</EM></STRONG></P>
274 <h4 name="6">Окно чата</h4>
275 <P><STRONG>Автоматическая смена чата:<BR></STRONG>Макрос для автоматической
276 смены между чатам /s если вы вне партии, /p если вы в партии на 5 человек, /raid
277 если вы находитесь в рейде, макрос только устанавливает чат, но не пишет
278 сообщения:</P>
279 <P><STRONG><EM>/script if (GetNumRaidMembers() &gt; 0) then PR = "Raid"; elseif (GetNumPartyMembers() &gt; 0) </EM></STRONG></P>
280 <P><STRONG><EM></EM></STRONG></P>
281 <P><STRONG><EM>then PR = "Party"; else PR = "Say"; end;</EM></STRONG> </P>
282 <P>Для того что бы автоматически написать какую либо фразу в
283 выбранный чат, добавьте строку: </P>
285 <P><STRONG><EM>/script SendChatMessage("Ты Gijdalah нуб и ничего
286 не понимаешь!!!",PR);</EM></STRONG><P>
288 <h4 name="7">Бой</h4>
289 <P><STRONG>Макросы для помощи танку:<BR></STRONG>Самый простой макрос для атаки
290 цели которую атакует выбранный заранее танк: </P>
292 <P><STRONG><EM>/assist %t </EM></STRONG></P>
293 <P><STRONG><EM></EM></STRONG></P>
294 <P><STRONG><EM>/script AttackTarget();</EM></STRONG> </P>
296 <P>Этот макрос слишком простой и не может покрыть всего того
297 функционала который необходим зачастую в быстро протекающем бое, попробуем
298 сделать более сложный вариант макроса, разделив при этом часть автоматической
299 выборки подходящего танка, и часть фокуса на цели выбранного танка: </P>
301 <P><STRONG>---- Для выбора танка ----</STRONG></P>
303 <P><STRONG><EM></EM></STRONG></P>
304 <P><STRONG><EM>/script LeaderPlayerName = UnitName("target") or UnitName("party1") or "";</EM></STRONG></P>
305 <P><STRONG><EM></EM></STRONG></P>
306 <P><STRONG><EM>/script DEFAULT_CHAT_FRAME:AddMessage("######## Set main assist to: " .. LeaderPlayerName); </EM></STRONG></P>
307 <P><STRONG><EM></EM></STRONG></P>
308 <P><STRONG>---- Для атаки цели танка ----</STRONG></P>
309 <P><STRONG><EM></EM></STRONG></P>
310 <P><STRONG><EM>/script AssistByName(LeaderPlayerName or UnitName("party1") or UnitName("player"));</EM></STRONG></P>
311 <P><STRONG><EM>/script DEFAULT_CHAT_FRAME:AddMessage("######## Assisting ".. LeaderPlayerName .. " with target " .. (UnitName("target") or "NO TARGET")); </EM></STRONG></P>
312 <P>При использовании первого макроса, в памяти интерфейса
313 запоминается ник выбранного игрока, что бы при нажатии второго макроса,
314 выбиралась цель ранее запомненного танка, не зависимо от того где он находится,
315 не нужно использовать первый макрос каждый раз, только один раз для начальной
316 установки танка.</P>
317 <P>Но это два макроса, они будут занимать два слота на вашем
318 интерфейсе, хотя они и очень удобные. Попробуем совместить оба макроса в один не
319 потеряв при этом функциональности. Макрос будет выглядеть следующим образом:
320 </P>
322 <P><STRONG><EM>/script p=PAsi
323 or""u=UnitName;t="target"c=IsControlKeyDown()if(c)then p=u(t)or
324 u("party1")or""else AssistByName(p)end;DEFAULT_CHAT_FRAME:AddMessage("########
325 "..(c and("Set assist: "..p)or("Assisting "..p.." with "..(u(t)or"NO
326 TARGET"))))PAsi=p</EM></STRONG> </P>
328 <P>Тот же макрос в более удобном для чтения виде, так как выше
329 приведенный, не читаем из за оптимизации под длину в 255 символов:</P>
331 <P><STRONG><EM>/script</EM></STRONG></P>
332 <P><STRONG><EM></EM></STRONG></P>
333 <P><STRONG><EM>p=PAsi or"";</EM></STRONG></P>
334 <P><STRONG><EM></EM></STRONG></P>
336 <P><STRONG><EM>u=UnitName;</EM></STRONG></P>
337 <P><STRONG><EM></EM></STRONG></P>
338 <P><STRONG><EM>t="target";</EM></STRONG></P>
339 <P><STRONG><EM></EM></STRONG></P>
340 <P><STRONG><EM>c=IsControlKeyDown(); </EM></STRONG></P>
341 <P><STRONG><EM></EM></STRONG></P>
342 <P><STRONG><EM>if(c) then</EM></STRONG></P>
343 <P><STRONG><EM></EM></STRONG></P>
344 <P><STRONG><EM>p=u(t) or u("party1") or ""</EM></STRONG></P>
345 <P><STRONG><EM></EM></STRONG></P>
346 <P><STRONG><EM>else</EM></STRONG></P>
348 <P><STRONG><EM></EM></STRONG></P>
349 <P><STRONG><EM>AssistByName(p)</EM></STRONG></P>
350 <P><STRONG><EM></EM></STRONG></P>
351 <P><STRONG><EM>end; </EM></STRONG></P>
352 <P><STRONG><EM></EM></STRONG></P>
353 <P><STRONG><EM>DEFAULT_CHAT_FRAME:AddMessage("########
354 "..</EM></STRONG></P>
355 <P><STRONG><EM></EM></STRONG></P>
356 <P><STRONG><EM>(c and</EM></STRONG></P>
357 <P><STRONG><EM></EM></STRONG></P>
358 <P><STRONG><EM>("Set assist: "..p)</EM></STRONG></P>
359 <P><STRONG><EM></EM></STRONG></P>
360 <P><STRONG><EM>or</EM></STRONG></P>
362 <P><STRONG><EM></EM></STRONG></P>
363 <P><STRONG><EM>("Assisting "..p.." with "..(u(t) or "NO
364 TARGET")))); </EM></STRONG></P>
365 <P><STRONG><EM></EM></STRONG></P>
366 <P><STRONG><EM>PAsi=p; </EM></STRONG></P>
368 <P>Итак, как же пользоваться этим макросом:</P>
369 <P>Для установки нужного танка, удерживая Ctrl кликните на иконку
370 использования макроса.</P>
371 <P>Обычный клик на иконку использования макроса выберет
372 необходимую цель. </P>
375 <P>Модификация этого макроса с возможностью колдовства разных
376 заклинаний на цель выбранного танка (выбрано заклинание Полиморф, что может быть
377 заменено на любое другое): </P>
379 <P><STRONG><EM>/script t=Tg1 or""c=IsControlKeyDown()if(c)then
380 t=UnitName("target")or""else TargetByName(t)if(IsShiftKeyDown())then
381 CastSpellByName('Polymorph')end end ChatFrame1:AddMessage("######## "..(c
382 and("Tg1 set to: "..t)or("Targeting: "..t)))Tg1=t</EM></STRONG> </P>
384 <P>Тот же макрос в удобном виде: </P>
386 <P><STRONG><EM>/script</EM></STRONG></P>
387 <P><STRONG><EM></EM></STRONG></P>
388 <P><STRONG><EM>t=Tg1 or""</EM></STRONG></P>
389 <P><STRONG><EM></EM></STRONG></P>
390 <P><STRONG><EM>c=IsControlKeyDown() </EM></STRONG></P>
391 <P><STRONG><EM></EM></STRONG></P>
393 <P><STRONG><EM>if(c) then</EM></STRONG></P>
394 <P><STRONG><EM></EM></STRONG></P>
395 <P><STRONG><EM>t=UnitName("target")or""</EM></STRONG></P>
396 <P><STRONG><EM></EM></STRONG></P>
397 <P><STRONG><EM>else</EM></STRONG></P>
398 <P><STRONG><EM></EM></STRONG></P>
399 <P><STRONG><EM>TargetByName(t) </EM></STRONG></P>
400 <P><STRONG><EM></EM></STRONG></P>
401 <P><STRONG><EM>if(IsShiftKeyDown()) then</EM></STRONG></P>
402 <P><STRONG><EM></EM></STRONG></P>
403 <P><STRONG><EM>CastSpellByName('Polymorph')</EM></STRONG></P>
405 <P><STRONG><EM></EM></STRONG></P>
406 <P><STRONG><EM>end</EM></STRONG></P>
407 <P><STRONG><EM></EM></STRONG></P>
408 <P><STRONG><EM>end </EM></STRONG></P>
409 <P><STRONG><EM></EM></STRONG></P>
410 <P><STRONG><EM>DEFAULT_CHAT_FRAME:AddMessage("########
411 "..</EM></STRONG></P>
412 <P><STRONG><EM></EM></STRONG></P>
413 <P><STRONG><EM>(c and</EM></STRONG></P>
414 <P><STRONG><EM></EM></STRONG></P>
415 <P><STRONG><EM>("Tg1 set to: "..t)</EM></STRONG></P>
416 <P><STRONG><EM></EM></STRONG></P>
417 <P><STRONG><EM>or</EM></STRONG></P>
419 <P><STRONG><EM></EM></STRONG></P>
420 <P><STRONG><EM>("Targeting: "..t))) </EM></STRONG></P>
421 <P><STRONG><EM></EM></STRONG></P>
422 <P><STRONG><EM>Tg1=t </EM></STRONG></P>
424 <P>Итак, как же пользоваться этим макросом:</P>
425 <P>Для установки нужного танка, удерживая Ctrl кликните на иконку
426 использования макроса.</P>
427 <P>Обычный клик на иконку использования макроса выберет
428 необходимую цель. </P>
429 <P>Если удерживая Shift кликнуть на иконку использования макроса,
430 то персонаж начнет колдовать выбранное заклинание (полиморф) на текущую цель
431 выбранного ранее танка.</P>
434 <P><BR><STRONG>Макросы для уничтожения
435 тотемов:<BR></STRONG>Простейший вариант: </P>
437 <P><STRONG><EM>/target Totem</EM></STRONG></P>
438 <P><STRONG><EM></EM></STRONG></P>
439 <P><STRONG><EM>/cast Moonfire(Rank 1) </EM></STRONG></P>
440 <P><STRONG><EM></EM></STRONG></P>
441 <P><STRONG><EM>Более сложный вариант: </EM></STRONG></P>
442 <P><STRONG><EM></EM></STRONG></P>
443 <P><STRONG><EM>/script u=UnitName;</EM></STRONG></P>
444 <P><STRONG><EM></EM></STRONG></P>
445 <P><STRONG><EM>s=strfind;</EM></STRONG></P>
447 <P><STRONG><EM></EM></STRONG></P>
448 <P><STRONG><EM>t="target";</EM></STRONG></P>
449 <P><STRONG><EM></EM></STRONG></P>
450 <P><STRONG><EM>for i = 1,10,1 do
451 TargetNearestEnemy()</EM></STRONG></P>
452 <P><STRONG><EM></EM></STRONG></P>
453 <P><STRONG><EM>if (not UnitCanAttack("player",t))then
454 </EM></STRONG></P>
455 <P><STRONG><EM></EM></STRONG></P>
456 <P><STRONG><EM>break;</EM></STRONG></P>
457 <P><STRONG><EM></EM></STRONG></P>
458 <P><STRONG><EM>end;</EM></STRONG></P>
459 <P><STRONG><EM></EM></STRONG></P>
460 <P><STRONG><EM>if ((s(u(t),"Totem") or s(u(t),"Ward")) and not s(UnitCreatureType(t),"Human")) then </EM></STRONG></P>
461 <P><STRONG><EM></EM></STRONG></P>
462 <P><STRONG><EM>CastSpellByName("Shoot");</EM></STRONG></P>
463 <P><STRONG><EM></EM></STRONG></P>
464 <P><STRONG><EM>break;</EM></STRONG></P>
465 <P><STRONG><EM></EM></STRONG></P>
466 <P><STRONG><EM>end;</EM></STRONG></P>
467 <P><STRONG><EM></EM></STRONG></P>
468 <P><STRONG><EM>end; </EM></STRONG></P>
470 <P><BR><STRONG>Таймер:</STRONG> </P>
472 <P><STRONG><EM>/script if IsAltKeyDown() then L1="Instance Start";
473 T1=GetTime(); </EM></STRONG></P>
474 <P><STRONG><EM></EM></STRONG></P>
475 <P><STRONG><EM>M=format("Timer Set [%s]",L1); else N=GetTime();
476 D=N-T1; </EM></STRONG></P>
477 <P><STRONG><EM></EM></STRONG></P>
478 <P><STRONG><EM>M=format("Time Elapsed - [%s]:
479 %02dh:%02dm:%02ds",L1, D/3600,mod((D/60),60), mod(D,60)); end</EM></STRONG></P>
480 <P><STRONG><EM></EM></STRONG></P>
481 <P><STRONG><EM>SendChatMessage(M,"SAY"); </EM></STRONG></P>
483 <P>Макрос отсчитывает время с момента установки начального времени
484 отсчета, что бы установить оное, нужно зажав Alt кликнуть на иконку
485 использования макроса. При использовании макроса, выдается искомое время с
486 точностью до секунды.<P>
487 <br>
490 <h4 name="8">Макросы для петов</h4>
491 <P><STRONG>Атака петом:<BR></STRONG>Простой макрос атаки пета по выбранной
492 цели</P>
494 <P><STRONG><EM>/script PetAttack(); </EM></STRONG></P>
495 <P><STRONG><EM></EM></STRONG></P>
496 <P><STRONG><EM>Более продвинутый вариант: </EM></STRONG></P>
497 <P><STRONG><EM></EM></STRONG></P>
498 <P><STRONG><EM>/target player</EM></STRONG></P>
499 <P><STRONG><EM></EM></STRONG></P>
500 <P><STRONG><EM>/assist</EM></STRONG></P>
501 <P><STRONG><EM></EM></STRONG></P>
502 <P><STRONG><EM>/script PetAttack();</EM></STRONG> </P>
503 <P><BR><STRONG>Атака специальным заклинанием пета (например Dash):</STRONG> </P>
504 <P><STRONG><EM>/script PetAttack(); CastPetAction(4);</EM></STRONG> </P>
505 <P><BR><STRONG>Команды для пета:<BR></STRONG>Список всех команд пету </P>
506 <P><STRONG><EM>/script PetAggressiveMode();</EM></STRONG></P>
507 <P><STRONG><EM></EM></STRONG></P>
508 <P><STRONG><EM>/script PetDefensiveMode();</EM></STRONG></P>
509 <P><STRONG><EM></EM></STRONG></P>
510 <P><STRONG><EM>/script PetPassiveMode();</EM></STRONG></P>
511 <P><STRONG><EM></EM></STRONG></P>
512 <P><STRONG><EM>/script PetFollow();</EM></STRONG></P>
513 <P><STRONG><EM></EM></STRONG></P>
515 <P><STRONG><EM>/script PetAttack();</EM></STRONG></P>
516 <P><STRONG><EM></EM></STRONG></P>
517 <P><STRONG><EM>/script PetStopAttack();</EM></STRONG></P>
518 <P><STRONG><EM></EM></STRONG></P>
519 <P><STRONG><EM>/script CastPetAction(X);</EM></STRONG> </P>
521 <UL>
522 <LI>Для последней строки, X – номер заклинания пета в панели управления петом.</LI></UL><P>
523 <br>
525 <h4 name="9">Примеры классовых макросов</h4>
526 <P>Просто перечислю некоторые примеры оригинальных макросов для каждого класса.</P>
528 <P><BR><STRONG>Друид:</STRONG> </P>
529 <P><STRONG>Nature's Swiftness + Healing Touch – без глобального кулдауна:</STRONG></P>
531 <P><STRONG><EM>/cast Nature's Swiftness</EM></STRONG></P>
532 <P><STRONG><EM></EM></STRONG></P>
533 <P><STRONG><EM>/script SpellStopCasting();</EM></STRONG></P>
534 <P><STRONG><EM></EM></STRONG></P>
535 <P><STRONG><EM>/cast Healing Touch(Rank 10)</EM></STRONG></P>
536 <P><STRONG><EM></EM></STRONG></P>
537 <P><STRONG><EM>/script if ( SpellIsTargeting() ) then
538 SpellTargetUnit ("player"); end</EM></STRONG> </P>
540 <P><BR><STRONG>Хантер:</STRONG> </P>
542 <P><STRONG>Выбор ближайшей цели, если цель рога – выстрел Scatter
543 Shot:</STRONG> </P>
545 <P><STRONG><EM>/script TargetNearestEnemy(); if
546 (UnitClass("target")=="rogue") then CastSpellByName("Scatter Shot");
547 CastSpellByName("Hunter's </EM></STRONG></P>
548 <P><STRONG><EM>Mark (Rank 4)");end </EM></STRONG></P>
549 <P><STRONG><EM></EM></STRONG></P>
550 <P><STRONG><EM>Raptor strike + Wing clip: </EM></STRONG></P>
551 <P><STRONG><EM></EM></STRONG></P>
552 <P><STRONG><EM>/cast Raptor Strike</EM></STRONG></P>
553 <P><STRONG><EM></EM></STRONG></P>
554 <P><STRONG><EM>/cast Wing Clip </EM></STRONG></P>
556 <P><BR><STRONG>Макрос для Пула с одновременной привязкой марки к
557 цели: </STRONG></P>
559 <P><STRONG><EM>/cast Hunters Mark(Rank #);</EM></STRONG></P>
560 <P><STRONG><EM></EM></STRONG></P>
561 <P><STRONG><EM>/cast Concussive Shot();</EM></STRONG></P>
562 <P><STRONG><EM></EM></STRONG></P>
563 <P><STRONG><EM>/cast Autoshoot(); </EM></STRONG></P>
564 <P><STRONG><EM></EM></STRONG></P>
565 <P><STRONG><BR>Автоматическое кормление пета: </STRONG></P>
566 <P><STRONG><EM></EM></STRONG></P>
567 <P><STRONG><EM>/cast Feed Pet</EM></STRONG></P>
569 <P><STRONG><EM></EM></STRONG></P>
570 <P><STRONG><EM>/script PickupContainerItem (#,#)</EM></STRONG>
571 </P>
573 <P><BR><STRONG>Маг:</STRONG> </P>
575 <P><STRONG>Макрос для вызова всех типов мана-кристалов, требует
576 многочисленного нажатия:</STRONG> </P>
578 <P><STRONG><EM>/script local c=function(a) local f,d a="Mana "..a
579 for i=0,4 do for k=1,GetContainerNumSlots(i) do</EM></STRONG></P>
580 <P><STRONG><EM></EM></STRONG></P>
581 <P><STRONG><EM>d=GetContainerItemLink(i,k) or "" if strfind(d,a)
582 then f = 1 end end end if not f then CastSpellByName("Conjure "..a) end
583 end</EM></STRONG></P>
585 <P>c "Ruby" c "Citrine" c "Jade" </P>
587 <P><BR><STRONG>Колдовство заклинаний с использованием тринкетов /
588 ПоМа, как мы знаем ТоеП не стекается с ЗХЧ после патча 1.10, но макрос все равно
589 очень полезен, приведу пример ЗХЧ + ПоМ + фростболт 11 ранга:</STRONG> </P>
591 <P><EM><STRONG>/script UseAction(37); SpellStopCasting();
592 CastSpell(82,"spells"); SpellStopCasting(); CastSpell(158,"spells"
593 </STRONG></EM></P>
595 <P><BR><STRONG>Макрос отправляющий висперы, о прекращении атаки
596 игрокам партии, монстра которого вы хотите полиморфить:</STRONG> </P>
598 <P><STRONG><EM>/cast Polymorph</EM></STRONG></P>
600 <P><STRONG><EM></EM></STRONG></P>
601 <P><STRONG><EM>/script local n,p,t=UnitName,"party","target" for
602 i=2,5 do if n(p..i) then if </EM></STRONG></P>
603 <P><STRONG><EM></EM></STRONG></P>
604 <P><STRONG><EM>UnitIsUnit(p..i..t,t) then SendChatMessage("I am
605 about to sheep your target, please change </EM></STRONG></P>
606 <P><STRONG><EM></EM></STRONG></P>
607 <P><STRONG><EM>targets.","WHISPER",nil,n(p..i)) end end end
608 </EM></STRONG></P>
610 <P><BR><STRONG>Паладин:</STRONG> </P>
612 <P><STRONG>Авто-бафф дружественных целей использующих Ману –
613 Wisdom Blessing и остальных, включая себя – Might Blessing:</STRONG> </P>
615 <P><STRONG><EM>/script power = UnitPowerType("target"); if ( power
616 == 0 ) then CastSpellByName("Blessing of Wisdom") else CastSpellByName("Blessing
617 of Might") end; if ( SpellIsTargeting() ) then CastSpellByName("Blessing of
618 Might"); TargetUnit("player"); end;</EM></STRONG></P>
619 <P><EM><BR></EM><STRONG>Рога:</STRONG></P>
621 <P><STRONG>Макрос для рог которые используют Sinister Strike как
622 основную атаку, макрос использует Riposte, если возможно</STRONG>: </P>
624 <P>/<STRONG><EM>script if (UnitMana("Player")&gt;=999) then
625 CastSpellByName("Sinister Strike"); end;if (IsUsableAction(18) and
626 UnitMana("Player")&gt;=10) then CastSpellByName("Riposte");
627 end;</EM></STRONG></P>
628 <P><STRONG><EM></EM></STRONG></P>
629 <P><STRONG><EM>/script if UnitMana("Player")&gt;=40 then
630 CastSpellByName("Sinister Strike"); end;</EM></STRONG> </P>
632 <P><BR><STRONG>Шаман:</STRONG></P>
634 <P><STRONG>Nature Swiftness + healing</STRONG></P>
636 <P><STRONG><EM>/script local a=IsAltKeyDown();local
637 c,d=GetSpellCooldown(157,0);if(c==0)then CastSpell(157,0) else if(a)then
638 TargetUnit("player") </EM></STRONG></P>
639 <P><STRONG><EM>end;if(d==0.001)then CastSpell(146,0) else
640 CastSpell(152,0) end;if(a)then TargetLastTarget() end;end </EM></STRONG></P>
642 <P>Макрос делает следующее:</P>
643 <UL>
644 <LI>если Nature Swiftness не на кулдавне, кастует его.</LI>
645 <LI>если на вас активен Nature Swiftness, кастует Healing Wave 9 rank на выбранную цель</LI>
646 <LI>во всех остальных случаях кастует Lesser healing wave rank 6 на выбранную цель.</LI>
647 </UL>
650 <P><BR><STRONG>Макрос анонса тотемов в пати-чат:</STRONG> </P>
651 <P><STRONG><EM>/party +88 agility totem, 30 yards, stay
652 close</EM></STRONG></P>
653 <P><STRONG><EM></EM></STRONG></P>
654 <P><STRONG><EM>/cast Grace of Air </EM></STRONG></P>
655 <P><STRONG><EM></EM></STRONG></P>
656 <P><STRONG><EM>Stormstrike + тринкет: </EM></STRONG></P>
657 <P><STRONG><EM></EM></STRONG></P>
658 <P><STRONG><EM>/script UseInventoryItem(14);</EM></STRONG></P>
659 <P><STRONG><EM></EM></STRONG></P>
660 <P><STRONG><EM>/script SpellStopCasting();</EM></STRONG></P>
661 <P><STRONG><EM></EM></STRONG></P>
662 <P><STRONG><EM>/cast Stormstrike(Rank 1) </EM></STRONG></P>
665 <P><BR><STRONG>Варлок:</STRONG></P>
667 <P><STRONG>Колдовство страха и одновременное отключение атаки
668 пета:</STRONG> </P>
670 <P><STRONG><EM>/cast Fear(Rank #)</EM></STRONG></P>
671 <P><STRONG><EM></EM></STRONG></P>
672 <P><STRONG><EM>/script PetFollow(); </EM></STRONG></P>
674 <P><BR>Воин: </P>
676 <P><STRONG>Battle stance -&gt; Mocking blow:</STRONG></P>
678 <P><STRONG><EM>/script texture,name,isActive,isCastable =
679 GetShapeshiftFormInfo(1); if isActive then CastSpellByName("Mocking Blow()");
680 else CastSpellByName("Battle Stance()"); end;</EM></STRONG></P>
682 <P>Требуется минимум 2 нажатия. </P>
684 <P><BR><STRONG>Defensive stance -&gt; Taunt:</STRONG></P>
686 <P><STRONG><EM>/script texture,name,isActive,isCastable =
687 GetShapeshiftFormInfo(2); if isActive then CastSpellByName("Taunt()"); else
688 CastSpellByName("Defensive Stance()"); end;</EM></STRONG> </P>
690 <P>Требуется минимум 2 нажатия. </P>
692 <P><BR><STRONG>Berserker stance -&gt; Berserker rage</STRONG> </P>
694 <P><STRONG><EM>/script texture,name,isActive,isCastable =
695 GetShapeshiftFormInfo(3); if isActive then CastSpellByName("Berserker Rage()");
696 else CastSpellByName("Berserker Stance()"); end;</EM></STRONG></P>
698 <P>Требуется минимум 2 нажатия.<P>
700 <br>
702 <h4 name="10">Прочие макросы</h4>
705 <P><STRONG>Серверное время:<BR></STRONG>Макрос выдает на экран, серверное время</P>
706 <P><STRONG><EM>/script hour,min=GetGameTime()</EM></STRONG></P>
707 <P><STRONG><EM></EM></STRONG></P>
709 <P><STRONG><EM>/script DEFAULT_CHAT_FRAME:AddMessage(format("Server time is %s:%s",hour,min));</EM></STRONG></P>
710 <P><STRONG><EM></EM></STRONG></P>
711 <P><STRONG><EM></EM></STRONG></P>
712 <P><STRONG><EM></EM></STRONG></P>
713 <P><STRONG><EM></EM></STRONG></P>
714 <P><STRONG><EM>Координаты и локация: </EM></STRONG></P>
715 <P><STRONG><EM></EM></STRONG></P>
716 <P><STRONG><EM>/script px,py=GetPlayerMapPosition("player")</EM></STRONG></P>
717 <P><STRONG><EM></EM></STRONG></P>
718 <P><STRONG><EM>/script DEFAULT_CHAT_FRAME:AddMessage(format("[ %s ] %s , %s",GetZoneText(),px,py));</EM></STRONG></P>
719 <P><EM><BR></EM><STRONG>Макрос печатающий цели квеста в пати-чат:</STRONG> </P>
720 <P><STRONG><EM>/script i = GetNumQuestLeaderBoards(); for j = 1, i, 1 do a1, a2, a3 = GetQuestLogLeaderBoard(j); SendChatMesssage(a1, "PARTY"); end; </EM></STRONG></P>
721 <P><STRONG>Макрос автоматической сдачи квеста неограниченное кол-во раз:</STRONG></P>
722 <P><STRONG><EM>/script SelectGossipAvailableQuest(1); CompleteQuest(); GetQuestReward(); </EM></STRONG></P>
724 <P>Макрос часто используют для неоднократного выполнения квеста – Dark Iron Residue </P>
725 <P><BR><STRONG>Макрос лечения 2 строки Эмерженси монитора, аддона
726 CT_raid:<BR></STRONG>Очень полезный для любого лекаря макрос, спам которого
727 позволяет сократить оверхил, и четко и быстро реагировать на повреждения
728 рейда</P>
730 <P><STRONG><EM>/script CT_RA_Emergency_TargetMember(1)</EM></STRONG></P>
731 <P><STRONG><EM></EM></STRONG></P>
732 <P><STRONG><EM>/script CT_RA_Emergency_TargetMember(2)</EM></STRONG></P>
733 <P><STRONG><EM></EM></STRONG></P>
734 <P><STRONG><EM>/cast Lesser Healing Wave(Rank 6);</EM></STRONG></P>
735 <P><STRONG><EM></EM></STRONG></P>
736 <P><STRONG><EM>/script TargetLastTarget(); </EM></STRONG></P>
738 <P>Макрос выбирает 2 строчку монитора, если такой нет, то первую,
739 и кастует на цель Lesser healing wave rank 6.<P>
740 <br>
742 <h4 name="11">Заключение</h4>
745 <P>Макросы экстремально полезны для вашей боеспособности или оптимизации игры,
746 так как реакция человека не совершенна, макросы позволяют нам сократить кол-во
747 действий необходимых для выполнения тех или иных необходимостей как в рейдах так
748 и в ПвП. </P>
750 <P>P.S не забывайте, что разнообразие макросов ограничено только
751 вашей фантазией и длинной в 255 символов.</P>
752 <P><BR>
753 <div class="copyright">Информация с сайта <a href="http://www.worldofwarcraft.ru">www.worldofwarcraft.ru</a>, Атор: <STRONG>Medivhru</STRONG></div></P>