Apprendre
Classe de moteur
DataModel
Création impossible

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.


Échantillons de code
ObtenirService()
local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
-- Exemples de modification des propriétés de ces services
Workspace.Gravity = 20
Lighting.ClockTime = 4

Référence API
Propriétés
CreatorId
Lecture uniquement
Non répliqué
Lecture parallèle
DataModel.CreatorId:number
Échantillons de code
Détecter quand le propriétaire du lieu rejoint le jeu
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("Le propriétaire du lieu a rejoint le jeu !")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Un membre du groupe qui possède le lieu a rejoint le jeu !")
end
end
end)

CreatorType
Lecture uniquement
Non répliqué
Lecture parallèle
DataModel.CreatorType:Enum.CreatorType
Échantillons de code
Détecter quand le propriétaire du lieu rejoint le jeu
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("Le propriétaire du lieu a rejoint le jeu !")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Un membre du groupe qui possède le lieu a rejoint le jeu !")
end
end
end)

Environment
Lecture uniquement
Non répliqué
Sécurité des scripts Roblox
Lecture parallèle
DataModel.Environment:string

GameId
Lecture uniquement
Non répliqué
Lecture parallèle
DataModel.GameId:number

GearGenreSetting
Déprécié

Genre
Déprécié

JobId
Lecture uniquement
Non répliqué
Lecture parallèle
DataModel.JobId:string

lighting
Déprécié

MatchmakingType
Lecture uniquement
Non répliqué
Lecture parallèle
DataModel.MatchmakingType:Enum.MatchmakingType

PlaceId
Lecture uniquement
Non répliqué
Lecture parallèle
DataModel.PlaceId:number

PlaceVersion
Lecture uniquement
Non répliqué
Lecture parallèle
DataModel.PlaceVersion:number
Échantillons de code
GUI du numéro de version du serveur
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("Version du serveur : %s", placeVersion)
textLabel.Parent = versionGui
versionGui.Parent = StarterGui

PrivateServerId
Lecture uniquement
Non répliqué
Lecture parallèle
DataModel.PrivateServerId:string
Échantillons de code
Détection des serveurs privés
local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "ServeurVIP"
else
return "ServeurRéservé"
end
else
return "ServeurStandard"
end
end
print(getServerType())

PrivateServerOwnerId
Lecture uniquement
Non répliqué
Lecture parallèle
DataModel.PrivateServerOwnerId:number
Échantillons de code
Détection des serveurs privés
local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "ServeurVIP"
else
return "ServeurRéservé"
end
else
return "ServeurStandard"
end
end
print(getServerType())

RunService
Lecture uniquement
Non répliqué
Lecture parallèle
DataModel.RunService:RunService

VIPServerId
Déprécié

VIPServerOwnerId
Déprécié

Workspace
Lecture uniquement
Non répliqué
Lecture parallèle
DataModel.Workspace:Workspace

workspace
Déprécié

Méthodes
BindToClose
DataModel:BindToClose(function:function):()
Paramètres
function:function
Retours
()
Échantillons de code
Sauvegarde des données du joueur avant l'arrêt
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
-- Évitez d'écrire des données de studio en production et de ralentir la fermeture de la session de test
return
end
-- Référence pour suspendre et reprendre plus tard
local mainThread = coroutine.running()
-- Compte le nombre de nouveaux threads, diminue quand le thread se termine. Quand 0 est atteint,
-- le thread individuel sait que c'est le dernier thread à terminer et doit reprendre le thread principal
local numThreadsRunning = 0
-- Appeler cette fonction plus tard démarre sur un nouveau thread à cause de coroutine.wrap
local startSaveThread = coroutine.wrap(function(userId, sessionData)
-- Effectuer l'opération de sauvegarde
local success, result = pcall(savePlayerDataAsync, userId, sessionData)
if not success then
-- Pourrait implémenter une tentative de réessai
warn(string.format("Échec de la sauvegarde des données de %d : %s", userId, result))
end
-- Le thread est terminé, décrémente le compteur
numThreadsRunning -= 1
if numThreadsRunning == 0 then
-- C'était le dernier thread à terminer, reprenez le thread principal
coroutine.resume(mainThread)
end
end)
-- Cela suppose que playerData est effacée de la table de données lors d'une sauvegarde finale sur PlayerRemoving,
-- donc cela itère sur toutes les données des joueurs encore dans le jeu qui n'ont pas été sauvegardées
for userId, sessionData in pairs(allPlayerSessionDataCache) do
numThreadsRunning += 1
-- Cette boucle termine l'exécution et le comptage numThreadsRunning avant que l'un des
-- threads de sauvegarde commence car coroutine.wrap a un délai d'attente intégré au démarrage
startSaveThread(userId, sessionData)
end
if numThreadsRunning > 0 then
-- Bloquer l'arrêt jusqu'à ce que les threads de sauvegarde se terminent. Repris par le dernier thread de sauvegarde lorsqu'il se termine
coroutine.yield()
end
end
game:BindToClose(onServerShutdown)
Liaison et Gestion de l'Arrêt du Jeu
game:BindToClose(function(closeReason)
print(`Fermeture avec raison {closeReason}`)
task.wait(3)
print("Fait")
end)

GetJobsInfo
Sécurité des plugins
DataModel:GetJobsInfo():{any}
Retours
Échantillons de code
Obtenir des informations sur les emplois
local jobInfo = game:GetJobsInfo()
local jobTitles = jobInfo[1]
table.remove(jobInfo, 1)
local divider = string.rep("-", 120)
print(divider)
warn("INFORMATIONS D'EMPLOI:")
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
Déprécié

GetObjects
Déprécié

GetRemoteBuildMode
Déprécié

IsGearTypeAllowed
Déprécié

IsLoaded
DataModel:IsLoaded():boolean
Retours
Échantillons de code
Écran de Chargement Personnalisé
local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- Créer un écran de chargement basique
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 = "Chargement"
textLabel.TextSize = 28
textLabel.Parent = screenGui
-- Ajouter l'ensemble de l'interface graphique à l'interface du joueur
screenGui.Parent = playerGui
-- Supprimer l'écran de chargement par défaut
ReplicatedFirst:RemoveDefaultLoadingScreen()
--task.wait(3) -- Forcer éventuellement l'écran à s'afficher pendant un nombre minimum de secondes
if not game:IsLoaded() then
game.Loaded:Wait()
end
screenGui:Destroy()

SavePlace
Déprécié

SetPlaceId
Sécurité des plugins
DataModel:SetPlaceId(placeId:number):()
Paramètres
placeId:number
Retours
()

SetUniverseId
Sécurité des plugins
DataModel:SetUniverseId(universeId:number):()
Paramètres
universeId:number
Retours
()

Événements
AllowedGearTypeChanged
Déprécié

GraphicsQualityChangeRequest
DataModel.GraphicsQualityChangeRequest(betterQuality:boolean):RBXScriptSignal
Paramètres
betterQuality:boolean
Échantillons de code
Gestion des modifications des utilisateurs dans la qualité graphique
game.GraphicsQualityChangeRequest:Connect(function(betterQuality)
if betterQuality then
print("L'utilisateur a demandé une augmentation de la qualité graphique !")
else
print("L'utilisateur a demandé une diminution de la qualité graphique !")
end
end)

ItemChanged
Déprécié

Loaded
DataModel.Loaded():RBXScriptSignal

ServerRestartScheduled
Capacités : ServerCommunication
DataModel.ServerRestartScheduled(
restartTime:DateTime, source:Enum.CloseReason, attributes:Dictionary
Paramètres
restartTime:DateTime
attributes:Dictionary
Échantillons de code
RedémarrageServeurPrévu
local roundInProgress = false -- Défini ailleurs dans le code du jeu chaque fois qu'une manche de jeu commence ou se termine
local restartPending = false
game.ServerRestartScheduled:Connect(function(restartTime, source, attributes)
local msg = attributes and attributes.message or ""
local timeStr = restartTime:FormatLocalTime("LTS", "fr-fr") -- puisque cela s'exécute sur le serveur, il sera en UTC
-- Transmettez ces champs aux clients via remote:FireAllClients() pour afficher des messages personnalisés dans votre interface utilisateur
print(string.format("Redémarrage du serveur à %s depuis la source : %s. Raison : %s.", timeStr, tostring(source), msg))
if not roundInProgress then
print("Aucune manche en cours. Téléportation des joueurs dans 10 secondes")
task.wait(10)
-- La téléportation des joueurs lorsqu'un redémarrage a été prévu les amènera à un serveur sur la dernière version de lieu
game:GetService("TeleportService"):TeleportAsync(game.PlaceId, game:GetService("Players"):GetPlayers())
else
-- Vous pouvez ajouter du code pour téléporter les joueurs après la fin d'une manche de jeu si restartPending est vrai.
restartPending = true
end
end)

Rappels
OnClose
Déprécié

©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.