Engine-klasse
DataModel
*Deze inhoud is vertaald met behulp van AI (bèta) en kan fouten bevatten. Klik hier om deze pagina in het Engels te bekijken.
Samenvatting
Eigenschappen
Methoden
BindToClose(function: function):() |
GetObjects(url: ContentId):Instances |
IsGearTypeAllowed(gearType: Enum.GearType):boolean |
SavePlace(saveFilter: Enum.SaveFilter):boolean |
SetPlaceId(placeId: number):() |
SetUniverseId(universeId: number):() |
Evenementen
GraphicsQualityChangeRequest(betterQuality: boolean):RBXScriptSignal |
ItemChanged(object: Instance,descriptor: string):RBXScriptSignal |
ServerRestartScheduled(restartTime: DateTime,source: Enum.CloseReason,attributes: Dictionary):RBXScriptSignal |
Overgenomen leden
7 overgenomen van ServiceProvider
58 overgenomen van Instance
6 overgenomen van Object
Codevoorbeelden
GetService()
local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
-- Voorbeelden van het wijzigen van eigenschappen van deze diensten
Workspace.Gravity = 20
Lighting.ClockTime = 4API-referentie
Eigenschappen
CreatorId
Codevoorbeelden
Detecteer wanneer de eigenaar van de plaats het spel betreedt
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("De eigenaar van de plaats is het spel binnengekomen!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Een lid van de groep die de plaats bezit is het spel binnengekomen!")
end
end
end)CreatorType
Codevoorbeelden
Detecteer wanneer de eigenaar van de plaats het spel betreedt
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("De eigenaar van de plaats is het spel binnengekomen!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Een lid van de groep die de plaats bezit is het spel binnengekomen!")
end
end
end)GearGenreSetting
Genre
lighting
PlaceVersion
Codevoorbeelden
Serverversienummer GUI
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("Serverversie: %s", placeVersion)
textLabel.Parent = versionGui
versionGui.Parent = StarterGuiPrivateServerId
Codevoorbeelden
Detecteren van Privéservers
local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "VIPServer"
else
return "GereserveerdeServer"
end
else
return "StandaardServer"
end
end
print(getServerType())PrivateServerOwnerId
Codevoorbeelden
Detecteren van Privéservers
local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "VIPServer"
else
return "GereserveerdeServer"
end
else
return "StandaardServer"
end
end
print(getServerType())VIPServerId
VIPServerOwnerId
workspace
Methoden
BindToClose
Parameters
Teruggaves
()
Codevoorbeelden
Spelen gegevens opslaan voordat de server afsluit
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
-- Voorkom het schrijven van studio-gegevens naar productie en het vertragen van het sluiten van de testsessie
return
end
-- Referentie voor wachten en later hervatten
local mainThread = coroutine.running()
-- Telt op voor elke nieuwe thread, af wanneer de thread is voltooid. Wanneer 0 is bereikt,
-- weet de individuele thread dat het de laatste thread is die is voltooid en moet de hoofdthread hervatten
local numThreadsRunning = 0
-- Het aanroepen van deze functie later start op een nieuwe thread vanwege coroutine.wrap
local startSaveThread = coroutine.wrap(function(userId, sessionData)
-- Voer de opslaanbewerking uit
local success, result = pcall(savePlayerDataAsync, userId, sessionData)
if not success then
-- Zou een herhaling kunnen implementeren
warn(string.format("Het opslaan van %d's gegevens is mislukt: %s", userId, result))
end
-- Thread is voltooid, verlaag de teller
numThreadsRunning -= 1
if numThreadsRunning == 0 then
-- Dit was de laatste thread die is voltooid, hervat de hoofdthread
coroutine.resume(mainThread)
end
end)
-- Dit gaat ervan uit dat playerData wordt gewist uit de gegevens tabel tijdens een laatste opslaan op PlayerRemoving,
-- dus dit itereren over alle gegevens van spelers die nog in het spel zijn en die niet zijn opgeslagen
for userId, sessionData in pairs(allPlayerSessionDataCache) do
numThreadsRunning += 1
-- Deze lus is klaar met draaien en tellen van numThreadsRunning voordat een van
-- de opslaan threads begint omdat coroutine.wrap ingebouwde uitstel heeft bij het starten
startSaveThread(userId, sessionData)
end
if numThreadsRunning > 0 then
-- Vertraging van afsluiten totdat opslaan threads zijn voltooid. Hervat door de laatste opslaan thread wanneer deze is voltooid
coroutine.yield()
end
end
game:BindToClose(onServerShutdown)Binden aan en Afhandelen van Game Afsluiting
game:BindToClose(function(closeReason)
print(`Afsluiten met reden {closeReason}`)
task.wait(3)
print("Done")
end)GetJobsInfo
Teruggaves
Codevoorbeelden
Informatie over Banen Verkrijgen
local jobInfo = game:GetJobsInfo()
local jobTitles = jobInfo[1]
table.remove(jobInfo, 1)
local divider = string.rep("-", 120)
print(divider)
warn("BANEN INFORMATIE:")
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
Teruggaves
Codevoorbeelden
Aangepaste Laadscherm
local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- Maak een basis laadscherm
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 = "Laden"
textLabel.TextSize = 28
textLabel.Parent = screenGui
-- Voeg het hele scherm GUI toe aan de speler GUI
screenGui.Parent = playerGui
-- Verwijder het standaard laadscherm
ReplicatedFirst:RemoveDefaultLoadingScreen()
--task.wait(3) -- Optioneel om het scherm minimaal een aantal seconden te laten verschijnen
if not game:IsLoaded() then
game.Loaded:Wait()
end
screenGui:Destroy()SavePlace
Evenementen
AllowedGearTypeChanged
GraphicsQualityChangeRequest
Parameters
Codevoorbeelden
Omgaan met gebruikerswijzigingen in grafische kwaliteit
game.GraphicsQualityChangeRequest:Connect(function(betterQuality)
if betterQuality then
print("De gebruiker heeft gevraagd om een verhoging van de grafische kwaliteit!")
else
print("De gebruiker heeft gevraagd om een verlaging van de grafische kwaliteit!")
end
end)ItemChanged
ServerRestartScheduled
DataModel.ServerRestartScheduled(
Parameters
Codevoorbeelden
ServerHerstartGepland
local roundInProgress = false -- Zet dit ergens anders in de gamecode wanneer een game ronde begint of eindigt
local restartPending = false
game.ServerRestartScheduled:Connect(function(restartTime, source, attributes)
local msg = attributes and attributes.message or ""
local timeStr = restartTime:FormatLocalTime("LTS", "en-us") -- aangezien dit op de server wordt uitgevoerd, zal het in UTC zijn
-- Stuur deze velden door naar clients via remote:FireAllClients() om aangepaste berichten in je UI weer te geven
print(string.format("Server herstart om %s van bron: %s. Reden: %s.", timeStr, tostring(source), msg))
if not roundInProgress then
print("Geen ronde in uitvoering. Spelers teleporteren in 10 seconden")
task.wait(10)
-- Spelers teleporteren wanneer een herstart is gepland, brengt hen naar een server op de nieuwste plaatsversie
game:GetService("TeleportService"):TeleportAsync(game.PlaceId, game:GetService("Players"):GetPlayers())
else
-- Je kunt code toevoegen om spelers te teleporteren nadat een game ronde eindigt als restartPending waar is.
restartPending = true
end
end)Callbacks
OnClose