35. leaderstats dan value objects
Hampir setiap game Roblox menampilkan papan skor di sudut kanan atas: koin, poin, kemenangan. Roblox membangunnya secara otomatis — jika kamu menyiapkan datanya dengan benar. Triknya: value objects di dalam sebuah folder bernama leaderstats.
Value objects menyimpan satu nilai
Kamu sudah menyimpan angka dan teks di dalam variabel. Roblox juga punya Instances yang tugasnya hanya menyimpan satu nilai, hidup di dalam pohon Instance agar bisa dilihat oleh game:
| Value object | Menyimpan |
|---|---|
IntValue |
bilangan bulat |
NumberValue |
angka dengan desimal |
StringValue |
teks |
BoolValue |
true / false |
Buat salah satunya seperti Instance biasa, lalu baca atau ubah
nilainya lewat .Value:
local coins = Instance.new("IntValue")
coins.Name = "Coins"
coins.Value = 0
-- later:
coins.Value = coins.Value + 1Aturan leaderstats
Aturan ajaibnya: jika seorang Player punya
folder anak bernama persis leaderstats, Roblox akan
menampilkan setiap value object di dalamnya pada leaderboard,
dengan Name masing-masing objek menjadi judul kolom.
Jadi skor "Coins" per pemain artinya:
Player
└─ leaderstats (a Folder)
└─ Coins (an IntValue, starting at 0)
Membangunnya saat pemain bergabung
Pemain muncul satu per satu, jadi bangun leaderstats mereka di dalam
handler PlayerAdded (Bab 33), lewat sebuah
Script di ServerScriptService:
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats" -- the exact name matters
leaderstats.Parent = player
local coins = Instance.new("IntValue")
coins.Name = "Coins" -- becomes the column heading
coins.Value = 0
coins.Parent = leaderstats
end)Dua nama itulah yang melakukan semua pekerjaan: folder harus bernama
leaderstats, dan nama value object menjadi kolom. Tulis
keduanya dengan benar dan papan skor akan muncul sendiri.
Mengubah skor
Setelah value object ada, menambah skor cukup satu baris. Dari
handler sentuhan koin, cari Coins milik pemain dan
tambahkan:
local leaderstats = player:FindFirstChild("leaderstats")
local coins = leaderstats:FindFirstChild("Coins")
coins.Value = coins.Value + 1FindFirstChild (Bab 32) adalah cara aman untuk masuk ke
dalam pohon Instance: ia mengembalikan nil alih-alih error
ketika sesuatu tidak ada, jadi periksa dulu sebelum dipakai.
Inilah mekanisme di balik mini-proyek terakhir: Touch-to-Collect Coin
menyiapkan leaderstats dan menambahkan koin saat disentuh;
Collect-All-Coins melakukan hal yang sama untuk banyak koin
sekaligus.
PR (Pekerjaan Rumah)
PR terakhir dari buku ini. Potongan kode Roblox — tulis, cek solusinya, coba di Studio.
Soal 1 — Sebuah value Points
Buka exercises/35/homework/01-points-value.lua. Buat
sebuah IntValue bernama Points, dimulai dari
0. Cukup value object saja — tanpa folder.
Soal 2 — leaderstats saat bergabung
Buka exercises/35/homework/02-leaderstats.lua. Di dalam
handler PlayerAdded, beri setiap pemain folder
leaderstats yang berisi sebuah IntValue
bernama Wins, dimulai dari 0.
Soal 3 — Tambah kemenangan
Buka exercises/35/homework/03-add-win.lua. Dengan sebuah
player yang sudah ada, cari leaderstats mereka
lalu Wins, dan tambahkan 1 ke
Value-nya — gunakan FindFirstChild, dijaga
dengan if.
Tantangan — Dua stats
Buka exercises/35/homework/04-two-stats.lua. Perluas
setup PlayerAdded sehingga setiap leaderstats
menyimpan dua stat: Coins (IntValue
mulai dari 0) dan Rank
(StringValue berisi "Novice").
Masih bingung atau sudah selesai? Buka halaman solusi PR.