Guia de Mod de Interfaz de usuario de WOW-Capítulo 2 Comandos de barra oblicua

Compre WoW Gold Barato

  • Compre WoW Classic Gold Caja fuerte en PVPBank usando cupón SEAN. Pagos: Paypal, Crédito.
  • Compre WoW Gold Paypal en Mulefactory. Cupón WoW Classic: wowcgold & Cupón WoW Gold: wowrgold. Precios increíbles, entrega instantánea. Pagos: Paypal, Skrill, Bitcoin.
  • Guía de Mods de Interfaz de usuario – Capítulo 1
  • Guía de Mods de Interfaz de usuario-Capítulo 2
  • Guía de Mods de interfaz de usuario-Capítulo 3
  • Guía de Mods de Interfaz de usuario-Capítulo 4
  • Guía de Mods de Interfaz de usuario-Capítulo 5
  • 7

Parte 2 Índice

  • Qué son los comandos de barra diagonal y por qué me importa
  • Cómo funcionan los comandos de barra diagonal
  • Archivos LUA
  • Unirlo todo
  • Qué hace
  • Palabras finales

Bienvenido a la parte Dos de nuestra guía para crear WoW Complementos! En esta entrega, construiremos el complemento simple que creamos en la primera parte. Incluso si ya está familiarizado con la creación de complementos, es posible que desee revisar rápidamente la primera parte.

En la segunda parte, asumiré que está familiarizado con los conceptos básicos de los archivos Lua, XML y toc. Sin embargo, no asumiré que tenga una amplia experiencia en programación. Nuestro enfoque estará en el manejo de comandos de barra oblicua. En el camino, también veremos un poco más de cerca la codificación Lua. Cuando hayamos terminado, habremos ampliado el complemento de grito de batalla de la Primera Parte para que sea personalizable por los usuarios finales sin que tengan que modificar el código de Lua. Si no tiene el complemento de la Primera Parte, puede obtener los archivos < aquí>.

QUÉ SON LOS COMANDOS DE BARRA DIAGONAL Y POR QUÉ ME IMPORTA

Si has jugado WoW durante más de cinco minutos, estás familiarizado con los comandos de barra diagonal. Son cosas como ¡°/say ¡±y ¡°/who ¡±que escribes mientras tocas WoW. Los comandos de barra diagonal son una forma muy conveniente de realizar una acción sin usar el ratón. Para los escritores de complementos, los comandos de barra diagonal son mucho más sencillos de implementar que una interfaz gráfica de usuario con ventanas y botones. Si sus necesidades son sencillas, los comandos de barra diagonal pueden ser todo lo que su complemento requiere.

Como ya sabes, WoW proporciona un sinnúmero de tales comandos. Lo que quizás no sepas es que los complementos pueden agregar sus propios comandos de barra diagonal. Así que echemos un vistazo a lo que se necesita para aumentar el número de comandos de barra a innumerables millones y uno.

CÓMO FUNCIONAN LOS COMANDOS DE BARRA DIAGONAL

Cada comando de barra diagonal que crea un complemento tiene una función Lua asociada a él. Cuando el usuario escribe el comando de barra diagonal, WoW llama a la función Lua. Internamente, WoW mantiene un ¡°SlashCmdList ¡±, que es una tabla que mapea todos los diferentes comandos de barra diagonal a las funciones que deben llamar. Puedes pensar en esto como en una guía telefónica. (Recuerde antes de las salas de chat y mensajería instantánea, cuando la gente usaba el teléfono J) Los comandos de barra son como los nombres y las funciones son como los números de teléfono. Cuando el usuario escribe un comando de barra diagonal, WoW se ejecuta a través de los comandos de barra diagonal (nombres) hasta que encuentra el correcto. Luego llama a la función (número de teléfono) para esa entrada. Aquí está el Lua para crear un comando de barra diagonal:

SlashCmdList = TthAog2SetMyBattleCry;

Esta línea establece la función para el comando de barra diagonal ¡°TTH_AOG2_SET_MY_BATTLE_CRY a ¡°TthAog2SetMyBattleCry¡±. Si el comando ¡°TTH_AOG2_SET_MY_BATTLE_CRY ¡±barra diagonal no existe ya en la tabla ¡°SlashCmdList ¡±, se crea automáticamente. (Conveniente, no lo es) Para que esto realmente funcione, tenemos que definir la función ¡°TthAog2SetMyBattleCry en algún lugar de nuestro código Lua. La función podría tener este aspecto:

function TthAog2SetMyBattleCry(msg)
set establecer el grito de batalla, para usarlo más tarde
TthAog2MyBattleCry = msg;
end

(Una palabra en la convención: observe que usamos mayúsculas para el nombre del comando de barra diagonal. Es decir, escribimos TTH_AOG2_SET_MY_BATTLE_CRY ¡±en lugar de ¡°TthAog2SetMyBattleCry¡±. En esta guía, usaremos todo en mayúsculas para valores de constantes C que nunca deberían cambiar, incluso si el mundo se desmorona en polvo interestelar o Sacerdotes nerfs de Ventisca o algo igualmente horrible. Cada vez que me veas usar un nombre en mayúsculas, sabrás que te estoy mostrando una constante.)

Examen sorpresa: ¿qué escribe un usuario para ejecutar el nuevo comando de barra diagonal, lo confieso? Es una pregunta capciosa. Aunque la línea anterior de Lua crea un comando de barra diagonal y asocia una función Lua con él, todavía no tenemos ninguna forma de ejecutarlo. WoW utiliza un ingenioso sistema de alias para asociar lo que el usuario escribe con los comandos de barra diagonal reales. Aquí está el código Lua para hacerlo:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = «/ setmybattlecry2»;

Ahora si el usuario escribe ¡°/setmybattlecry2 No en la ingle!¡ ± , se ejecutará el comando de barra oblicua ¡°TTH_AOG2_SET_MY_BATTLE_CRY ¡±, haciendo que se llame a la función ¡°TthAog2SetMyBattleCry ¡±con el parámetro ¡°Not en la ingle!¡±. (Ponemos un ¡°2 ¡±al final de ¡°/setmybattlecry2 ¡±porque revisaremos nuestro complemento en partes posteriores de esta guía y no queremos que los nombres entren en conflicto.)

Por qué el paso adicional Por qué no crea el comando de barra diagonal ¡°TTH_AOG2_SET_MY_BATTLE_CRY ¡±lo hace automáticamente para que el usuario pueda escribir ¡°/tth_aog2_setmybattlecry ¡±para ejecutarlo Hay dos razones. Ya puedes ver la primera: aunque nuestros nombres internos pueden tener mucho sentido en nuestro código, a menudo son terriblemente feos para mostrar a los usuarios. La segunda razón es más importante: este paso adicional permite que varias palabras clave puedan ejecutar el mismo comando de barra diagonal. Teclear ¡°/setmybattlecry2 ¡± es una especie de dolor. Demos a la gente una forma más corta:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = «/ smbc2»;

Ahora los usuarios de nuestro complemento pueden escribir ¡°/setmybattlecry2¡± o ¡°/smbc2¡± para configurar el grito de batalla. Observe que en la parte constante (SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2) agregamos un ¡°2¡± en lugar de un ¡°1¡± esta vez. Podríamos añadir una tercera palabra clave, añadiendo en su lugar un ¡°3 ¡±, y así sucesivamente.

Aunque los comandos de barra diagonal no son tan elegantes o visualmente atractivos como las ventanas y los botones, a menudo son convenientes para los usuarios. Y son mucho más fáciles de crear para ti. (Si todavía desea una interfaz gráfica para su complemento, y probablemente lo haga, sea paciente. Lo cubriremos en la Séptima Parte de esta guía.)

VARIABLES LUA

Es posible que haya notado algo nuevo en la función anterior. Aquí está de nuevo, en caso de que se lo haya perdido:

function TthAog2SetMyBattleCry (msg)
set configure el grito de batalla, para usarlo más tarde
TthAog2MyBattleCry = msg;
end

El ¡°TthAog2MyBattleCry = msg;¡± es la parte nueva. ¡°TthAog2MyBattleCry ¡± es una variable Lua. Las variables son solo ranuras para mantener cualquier valor de su elección. Al igual que muchos lenguajes de scripting, Lua es muy flexible en el manejo de variables. Si ha utilizado un lenguaje de programación de tipo ¡°fuertemente tipeado como C++, podría preguntarse acerca de la variable ¡s ¡°type ¡±. No. Puedes pensar en variables Lua como grandes cajas vacías que pueden contener casi cualquier cosa que quieras almacenar allí. En este complemento, almacenamos el grito de batalla preferido del usuario en la variable.

Un aspecto importante de las variables es ¡°scope ¡±. Alcance esencialmente significa ¡°qué código puede ver esta variable ¡±Por defecto, las variables tienen ¡°alcance global ¡±, muchas de sus funciones pueden ver la variable. El otro tipo de alcance es ¡°alcance local ¡±. Lo que esto significa para nosotros es que solo el código dentro del mismo bloque ¡°¡±puede ver la variable. Un bloque de ¡°±significa básicamente ¡°hasta el siguiente extremo±. (La definición técnica del ámbito de aplicación en Lua es más complicada, pero no necesitamos preocuparnos por esos detalles aquí.)

En nuestro ejemplo anterior, ¡°TthAog2MyBattleCry ¡± es una variable global ¡ ° , una variable con alcance global. La línea ¡°TthAog2MyBattleCry = msg;¡± dentro de la función ¡°TthAog2SetMyBattleCry¡± la creó. Para aquellos de ustedes que vienen de lenguajes como C++, esto puede parecer contradictorio. Pero en Lua, si una variable no se identifica explícitamente como de ámbito local, es automáticamente global. Incluso si se declara dentro de una función. Así que lo siguiente funcionaría:

function TthAog2SetMyBattleCry(msg)
set establece el grito de batalla, para usarlo más tarde
TthAgo2MyBattleCry = msg;
end

function TTHAog2Event()
send envía un mensaje a chat
SendChatMessage(TthAog2MyBattleCry, «SAY»);
end

Observe que TthAog2MyBattleCry se usa en ambas funciones. En ambos lugares, se refiere a la misma variable. Usando la analogía de caja, si TthAog2SetMyBattleCry pone un valor en la caja, TthAog2Event puede mirar en la caja y ver ese valor.

Sin embargo, declarar variables globales de esta manera es una mala práctica. Es mucho mejor declararlos en la parte superior de su archivo Lua. Esto tiene dos ventajas:

1) la lista completa de variables globales está justo ahí, donde puede ver fácilmente todas de un vistazo

2) puede estar seguro de que la variable está inicializada correctamente.

Por lo que es mucho mejor hacer esto:

this esta variable contiene nuestro grito de batalla
TthAog2MyBattleCry = » ¡No en la cara!»;

function TthAog2SetMyBattleCry (msg)
set establece el grito de batalla, para usarlo más tarde
TthAog2MyBattleCry = msg;
end

function TthAog2Event ()
send enviar un mensaje a chat
SendChatMessage (TthAog2MyBattleCry, «SAY»);
end

Ahora es mucho más fácil ver lo que está pasando.

Las variables locales a menudo son útiles cuando solo necesitamos un valor brevemente. Al usar un local, queda muy claro qué código modifica la variable. Debido a que el local no existe por mucho tiempo, por lo general se puede ver todo el código que podría modificarlo de un vistazo. Sería una buena idea hacer eco del nuevo grito de batalla al usuario cuando lo configure. Modifiquemos TthAog2SetMyBattleCry para hacer esto:

function TthAog2SetMyBattleCry (msg)
Set Configura el grito de batalla, para usarlo más tarde.
TthAog2MyBattleCry = msg;

Echo Repite el nuevo grito de batalla para confirmación.
local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end

Hemos introducido varias cosas nuevas además de la variable local, así que vamos a verlas brevemente una por una:

local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;

Esta línea crea una variable local llamada ¡°echo ¡±para almacenar el valor que le haremos eco al usuario. La parte posterior al signo igual crea una cadena de texto que comienza con el contenido de la variable TTH_AOG2_BATTLE_CRY_SET_TO y termina con el contenido de msg, y luego asigna esa cadena de texto a la variable local.

Uh-oh, no hemos definido la variable TTH_AOG2_BATTLE_CRY_SET_TO. Lo definiremos con esta línea, colocada en la parte superior de nuestro archivo:

local TTH_AOG2_BATTLE_CRY_SET_TO = «Grito de batalla establecido en»;

Como puede ver, la variable TTH_AOG2_BATTLE_CRY_SET_TO simplemente contiene una cadena. Debido a que esta cadena nunca cambia, se llama constante de ¡°¡±. Colocar su constante en la parte superior de su archivo siempre es una buena idea. De esa manera, si necesita cambiar la redacción, la cadena es muy fácil de encontrar. (Como veremos en la Parte Seis, también hace que la localización, o el soporte de varios idiomas, sea mucho más fácil.) Además, hemos declarado la variable TTH_AOG2_BATTLE_CRY_SET_TO como local, aunque no esté en una función. Esto significa que la variable solo existe dentro de este archivo, y no en ningún otro. Si solo está usando una variable en un archivo, siempre es bueno hacerlo local. De esta manera, estará seguro de que ningún código fuera de su archivo podría haberlo modificado. (Puede que te preguntes por qué no hicimos que Ttaog2mybattlecry fuera local. Esto se debe principalmente a que quería mostrarles cómo era una variable global. Pero también hay otra razón, que verán en la tercera Parte.)

Ahora pasemos a la siguiente línea de nuestra función:

TthAog2OutputToChat (eco);

Esta línea llama a una función que debemos escribir, para enviar un mensaje al área de chat. La variable echo se pasa a la función. Así es como se ve esta función:

function TthAog2OutputToChat (msg)
if(DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:addMessage (msg);
end
end

Esta función determina si podemos mostrar texto en el marco de chat predeterminado y, de ser así, muestra el texto en msg en el área de chat. Este texto no es visto por ningún otro jugador C es un texto estrictamente informativo para el jugador que ejecuta el complemento. Si no está familiarizado con cómo funciona el paso de variables a funciones, así es como funciona: cuando TthAog2SetMyBattleCry llama a TthAog2OutputToChat pasando la variable eco, Lua algunas cosas detrás de escena. Crea una variable local llamada msg en TthAog2OutputToChat, luego copia el valor en echo a msg. Esto nos da una variable local llamada msg dentro de la función TthAog2OutputToChat, que podemos usar como queramos.

No tuvimos que crear una función para hacer esto. Podríamos haber puesto el código a la salida del área de chat directamente en la función TthAog2SetMyBattleCry. Pero el uso de una función hace que sea muy fácil enviar texto al área de chat. Si necesitáramos hacer esto en otro lugar, solo necesitaríamos llamar a la función, no copiar un bloque entero de código. (Aprovecharemos esto en la Tercera Parte.) Además, si decidimos mostrar el texto al usuario de una manera diferente, solo necesitamos modificar el código dentro de la función. Ningún otro código se vería afectado, reduciendo la posibilidad de un error. Finalmente, simplificó la función TthAog2SetMyBattleCry. El código fácil de leer es un código fácil de depurar.

No hemos explorado completamente el manejo de cadenas Lua o la jerarquía de frame WoW, pero hacerlo en este punto sería una distracción de nuestro enfoque principal de comandos de barra diagonal. Esperemos que lo anterior sea suficiente para que entiendas lo que está sucediendo en esta versión del complemento.

UNIÉNDOLO TODO

Ahora estamos listos para reescribir el complemento grito de batalla para permitir al usuario especificar un grito de batalla preferido a través de comandos de barra diagonal. Al igual que en la Primera Parte, hay tres archivos involucrados:
– archivo toc
– Archivo XML
– Archivo de código Lua

El archivo toc no cambia prácticamente de la primera 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

Acabamos de cambiar ¡°1 ¡±a ¡°2 ¡±, y cambiamos las notas para llamar al grito de batalla ¡°personalizable ¡± en lugar de ¡°tonto!±. Guarde este archivo tdc como TthAog2.toc a una carpeta llamada TthAog2 bajo los complementos de carpeta.

El archivo XML es idéntico a la Primera Parte, excepto para cambiar ¡°1 a ¡°2¡±:

<Interfaz de usuario 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>

Guardar este archivo XML como TthAog2.xml a una carpeta llamada TthAog2 bajo los complementos de carpeta.

Finalmente, tenemos el archivo Lua que contiene el código en sí. Ya has visto todas estas piezas:

strings Cuerdas constantes.
local TTH_AOG2_BATTLE_CRY_SET_TO = » Grito de batalla establecido en «;
This Esta variable contiene nuestro grito de batalla.
TthAog2MyBattleCry = «No en la cara!»;

function Función de utilidad para imprimir en el área de chat
función TthAog2OutputToChat (msg)
if(DEFAULT_CHAT_FRAME) entonces
DEFAULT_CHAT_FRAME:addMessage (msg);
end
end

Called Llamada cuando se carga el complemento.
function TthAog2Load ()
Register Registrarse para un evento.
esto:RegisterEvent («PLAYER_REGEN_DISABLED»);

— Cree el comando barra diagonal.
SlashCmdList = TthAog2SetMyBattleCry;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = «/ setmybattlecry2»;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = «/ smbc2»;
end

Called Se llama cuando se ejecuta la orden de barra diagonal.
function TthAog2SetMyBattleCry (msg)
Set Configura el grito de batalla, para usarlo más tarde.
TthAog2MyBattleCry = msg;

Echo Repite el nuevo grito de batalla para confirmación.
local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end

Called Llamado para manejar el evento para el que nos hemos registrado.
function TthAog2Event ()
Send Enviar un mensaje al chat.
SendChatMessage (TthAog2MyBattleCry, «SAY»);
fin

En comparación con la Primera Parte, hemos añadido la variable global TthAog2MyBattleCry, hemos añadido el código para crear el comando de barra diagonal, hemos añadido la función TthAog2SetMyBattleCry y hemos utilizado la variable global TthAog2MyBattleCry en TthAog2Event. También hemos añadido más comentarios.

Guarde este archivo lua como TthAog2.lua a una carpeta llamada TthAog2 bajo los complementos de carpeta.

QUÉ HACE

Ahora comienza WoW y entra en una pelea. Verás el tonto grito de batalla ¡No en la cara!¡±. Esto refleja el valor predeterminado de la variable TthAog2MyBattleCry. Ahora escribe lo siguiente:

/smbc2 Para Luchar!

Verás que el nuevo grito de batalla resuena en el área de chat. Ahora entra en otra pelea,y ¡verás! ¡A la batalla!¡± en lugar de ¡°No en la cara!¡±. Si prefiere desactivar el grito de batalla, puede escribir simplemente:

/smbc2

Nuestro eco no está muy bien redactado para este caso (solo dirá ¡°Grito de batalla configurado en¡±). Si este fuera un complemento real para uso del público en general, probaremos el valor de msg y mostraremos un eco especial si el usuario está despejando el grito de batalla. Debido a que esto es solo un ejemplo, no complicaremos el código.

PALABRAS FINALES

Si pruebas la nueva versión del complemento y tu personaje grita dos gritos de batalla, probablemente sea porque aún tienes el complemento de la Primera Parte de esta guía instalado y activo. Debido a que fuimos cuidadosos con los nombres, esto no causará ningún error. Pero probablemente no es lo que tú quieres, tampoco. Solo tienes que desactivar o eliminar la primera versión C la nueva es mejor de todos modos.

Sin embargo, hay un problema: tu grito de batalla se pierde entre sesiones. Cada vez que cierres y reinicies WoW, ¡volverás a ¡°No en la cara!¡±. Cuando estéis listos, pasad a la Tercera parte y veremos cómo hacer que vuestro grito de batalla preferido se pegue entre sesiones.