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 Script di dalam ServerScriptService berjalan 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 LocalScript berjalan di perangkat satu pemain saja. Gunakan ini untuk hal yang hanya dilihat pemain itu: layar mereka, kamera, dan tombol-tombol.
  • Sebuah ModuleScript adalah 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.