WOW UI Mod Guide-Chapter 2 Slash commando ‘ s

koop WoW Gold goedkoop

  • koop WoW Classic Gold veilig bij PVPBank met coupon SEAN. Betalingen: Paypal, Krediet.
  • koop WoW Gold Paypal bij Mulefactory. WoW Classic Coupon: wowcgold & WoW Gold Coupon: wowrgold. Geweldige prijzen, onmiddellijke levering. Betalingen: Paypal, Skrill, Bitcoin.
  • UI Mod Gids – Hoofdstuk 1
  • UI Mod Gids – Hoofdstuk 2
  • UI Mod Gids – Hoofdstuk 3
  • UI Mod Gids – Hoofdstuk 4
  • UI Mod Gids – Hoofdstuk 5
  • UI Mod Gids, Hoofdstuk 6
  • UI Mod Gids – Hoofdstuk 7

Deel 2 Index

  • Wat zijn slash commando ‘s, en waarom kan mij het schelen
  • Hoe slash commando’ s werken
  • LUA Files
  • Putting het allemaal samen
  • Wat doet het
  • Laatste Woorden

Welkom bij Deel Twee van onze handleiding voor het maken van WoW AddOns! In deze aflevering bouwen we voort op de eenvoudige AddOn die we hebben gemaakt in Deel een. Zelfs als u al bekend bent met het maken van AddOns, wilt u misschien snel deel een afromen.

in Deel Twee ga ik ervan uit dat u vertrouwd bent met de basis van Lua -, XML-en toc-bestanden. Ik neem echter niet aan dat je uitgebreide programmeerervaring hebt. Onze focus ligt op het afhandelen van “slash” commando ‘ s. Onderweg kijken we ook wat beter naar Lua-codering. Wanneer we ‘re gedaan, we’ ll hebben uitgebreid de nogal lame ‘battle cry’ ± AddOn Van deel een aan te passen door eindgebruikers zonder dat ze de Lua-code te wijzigen. Als u de AddOn Van deel 1 niet al hebt, kunt u de bestanden <hier>krijgen.

wat zijn SLASH-commando ‘s, en waarom kan het me schelen

als je WoW Meer dan ongeveer vijf minuten hebt gespeeld, ben je bekend met slash-commando’ s. Ze zijn de dingen als ” zeg ” en ” wie ” die je typt tijdens het spelen WoW. Slash commando ‘ s zijn een zeer handige manier om een actie uit te voeren zonder gebruik te maken van de muis. Voor addon schrijvers, slash commando ‘ s zijn veel eenvoudiger te implementeren dan een grafische gebruikersinterface met windows en knoppen. Als uw behoeften eenvoudig zijn, slash commando ‘ s kunnen zijn alles wat uw AddOn vereist.

zoals u weet, biedt WoW ongeveer talloze-gazillion dergelijke commando ‘ s. Wat je misschien niet weet is dat AddOns hun eigen slash commando ‘ s kunnen toevoegen. Dus laten we eens kijken naar wat er nodig is om de slash commando count te bumpen naar talloze-gazillion-and-one.

Hoe werken SLASH-opdrachten

elke slash-opdracht die een AddOn maakt, heeft een Lua-functie die ermee is geassocieerd. Wanneer de gebruiker het slash commando typt, roept WoW De Lua functie aan. Intern onderhoudt WoW een “SlashCmdList”±, wat een tabel is die alle verschillende slash commando ‘ s in kaart brengt naar de functies die ze moeten aanroepen. Je kunt dit zien als een telefoonboek. (Herinner terug voor chatrooms en IM, toen mensen de telefoon J) de slash commando ‘ s zijn als de namen en de functies zijn als de telefoonnummers. Wanneer de gebruiker een slash commando typt, loopt WoW door de slash commando ‘ s (namen) totdat het de juiste vindt. Dan roept het de functie (telefoonnummer) voor dat item. Hier is de Lua om een slash commando aan te maken:

SlashCmdList = TthAog2SetMyBattleCry;

deze regel stelt de functie voor de “TTH_AOG2_SET_MY_BATTLE_CRY” slash commando in op “TthAog2SetMyBattleCry”±. Als de opdracht “TTH_AOG2_SET_MY_BATTLE_CRY” slash niet reeds bestaat in de “SlashCmdList” tabel, wordt deze automatisch aangemaakt. (Handig, isn’t it) om dit echt te laten werken, moeten we de functie “TthAog2SetMyBattleCry” ergens in onze Lua-code definiëren. De functie kan er als volgt uitzien:

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

(een woord over conventie: merk op dat we all-caps hebben gebruikt voor de slash commando naam. Dat wil zeggen, we schreven TTH_AOG2_SET_MY_BATTLE_CRY¡± in plaats van ¡°TthAog2SetMyBattleCry¡±. In deze gids, we ‘ ll gebruiken all-caps voor constanten C waarden die nooit mogen veranderen, zelfs als de wereld afbrokkelt in interstellaire stof of Sneeuwstorm nerfs priesters of iets even afschuwelijk. Elke keer als je me een all-caps naam ziet gebruiken, Weet je dat ik je een constante laat zien.)

Pop quiz: wat typt een gebruiker om het nieuwe slash commando uit te voeren Oké, ik beken. Het is een strikvraag. Hoewel de bovenstaande regel van Lua een slash commando creëert en een Lua functie ermee associeert, hebben we nog steeds geen enkele manier om het uit te voeren. WoW gebruikt een handige aliasing systeem om te associëren wat de gebruiker typt met de werkelijke slash commando ‘ s. Hier is de Lua code om het te doen:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = “/ setmybattlecry2”;

nu als de gebruiker ¡°/setmybattlecry2 niet in de lies typt!¡ ± , het slash commando ¡°TTH_AOG2_SET_MY_BATTLE_CRY ¡±zal worden uitgevoerd, waardoor de functie ¡°TthAog2SetMyBattleCry ¡±zal worden aangeroepen met de parameter ¡°niet in de lies!¡±. (We zetten een ¡°2¡± aan het einde van ¡°/setmybattlecry2¡± omdat we onze AddOn in latere delen van deze gids zullen herzien en we niet willen dat de namen conflicteren.)

waarom de extra stap waarom het aanmaken van het slash commando “TTH_AOG2_SET_MY_BATTLE_CRY” automatisch maakt dat de gebruiker “/tth_aog2_setmybattlecry ” kan typen om het uit te voeren zijn er twee redenen. U kunt de eerste al zien: hoewel onze interne namen veel zin hebben in onze code, zijn ze vaak vreselijk lelijk om aan gebruikers te laten zien. De tweede reden is belangrijker: met deze extra stap kunnen meerdere zoekwoorden hetzelfde slash commando uitvoeren. Het typen van “/ setmybattlecry2” is een beetje lastig. Laten we mensen een kortere weg geven:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = “/ smbc2”;

nu kunnen gebruikers van onze AddOn ofwel ¡°/setmybattlecry2¡± of ¡°/smbc2¡± typen om de strijdkreet in te stellen. Merk op dat we in het constante deel (SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2) een ¡°2¡± hebben toegevoegd in plaats van een ¡°1¡± Deze keer. We kunnen een derde trefwoord toevoegen, door in plaats daarvan een ¡°3¡± toe te voegen, enzovoort.

hoewel slash-commando ‘ s net zo mooi of visueel aantrekkelijk zijn als vensters en knoppen, zijn ze vaak handig voor gebruikers. En ze zijn een stuk makkelijker voor u om te creëren. (Als je nog steeds een grafische interface naar je AddOn wilt, en dat doe je waarschijnlijk, wees dan geduldig. In het zevende deel van deze gids zullen wij dat behandelen.)

Lua variabelen

u kunt iets nieuws hebben opgemerkt in de functie hierboven. Hier is het weer, voor het geval je het gemist hebt:

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

de “TthAog2MyBattleCry = msg” is het nieuwe deel. “TthAog2MyBattleCry” is een Lua variabele. Variabelen zijn gewoon slots om elke waarde van uw keuze te houden. Zoals veel scripttalen is Lua zeer flexibel in het omgaan met variabelen. Als u ” een “sterk getypte” programmeertaal zoals C++ hebt gebruikt, kunt u zich afvragen wat de variabele ” s “type” ±is. Je kunt Lua variabelen zien als grote lege vakken die vrijwel alles kunnen bevatten wat je daar wilt opslaan. In deze AddOn, slaan we de gebruiker ‘ s voorkeur battle cry in de variabele.

een belangrijk aspect van de variabelen is “scope”±. Bereik betekent in wezen “welke code deze variabele kan zien”. standaard hebben variabelen “globaal bereik”. veel van uw functies kunnen de variabele zien. Het andere type toepassingsgebied is “lokaal toepassingsgebied”. Wat dit voor ons betekent is dat alleen code binnen hetzelfde blok ¡±de variabele kan zien. Een “blok” betekent in principe “tot het volgende einde”. (De technische definitie van het toepassingsgebied in Lua is ingewikkelder, maar we hoeven ons hier geen zorgen te maken over die details.)

in ons bovenstaande voorbeeld is ¡°TthAog2MyBattleCry¡± een ¡°globale variabele ¡±, een variabele met globale reikwijdte. De lijn “TthAog2MyBattleCry” = msg; “binnen de functie “TthAog2SetMyBattleCry” heeft het gecreëerd. Voor degenen onder u afkomstig uit talen als C++, kan dit contra-intuïtief lijken. Maar in Lua, als een variabele niet expliciet wordt geïdentificeerd als met lokale scope, is deze automatisch globaal. Zelfs als het binnen een functie wordt verklaard. Dus het volgende zou werken:

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

functie tthaog2event()
— send a message to chat
SendChatMessage(TthAog2MyBattleCry, “SAY”);
end

merk op dat Tthaog2mybattlecry in beide functies wordt gebruikt. Op beide plaatsen verwijst het naar dezelfde variabele. Met behulp van de doos analogie, als TthAog2SetMyBattleCry zet een waarde in de doos, TthAog2Event kan kijken in de doos en zie die waarde.

het op deze manier aangeven van globale variabelen is echter een slechte praktijk. Het is veel beter om ze aan de bovenkant van uw Lua-bestand te declareren. Dit heeft twee voordelen:

1) de volledige lijst van globale variabelen is hier, waar u ze gemakkelijk in één oogopslag kunt zien

2) U kunt er zeker van zijn dat de variabele correct is geïnitialiseerd.

dus het is veel beter om dit te doen:

— deze variabele bevat onze strijdkreet
TthAog2MyBattleCry = ” niet in het gezicht!”;

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

function TthAog2Event ()
— send a message to chat
SendChatMessage (TthAog2MyBattleCry, “SAY”);
end

nu is het veel gemakkelijker om te zien wat er aan de hand is.

lokale variabelen zijn vaak nuttig als we een waarde slechts kort nodig hebben. Door een local te gebruiken, is het heel duidelijk welke code de variabele wijzigt. Omdat de lokale niet erg lang bestaat, kunt u meestal alle code zien die het kan wijzigen in een oogopslag. Het zou een goed idee zijn om de nieuwe strijdkreet terug te echoën naar de gebruiker wanneer ze het instellen. Laten we het aanpassen om dit te doen:

functie TthAog2SetMyBattleCry (msg)
— Set the battle cry, voor later gebruik.
TthAog2MyBattleCry = msg;

— Echo the new battle cry for confirmation.
lokale echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end

we hebben naast de lokale variabele een aantal nieuwe dingen geïntroduceerd, dus laten we ze kort één voor één bekijken:

local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;

deze regel maakt een lokale variabele aan met de naam “echo” om de waarde op te slaan die we naar de gebruiker zullen echo. Het deel na het gelijk-teken maakt een tekststring die begint met de inhoud van de variabele TTH_AOG2_BATTLE_CRY_SET_TO en eindigt met de inhoud van msg, dan wijst die tekststring toe aan de lokale variabele.

Uh-oh, we hebben de variabele TTH_AOG2_BATTLE_CRY_SET_TO gedefinieerd. We definiëren het met deze regel, geplaatst aan de bovenkant van ons bestand:

local tth_aog2_battle_cry_set_to = “Battle cry set to “;

zoals u kunt zien, bevat de variabele tth_aog2_battle_cry_set_to gewoon een string. Omdat deze string nooit verandert, wordt het een “constante” ±genoemd. Het plaatsen van uw constante aan de bovenkant van uw bestand is altijd een goed idee. Op die manier, als je nodig hebt om de formulering te veranderen, de string is zeer gemakkelijk te vinden. (Zoals we in deel zes zullen zien, maakt het ook lokalisatie, of het ondersteunen van meerdere talen, veel gemakkelijker.) Ook hebben we de variabele TTH_AOG2_BATTLE_CRY_SET_TO als lokaal gedeclareerd, ook al zit hij niet in een functie. Dit betekent dat de variabele alleen in dit bestand bestaat, en niet in andere. Als u slechts een variabele in één bestand gebruikt, is het altijd goed om het lokaal te maken. Op die manier bent u er zeker van dat er geen code buiten uw bestand zou kunnen hebben gewijzigd. (Je vraagt je misschien af waarom we TthAog2MyBattleCry niet lokaal hebben gemaakt. Dat is vooral omdat ik jullie wilde laten zien hoe een globale variabele eruit zag. Maar er is nog een andere reden, die u in Deel Drie zult zien.)

ga nu naar de volgende regel van onze functie:

TthAog2OutputToChat (echo);

deze regel roept een functie aan die we moeten schrijven om een bericht naar het chatgebied te sturen. De variabele echo wordt doorgegeven aan de functie. Hier is hoe deze functie eruit ziet:

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

deze functie bepaalt of we tekst kunnen weergeven naar het standaard chat frame en, zo ja, toont de tekst in msg naar het chatgebied. Deze tekst wordt niet gezien door andere spelers C Het is strikt informatieve tekst voor de speler die de AddOn. Als je niet bekend bent met hoe het doorgeven van variabelen aan functies werkt, hier is hoe het gaat: wanneer TthAog2SetMyBattleCry roept TthAog2OutputToChat door het passeren van de echo variabele, Lua sommige dingen achter de schermen. Het maakt een lokale variabele genaamd msg in TthAog2OutputToChat, kopieert dan de waarde in echo naar msg. Dit geeft ons een lokale variabele genaamd msg binnen de tthaog2outputtochat functie, die we kunnen gebruiken als we willen.

we hoefden geen functie aan te maken om dit te doen. We hadden de code direct in de functie TthAog2SetMyBattleCry kunnen zetten om naar het chatgebied te gaan. Maar het gebruik van een functie maakt het heel gemakkelijk om tekst uit te voeren naar het chatgebied. Als we dit ergens anders moeten doen, hoeven we alleen maar de functie aan te roepen, niet een heel blok code te kopiëren. (Wij zullen hiervan profiteren in Deel Drie.) Ook, als we besloten om tekst aan de gebruiker op een andere manier te tonen, hoeven we alleen maar de code binnen de functie te wijzigen. Geen andere code zou worden beïnvloed, het verminderen van de kans op een bug. Tot slot, het vereenvoudigd de tthaog2setmybattlecry functie. De gemakkelijk-te-lezen code is gemakkelijk-aan-debug code.

we hebben Lua string handling of de WoW frame hiërarchie nog niet volledig onderzocht, maar om dit op dit punt te doen zou een afleiding zijn van onze belangrijkste focus van slash commando ‘ s. Hopelijk is het bovenstaande voldoende voor u om te begrijpen wat er gebeurt in deze versie van de AddOn.

alles in elkaar gezet

we zijn nu klaar om de battle cry AddOn te herschrijven zodat de gebruiker een voorkeur battle cry kan opgeven via slash commando ‘ s. Net als in Deel Een, zijn er drie bestanden betrokken:
– toc-bestand
– XML-bestand
– Lua-code-bestand

het toc-bestand is vrijwel ongewijzigd ten opzichte van Deel 1:

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

We ‘ ve just changed ¡°1¡± to ¡°2 ¡±, and changed the notes to call the battle cry ¡°customizable ¡± i.p.v. ¡°silly ¡±. Sla dit toc-bestand op als TthAog2.toc naar een map met de naam TthAog2 onder de map AddOns.

het XML-bestand is identiek aan Deel 1, behalve om ¡°1 te wijzigen in ¡°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>

Sla dit XML-bestand als TthAog2.xml naar een map met de naam TthAog2 onder de map AddOns.

tenslotte hebben we het Lua-bestand dat de code zelf bevat. Je hebt al deze stukken al gezien:

— Constant strings.
local tth_aog2_battle_cry_set_to = ” Battle cry set to “;
— deze variabele bevat onze strijdkreet.
TthAog2MyBattleCry = ” niet in het gezicht!”;

— Utility function for printing to chat area
function TthAog2OutputToChat (msg)
if(DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage (msg);
end
end

— Called when the AddOn loads.
functie TthAog2Load ()
— Register voor een gebeurtenis.
dit: RegisterEvent (“PLAYER_REGEN_DISABLED”);

— Maak het slash commando aan.
SlashCmdList = TthAog2SetMyBattleCry;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = “/ setmybattlecry2”;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 =” / smbc2″;
end

— aangeroepen wanneer het slash-commando wordt uitgevoerd.
functie TthAog2SetMyBattleCry (msg)
— Set the battle cry, voor later gebruik.
TthAog2MyBattleCry = msg;

— Echo the new battle cry for confirmation.
lokale echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end

— aangeroepen om de gebeurtenis waarvoor we geregistreerd zijn af te handelen.
functie TthAog2Event ()
— stuur een bericht naar chat.
SendChatMessage (TthAog2MyBattleCry,”SAY”);
end

vergeleken met Deel Een, hebben we de tthaog2mybattlecry globale variabele toegevoegd, de code toegevoegd om het slash commando aan te maken, de tthaog2setmybattlecry functie toegevoegd, en de tthaog2mybattlecry globale variabele gebruikt in TthAog2Event. We hebben ook meer opmerkingen toegevoegd.

sla dit lua-bestand op als TthAog2.lua naar een map met de naam TthAog2 onder de map AddOns.

wat doet het

start nu WoW en krijg in een gevecht. Je zult de domme strijdkreet zien, niet in het gezicht!¡±. Dit geeft de standaardwaarde van de variabele tthaog2mybattlecry weer. Typ nu het volgende:

/ smbc2 om te vechten!

u ziet de nieuwe strijdkreet weerklinken in het chatgebied. Ga nu nog een gevecht aan en je zult zien hoe het moet.in plaats van niet in het gezicht.¡±. Als je liever de strijdkreet uitschakelt, kun je gewoon typen:

/smbc2

onze echo is niet erg goed geformuleerd voor dit geval (het zal gewoon zeggen “strijdkreet ingesteld op”). Als dit een echte AddOn was voor gebruik door het grote publiek, zouden we de waarde van msg testen en een speciale echo tonen als de gebruiker de strijdkreet clear maakt. Omdat dit slechts een voorbeeld is, zullen we de code niet compliceren.

laatste woorden

als je de nieuwe versie van de AddOn probeert en je karakter twee strijdkreten schreeuwt, is dat waarschijnlijk omdat je de AddOn Uit deel één van deze gids nog steeds geïnstalleerd en actief hebt. Omdat we voorzichtig waren met naamgeving, zal dit geen fouten veroorzaken. Maar het is waarschijnlijk ook niet wat jij wilt. Gewoon uitschakelen of verwijderen van de eerste versie C de nieuwe is beter toch.

er is echter één probleem: je strijdkreet is verloren tussen de sessies. Elke keer als je sluit en herstart WoW, je ‘ll terug naar’ niet in het gezicht!¡±. Als je er klaar voor bent, ga dan naar Deel Drie en we zullen zien hoe je je favoriete strijdkreet kunt maken tussen de sessies door.