Struktur data adalah cara para pengkode menyimpan dan mengorganisir 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 dapat berbicara.

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 berbagai tipe nilai. Dengan tabel, Anda dapat menyimpan item dalam 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 variabel dan tetapkan dengan kurung kurawal { }. Pisahkan nilai di dalam kurung dengan koma seperti di bawah ini:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Buat karakter yang dapat berbicara
Untuk menjelajahi array, Anda akan bekerja dengan karakter non-playable (NPC) yang, ketika diklik, menunjukkan baris dialog yang berbeda.
Proyek ini akan menggunakan model NPC yang sudah dibuat sebelumnya, 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 diunduh.
Kode array dialog
Langkah-langkah ini menggunakan array untuk menyimpan berbagai frasa yang akan diucapkan NPC ketika pemain berinteraksi dengannya.
Di Explorer, pergi ke NPC ⟩ ProximityPrompt ⟩ ChatManager.
Di ChatManager, di tempat yang ditandai dalam skrip, buat array kosong untuk menyimpan opsi dialog.
-- Mengulang 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 ingin mengatakan satu hal!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)Di dalam kurung {} dari array yang baru saja dibuat, ketik setidaknya tiga string dialog, dipisahkan dengan koma.
local dialogueArray = {"Hai!", "Apakah saya mengenalmu?", "Selamat tinggal!"}
Gunakan indeks array
Setiap nilai dalam array diberikan nomor indeks. Indeks diberikan kepada 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 potongan dialog tertentu kepada NPC. Untuk menggunakan nilai pada 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 mengenalmu?", "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 setiap 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 akan digunakan.
Setiap kali pemain berinteraksi dengan NPC, tingkatkan nilai variabel sebesar 1 untuk menampilkan baris dialog berikutnya.
Untuk melacak indeks saat ini, tambahkan variabel baru bernama dialogueIndex. Atur variabel tersebut ke 1 untuk memulai dari awal array.
local dialogueArray = {"Hai!", "Apakah saya mengenalmu?", "Selamat tinggal!"}local dialogueIndex = 1Di speak(), ganti nomor indeks di 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. Kali 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 setelah skrip mencapai akhir array.
Anda akan memperbaikinya di bagian berikutnya sehingga dialog dimulai kembali dari awal setelah menampilkan string terakhir.
Ukuran array
Anda dapat menggunakan ukuran array untuk mengetahui kapan harus mengatur ulang indeks yang diinginkan ke 1. Temukan ukuran array dengan mengetik #, tanpa spasi, sebelum nama array.
Misalnya: #dialogueArray
Periksa ukuran array terhadap nilai variabel saat ini untuk mengetahui kapan saatnya untuk mulai kembali ke awal.
Mulai ulang dialog
Gunakan ukuran array untuk memeriksa kapan saatnya untuk kembali ke potongan dialog pertama.
Tambahkan pernyataan if dan periksa apakah 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, itu harus 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 konfirmasi Anda dapat berputar melalui dan memulai ulang dialog.
Ringkasan
Struktur data adalah cara set 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, dimulai dengan indeks 1.
Skrip ini menggunakan array untuk membuat daftar kemungkinan baris dialog untuk Karakter Non-Playable (NPC).
-- Mengulang 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 mengenalmu?", "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 melalui array dialog, coba tips pemecahan masalah berikut.
- Periksa pernyataan if yang mengatur dialogueIndex kembali ke 1. Dalam pernyataan else, periksa bahwa dialogueIndex memiliki 1 ditambahkan ke dirinya sendiri.
- 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 daripada menambah.
- Alih-alih menunjukkan dialog secara berurutan, buat NPC menunjukkan baris dialog acak setiap kali menggunakan Random.new(). Skrip contoh disertakan di bawah ini untuk referensi
local randomGenerator = Random.new()
-- Menunjukkan dialog baru setiap kali NPC diklik
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end