Przewodnik WOW UI Mod-Rozdział 2 polecenia Slash

kup WoW Gold tanio

  • kup Wow Classic Gold bezpiecznie w PVPBank, korzystając z kuponu SEAN. Płatności: Paypal, Kredyt.
  • kup WoW Gold Paypal w Mulefactory. Kupon WoW Classic: wowcgold & Kupon WoW Gold: wowrgold. Super ceny, błyskawiczna dostawa. Płatności: Paypal, Skrill, Bitcoin.
  • Przewodnik po MOD UI-Rozdział 1
  • Przewodnik po Mod Ui-Rozdział 2
  • Przewodnik po Mod Ui-Rozdział 3
  • Przewodnik po Mod Ui-Rozdział 4
  • Przewodnik po MOD Ui-Rozdział 5
  • Przewodnik po Mod Ui-Rozdział 6
  • Przewodnik po MOD Ui-Rozdział 7

część 2 Indeks

  • Co to są polecenia ukośnika i dlaczego mnie to obchodzi
  • jak działają polecenia ukośnika
  • pliki LUA
  • składanie tego wszystkiego
  • co to robi
  • Ostatnie słowa

Witamy w drugiej części programu. nasz przewodnik po tworzeniu Wow AddOns! W tej odsłonie będziemy budować na prostym dodatku, który stworzyliśmy w części pierwszej. Nawet jeśli jesteś już zaznajomiony z tworzeniem dodatków, możesz szybko przejrzeć część pierwszą.

w drugiej części zakładam, że znasz podstawy plików Lua, XML i toc. Nie zakładam jednak, że masz duże doświadczenie w programowaniu. Skupimy się na obsłudze komend slash. Po drodze przyjrzymy się również kodowaniu Lua. Kiedy skończymy, rozszerzyliśmy dość kiepski okrzyk bojowy z części pierwszej, aby był konfigurowalny przez użytkowników końcowych bez konieczności modyfikowania kodu Lua. Jeśli nie masz już dodatku z części pierwszej, możesz pobrać pliki < tutaj>.

co to są polecenia ukośnika i dlaczego mnie to obchodzi

jeśli grałeś w WoW dłużej niż pięć minut, znasz polecenia ukośnika. To są takie rzeczy jak „Powiedz” i „kto”, który piszesz podczas gry „WoW”. Polecenia ukośnika są bardzo wygodnym sposobem wykonywania czynności bez użycia myszy. W przypadku autorów dodatków polecenia ukośnika są znacznie prostsze do wdrożenia niż graficzny interfejs użytkownika z oknami i przyciskami. Jeśli twoje potrzeby są proste, polecenia ukośnika mogą być wszystkim, czego wymaga dodatek.

jak wiecie WoW dostarcza ok. miliard takich komend. Możesz nie wiedzieć, że addony mogą dodawać własne polecenia ukośnika. Przyjrzyjmy się, co trzeba zrobić, aby zwiększyć liczbę poleceń ukośnika do miliard i jeden.

jak działają polecenia ukośnika

każde polecenie ukośnika utworzone przez dodatek ma powiązaną z nim funkcję Lua. Gdy użytkownik wpisze polecenie ukośnika, WoW wywołuje funkcję Lua. Wewnętrznie WoW utrzymuje listę SlashCmdList, która jest tabelą mapującą wszystkie różne polecenia ukośnika do funkcji, które powinny wywołać. Możesz myśleć o tym jak o książce telefonicznej. (Pamiętaj z powrotem przed Chat rooms i IM, Gdy ludzie używali telefonu J) polecenia ukośnika są jak nazwy i funkcje są jak numery telefonów. Gdy użytkownik wpisuje polecenie ukośnika, WoW uruchamia polecenia ukośnika (nazwy), aż znajdzie poprawne. Następnie wywołuje funkcję (numer telefonu) dla tego wpisu. Oto Lua, aby utworzyć polecenie ukośnika:

SlashCmdList = TthAog2SetMyBattleCry;

ta linia ustawia funkcję dla ¡°tth_aog2_set_my_battle_cry¡± polecenie ukośnika na ¡°tthaog2setmybattlecry¡±. Jeśli polecenie ¡°Tth_aog2_set_my_battle_cry¡± slash nie istnieje już w tabeli ¡°SlashCmdList ¡±, jest ono tworzone automatycznie. Aby to zadziałało, musimy zdefiniować funkcję TthAog2SetMyBattleCry gdzieś w naszym kodzie Lua. Funkcja może wyglądać następująco:

function tthaog2setmybattlecry (msg)
— set the battle cry, for use later
tthaog2mybattlecry = msg;
end

(A word on convention: zauważ, że użyliśmy All-caps dla nazwy polecenia ukośnika. Oznacza to, że napisaliśmy TTH_AOG2_SET_MY_BATTLE_CRY¡± zamiast ¡°tthaog2setmybattlecry ¡±. W tym przewodniku użyjemy wszystkich capów dla stałych wartości C, które nigdy nie powinny się zmieniać, nawet jeśli świat rozpadnie się w międzygwiezdny pył lub zamieć uśpi kapłanów lub coś równie przerażającego. Za każdym razem, gdy zobaczysz, że używam nazwy, będziesz wiedział, że pokazuję ci stałą.)

Pop quiz: Co typuje użytkownik, aby uruchomić nową komendę slash ok, przyznaję. To podchwytliwe pytanie. Chociaż powyższa linia Lua tworzy polecenie ukośnika i wiąże z nim funkcję Lua, nadal nie mamy sposobu na jej wykonanie. WoW używa sprytnego systemu aliasingu, aby powiązać typy użytkownika z rzeczywistymi poleceniami ukośnika. Oto Kod Lua, aby to zrobić:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = „/setmybattlecry2”;

teraz, jeśli użytkownik wpisze ¡°/setmybattlecry2 Nie w pachwinie!¡±, polecenie ukośnika ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± zostanie wykonane, powodując wywołanie funkcji ¡°TthAog2SetMyBattleCry¡± z parametrem ¡°Not in the groin!¡±. (Umieszczamy '° 2 ’ ± na koñcu '° / setmybattlecry2 ’ ± poniewa ¿zrewidujemy nasz dodatek w pó¼niejszych czê ¶ ciach tego przewodnika i nie chcemy, aby nazwy by3y sprzeczne.)

dlaczego dodatkowy krok dlaczego nie tworzy polecenia ukośnika ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± automatycznie sprawia, że użytkownik może wpisać ¡°/tth_aog2_setmybattlecry¡± aby go uruchomić istnieją dwa powody. Możesz już zobaczyć pierwszy: chociaż nasze wewnętrzne nazwy mogą mieć sens w naszym kodzie, często są strasznie brzydkie, aby pokazać je użytkownikom. Drugi powód jest ważniejszy: ten dodatkowy krok pozwala wielu słowom kluczowym wykonać to samo polecenie ukośnika. Wpisanie setmybattlecry2 jest trochę uciążliwe. Dajmy ludziom krótszy sposób:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = „/ smbc2”;

teraz użytkownicy naszego dodatku mogą wpisać ¡°/setmybattlecry2¡± lub ¡°/smbc2 ¡±, aby ustawić okrzyk bojowy. Zauważ, że w części stałej (SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2) dodaliśmy ¡°2¡± zamiast ¡°1¡± Tym razem. Możemy dodać trzecie słowo kluczowe, dodając zamiast tego '° 3′, i tak dalej.

chociaż polecenia ukośnika nie są tak fantazyjne lub tak atrakcyjne wizualnie jak okna i przyciski, często są wygodne dla użytkowników. I są o wiele łatwiejsze do stworzenia. (Jeśli nadal chcesz graficzny interfejs do swojego dodatku, a prawdopodobnie tak, bądź cierpliwy. Omówimy to w siódmej części tego przewodnika.)

zmienne LUA

być może zauważyłeś coś nowego w powyższej funkcji. Tutaj jest ponownie, na wypadek, gdybyś go przegapił:

function tthaog2setmybattlecry(msg)
— Ustaw okrzyk bojowy, do użycia później
tthaog2mybattlecry = msg;
koniec

¡°TthAog2MyBattleCry = msg; ¡± jest nową częścią. Tthaog2mybattlecry jest zmienną Lua. Zmienne są po prostu szczeliny do przechowywania dowolnej wartości do wyboru. Podobnie jak wiele języków skryptowych, Lua jest bardzo elastyczny w radzeniu sobie ze zmiennymi. Jeśli użyłeś mocno wpisanego języka programowania, takiego jak c++, możesz się zastanawiać nad zmienną typu. Możesz myśleć o zmiennych Lua jako o dużych pustych pudełkach, które mogą pomieścić prawie wszystko, co chcesz tam przechowywać. W tym dodatku przechowujemy preferowany przez użytkownika okrzyk bojowy do zmiennej.

jednym z ważnych aspektów zmiennych jest ¡°scope¡±. Zakres zasadniczo oznacza, że kod może zobaczyć tę zmienną domyślnie zmienne mają globalny zakres, wiele funkcji może zobaczyć zmienną. Inny rodzaj zakresu to lokalny zakres. Oznacza to dla nas, że tylko kod w tym samym bloku może zobaczyć zmienną. „Blok” oznacza „do następnego końca”. (Techniczna definicja zakresu w Lua jest bardziej skomplikowana, ale nie musimy się martwić o te szczegóły tutaj.)

w naszym powyższym przykładzie, ¡°TthAog2MyBattleCry¡± jest zmienną globalną¡±, zmienną o globalnym zasięgu. Linia ¡°TthAog2MyBattleCry = msg;¡± w ramach ¡°tthaog2setmybattlecry utworzyła Go funkcja. Dla tych z Was, którzy pochodzą z języków takich jak C++, może to wydawać się sprzeczne z intuicją. Ale w Lua, jeśli zmienna nie jest wyraźnie zidentyfikowana jako mająca lokalny zasięg, jest automatycznie globalna. Nawet jeśli zadeklarował wewnątrz funkcji. Tak więc następujące działania:

function tthaog2setmybattlecry (msg)
— Ustaw okrzyk bojowy, do późniejszego użycia
tthago2mybattlecry = msg;
end

function tthaog2event ()
— wyślij wiadomość na czat
SendChatMessage (tthaog2mybattlecry, „say”);
End

zauważ, że Tthaog2mybattlecry jest używany w obu funkcjach. W obu miejscach odnosi się do tej samej zmiennej. Używając analogii do pudełka, jeśli TthAog2SetMyBattleCry umieści wartość w pudełku, TthAog2Event może zajrzeć do pudełka i zobaczyć tę wartość.

jednak deklarowanie zmiennych globalnych w ten sposób jest złą praktyką. Znacznie lepiej jest je zadeklarować na górze pliku Lua. Ma to dwie zalety:

1) pełna lista zmiennych globalnych znajduje się tutaj, gdzie można łatwo zobaczyć je wszystkie w skrócie

2) możesz mieć pewność, że zmienna jest poprawnie zainicjowana.

więc zdecydowanie lepiej to zrobić:

— ta zmienna trzyma nasz okrzyk bojowy
TthAog2MyBattleCry = ” Nie w twarz!”;

function tthaog2setmybattlecry(msg)
— Ustaw okrzyk bojowy, do użycia później
tthaog2mybattlecry = msg;
end

function tthaog2event ()
— wyślij wiadomość na czat
SendChatMessage(TTHAOG2MYBATTLECRY, „SAY”);
end

teraz znacznie łatwiej jest zobaczyć, co się dzieje.

zmienne lokalne są często przydatne, gdy potrzebujemy tylko wartości krótko. Używając lokalnego, jest bardzo jasne, jaki kod modyfikuje zmienną. Ponieważ lokalny nie istnieje bardzo długo, zwykle można zobaczyć cały kod, który może go zmodyfikować na pierwszy rzut oka. Dobrym pomysłem byłoby echo nowego Okrzyku bojowego z powrotem do użytkownika, gdy go ustawią. Let¡s modyfikować TthAog2SetMyBattleCry to zrobić:

funkcja tthaog2setmybattlecry (msg)
— Ustaw okrzyk bojowy, do późniejszego użycia.
TthAog2MyBattleCry = msg;

— Echo nowego Okrzyku bojowego o potwierdzenie.
local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
tthaog2outputtochat (echo);
end

wprowadziliśmy kilka nowych rzeczy oprócz zmiennej lokalnej, więc spójrzmy na nie jeden po drugim:

local echo = tth_aog2_battle_cry_set_to .. msg;

ta linia tworzy zmienną lokalną o nazwie ¡°echo¡± do przechowywania wartości, którą my¡ll echo do użytkownika. Część po znaku równości tworzy ciąg tekstu, który rozpoczyna się zawartością zmiennej tth_aog2_battle_cry_set_to i kończy zawartością msg, a następnie przypisuje ten ciąg tekstu do zmiennej lokalnej.

Uh-oh, nie zdefiniowaliśmy zmiennej TTH_AOG2_BATTLE_CRY_SET_TO. Zdefiniujemy ją tą linią, umieszczoną na górze naszego pliku:

local tth_aog2_battle_cry_set_to = „battle cry set to”;

jak widać, zmienna tth_aog2_battle_cry_set_to zawiera po prostu łańcuch znaków. Ponieważ ten ciąg nigdy się nie zmienia, nazywa się go stałą. Umieszczenie stałej na górze pliku jest zawsze dobrym pomysłem. W ten sposób, jeśli chcesz zmienić sformułowanie, łańcuch jest bardzo łatwy do znalezienia. (Jak zobaczymy w czÄ ™ Ĺ „ci szeĹ” Ci, to rĂłwnieĹź sprawia, Ĺźe lokalizacja, lub wspieranie wielu jÄ ™ zykĂłw, znacznie latwiejsze.) Ponadto, zadeklarowaliśmy zmienną tth_aog2_battle_cry_set_to jako lokalną, nawet jeśli nie jest ona w funkcji. Oznacza to, że zmienna istnieje tylko w tym pliku, a nie w żadnym innym. Jeśli używasz tylko zmiennej w jednym pliku, zawsze dobrze jest uczynić ją lokalną. W ten sposób masz pewność, że żaden kod poza twoim plikiem nie mógł go zmodyfikować. (Możesz się zastanawiać, dlaczego nie zrobiliśmy tthaog2mybattlecry lokalnym. Głównie dlatego, że chciałem wam pokazać, jak wygląda zmienna globalna. Ale jest też inny powód, który zobaczysz w trzeciej części.)

teraz przejdźmy do następnej linii naszej funkcji:

TthAog2OutputToChat(echo);

ta linia wywołuje funkcję, którą musimy napisać, aby wysłać wiadomość do obszaru czatu. Zmienna echo jest przekazywana do funkcji. Oto jak ta funkcja wygląda:

function tthaog2outputtochat(msg)
if (DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end

ta funkcja określa, czy możemy wyświetlić tekst do domyślnej ramki czatu i, jeśli tak, wyświetla tekst w msg do obszaru czatu. Ten tekst nie jest postrzegany przez innych graczy C jest to tekst ściśle informacyjny dla gracza uruchamiającego dodatek. Jeśli nie jesteś zaznajomiony z tym, jak działa przekazywanie zmiennych do funkcji, oto jak to działa: kiedy tthaog2setmybattlecry wywołuje tthaog2outputtochat przekazując zmienną echo, Lua pewne rzeczy za kulisami. Wytworzy lokalną zmienną o nazwie msg w tthaog2outputtochat, a następnie skopiuje wartość w echo do msg. Daje nam to lokalną zmienną o nazwie msg w funkcji tthaog2outputtochat, której możemy używać jak chcemy.

nie musieliśmy tworzyć funkcji, aby to zrobić. Mogliśmy umieścić kod do wyjścia do obszaru czatu bezpośrednio w funkcji tthaog2setmybattlecry. Ale za pomocą funkcji sprawia, że naprawdę łatwo wyprowadzać tekst do obszaru czatu. Jeśli musimy to zrobić gdzie indziej, musimy tylko wywołać funkcję, a nie skopiować cały blok kodu. (Wykorzystamy to w części trzeciej.) Ponadto, je ¶ li zdecydowali ¶ my siê pokazaæ tekst u ¿ytkownikowi w inny sposób, musimy tylko zmodyfikowaæ kod w ramach funkcji. Żaden inny kod nie zostanie naruszony, co zmniejsza ryzyko wystąpienia błędu. Ostatecznie uproszczono funkcję TthAog2SetMyBattleCry. Łatwy do odczytania kod to kod łatwy do debugowania.

nie zbadaliśmy w pełni obsługi ciągów Lua lub hierarchii ramek WoW, ale w tym momencie byłoby to odwrócenie uwagi od naszego głównego punktu skupienia poleceń ukośnika. Mam nadzieję, że powyższe jest wystarczające, aby zrozumieć, co się dzieje w tej wersji dodatku.

składając to wszystko razem

jesteśmy teraz gotowi do przepisania dodatku do Okrzyku bojowego, aby umożliwić użytkownikowi określenie preferowanego Okrzyku bojowego za pomocą komend ukośnika. Podobnie jak w części pierwszej, istnieją trzy pliki zaangażowane:
– plik toc
– plik XML
– plik kodu Lua

plik toc jest prawie niezmieniony od części pierwszej:

## Interface: 11000
## Title: TenTonHammer Guide Part 2
## Author: TenTonHammer.com
## Notes: Makes your character scream a customizable battle cry when combat begins
TthAog2.xml

właśnie zmieniliśmy 1 na 2 i zmieniliśmy nuty, by nazwać okrzyk bojowy, zamiast głupiego. Zapisz ten plik spisu treści jako TthAog2.spis treści do folderu o nazwie TthAog2 w folderze AddOns.

plik XML jest identyczny z częścią pierwszą, z wyjątkiem zmiany 1 na ¡°2¡±:

<Ui xmlns=”http://www.blizzard.com/wow/ui/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi: schemaLocation=”http://www.blizzard.com/wow/ui/”>
<Script file= ” TthAog2.lua”/>
<Frame name=” TthAog2Core”>
<Scripts>
<OnLoad>TthAog2Load();</OnLoad>
<OnEvent>TthAog2Event();</OnEvent>
</Scripts>
</Frame>
</Ui>

Zapisz ten plik XML jako TthAog2.xml do folderu o nazwie TthAog2 w folderze AddOns.

wreszcie mamy plik Lua zawierający sam kod. Widziałeś już wszystkie te kawałki:

— ciągi stałe.
local TTH_AOG2_BATTLE_CRY_SET_TO = „battle cry set to”;
— ta zmienna trzyma nasz okrzyk bojowy.
TthAog2MyBattleCry = ” Nie w twarz!”;

— funkcja użytkowa do drukowania do obszaru czatu
funkcja tthaog2outputtochat(msg)
if (DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end

— wywoływana podczas ładowania dodatku.
function tthaog2load ()
— Register for an event.
this: RegisterEvent („PLAYER_REGEN_DISABLED”);

— Utwórz polecenie ukośnik.
SlashCmdList = TthAog2SetMyBattleCry;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = „/ setmybattlecry2”;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 =” / smbc2″;
end

— wywoływane podczas wykonywania polecenia slash.
funkcja tthaog2setmybattlecry (msg)
— Ustaw okrzyk bojowy, do późniejszego użycia.
TthAog2MyBattleCry = msg;

— Echo nowego Okrzyku bojowego o potwierdzenie.
local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
tthaog2outputtochat (echo);
end

— wywołane do obsługi zdarzenia, dla którego się zarejestrowaliśmy.
function tthaog2event ()
— Wyślij wiadomość na czat.
SendChatMessage (TthAog2MyBattleCry,”powiedz”);
end

w porównaniu do części pierwszej dodaliśmy globalną zmienną tthaog2mybattlecry, dodaliśmy kod do utworzenia polecenia ukośnika, dodaliśmy funkcję tthaog2setmybattlecry i użyliśmy globalnej zmiennej tthaog2mybattlecry w TthAog2Event. Dodaliśmy też więcej komentarzy.

Zapisz ten plik lua jako TthAog2.lua do folderu o nazwie TthAog2 w folderze AddOns.

co to robi

teraz zacznij WoW i wdaj się w bójkę. Nie zobaczysz głupiego Okrzyku bojowego w twarz!¡±. Odzwierciedla to domyślną wartość zmiennej TthAog2MyBattleCry. Wpisz teraz:

/ smbc2 do walki!

na czacie pojawi się nowy okrzyk bojowy. A teraz weź udział w kolejnej walce, a zobaczysz się z nią!zamiast Nie w twarz!¡±. JeĹ „li wolisz wyĹ’ Ä … czyÄ ‡ okrzyk bojowy, moĹźesz wpisaÄ ‡ po prostu:

/smbc2

nasze echo nie jest zbyt dobrze powiedziane w tym przypadku (bÄ ™ dzie po prostu powiedziaĹ ’ o â°Okrzyk bojowy ustawiony na â±). Jeśli to był prawdziwy dodatek do użytku przez ogół społeczeństwa, testujemy wartość msg i wyświetlamy specjalne echo, jeśli użytkownik oczyszcza okrzyk bojowy. Ponieważ to tylko przykład, nie będziemy komplikować kodu.

ostatnie słowa

jeśli wypróbujesz nową wersję dodatku, a twoja postać krzyczy dwa okrzyki bitewne, prawdopodobnie dlatego, że nadal masz zainstalowany i aktywny dodatek z części pierwszej tego przewodnika. Ponieważ byliśmy ostrożni z nazewnictwem, to nie spowoduje żadnych błędów. Ale ty pewnie też tego nie chcesz. Wystarczy wyłączyć lub usunąć pierwszą wersję C nowa jest i tak lepsza.

jest jednak jeden problem: Twój okrzyk bojowy jest tracony między sesjami. Za każdym razem, gdy zamykasz i restartujesz WoW, wrócisz, by nie trafić w twarz!¡±. Kiedy będziesz gotowy, przejdź do trzeciej części i zobaczymy, jak sprawić, by Twój ulubiony okrzyk bojowy pozostał między sesjami.