12 November 2026
Tutorial Roblox

Cara Membuat Sistem Leaderboard dan Penyimpanan Data (DataStoreService) di Roblox Studio

Cara Membuat Sistem Leaderboard dan Penyimpanan Data (DataStoreService) di Roblox Studio
Tutorial pembuatan Leaderboard (leaderstats) dan penyimpanan DataStoreService di Roblox Studio

Dalam hampir semua game populer di Roblox, pemain mengumpulkan koin, poin kemenangan, atau level. Agar angka tersebut tampil di papan peringkat kanan atas layar, kita menggunakan folder khusus bernama leaderstats. Selanjutnya, agar progres pemain tidak hilang saat keluar dari game, kita wajib menggunakan DataStoreService.

1. Mengaktifkan Studio Access to API Services

Sebelum menulis kode penyimpanan data, Anda harus mempublikasikan game terlebih dahulu, lalu membuka menu Home → Game Settings → Security dan mengaktifkan tombol Enable Studio Access to API Services.

2. Membuat Folder leaderstats untuk Papan Peringkat

Roblox secara otomatis mengenali folder bernama leaderstats (huruf kecil semua) yang dimasukkan ke dalam objek Player ketika pemain bergabung:

local DataStoreService = game:GetService("DataStoreService")
local koinStore = DataStoreService:GetDataStore("DataKoinPemain_v1")
local Players = game:GetService("Players")

Players.PlayerAdded:Connect(function(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player

    local koin = Instance.new("IntValue")
    koin.Name = "Koin"
    koin.Value = 0
    koin.Parent = leaderstats

    -- Memuat data tersimpan dengan pcall agar aman dari gangguan jaringan
    local sukses, dataTersimpan = pcall(function()
        return koinStore:GetAsync("User_" .. player.UserId)
    end)

    if sukses and dataTersimpan ~= nil then
        koin.Value = dataTersimpan
    end
end)

3. Menyimpan Data Saat Pemain Keluar (PlayerRemoving)

Tambahkan kode berikut di bawah script sebelumnya di dalam ServerScriptService agar nilai koin disimpan otomatis saat pemain meninggalkan permainan maupun saat server ditutup (BindToClose):

local function simpanData(player)
    local leaderstats = player:FindFirstChild("leaderstats")
    if leaderstats then
        local koin = leaderstats:FindFirstChild("Koin")
        if koin then
            pcall(function()
                koinStore:SetAsync("User_" .. player.UserId, koin.Value)
            end)
        end
    end
end

Players.PlayerRemoving:Connect(simpanData)

game:BindToClose(function()
    for _, player in ipairs(Players:GetPlayers()) do
        simpanData(player)
    end
end)
Selalu bungkus pemanggilan GetAsync dan SetAsync dengan fungsi pcall() (Protected Call) agar script tidak berhenti mendadak apabila server penyimpanan sedang sibuk.
R
Editor Utama & Praktisi Web

Redaksi SemogaBermanfaat

Tim penulis dan praktisi teknologi di SemogaBermanfaat.com yang berfokus membagikan tutorial blogging, optimasi SEO, pemrograman web, dan literasi digital secara mendalam dan terstruktur.

Komentar Pembaca (0)

Belum ada komentar. Jadilah yang pertama memberikan tanggapan pada artikel ini!