WOW UI Mod Guide – Kapitola 2 Lomítko Příkazy

Koupit Levné WoW Gold

  • Koupit WoW Classic Gold Bezpečí na PVPBank použití kupón SEAN. Platby: Paypal, Úvěr.
  • koupit WoW Gold Paypal na Mulefactory. WoW Classic Kupón: wowcgold & WoW Gold Kupón: wowrgold. Úžasné ceny, okamžité dodání. Platby: Paypal, Skrill, Bitcoin.
  • UI Mod Guide – Kapitola 1
  • UI Mod Guide – Kapitola 2
  • UI Mod Guide – Kapitola 3
  • UI Mod Guide – Kapitola 4
  • UI Mod Guide – Kapitola 5
  • UI Mod Guide – Kapitola 6
  • UI Mod Guide – Kapitola 7

Část 2 Index

  • Co jsou lomítko příkazy, a proč bych se měl starat
  • Jak lomítko příkazy práce
  • LUA Souborů
  • Dát to všechno dohromady
  • Co to dělá
  • Poslední Slova

Vítejte u druhé Části našeho průvodce k vytvoření WoW Addony! V této splátce budeme stavět na jednoduchém addonu, který jsme vytvořili v první části. I když jste již obeznámeni s vytvářením doplňků, možná budete chtít rychle sbírat část první.

v druhé části předpokládám, že jste obeznámeni se základy souborů Lua, XML a toc. Nepředpokládám však, že máte rozsáhlé zkušenosti s programováním. Zaměříme se na manipulaci s lomítkem. Po cestě se také podíváme trochu blíže na kódování Lua. Když jsme¡re udělal, jsme¡ll rozšířili poněkud lame ¡°battle cry¡± AddOn Z první části, které mají být přizpůsobitelné koncovými uživateli, aniž by museli upravovat Lua kód. Pokud nemáte již AddOn Z první části, můžete získat soubory <zde>.

co jsou příkazy lomítka a proč se starám

pokud jste hráli WoW déle než asi pět minut, jste obeznámeni s příkazy lomítka. Oni¡re věci jako ¡°/say¡± a ¡°/kdo ¡±, které píšete při hraní WoW. Lomítko příkazy jsou velmi pohodlný způsob, jak provést akci bez použití myši. Pro autory addonů jsou příkazy lomítka implementovány mnohem jednodušeji než grafické uživatelské rozhraní s okny a tlačítky. Pokud jsou vaše potřeby jednoduché, příkazy lomítka mohou být vše, co váš AddOn vyžaduje.

jak víte, WoW poskytuje asi patnáct-gazillion takových příkazů. Co možná nevíte, je, že addony mohou přidat své vlastní lomítko příkazy. Tak ať to je se podívat na to, co je zapotřebí, aby narazit na lomítko příkaz počítat do umpteen-milion-a-jedno.

jak fungují příkazy lomítka

každý příkaz lomítka, který AddOn vytvoří, má s ním spojenou funkci Lua. Když uživatel zadá příkaz lomítko, WoW volá funkci Lua. Interně WoW udržuje ¡°SlashCmdList¡±, což je tabulka mapující všechny různé lomítko příkazy k funkcím, které by měly volat. Můžete si to představit jako telefonní seznam. (Nezapomeňte zpět před chatovací místnosti a IM, když lidé používali telefon J) lomítko příkazy jsou jako jména a funkce jsou jako telefonní čísla. Když uživatel zadá příkaz lomítka, WoW prochází příkazy lomítka (názvy), dokud nenajde ten správný. Poté volá funkci (telefonní číslo) pro tuto položku. Tady … to je ta Lua vytvořit lomítko příkaz:

SlashCmdList = TthAog2SetMyBattleCry;

Tento řádek nastaví funkce pro ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± lomítko příkaz ¡°TthAog2SetMyBattleCry¡±. Pokud příkaz ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± slash již v tabulce ¡°SlashCmdList¡± neexistuje, je automaticky vytvořen. Aby to skutečně fungovalo, musíme definovat funkci ¡°TthAog2SetMyBattleCry¡± někde v našem Lua kódu. Funkce může vypadat například takto:

funkce TthAog2SetMyBattleCry(msg)
— set bojový pokřik, pro pozdější použití
TthAog2MyBattleCry = msg;
end

(slovo na úmluvy: všimněte si, že jsme použili všechny-čepice za lomítkem název příkazu. To znamená, že jsme napsali TTH_AOG2_SET_MY_BATTLE_CRY¡± namísto ¡°TthAog2SetMyBattleCry¡±. V této příručce použijeme all-caps pro hodnoty konstant C, které by se nikdy neměly měnit, i když se svět rozpadne v mezihvězdný prach nebo vánice nerfs kněží nebo něco stejně děsivého. Pokaždé, když mě uvidíte používat jméno all-caps, budete vědět, že vám ukazuji konstantu.)

Pop kvíz: co uživatel zadá pro spuštění nového příkazu lomítka v pořádku, přiznám se. Je to chyták. Ačkoli výše uvedený řádek Lua vytvoří příkaz lomítka a přidruží k němu funkci Lua, stále nemáme žádný způsob, jak ji provést. WoW používá šikovný aliasing systém přiřadit to, co uživatel typy se skutečnými lomítkem příkazy. Tady … to je ta Lua kód:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = „/setmybattlecry2“;

Nyní, pokud uživatel zadá ¡°/setmybattlecry2 Ne v rozkroku!¡ ± , lomítko příkaz ¡°tth_aog2_set_my_battle_cry¡± bude proveden, což způsobí funkci ¡°TthAog2SetMyBattleCry¡± být volán s parametrem ¡°není v tříslech!¡±. (Dali jsme ¡°2¡± na konci ¡°/setmybattlecry2¡± protože jsme¡ll revidovat náš AddOn v pozdějších částech této příručky a nechceme jména do konfliktu.)

Proč další krok, Proč není¡t, vytváření lomítko příkaz ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± automaticky dělat to, takže uživatel může zadat ¡°/tth_aog2_setmybattlecry¡± spustit to Existují dva důvody. První už můžete vidět: i když naše interní jména mohou mít v našem kódu velký smysl,často se uživatelům strašně ošklivě ukazují. Druhý důvod je důležitější: tento další krok umožňuje více klíčových slov může spustit stejný příkaz lomítko. Psaní ¡°/setmybattlecry2¡± je trochu bolest. Nech to dát lidem kratší cestu:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = „/smbc2“;

Nyní uživatelé našich AddOn můžete zadat buď ¡°/setmybattlecry2 ¡±, nebo ¡°/smbc2¡± nastavit bojový pokřik. Všimněte si, že v konstantní části (SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2) jsme tentokrát přidali ¡°2¡± místo ¡°1 ¡±. Mohli bychom přidat třetí Klíčové slovo, přidáním ¡°3¡± místo, a tak dále.

ačkoli lomítko příkazy nejsou¡t jako efektní nebo vizuálně přitažlivý jako okna a tlačítka, oni¡re často pohodlné pro uživatele. A oni¡re mnohem jednodušší pro vás vytvořit. (Pokud stále chcete grafické rozhraní k addonu, a pravděpodobně ano, buďte trpěliví. Pokryjeme to v části sedm této příručky.)

Lua proměnné

možná jste si všimli něčeho nového ve výše uvedené funkci. Zde je to znovu, v případě, že jste to zmeškali:

funkce TthAog2SetMyBattleCry (msg)
— nastavte battle cry, pro pozdější použití
TthAog2MyBattleCry = msg;
konec

¡°TthAog2MyBattleCry = msg; ¡± je nová část. ¡°TthAog2MyBattleCry¡± je proměnná Lua. Proměnné jsou jen sloty držet libovolnou hodnotu dle vašeho výběru. Stejně jako mnoho skriptovacích jazyků je Lua velmi flexibilní při práci s proměnnými. Pokud jste¡jsem použil ¡°silně napsaný¡± programovací jazyk, jako je C++, můžete se divit o proměnné¡s ¡°typ¡±. O Lua proměnných se dá uvažovat jako o velkých prázdných krabicích, které pojmou v podstatě vše, co tam chcete uložit. V tomto addonu uložíme uživatelskou preferovanou battle cry do proměnné.

jedním z důležitých aspektů proměnných je ¡°scope¡±. Rozsah v podstatě znamená ¡°jaký kód může vidět tuto proměnnou¡± ve výchozím nastavení mají proměnné ¡°globální rozsah ¡±, mnoho z vašich funkcí může vidět proměnnou. Druhým typem rozsahu je místní rozsah. To pro nás znamená, že proměnnou vidí pouze kód ve stejném bloku ¡±. A ¡°block¡± v podstatě znamená ¡°až do dalšího konce¡±. (Technické vymezení rozsahu v Lua je složitější, ale o tyto detaily se zde nemusíme starat.

v našem výše uvedeném příkladu ¡°TthAog2MyBattleCry¡± je ¡°globální proměnná ¡±, proměnná s globálním rozsahem. Linka ¡°TthAog2MyBattleCry = msg; ¡± v rámci funkce ¡°TthAog2SetMyBattleCry¡± ji vytvořila. Pro ty z vás, kteří pocházejí z jazyků, jako je C++, se to může zdát neintuitivní. Pokud však v Lua není proměnná explicitně identifikována jako proměnná s lokálním rozsahem, je automaticky globální. I když je deklarován v rámci funkce. Takže následující by fungovalo:

funkce TthAog2SetMyBattleCry(msg)
— set bojový pokřik, pro pozdější použití
TthAgo2MyBattleCry = msg;
end

funkce TTHAog2Event()
— odeslat zprávu na chat
SendChatMessage(TthAog2MyBattleCry, „ŘÍKAT“);
end

Všimněte si, že TthAog2MyBattleCry se používá v obou funkcích. Na obou místech odkazuje na stejnou proměnnou. Pomocí analogie pole, pokud TthAog2SetMyBattleCry vloží hodnotu do pole, TthAog2Event se může podívat do pole a vidět tuto hodnotu.

deklarovat globální proměnné tímto způsobem je však špatná praxe. Je mnohem lepší je deklarovat v horní části souboru Lua. To má dvě výhody:

1) plný seznam globálních proměnných je právě tam, kde můžete snadno vidět všechny z nich na první pohled

2) můžete si být jisti, že proměnná je správně inicializován.

takže je mnohem lepší to udělat:

— tato proměnná drží náš bojový pokřik
TthAog2MyBattleCry = “ ne v obličeji!“;

funkce TthAog2SetMyBattleCry (msg)
— nastavte battle cry, pro pozdější použití
TthAog2MyBattleCry = msg;
end

funkce TthAog2Event()
— odeslat zprávu na chat
SendChatMessage(TthAog2MyBattleCry, „ŘÍKAT“);
end

Teď je to mnohem jednodušší, aby viděli, co se děje.

lokální proměnné jsou často užitečné, když potřebujeme pouze krátce hodnotu. Použitím lokálního kódu je velmi jasné, jaký kód proměnnou upravuje. Protože místní neexistuje příliš dlouho, můžete obvykle vidět veškerý kód, který by jej mohl na první pohled upravit. Bylo by dobré zopakovat nový battle cry zpět uživateli, když jej nastavili. Pojďme upravit TthAog2SetMyBattleCry k tomu:

funkce TthAog2SetMyBattleCry (msg)
— nastavte battle cry, pro pozdější použití.
TthAog2MyBattleCry = msg;

— Echo nový bojový výkřik pro potvrzení.
local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat(echo);
end

¡jsem představil několik nových věcí, kromě lokální proměnné, tak ať to stručně se na ně podívat jeden po druhém:

místní echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;

tento řádek vytvoří lokální proměnnou s názvem ¡°echo¡± pro uložení hodnoty, kterou budeme echo uživateli. Část za znaménkem rovná se vytvoří řetězec textu, který začíná obsahem proměnné TTH_AOG2_BATTLE_CRY_SET_TO a končí obsahem msg, poté přiřadí tento řetězec textu místní proměnné.

ještě jsme nedefinovali proměnnou TTH_AOG2_BATTLE_CRY_SET_TO. Jsme¡ll definovat to s této linie, umístěné v horní části souboru:

místní TTH_AOG2_BATTLE_CRY_SET_TO = „Battle cry set to „;

Jak můžete vidět, TTH_AOG2_BATTLE_CRY_SET_TO proměnná obsahuje řetězec. Protože se tento řetězec nikdy nezmění, nazývá se ¡°konstanta¡±. Umístění konstanty v horní části souboru je vždy dobrý nápad. Tímto způsobem, pokud potřebujete změnit znění, řetězec je velmi snadné najít. (Jak vidíme v šesté části, také usnadňuje lokalizaci nebo podporu více jazyků.) Také jsme proměnnou TTH_AOG2_BATTLE_CRY_SET_TO deklarovali jako lokální, i když není ve funkci. To znamená, že proměnná existuje pouze v tomto souboru a ne v jiných. Pokud používáte pouze proměnnou v jednom souboru, je vždy dobré ji lokalizovat. Tímto způsobem jste si jisti, že žádný kód mimo váš soubor jej nemohl změnit. (Možná se divíte, proč jsme neudělali TthAog2MyBattleCry místní. To hlavně proto, že jsem vám chtěl ukázat, jak vypadá globální proměnná. Ale je tu i další důvod, který uvidíte ve třetí části.)

Nyní pohněte na další řádek funkce:

TthAog2OutputToChat(echo);

Tento řádek volá funkci, že musíme napsat, poslat zprávu do chatu. Proměnná echo je předána funkci. Zde je, jak tato funkce vypadá:

funkce TthAog2OutputToChat(msg)
, pokud (DEFAULT_CHAT_FRAME)
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end

Tato funkce určuje, jestli můžeme zobrazení textu na výchozí chat frame, a pokud ano, zobrazí se text v msg na chatu. Tento text není vidět jiné hráče C je přísně informační text pro hráče běží AddOn. Pokud nejste obeznámeni s tím, jak předávání proměnných funkcím funguje, zde je návod, jak to jde: když TthAog2SetMyBattleCry volá TthAog2OutputToChat předáním proměnné echo, Lua některé věci v zákulisí. Vytvoří lokální proměnnou s názvem msg v TthAog2OutputToChat a poté zkopíruje hodnotu v echo do msg. To nám dává místní proměnnou s názvem msg v rámci funkce TthAog2OutputToChat, kterou můžeme použít, jak chceme.

nemuseli jsme k tomu vytvářet funkci. Mohli jsme dát kód na výstup do oblasti chatu přímo ve funkci TthAog2SetMyBattleCry. Použití funkce však usnadňuje výstup textu do oblasti chatu. Pokud bychom to potřebovali udělat někde jinde, stačí zavolat funkci, ne zkopírovat celý blok kódu. (Využijeme toho ve třetí části.) Také, pokud jsme se rozhodli zobrazit text uživateli jiným způsobem, stačí upravit kód v rámci funkce. Žádný jiný kód by byl ovlivněn, což by snížilo pravděpodobnost chyby. Nakonec zjednodušila funkci TthAog2SetMyBattleCry. Snadno čitelný kód je snadno laditelný kód.

ještě Jsme¡t plně prozkoumány Lua manipulaci řetězec nebo WoW rám hierarchie, ale aby tak učinily v tomto bodě by bylo rozptýlení od našich hlavních zaměření lomítko příkazy. Doufejme, že výše uvedené je dostačující pro to, abyste pochopili, co se děje v této verzi addonu.

uvedení to všechno dohromady

jsme¡re nyní připraveni přepsat battle cry AddOn, aby uživatel mohl určit preferovaný battle cry pomocí příkazů lomítko. Stejně jako v první části jsou zapojeny tři soubory:
– toc souboru
– XML soubor
– Lua kód souboru

toc souboru je téměř beze změny z Části:

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

Jsme¡jsem jen změnil ¡°1 ¡±¡°2¡±, a změnil poznámky k volání bojový pokřik ¡°přizpůsobiteln顱 místo ¡°hloupé.±. Uložte tento soubor toc jako TthAog2.toc do složky s názvem TthAog2 pod addony složek.

XML souboru je shodné Části, s výjimkou pro změnu ¡°1¡°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/“>
<soubor Skriptu=“ TthAog2.lua“/>
<Frame name=“ TthAog2Core“>
<Scripts>
<OnLoad>TthAog2Load();</OnLoad>
<OnEvent>TthAog2Event();</OnEvent>
</Scripts>
</Frame>
</Ui>

Uložit tento soubor XML jako TthAog2.xml do složky s názvem TthAog2 pod addony složek.

konečně máme soubor Lua obsahující samotný kód. Už jste viděli všechny tyto kousky:

— konstantní řetězce.
local TTH_AOG2_BATTLE_CRY_SET_TO = „Battle cry set to“;
– tato proměnná drží náš bojový výkřik.
TthAog2MyBattleCry = “ není v obličeji!“;

— Utility funkce pro tisk na chatu
funkce TthAog2OutputToChat(msg)
, pokud (DEFAULT_CHAT_FRAME)
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end

— Volal, když AddOn zatížení.
funkce TthAog2Load ()
— Zaregistrujte se pro událost.
toto:RegisterEvent („PLAYER_REGEN_DISABLED“);

— Vytvořte příkaz lomítko.
SlashCmdList = TthAog2SetMyBattleCry;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = „/ setmybattlecry2“;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = „/smbc2“;
konec

— vyvolá se při spuštění příkazu slash.
funkce TthAog2SetMyBattleCry (msg)
— nastavte battle cry pro pozdější použití.
TthAog2MyBattleCry = msg;

— Echo nový bojový výkřik pro potvrzení.
local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
konec

– povolán k vyřízení události, pro kterou jsme se zaregistrovali.
funkce TthAog2Event ()
— odeslat zprávu do chatu.
SendChatMessage (TthAog2MyBattleCry, „SAY“);
end

ve Srovnání s první Části, jsme¡jsem přidal TthAog2MyBattleCry globální proměnné, přidá kód k vytvoření lomítko příkaz, dodal TthAog2SetMyBattleCry funkce, a používá TthAog2MyBattleCry globální proměnné v TthAog2Event. Přidali jsme také další komentáře.

Uložte tento soubor lua jako TthAog2.lua do složky s názvem TthAog2 pod addony složek.

co to dělá

nyní začít WoW a dostat se do boje. Uvidíte hloupý bojový výkřik ¡°ne do tváře!¡±. To odráží výchozí hodnotu proměnné TthAog2MyBattleCry. Nyní zadejte následující:

/ smbc2 do bitvy!

uvidíte nový bojový pokřik, který se ozývá v oblasti chatu. Nyní se dostat do dalšího boje, a vy¡ll vidět ¡°k boji!¡± místo ¡°ne do obličeje!¡±. Pokud dáváte přednost vypnutí battle cry, můžete zadat pouze:

/ smbc2

naše echo není pro tento případ velmi dobře formulováno (pouze řekne ¡°Battle cry nastaveno na ¡±). Pokud by se jednalo o skutečný doplněk pro použití širokou veřejností, otestujeme hodnotu msg a zobrazíme speciální ozvěnu, pokud uživatel vyčistí bojový výkřik. Protože je to jen příklad, nebudeme kód komplikovat.

POSLEDNÍ SLOVA

Pokud se pokusíte nové verze AddOn a vaše postava křičí dvě bojové výkřiky, je to pravděpodobně proto, že jste stále máte AddOn z první Části tohoto průvodce nainstalován a aktivní. Protože jsme byli opatrní s pojmenováním, to nezpůsobí žádné chyby. Ale asi to taky není to, co chceš. Stačí zakázat nebo odstranit první verzi C nová je stejně lepší.

je tu jeden problém, ačkoli: váš bojový pokřik je ztracen mezi relacemi. Pokaždé, když zavřete a restartujte WoW, budete se vrátit do ¡°Není v obličeji!¡±. Až budete připraveni, přejděte na část třetí a uvidíme, jak si váš preferovaný bojový výkřik ¡°stick¡± mezi zasedáními.