Struktur data adalah cara para pengembang menyimpan dan mengorganisasi seluruh set data. Di Luau, struktur data dibuat dengan tabel. Tabel dapat menyimpan sejumlah nilai.
Artikel ini membahas penggunaan array, jenis tabel tertentu, untuk membuat karakter yang bisa bicara.

Tabel
Tabel adalah tipe data yang dapat menyimpan beberapa nilai. Tidak seperti tipe data lain yang menyimpan satu nilai, tabel tidak memiliki ukuran tetap dan dapat menyimpan campuran jenis nilai yang berbeda. Dengan tabel, Anda dapat menyimpan item di inventaris pemain atau membuat daftar ribuan nama pemain.
Array
Ada berbagai jenis tabel. Salah satu jenisnya adalah array, yang menyimpan daftar nilai dalam urutan tertentu. Untuk membuat array, buat sebuah variabel dan berikan tanda kurung kurawal { }. Pisahkan nilai di dalam kurung dengan koma seperti di bawah ini:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Buat karakter yang bisa bicara
Untuk mengeksplorasi array, Anda akan bekerja dengan karakter non-playable (NPC) yang, ketika diklik, menampilkan baris dialog yang berbeda.
Proyek ini akan menggunakan model NPC yang sudah dibuat, yang mencakup skrip sebagian dan Detektor Prompt, tetapi tidak memiliki dialog.
Di Explorer, impor NPC dengan mengklik kanan pada Workspace ⟩ Insert From File dan pilih file yang sudah diunduh.
Kode array dialog
Langkah-langkah ini menggunakan array untuk menyimpan berbagai frasa yang harus diucapkan NPC ketika pemain berinteraksi dengannya.
Di Explorer, pergi ke NPC ⟩ ProximityPrompt ⟩ ChatManager.
Di ChatManager, di mana ditandai dalam skrip, buat array kosong untuk menyimpan opsi dialog.
-- Mengulangi dialog obrolan saat prompt digunakanlocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Tambahkan array di sinilocal dialogueArray = {}local function speak()local dialogue = "Saya hanya punya satu hal untuk dikatakan!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Di dalam kurung {} dari array yang baru saja dibuat, ketik setidaknya tiga string dialog, dipisahkan oleh koma.
local dialogueArray = {"Hai!", "Apakah saya kenal kalian?", "Selamat tinggal!"}
Gunakan indeks array
Setiap nilai dalam array diberikan nomor indeks. Indeks diberikan untuk nilai dalam urutan di mana nilai disimpan. Nilai pertama berada di indeks 1, yang kedua di indeks 2, dan seterusnya.
Beberapa bahasa pemrograman, seperti Java, memulai indeks dari 0.
Dalam array yang baru saja dibuat, "Hai!" berada di indeks 1, dan "Selamat tinggal!" berada di indeks 3.
| Indeks | Nilai |
|---|---|
| 1 | Hai! |
| 2 | Hari ini adalah hari yang hebat! |
| 3 | Selamat tinggal! |
Gunakan nilai indeks tertentu
Gunakan nilai indeks untuk menetapkan bagian dialog tertentu kepada NPC. Untuk menggunakan nilai di indeks tertentu, tambahkan indeks dalam kurung langsung setelah nama array, seperti dialogueArray[1].
Ganti nilai string default variabel dialogue dengan indeks 2.
local dialogueArray = {"Hai!", "Apakah saya kenal kalian?", "Selamat tinggal!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endUji coba dan klik NPC. Nilai array kedua harus muncul di gelembung obrolan. Cobalah mengubah kode untuk menguji masing-masing nilai dalam tabel.

Ubah baris dialog
Ketika pemain berinteraksi dengan NPC, NPC akan selalu mengatakan baris yang sama. Itu membosankan. Sebagai gantinya, gunakan variabel untuk memperbarui nilai indeks mana yang harus digunakan.
Setiap kali seorang pemain berinteraksi dengan NPC, tingkatkan nilai variabel dengan 1 untuk menampilkan baris dialog berikutnya.
Untuk melacak indeks saat ini, tambahkan variabel baru bernama dialogueIndex. Set variabel tersebut ke 1 untuk memulai dari awal array.
local dialogueArray = {"Hai!", "Apakah saya kenal kalian?", "Selamat tinggal!"}local dialogueIndex = 1Di dalam speak(), ganti nomor indeks pada dialogueArray[2] dengan variabel yang baru saja Anda buat.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endDi bagian bawah fungsi, tambahkan 1 ke dialogueIndex. Kesempatan berikutnya speak() dipanggil, dialog akan menampilkan string berikutnya.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endUji coba dan klik NPC untuk melihat setiap string dialog dari array.
Perhatikan ada kesalahan di jendela Output sekali skrip mencapai akhir array.
Anda akan memperbaikinya di bagian berikutnya agar dialog bisa dimulai lagi dari awal setelah menampilkan string terakhir.
Ukuran array
Anda dapat menggunakan ukuran array untuk mengetahui kapan mengatur ulang indeks yang diinginkan ke 1. Temukan ukuran array dengan mengetik #, tanpa spasi, sebelum nama array.
Contohnya: #dialogueArray
Periksa ukuran array terhadap nilai variabel saat ini untuk mengetahui kapan saatnya kembali pada awal.
Mulai ulang dialog
Gunakan ukuran array untuk memeriksa kapan saatnya kembali ke potongan dialog pertama.
Tambahkan pernyataan if dan periksa jika dialogueIndex sama dengan #dialogueArray, total ukuran array ini. Jika ya, maka atur dialogueIndex ke 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endJika dialogueIndex tidak berada di akhir, seharusnya tetap menambahkan 1 ke dialogueIndex. Pindahkan dialogueIndex += 1 di bawah pernyataan else.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1endMainkan dan pastikan Anda dapat berputar dan memulai ulang dialog.
Ringkasan
Struktur data adalah bagaimana kumpulan data disimpan. Luau menggunakan tabel untuk membuat struktur data. Array adalah jenis tabel yang dapat menyimpan daftar informasi yang terurut. Setiap nilai dalam array diberikan nomor indeks, mulai dari indeks 1.
Skrip ini menggunakan array untuk membuat daftar kemungkinan baris dialog untuk Karakter Non-Playable (NPC).
Skrip Lengkap
-- Mengulangi dialog obrolan saat prompt digunakan
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Tambahkan array di sini
local dialogueArray = {"Hai!", "Apakah saya kenal kalian?", "Selamat tinggal!"}
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)
Tips pemecahan masalah
Jika karakter tidak melewati array dialog, coba tips pemecahan masalah berikut.
- Periksa pernyataan if yang mengatur dialogueIndex kembali ke 1. Dalam pernyataan else, periksa bahwa dialogueIndex telah bertambah 1.
- Saat mendapatkan ukuran array, pastikan tidak ada spasi setelah # di #dialogueArray.
Tantangan opsional
Cobalah salah satu tantangan opsional di bawah ini.
- Kode skrip sehingga dialog NPC berjalan mundur melalui array. Indeks dialog harus dimulai dari panjang array dan mengurangi setiap kali alih-alih menambahkan.
- Alih-alih menunjukkan dialog secara urut, buat agar NPC menampilkan baris dialog acak setiap kali menggunakan Random.new(). Skrip contoh disertakan di bawah ini untuk referensi
local randomGenerator = Random.new()
-- Menampilkan dialog baru setiap kali NPC diklik
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end