Pelajari
Kelas Engine
DataModel
Tidak Dapat Dibuat

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.


Rangkuman
Metode
BindToClose(function: function):()
GetMessage():string
Tidak digunakan lagi
GetObjects(url: ContentId):Instances
Tidak digunakan lagi
GetRemoteBuildMode():boolean
Tidak digunakan lagi
IsGearTypeAllowed(gearType: Enum.GearType):boolean
Tidak digunakan lagi
SavePlace(saveFilter: Enum.SaveFilter):boolean
Tidak digunakan lagi
SetPlaceId(placeId: number):()
SetUniverseId(universeId: number):()
Callback
OnClose():Tuple
Tidak digunakan lagi
Anggota yang Diwariskan
Contoh Kode
GetService()
local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
-- Contoh mengubah properti dari layanan-layanan ini
Workspace.Gravity = 20
Lighting.ClockTime = 4

Referensi API
Properti
CreatorId
Hanya Baca
Tidak Direplikasi
Baca Paralel
DataModel.CreatorId:number
Contoh Kode
Mendeteksi saat pemilik tempat bergabung dengan permainan
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("Pemilik tempat telah bergabung dengan permainan!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Seorang anggota grup yang memiliki tempat telah bergabung dengan permainan!")
end
end
end)

CreatorType
Hanya Baca
Tidak Direplikasi
Baca Paralel
DataModel.CreatorType:Enum.CreatorType
Contoh Kode
Mendeteksi saat pemilik tempat bergabung dengan permainan
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("Pemilik tempat telah bergabung dengan permainan!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Seorang anggota grup yang memiliki tempat telah bergabung dengan permainan!")
end
end
end)

Environment
Hanya Baca
Tidak Direplikasi
Keamanan Skrip Roblox
Baca Paralel
DataModel.Environment:string

GameId
Hanya Baca
Tidak Direplikasi
Baca Paralel
DataModel.GameId:number

GearGenreSetting
Tidak digunakan lagi

Genre
Tidak digunakan lagi

JobId
Hanya Baca
Tidak Direplikasi
Baca Paralel
DataModel.JobId:string

lighting
Tidak digunakan lagi

MatchmakingType
Hanya Baca
Tidak Direplikasi
Baca Paralel
DataModel.MatchmakingType:Enum.MatchmakingType

PlaceId
Hanya Baca
Tidak Direplikasi
Baca Paralel
DataModel.PlaceId:number

PlaceVersion
Hanya Baca
Tidak Direplikasi
Baca Paralel
DataModel.PlaceVersion:number
Contoh Kode
Antarmuka nomor versi server
local StarterGui = game:GetService("StarterGui")
local versionGui = Instance.new("ScreenGui")
local textLabel = Instance.new("TextLabel")
textLabel.Position = UDim2.new(1, -10, 1, 0)
textLabel.AnchorPoint = Vector2.new(1, 1)
textLabel.Size = UDim2.new(0, 150, 0, 40)
textLabel.BackgroundTransparency = 1
textLabel.TextColor3 = Color3.new(1, 1, 1)
textLabel.TextStrokeTransparency = 0
textLabel.TextXAlignment = Enum.TextXAlignment.Right
textLabel.TextScaled = true
local placeVersion = game.PlaceVersion
textLabel.Text = string.format("Nomor versi server: %s", placeVersion)
textLabel.Parent = versionGui
versionGui.Parent = StarterGui

PrivateServerId
Hanya Baca
Tidak Direplikasi
Baca Paralel
DataModel.PrivateServerId:string
Contoh Kode
Mendeteksi Server Pribadi
local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "VIPServer"
else
return "ReservedServer"
end
else
return "StandardServer"
end
end
print(getServerType())

PrivateServerOwnerId
Hanya Baca
Tidak Direplikasi
Baca Paralel
DataModel.PrivateServerOwnerId:number
Contoh Kode
Mendeteksi Server Pribadi
local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "VIPServer"
else
return "ReservedServer"
end
else
return "StandardServer"
end
end
print(getServerType())

RunService
Hanya Baca
Tidak Direplikasi
Baca Paralel
DataModel.RunService:RunService

VIPServerId
Tidak digunakan lagi

VIPServerOwnerId
Tidak digunakan lagi

Workspace
Hanya Baca
Tidak Direplikasi
Baca Paralel
DataModel.Workspace:Workspace

workspace
Tidak digunakan lagi

Metode
BindToClose
DataModel:BindToClose(function:function):()
Parameter
function:function
Memberikan nilai
()
Contoh Kode
Menyimpan data pemain sebelum mematikan
local DataStoreService = game:GetService("DataStoreService")
local RunService = game:GetService("RunService")
local playerDataStore = DataStoreService:GetDataStore("PlayerData")
local allPlayerSessionDataCache = {}
local function savePlayerDataAsync(userId, data)
return playerDataStore:UpdateAsync(userId, function(oldData)
return data
end)
end
local function onServerShutdown(closeReason)
if RunService:IsStudio() then
-- Hindari menulis data studio ke produksi dan menghentikan penutupan sesi uji
return
end
-- Referensi untuk yield dan melanjutkan nanti
local mainThread = coroutine.running()
-- Menghitung naik untuk setiap thread baru, turun ketika thread selesai. Ketika 0 dicapai,
-- thread individu tahu bahwa ini adalah thread terakhir yang selesai dan harus melanjutkan thread utama
local numThreadsRunning = 0
-- Memanggil fungsi ini nanti mulai di thread baru karena coroutine.wrap
local startSaveThread = coroutine.wrap(function(userId, sessionData)
-- Lakukan operasi penyimpanan
local success, result = pcall(savePlayerDataAsync, userId, sessionData)
if not success then
-- Bisa menerapkan pengulangan
warn(string.format("Gagal menyimpan data %d: %s", userId, result))
end
-- Thread selesai, kurangi penghitung
numThreadsRunning -= 1
if numThreadsRunning == 0 then
-- Ini adalah thread terakhir yang selesai, lanjutkan thread utama
coroutine.resume(mainThread)
end
end)
-- Ini mengasumsikan playerData dibersihkan dari tabel data selama penyimpanan terakhir pada PlayerRemoving,
-- jadi ini mengiterasi semua data pemain yang masih dalam game yang belum disimpan
for userId, sessionData in pairs(allPlayerSessionDataCache) do
numThreadsRunning += 1
-- Loop ini selesai berjalan dan menghitung numThreadsRunning sebelum ada yang
-- thread penyimpanan mulai karena coroutine.wrap memiliki penundaan bawaan pada awal
startSaveThread(userId, sessionData)
end
if numThreadsRunning > 0 then
-- Tunda pemadaman sampai thread penyimpanan selesai. Dilanjutkan oleh thread penyimpanan terakhir ketika selesai
coroutine.yield()
end
end
game:BindToClose(onServerShutdown)
Mengikat dan Menangani Penutupan Permainan
game:BindToClose(function(closeReason)
print(`Menutup dengan alasan {closeReason}`)
task.wait(3)
print("Selesai")
end)

GetJobsInfo
Keamanan Plugin
DataModel:GetJobsInfo():{any}
Memberikan nilai
Contoh Kode
Mendapatkan Info Pekerjaan
local jobInfo = game:GetJobsInfo()
local jobTitles = jobInfo[1]
table.remove(jobInfo, 1)
local divider = string.rep("-", 120)
print(divider)
warn("INFO PEKERJAAN:")
print(divider)
for _, job in pairs(jobInfo) do
for jobIndex, jobValue in pairs(job) do
local jobTitle = jobTitles[jobIndex]
warn(jobTitle, "=", jobValue)
end
print(divider)
end

GetMessage
Tidak digunakan lagi

GetObjects
Tidak digunakan lagi

GetRemoteBuildMode
Tidak digunakan lagi

IsGearTypeAllowed
Tidak digunakan lagi

IsLoaded
DataModel:IsLoaded():boolean
Memberikan nilai
Contoh Kode
Layar Muat Kustom
local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- Buat layar muat dasar
local screenGui = Instance.new("ScreenGui")
screenGui.IgnoreGuiInset = true
local textLabel = Instance.new("TextLabel")
textLabel.Size = UDim2.new(1, 0, 1, 0)
textLabel.BackgroundColor3 = Color3.fromRGB(0, 20, 40)
textLabel.Font = Enum.Font.GothamMedium
textLabel.TextColor3 = Color3.new(0.8, 0.8, 0.8)
textLabel.Text = "Memuat"
textLabel.TextSize = 28
textLabel.Parent = screenGui
-- Tempatkan seluruh GUI layar ke GUI pemain
screenGui.Parent = playerGui
-- Hapus layar muat default
ReplicatedFirst:RemoveDefaultLoadingScreen()
--task.wait(3) -- Opsional memperkuat layar untuk muncul selama jumlah detik minimum
if not game:IsLoaded() then
game.Loaded:Wait()
end
screenGui:Destroy()

SavePlace
Tidak digunakan lagi

SetPlaceId
Keamanan Plugin
DataModel:SetPlaceId(placeId:number):()
Parameter
placeId:number
Memberikan nilai
()

SetUniverseId
Keamanan Plugin
DataModel:SetUniverseId(universeId:number):()
Parameter
universeId:number
Memberikan nilai
()

Acara
AllowedGearTypeChanged
Tidak digunakan lagi

GraphicsQualityChangeRequest
DataModel.GraphicsQualityChangeRequest(betterQuality:boolean):RBXScriptSignal
Parameter
betterQuality:boolean
Contoh Kode
Menangani Perubahan Pengguna dalam Kualitas Grafik
game.GraphicsQualityChangeRequest:Connect(function(betterQuality)
if betterQuality then
print("Pengguna telah meminta peningkatan kualitas grafik!")
else
print("Pengguna telah meminta penurunan kualitas grafik!")
end
end)

ItemChanged
Tidak digunakan lagi

Loaded
DataModel.Loaded():RBXScriptSignal

ServerRestartScheduled
Kemampuan: ServerCommunication
DataModel.ServerRestartScheduled(
restartTime:DateTime, source:Enum.CloseReason, attributes:Dictionary
Parameter
restartTime:DateTime
attributes:Dictionary
Contoh Kode
PemulihanServerJadwal
local roundInProgress = false -- Diatur di tempat lain dalam kode permainan kapan saja ronde permainan dimulai atau diakhiri
local restartPending = false
game.ServerRestartScheduled:Connect(function(restartTime, source, attributes)
local msg = attributes and attributes.message or ""
local timeStr = restartTime:FormatLocalTime("LTS", "en-us") -- karena ini dijalankan di server, itu akan dalam UTC
-- Meneruskan bidang ini ke klien melalui remote:FireAllClients() untuk menampilkan pesan khusus dalam UI Anda
print(string.format("Server restart at %s from source: %s. Reason: %s.", timeStr, tostring(source), msg))
if not roundInProgress then
print("Tidak ada ronde yang sedang berlangsung. Mentransfer pemain dalam 10 detik")
task.wait(10)
-- Mentransfer pemain ketika pemulihan telah dijadwalkan akan membawa mereka ke server di versi tempat terbaru
game:GetService("TeleportService"):TeleportAsync(game.PlaceId, game:GetService("Players"):GetPlayers())
else
-- Anda dapat menambahkan kode untuk mentransfer pemain setelah ronde permainan berakhir jika restartPending benar.
restartPending = true
end
end)

Callback
OnClose
Tidak digunakan lagi

©2026 Roblox Corporation. Roblox, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.