Introdução a arrays

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

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.

  1. Baixe o NPC modelo.

  2. No Explorer, importe o NPC clicando com o botão direito em WorkspaceInserir a partir do Arquivo e selecione o arquivo baixado.

Essas etapas usam um array para armazenar diferentes frases que o NPC dirá quando os jogadores interagirem com ele.

  1. No Explorer, vá para NPCProximityPromptChatManager.

  2. 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 é 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 = {}
    local function speak()
    local dialogue = "Eu tenho uma coisa a dizer!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. 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.

ÍndiceValor
1Oi!
2Hoje é um ótimo dia!
3Adeus!

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].

  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)
    end
  2. Teste 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.

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.

  1. 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 = 1
  2. Em 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)
    end
  3. No 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 += 1
    end
  4. Teste 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.

Use o tamanho do array para verificar quando é hora de voltar para o primeiro pedaço de diálogo.

  1. 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 then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. Se 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 + 1
    end
  3. Jogue 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
©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.