WOW UI Mod Guide-Capitolo 2 Comandi Slash

Acquista WoW Gold Cheap

  • Acquista WoW Classic Gold Safe presso PVPBank utilizzando coupon SEAN. Pagamenti: Paypal, Credito.
  • Acquista WoW Gold Paypal presso Mulefactory. WoW Classico Coupon: wowcgold & WoW Oro Coupon: wowrgold. Prezzi impressionanti, consegna immediata. Pagamenti: Paypal, Skrill, Bitcoin.
  • Mod UI Guida – Capitolo 1
  • UI Mod Guida – Capitolo 2
  • UI Mod Guida – Capitolo 3
  • UI Mod Guida – Capitolo 4
  • UI Mod Guida – Capitolo 5
  • UI Mod Guida – Capitolo 6
  • UI Mod Guida – Capitolo 7

Parte 2 Indice

  • Quali sono i comandi slash, e perché non mi importa
  • Come si fa una barra di comandi che funzionano
  • LUA File
  • Mettere tutto insieme
  • Cosa fare
  • Parole

Benvenuti alla seconda Parte della nostra guida per la creazione di WoW AddOns! In questa puntata abbiamo¡ll costruire sul semplice AddOn che abbiamo creato nella prima parte. Anche se hai già familiarità con la creazione di AddOns, potresti voler scremare rapidamente la prima parte.

Nella seconda parte, presumo che tu abbia familiarità con le basi dei file Lua, XML e toc. Tuttavia, non presumo che tu abbia una vasta esperienza di programmazione. Il nostro focus sarà sulla gestione ¡°slash¡± comandi. Lungo la strada, abbiamo¡ll anche guardare un po ‘ più vicino a Lua codifica. Quando abbiamo finito, abbiamo ampliato l’AddOn piuttosto zoppo ¡°battle cry¡± dalla prima parte per essere personalizzabile dagli utenti finali senza richiedere loro di modificare il codice Lua. Se non hai già l’AddOn dalla prima parte, puoi ottenere i file <qui>.

COSA SONO I COMANDI SLASH E PERCHÉ MI INTERESSA

Se hai giocato a WoW per più di cinque minuti, hai familiarità con i comandi slash. Essi¡re le cose come ¡°/dire¡± e ¡°/che¡± che si digita durante la riproduzione di WoW. I comandi Slash sono un modo molto conveniente per eseguire un’azione senza usare il mouse. Per gli autori di AddOn, i comandi slash sono molto più semplici da implementare rispetto a un’interfaccia utente grafica con Windows e pulsanti. Se le tue esigenze sono semplici, i comandi slash potrebbero essere tutto ciò che richiede il tuo AddOn.

Come sapete, WoW fornisce circa mille-gazillion tali comandi. Quello che potresti non sapere è che gli ADDON possono aggiungere i propri comandi slash. Quindi diamo un’occhiata a ciò che serve per urtare il conteggio dei comandi slash a mille-gazillion-and-one.

COME FUNZIONANO I COMANDI SLASH

Ogni comando slash creato da un AddOn ha una funzione Lua ad esso associata. Quando l’utente digita il comando slash, WoW chiama la funzione Lua. Internamente, WoW mantiene un ¡°SlashCmdList ¡±, che è una tabella che associa tutti i diversi comandi slash alle funzioni che dovrebbero chiamare. Si può pensare a questo come un elenco telefonico. (Ricordate di nuovo prima chat room e IM, quando la gente ha usato il telefono J) I comandi slash sono come i nomi e le funzioni sono come i numeri di telefono. Quando l’utente digita un comando barra, WoW esegue i comandi barra (nomi) fino a trovare quello corretto. Quindi chiama la funzione (numero di telefono) per quella voce. Ecco il Lua per creare un comando slash:

SlashCmdList = TthAog2SetMyBattleCry;

Questa riga imposta la funzione per il comando slash ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± a ¡°TthAog2SetMyBattleCry¡±. Se il comando ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± slash non esiste già nella tabella ¡°SlashCmdList ¡±, viene creato automaticamente. (Conveniente, non è vero) Affinché ciò funzioni effettivamente, dobbiamo definire la funzione ¡°TthAog2SetMyBattleCry¡± da qualche parte nel nostro codice Lua. La funzione potrebbe essere simile a questa:

function TthAog2SetMyBattleCry(msg)
set imposta il grido di battaglia, da usare in seguito
TthAog2MyBattleCry = msg;
end

(Una parola sulla convenzione: si noti che abbiamo usato all-caps per il nome del comando slash. Cioè, abbiamo scritto TTH_AOG2_SET_MY_BATTLE_CRY¡± invece di ¡°TthAog2SetMyBattleCry¡±. In questa guida, useremo all-caps per costanti valori C che non dovrebbero mai cambiare anche se il mondo si sbriciola in polvere interstellare o Nerfs Blizzard Sacerdoti o qualcosa di altrettanto terrificante. Ogni volta che mi vedi usare un nome tutto in maiuscolo, saprai che ti sto mostrando una costante.)

Pop quiz: cosa digita un utente per eseguire il nuovo comando slash Va bene, lo confesso. È una domanda trabocchetto. Sebbene la riga sopra di Lua crei un comando slash e associ una funzione Lua con esso, non abbiamo ancora alcun modo per eseguirlo. WoW utilizza un sistema di aliasing elegante per associare ciò che l’utente digita con i comandi barra effettivi. Ecco il codice Lua per farlo:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = “/setmybattlecry2”;

Ora se l’utente digita ¡°/setmybattlecry2 Non all’inguine!¡ ± , il comando slash ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± verrà eseguito, facendo sì che la funzione ¡°TthAog2SetMyBattleCry¡± venga chiamata con il parametro ¡°Non nell’inguine!¡±. (Mettiamo un ¡°2¡± alla fine di ¡°/setmybattlecry2¡± perché rivedremo il nostro AddOn nelle parti successive di questa guida e non vogliamo che i nomi entrino in conflitto.)

Perché il passaggio extra Perché non crea il comando slash ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± lo fa automaticamente in modo che l’utente possa digitare ¡°/tth_aog2_setmybattlecry¡± per eseguirlo Ci sono due motivi. Puoi già vedere il primo: anche se i nostri nomi interni possono avere molto senso nel nostro codice, sono spesso terribilmente brutti da mostrare agli utenti. La seconda ragione è più importante: questo passaggio in più consente a più parole chiave di eseguire lo stesso comando barra. Digitando ¡°/setmybattlecry2¡± è una specie di dolore. Diamo alle persone un modo più breve:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = “/smbc2”;

Ora gli utenti del nostro AddOn possono digitare ¡°/setmybattlecry2¡± o ¡°/smbc2¡± per impostare il grido di battaglia. Si noti che nella parte costante (SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2) abbiamo aggiunto un ¡°2¡± invece di un ¡°1¡± questa volta. Potremmo aggiungere una terza parola chiave, aggiungendo invece un ¡°3¡± e così via.

Sebbene i comandi slash siano fantasiosi o visivamente accattivanti come Windows e pulsanti, sono spesso convenienti per gli utenti. E¡re un bel po ‘ più facile per voi per creare. (Se vuoi ancora un’interfaccia grafica per il tuo AddOn, e probabilmente lo fai, sii paziente. Ne parleremo nella settima parte della presente guida.)

VARIABILI LUA

Potresti aver notato qualcosa di nuovo nella funzione sopra. Eccolo di nuovo, nel caso in cui te lo sei perso:

funzione TthAog2SetMyBattleCry (msg)
set imposta il grido di battaglia,per l’uso successivo
TthAog2MyBattleCry = msg;
fine

Il ¡°TthAog2MyBattleCry = msg;¡± è la parte nuova. ¡°TthAog2MyBattleCry¡± è una variabile Lua. Le variabili sono solo slot per contenere qualsiasi valore di vostra scelta. Come molti linguaggi di scripting, Lua è molto flessibile nel trattare con le variabili. Se hai usato un linguaggio di programmazione ¡°fortemente tipizzato ¡±come C++, potresti chiederti della variabile¡s ¡°type¡±. Don¡t. Puoi pensare alle variabili Lua come a grandi scatole vuote che possono contenere praticamente tutto ciò che vuoi memorizzare lì. In questo AddOn, memorizziamo il grido di battaglia preferito dall’utente nella variabile.

Un aspetto importante delle variabili è ¡°scope¡±. Scope significa essenzialmente ¡°quale codice può vedere questa variabile¡± Per impostazione predefinita, le variabili hanno ¡°ambito globale ¡±, molte delle tue funzioni possono vedere la variabile. L’altro tipo di campo di applicazione è ¡°campo di applicazione locale¡±. Ciò che questo significa per noi è che solo il codice all’interno dello stesso ¡°block¡± può vedere la variabile. Un ¡°blocco¡± significa fondamentalmente ¡°fino alla fine successiva¡±. (La definizione tecnica di ambito in Lua è più complicata, ma non dobbiamo preoccuparci di questi dettagli qui.)

Nel nostro esempio precedente, ¡°TthAog2MyBattleCry¡± è una ¡°variabile globale¡±, una variabile con ambito globale. La linea ¡°TthAog2MyBattleCry = msg; ¡± all’interno della funzione ¡°TthAog2SetMyBattleCry¡± l’ha creata. Per quelli di voi che provengono da linguaggi come C++, questo può sembrare controintuitivo. Ma in Lua, se una variabile non è esplicitamente identificata come avente ambito locale, è automaticamente globale. Anche se dichiarato all’interno di una funzione. Quindi il seguente funzionerebbe:

funzione TthAog2SetMyBattleCry(msg)
— imposta il grido di battaglia, per l’uso di seguito
TthAgo2MyBattleCry = msg;
fine

funzione TTHAog2Event()
— inviare un messaggio di chat
SendChatMessage(TthAog2MyBattleCry, “DIRE”);
fine

da Notare che TthAog2MyBattleCry è utilizzato in entrambe le funzioni. In entrambi i luoghi, si riferisce alla stessa variabile. Usando l’analogia della casella, se TthAog2SetMyBattleCry inserisce un valore nella casella, TthAog2Event può guardare nella casella e vedere quel valore.

Tuttavia, dichiarare le variabili globali in questo modo è una cattiva pratica. È molto meglio dichiararli nella parte superiore del file Lua. Questo ha due vantaggi:

1) l’elenco completo delle variabili globali è proprio lì, dove puoi facilmente vederle tutte in un colpo d’occhio

2) puoi essere sicuro che la variabile sia inizializzata correttamente.

Quindi è molto preferibile farlo:

this questa variabile contiene il nostro grido di battaglia
TthAog2MyBattleCry = ” Non in faccia!”;

funzione TthAog2SetMyBattleCry (msg)
set imposta il grido di battaglia,per l’uso successivo
TthAog2MyBattleCry = msg;
end

function TthAog2Event ()
send invia un messaggio alla chat
SendChatMessage(TthAog2MyBattleCry, “SAY”);
end

Ora è molto più facile vedere cosa sta succedendo.

Le variabili locali sono spesso utili quando abbiamo solo bisogno di un valore brevemente. Usando un locale, è molto chiaro quale codice modifica la variabile. Poiché il locale non esiste molto a lungo, di solito puoi vedere tutto il codice che potrebbe modificarlo a colpo d’occhio. Sarebbe una buona idea riecheggiare il nuovo grido di battaglia all’utente quando lo impostano. Modifichiamo TthAog2SetMyBattleCry per fare questo:

funzione TthAog2SetMyBattleCry (msg)
Set Imposta il grido di battaglia, da utilizzare in seguito.
TthAog2MyBattleCry = msg;

Echo Fa eco al nuovo grido di battaglia per la conferma.
eco locale = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end

Abbiamo introdotto diverse novità oltre alla variabile locale, quindi esaminiamole brevemente una per una:

local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;

Questa riga crea una variabile locale denominata ¡°echo¡± per memorizzare il valore che riecheggeremo all’utente. La parte dopo il segno di uguale crea una stringa di testo che inizia con il contenuto della variabile TTH_AOG2_BATTLE_CRY_SET_TO e termina con il contenuto di msg, quindi assegna quella stringa di testo alla variabile locale.

Uh-oh, non abbiamo definito la variabile TTH_AOG2_BATTLE_CRY_SET_TO. Lo definiremo con questa riga, posta nella parte superiore del nostro file:

local TTH_AOG2_BATTLE_CRY_SET_TO = “Battle cry set to”;

Come puoi vedere, la variabile TTH_AOG2_BATTLE_CRY_SET_TO contiene semplicemente una stringa. Poiché questa stringa non cambia mai, è chiamata ¡°costante¡±. Posizionare la costante nella parte superiore del file è sempre una buona idea. In questo modo, se è necessario modificare la formulazione, la stringa è molto facile da trovare. (Come vedremo nella sesta parte, rende anche la localizzazione, o il supporto di più lingue, molto più facile.) Inoltre, abbiamo dichiarato la variabile TTH_AOG2_BATTLE_CRY_SET_TO come locale, anche se non è in una funzione. Ciò significa che la variabile esiste solo all’interno di questo file e non in altri. Se si utilizza solo una variabile in un file, è sempre bene renderla locale. In questo modo, sei sicuro che nessun codice al di fuori del tuo file potrebbe averlo modificato. (Ci si potrebbe chiedere perché non abbiamo fatto TthAog2MyBattleCry locale. Questo è principalmente perché volevo mostrarti com’era una variabile globale. Ma c’è anche un altro motivo, che vedrete nella terza parte.)

Ora passiamo alla riga successiva della nostra funzione:

TthAog2OutputToChat(echo);

Questa riga chiama una funzione che dobbiamo scrivere, per inviare un messaggio all’area chat. La variabile echo viene passata alla funzione. Ecco come appare questa funzione:

funzione TthAog2OutputToChat(msg)
if (DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end

Questa funzione determina se possiamo visualizzare il testo nel frame predefinito della chat e, in tal caso, visualizza il testo in msg nell’area della chat. Questo testo non è visto da altri giocatori C è un testo strettamente informativo per il giocatore che esegue l’AddOn. Se non hai familiarità con come funziona il passaggio delle variabili alle funzioni, ecco come va: quando TthAog2SetMyBattleCry chiama TthAog2OutputToChat passando la variabile echo, Lua alcune cose dietro le quinte. Crea una variabile locale denominata msg in TthAog2OutputToChat, quindi copia il valore in echo in msg. Questo ci dà una variabile locale denominata msg all’interno della funzione TthAog2OutputToChat, che possiamo usare a nostro piacimento.

Non abbiamo dovuto creare una funzione per farlo. Avremmo potuto mettere il codice in uscita nell’area chat direttamente nella funzione TthAog2SetMyBattleCry. Ma l’utilizzo di una funzione rende davvero facile l’output del testo nell’area chat. Se avessimo bisogno di farlo da qualche altra parte, avremmo solo bisogno di chiamare la funzione, non copiare un intero blocco di codice. (Ne approfitteremo nella Terza parte.) Inoltre, se decidessimo di mostrare il testo all’utente in un modo diverso, avremmo solo bisogno di modificare il codice all’interno della funzione. Nessun altro codice sarebbe interessato, riducendo la possibilità di un bug. Infine, ha semplificato la funzione TthAog2SetMyBattleCry. Facile da leggere il codice è facile da eseguire il debug del codice.

Non abbiamo esplorato completamente la gestione delle stringhe Lua o la gerarchia dei frame WoW, ma farlo a questo punto sarebbe una distrazione dal nostro obiettivo principale dei comandi slash. Speriamo che quanto sopra sia sufficiente per capire cosa sta succedendo in questa versione dell’AddOn.

METTERE TUTTO INSIEME

Siamo¡re ora pronti a riscrivere il grido di battaglia AddOn per consentire all’utente di specificare un grido di battaglia preferito tramite comandi slash. Proprio come nella prima parte, ci sono tre file coinvolti:
– file toc
– File XML
– File di codice Lua

Il file toc è quasi invariato rispetto alla prima parte:

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

Abbiamo appena cambiato ¡°1¡± a ¡°2 ¡±, e cambiato le note per chiamare il grido di battaglia ¡°personalizzabile¡± invece di ¡°stupido¡±. Salva questo file sommario come TthAog2.toc in una cartella denominata TthAog2 sotto i componenti aggiuntivi della cartella.

Il file XML è identico alla prima parte, tranne per cambiare ¡°1 a ¡°2¡±:

<Per maggiori informazioni clicca qui=”http://www.blizzard.com/wow/ui/”>
<File di script= ” TthAog2.lua”/>
<Frame name=” TthAog2Core”>
<Scripts>
<OnLoad>TthAog2Load();</OnLoad>
<OnEvent>TthAog2Event();</OnEvent>
</Scripts>
</Frame>
</Ui>

Salva questo file XML come TthAog2.xml in una cartella denominata TthAog2 sotto i componenti aggiuntivi della cartella.

Infine, abbiamo il file Lua contenente il codice stesso. Hai già visto tutti questi pezzi:

strings Stringhe costanti.
local TTH_AOG2_BATTLE_CRY_SET_TO = “Grido di battaglia impostato su “;
This Questa variabile contiene il nostro grido di battaglia.
TthAog2MyBattleCry = ” Non in faccia!”;

function Funzione di utilità per la stampa nell’area chat
funzione TthAog2OutputToChat(msg)
if (DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end

Called Called when the AddOn loads.
funzione TthAog2Load ()
Register Registrati per un evento.
questo: RegisterEvent (“PLAYER_REGEN_DISABLED”);

— Crea il comando barra.
SlashCmdList = TthAog2SetMyBattleCry;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = “/ setmybattlecry2”;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = “/ smbc2”;
end

Called Chiamato quando viene eseguito il comando slash.
funzione TthAog2SetMyBattleCry(msg)
Set Imposta il grido di battaglia, da utilizzare in seguito.
TthAog2MyBattleCry = msg;

Echo Fa eco al nuovo grido di battaglia per la conferma.
eco locale = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end

Called Chiamato a gestire l’evento per il quale ci siamo registrati.
function TthAog2Event ()
Send Invia un messaggio alla chat.
SendChatMessage (TthAog2MyBattleCry, “DIRE”);
fine

Rispetto alla prima parte, abbiamo aggiunto la variabile globale TthAog2MyBattleCry, aggiunto il codice per creare il comando slash, aggiunto la funzione TthAog2SetMyBattleCry e utilizzato la variabile globale TthAog2MyBattleCry in TthAog2Event. Abbiamo anche aggiunto altri commenti.

Salva questo file lua come TthAog2.lua in una cartella denominata TthAog2 sotto i componenti aggiuntivi della cartella.

COSA FA

Ora inizia WoW e combatti. Si¡ll vedere il grido di battaglia stupido ¡°Non in faccia!¡±. Ciò riflette il valore predefinito della variabile TthAog2MyBattleCry. Ora digita quanto segue:

/smbc2 Per combattere!

Vedrai il nuovo grido di battaglia echeggiare nell’area chat. Ora entrare in un altro combattimento, e si¡ll vedere ¡°A combattere!¡± invece di ¡°Non in faccia!¡±. Se si preferisce disattivare il grido di battaglia, è possibile digitare solo:

/smbc2

Il nostro echo isn¡t molto ben formulata per questo caso (sarà solo dire ¡°grido di battaglia impostato su¡±). Se questo fosse un vero e proprio AddOn per l’uso da parte del grande pubblico, abbiamo¡d testare il valore di msg e visualizzare un eco speciale se l’utente sta cancellando il grido di battaglia. Perché questo è solo un esempio, abbiamo vinto¡t complicare il codice.

PAROLE FINALI

Se provi la nuova versione dell’AddOn e il tuo personaggio urla due grida di battaglia, probabilmente è perché hai ancora l’AddOn della prima parte di questa guida installato e attivo. Perché siamo stati attenti con la denominazione, questo non causerà errori. Ma probabilmente non è quello che vuoi. Basta disabilitare o eliminare la prima versione C quella nuova è comunque migliore.

C’è un problema, però: il tuo grido di battaglia si perde tra le sessioni. Ogni volta che si chiude e si riavvia WoW, si¡ll essere di nuovo a ¡°Non in faccia!¡±. Quando si¡re pronto, passare alla terza parte e noi¡ll vedere come rendere il vostro preferito battle cry ¡°stick¡± tra le sessioni.