Classe motore
DataModel
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
Sommario
Proprietà
Metodi
BindToClose(function: function):() |
GetObjects(url: ContentId):Instances |
IsGearTypeAllowed(gearType: Enum.GearType):boolean |
SavePlace(saveFilter: Enum.SaveFilter):boolean |
SetPlaceId(placeId: number):() |
SetUniverseId(universeId: number):() |
Eventi
GraphicsQualityChangeRequest(betterQuality: boolean):RBXScriptSignal |
ItemChanged(object: Instance,descriptor: string):RBXScriptSignal |
ServerRestartScheduled(restartTime: DateTime,source: Enum.CloseReason,attributes: Dictionary):RBXScriptSignal |
Membri ereditati
Membri ereditati da ServiceProvider: 7
Membri ereditati da Instance: 57
Membri ereditati da Object: 6
Campioni di codice
GetService()
local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
-- Esempi di modifica delle proprietà di questi servizi
Workspace.Gravity = 20
Lighting.ClockTime = 4Riferimento API
Proprietà
CreatorId
Campioni di codice
Rilevare quando il proprietario del luogo entra nel gioco
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("Il proprietario del luogo è entrato nel gioco!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Un membro del gruppo che possiede il luogo è entrato nel gioco!")
end
end
end)CreatorType
Campioni di codice
Rilevare quando il proprietario del luogo entra nel gioco
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("Il proprietario del luogo è entrato nel gioco!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Un membro del gruppo che possiede il luogo è entrato nel gioco!")
end
end
end)GearGenreSetting
Genre
lighting
PlaceVersion
Campioni di codice
Interfaccia del numero di versione del 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("Versione del server: %s", placeVersion)
textLabel.Parent = versionGui
versionGui.Parent = StarterGuiPrivateServerId
Campioni di codice
Rilevamento Server Privati
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
Campioni di codice
Rilevamento Server Privati
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())VIPServerId
VIPServerOwnerId
workspace
Metodi
BindToClose
Parametri
Restituzioni
()
Campioni di codice
Salvataggio dei dati del giocatore prima dello spegnimento
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
-- Evita di scrivere i dati dello studio in produzione e di ritardare la chiusura della sessione di test
return
end
-- Riferimento per sospendere e riprendere più tardi
local mainThread = coroutine.running()
-- Conta per ogni nuovo thread, diminuisce quando il thread termina. Quando si raggiunge 0,
-- il thread individuale sa che è l'ultimo thread a terminare e dovrebbe riprendere il thread principale
local numThreadsRunning = 0
-- Chiamare questa funzione più tardi inizia su un nuovo thread a causa di coroutine.wrap
local startSaveThread = coroutine.wrap(function(userId, sessionData)
-- Esegui l'operazione di salvataggio
local success, result = pcall(savePlayerDataAsync, userId, sessionData)
if not success then
-- Potrebbe implementare un tentativo
warn(string.format("Impossibile salvare i dati di %d: %s", userId, result))
end
-- Thread terminato, decrementa il contatore
numThreadsRunning -= 1
if numThreadsRunning == 0 then
-- Questo era l'ultimo thread a terminare, riprendi il thread principale
coroutine.resume(mainThread)
end
end)
-- Questo presuppone che playerData venga cancellato dalla tabella dei dati durante un salvataggio finale su PlayerRemoving,
-- quindi questo sta iterando su tutti i dati dei giocatori ancora nel gioco che non sono stati salvati
for userId, sessionData in pairs(allPlayerSessionDataCache) do
numThreadsRunning += 1
-- Questo ciclo termina l'esecuzione e il conteggio di numThreadsRunning prima che uno qualsiasi di
-- i thread di salvataggio inizi perché coroutine.wrap ha un rinvio integrato all'inizio
startSaveThread(userId, sessionData)
end
if numThreadsRunning > 0 then
-- Ritarda lo spegnimento fino a quando i thread di salvataggio non terminano. Ripreso dall'ultimo thread di salvataggio quando termina
coroutine.yield()
end
end
game:BindToClose(onServerShutdown)Binding to and Handling Game Shutdown
game:BindToClose(function(closeReason)
print(`Chiusura con motivo {closeReason}`)
task.wait(3)
print("Done")
end)GetJobsInfo
Restituzioni
Campioni di codice
Ottenere informazioni sui lavori
local jobInfo = game:GetJobsInfo()
local jobTitles = jobInfo[1]
table.remove(jobInfo, 1)
local divider = string.rep("-", 120)
print(divider)
warn("INFORMAZIONI SUI LAVORI:")
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)
endGetMessage
GetObjects
GetRemoteBuildMode
IsGearTypeAllowed
IsLoaded
Restituzioni
Campioni di codice
Schermata di Caricamento Personalizzata
local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- Crea una schermata di caricamento di base
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 = "Caricamento"
textLabel.TextSize = 28
textLabel.Parent = screenGui
-- Assegna l'intera GUI della schermata al player GUI
screenGui.Parent = playerGui
-- Rimuovi la schermata di caricamento predefinita
ReplicatedFirst:RemoveDefaultLoadingScreen()
--task.wait(3) -- Facoltativamente forzare la schermata a apparire per un numero minimo di secondi
if not game:IsLoaded() then
game.Loaded:Wait()
end
screenGui:Destroy()SavePlace
Eventi
AllowedGearTypeChanged
GraphicsQualityChangeRequest
Parametri
Campioni di codice
Gestione delle modifiche dell'utente nella qualità grafica
game.GraphicsQualityChangeRequest:Connect(function(betterQuality)
if betterQuality then
print("L'utente ha richiesto un aumento della qualità grafica!")
else
print("L'utente ha richiesto una diminuzione della qualità grafica!")
end
end)ItemChanged
ServerRestartScheduled
DataModel.ServerRestartScheduled(
Parametri
Campioni di codice
RiavvioServerProgrammato
local roundInProgress = false -- Impostato altrove nel codice di gioco ogni volta che inizia o finisce un turno di gioco
local restartPending = false
game.ServerRestartScheduled:Connect(function(restartTime, source, attributes)
local msg = attributes and attributes.message or ""
local timeStr = restartTime:FormatLocalTime("LTS", "it-it") -- poiché questo viene eseguito sul server, sarà in UTC
-- Invia questi campi ai client tramite remote:FireAllClients() per visualizzare messaggi personalizzati nella tua interfaccia utente
print(string.format("Riavvio server alle %s da fonte: %s. Motivo: %s.", timeStr, tostring(source), msg))
if not roundInProgress then
print("Nessun turno in corso. Teletrasportando i giocatori in 10 secondi")
task.wait(10)
-- Teletrasportare i giocatori quando è stato programmato un riavvio li porterà a un server sulla versione più recente del luogo
game:GetService("TeleportService"):TeleportAsync(game.PlaceId, game:GetService("Players"):GetPlayers())
else
-- Puoi aggiungere codice per teletrasportare i giocatori dopo la fine di un turno se restartPending è true.
restartPending = true
end
end)Richiami
OnClose