Klasa silnika
DataModel
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Podsumowanie
Właściwości
Metody
BindToClose(function: function):() |
GetObjects(url: ContentId):Instances |
IsGearTypeAllowed(gearType: Enum.GearType):boolean |
SavePlace(saveFilter: Enum.SaveFilter):boolean |
SetPlaceId(placeId: number):() |
SetUniverseId(universeId: number):() |
Zdarzenia
GraphicsQualityChangeRequest(betterQuality: boolean):RBXScriptSignal |
ItemChanged(object: Instance,descriptor: string):RBXScriptSignal |
ServerRestartScheduled(restartTime: DateTime,source: Enum.CloseReason,attributes: Dictionary):RBXScriptSignal |
Członkowie odziedziczeni
7 odziedziczonych od: ServiceProvider
57 odziedziczonych od: Instance
6 odziedziczonych od: Object
Przykłady kodu
GetService()
local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
-- Przykłady modyfikacji właściwości tych usług
Workspace.Gravity = 20
Lighting.ClockTime = 4Materiały referencyjne dotyczące interfejsów API
Właściwości
CreatorId
Przykłady kodu
Wykryj, gdy właściciel miejsca dołącza do gry
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("Właściciel miejsca dołączył do gry!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Członek grupy, która jest właścicielem miejsca, dołączył do gry!")
end
end
end)CreatorType
Przykłady kodu
Wykryj, gdy właściciel miejsca dołącza do gry
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("Właściciel miejsca dołączył do gry!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Członek grupy, która jest właścicielem miejsca, dołączył do gry!")
end
end
end)GearGenreSetting
Genre
lighting
PlaceVersion
Przykłady kodu
GUI numer wersji serwera
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("Wersja serwera: %s", placeVersion)
textLabel.Parent = versionGui
versionGui.Parent = StarterGuiPrivateServerId
Przykłady kodu
Wykrywanie Serwerów Prywatnych
local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "SerwerVIP"
else
return "SerwerZarezerwowany"
end
else
return "SerwerStandardowy"
end
end
print(getServerType())PrivateServerOwnerId
Przykłady kodu
Wykrywanie Serwerów Prywatnych
local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "SerwerVIP"
else
return "SerwerZarezerwowany"
end
else
return "SerwerStandardowy"
end
end
print(getServerType())VIPServerId
VIPServerOwnerId
workspace
Metody
BindToClose
Parametry
Zwroty
()
Przykłady kodu
Zapis danych gracza przed zamknięciem
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
-- Unikaj zapisywania danych studia do produkcji i opóźniania zamknięcia sesji testowej
return
end
-- Referencja do uśpienia i wznawiania później
local mainThread = coroutine.running()
-- Zlicza w górę dla każdego nowego wątku, w dół, gdy wątek się kończy. Gdy osiągnie 0,
-- indywidualny wątek wie, że to ostatni wątek do zakończenia i powinien wznowić główny wątek
local numThreadsRunning = 0
-- Wywołanie tej funkcji później rozpoczyna w nowym wątku z powodu coroutine.wrap
local startSaveThread = coroutine.wrap(function(userId, sessionData)
-- Wykonaj operację zapisywania
local success, result = pcall(savePlayerDataAsync, userId, sessionData)
if not success then
-- Można zaimplementować ponowną próbę
warn(string.format("Nie udało się zapisać danych %d: %s", userId, result))
end
-- Wątek zakończony, zmniejsz licznik
numThreadsRunning -= 1
if numThreadsRunning == 0 then
-- To był ostatni wątek do zakończenia, wznów główny wątek
coroutine.resume(mainThread)
end
end)
-- Zakłada to, że playerData jest usuwane z tabeli danych podczas ostatniego zapisu na PlayerRemoving,
-- więc iteruje po wszystkich danych graczy, którzy nadal są w grze i nie zostały zapisane
for userId, sessionData in pairs(allPlayerSessionDataCache) do
numThreadsRunning += 1
-- Ta pętla kończy działanie i zlicza numThreadsRunning przed rozpoczęciem jakichkolwiek
-- wątków zapisywania, ponieważ coroutine.wrap ma wbudowane opóźnienie na start
startSaveThread(userId, sessionData)
end
if numThreadsRunning > 0 then
-- Wstrzymanie zamknięcia do momentu zakończenia wątków zapisywania. Wznawiane przez ostatni wątek zapisywania, gdy się kończy
coroutine.yield()
end
end
game:BindToClose(onServerShutdown)Związywanie i obsługa zamknięcia gry
game:BindToClose(function(closeReason)
print(`Zamknięcie z powodu {closeReason}`)
task.wait(3)
print("Gotowe")
end)GetJobsInfo
Zwroty
Przykłady kodu
Informacje o Pracy
local jobInfo = game:GetJobsInfo()
local jobTitles = jobInfo[1]
table.remove(jobInfo, 1)
local divider = string.rep("-", 120)
print(divider)
warn("INFORMACJE O PRACY:")
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
Zwroty
Przykłady kodu
Niestandardowy ekran ładowania
local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- Utwórz podstawowy ekran ładowania
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 = "Ładowanie"
textLabel.TextSize = 28
textLabel.Parent = screenGui
-- Umieść cały ekran GUI w GUI gracza
screenGui.Parent = playerGui
-- Usuń domyślny ekran ładowania
ReplicatedFirst:RemoveDefaultLoadingScreen()
--task.wait(3) -- Opcjonalnie wymuś wyświetlenie ekranu na minimum przez kilka sekund
if not game:IsLoaded() then
game.Loaded:Wait()
end
screenGui:Destroy()SavePlace
Zdarzenia
AllowedGearTypeChanged
GraphicsQualityChangeRequest
Parametry
Przykłady kodu
Obsługa zmian użytkownika w jakości grafiki
game.GraphicsQualityChangeRequest:Connect(function(betterQuality)
if betterQuality then
print("Użytkownik zażądał zwiększenia jakości grafiki!")
else
print("Użytkownik zażądał zmniejszenia jakości grafiki!")
end
end)ItemChanged
ServerRestartScheduled
DataModel.ServerRestartScheduled(
Parametry
Przykłady kodu
ZaplanowanePonowneUruchomienieSerwera
local roundInProgress = false -- Ustawiane w innym miejscu w kodzie gry, gdy rozpoczyna się lub kończy runda gry
local restartPending = false
game.ServerRestartScheduled:Connect(function(restartTime, source, attributes)
local msg = attributes and attributes.message or ""
local timeStr = restartTime:FormatLocalTime("LTS", "en-us") -- ponieważ jest uruchamiane na serwerze, będzie w UTC
-- Przekaż te pola do klientów za pomocą remote:FireAllClients(), aby wyświetlić spersonalizowane wiadomości w swoim UI
print(string.format("Serwer ponownie uruchomi się o %s z źródła: %s. Powód: %s.", timeStr, tostring(source), msg))
if not roundInProgress then
print("Brak trwającej rundy. Teleportowanie graczy za 10 sekund")
task.wait(10)
-- Teleportowanie graczy, gdy ponowne uruchomienie zostało zaplanowane, przeniesie ich do serwera na najnowszej wersji miejsca
game:GetService("TeleportService"):TeleportAsync(game.PlaceId, game:GetService("Players"):GetPlayers())
else
-- Możesz dodać kod do teleportacji graczy po zakończeniu rundy gry, jeśli restartPending jest prawdziwe.
restartPending = true
end
end)Wywołania zwrotne
OnClose