Les structures de données sont comment les programmeurs stockent et organisent des ensembles entiers de données. Dans Luau, les structures de données sont créées avec des tables. Les tables peuvent contenir un nombre quelconque de valeurs.
Cet article couvre l'utilisation des tableaux, un type spécifique de table, pour créer un personnage qui parle.

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 qui parle
Pour explorer les tableaux, vous travaillerez avec un personnage non jouable (PNJ) qui, lorsqu'on clique dessus, montre une ligne de dialogue différente.
Ce projet utilisera un modèle de PNJ préfabriqué, qui comprend un script partiel et un détecteur de prompt mais qui n'a pas de dialogue.
Dans l'Explorateur, importez le PNJ en cliquant avec le bouton droit sur Workspace ⟩ Insérer à partir du fichier et sélectionnez le fichier téléchargé.
Codage d'un tableau de dialogues
Ces étapes utilisent un tableau pour stocker différentes phrases que le PNJ dira lorsque les joueurs interagiront avec lui.
Dans l'Explorateur, allez à PNJ ⟩ ProximityPrompt ⟩ ChatManager.
Dans ChatManager, à l'endroit indiqué dans le script, créez un tableau vide pour stocker les options de dialogue.
-- Parcourt les dialogues 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-- Ajoutez un tableau icilocal dialogueArray = {}local function speak()local dialogue = "J'ai une chose à dire !"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Dans les 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 !", "Est-ce que je te connais ?", "Au revoir !"}
Utiliser les indices de tableau
Chaque valeur dans le tableau se voit attribuer un numéro d'index. Les indices sont attribués aux valeurs dans l'ordre dans lequel les valeurs sont stockées. La première valeur est à l'index 1, la seconde à l'index 2, et ainsi de suite.
Certaines langues de codage, comme Java, commencent les indices à 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 assigner des morceaux spécifiques de dialogue au PNJ. 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 par défaut de chaîne de la variable dialogue par l'index 2.
local dialogueArray = {"Salut !", "Est-ce que je te connais ?", "Au revoir !"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endJouez le test et cliquez sur le PNJ. 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 PNJ, celui-ci dira toujours la même ligne. C'est ennuyeux. Au lieu de cela, utilisez une variable pour mettre à jour quel indice utiliser.
Chaque fois qu'un joueur interagit avec le PNJ, incrémentez la valeur de la variable de 1 pour afficher la ligne suivante de dialogue.
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 !", "Est-ce que 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)endAu 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 += 1endJouez le test et cliquez sur le PNJ 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 des tableaux
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 quand même 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 + 1endEssayez et confirmez que vous pouvez parcourir et redémarrer le dialogue.
Résumé
Les structures de données sont comment 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 (PNJ).
Script complet
-- Parcourt les dialogues 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
-- Ajoutez un tableau ici
local dialogueArray = {"Salut !", "Est-ce que 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 passe pas par le tableau de dialogue, essayez les conseils de dépannage suivants.
- Vérifiez l'instruction if qui remet dialogueIndex à 1. Dans l'instruction else, vérifiez que dialogueIndex a 1 ajouté à lui-même.
- Lors de la récupération de 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 pour que le dialogue du PNJ aille en arrière dans 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 PNJ montre 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 PNJ est cliqué
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end