Guía básica de como programar en Lua

Desde
1 Oct 2019
Mensajes
2,358
Reacciones
2,142
Honor
566
Lua es un lenguaje de programación ligero diseñado como un lenguaje de scripting con semántica extensible como objetivo principal. El nombre proviene de la palabra portuguesa Lua que significa "Luna". Lua tiene una interfaz de programación de aplicaciones C (API) relativamente simple en comparación con otros lenguajes de scripting.

Entrando en la programación
Esta guía le enseñará cómo hacer que la Inteligencia Artificial (AI) sea simple para usar con los emuladores ArcEmu y Sandshroud.
Hay muchas opciones para qué tipo de script puede realizar un usuario según los criterios establecidos por el usuario u otra persona que solicite el script, y generalmente es posible llegar a una solución para un problema determinado de más de una manera. Cuanta menos memoria use una secuencia de comandos, mejor será, ya que eso reducirá los recursos del sistema y del emulador. Un script podría verse

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Este no es el guión completo, sino la mitad. Es una IA para una criatura llamada Shadow Mage. Está un poco avanzado y va más allá del contenido que cubre esta guía. Pero si un usuario toma este script y lo coloca en un archivo de bloc de notas con la extensión de archivo .lua y lo coloca en la carpeta de scripts del emulador, se ejecutará correctamente.
Básicamente, lo que sucede aquí son muchas llamadas de diferentes funciones, comprobación de valores, declaraciones y argumentos, así como el envío de toda la información al Lua Engine dentro del emulador, que luego ejecutará las acciones especificadas en el script.

Aprendiendo lo Básico

Como cualquier otro lenguaje de programación, esta guía hace un poco de "¡Hola mundo!" script para ver una sintaxis muy básica.

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Si esto se ejecutó dentro de un World of Warcraft Emulator, ahora no pasaría nada, sin embargo, sigue siendo un script válido. ¡Simplemente usa la función de una biblioteca para escribir Hello World!

Al realizar este tipo de secuencia de comandos en emulación, la acción debe estar vinculada a algo (como una criatura) antes de que se ejecute o antes de que la acción se pueda ver en cualquier lugar de la pantalla.

Requisitos:

Para esta guía, se recomienda obtener los siguientes programas:
  • Notepad ++
Es una versión de código abierto del Bloc de notas estándar que se encuentra en Windows, pero muy mejorado y muy útil para escribir código en varios idiomas. También se recomienda para los usuarios de Mac y Linux obtener este programa y usar un emulador de Windows:
  • Linux: Wine
  • Mac: Boot Camp
Esta guía usará Notepad ++ para su propósito, sin embargo, cualquier otro editor estándar de Notepad lo hará. Notepad ++ es útil porque es posible hacer scripts con pestañas. Significa que es posible mirar múltiples scripts a la vez que resulta muy útil. Solo asegúrese de guardar el archivo con la extensión lua ya que de lo contrario no funcionará con el emulador elegido.

Esta guía está hecha para el que no tiene experiencia previa en programación.

Funciones
Una función es principalmente la secuencia de comandos que se puede llamar en cualquier lugar dentro de una secuencia de comandos. La función tiene un nombre, uno o más argumentos, algunas acciones para ejecutar en función de las condiciones y luego algo que indica que finaliza. Aquí hay un diseño básico de una función:

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Este es el nombre de la función. Puede tener números, puede tener botones de ALTURA, guiones bajos pero no espacios, puntos, comas, dos puntos, u otros caracteres especiales (@, £, $ ...) ya que pueden estar reservados para ciertas acciones dentro del lenguaje. Los nombres válidos serían:

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Etcétera, pero ninguna de estas funciones es la misma. El lenguaje es capaz de distinguir mayúsculas de letras no mayúsculas. Las funciones también pueden contener números en sus nombres de funciones. Lo que debe notarse es que la función siempre se deletrea con una f no capital. Tiene que estar escrito con todas las letras que no sean mayúsculas: función. De lo contrario, es una sintaxis inválida y el lenguaje no lo leerá como una función, sino como un error.

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Un argumento generalmente es un valor u otra cosa que la función necesita pasar para que pueda usarse en la función. A veces, esta es una necesidad si se definen ciertos parámetros para un determinado tipo de función para que funcione. Un ejemplo podría ser:

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Esta es la carne de una función. Ahí es donde sucede toda la magia. Es posible hacer funciones largas y avanzadas que tienen muchas condiciones diferentes y si son verdaderas, falsas o si se devuelve un valor específico, entonces realice una acción. De lo contrario, si no, haz otra cosa o no hagas nada en absoluto. Una secuencia de comandos no puede comprender cosas inesperadas, por lo que el programador tiene que pensar en el futuro y especificar qué debería hacer la secuencia de comandos, si algo sucede. Por supuesto, es imposible pensar en todas y cada una de las posibilidades, pero es posible encontrar muchas de las acciones comunes y menos comunes que se pueden tomar para cualquier cosa que afecte el script. Se llama hacer la escritura idiota a prueba. Hacer que el guión realmente haga algo se tratará un poco más abajo en esta guía.

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Esto simplemente le dice a la función "End here". Cada función necesita un final para cada condición agregada al script así como también para que la función se cierre y termine. No hay nada más para eso.

Hacer que una criatura diga Hola

Este será el Hello World! guión escrito para la emulación de World of Warcraft:

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Esta es una función válida y será algo que se puede llamar en cualquier parte del script. Pero, ¿qué sucede en este guión?

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Este es el nombre de nuestra función.

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Este es nuestro argumento llamado pUnit. Este es un argumento estándar utilizado para especificar que se trata de una criatura que hace lo que el usuario le dice que haga.

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Aquí viene la magia. El script asigna la acción de enviar un mensaje de chat a la unidad. Es por eso que está escrito como pUnit: SendChatMessage(). El uso de un colon SendChatMessage() es una función que toma tres argumentos:

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Type: Esto especifica qué tipo de mensaje está enviando. En este caso, grita. Una lista de diferentes tipos se puede encontrar al final de esta guía.
Lang: Como hay una buena cantidad de idiomas en World of Warcraft, esta función también necesita tener el idioma especificado. En este caso, se usa 0 ya que eso significa Universal. Cualquiera puede entender este mensaje. Una lista de diferentes idiomas se puede encontrar en la parte inferior de esta guía.
Menssage: Aquí es donde va el mensaje de esta función. Tiene que estar incluido entre comillas para mostrar dónde comienza y termina el mensaje.
Estos argumentos deben estar separados por comas.

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Y aquí terminamos la función para que sepa dónde está su final.
Ahora esta función necesita asignarse a algún tipo de evento. Si no es así, significa que es solo una función almacenada que nunca se usa.

Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

EntryID: este es el EntryID de tu Criatura al que se asignará este script.
Event: qué evento activará esta función. En este caso, es cuando la Criatura entra en combate. Una lista de diferentes eventos se puede encontrar al final de esta guía.
Function: Nombre de la función (en este caso Hello) encerrada entre comillas.

Entonces, cada vez que la criatura con el EntryID especificado se enfrente a la batalla, gritará "Hello there!".
Hay muchas otras funciones que el usuario puede llamar y asignar y muchas funciones de registro diferentes también. Ni siquiera tiene que ser una criatura que la función esté asignada también. Podría ser algo completamente diferente como un objeto de juego o incluso elementos. También podría ser el jugador en sí.
Esta introducción al lenguaje termina aquí.
¡Felicidades por la primera IA básica!

Recursos

Lista de tipos para SendChatMessage():
Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Lista de idiomas para SendChatMessage():
Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.

Lista de eventos para RegisterUnitEvent():
Codigo:
Necesitas, Acceder o Registrarse para ver el contenido.
 

cobra0357

Capataz
Desde
8 Aug 2020
Mensajes
88
Reacciones
33
Honor
37
Me podrías ayudar con la creación de un scrip bastante especifico
 

Crea una cuenta o inicia sesión para comentar

Debes ser usuario para poder dejar un comentario.

¡Regístrate!

Crea una cuenta en nuestra comunidad. ¡Es fácil!

Acceder

¿Ya tienes una cuenta? Accede aquí

3,855Temas
25,233Mensajes
15,558Usuarios
quirzeÚltimo usuario
Top