WOW UI Mod Guide-Kapittel 2 Slash Kommandoer
Kjøp WoW Gull Billig
- Kjøp WoW Classic Gold Trygt På PVPBank bruke kupong
SEAN
. Betalinger: Paypal, Kreditt. - Kjøp WoW Gull Paypal På Mulefactory. WoW Klassisk Kupong:
wowcgold
& WoW Gull Kupong:wowrgold
. Fantastiske priser, umiddelbar levering. Betalinger: Paypal, Skrill, Bitcoin.
- UI Mod Guide-Kapittel 1
- UI Mod Guide-Kapittel 2
- UI Mod Guide – Kapittel 3
- UI Mod Guide-Kapittel 4
- UI Mod Guide-Kapittel 5
- UI Mod Guide – Kapittel 6
- UI Mod Guide – Kapittel 7
Del 2 Index
- Hva er slash-kommandoer, og hvorfor bryr jeg meg
- hvordan fungerer slash-kommandoer
- LUA-Filer
- Sette alt sammen
- Hva gjør det
- Siste Ord
Velkommen Til Del To Av Vår Guide Til Å Skape Wow AddOns! I denne avbetalingen bygger vi¡på det enkle Tillegget vi opprettet I Del Ett. Selv om du¡allerede er kjent med å lage Tillegg, vil du kanskje raskt skumme Del En.
I Del To antar jeg at du¡er kjent med det grunnleggende Om Lua -, XML-og toc-filer. Imidlertid vant jeg¡t anta at du har omfattende programmeringserfaring. Vårt fokus vil være på å håndtere ¡ °slash ¡ ± kommandoer. Underveis ser vi¡også litt nærmere På Lua-koding. Når vi¡re gjort, har vi utvidet det ganske lame ¡ °kampkryp ¡ ± tillegget Fra Del en Til å kunne tilpasses av sluttbrukere Uten At de må endre lua-Koden. Hvis du ikke allerede har tillegget fra Del Ett, kan du få filene < her>.
HVA ER SLASH-KOMMANDOER, OG HVORFOR BRYR jeg meg
hvis du¡har spilt WoW i mer enn omtrent fem minutter, er du¡kjent med slash-kommandoer. De¡er de tingene som ¡ ° /si ¡ ± og ¡ ° /hvem ¡ ± som du skriver mens du spiller wow. Slash kommandoer er en veldig praktisk måte å utføre en handling uten å bruke musen. For AddOn-forfattere er slash-kommandoer mye enklere å implementere enn et grafisk brukergrensesnitt med vinduer og knapper. Hvis dine behov er enkle, kan slash-kommandoer være alt Som Tillegget ditt krever.
Som du vet, Gir WoW om umpteen-gazillion slike kommandoer. Det du kanskje ikke vet er At AddOns kan legge til sine egne slash-kommandoer. Så la¡s ta en titt på hva som trengs for å støte på slash-kommandoen, telle til umpteen-gazillion-and-one.
HVORDAN FUNGERER SLASH-KOMMANDOER
Hver slash-kommando som Et Tillegg oppretter, har En Lua-funksjon knyttet til Den. Når brukeren skriver slash-kommandoen, Kaller WoW Lua-funksjonen. Internt opprettholder WoW en ¡ ° slashcmdlist¡ ±, som er en tabell som kartlegger alle de forskjellige slash-kommandoene til funksjonene de skal ringe. Du kan tenke på dette som en telefonbok. (Husk tilbake før chatterom OG IM, når folk brukte telefonen J) slash-kommandoene er som navnene og funksjonene er som telefonnumrene. Når brukeren skriver inn en slash-kommando, Går WoW gjennom slash-kommandoene (navn) til den finner den riktige. Deretter kaller det funksjonen (telefonnummer) for den oppføringen. Her¡s the Lua for å opprette en slash-kommando:
SlashCmdList = TthAog2SetMyBattleCry;
Denne linjen setter funksjonen for ¡ ° tth_aog2_set_my_battle_cry ¡ ± SLASH-kommando til ¡ ° tthaog2setmybattlecry¡ ±. Hvis ¡ °tth_aog2_set_my_battle_cry ¡ ± KOMMANDOEN ¡eksisterer ikke allerede i ¡ ° SlashCmdList ¡ ± Tabellen blir Den automatisk opprettet. (Praktisk, er¡t det ) For at dette skal kunne fungere, må vi¡d definere den ¡ ° tthaog2setmybattlecry ¡ ± funksjonen et sted I vår lua-Kode. Funksjonen kan se slik ut:
funksjon TthAog2SetMyBattleCry(msg)
— set the battle cry, for bruk senere
TthAog2MyBattleCry = msg;
end
(et ord på konvensjonen: legg merke til at vi brukte all-caps for slash-kommandonavnet. Det vil si at VI skrev TTH_AOG2_SET_MY_BATTLE_CRY¡ ± i stedet For ¡ ° tthaog2setmybattlecry¡ ±. I denne guiden, vi¡ll bruke all-caps for konstanter c verdier som aldri bør endre seg selv om verden smuldrer opp i interstellar støv eller Snøstorm Nerfs Prester eller noe like skremmende. Hver gang du ser meg bruke et all-caps-navn, vil du¡vite at jeg¡m viser deg en konstant.)
Pop quiz: hva skriver en bruker for å kjøre den nye slash-kommandoen Ok, bekjenner jeg. Det er et lurespørsmål. Selv om ovennevnte linje Av Lua skaper en slash-kommando og knytter En Lua-funksjon til den, har vi fortsatt ikke noen måte å utføre den på. WoW bruker en kjekk liten aliasing system for å knytte hva brukeren skriver med selve skråstrek kommandoer. Her¡s Lua-koden for å gjøre det:
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = «/setmybattlecry2»;
nå hvis brukeren skriver ¡ ° /setmybattlecry2 ikke I lysken!¡±, skråstrek kommando ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± vil bli henrettet, forårsaker funksjon ¡°TthAog2SetMyBattleCry¡± å bli kalt med parameteren ¡°Ikke i lysken!¡±. (Vi legger ¡°2¡± ved utgangen av ¡°/setmybattlecry2¡± fordi vi¡ll revidere vår AddOn i senere deler av denne håndboken og vi don¡t vil navnene til konflikt.)
hvorfor det ekstra trinnet hvorfor¡t oppretter skråstrek-kommandoen ¡ ° tth_aog2_set_my_battle_cry ¡ ± gjør det automatisk slik at brukeren kan skrive ¡ ° /tth_aog2_setmybattlecry for Å kjøre det det er to grunner. Du kan allerede se den første: selv om våre interne navn kan gjøre mye fornuftig i vår kode, de¡re ofte veldig stygg å vise til brukere. Den andre grunnen er viktigere: dette ekstra trinnet gjør at flere søkeord kan utføre samme skråstrek kommando. Å skrive ¡ °/setmybattlecry2 ¡ ± er en slags smerte. La¡s gi folk en kortere vei:
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = «/ smbc2»;
nå kan brukere av Vår AddOn skrive enten ¡ ° /setmybattlecry2 ¡ ± eller ¡ ° /smbc2 ¡ ± for å stille inn kampropet. Legg merke til at i den konstante delen (SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2) har vi lagt til en ¡ ° 2 ¡ ± i stedet for en ¡ ° 1 ¡ ± denne gangen. Vi kan legge til et tredje søkeord ved å legge til en ¡ ° 3 ¡ ± i stedet og så videre.
selv om skråstrek-kommandoer ikke er like fancy eller så visuelt tiltalende som vinduer og knapper, er de¡ofte praktiske for brukerne. Og de¡er mye enklere for deg å lage. (Hvis du fortsatt vil ha et grafisk grensesnitt Til Tillegget ditt, og du sannsynligvis gjør det, vær tålmodig. Vi¡vil dekke Det I Del Syv av denne veiledningen.)
LUA VARIABLER
du har kanskje lagt merke til noe nytt i funksjonen ovenfor. Her er det igjen, hvis du savnet det:
funksjon TthAog2SetMyBattleCry (msg)
– sett kampkrypet, for bruk senere
TthAog2MyBattleCry = msg;
slutt
Den ¡ ° Tthaog2mybattlecry = msg; ¡ ± er den nye delen. ¡ °Tthaog2mybattlecry ¡ ± er en lua-Variabel. Variabler er bare spor for å holde noen verdi av ditt valg. Som mange skriptspråk er Lua veldig fleksibel i å håndtere variabler. Hvis du¡ve brukt et ¡°sterkt skrevet¡± programmeringsspråk som C++, du lurer kanskje på om den variable¡e ¡°type¡±. Don¡T. Du kan tenke På Lua variabler som store tomme bokser som kan holde stort sett alt du vil lagre der. I Dette Tillegget lagrer vi det foretrukne kampropet til brukeren i variabelen.
en viktig del av variablene er ¡ ° omfang¡ ±. Omfang betyr i hovedsak ¡ ° hvilken kode kan se denne variabelen ¡ ± som standard, variabler har ¡ ° globalt omfang¡ ±, mange av funksjonene dine kan se variabelen. Den andre typen omfang er ¡ ° lokale omfang ¡ ± Hva dette betyr for oss er at kun kode innenfor den samme ¡ ° blokk ¡ ± kan se variabelen. En ¡ ° blokk ¡ ± betyr i utgangspunktet hryvnias til neste slutt hryvnias. (Den tekniske definisjonen av omfang I Lua er mer komplisert,men vi trenger ikke å bekymre oss for disse detaljene her.)
i vårt eksempel ovenfor er ¡ ° tthaog2mybattlecry ¡ ± en ¡ ° global variabel ¡ ± Linjen ¡ ° tthaog2mybattlecry = Msg;¡ ± innen den ¡ ° tthaog2setmybattlecry ¡ ± Funksjonen Opprettet Den. For de av dere som kommer fra språk Som C++, kan dette virke counterintuititive. Men I Lua, hvis en variabel ikke er eksplisitt identifisert som å ha lokalt omfang, er det automatisk globalt. Selv om det deklareres innenfor en funksjon. Så følgende ville fungere:
funksjon TthAog2SetMyBattleCry(msg)
— sett kampkrypet, for bruk senere
TthAgo2MyBattleCry = msg;
slutt
funksjon TTHAog2Event()
— send en melding til chat
SendChatMessage(tthaog2mybattlecry, «Si»);
End
legg merke til at tthaog2mybattlecry brukes I Begge Funksjonene. På begge steder refererer det til samme variabel. Bruke boksen analogi, hvis TthAog2SetMyBattleCry setter en verdi i boksen, TthAog2Event kan se inn i boksen og se at verdien.
men å erklære globale variabler på denne måten er dårlig praksis. Det er mye bedre å erklære dem øverst I Lua-filen din. Dette har to fordeler:
1) den fullstendige listen over globale variabler er der, hvor du enkelt kan se dem alle i et blikk
2) du kan være sikker på at variabelen er riktig initialisert.
så det er mye å foretrekke å gjøre dette:
– denne variabelen holder vårt kamprop
TthAog2MyBattleCry = » Ikke i ansiktet!»;
funksjon TthAog2SetMyBattleCry(msg)
— sett kampkrypet, for bruk senere
TthAog2MyBattleCry = msg;
end
funksjon TthAog2Event ()
— send en melding til chat
SendChatMessage (TthAog2MyBattleCry,»SI»);
end
Nå er det mye lettere å se hva som skjer.
Lokale variabler er ofte nyttige når vi bare trenger en verdi kort. Ved å bruke en lokal, er det veldig klart hvilken kode som endrer variabelen. Fordi den lokale ikke¡t eksisterer veldig lenge, kan du vanligvis se all koden som kan endre den på et øyeblikk. Det ville være en god ide å ekko det nye kampkrypet tilbake til brukeren når de satte det. La¡s endre TthAog2SetMyBattleCry for å gjøre dette:
funksjon TthAog2SetMyBattleCry (msg)
— Still inn kampropet, for bruk senere.
TthAog2MyBattleCry = msg;
— Ekko det nye kampropet for bekreftelse.
lokalt ekko = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat(echo);
end
vi¡har introdusert flere nye ting i tillegg til den lokale variabelen, så la¡s kort se på dem en etter en:
local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
denne linjen oppretter en lokal variabel med navnet ¡ ° ekko for å lagre verdien som vi ¡vil ekko til brukeren. Delen etter likhetstegnet lager en tekststreng som begynner med innholdet i variabelen tth_aog2_battle_cry_set_to og slutter med innholdet i msg, og tilordner deretter tekststrengen til den lokale variabelen.
uh-oh, vi har¡t definert variabelen tth_aog2_battle_cry_set_to. Vi¡vil definere det med denne linjen, plassert øverst i filen vår:
lokal tth_aog2_battle_cry_set_to = «Kampkryp satt til «;
som du kan se, inneholder tth_aog2_battle_cry_set_to-variabelen bare en streng. Fordi denne strengen aldri endres, kalles den en ¡ ° konstant¡ ±. Plassere konstant på toppen av filen er alltid en god ide. På den måten, hvis du trenger å endre ordlyden, er strengen veldig lett å finne. (Som vi¡vil se I Del Seks, gjør det også lokalisering, eller støtte for flere språk, mye enklere.) Vi har også erklært tth_aog2_battle_cry_set_to-variabelen som lokal, selv om den ikke er i en funksjon. Dette betyr at variabelen eksisterer bare i denne filen, og ikke i noen andre. Hvis du¡bare bruker en variabel i en fil, er det alltid godt å gjøre det lokalt. På den måten er du sikker på at ingen kode utenfor filen din kan ha endret den. (Du lurer kanskje på hvorfor vi gjorde¡t gjøre TthAog2MyBattleCry lokale. Det¡er mest fordi jeg ønsket å vise deg hvordan en global variabel så ut. Men det¡er en annen grunn også, som du¡vil se I Del Tre.)
nå la¡s flytte til neste linje av vår funksjon:
TthAog2OutputToChat (echo);
denne linjen kaller en funksjon som vi må skrive, for å sende en melding til chatområdet. Det variable ekkoet sendes til funksjonen. Her¡s hvordan denne funksjonen ser ut:
funksjon TthAog2OutputToChat(msg)
if (DEFAULT_CHAT_FRAME) deretter
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end
denne funksjonen avgjør om vi kan vise tekst til standard chat-ramme og, hvis så, viser teksten i msg til chat-området. Denne teksten er ikke sett av andre spillere c det er strengt informativ tekst for spilleren som kjører AddOn. Hvis du¡ikke kjent med hvordan overføring av variabler til funksjoner fungerer, er det her hryvnias hvordan det går: når TthAog2SetMyBattleCry kaller TthAog2OutputToChat ved å sende echo-variabelen, Lua Noen ting bak kulissene. Det skaper en lokal variabel kalt msg I TthAog2OutputToChat, og kopierer deretter verdien i echo til msg. Dette gir oss en lokal variabel kalt msg i tthaog2outputtochat-funksjonen, som vi kan bruke som vi vil.
vi måtte opprette en funksjon for Å gjøre dette. Vi kunne ha satt koden til utgang til chat-området direkte I tthaog2setmybattlecry-funksjonen. Men ved hjelp av en funksjon gjør det veldig enkelt å skrive ut tekst til chat-området. Hvis vi trengte å gjøre dette et annet sted, trenger vi¡d bare å ringe funksjonen, ikke kopiere en hel blokk med kode. (Vi¡vil dra nytte av dette I Del Tre.) Også, hvis vi bestemte oss for å vise tekst til brukeren på en annen måte, trenger vi¡d bare å endre koden i funksjonen. Ingen annen kode vil bli påvirket, noe som reduserer sjansen for en feil. Til slutt forenklet Det tthaog2setmybattlecry-funksjonen. Lett-å-lese koden er lett å feilsøke kode.
Vi har¡t fullstendig utforsket Lua-strenghåndtering eller WoW – rammehierarkiet, men å gjøre det på dette punktet vil være en distraksjon fra vårt hovedfokus på slash-kommandoer. Forhåpentligvis er det ovenfor tilstrekkelig for deg å forstå hva som skjer i denne versjonen av Tillegget.
SETTE DET hele sammen
vi¡re nå klar til å omskrive battle cry AddOn å tillate brukeren å angi en foretrukket battle cry via skråstrek kommandoer. Akkurat som I Del Ett, det er tre filer involvert:
– toc-fil
– XML-fil
– Lua-kode filen
innholdsfortegnelsen filen er nesten uendret fra Del En:
## Interface: 11000
## Title: TenTonHammer Guide Part 2
## Author: TenTonHammer.com
## Notes: Makes your character scream a customizable battle cry when combat begins
TthAog2.xml
Vi¡ve bare endret ¡°1¡± å ¡°2¡±, og endret notater for å ringe kamprop ¡°tilpasses ¡±, i stedet for ¡°dumt¡±. Lagre denne toc-filen Som TthAog2.toc til en mappe som heter TthAog2 under mappen AddOns.
XML-filen er identisk Med Første DEL, bortsett fra å endre ¡ °1 til ¡°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/»>
<Skriptfil= » TthAog2.lua»/>
<Frame name=» TthAog2Core»>
<Scripts>
<OnLoad>TthAog2Load();</OnLoad>
<OnEvent>TthAog2Event();</OnEvent>
</Scripts>
</Frame>
</Ui>
Lagre DENNE XML-filen Som TthAog2.xml til en mappe som heter TthAog2 under mappen AddOns.
Til Slutt har Vi Lua-filen som inneholder selve koden. Du har allerede sett alle disse brikkene:
– Konstante strenger.
lokal TTH_AOG2_BATTLE_CRY_SET_TO = » Kamprop satt til «;
– denne variabelen holder vårt kamprop.
TthAog2MyBattleCry = » Ikke i ansiktet!»;
— Utility funksjon for utskrift til chat området
funksjon TthAog2OutputToChat(msg)
hvis (DEFAULT_CHAT_FRAME) deretter
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end
— Kalt når AddOn laster.
funksjon TthAog2Load ()
— Registrer deg for en hendelse.
dette:RegisterEvent («PLAYER_REGEN_DISABLED»);
— Opprett slash-kommandoen.
SlashCmdList = TthAog2SetMyBattleCry;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = «/setmybattlecry2»;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = «/smbc2»;
slutt
— Kalt når slash-kommandoen kjøres.
funksjon TthAog2SetMyBattleCry (msg)
– Sett kampkrypet, for bruk senere.
TthAog2MyBattleCry = msg;
— Ekko det nye kampropet for bekreftelse.
lokalt ekko = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end
— Kalt til å håndtere hendelsen som vi¡har registrert.
funksjon TthAog2Event ()
— Send en melding til chat.
SendChatMessage (TthAog2MyBattleCry,»SI»);
end
Sammenlignet Med Første del har vi¡lagt Til Den Globale variabelen tthaog2mybattlecry, lagt til koden for å opprette slash-kommandoen, lagt Til tthaog2setmybattlecry-funksjonen, og brukte den Globale variabelen tthaog2mybattlecry I TthAog2Event. Vi¡har også lagt til flere kommentarer.
Lagre denne lua-filen Som TthAog2.lua til en mappe som heter TthAog2 under mappen AddOns.
hva GJØR det
start Nå WoW og kom i en kamp. Du¡vil se det dumme kampkryet som ikke Er i ansiktet!¡±. Dette gjenspeiler standardverdien for variabelen tthaog2mybattlecry. Skriv nå følgende:
/ smbc2 Til Kamp!
du¡vil se det nye kampropet ekko til chatområdet. Nå får i en annen kamp, og du¡ll se ¡ ° Å Kjempe!¡ ± i stedet for ¡ ° ikke I ansiktet!¡±. Hvis du foretrekker å slå av kampropet, kan Du skrive bare:
/smbc2
vårt ekko er¡t veldig godt formulert for dette tilfellet (det vil bare si ¡ °kampropet satt til¡ ±). Hvis dette var en reell AddOn for bruk av allmennheten, vi¡d teste verdien av msg og vise en spesiell ekko hvis brukeren er clearing kamprop. Fordi dette bare er et eksempel, vant vi¡t komplisere koden.
SISTE ORD
hvis du prøver den nye versjonen av AddOn og din karakter skriker to kamprop, er det sannsynligvis fordi Du fortsatt Har AddOn Fra Del En av denne guiden installert og aktiv. Fordi vi var forsiktige med å navngi, forårsaker dette vant¡t noen feil. Men det er sannsynligvis¡t hva du vil, heller. Bare få deaktivere Eller slette den første versjonen C den nye er bedre uansett.
det er imidlertid et problem, skjønt: kampropet ditt går tapt mellom øktene. Hver gang Du lukker Og starter WoW på Nytt, vil du¡være tilbake til ¡ ° ikke I ansiktet!¡±. Når du¡re klar, gå videre Til Del Tre, og vi¡vil se hvordan du gjør din foretrukne kamprop ¡ ° til en pinne ¡ ± mellom øktene.