WOW UI Mod Guide-Kapitel 2 snedstreck kommandon

köp WoW Gold billigt

  • köp WoW Classic Gold Safe på PVPBank med kupong SEAN. Betalningar: Paypal, Kredit.
  • köp WoW Gold Paypal på Mulefactory. WoW Klassiska Kupong: wowcgold & WoW Guld Kupong: wowrgold. Fantastiska priser, omedelbar leverans. Betalningar: Paypal, Skrill, Bitcoin.
  • UI Mod Guide-Kapitel 1
  • UI Mod Guide-Kapitel 2
  • UI Mod Guide-Kapitel 3
  • UI Mod Guide-Kapitel 4
  • UI Mod Guide-Kapitel 5
  • UI Mod Guide-Kapitel 6
  • UI Mod Guide-Kapitel 7

del 2 Index

  • Vad är slash-kommandon, och varför bryr jag mig
  • hur fungerar slash-kommandon
  • LUA-filer
  • att sätta ihop allt
  • Vad gör det
  • Slutord

Välkommen till del två av vår guide för att skapa Wow AddOns! I den här delen bygger vi på det enkla tillägget vi skapade i del ett. Även om du redan är bekant med att skapa tillägg kanske du snabbt vill skumma del ett.

i del två antar jag att du är bekant med grunderna i Lua, XML och toc-filer. Jag vann dock inte att du har omfattande programmeringserfarenhet. Vårt fokus kommer att vara på hantering ¡°slash¡± kommandon. Längs vägen ser vi också lite närmare på lua-kodning. När vi har gjort det, vi har utökat det ganska lama stridsropettillägget från del ett för att kunna anpassas av slutanvändare utan att kräva att de ändrar lua-koden. Om du inte redan har tillägget från Del Ett kan du hämta filerna <här>.

vad är snedstreck kommandon, och varför bryr jag mig

om du bisexuell ve spelat WoW i mer än cirka fem minuter, du bisexuell re bekant med snedstreck kommandon. De exporterar de saker som Macau/säg Pau och Pau / vem Pau som du skriver medan du spelar WoW. Slash-kommandon är ett mycket bekvämt sätt att utföra en åtgärd utan att använda musen. För AddOn writers är slash-kommandon mycket enklare att implementera än ett grafiskt användargränssnitt med windows och knappar. Om dina behov är enkla kan slash-kommandon vara allt som ditt tillägg kräver.

som ni vet, WoW ger om femtioelva-gazillion sådana kommandon. Vad du kanske inte vet är att tillägg kan lägga till sina egna snedstreckkommandon. Så låt oss ta en titt på vad som krävs för att stöta på slash-kommandot räkna till femtioelva-gazillion-and-one.

hur fungerar SLASH-kommandon

varje slash-kommando som ett tillägg skapar har en Lua-funktion associerad med den. När användaren skriver slash-kommandot, kallar WoW Lua-funktionen. Internt, WoW upprätthåller en snedstreck i snittcmdlist i form av en tabell som kartlägger alla de olika snedstreckskommandona till de funktioner de ska anropa. Du kan tänka på detta som en telefonbok. (Kom ihåg tillbaka innan chattrum och IM, när folk använde telefonen J) snedstreck kommandon är som namnen och funktionerna är som telefonnummer. När användaren skriver ett snedstreckskommando går WoW igenom snedstreckskommandona (namn) tills den hittar den rätta. Sedan ringer det funktionen (telefonnummer) för den posten. Här är lua för att skapa ett snedstreckskommando:

SlashCmdList = tthaog2setmybattlecry;

den här raden ställer in funktionen för kommandot tth_aog2_set_my_battle_cry för att skapa ett SNEDSTRECKSKOMMANDO: till tthaog2setmybattlecry för att skapa ett SNEDSTRECKSKOMMANDO. Om ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± slash kommandot spelar¡t redan finns i ¡°SlashCmdList¡± bordet, det skapas automatiskt. (Bekvämt, är inte det) för att detta faktiskt ska fungera måste vi definiera funktionen för tthaog2setmybattlecry för att definiera funktionen för TthAog2SetMyBattleCry för Tthaog2 i vår lua-kod. Funktionen kan se ut så här:

funktion TthAog2SetMyBattleCry(msg)
-Ställ in stridsropet, för användning senare
TthAog2MyBattleCry = msg;
end

(ett ord om konvention: Lägg märke till att vi använde all-caps för slash-kommandonamnet. Det vill säga, vi skrev Tth_aog2_set_my_battle_cry i stället för tthaog2setmybattlecry i stället för tthaog2setmybattlecry. I den här guiden, vi kommer att använda all-caps för konstanter C-värden som aldrig bör förändras även om världen smuler i interstellärt damm eller snöstorm Nerfs präster eller något lika skrämmande. Varje gång du ser mig använda en all-caps namn, du bisexuell ll vet att jag bisexuell m visar dig en konstant.)

Pop quiz: Vad gör en användartyp för att köra det nya slash-kommandot okej, erkänner jag. Det är en trickfråga. Även om ovanstående linje av Lua skapar ett slash-kommando och associerar en Lua-funktion med den, har vi fortfarande ingen möjlighet att utföra den. WoW använder ett snyggt aliasing-system för att associera vad användaren skriver med de faktiska snedstreckkommandona. Här är det en lua-kod för att göra det:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = ”/setmybattlecry2”;

nu om användaren skriver in oc/setmybattlecry2 inte i ljumsken!¡±, slash kommandot ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± kommer att utföras, vilket funktionen ¡°TthAog2SetMyBattleCry¡± kallas med parametern ¡°Inte i ljumsken!¡±. (Vi satte in en ¡°2¡± i slutet av ¡°/setmybattlecry2¡± eftersom vi¡ll se över vår AddOn i senare delar av denna guide och vi don¡t namnen till konflikter.)

varför det extra steget varför skapar inte bisexuell t slash-kommandot bisexual tth_aog2_set_my_battle_cry bisexual gör det automatiskt så att användaren kan skriva in bisexual/tth_aog2_setmybattlecry för att köra det det finns två skäl. Du kan redan se den första: även om våra interna namn kan göra massor av mening i vår kod, de bisexuell re ofta fruktansvärt ful att visa för användarna. Den andra anledningen är viktigare: detta extra steg tillåter flera sökord kan utföra samma snedstreck kommando. Typning av Macau/setmybattlecry2 Pain är typ av smärta. Låt oss ge människor ett kortare sätt:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = ”/smbc2”;

nu kan användare av vår AddOn skriva in antingen Macau/setmybattlecry2 eller sau/smbc2 för att ställa in stridsropet. Lägg märke till att i den konstanta delen (SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2) bifogade vi en 2 2 i stället för en 1 1 i denna gång. Vi skulle kunna lägga till ett tredje nyckelord, genom att lägga till en 3-3 i stället, och så vidare.

även snedstreck kommandon aren bisexuell t så fancy eller så visuellt tilltalande som fönster och knappar, de bisexuell re ofta bekvämt för användarna. Och de bisexuell re en hel del lättare för dig att skapa. (Om du fortfarande vill ha ett grafiskt gränssnitt till din AddOn, och du förmodligen gör, ha tålamod. Vi kommer att täcka det i del sju av denna guide.)

lua-variabler

du kanske har märkt något nytt i funktionen ovan. Här är det igen, om du missade det:

funktion tthaog2setmybattlecry (msg)
– Ställ in stridsropet, för användning senare
TthAog2MyBattleCry = msg;
end

den Tthaog2mybattlecry = msg, den nya delen är den nya delen. Tthaog2mybattlecry är en Lua-variabel. Variabler är bara slots för att hålla något värde av ditt val. Liksom många skriptspråk är Lua mycket flexibel när det gäller att hantera variabler. Om du¡ve används en ¡°skrivit starkt¡± programmeringsspråk såsom C++, du kanske undrar om den rörliga¡s ¡°typ¡±. Du kan tänka på Lua-variabler som stora tomma lådor som rymmer i stort sett allt du vill lagra där. I denna AddOn lagrar vi användaren av s föredragna stridsrop i variabeln.

en viktig aspekt av variablerna är omfattningen av den totala omfattningen av den. Omfattning betyder i huvudsak att den här variabeln kan se vilken kod som standard, variabler har den globala omfattningen av den globala omfattningen av den, många av dina funktioner kan se variabeln. Den andra typen av tillämpningsområde är lokal tillämpningsområde. Vad det här betyder för oss är att endast kod inom samma block kan se variabeln. Ett block för att blockera den betyder i princip att det är till nästa slut. (Den tekniska definitionen av omfattning i Lua är mer komplicerad, men vi behöver inte oroa oss för dessa detaljer här.)

i vårt ovanstående exempel, är tthaog2mybattlecry Macau en global variabel för globala variabler, en variabel med global räckvidd. Linjen bisexuell tthaog2mybattlecry = msg; i tthaog2setmybattlecry funktionen skapade den. För er som kommer från språk som C++ kan detta verka kontraintuitivt. Men i Lua, om en variabel inte uttryckligen identifieras som lokal räckvidd, är den automatiskt global. Även om det deklareras inom en funktion. Så följande skulle fungera:

funktion TthAog2SetMyBattleCry(msg)
– Ställ in stridsropet, för användning senare
Tthago2mybattlecry = msg;
end

funktion tthaog2event()
– skicka ett meddelande till chatten
SendChatMessage(tthaog2mybattlecry, ”say”);
End

lägg märke till att tthaog2mybattlecry används i båda funktionerna. På båda ställena hänvisar det till samma variabel. Med hjälp av rutan analogi, om TthAog2SetMyBattleCry sätter ett värde i rutan, TthAog2Event kan titta in i rutan och se det värdet.

att deklarera globala variabler på detta sätt är dock dålig praxis. Det är mycket bättre att förklara dem högst upp i din Lua-fil. Detta har två fördelar:

1) den fullständiga listan över globala variabler finns där, där du enkelt kan se dem alla i en blick

2) Du kan vara säker på att variabeln är korrekt initialiserad.

så det är mycket att föredra att göra detta:

– denna variabel håller vårt stridsrop
TthAog2MyBattleCry = ” inte i ansiktet!”;

funktion tthaog2setmybattlecry (msg)
– Ställ in stridsropet, för användning senare
TthAog2MyBattleCry = msg;
end

funktion TthAog2Event ()
– skicka ett meddelande till chatt
SendChatMessage (TthAog2MyBattleCry, ”säg”);
end

nu är det mycket lättare att se vad som händer.

lokala variabler är ofta användbara när vi bara behöver ett värde kort. Genom att använda en lokal är det mycket tydligt vilken kod som ändrar variabeln. Eftersom den lokala inte existerar mycket länge kan du vanligtvis se all kod som kan ändra den med en överblick. Det skulle vara bra att upprepa det nya stridsropet tillbaka till användaren när de ställer in det. Låt s ändra tthaog2setmybattlecry att göra detta:

funktion TthAog2SetMyBattleCry (msg)
– Ställ in stridsropet, för användning senare.
TthAog2MyBattleCry = msg;

– Echo det nya stridsropet för bekräftelse.
lokalt eko = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end

vi har infört flera nya saker utöver den lokala variabeln, så låt oss kortfattat titta på dem en efter en:

local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;

den här raden skapar en lokal variabel med namnet bisexuell Echo för att lagra det värde som vi kommer att echo för användaren. Delen efter likhetstecknet gör en textsträng som börjar med innehållet i variabeln TTH_AOG2_BATTLE_CRY_SET_TO och slutar med innehållet i msg och tilldelar sedan den textsträngen till den lokala variabeln.

Uh-oh, vi har t tth_aog2_battle_cry_set_to variabeln tth_aog2_battle_cry_set_to. Vi definierar den med den här raden, placerad högst upp i vår fil:

lokal tth_aog2_battle_cry_set_to = ”Battle cry set to ”;

som du kan se innehåller variabeln tth_aog2_battle_cry_set_to helt enkelt en sträng. Eftersom den här strängen aldrig ändras kallas den en permanent konstant. Att placera din konstant högst upp i filen är alltid en bra ide. På det sättet, om du behöver ändra formuleringen, är strängen väldigt lätt att hitta. (Som vi kommer att se i del sex, det gör också lokalisering, eller stödja flera språk, mycket lättare.) Vi har också förklarat variabeln tth_aog2_battle_cry_set_to som lokal, även om den inte finns i en funktion. Det betyder att variabeln bara finns i den här filen och inte i någon annan. Om du bara använder en variabel i en fil, det är alltid bra att göra det lokalt. På så sätt är du säker på att ingen kod utanför din fil kan ha ändrat den. (Du kanske undrar varför vi inte gjorde tthaog2mybattlecry lokala. Det är mest för att jag ville visa dig hur en global variabel såg ut. Men det finns också en annan anledning, som du kommer att se i del tre.)

låt nu s flytta till nästa rad i vår funktion:

TthAog2OutputToChat(echo);

den här raden kallar en funktion som vi måste skriva, för att skicka ett meddelande till chattområdet. Det variabla ekot skickas till funktionen. Här är hur denna funktion ser ut:

funktion TthAog2OutputToChat (msg)
if(DEFAULT_CHAT_FRAME) då
DEFAULT_CHAT_FRAME:AddMessage (msg);
end
end

denna funktion avgör om vi kan visa text till standardchattramen och i så fall visar texten i msg till chattområdet. Denna text ses inte av andra spelare C det är strikt informativ text för spelaren som kör tillägget. Om du inte känner till hur passerande variabler till funktioner fungerar, här är det hur det går: när TthAog2SetMyBattleCry kallar TthAog2OutputToChat genom att passera echo-variabeln, Lua några saker bakom kulisserna. Det skapar en lokal variabel med namnet msg i TthAog2OutputToChat och kopierar sedan värdet i echo till msg. Detta ger oss en lokal variabel som heter msg inom tthaog2outputtochat-funktionen, som vi kan använda som vi vill.

vi behövde inte skapa en funktion för att göra detta. Vi kunde ha lagt koden för att mata ut till chattområdet direkt i tthaog2setmybattlecry-funktionen. Men att använda en funktion gör det väldigt enkelt att mata ut text till chattområdet. Om vi behövde göra det någon annanstans behöver vi bara ringa funktionen, inte kopiera ett helt kodblock. (Vi kommer att dra nytta av detta i del tre.) Om vi bestämde oss för att visa text för användaren på ett annat sätt behöver vi bara ändra koden i funktionen. Ingen annan kod skulle påverkas, vilket minskar risken för ett fel. Slutligen förenklade den tthaog2setmybattlecry-funktionen. Lättläst kod är lätt att felsöka kod.

vi har verkligen utforskat t helt lua-stränghantering eller WoW-ramhierarkin, men att göra det vid denna tidpunkt skulle vara en distraktion från vårt huvudfokus för snedstreckskommandon. Förhoppningsvis är ovanstående tillräckligt för att du ska förstå vad som händer i den här versionen av tillägget.

att sätta ihop allt

vi är nu redo att skriva om stridsroptillägget så att användaren kan ange ett föredraget stridsrop via snedstreckskommandon. Precis som i del ett, det finns tre filer inblandade:
– toc-fil
XML – fil
– Lua kod-filen

toc-filen är nästan oförändrad från Del Ett:

## 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 bara bytt ¡°1 ¡±¡°2¡±, och bytte konstaterar att ringa battle cry ¡°anpassningsbara¡± istället för ¡°dumma¡±. Spara den här toc-filen som TthAog2.toc till en mapp med namnet TthAog2 under mappen AddOns.

XML-filen är identisk med del ett, förutom att ändra 1 till ¡°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>

spara den här XML-filen som TthAog2.xml till en mapp med namnet TthAog2 under mappen AddOns.

Slutligen har vi Lua-filen som innehåller själva koden. Du har sett alla dessa bitar redan:

– konstanta strängar.
lokal TTH_AOG2_BATTLE_CRY_SET_TO = ” stridsrop inställd på ”;
– denna variabel håller vårt stridsrop.
TthAog2MyBattleCry = ” inte i ansiktet!”;

– Verktygsfunktion för utskrift till chattområde
funktion TthAog2OutputToChat (msg)
om(DEFAULT_CHAT_FRAME) då
DEFAULT_CHAT_FRAME:AddMessage (msg);
end
end

– kallas när tillägget laddas.
funktion TthAog2Load ()
– registrera dig för en händelse.
detta: Registerhändelse (”PLAYER_REGEN_DISABLED”);

— skapa kommandot slash.
SlashCmdList = TthAog2SetMyBattleCry;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = ”/ setmybattlecry2”;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = ”/smbc2”;
end

— anropas när slash-kommandot körs.
funktion TthAog2SetMyBattleCry (msg)
– Ställ in stridsropet, för användning senare.
TthAog2MyBattleCry = msg;

– Echo det nya stridsropet för bekräftelse.
lokalt eko = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end

– kallas för att hantera händelsen som vi har registrerat oss för.
funktion TthAog2Event ()
– skicka ett meddelande till chatt.
SendChatMessage (TthAog2MyBattleCry, ”säg”);
end

jämfört med del ett har vi lagt till den globala variabeln tthaog2mybattlecry, lagt till koden för att skapa slash-kommandot, lagt till funktionen TthAog2SetMyBattleCry och använt den globala variabeln tthaog2mybattlecry i tthaog2event. Vi har också lagt till fler kommentarer.

spara den här lua-filen som TthAog2.lua till en mapp som heter TthAog2 under mappen AddOns.

vad gör det

börja nu WoW och slåss. Du kommer att se den fåniga stridsropet inte i ansiktet!¡±. Detta återspeglar standardvärdet för variabeln tthaog2mybattlecry. Skriv nu följande:

/ smbc2 till strid!

du kommer att se det nya stridsropet ekade till chattområdet. Nu får du i en annan kamp, och du kommer att se att du kommer att se att du kommer att slåss!istället för att inte i ansiktet!¡±. Om du föredrar att stänga av stridsropet kan du skriva bara:

/smbc2

vårt eko är inte mycket välformulerat för det här fallet (det kommer bara att säga att stridsropet är inställt på Xiaomi). Om detta var en riktig AddOn för användning av allmänheten, testar vi Macau d värdet av msg och visar ett speciellt eko om användaren rensar stridsropet. Eftersom detta är bara ett exempel, vann vi inte t komplicera koden.

sista ord

om du försöker den nya versionen av tillägget och din karaktär skriker två stridsrop, beror det förmodligen på att du fortfarande har tillägget från Del ett i den här guiden installerat och aktivt. Eftersom vi var försiktiga med namngivning, detta vann bisexuell t orsaka några fel. Men det är förmodligen inte heller det du vill ha. Bara få inaktivera eller ta bort den första versionen C den nya är bättre ändå.

det finns dock ett problem med att säga att ditt stridsrop går förlorat mellan sessionerna. Varje gång du stänger och startar om WoW, kommer du att vara tillbaka till Macau inte i ansiktet!¡±. När du är redo, gå vidare till del tre och vi kommer att se hur du gör din favorit stridsrop.