Estruturas de dados são como os programadores armazenam e organizam conjuntos inteiros de dados. No Luau, as estruturas de dados são criadas com tabelas. Tabelas podem conter qualquer número de valores.
Este artigo aborda o uso de arrays, um tipo específico de tabela, para criar um personagem falante.

Tabelas
Tabelas são tipos de dados que podem conter múltiplos valores. Ao contrário de outros tipos de dados que armazenam um único valor, as tabelas não têm um tamanho fixo e podem conter uma mistura de diferentes tipos de valores. Com tabelas, você pode armazenar itens no inventário de um jogador ou criar uma lista de milhares de nomes de jogadores.
Arrays
Existem diferentes tipos de tabelas. Um tipo é um array, que armazena listas de valores em uma ordem específica. Para criar um array, crie uma variável e atribua a ela chaves { }. Separe os valores dentro das chaves com vírgulas, como abaixo:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Criar um personagem falante
Para explorar arrays, você trabalhará com um personagem não jogável (NPC) que, ao ser clicado, mostra uma linha diferente de diálogo.
Este projeto usará um modelo de NPC pré-fabricado, que inclui um script parcial e um Detector de Prompt, mas carece de diálogo.
No Explorer, importe o NPC clicando com o botão direito em Workspace ⟩ Inserir a partir do Arquivo e selecione o arquivo baixado.
Programar um array de diálogo
Essas etapas usam um array para armazenar diferentes frases que o NPC dirá quando os jogadores interagirem com ele.
No Explorer, vá para NPC ⟩ ProximityPrompt ⟩ ChatManager.
No ChatManager, onde indicado no script, crie um array vazio para armazenar opções de diálogo.
-- Cicla através do diálogo de chat quando o prompt é usadolocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Adicione o array aquilocal dialogueArray = {}local function speak()local dialogue = "Eu tenho uma coisa a dizer!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Dentro das chaves {} do array criado, digite pelo menos três strings de diálogo, separadas por vírgulas.
local dialogueArray = {"Oi!", "Eu te conheço?", "Adeus!"}
Usar índices de array
Cada valor no array é atribuído a um número de índice. Os índices são atribuídos aos valores na ordem em que os valores são armazenados. O primeiro valor está no índice 1, o segundo no índice 2, e assim por diante.
Algumas linguagens de codificação, como Java, começam os índices em 0.
No array que acabamos de criar, "Oi!" está no índice 1, e "Adeus!" está no índice 3.
| Índice | Valor |
|---|---|
| 1 | Oi! |
| 2 | Hoje é um ótimo dia! |
| 3 | Adeus! |
Usar valores de índice específicos
Use valores de índice para atribuir pedaços específicos de diálogo ao NPC. Para usar um valor em um índice específico, adicione o índice entre colchetes logo após o nome do array, como dialogueArray[1].
Substitua o valor da string padrão da variável dialogue pelo índice 2.
local dialogueArray = {"Oi!", "Eu te conheço?", "Adeus!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endTeste o jogo e clique no NPC. O segundo valor do array deve aparecer na bolha de chat. Tente mudar o código para testar cada valor na tabela.

Alterar linhas de diálogo
Quando o jogador interage com o NPC, o NPC sempre dirá a mesma linha. Isso é chato. Em vez disso, use uma variável para atualizar qual valor de índice usar.
Sempre que um jogador interagir com o NPC, incremente o valor da variável em 1 para exibir a seguinte linha de diálogo.
Para acompanhar o índice atual, adicione uma nova variável chamada dialogueIndex. Defina a variável como 1 para começar no início do array.
local dialogueArray = {"Oi!", "Eu te conheço?", "Adeus!"}local dialogueIndex = 1Em speak(), substitua o número do índice em dialogueArray[2] pela variável que você acabou de criar.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endNo final da função, adicione 1 a dialogueIndex. Na próxima vez, speak() será chamado, o diálogo exibirá a próxima string.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endTeste o jogo e clique no NPC para ver cada string de diálogo do array.
Note que há um erro na janela de Saída assim que o script chega ao final do array.
Você corrigirá isso na próxima seção para que o diálogo reinicie do começo após exibir a última string.
Tamanhos de array
Você pode usar o tamanho do array para saber quando redefinir o índice desejado para 1. Encontre o tamanho de um array digitando #, sem espaços, antes do nome de um array.
Por exemplo: #dialogueArray
Verifique o tamanho do array em relação ao valor atual da variável para saber quando é hora de começar de novo.
Reiniciar o diálogo
Use o tamanho do array para verificar quando é hora de voltar para o primeiro pedaço de diálogo.
Adicione uma instrução if e verifique se dialogueIndex é igual a #dialogueArray, o tamanho total deste array. Se sim, então defina dialogueIndex como 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endSe dialogueIndex não estiver no final, ainda deve adicionar 1 a dialogueIndex. Mova dialogueIndex += 1 para debaixo de uma instrução else.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endJogue e confirme que você pode passar por e reiniciar o diálogo.
Resumo
Estruturas de dados são como conjuntos de dados são armazenados. Luau usa tabelas para criar estruturas de dados. Arrays são um tipo de tabela que pode conter listas ordenadas de informações. Cada valor dentro do array é atribuído a um número de índice, começando pelo índice 1.
Este script usou um array para criar uma lista de possíveis linhas de diálogo para um Personagem Não Jogável (NPC).
Script completo
-- Cicla através do diálogo de chat quando o prompt é usado
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Adicione o array aqui
local dialogueArray = {"Oi!", "Eu te conheço?", "Adeus!"}
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)
Dicas de resolução de problemas
Se o personagem não passar pelo array de diálogo, tente as seguintes dicas de resolução de problemas.
- Verifique a instrução if que define dialogueIndex de volta para 1. Na instrução else, verifique se dialogueIndex tem 1 adicionado a si mesmo.
- Ao obter o tamanho do array, certifique-se de que não há espaços após o # em #dialogueArray.
Desafios opcionais
Tente um dos desafios opcionais abaixo.
- Programe o script para que o diálogo do NPC vá para trás através do array. O índice de diálogo deve começar no comprimento do array e subtrair a cada vez, em vez de adicionar.
- Em vez de mostrar o diálogo em ordem, faça com que o NPC mostre uma linha aleatória de diálogo cada vez usando Random.new(). Um script de exemplo está incluído abaixo para referência:
local randomGenerator = Random.new()
-- Mostra um novo diálogo sempre que o NPC é clicado
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end