Las estructuras de datos son la forma en que los programadores almacenan y organizan conjuntos completos de datos. En Luau, las estructuras de datos se crean con tablas. Las tablas pueden contener cualquier número de valores.
Este artículo cubre el uso de arreglos, un tipo específico de tabla, para crear un personaje que habla.

Tablas
Las tablas son tipos de datos que pueden contener múltiples valores. A diferencia de otros tipos de datos que almacenan un solo valor, las tablas no tienen un tamaño fijo y pueden contener una mezcla de diferentes tipos de valores. Con las tablas, puedes almacenar elementos en el inventario de un jugador o crear una lista de miles de nombres de jugadores.
Arreglos
Hay diferentes tipos de tablas. Un tipo es un arreglo, que almacena listas de valores en un orden específico. Para crear un arreglo, crea una variable y asígnale llaves { }. Separa los valores dentro de las llaves con comas como se muestra a continuación:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Crear un personaje que habla
Para explorar los arreglos, trabajarás con un personaje no jugable (NPC) que, al hacer clic, muestra una línea de diálogo diferente.
Este proyecto utilizará un modelo de NPC prehecho, que incluye un script parcial y un Detector de Prompts, pero carece de diálogo.
En el Explorador, importa el NPC haciendo clic derecho en Workspace ⟩ Insertar desde archivo y selecciona el archivo descargado.
Codificar un arreglo de diálogo
Estos pasos utilizan un arreglo para almacenar diferentes frases que el NPC dirá cuando los jugadores interactúen con él.
En el Explorador, ve a NPC ⟩ ProximityPrompt ⟩ ChatManager.
En ChatManager, donde se indica en el script, crea un arreglo vacío para almacenar las opciones de diálogo.
-- Ciclos a través del diálogo de chat cuando se usa el promptlocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Agrega el arreglo aquílocal dialogueArray = {}local function speak()local dialogue = "¡Tengo una cosa que decir!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Dentro de las llaves {} del arreglo que acabas de crear, escribe al menos tres cadenas de diálogo, separadas por comas.
local dialogueArray = {"¡Hola!", "¿Te conozco?", "¡Adiós!"}
Usar índices de arreglo
Cada valor en el arreglo se asigna un número de índice. Los índices se asignan a los valores en el orden en que se almacenan. El primer valor está en el índice 1, el segundo en el índice 2, y así sucesivamente.
Algunos lenguajes de programación, como Java, comienzan los índices en 0.
En el arreglo que acabas de crear, "¡Hola!" está en el índice 1, y "¡Adiós!" está en el índice 3.
| Índice | Valor |
|---|---|
| 1 | ¡Hola! |
| 2 | ¡Hoy es un gran día! |
| 3 | ¡Adiós! |
Usar valores de índice específicos
Usa valores de índice para asignar piezas específicas de diálogo al NPC. Para usar un valor en un índice específico, agrega el índice entre corchetes directamente después del nombre del arreglo, como dialogueArray[1].
Reemplaza el valor de cadena predeterminado de la variable dialogue con el índice 2.
local dialogueArray = {"¡Hola!", "¿Te conozco?", "¡Adiós!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endPrueba el juego y haz clic en el NPC. El segundo valor del arreglo debería aparecer en el globo de chat. Intenta cambiar el código para probar cada valor en la tabla.

Cambiar líneas de diálogo
Cuando el jugador interactúa con el NPC, el NPC siempre dirá la misma línea. Eso es aburrido. En su lugar, usa una variable para actualizar qué valor de índice usar.
Cada vez que un jugador interactúa con el NPC, incrementa el valor de la variable en 1 para mostrar la siguiente línea de diálogo.
Para hacer un seguimiento del índice actual, agrega una nueva variable llamada dialogueIndex. Establece la variable en 1 para comenzar al principio del arreglo.
local dialogueArray = {"¡Hola!", "¿Te conozco?", "¡Adiós!"}local dialogueIndex = 1En speak(), reemplaza el número de índice en dialogueArray[2] con la variable que acabas de crear.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endAl final de la función, suma 1 a dialogueIndex. La próxima vez que se llame a speak(), el diálogo mostrará la siguiente cadena.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endPrueba el juego y haz clic en el NPC para ver cada cadena de diálogo del arreglo.
Nota que hay un error en la ventana de salida una vez que el script alcanza el final del arreglo.
Arreglarás esto en la siguiente sección para que el diálogo se reinicie desde el principio después de mostrar la última cadena.
Tamaños de arreglo
Puedes usar el tamaño del arreglo para saber cuándo restablecer el índice deseado a 1. Encuentra el tamaño de un arreglo escribiendo #, sin espacios, antes del nombre de un arreglo.
Por ejemplo: #dialogueArray
Compara el tamaño del arreglo con el valor actual de la variable para saber cuándo es el momento de comenzar de nuevo.
Reiniciar el diálogo
Usa el tamaño del arreglo para verificar cuándo es el momento de volver a la primera pieza de diálogo.
Agrega una declaración if y verifica si dialogueIndex es igual a #dialogueArray, el tamaño total de este arreglo. Si es así, establece dialogueIndex en 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endSi dialogueIndex no está al final, aún debería sumar 1 a dialogueIndex. Mueve dialogueIndex += 1 bajo una declaración else.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endJuega y confirma que puedes ciclar y reiniciar el diálogo.
Resumen
Las estructuras de datos son la forma en que se almacenan los conjuntos de datos. Luau utiliza tablas para crear estructuras de datos. Los arreglos son un tipo de tabla que puede contener listas ordenadas de información. Cada valor dentro del arreglo se asigna un número de índice, comenzando con el índice 1.
Este script utilizó un arreglo para crear una lista de posibles líneas de diálogo para un Personaje No Jugable (NPC).
-- Ciclos a través del diálogo de chat cuando se usa el prompt
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Agrega el arreglo aquí
local dialogueArray = {"¡Hola!", "¿Te conozco?", "¡Adiós!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
end
prompt.Triggered:Connect(speak)Consejos de solución de problemas
Si el personaje no pasa por el arreglo de diálogo, prueba los siguientes consejos de solución de problemas.
- Verifica la declaración if que establece dialogueIndex de nuevo en 1. En la declaración else, verifica que se le haya sumado 1 a dialogueIndex.
- Al obtener el tamaño del arreglo, asegúrate de que no haya espacios después del # en #dialogueArray.
Desafíos opcionales
Intenta uno de los desafíos opcionales a continuación.
- Codifica el script para que el diálogo del NPC retroceda a través del arreglo. El índice de diálogo debería comenzar en la longitud del arreglo y restar cada vez en lugar de sumar.
- En lugar de mostrar el diálogo en orden, haz que el NPC muestre una línea de diálogo aleatoria cada vez usando Random.new(). A continuación se incluye un script de muestra para referencia.
local randomGenerator = Random.new()
-- Muestra un nuevo diálogo cada vez que se hace clic en el NPC
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end