2. Kelola data dan leaderboard
Setelah memahami cara kerja skrip server dasar, langkah selanjutnya adalah menyiapkan sistem penyimpanan data pemain. Di Roblox, kita memisahkan logika data ke dalam ModuleScript di dalam ServerStorage agar kodenya rapi, modular, dan dapat dipakai ulang oleh skrip lain.
Yang akan kamu pelajari
Section titled “Yang akan kamu pelajari”Di akhir materi ini, kamu akan bisa:
- Memahami konsep dan kegunaan
ModuleScriptdiServerStorage. - Membuat modul
Leaderboarduntuk menampilkan papan skor (leaderstats) di layar pemain. - Membuat modul
PlayerDatauntuk menyimpan data sesi sementara (Coins, Jump, Stage). - Memahami cara kerja fungsi baca (
getValue) dan ubah (updateValue) data.
Sebelum mulai
Section titled “Sebelum mulai”- Selesaikan materi Buat script pertamamu.
- Buka project
Coin Adventure. - Pastikan jendela Explorer terbuka.
Kenali ServerStorage dan ModuleScript
Section titled “Kenali ServerStorage dan ModuleScript”ServerStorage: Folder penyimpanan khusus server. Objek dan modul di sini aman dan tidak direplikasi ke client (pemain).ModuleScript: Skrip khusus yang berisi kumpulan fungsi atau data yang dapat diekspor dan dipanggil oleh skrip lain menggunakan perintahrequire().
1. Buat Modul Leaderboard
Section titled “1. Buat Modul Leaderboard”Modul ini bertugas membuat folder leaderstats di bawah karakter pemain agar Roblox menampilkan papan skor di pojok kanan atas layar secara otomatis.
- Di Explorer, arahkan kursor ke
ServerStorage, lalu klik tanda +. - Tambahkan sebuah
ModuleScriptdan beri namaLeaderboard. - Isi dengan kode berikut:
flowchart LR classDef trigger fill:#0369a1,stroke:#38bdf8,stroke-width:2px,color:#ffffff; classDef condition fill:#b45309,stroke:#f59e0b,stroke-width:2px,color:#ffffff; classDef action fill:#047857,stroke:#10b981,stroke-width:2px,color:#ffffff; classDef finish fill:#334155,stroke:#94a3b8,stroke-width:2px,color:#ffffff;
Init["<b>Inisialisasi</b><br/>Leaderboard = {}"]:::trigger Call["<b>Panggil Fungsi</b><br/>setStat(player, stat, val)"]:::trigger Check{"<b>Validasi</b><br/>Folder / Stat ada?"}:::condition Create["<b>Buat Objek</b><br/>Folder leaderstats / IntValue"]:::action Update["<b>Update Nilai</b><br/>stat.Value = val"]:::action Done["<b>Selesai</b><br/>return Leaderboard"]:::finish
Init --> Call --> Check Check -- "Belum ada" --> Create --> Update Check -- "Sudah ada" --> Update Update --> Done- Baris 1: Membuat tabel kosong
Leaderboardsebagai objek modul yang akan diekspor. - Baris 3-9: Fungsi privat
setupLeaderboardmembuat folderleaderstatsdi bawah objekplayeragar Roblox mendeteksi dan menampilkan papan skor. - Baris 11-17: Fungsi privat
setupStatmembuat objekIntValuebaru untuk nama statistik yang diminta. - Baris 19-31: Fungsi publik
Leaderboard.setStatmencari folder dan nilai stat pemain. Jika belum ada, fungsi akan membuatnya otomatis, lalu mengisistat.Value = value. - Baris 33: Mengembalikan tabel modul
Leaderboardagar bisa di-require oleh skrip lain.
local Leaderboard = {}
local function setupLeaderboard(player) local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = player return leaderstatsend
local function setupStat(leaderstats, statName) local stat = Instance.new("IntValue") stat.Name = statName stat.Value = 0 stat.Parent = leaderstats return statend
function Leaderboard.setStat(player, statName, value) local leaderstats = player:FindFirstChild("leaderstats") if not leaderstats then leaderstats = setupLeaderboard(player) end
local stat = leaderstats:FindFirstChild(statName) if not stat then stat = setupStat(leaderstats, statName) end
stat.Value = valueend
return LeaderboardSalin prompt berikut ke chat AI di Visual Studio Code (dengan Roblox Studio MCP aktif):
Buatkan ModuleScript bernama "Leaderboard" di ServerStorage:- Buat folder leaderstats dan nilai statistik pemain (Coins, Jump, Stage).- Buat fungsi setStat untuk memperbarui angka papan skor secara otomatis.2. Buat Modul PlayerData
Section titled “2. Buat Modul PlayerData”Modul ini bertugas menyimpan data sementara pemain selama berada di dalam server game, seperti jumlah koin, kekuatan lompat, dan nomor stage aktif.
- Di
ServerStorage, klik tanda + lagi dan tambahkanModuleScriptkedua. - Beri nama
PlayerData. - Isi dengan kode berikut:
flowchart LR classDef trigger fill:#0369a1,stroke:#38bdf8,stroke-width:2px,color:#ffffff; classDef condition fill:#b45309,stroke:#f59e0b,stroke-width:2px,color:#ffffff; classDef action fill:#047857,stroke:#10b981,stroke-width:2px,color:#ffffff; classDef finish fill:#334155,stroke:#94a3b8,stroke-width:2px,color:#ffffff;
Init["<b>Inisialisasi</b><br/>Tabel playerData = {}"]:::trigger Get["<b>getValue</b><br/>Baca data pemain"]:::trigger Update["<b>updateValue</b><br/>Hitung data baru"]:::trigger Process["<b>Akses Memori</b><br/>Ambil data sesi UserId"]:::action Save["<b>Simpan Nilai</b><br/>data[key] = newValue"]:::action Done["<b>Kembalikan Data</b><br/>return nilai / PlayerData"]:::finish
Init --> Process Get --> Process --> Done Update --> Process --> Save --> Done- Baris 1-5: Mendefinisikan konstanta kunci data (
Coins,Jump,Stage) agar tidak terjadi salah ketik nama variabel di skrip lain. - Baris 7-15: Menyiapkan tabel memori internal
playerDatadan fungsi yang menyediakan nilai default (Coins: 0, Jump: 0, Stage: 1). - Baris 17-21: Fungsi privat
getDatamencari data pemain berdasarkanUserIduniknya. - Baris 23-25: Fungsi publik
PlayerData.getValuemengambil nilai data pemain saat ini. - Baris 27-34: Fungsi publik
PlayerData.updateValuemenerima fungsi kalkulasi untuk memperbarui nilai data secara aman. - Baris 36: Mengembalikan tabel modul
PlayerData.
local PlayerData = {}
PlayerData.COIN_KEY_NAME = "Coins"PlayerData.JUMP_KEY_NAME = "Jump"PlayerData.STAGE_KEY_NAME = "Stage"
local playerData = {}
local function defaultPlayerData() return { [PlayerData.COIN_KEY_NAME] = 0, [PlayerData.JUMP_KEY_NAME] = 0, [PlayerData.STAGE_KEY_NAME] = 1, }end
local function getData(player) local data = playerData[tostring(player.UserId)] or defaultPlayerData() playerData[tostring(player.UserId)] = data return dataend
function PlayerData.getValue(player, key) return getData(player)[key]end
function PlayerData.updateValue(player, key, updateFunction) local data = getData(player) local oldValue = data[key] local newValue = updateFunction(oldValue)
data[key] = newValue return newValueend
return PlayerDataSalin prompt berikut ke chat AI di Visual Studio Code (dengan Roblox Studio MCP aktif):
Buatkan ModuleScript bernama "PlayerData" di ServerStorage:- Simpan data sesi pemain (Coins: 0, Jump: 0, Stage: 1).- Buat fungsi getValue untuk membaca data dan updateValue untuk mengubah data secara aman.Checkpoint
Section titled “Checkpoint”Pelajaran ini selesai jika:
Leaderboardberada di dalamServerStoragesebagaiModuleScript;PlayerDataberada di dalamServerStoragesebagaiModuleScript;- kedua modul mengembalikan tabel masing-masing tanpa error sintaks.