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

Tabelas
Tabelas são tipos de dados que podem conter vários 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 valor.Com tabelas, você pode armazenar itens no inventário de um jogador ou criar uma lista de milhares de nomes de jogadores.
Arranjos
Existem diferentes tipos de tabelas.Um tipo é um arranjo , que armazena listas de valores em uma ordem específica.Para criar um matriz / lista, crie uma variável e atribua-a curly brackets { } .Separe valores dentro dos parênteses com vírgulas como abaixo:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Crie um personagem falante
Para explorar arrays, você vai trabalhar com um personagem não jogável (NPC) que, quando clicado, mostra uma linha de diálogo diferente.
Este projeto usará um modelo NPC pré-feito, que inclui um script parcial e Detector de Prompt, mas carece de diálogo.
No Explorador, importe o NPC clicando com o botão direito em Área de Trabalho > Inserir a partir do Arquivo e selecione o arquivo baixado.
Codifique um matriz / listade diálogo
Essas etapas usam um array para armazenar diferentes frases para o NPC dizer quando os jogadores interagem com ele.
No Explorador , vá para NPC > ProximityPrompt > ChatManager.
No ChatManager, onde foi marcado no script, crie um array vazio para armazenar opções de diálogo.
-- Ciclos através do diálogo do 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 = "I've got one thing to say!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Dentro dos parênteses {} do array acabado de criar, digite pelo menos três strings de diálogo, separadas por vírgulas.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
Usar índices de array
Cada valor no array é atribuído um número index .Índices são atribuídos a 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.
Alguns idiomas de programação, como Java, começam índices em 0.
No array acabado de criar, "Hi" está no índice 1 e "Goodbye!" está no índice 3.
Índice | Valor |
---|---|
1 | Hi |
2 | Hoje é um ótimo dia! |
3 | Adeus! |
Usar valores de índice específicos
Use os valores de índice para atribuir peças específicas de diálogo ao NPC.Para usar um valor em um índice específico, adicione o índice em parênteses diretamente após o nome do matriz / lista, como dialogueArray[1] .
Substitua o valor padrão da variável dialogue pela string de índice 2.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endTeste e clique no NPC. O segundo valor do array deve aparecer na bolha de chat. Tente alterar o código para testar cada valor na tabela.
Mudar linhas de diálogo
Quando o jogador interage com o NPC, o NPC sempre dirá a mesma linha.Isso é tedioso.Em vez disso, use uma variável para atualizar qual valor de índice usar.
Sempre que um jogador interage com o NPC, aumente 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 para 1 para começar no início do matriz / lista.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local dialogueIndex = 1Em speak() , substitua o número do índice em dialogueArray[2] com a variável que você acabou de criar.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endNa parte inferior da função, adicione 1 a dialogueIndex. A próxima vez que speak() for chamada, o diálogo exibirá a próxima string / cadeia / texto.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endTeste e clique no NPC para ver cada string de diálogo da matriz / lista.
Observe que há um erro erro na janela de Saída assim que o script chegar ao fim do matriz / lista.
Você corrigirá isso na próxima seção para que o diálogo seja reiniciado do início depois de mostrar a última string / cadeia / texto.
Tamanhos de array
Você pode usar o tamanho do array para saber quando reiniciar o índice desejado para 1.Encontre o tamanho de um array digitando # , sem espaços, antes do nome de um matriz / lista.
Por exemplo: #dialogueArray
Verifique o tamanho do matriz / listacontra o valor atual da variável para saber quando é hora de voltar ao começo.
Reiniciar o diálogo
Use o tamanho do array para verificar quando é hora de voltar à primeira peça de diálogo.
Adicione uma declaração if e verifique se dialogueIndex iguala #dialogueArray, o tamanho total desse matriz / lista. Se assim for, então defina dialogueIndex para 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endSe dialogueIndex não estiver no terminar/parar/sair, ainda deve adicionar 1 a dialogueIndex . Movimento dialogueIndex += 1 sob uma declaraçã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 alternar e reiniciar o diálogo.
Sumário
Estruturas de dados são como conjuntos de dados são armazenados.Luau usa tabelas para criar estruturas de dados.Arranjos são um tipo de tabela que pode conter listas ordenadas de informações.Cada valor dentro do array é atribuído um número de índice, começando com o í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).
scriptconcluído
-- Ciclos através do diálogo do 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 = {"Hi!", "Do I know you?", "Goodbye!"}
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 solução de problemas
Se o personagem não passar pela matriz de diálogo, tente as seguintes dicas de solução de problemas.
- Verifique se a declaração if que dialogueIndex está definida de volta para 1. Na declaração else, verifique se dialogueIndex tem 1 adicionado a si mesmo.
- Ao obter o tamanho do matriz / lista, certifique-se de que não há espaços após o # em #dialogueArray.
Desafios facultativos
Tente um dos desafios opcionais abaixo.
- Codifique o script para que o diálogo do NPC vá para trás através do matriz / lista.O índice de diálogo deve começar no array e subtrair cada vez em vez de adicionar.
- Em vez de mostrar diálogo em ordem, faça com que o NPC mostre uma linha de diálogo aleatória cada vez usando Random.new().Um script de amostra é 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