WOW UI Mod Guide-Capitolul 2 Slash comenzi

cumpara WoW Aur ieftine

  • cumpara WoW aur clasic în condiții de siguranță la PVPBank folosind cupon SEAN. Plăți: Paypal, Credit.
  • cumpara WoW aur Paypal la Mulefactory. WoW Cupon Clasic: wowcgold & WoW Cupon De Aur: wowrgold. Prețuri minunate, livrare instantanee. Plăți: Paypal, Skrill, Bitcoin.
  • UI Mod Guide – Capitolul 1
  • UI Mod Guide-Capitolul 2
  • UI Mod Guide-Capitolul 3
  • UI Mod Guide-Capitolul 4
  • UI Mod Guide-Capitolul 5
  • UI Mod Guide-Capitolul 6
  • UI Mod Guide-Capitolul 7

Partea 2 Index

  • ce sunt comenzile slash și de ce îmi pasă
  • cum funcționează comenzile slash
  • LUA fișiere
  • punând totul împreună
  • ce face
  • cuvinte finale

Bine ați venit la Partea două dintre ghidul nostru pentru crearea Wow AddOns! În această tranșă ne vom baza pe suplimentul simplu pe care l-am creat în prima parte. Chiar dacă sunteți deja familiarizat cu crearea de AddOns, ați putea dori să degresat rapid o parte.

în partea a doua, am ll presupune că vă familiarizați cu elementele de bază ale lua, XML, și toc fișiere. Cu toate acestea, am câștigat t presupune că aveți o vastă experiență de programare. Accentul nostru va fi pus pe manipularea comenzilor de la clasa a VIII-a. Pe parcurs, ne uităm, de asemenea, puțin mai aproape de codificarea Lua. Când am făcut-o, am extins-o pe cea de-a doua, destul de șchioapă, pentru a fi personalizabilă de către utilizatorii finali, fără a le cere să modifice Codul lua. Dacă nu aveți deja AddOn-ul din prima parte, puteți obține fișierele <aici>.

ce sunt comenzile SLASH și de ce îmi pasă

dacă ați jucat wow pentru mai mult de cinci minute, vă familiarizați cu comenzile slash. Ei¡re lucrurile ca ¡°/spune¡± și°/cine¡± pe care le tastați în timp ce joacă WoW. Comenzile Slash sunt o modalitate foarte convenabilă de a efectua o acțiune fără a utiliza mouse-ul. Pentru scriitorii de AddOn, comenzile slash sunt mult mai simple de implementat decât o interfață grafică de utilizator cu ferestre și butoane. Dacă nevoile dvs. sunt simple, comenzile slash ar putea fi tot ceea ce necesită suplimentul dvs.

după cum știți, WoW oferă despre umpteen-gazillion astfel de comenzi. Ceea ce poate nu știți este că suplimentele pot adăuga propriile comenzi slash. Deci, să se uite la ceea ce este nevoie pentru a ciocni numărul de comandă slash la umpteen-gazillion-și-unul.

cum funcționează comenzile SLASH

fiecare comandă slash pe care o creează un AddOn are o funcție Lua asociată cu aceasta. Când utilizatorul tastează comanda slash, WoW apelează funcția Lua. Pe plan intern, WoW menține un slashcmdlist de la XV, care este un tabel care mapează toate comenzile slash diferite la funcțiile pe care ar trebui să le apeleze. Vă puteți gândi la asta ca la o carte de telefon. (Amintiți-vă înapoi înainte de camere de chat și IM, atunci când oamenii au folosit telefonul J) comenzile slash sunt ca numele și funcțiile sunt ca numerele de telefon. Când utilizatorul tastează o comandă slash, WoW rulează prin comenzile slash (nume) până când o găsește pe cea corectă. Apoi apelează funcția (Numărul de telefon) pentru acea intrare. Aici s Lua pentru a crea o comandă slash:

SlashCmdList = TthAog2SetMyBattleCry;

această linie setează funcția pentru comanda slash TTH_AOG2_SET_MY_BATTLE_CRY pentru a tthaog2setmybattlecry. În cazul în care comanda de slash-uri de la tth_aog2_set_my_battle_cry nu există deja în tabelul de SlashCmdList-uri de la tth_aog2_set_my_battle_cry, aceasta este creată automat. (Convenabil, isn-ul t-l) pentru ca acest lucru să funcționeze efectiv, trebuie să definim funcția de tthaog2setmybattlecry de la A la Z, undeva în codul nostru lua. Funcția ar putea arăta astfel:

funcția TthAog2SetMyBattleCry(msg)
— setați strigătul de luptă, pentru utilizare ulterioară
TthAog2MyBattleCry = msg;
end

(un cuvânt despre convenție: observați că am folosit toate capacele pentru numele comenzii slash. Asta este, am scris TTH_AOG2_SET_MY_BATTLE_CRY¡± în loc de ¡°TthAog2SetMyBattleCry¡±. În acest ghid, vom folosi toate capacele pentru valori constante C, care nu ar trebui să se schimbe niciodată, chiar dacă lumea se prăbușește în praf interstelar sau Blizzard nerfs preoți sau ceva la fel de îngrozitor. De fiecare dată când mă vezi să folosesc un nume cu majuscule, vei ști că Eu îți arăt o constantă.)

test Pop: ce tip de utilizator pentru a rula noua comandă slash bine, mărturisesc. Este o întrebare capcană. Deși linia de mai sus a Lua creează o comandă slash și asociază o funcție Lua cu ea, încă nu avem nici o modalitate de ao executa. WoW foloseste un sistem de aliasing puturos pentru a asocia ceea ce tipurile de utilizator cu comenzile reale slash. Aici e codul Lua pentru a face acest lucru:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = „/setmybattlecry2”;

acum, în cazul în care tipurile de utilizator/setmybattlecry2 nu în vintre!¡±, slash comanda ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± va fi executat, provocând funcția ¡°TthAog2SetMyBattleCry¡± pentru a fi numit cu parametrul ¡°Nu in zona abdomenului!¡±. (Am pus o ¡°2¡± la sfârșitul ¡°/setmybattlecry2¡± pentru că ne¡ll revizuim AddOn mai târziu părți la prezentul ghid și nu ne¡t vreau numele la conflict.)

de ce pasul suplimentar de ce nu se creează comanda slash tth_aog2_set_my_battle_cry pentru a rula, există două motive. Puteți vedea deja primul: deși numele noastre interne pot avea mult sens în codul nostru, ele sunt adesea teribil de urâte pentru a le arăta utilizatorilor. Al doilea motiv este mai important: acest pas suplimentar permite mai multe cuvinte cheie pot executa aceeași comandă slash. Tastarea de la setmybattlecry2 este un fel de durere. Lăsați-i pe oameni să ofere un mod mai scurt:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = „/smbc2”;

acum utilizatorii AddOn-ului nostru pot tasta fie pentru a seta strigătul de luptă, fie pentru a seta strigătul de luptă. Observați că în partea constantă (SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2) am anexat o ¡°2¡± în loc de o ¡°1 ¡±, de data asta. Am putea adăuga un al treilea cuvânt cheie, prin adăugarea unui 3 în schimb, și așa mai departe.

deși comenzile slash aren t la fel de fantezie sau la fel de atrăgătoare vizual ca ferestre și butoane, ei re de multe ori convenabil pentru utilizatori. Și ei re un întreg mult mai ușor pentru tine de a crea. (Dacă totuși doriți o interfață grafică pentru AddOn-ul dvs. și probabil că o faceți, aveți răbdare. Vom acoperi că, în partea a șaptea a acestui ghid.)

lua variabile

este posibil să fi observat ceva nou în funcția de mai sus. Aici este din nou, în cazul în care ați ratat-o:

funcția TthAog2SetMyBattleCry(msg)
– setați strigătul de luptă, pentru utilizare ulterioară
TthAog2MyBattleCry = msg;
end

Tthaog2mybattlecry = msg; partea nouă este cea de-a doua. Tthaog2mybattlecry XTX este o variabilă lua. Variabilele sunt doar sloturi pentru a deține orice valoare la alegere. La fel ca multe limbaje de scripting, Lua este foarte flexibil în tratarea variabilelor. Dacă ai folosit o ¡°puternic tastat¡± limbaj de programare precum C++, s-ar putea întreba despre variabila¡s ¡°tip¡±. Don t. vă puteți gândi la variabilele Lua ca cutii goale mari, care pot deține destul de mult orice doriți să stocați acolo. În acest AddOn, stocăm strigătul de luptă preferat al utilizatorului, în variabilă.

un aspect important al variabilelor este domeniul de aplicare al articolului. Domeniul de aplicare înseamnă, în esență, ce cod pot vedea acest lucru variabila în mod implicit, variabilele au domeniul de aplicare la nivel mondial la sută, multe oricare dintre funcțiile dvs. pot vedea variabila. Celălalt tip de domeniu de aplicare este domeniul local de aplicare al articolului. Ceea ce înseamnă acest lucru pentru noi este că numai codul din cadrul aceluiași bloc de la sec. Un bloc de la sec. (Definiția tehnică a domeniului de aplicare în Lua este mai complicată, dar nu trebuie să ne facem griji cu privire la aceste detalii aici.)

în exemplul nostru de mai sus, tthaog2mybattlecry-ul este o variabilă globală a lui secund, o variabilă cu domeniu de aplicare global. Linia de tthaog2mybattlecry = MSG; în cadrul funcției de tthaog2setmybattlecry a creat-o. Pentru aceia dintre voi care provin din limbi precum c++, acest lucru poate părea contraintuititiv. Dar în Lua, dacă o variabilă nu este identificată în mod explicit ca având domeniu de aplicare local, este automat globală. Chiar dacă a declarat în cadrul unei funcții. Deci, următoarele ar funcționa:

funcția TthAog2SetMyBattleCry(msg)
– setați strigătul de luptă, pentru utilizare ulterioară
TthAgo2MyBattleCry = msg;
end

funcția TTHAog2Event()
– trimiteți un mesaj la chat
SendChatMessage(tthaog2mybattlecry, „spune”);
end

observați că tthaog2mybattlecry este utilizat în ambele funcții. În ambele locuri, se referă la aceeași variabilă. Folosind analogia casetei, dacă TthAog2SetMyBattleCry pune o valoare în cutie, TthAog2Event poate privi în cutie și poate vedea acea valoare.

cu toate acestea, declararea variabilelor globale în acest fel este o practică proastă. Este mult mai bine să le declarați în partea de sus a fișierului Lua. Aceasta are două avantaje:

1) lista completă a variabilelor globale este chiar acolo, unde le puteți vedea cu ușurință pe toate dintr-o privire

2) puteți fi sigur că variabila este inițializată corect.

deci, este mult mai preferabil să facem acest lucru:

— această variabilă ține strigătul nostru de luptă
TthAog2MyBattleCry = „nu în față!”;

funcția TthAog2SetMyBattleCry (msg)
– setați strigătul de luptă, pentru utilizare ulterioară
TthAog2MyBattleCry = msg;
end

funcția TthAog2Event ()
— trimite un mesaj pentru chat
SendChatMessage(TthAog2MyBattleCry, „spune”);
end

acum este mult mai ușor pentru a vedea ce se întâmplă.

variabilele locale sunt adesea utile atunci când avem nevoie doar de o valoare pe scurt. Prin utilizarea unui local, este foarte clar ce Cod modifică variabila. Deoarece locale nu există foarte mult timp, puteți vedea, de obicei, tot codul pe care l-ar putea modifica dintr-o privire. Ar fi o idee bună să ecou noul strigăt de luptă înapoi la utilizator atunci când l-au setat. Să modificăm tthaog2setmybattlecry pentru a face acest lucru:

funcția TthAog2SetMyBattleCry (msg)
– setați strigătul de luptă, pentru utilizare ulterioară.
TthAog2MyBattleCry = msg;

— ecou noul strigăt de luptă pentru confirmare.
ecou local = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat(ecou);
end

am introdus mai multe lucruri noi în plus față de variabila locală, așa că lăsați-o pe scurt pe ele:

ecou local = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;

aceasta linie creaza o variabila locala denumita Echo-ul-ul-ul-ul pentru a stoca valoarea pe care o vom Echo-ul-ul-ul utilizatorului. Partea după semnul egal face un șir de text care începe cu conținutul variabilei TTH_AOG2_BATTLE_CRY_SET_TO și se termină cu conținutul msg, apoi atribuie acel șir de text variabilei locale.

Uh-oh, nu am definit variabila tth_aog2_battle_cry_set_to. Îl definim cu această linie, plasată în partea de sus a fișierului nostru:

local tth_aog2_battle_cry_set_to = „strigătul de luptă setat la „;

după cum puteți vedea, variabila TTH_AOG2_BATTLE_CRY_SET_TO conține pur și simplu un șir. Pentru că acest șir nu se schimbă niciodată, se numește o constantă a lui sec. Plasarea constantă în partea de sus a fișierului dvs. este întotdeauna o idee bună. În acest fel, dacă trebuie să schimbați formularea, șirul este foarte ușor de găsit. (Așa cum vom vedea în partea a șasea, de asemenea, face localizare, sau sprijinirea mai multe limbi, mult mai ușor.) De asemenea, am declarat variabila tth_aog2_battle_cry_set_to ca fiind locală, chiar dacă nu este într-o funcție. Aceasta înseamnă că variabila există numai în acest fișier și nu în altele. Dacă sunteți doar folosind o variabilă într-un singur fișier, este întotdeauna bine să-l facă local. În acest fel, sunteți sigur că niciun cod din afara fișierului dvs. nu l-ar fi putut modifica. (S-ar putea să vă întrebați de ce am făcut-o pe tthaog2mybattlecry locală. Acest lucru e mai ales pentru că am vrut să vă arăt cum arăta o variabilă globală. Dar există și un alt motiv, pe care îl veți vedea în partea a treia.)

acum să se mute la următoarea linie a funcției noastre:

TthAog2OutputToChat(ecou);

această linie solicită o funcție pe care trebuie să scrie, pentru a trimite un mesaj în zona de chat. Ecoul variabil este transmis funcției. Iată ce arată această funcție:

funcția TthAog2OutputToChat(msg)
if (DEFAULT_CHAT_FRAME) apoi
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end

această funcție determină dacă putem afișa text în cadrul de chat implicit și, dacă da, afișează textul din msg în zona de chat. Acest text nu este văzut de niciun alt jucător C este un text strict informativ pentru jucătorul care rulează suplimentul. Dacă nu sunteți familiarizat cu modul în care funcționează trecerea variabilelor la funcții, iată cum merge: când tthaog2setmybattlecry solicită TthAog2OutputToChat prin trecerea variabila echo, Lua unele lucruri în spatele scenei. Se creează o variabilă locală numită msg în TthAog2OutputToChat, apoi copiază valoarea în echo la msg. Acest lucru ne oferă o variabilă locală numită msg în cadrul funcției TthAog2OutputToChat, pe care o putem folosi după bunul plac.

nu a trebuit să creăm o funcție pentru a face acest lucru. Am fi putut pune codul la ieșire în zona de chat direct în funcția TthAog2SetMyBattleCry. Dar utilizarea unei funcții face foarte ușoară ieșirea textului în zona de chat. Dacă trebuie să facem acest lucru în altă parte, trebuie doar să apelăm funcția, nu să copiem un întreg bloc de cod. (Vom profita de acest lucru în partea a treia.) De asemenea, dacă am decis să afișăm textul utilizatorului într-un mod diferit, trebuie doar să modificăm codul din funcție. Niciun alt cod nu ar fi afectat, reducând șansa unui bug. În cele din urmă, a simplificat funcția TthAog2SetMyBattleCry. Codul ușor de citit este codul ușor de depanat.

nu am explorat pe deplin manipularea șirurilor Lua sau ierarhia cadrului WoW, dar pentru a face acest lucru în acest moment ar fi o distragere a atenției de la obiectivul nostru principal de comenzi slash. Sperăm că cele de mai sus sunt suficiente pentru a înțelege ce se întâmplă în această versiune a suplimentului.

punând totul împreună

suntem acum gata să rescriem AddOn-ul battle cry pentru a permite utilizatorului să specifice un strigăt de luptă preferat prin comenzi slash. La fel ca în prima parte, există trei fișiere implicate:
– toc de fișier
– fișier XML
– codul Lua fișier

toc de fișier este aproape neschimbat din Partea:

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

Ne-am schimbat doar ¡°1¡± pentru a ¡°2¡±, și-a schimbat notele sună strigătul de luptă ¡°personalizabil¡± în loc de ¡°prostie¡±. Salvați acest fișier toc ca TthAog2.toc la un folder numit TthAog2 sub addons folder.

fișierul XML este identic cu prima parte, cu excepția modificării lui 1 la ¡°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/”>
<fișier Script=” TthAog2.lua”/>
<numele cadrului=” TthAog2Core”>
<Scripts>
<OnLoad>TthAog2Load();</OnLoad>
<OnEvent>TthAog2Event();</OnEvent>
</Scripts>
</Frame>
</Ui>

salvați acest fișier XML ca TthAog2.xml într-un folder numit TthAog2 sub addons folder.

în cele din urmă, avem fișierul Lua care conține codul în sine. Ați văzut deja toate aceste piese:

— corzi constante.
local TTH_AOG2_BATTLE_CRY_SET_TO = ” strigăt de luptă setat la „;
– această variabilă deține strigătul nostru de luptă.
TthAog2MyBattleCry = ” nu în față!”;

— funcția de utilitate pentru imprimarea în zona de chat
funcția TthAog2OutputToChat(msg)
dacă (DEFAULT_CHAT_FRAME) apoi
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end

— numit atunci când se încarcă AddOn.
funcția TthAog2Load ()
— înregistrați-vă pentru un eveniment.
acest lucru: RegisterEvent („PLAYER_REGEN_DISABLED”);

— creați comanda slash.
SlashCmdList = TthAog2SetMyBattleCry;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = „/setmybattlecry2”;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 =” / smbc2″;
end

— numit atunci când execută comanda slash.
funcția TthAog2SetMyBattleCry (msg)
– setați strigătul de luptă, pentru utilizare ulterioară.
TthAog2MyBattleCry = msg;

— ecou noul strigăt de luptă pentru confirmare.
ecou local = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end

— chemat să se ocupe de evenimentul pentru care ne-am înregistrat.
funcția TthAog2Event ()
– trimite un mesaj pentru chat.
SendChatMessage(TthAog2MyBattleCry, „spune”);
end

comparativ cu prima parte, am adăugat variabila globală tthaog2mybattlecry, am adăugat codul pentru a crea comanda slash, am adăugat funcția TthAog2SetMyBattleCry și am folosit variabila globală tthaog2mybattlecry în TthAog2Event. Am adăugat, de asemenea, mai multe comentarii.

salvați acest fișier lua ca TthAog2.lua într-un folder numit TthAog2 sub addons folder.

ce face

acum începe WoW și de a lua într-o luptă. Vei vedea strigătul de luptă prostesc nu în față!¡±. Aceasta reflectă valoarea implicită a variabilei TthAog2MyBattleCry. Acum tastați următoarele:

/ smbc2 la luptă!

veți vedea noul strigăt de luptă ecou în zona de chat. Acum du-te într-o altă luptă, și tu vei vedea la luptă!în loc de a nu în față!¡±. Dacă preferați să opriți strigătul de luptă, puteți tasta doar:

/smbc2

echo isn nostru t foarte bine formulat pentru acest caz (se va spune doar strigăt de luptă pentru a seta la hectar). Dacă acesta ar fi un AddOn real pentru utilizarea de către publicul larg, testăm valoarea msg și afișăm un ecou special dacă utilizatorul șterge strigătul de luptă. Pentru că acesta este doar un exemplu, am câștigat t complica codul.

cuvinte finale

dacă încercați noua versiune a AddOn și personajul tău țipă două strigăte de luptă, este, probabil, pentru că încă mai aveți AddOn din prima parte a acestui ghid instalat și activ. Pentru că am fost atenți cu denumire,acest lucru a câștigat t cauza erori. Dar este, probabil, nu știu ce vrei, fie. Doar dezactivați sau ștergeți prima versiune C cea nouă este oricum mai bună.

există totuși o problemă: strigătul tău de luptă se pierde între sesiuni. De fiecare data cand inchizi si restartezi WoW, vei fi din nou in fata nu in fata!¡±. Când sunteți gata, treceți la Partea A treia și vom vedea cum să vă faceți strigătul de luptă preferat între sesiuni.