DataModel
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Il modello di dati (noto anche come game dopo la variabile globale utilizzata per accedervi) è la radice della gerarchia dei genitori di Roblox. I suoi figli diretti sono servizi, come Workspace e 2> Class.Lighting2>, che agiscono come componenti fondamentali di un GiocoRoblox.
Campioni di codice
local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
-- Examples of modifying properties of these services
Workspace.Gravity = 20
Lighting.ClockTime = 4
Sommario
Proprietà
Descrive l'ID dell'utente o del gruppo che possiede il Posto.
Descrive il Enum.CreatorType del Posto, che sia di proprietà di un utente o di un Gruppo.
Descrive l'ID dell'esperienza a cui appartiene il luogo in cui viene eseguito sul server.
Non funzionale. Storicamente descritta la Enum.Genre del luogo come impostata sul sito Web Roblox.
Un identificatore unico per l'istanza del server di gioco in esempio.
Descrive l'ID del luogo in esecuzione sul Server.
Descrive la versione del luogo in cui il server è in esecuzione.
Descrive l'ID del Serverprivato, se il server è un server privato o un reserved server .
Descrive il UserId del Player che possiede il server privato se il server è Server privato.
Un riferimento al servizio Workspace.
Metodi
Legge una funzione da chiamare prima che il server si chiuderà.
Restituisce una tabella che contiene informazioni di base sui lavori eseguiti dal Agendadelle attività.
Restituisce un'area di Instances associata all'URL del contenuto fornito.
Restituisce vero se il client ha finito di caricare il gioco per la prima volta.
Imposta il DataModel.PlaceId della sessione di gioco corrente su il luogoId .
Imposta il DataModel.GameId della sessione di gioco corrente su l'universo Id specificato.
Restituisce il servizio specificato dall'username specificato se è già stato creato, errori per un nome non valido.
Restituisce il servizio con il nome classe richiesto, creandolo se non esiste.
Eventi
Si attiva quando l'utente richiede e aumenta o diminuisce la qualità grafica utilizzando le scorciatoie.
Si attiva sul client quando il gioco finisce di caricare per la prima volta.
Si attiva quando il luogo attuale viene eseguito.
Spawna quando viene creato un servizio.
Spara quando un servizio è in corso di rimozione.
Proprietà
CreatorId
Questa proprietà descrive l'ID dell'utente o del gruppo che possiede il Posto. Se la proprietà DataModel.CreatorType è 'User' allora CreatorId sarà l'ID del Postodi proprietà. Se la proprietà Player.UserId è 2>Group'
Campioni di codice
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
Questa proprietà descrive il Enum.CreatorType del Posto, che sia di proprietà di un utente o di un Gruppo.
Se il Enum.CreatorType è 'User' , allora la proprietà DataModel.CreatorId descriverà il 1> Class.Player.UserId|UserId1> dell'account che possiede il Gioco. Se il tipo di creatore è 4>Gruppo4>, allora descriverà l'ID del gruppo.
Campioni di codice
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
Questa proprietà descrive l'ID dell'esperienza a cui il luogo in esecuzione sul server appartiene.
Questo ID può essere trovato nell'angolo in alto a destra del Gestore Risorse in Roblox Studio. Quando si utilizza Roblox Studio, se il luogo non è stato pubblicato su Roblox allora l'Id di gioco corrisponderà al modello utilizzato.
Vedi anche:
- DataModel.PlaceId , che descrive l'ID del luogo in esecuzione sul Server
- DataModel.JobId , che è un identificatore unico per l'istanza di gioco del server in esecuzione
- TeleportService , che è un servizio che può essere utilizzato per il trasporto Players tra i giochi
Genre
Questa proprietà è rotta e non dovrebbe essere usata.
Questa proprietà ha descrittivamente descritto il Enum.Genre del luogo come impostato sul sito Web Roblox.
Questa Proprietà, insieme a DataModel.GearGenreSetting, non funziona più correttamente a causa dei generi esistenti sul sito Web Roblox che non sono riflettuti nell'Enum.Genre enum. Di Risultato, l'attentato di leggere questa proprietà potrebbe generare un errore.
JobId
Questa proprietà è un unico identificatore per l'istanza del server di gioco in esempio. È un identificatore univoco universale (UUID), il che significa che nessun server, passato o presente, avrà mai lo stesso ID.
Predefiniti a una stringa vuota in Studio.
Vedi anche
- TeleportService:GetPlayerPlaceInstanceAsync() che può essere utilizzato per recuperare il DataModel.JobId di un utente del Servercorrente.
- TeleportService:TeleportToPlaceInstance() che può essere utilizzato per teletrasportare un Player su un Serverspecifico.
- DataModel.PrivateServerId descrive l'ID del server privato a cui appartiene il server di gioco.
- HttpService:GenerateGUID() , una funzione che può essere utilizzata per generare i tuoi UUID.
PlaceId
Questa proprietà descrive l'ID del luogo in esecuzione sul Server.
Se il luogo è stato pubblicato su Roblox, questo ID può essere trovato in Studio's Gestore Risorse facendo clic con il pulsante destro del mouse sul luogo all'interno della cartella Luoghi e selezionando Copia ID in Clipboard .
Se il luogo non è stato pubblicato su Roblox, questo ID corrisponderà al modello utilizzato.
Vedi anche
- DataModel.GameId , che descrive l'ID dell'esperienza a cui appartiene il luogo attuale
- DataModel.JobId , che è un identificatore unico per l'istanza di gioco del server in esecuzione
- TeleportService , che è un servizio che può essere utilizzato per il trasporto Players tra i luoghi
PlaceVersion
Questa proprietà descrive la versione in cui il server è in esecuzione.
Questo numero di versione corrisponde al numero di versione mostrato nella sezione Storia della versione delle impostazioni del Posto. Non è la versione attuale del client Roblox. Questa proprietà è 0 per tutte le esperienze non pubblicate.
Quando viene creata un'istanza del server per un Posto, usa la versione attuale del Posto. Se il luogo viene aggiornato in seguito mentre questo server è in esecuzione, il server rimarrà alla sua versione attuale.
Questa proprietà può essere utilizzata per mostrare una ScreenGui mostrando la versione attuale del gioco a Players per aiutare con il debug.
Campioni di codice
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
Questa proprietà descrive l'ID del server privato del Server, se il server è un Serverprivato.
Se il server non è un Serverprivato, allora questa proprietà sarà una Stringavuota.
Server privati
I server privati fanno riferimento al Seguendo:
- Server privati che gli utenti possono acquistare dalla pagina dei giochi
- Server riservati, server privati creati dal developer utilizzando TeleportService:ReserveServer()
PrivateServerId vs JobId
L'identificatore privato di un server è diverso dal DataModel.JobId . Il JobId è l'identificatore unico della server esempioattuale.
I server privati (server privati o riserve) possono avere più istanze di server associati a loro nel tempo. Questo perché, anche se solo un'istanza di server può essere eseguita contemporaneamente per un Serverprivato, le nuove istanze di server possono essere aperte e chiuse mentre i giocatori si uniscono e lasciano il Gioco. Ad esempio, nessuna istanza di server è in esecuzione quando nessuno sta giocando nel Server. Il
Vedi anche:
- DataModel.PrivateServerOwnerId , una proprietà che descrive il proprietario di un Serverprivato
- TeleportService:ReserveServer() , una funzione che crea un Serverriservato
Campioni di codice
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
Questa proprietà descrive il UserId del Player che possiede il server privato se il server è Server privato.
Se il server è un server standard o riservato, questa proprietà sarà impostata su 0 .
Questa proprietà potrebbe essere utilizzata per identificare se un Player è il proprietario del Serverprivato, ad esempio:
local Players = game:GetService("Players")
-- è un serverprivato?
if game.PrivateServerId ~= "" and game.PrivateServerOwnerId ~= 0 then
-- ascolta per nuovi giocatori aggiunti
Players.PlayerAdded:Connect(function(player)
-- controlla se il giocatore è il proprietario del server
if player.UserId == game.PrivateServerOwnerId then
print("The private server owner has joined the game")
end
end)
end
Vedi anche:
- DataModel.PrivateServerId , una proprietà che descrive l'ID unico di privati e reserved servers
Campioni di codice
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
La proprietà Workspace è un riferimento al servizio Workspace .
Questa proprietà sempre punterà al Workspace e non sarà mai zero .
Il Workspace può essere anche accessato utilizzando la variabile globale workspace e la funzione ServiceProvider:GetService(). Ad esempio:
workspace -- una variabile globalegame.Workspace -- una proprietà del DataModel (Gioco)game:GetService("Workspace") -- workspace is a service
Metodi
BindToClose
Legge una funzione da chiamare prima che il server si chiudi. Se la funzione legata accetta un parametro, passa Enum.CloseReason specificando il motivo per cui il server si chiude.
Puoi associare più funzioni chiamando BindToClose() più volte. Le funzioni legate vengono chiamate in parallelo e vengono eseguite contemporaneamente.
Il server dell'esperienza aspetta 30 secondi per tutte le funzioni legate a non essere in esecuzione prima di essere riavviato. Dopo 30 secondi, il server si spegne anche se le funzioni sono ancora in esecuzione.
Per verificare che la sessione attuale non sia in Roblox Studio, usa RunService:IsStudio() . Ciò impedisce che le funzioni legate completino le loro esecuzioni in sessioni di test offline.
Quando si utilizza DataStoreService, si dovrebbe anche utilizzare BindToClose per associare una funzione che salva tutti i dati non salvati a DataStores. Ciò previene la perdita di dati se il server viene riavviato inaspettatamente.
Vedi anche:
- Enum.CloseReason per motivi per cui il server dell'esperienza è stato riavviato.
- PluginGui:BindToClose() , che lega una funzione a un pulsante di chiusura PluginGui .
Parametri
Una funzione chiamata prima che il server dell'esperienza si chiuderà. Se la funzione legata accetta un parametro, passa Enum.CloseReason specificando il motivo per cui il server si è chiuso.
Restituzioni
Campioni di codice
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)
game:BindToClose(function(closeReason)
print(`Closing with reason {closeReason}`)
task.wait(3)
print("Done")
end)
GetJobsInfo
Restituisce una tabella che contiene informazioni di base sui lavori eseguiti dal Agendadelle attività.
In computer science, un sistema di pianificazione delle attività è responsabile dell'esecuzione delle attività chiave nei periodi appropriati.
Puoi anche trovare le statistiche dell'agenda delle attività nella finestra Task Scheduler in Roblox Studio.
Il primo elemento nella tabella restituito è un dizionario di riferimento che contiene le statistiche (o intestazioni) disponibili. È nel seguente formato:
{["name"] = "name",["averageDutyCycle"] = "averageDutyCycle",["averageStepsPerSecond"] = "averageStepsPerSecond",["averageStepTime"] = "averageStepTime",["averageError"] = "averageError",["isRunning"] = "isRunning",}
Le successive entradelle nella tabella restituiscono dizionari che contengono le statistiche sopra elencate per i lavori eseguiti dal Agendadelle attività. Ad esempio:
{["name"] = "Heartbeat",["averageDutyCycle"] = 0,["averageStepsPerSecond"] = 0,["averageStepTime"] = 0,["averageError"] = 0,["isRunning"] = false,}
Vedi anche:
Restituzioni
Una tabella che contiene informazioni sui lavori eseguiti dal Agendadelle attività, vedi sopra per il formato.
Campioni di codice
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
Questo metodo restituisce un array di Instances associato all'URL di contenuto specificato. Può essere utilizzato per inserire contenuti dalla biblioteca Roblox. Non è possibile inserire Sounds usando questo metodo poiché non hanno un Instance associato a loro e hanno solo un URL di contenuto.
A differenza di InsertService:LoadAsset() , DataModel:GetObjects() non richiede che una risorsa sia "trusty", il che significa che una risorsa non deve essere di proprietà dell'utente autenticato o creata da Roblox per essere inserita. Tuttavia, se la risorsa non è di proprietà dell'utente autenticato deve essere disponibile liberamente.
A causa del contesto di sicurezza di questa funzione, può essere utilizzato solo da plugin o dalla barra dei comandi. Per un'alternativa che può essere utilizzata in Scripts e LocalScripts, vedi Class.InsertService:LoadAsset() .
Parametri
L'URL del contenuto fornito.
Restituzioni
Un array di Instances associato all'URL del contenuto.
Campioni di codice
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)
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
Questa funzione restituisce vero se il client ha finito di caricare il gioco per la prima volta.
Quando tutte le iniziali Instances nel gioco sono state replicate al client, questa funzione restituirà true.
A meno che non siano parented a ReplicatedFirst , LocalScripts non sarà eseguito mentre il gioco non è caricato. Il seguente snippet, run from a LocalScript in 1> Class.ReplicatedFirst1> sarà generato fino a quando il gioco non sarà caricato:
if not game:IsLoaded() thengame.Loaded:Wait()end
Vedi anche:
- DataModel.Loaded , un evento che si attiva quando il gioco è caricato
- Instance:WaitForChild() , una funzione che può essere utilizzata per attendere un singolo Instance per replicare senza dover attendere l'intero gioco
Restituzioni
Se il client ha finito di caricare il gioco per la prima volta.
Campioni di codice
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
Questa funzione imposta il DataModel.PlaceId della istanza di gioco al luogoId specificato.
Per accedere a DataModel.PlaceId quando il luogo non è pubblicato, ad esempio un file locale DataModel.GameId, vedi sotto per un esempio. Nota che ottenere DataStoreService
local DataStoreService = game:GetService("DataStoreService")-- accedere a DataStore "Data" impostando PlaceId a placeId e GameId a universeId.game:SetPlaceId(placeId)game:SetUniverseId(universeId)local dataStore = DataStoreService:GetDataStore("Data")
Parametri
L'ID per impostare il DataModel.PlaceId a.
Restituzioni
SetUniverseId
Questa funzione imposta il DataModel.GameId della sessione di gioco corrente su il universoId . Questo è utile quando si testa i file .rbxl locali che non sono stati pubblicati su Roblox.
Per accedere al DataStoreService in un Postonon pubblicato, sia DataModel:SetUniverseId() che DataModel:SetPlaceId() devono essere Impostare.
Parametri
L'ID per impostare il DataModel.GameId a.
Restituzioni
Eventi
GraphicsQualityChangeRequest
Si attiva quando l'utente richiede un aumento o una diminuzione della qualità grafica utilizzando le scorciatoie.
Questo evento si attiva nelle seguenti condizioni:
- Se l'utente premere F10 , questo evento si attiva con un betterQuality argomento di true .
- Se l'utente premere ShiftF10 , questo evento si attiva con un argomento betterQuality di 0> false0> .
Questo evento non fornisce il livello di qualità grafica attuale o copre tutte le aggiornamenti alla qualità grafica. Ad esempio, le modifiche apportate nel menu GUI di base non sono registrate.
Puoi recuperare il valore Enum.SavedQualitySetting di un utente utilizzando UserGameSettings con il seguente snippet:
UserSettings():GetService("UserGameSettings").SavedQualityLevel
Se le impostazioni grafiche dell'utente sono impostate su automatico, allora il Enum.SavedQualitySetting sarà Automatic . Al momento non ci sono modi per i sviluppatori per ottenere affidabilemente il livello di qualità grafica attuale di una macchina dell'utente.
Parametri
Se l'utente ha richiesto un aumento ( vero ) o un calo ( falso ) nella qualità dei grafici.
Campioni di codice
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
Questo evento si attiva sul client quando il gioco finisce di caricare per la prima volta.
L'evento Loaded viene attivato quando tutte le iniziali Instances nel gioco sono state replicate al client.
A meno che non siano parented a ReplicatedFirst , LocalScripts non sarà eseguito prima di questo evento di fuoco. Il seguente snippet, è stato eseguito da un LocalScript in 1> Class.ReplicatedFirst1> , sarà generato fino a quando il gioco non sarà caricato:
if not game:IsLoaded() thengame.Loaded:Wait()end
Vedi anche:
- DataModel:IsLoaded() , una funzione che restituisce se il gioco è caricato o no
- Instance:WaitForChild() , una funzione che può essere utilizzata per attendere un singolo Instance per replicarsi senza dover attendere l'intero Caricaredel gioco.