Jak pisać i zrozumieć macro

Jak pisać i zrozumieć macro

Macra potrafią ułatwić grę na wiele sposobów. Dla zaawansowanych graczy macra to podstawa personalizacji i optymalizacji postaci, jednak dla wielu stanowią one nadal czarną magię i nie zawracają sobie nimi głowy.


Jeżeli jeszcze nie mieliście kontaktu z nawet najbardziej podstawowymi macro zapraszam do poradnika tutaj: Podstawy Pisania Macro.

Zanim przejdziemy do właściwej części poradnika, szybki tip.

Gdy piszemy macro najczęściej używamy domyślnej Ikony.
Taka ikona będzie się dynamicznie zmieniać pokazując jaka umiejętność zostanie użyta, lub przybierze postać czerwonego znaku zapytania, gdy kod macro nie użyje żadnej umiejętności.


Formułowanie logicznych zdań


Być może nie jest to zagadanienie którego się spodziewaliście na początek, jednak właśnie odpowiednio sformułowane, logiczne zadanie jest podstawą dobrego macro. Proszę więc o odrobinę cierpliwości.

Podstawowe zdanie używa umiejętności na wybranym celu jeżeli spełnione są założone warunki. Proste zdanie będzie się składać z CELU oraz WARUNKÓW oddzielonych od siebie spójnikami " i " (co oznacza, że wszystkie warunki muszą być spełnione).

Użyj REGROWTH na AKTUALNYM_CELU jeżeli JEST_PRZYJAZNY i TRZYMAMY_SHIFT.

Dlaczego ułożenie takiego zdania jest tak istotne ?
Przekłada się ono bezpośrednio na kod naszego macro.

/cast [target=target,help,mod:shift] Regrowth

W kwadratowych nawiasach [ ] mamy zdefiniowaną pojedynczą sekwencję określającą nasz cel oraz warunki które chcemy by były spełnione by użyć umiejętności. Jeżeli nie wszystkie warunki zostały spełnione, makro nie zrobi nic. Jeżeli nie trzymamy shift-a, lub nasz aktualny cel jest wrogi, użycie tak sforumuowanego macra nie spowoduje żadnej akcji.


Sekwencje alternatywnych warunków.
Tak zdefiniowanych zdań w kwadratowych nawiasach możemy użyć więcej, dzięki czemu uzyskujemy naprawdę sensowną użyteczność.

Użyj REGROWTH:
- na MNIE jeżeli TRZYMAM_SHIFT
LUB
- na CEL_WSKAZYWANY_KURSOREM jeżeli JEST_PRZYJAZNY
LUB
- na AKTUALNY_CEL jeżeli JEST_PRZYJAZNY

/cast [target=player, mod: shift] [target=mouseover, help] [target=target, help] Regrowth

Należy zwrócić uwagę, że umiejętność zostanie użyta na pierwszym celu, którego warunki zostały spełnione, a reszta zostanie zignorowana. Przykładowo, jeżeli fragment [target=player, mod:shift] został umieszczony na końcu, to nie zależnie czy wciskamy klawisz shift czy nie, jeżeli nasz mouseover lub target będą przyjazne nie uleczymy siebie, tylko jeden z nich.

Pusty, kwadratowy nawias zawsze spełnia warunek, zatem czar zachowa się tak, jakbyśmy używali go normalnie, czyli zostanie rzucony na cel, jeżeli jest przyjazny, a gdy nie mamy celu to podświetli się nam kursor byśmy mogli na kimś kliknąć.

/cast [target=mouseover, help] [ ] Regrowth


Wybieranie celów


We wprowadzeniu do macro pisałem o podstawej metodzie wyboru celu i użwyaniu umiejętności

/target mouseover
/cast counterspell

Powyższe polecenie zaznacza cel, a następnie używa na nim umiejętności. Podstawową wadą tej metody jest to, że macro zmienia nasz aktualny cel, co jest uciążliwe w używaniu, a czasem wręcz niedopuszczalne. Przykładowo, gdy walczymy na arenie, chcemy przerwać czar healera, jednak ciągle atakować główny cel.

W zaawansowanych macro używamy dlatego obierania celu tylko dla tej pojedynczej umiejętności.

/cast [target=mouseover,harm] Counterspell

W ten sposób nasz Counterspell zawsze interruptuje cel wskazywany przez kursor, nie zmieniając jednak naszego, zaznaczonego celu.

Rodzaje celów
W przykładach dotychczas użyłem dwóch celów; prayer (czyli postać gracza), target oraz mouseover. Pełniejsza ich lista to :

  • player - nasza postać
  • target - aktualnie wybrany cel
  • mouseover - obiera na cel ten aktualnie wskazywany przez kursor myszy
  • targettarget - cel naszego celu
  • focus - aktualny focus
  • focustarget - cel naszego focus-u
  • party - pierwszą osobę z naszego party. Wielokrotne wywołanie, powoduje przeskakiwanie do kolejnych członków party.
  • party{N}, - np. pary2 wybiera zawsze drugą osobę w party
  • raid{N} - obieramy na cel, konkreta osobe z grupy
  • pet - nasz pet
  • arena{N} - na arenie, przeciwnika N-tego w kolejności
  • boss{N} - w czasie walki w rajdzie, bossa N-tego w kolejności (np. w czasie walki z Botanistą)

Dla czytelności posługuję się formą target=mouseover, choć w praktyce zazwyczaj stosuje się skróconą formę @mouseover (a także @target, @focus, @arena2 itd.)


Umiejętność domyślna i inne czary w pojedynczym macro


Często zdarza się, że piszemy macro które domyślnie używać jednej umiejętności, a tylko przy określonych warunkach drugiej. Przykładowo:

Użyj Moonfirejeżeli mój obecny cel jest wrogi, ale domyślnie Regrowth.

Ot takie przydatne macro dla healerów, którzy nie mają za bardzo miejsca na czary ofensywne. Jedno macro pozwoli pod jednym przyciskiem mieć Moonfire do użytku na przeciwnikach. ale leczenia w pozostałych przypadkach. Dołączenie innych czarów do sekwencji logicznej możemy wykonać używając średnika ;

/cast [target=target, harm] Moonfire; Regrowth


[Zaawansowane]
Tu otwiera się także opcja do dodania warunków do drugiego czaru. Zdefiniujmy zadanie :
Jeżeli cel wskazywany przez kursor jest przyjazny użyj na nim Regrowth, jeżeli mój aktualny target jest wrogi użyj Moonfire, w przeciwnym wypadku użyj domyślnie Regrowth.

/cast [target=mouseover, help] Regrowth; [target=target, harm] Moonfire; Regrowth


Modyfikatory


Podstawowym, często używanym warunkiem są klawiszowe modyfikatory, takie jak Shift, Ctrl, Alt. Sprawdzamy czy wciśnięty jest jeden z tych klawiszy słówkiem kluczowym mod:


/cast [mod:shift] Execute; Mortal Strike

Polecenie takie używać będzie dla nas Mortal Strike, a gdy przytrzymamy Shift użyje Execute.


/cast [target=player, mod:shift] [ ] Blessing of Protection

Gdy przytrzymamy shift, Blessing of Protection rzucimy na siebie.

  • [mod] - umiejętność zostanie użyta jeżeli wciśnięty jest dowolny modyfikator
  • [nomod] - umiejętność zostanie użyta jeżeli nie jest wciśnięty żaden modyfikator
  • [nomod:alt] - umiejętność zostanie użyta jeżeli wciśnięty jest modyfikator ALT
  • [mod:shift/ctrl] - umiejętność zostanie użyta jeżeli wciśnięty jest modyfikator SHIFT lub CTRL
  • [nomod:shift/ctrl] - umiejętność zostanie użyta jeżeli nie jest wciśnięty ani SHIFT ani CTRL
  • [mod:shift, mod:ctrl] - umiejętność zostanie użyta jeżeli wciśnięte są oba modyfikatory SHIFT i CTRL.


Warunki


Do tej pory korzystaliśmy z dwóch słów warunkowych:

  • [help] - jeżeli cel jest przyjazny
  • [harm] - jeżeli cel jest wrogi

Ponad oczywiste zaznaczenie czy cel jest przyjazny czy nie, warunki te sprawdzają czy cel istnieje. Przeciwieństwem ich są.

  • [nohelp] - cel nie jest przyjazny lub nie istnieje (przykładowo, nie mamy aktualnie nikogo na targecie)
  • [noharm] - cel nie jest wrogi lub nie istnieje

Kolekcję uzupełnia:

  • [exists] - cel istnieje.

Wbrew pozorom [exists] jest całkiem przydatnym słowem warunkowym.

/cast [target=mouseover][target=target][ ] Penance

Powyższa komenda nie zadziała tak ładnie jak byśmy tego chcieli. Pierwszy kwadratowy nawias nie ma warunków, więc Penance zawsze będzie używane na mouseover. Jeżeli pod naszym kursorem nie będzie celu, dostaniemy błąd "I need a target!". Poprawnie powinno to wyglądać tak:

/cast [target=mouseover, exists][target=target, exists][ ] Penance
Na koniec szybko parę dodatkowych słów warunkowych:
  • [dead]
  • [nodead]
  • [combat]
  • [nocombat]
  • [flyable] - można używać latających mountów
  • [form:0] - oczywiście można 0 zastąpić kolejnymi liczbami. Wykrywa formę druida
  • [stance:0] - j/w .. dla warriora i podobnych
  • [indoors]
  • [outdoors]
  • [mounted]
  • [party] - cel istnieje i jest w twoim party
  • [noparty]
  • [raid]
  • [noraid]
  • [resting]
  • [spec: {numer specializacji 1-3}]
  • [stealth]
  • [swimming]
  • [talent: {rząd talentów 1-7} / {numer talentu 1-3} ]
  • [pvptalent: {rząd talentów 1-7} / {numer talentu 1-3} ]