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
Rileva quando il proprietario del posto 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 posto è 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 posto è entrato nel gioco!")
end
end
end)CreatorType
Campioni di codice
Rileva quando il proprietario del posto 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 posto è 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 posto è entrato nel gioco!")
end
end
end)GearGenreSetting
Genre
lighting
PlaceVersion
Campioni di codice
GUI 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
Salvando i 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 dati di studio in produzione e di ritardare la chiusura della sessione di test
return
end
-- Riferimento per fermarsi e riprendere più tardi
local mainThread = coroutine.running()
-- Conta fino per ogni nuovo thread, giù quando il thread finisce. Quando si raggiunge 0,
-- il thread individuale sa che è l'ultimo thread a finire 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 di ripetizione
warn(string.format("Impossibile salvare i dati di %d: %s", userId, result))
end
-- Thread finito, decrementa il contatore
numThreadsRunning -= 1
if numThreadsRunning == 0 then
-- Questo era l'ultimo thread a finire, riprendi il thread principale
coroutine.resume(mainThread)
end
end)
-- Questo presume 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 finisce l'esecuzione e il conteggio di numThreadsRunning prima che uno qualsiasi di
-- i thread di salvataggio inizi perché coroutine.wrap ha un deferimento incorporato all'inizio
startSaveThread(userId, sessionData)
end
if numThreadsRunning > 0 then
-- Ritarda lo spegnimento fino a quando i thread di salvataggio non finiscono. Ripreso dall'ultimo thread di salvataggio quando finisce
coroutine.yield()
end
end
game:BindToClose(onServerShutdown)Binding e gestione della chiusura del gioco
game:BindToClose(function(closeReason)
print(`Chiusura con motivo {closeReason}`)
task.wait(3)
print("Fatto")
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 SUL LAVORO:")
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 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