Les structures de données sont la façon dont les programmeurs stockent et organisent des ensembles de données entiers. Dans Luau, les structures de données sont créées avec des tables. Les tables peuvent contenir n'importe quel nombre de valeurs.
Cet article traite de l'utilisation des tableaux, un type de table spécifique, pour créer un personnage parlant.

Tables
Les tables sont des types de données qui peuvent contenir plusieurs valeurs. Contrairement à d'autres types de données qui stockent une seule valeur, les tables n'ont pas de taille fixe et peuvent contenir un mélange de différents types de valeurs. Avec les tables, vous pouvez stocker des objets dans l'inventaire d'un joueur ou créer une liste de milliers de noms de joueurs.
Tableaux
Il existe différents types de tables. Un type est un tableau, qui stocke des listes de valeurs dans un ordre spécifique. Pour créer un tableau, créez une variable et assignez-lui des accolades { }. Séparez les valeurs à l'intérieur des accolades par des virgules comme ci-dessous :
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Créer un personnage parlant
Pour explorer les tableaux, vous allez travailler avec un personnage non jouable (NPC) qui, lorsqu'il est cliqué, affiche une ligne de dialogue différente.
Ce projet utilisera un modèle de NPC préfabriqué, qui comprend un script partiel et un détecteur de prompt, mais qui manque de dialogue.
Dans l'Explorateur, importez le NPC en cliquant avec le bouton droit sur Workspace ⟩ Insérer à partir du fichier et sélectionnez le fichier téléchargé.
Coder un tableau de dialogue
Ces étapes utilisent un tableau pour stocker différentes phrases que le NPC doit dire lorsque les joueurs interagissent avec lui.
Dans l'Explorateur, allez à NPC ⟩ ProximityPrompt ⟩ ChatManager.
Dans ChatManager, là où c'est marqué dans le script, créez un tableau vide pour stocker les options de dialogue.
-- Parcourt le dialogue de chat lorsque le prompt est utilisélocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Ajouter le tableau icilocal dialogueArray = {}local function speak()local dialogue = "J'ai une chose à dire !"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)À l'intérieur des accolades {} du tableau que vous venez de créer, tapez au moins trois chaînes de dialogue, séparées par des virgules.
local dialogueArray = {"Salut !", "Je te connais ?", "Au revoir !"}
Utiliser des index de tableau
Chaque valeur dans le tableau se voit attribuer un numéro d'index. Les index sont attribués aux valeurs dans l'ordre dans lequel les valeurs sont stockées. La première valeur est à l'index 1, la deuxième à l'index 2, et ainsi de suite.
Certaines langages de programmation, comme Java, commencent les index à 0.
Dans le tableau que vous venez de créer, "Salut" est à l'index 1, et "Au revoir !" est à l'index 3.
| Index | Valeur |
|---|---|
| 1 | Salut |
| 2 | Aujourd'hui est une belle journée ! |
| 3 | Au revoir ! |
Utiliser des valeurs d'index spécifiques
Utilisez des valeurs d'index pour attribuer des morceaux spécifiques de dialogue au NPC. Pour utiliser une valeur à un index spécifique, ajoutez l'index entre crochets directement après le nom du tableau, comme dialogueArray[1].
Remplacez la valeur de chaîne par défaut de la variable dialogue par l'index 2.
local dialogueArray = {"Salut !", "Je te connais ?", "Au revoir !"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endTestez le jeu et cliquez sur le NPC. La deuxième valeur du tableau devrait apparaître dans la bulle de chat. Essayez de modifier le code pour tester chaque valeur dans le tableau.

Changer les lignes de dialogue
Lorsque le joueur interagit avec le NPC, le NPC dira toujours la même ligne. C'est ennuyeux. Au lieu de cela, utilisez une variable pour mettre à jour quelle valeur d'index utiliser.
Chaque fois qu'un joueur interagit avec le NPC, incrémentez la valeur de la variable de 1 pour afficher la ligne de dialogue suivante.
Pour garder une trace de l'index actuel, ajoutez une nouvelle variable nommée dialogueIndex. Définissez la variable à 1 pour commencer au début du tableau.
local dialogueArray = {"Salut !", "Je te connais ?", "Au revoir !"}local dialogueIndex = 1Dans speak(), remplacez le numéro d'index dans dialogueArray[2] par la variable que vous venez de créer.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endEn bas de la fonction, ajoutez 1 à dialogueIndex. La prochaine fois que speak() est appelé, le dialogue affichera la prochaine chaîne.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endTestez le jeu et cliquez sur le NPC pour voir chaque chaîne de dialogue du tableau.
Remarquez qu'il y a une erreur dans la fenêtre de sortie une fois que le script atteint la fin du tableau.
Vous corrigerez cela dans la section suivante afin que le dialogue redémarre depuis le début après avoir affiché la dernière chaîne.
Tailles de tableau
Vous pouvez utiliser la taille du tableau pour savoir quand réinitialiser l'index désiré à 1. Trouvez la taille d'un tableau en tapant #, sans espaces, avant le nom d'un tableau.
Par exemple : #dialogueArray
Vérifiez la taille du tableau par rapport à la valeur actuelle de la variable pour savoir quand il est temps de recommencer depuis le début.
Redémarrer le dialogue
Utilisez la taille du tableau pour vérifier quand il est temps de revenir au premier morceau de dialogue.
Ajoutez une instruction if et vérifiez si dialogueIndex est égal à #dialogueArray, la taille totale de ce tableau. Si c'est le cas, alors définissez dialogueIndex à 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endSi dialogueIndex n'est pas à la fin, il devrait toujours ajouter 1 à dialogueIndex. Déplacez dialogueIndex += 1 sous une instruction else.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endJouez et confirmez que vous pouvez parcourir et redémarrer le dialogue.
Résumé
Les structures de données sont la façon dont des ensembles de données sont stockés. Luau utilise des tables pour créer des structures de données. Les tableaux sont un type de table qui peut contenir des listes ordonnées d'informations. Chaque valeur dans le tableau se voit attribuer un numéro d'index, en commençant par l'index 1.
Ce script a utilisé un tableau pour créer une liste de lignes de dialogue possibles pour un personnage non jouable (NPC).
-- Parcourt le dialogue de chat lorsque le prompt est utilisé
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Ajouter le tableau ici
local dialogueArray = {"Salut !", "Je te connais ?", "Au revoir !"}
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)Conseils de dépannage
Si le personnage ne parcourt pas le tableau de dialogue, essayez les conseils de dépannage suivants.
- Vérifiez l'instruction if que dialogueIndex est réinitialisé à 1. Dans l'instruction else, vérifiez que dialogueIndex a 1 ajouté à lui-même.
- Lorsque vous obtenez la taille du tableau, assurez-vous qu'il n'y a pas d'espaces après le # dans #dialogueArray.
Défis optionnels
Essayez l'un des défis optionnels ci-dessous.
- Codez le script de sorte que le dialogue du NPC passe en arrière à travers le tableau. L'index de dialogue devrait commencer à la longueur du tableau et soustraire à chaque fois au lieu d'ajouter.
- Au lieu d'afficher le dialogue dans l'ordre, faites en sorte que le NPC affiche une ligne de dialogue aléatoire à chaque fois en utilisant Random.new(). Un script d'exemple est inclus ci-dessous pour référence.
local randomGenerator = Random.new()
-- Affiche un nouveau dialogue chaque fois que le NPC est cliqué
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end