DataModel
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
El Modelo de datos (comúnmente conocido como game después de la variable global utilizada para accederlo) es la raíz de la jerarquía de padres e hijos de Roblox. Sus hijos directos son servicios, como Workspace y 2>Class.Lighting2>, que actúan como los componentes básicos de un juego de Roblox.
Muestras de código
local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
-- Examples of modifying properties of these services
Workspace.Gravity = 20
Lighting.ClockTime = 4
Resumen
Propiedades
Describe el ID del usuario o grupo que posee el lugar.
Describe el Enum.CreatorType del lugar, sea que el lugar pertenezca a un usuario o a un grupo.
Describe el ID de la experiencia a la que pertenece el lugar que se ejecuta en el servidor.
No funcional. Históricamente describió el Enum.Genre del lugar como establecido en el sitio web de Roblox.
Un identificador único para la instancia del servidor de juegos en ejecución.
Describe el ID del lugar que se ejecuta en el servidor.
Describe la versión en la que se está ejecutando el servidor.
Describe el ID privado del servidor, si el servidor es un servidor privado o un reserved server .
Describe el UserId del Player que posee el servidor privado si el servidor es privado.
Una referencia al servicio Workspace.
Métodos
Vincula una función para ser llamada antes de que el servidor se cierre.
Devuelve una tabla que contiene información básica sobre los trabajos realizados por el Programador de tareasde tareas.
Devuelve un arreglo de Instances asociado con la URL de contenido proporcionada.
Regresa veraz si el cliente ha terminado de cargar el juego por primera vez.
Establece el DataModel.PlaceId del juego actual en el placeId dado.
Establece el DataModel.GameId del conjunto de datos actual a la siguiente universeId .
Devuelve el servicio especificado por el nombre dado si ya se ha creado, errores por un nombre inválido.
Devuelve el servicio con el nombre de clase solicitado, creándolo si no existe.
Eventos
Dispara cuando el usuario solicita y aumenta o disminuye la calidad de gráficos usando las teclas de acceso rápido.
Dispara al cliente cuando el juego termina de cargar por primera vez.
Dispara cuando el lugar actual se ha salido.
Se ha disparado cuando se ha creado un servicio.
Se ha eliminado cuando un servicio está a punto de ser eliminado.
Propiedades
CreatorId
Esta propiedad describe el ID del usuario o grupo que posee el lugar. Si la propiedad DataModel.CreatorType es 'Usuario' entonces CreatorId será el Player.UserId del propietario del lugar. Si la propiedad 2>Class.DataModel.CreatorType2> es 5>'G
Muestras de código
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
Esta propiedad describe el Enum.CreatorType del lugar, sea que el lugar pertenezca a un usuario o a un grupo.
Si el Enum.CreatorType es 'Usuario', entonces la propiedad DataModel.CreatorId describe el 2> Class.Player.UserId|UserId2> de la cuenta que posee el juego. Si el tipo de creador es 5> 'Grupo'5>, entonces describe el ID del grupo.
Muestras de código
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
Esta propiedad describe el ID de la experiencia a la que pertenece el lugar que se ejecuta en el servidor.
Este ID se puede encontrar en la esquina superior derecha del Asset Manager en Roblox Studio. Cuando se usa Roblox Studio, si el lugar no se ha publicado en Roblox, entonces el GameId se correspondirá con el modelo que se está usando.
Véase también:
- DataModel.PlaceId , que describe el ID del lugar que se ejecuta en el servidor
- DataModel.JobId , que es un identificador único para la instancia del juego del servidor que se ejecuta
- TeleportService , que es un servicio que se puede utilizar para transportar Players entre juegos
Genre
Esta propiedad está rota y no se debe usar.
Esta propiedad históricamente describió el Enum.Genre del lugar como establecido en el sitio web de Roblox.
Esta propiedad, junto con DataModel.GearGenreSetting, ya no funciona correctamente debido a los géneros que existen en el sitio web de Roblox que no se reflejan en el Enum.Genre enum. Como resultado, intentar leer esta propiedad puede producir un error.
JobId
Esta propiedad es un identificador único para la instancia del servidor de juego en ejecución. Es un identificador de propiedad única (UUID), lo que significa que ningún servidor, ya sea antiguo o actual, nunca tendrá el mismo ID.
Predefinidos para una cadena vacía en Studio.
Ver también
- TeleportService:GetPlayerPlaceInstanceAsync() que se puede utilizar para recuperar el DataModel.JobId de un usuario del servidor actual.
- TeleportService:TeleportToPlaceInstance() que se puede usar para teletransportar un Player a un servidor específico.
- DataModel.PrivateServerId describe el ID del servidor privado al que pertenece la instancia del servidor del juego.
- HttpService:GenerateGUID() , una función que se puede usar para generar los propios UUID.
PlaceId
Esta propiedad describe el ID del lugar que se ejecuta en el servidor.
Si el lugar ha sido publicado en Roblox, este ID se puede encontrar en el Asset Manager de Studio haciendo clic con el botón derecho en el lugar dentro de la carpeta Lugares y seleccionando Copiar ID a la Clipboard .
Si el lugar no se ha publicado en Roblox, este ID se corresponderá con el modelo utilizado.
Ver también
- DataModel.GameId , que describe el ID de la experiencia que el lugar actual pertenece
- DataModel.JobId , que es un identificador único para la instancia del juego del servidor que se ejecuta
- TeleportService , que es un servicio que se puede utilizar para transportar Players entre lugares
PlaceVersion
Esta propiedad describe la versión en la que se está ejecutando el servidor.
Este número de versión coincide con el número de versión mostrado en la sección Historial de versiones de las configuraciones del lugar. No es la versión actual del cliente Roblox. Esta propiedad es 0 para todas las experiencias no publicadas.
Cuando se crea una instancia de servidor para un lugar, usa la versión actual del lugar. Si el lugar se actualiza más tarde mientras este servidor está en ejecución, el servidor seguirá estando en su versión actual.
Esta propiedad se puede usar para mostrar un ScreenGui que muestra la versión actual del juego a Players para ayudar con el diagnóstico.
Muestras de código
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
Esta propiedad describe el ID del servidor privado del servidor, si el servidor es un servidor privado.
Si el servidor no es un servidor privado, entonces esta propiedad será una cadena vacía.
Servidores privados
Los servidores privados se refieren a lo siguiendo:
- Servidores privados que los usuarios pueden comprar desde la página de juegos
- Servidores reservados, servidores privados creados por el desarrollador usando TeleportService:ReserveServer()
PrivateServerId vs JobId
El ID de servidor privado de un servidor es diferente del DataModel.JobId . El JobId es el identificador único de la instancia del servidor actual.
Los servidores privados (servidores privados o reservados) pueden tener múltiples instancias de servidor asociadas con ellos a lo largo del tiempo. Esto se debe a que, aunque solo se puede ejecutar una instancia de servidor a la vez para un servidor privado, las instancias de servidor nuevas pueden abrir y cerrar a medida que los jugadores se unen y salen del juego. Por ejemplo, no se ejecuta ninguna
Véase también:
- DataModel.PrivateServerOwnerId , una propiedad que describe el propietario de un servidor privado
- TeleportService:ReserveServer() , una función que crea un servidor reservado
Muestras de código
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
Esta propiedad describe el UserId del Player que posee el servidor 私人服务器 si el servidor es servidor privado.
Si el servidor es un servidor estándar o reservado, entonces esta propiedad se establecerá en 0 .
Esta propiedad se puede usar para identificar si un Player es el propietario del servidor privado, por ejemplo:
local Players = game:GetService("Players")
-- ¿es esto un servidor privado?
if game.PrivateServerId ~= "" and game.PrivateServerOwnerId ~= 0 then
-- escuchar para que se agreguen nuevos jugadores
Players.PlayerAdded:Connect(function(player)
-- verificar si el jugador es el propietario del servidor
if player.UserId == game.PrivateServerOwnerId then
print("The private server owner has joined the game")
end
end)
end
Véase también:
- DataModel.PrivateServerId , una propiedad que describe el ID único de los servidores privados y reserved servers
Muestras de código
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 propiedad Workspace es una referencia al servicio Workspace .
Esta propiedad siempre apuntará a la Workspace y nunca será nulo .
El Workspace también se puede acceder a él usando la variable global workspace y la función Class.ServiceProvider:GetService()'. Por ejemplo:
workspace -- una variable globalgame.Workspace -- una propiedad del DataModel (juego)game:GetService("Workspace") -- workspace is a service
Métodos
BindToClose
Vincula una función para ser llamada antes de que el servidor se cierre. Si la función vinculada acepta un parámetro, pasa Enum.CloseReason especificando la razón por la que se cierra el servidor.
Puede vincular múltiples funciones al llamar BindToClose() repetidamente. Las funciones vinculadas se llaman en paralelo y se ejecutan al mismo tiempo.
El servidor de experiencia espera 30 segundos para que todas las funciones vinculadas dejen de funcionar antes de que se cierre. Después de 30 segundos, el servidor se cierra incluso si las funciones todavía están en ejecución.
Para verificar que la sesión actual no esté en Roblox Studio, usa RunService:IsStudio() . Esto evita que las funciones vinculadas completen sus sesiones de prueba en línea.
Cuando uses DataStoreService, también deberías usar BindToClose para vincular una función que guarda todos los datos no guardados a DataStores . Esto evita la pérdida de datos si el servidor se cierra inesperadamente.
Véase también:
- Enum.CloseReason por razones para la desactivación del servidor de experiencia.
- PluginGui:BindToClose() , que vincula una función a un botón de cierre de PluginGui .
Parámetros
Una función llamada antes de que el servidor de experiencia se cierre. Si la función vinculada acepta un parámetro, pasa Enum.CloseReason especificando la razón por la que se cierra el servidor.
Devuelve
Muestras de código
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
Devuelve una tabla que contiene información básica sobre los trabajos realizados por el Programador de tareasde tareas.
En la programación, un programador de tareas es un sistema responsable de ejecutar tareas clave en los intervalos adecuados.
También puede encontrar estadísticas de programador de tareas en vivo en la ventana de programador de tareas en Roblox Studio.
La primera entrada en la tabla devuelta es un diccionario de referencia que contiene las estadísticas (o encabezados) disponibles. Está en el siguiente formato:
{["name"] = "name",["averageDutyCycle"] = "averageDutyCycle",["averageStepsPerSecond"] = "averageStepsPerSecond",["averageStepTime"] = "averageStepTime",["averageError"] = "averageError",["isRunning"] = "isRunning",}
Las siguientes entradas en la tabla devueltas son diccionarios que contienen las estadísticas de arriba para los trabajos realizados por el Programador de tareastareas. Por ejemplo:
{["name"] = "Heartbeat",["averageDutyCycle"] = 0,["averageStepsPerSecond"] = 0,["averageStepTime"] = 0,["averageError"] = 0,["isRunning"] = false,}
Véase también:
Devuelve
Una tabla que contiene información sobre los trabajos realizados por el Programador de tareasde tareas, consulte arriba para el formato.
Muestras de código
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
Este método返回一个 array de Instances con la URL de contenido asociada. Se puede usar para insertar contenido de la biblioteca Roblox. No es posible insertar Sounds usando este método, ya que no tienen un Instance asociado con ellos y solo tienen una URL de contenido.
A diferencia de Class.InsertService:LoadAsset() InsertService:LoadAsset()``DataModel:GetObjects() no requiere que se necesite un activo para ser "de confianza", lo que significa que un activo no necesita ser propiedad del usuario que inicia sesión o creado por Roblox para ser insertado. Sin embargo, si el activo no es propiedad del usuario que inicia sesión, debe estar disponible libremente.
Debido al contexto de seguridad de esta función, solo se puede usar por plugin o barra de comandos. Para un alternativo que se puede usar en Scripts y LocalScripts, consulte InsertService:LoadAsset() .
Parámetros
La URL de contenido dada.
Devuelve
Un arreglo de Instances con la URL del contenido asociada.
Muestras de código
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
Esta función se返a true si el cliente ha terminado de cargar el juego por primera vez.
Cuando todos los iniciales Instances en el juego hayan terminado de replicarse al cliente, esta función devolverá true.
A menos que estén vinculados a ReplicatedFirst , LocalScripts no se ejecutará mientras el juego no se ha cargado. El siguiente fragmento, se ejecutó desde un LocalScript en 1> Class.ReplicatedFirst1> , se alcanzará hasta que el juego se haya cargado:
if not game:IsLoaded() thengame.Loaded:Wait()end
Véase también:
- DataModel.Loaded , un evento que se activa cuando el juego se ha cargado
- Instance:WaitForChild() , una función que se puede usar para esperar a un Instance individual para replicarse sin tener que esperar que todo el juego se replique
Devuelve
Si el cliente ha terminado de cargar el juego por primera vez.
Muestras de código
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
Esta función establece el DataModel.PlaceId de la instancia del juego en el lugar dado placeId .
Se requieren tanto DataModel.PlaceId y DataModel.GameId para acceder a DataStoreService cuando el lugar no está publicado, por ejemplo, un archivo local 1>
local DataStoreService = game:GetService("DataStoreService")-- acceso a DataStore 'Data' al configurar PlaceId para colocar Id de juego y GameId para el universo.game:SetPlaceId(placeId)game:SetUniverseId(universeId)local dataStore = DataStoreService:GetDataStore("Data")
Parámetros
El ID para establecer el DataModel.PlaceId a.
Devuelve
SetUniverseId
Esta función establece el DataModel.GameId del objeto de juego actual en el universo universeId dado. Esto es útil cuando se prueban los archivos .rbxl locales que no se han publicado en Roblox.
Para acceder al DataStoreService en un lugar no publicado, tanto DataModel:SetUniverseId() como DataModel:SetPlaceId() deben ser establecer.
Parámetros
El ID para establecer el DataModel.GameId a.
Devuelve
Eventos
GraphicsQualityChangeRequest
Dispara cuando el usuario solicita un aumento o disminución de la calidad de gráficos usando las teclas de acceso rápido.
Este evento se activa bajo las siguientes condiciones:
- Si el usuario presiona F10 , este evento se activa con un argumento de betterQuality de true .
- Si el usuario presiona ShiftF10 , este evento se activa con un argumento de betterQuality de 0> false0> .
Este evento no proporciona el nivel de calidad de gráficos actual o cubre todas las actualizaciones a la calidad de gráficos. Por ejemplo, las modificaciones realizadas en el menú de escape de la interfaz de usuario del núcleo no se registran.
Puedes recuperar un usuario de su Enum.SavedQualitySetting usando UserGameSettings con el siguiente fragmento:
UserSettings():GetService("UserGameSettings").SavedQualityLevel
Si la configuración de gráficos del usuario está configurada como automática, entonces el Enum.SavedQualitySetting será Automatic. Actualmente no hay forma de que los desarrolladores obtengan con fiabilidad el nivel de calidad de gráficos actual de la máquina del usuario.
Parámetros
Si el usuario ha solicitado un aumento ( verdadero ) o un decremento ( falso ) en la calidad de los gráficos.
Muestras de código
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
Este evento se activa en el cliente cuando el juego termina de cargar por primera vez.
El evento Cargado se activa cuando todos los Instances iniciales en el juego han terminado de replicarse al cliente.
A menos que estén vinculados a ReplicatedFirst , LocalScripts no se ejecutará hasta que se lance este evento. El siguiente fragmento, se ejecutó desde un LocalScript en 1> Class.ReplicatedFirst1> , se alcanzará hasta que se haya cargado el juego:
if not game:IsLoaded() thengame.Loaded:Wait()end
Véase también:
- DataModel:IsLoaded() , una función que devuelve si el juego se carga o no
- Instance:WaitForChild() , una función que se puede usar para esperar a un Instance individual para replicarse sin tener que esperar a que se cargarel juego entero.