34. Services dan Data Model
Semua yang ada di dalam sebuah experience Roblox tergantung pada satu
objek akar yang disebut game — yaitu data
model. Tepat di bawahnya terdapat sekumpulan wadah besar yang
disebut services: Workspace menyimpan
dunia 3D, Players menyimpan para pemain,
ServerScriptService menyimpan kode server. Bab ini
memetakan tingkat teratas itu, supaya kamu selalu tahu ke mana harus
mencapai sesuatu.
game dan services
game adalah puncak dari pohon yang sudah dibahas di Bab
32, dan anak-anaknya adalah services. Kamu tidak pernah membuat mereka
sendiri — mereka selalu ada. Yang pertama kali kamu temui:
| Service | Menyimpan |
|---|---|
Workspace |
Dunia 3D: parts, model, dan baseplate. |
Players |
Satu objek Player untuk setiap orang yang
terhubung. |
ServerScriptService |
Script server. Pemain tidak bisa melihat isinya. |
ReplicatedStorage |
Hal-hal yang dibagikan antara server dan pemain. |
StarterGui |
Antarmuka layar yang diterima setiap pemain saat mulai. |
Lighting |
Waktu hari, kabut, dan efek pencahayaan. |
Mengambil service:
game:GetService
Akses sebuah service secara andal dengan
game:GetService("Nama"):
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")game.Players juga bisa dipakai, tapi
:GetService adalah bentuk yang digunakan oleh dokumentasi
Roblox, dan lebih aman — ia menemukan service bahkan di tempat di mana
bentuk titik biasa mungkin tidak berhasil. Biasakan menulis ini di
bagian atas setiap script.
workspace bersifat spesial: ia punya global-nya sendiri
yang ditulis dengan huruf kecil, jadi workspace artinya
sama dengan game:GetService("Workspace").
Di mana kode tinggal: server dan client
Roblox menjalankan experience-mu di dua tempat sekaligus, dan di mana sebuah script berada menentukan di mana ia dijalankan:
- Sebuah
Scriptdi dalamServerScriptServiceberjalan di server — komputer bersama yang meng-host permainan untuk semua orang. Gunakan ini untuk hal-hal yang mempengaruhi seluruh dunia: memunculkan koin, menyimpan skor. - Sebuah
LocalScriptberjalan di perangkat satu pemain saja. Gunakan ini untuk hal yang hanya dilihat pemain itu: layar mereka, kamera, dan tombol-tombol. - Sebuah
ModuleScriptadalah modul bersama dari Bab 25. Ia tidak berjalan sendiri; script lain me-require-nya.
Proyek-proyek di buku ini menggunakan Script server,
karena mereka mengubah dunia untuk semua orang.
Menjangkau ke seluruh pohon
Dari script mana pun kamu bisa berjalan dari game ke
mana saja. Beberapa pola yang akan sering kamu gunakan:
local Players = game:GetService("Players")
-- every player currently connected, as a list
for _, player in ipairs(Players:GetPlayers()) do
print(player.Name)
end-- a shared value other scripts can read, kept in ReplicatedStorage
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local roundTime = ReplicatedStorage:FindFirstChild("RoundTime")Players:GetPlayers() mengembalikan sebuah list yang bisa
kamu iterasi dengan ipairs, seperti list mana pun dari Bab
22. Di baliknya, pohon ini adalah tabel-tabel bersarang yang sama dari
Bab 23 — services hanyalah cabang-cabang teratas.
PR
Latihan tertulis. Tempel ke dalam sebuah Script di
ServerScriptService untuk mencobanya.
Soal 1 — Ambil services-nya
Buka exercises/34/homework/01-get-services.lua. Di
bagian atas sebuah script, ambil services Players dan
ReplicatedStorage ke dalam dua variabel lokal menggunakan
GetService.
Soal 2 — Daftarkan para pemain
Buka exercises/34/homework/02-list-players.lua. Dengan
Players:GetPlayers() dan perulangan ipairs,
cetak Name dari setiap pemain yang terhubung.
Soal 3 — Server atau client?
Buka exercises/34/homework/03-where.lua. Dalam sebuah
komentar, jawab: untuk kode yang memunculkan koin bagi semua orang,
apakah kamu akan menggunakan Script di
ServerScriptService atau LocalScript?
Mengapa?
Tantangan — Hitung para pemain
Buka exercises/34/homework/04-count-players.lua. Dengan
Players:GetPlayers() dan pola penghitungan dari Bab 20,
cetak berapa banyak pemain yang sedang terhubung.
Buntu atau sudah selesai? Buka halaman solusi PR.