DataModel

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立

資料模型 (通常為 game 後的全球變量) 是 Roblox 的親子關係階層的根。其直接子兒是服務,例如 Class.Workspace 和 1> Class.Lighting 1>,這些都是 Roblox 遊戲的基本元素。

範例程式碼

GetService()

local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
-- Examples of modifying properties of these services
Workspace.Gravity = 20
Lighting.ClockTime = 4

概要

屬性

方法

方法 繼承自 ServiceProvider
  • 平行寫入

    如果已經創建,則返回指定的服務;如果沒有指定的名稱,則返回錯誤。

  • 如果不存在,則返回服務並且建立新的類別名稱。

活動

活動 繼承自 ServiceProvider

屬性

CreatorId

唯讀
未複製
平行讀取

這個屬性描述空間方的所有者的ID。如果DataModel.CreatorType屬性是User,則CreatorId會是空間空間的所有者的Player.UserId。如果2>Class.DataModel.CreatorType2>是5>Group

範例程式碼

Detect when the place owner joins the game

local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("The place owner has joined the game!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroup(game.CreatorId) then
print("A member of the group that owns the place has joined the game!")
end
end
end)

CreatorType

唯讀
未複製
平行讀取

這個屬性描述 Enum.CreatorType 的位空間,無論是否屬於用戶或群組。

如果 Class.DataModel.CreatorId 是 DataModel.CreatorId,那麼 1> Class.Player.UserId|userId」的屬性將會描述遊戲所擁有的帳戶的 4> Class.Player.UserId4>。 如果 7>CreatorType7> 是 0>「Enum.CreatorType

範例程式碼

Detect when the place owner joins the game

local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("The place owner has joined the game!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroup(game.CreatorId) then
print("A member of the group that owns the place has joined the game!")
end
end
end)

GameId

唯讀
未複製
平行讀取

此屬性描述伺服器上運行的地方的 ID。

這個 ID 可以在 Roblox Studio 中的右上角找到。使用 Roblox Studio 時,如果地方尚未發布到 Roblox ,則 GameId 將與使用樣板相對應。

也看:

唯讀
未複製
平行讀取

此屬性已損壞,不應該使用。

這個屬性以前說明了 Enum.Genre 這個地方的 Roblox 網站 上設置。

此屬性,以及 DataModel.GearGenreSetting ,不再正確運行,因為 Roblox 網站上存在的音樂類別不再反映在 Enum.Genre 枚列表中。因結果,嘗試讀取此屬性可能會發生錯誤。

JobId

唯讀
未複製
平行讀取

此屬性是執行遊戲服務器實個體、實例的獨一標識。它是一個全球獨一無二的標識(UUID),這意味著在過去或現在的任何兩個服務器上都不會有相同的ID。

Studio 中的空串。

也看看

PlaceId

唯讀
未複製
平行讀取

此屬性描述伺服器上運行的地方的 ID。

如果該位置已發布到 Roblox,這個 ID 可以在 Studio 的 資產管理器 右鍵瀏覽到位置內的 地方 並選擇 複製到剪貼簿

如果該位置尚未發布到 Roblox,此 ID 將與使用的樣板相對應。

也看看

PlaceVersion

唯讀
未複製
平行讀取

此屬性描述服務器正在執行的地點的版本。

此版本號與空間方設定的 版本歷史 區域中顯示的版本號相對應。 它不是 Roblox 客戶端的當前版本。 此屬性對於所有未發佈的體驗都為 0。

當服務器為某個空間方建立時,會使用該空間方目前的版本。如果此服務器正在執行時,該服務器將會保持在其目前的版本。

這個屬性可以用來顯示 ScreenGui ,顯示遊戲的當前版本給 Players 來協助進行調試。

範例程式碼

Server version number GUI

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("Server version: %s", placeVersion)
textLabel.Parent = versionGui
versionGui.Parent = StarterGui

PrivateServerId

唯讀
未複製
平行讀取

此屬性描述伺服器的私人伺服器ID,如果伺服器是私人伺服器。

如果服務器不是私人服務器,這個屬性將是空字串。

私人服務器

私人服務器會引用以追蹤中內容:

私人伺服器 id 與 job id

服務器的私人伺服器ID與 DataModel.JobId 不同。 JobId 是當前伺服器實個體、實例的獨一標識。

私人服務器 (私人或保留服務器) 可以有多個服務器實例與它們連合時間。這是因為,雖然只有一個服務器實例可以同時執行在私人服務伺服器上,新的服務器實例可以開啟和關閉,當玩家加入並離開遊戲。 為了使私人服務器Id 一致在所有這些服務器實例上

也看:

範例程式碼

Detecting Private Servers

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

唯讀
未複製
平行讀取

此屬性描述 UserIdPlayer,如果服務器是私人,它的 私人服務器 將包含私人伺服器。

如果服務器是標準或保留服務器,此屬性將設置為 0

此屬性可用來確認 Player 是否為私人伺服器的所有者,例如:


local Players = game:GetService("Players")
-- 這是私人服務器嗎?
if game.PrivateServerId ~= "" and game.PrivateServerOwnerId ~= 0 then
-- 聆聽新玩家被添加
Players.PlayerAdded:Connect(function(player)
-- 檢查玩家是否是服務器所有者
if player.UserId == game.PrivateServerOwnerId then
print("The private server owner has joined the game")
end
end)
end

也看:

範例程式碼

Detecting Private Servers

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())

Workspace

唯讀
未複製
平行讀取

工作區屬性是一個引用 Workspace 服務的引用。

此屬性將永遠指向 Workspace 和永遠不會是 Class.Workspace 的零。

Class.Workspace 也可以使用全球變量 workspaceServiceProvider:GetService() 函數來存取。例如:


workspace -- 一個全球變數
game.Workspace -- DataModel (遊戲) 的屬性
game:GetService("Workspace") -- workspace is a service

方法

BindToClose

void

將一個函數綁定在服務器關閉前呼叫。如果綁定的函數接受參數,它就會傳送 Enum.CloseReason 來指定服務器關閉的原因。

您可以通過呼叫 BindToClose() 來重複多個功能。境界功能是並行呼叫並且在同一時間執行。

體驗伺服器會在關閉前等待 30 秒,以確保所有綁定功能停止執行。在 30 秒後,伺服器會在功能仍在執行時關閉。

要確認目前的會話不是在 Roblox Studio 中,請使用 RunService:IsStudio()。這會防止在線測試會話完成後,因為沒有線路連接而完成。

當您使用 DataStoreService 時,您也應該使用 BindToClose 來將所有未儲存的資料綁定到 DataStores 。這樣可以防止資料損失,如果服務器因為未預期的關閉而關閉。

也看:

參數

function: function

在體驗伺服器關閉前,會執行一個名為的函數。如果指定的參數接受,則會傳送 Enum.CloseReason 來指定伺服器關閉的原因。


返回

void

範例程式碼

Saving player data before shutting down

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
-- Avoid writing studio data to production and stalling test session closing
return
end
-- Reference for yielding and resuming later
local mainThread = coroutine.running()
-- Counts up for each new thread, down when the thread finishes. When 0 is reached,
-- the individual thread knows it's the last thread to finish and should resume the main thread
local numThreadsRunning = 0
-- Calling this function later starts on a new thread because of coroutine.wrap
local startSaveThread = coroutine.wrap(function(userId, sessionData)
-- Perform the save operation
local success, result = pcall(savePlayerDataAsync, userId, sessionData)
if not success then
-- Could implement a retry
warn(string.format("Failed to save %d's data: %s", userId, result))
end
-- Thread finished, decrement counter
numThreadsRunning -= 1
if numThreadsRunning == 0 then
-- This was the last thread to finish, resume main thread
coroutine.resume(mainThread)
end
end)
-- This assumes playerData gets cleared from the data table during a final save on PlayerRemoving,
-- so this is iterating over all the data of players still in the game that hasn't been saved
for userId, sessionData in pairs(allPlayerSessionDataCache) do
numThreadsRunning += 1
-- This loop finishes running and counting numThreadsRunning before any of
-- the save threads start because coroutine.wrap has built-in deferral on start
startSaveThread(userId, sessionData)
end
if numThreadsRunning > 0 then
-- Stall shutdown until save threads finish. Resumed by the last save thread when it finishes
coroutine.yield()
end
end
game:BindToClose(onServerShutdown)
Binding to and Handling Game Shutdown

game:BindToClose(function(closeReason)
print(`Closing with reason {closeReason}`)
task.wait(3)
print("Done")
end)

GetJobsInfo

外掛程式安全性

返回包含任務調度器的基本信息的表。

在計算中,任務程式表是負荷任務的執行系統,負荷任務會在指定間隔執行。

您也可以在 Roblox Studio 中的任務程序表窗口中查看 live task scheduler 統計資料。

檢查表中第一個返回的行是包含統計資料 (或標題) 的引用典。它是以下格式:


{
["name"] = "name",
["averageDutyCycle"] = "averageDutyCycle",
["averageStepsPerSecond"] = "averageStepsPerSecond",
["averageStepTime"] = "averageStepTime",
["averageError"] = "averageError",
["isRunning"] = "isRunning",
}

表中的後續輸入包含上述統計資料對於任務工作排程器執行的工作。例如:


{
["name"] = "Heartbeat",
["averageDutyCycle"] = 0,
["averageStepsPerSecond"] = 0,
["averageStepTime"] = 0,
["averageError"] = 0,
["isRunning"] = false,
}

也看:


返回

包含任務工作排程器的工作程序資訊的表,請參閱上方格式。

範例程式碼

Getting Jobs Info

local jobInfo = game:GetJobsInfo()
local jobTitles = jobInfo[1]
table.remove(jobInfo, 1)
local divider = string.rep("-", 120)
print(divider)
warn("JOB INFO:")
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

GetObjects

Instances
外掛程式安全性

此方法返回一個 Instances 與指定內容網頁連結的列表。它可以用於插入 Roblox 資料庫的內容。不能用此方法插入 Sounds ,因為它們沒有與它們連結的 Instance

InsertService:LoadAsset() 不同,DataModel:GetObjects() 不需要要求資產 "信任",這意味著資產不需要屬於登入用戶,或是由 Roblox 創建,才能插入。但如果資產未被登入用戶,它必須是自由可用的。

由於此功能的安全上下文,它只能由插件或命令欄使用。對於可以在 ScriptsLocalScripts 中使用的替代方案,請參閱 InsertService:LoadAsset()

參數

url: ContentId

指定的內容網址。


返回

Instances

一個用於內容 URL 的 Instances 網格。

範例程式碼

View a plugin's source code

local Selection = game:GetService("Selection")
local WEB_URL = "plugin URL here"
local function downloadPlugin(webURL)
-- get the content URL
local contentID = string.match(webURL, "%d+")
local contentURL = "rbxassetid://" .. contentID
-- download the objects
local objects = game:GetObjects(contentURL)
-- decide where to parent them
local selection = Selection:Get()
local parent = #selection == 1 and selection[1] or workspace
-- parent the objects
for _, object in pairs(objects) do
object.Parent = parent
end
end
downloadPlugin(WEB_URL)
Batch convert decal IDs

local IMAGES = {
-- Insert Decal web URLs in an array here (as strings)
}
-- open the dictionary
local outputString = "textures = {"
-- utility function to add a new entry to the dictionary (as a string)
local function addEntryToDictionary(original, new)
outputString = outputString
.. "\n" -- new line
.. " " -- indent
.. '["'
.. original
.. '"]' -- key
.. ' = "'
.. new
.. '",' -- value
end
print("Starting conversion")
for _, webURL in pairs(IMAGES) do
-- get the content URL
local contentID = string.match(webURL, "%d+")
local contentURL = "rbxassetid://" .. contentID
local success, result = pcall(function()
local objects = game:GetObjects(contentURL)
return objects[1].Texture
end)
if success then
addEntryToDictionary(webURL, result)
else
addEntryToDictionary(webURL, "Error downloading decal")
end
task.wait()
end
print("Conversion complete")
-- close the dictionary
outputString = outputString .. "\n}"
-- print the dictionary
print(outputString)

IsLoaded

此功能返回 true 如果客戶端第一次載入遊戲完成。

當遊戲中的所有初始 Instances 完成複製到客戶端時,此功能將返回 true。

除非他們與 ReplicatedFirst 親級,否則在遊戲未載入時 LocalScripts 不會執行。以下代碼從 LocalScript 在 1>Class.ReplicatedFirst1> 中執行,直到遊戲載入為止:


if not game:IsLoaded() then
game.Loaded:Wait()
end

也看:


返回

客戶是否第一次載入遊戲。

範例程式碼

Custom Loading Screen

local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- Create a basic loading screen
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 = "Loading"
textLabel.TextSize = 28
textLabel.Parent = screenGui
-- Parent entire screen GUI to player GUI
screenGui.Parent = playerGui
-- Remove the default loading screen
ReplicatedFirst:RemoveDefaultLoadingScreen()
--wait(3) -- Optionally force screen to appear for a minimum number of seconds
if not game:IsLoaded() then
game.Loaded:Wait()
end
screenGui:Destroy()

SetPlaceId

void
外掛程式安全性

此功能將遊戲實例的 DataModel.PlaceId 設置為指定的 placeId

要從 Studio 中存取 DataModel.PlaceId 時,必須設定 DataModel.GameIdDataStoreService,因為這兩者在未發��


local DataStoreService = game:GetService("DataStoreService")
-- 通過將 PlaceId 設置為 placeId 和 GameId 設置為 universeId 來存取資料儲存 "Data"。
game:SetPlaceId(placeId)
game:SetUniverseId(universeId)
local dataStore = DataStoreService:GetDataStore("Data")

參數

placeId: number

設定 DataModel.PlaceId 的 ID。


返回

void

SetUniverseId

void
外掛程式安全性

此功能將當前遊戲實例的 DataModel.GameId 設置為 universeId 。這是測試本地 .rbxl 檔案,尚未發布到 Roblox 時的好處。

要在未發行的空間方存取 DataStoreService,必須先設定 DataModel:SetUniverseId()DataModel:SetPlaceId()

參數

universeId: number

設定 DataModel.GameId 的 ID。


返回

void

活動

GraphicsQualityChangeRequest

使用熱鍵提示使用者提升或減少圖形品質時會發生火焰。

此事件在下列條件下發生:

  • 如果使用者按下 F10 ,此事件會發生,使用者將提供 betterQuality 參數的 true
  • 如果使用者按下 ShiftF10 ,此事件會發生,使用者的參數 betterQuality 為 0> false0> 。

此事件並不提供目前的圖形品質等級或覆蓋所有對圖形品質的更新。例如,在核心 GUI 逃生選單中所作的變更並不會被記錄。

您可以使用 Enum.SavedQualitySetting 與以下代碼取回使用者的 UserGameSettings


UserSettings():GetService("UserGameSettings").SavedQualityLevel

如果使用者的圖形設定設為自動,則 Enum.SavedQualitySetting 將會變成 Automatic 。目前沒有方法可以讓開發人員取得使用者的電腦的圖形品質水平。

參數

betterQuality: bool

使用者是否提示了增加 ( ) 或減少 ( 錯誤 ) 圖形品質。


範例程式碼

Handling User Changes in Graphics Quality

game.GraphicsQualityChangeRequest:Connect(function(betterQuality)
if betterQuality then
print("The user has requested an increase in graphics quality!")
else
print("The user has requested a decrease in graphics quality!")
end
end)

Loaded

此事件在遊戲第一次載入完成時在客戶端發生。

載入事件發生,當遊戲中的所有初始 Instances 完成複製到客戶端。

除非他們與 ReplicatedFirst 親級,LocalScripts 將在此事件發生時不會執行。以下代碼從 LocalScript 在 1>Class.ReplicatedFirst1> 中執行,會在遊戲載入時輸出:


if not game:IsLoaded() then
game.Loaded:Wait()
end

也看: