Lớp công cụ
DataModel
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Tóm Tắt
Thuộc Tính
Phương Pháp
BindToClose(function: function):() |
GetObjects(url: ContentId):Instances |
IsGearTypeAllowed(gearType: Enum.GearType):boolean |
SavePlace(saveFilter: Enum.SaveFilter):boolean |
SetPlaceId(placeId: number):() |
SetUniverseId(universeId: number):() |
Sự Kiện
GraphicsQualityChangeRequest(betterQuality: boolean):RBXScriptSignal |
ItemChanged(object: Instance,descriptor: string):RBXScriptSignal |
ServerRestartScheduled(restartTime: DateTime,source: Enum.CloseReason,attributes: Dictionary):RBXScriptSignal |
Thành viên kế thừa
7 thành viên kế thừa từ ServiceProvider
57 thành viên kế thừa từ Instance
6 thành viên kế thừa từ Object
Mẫu mã
GetService()
local Workspace = game:GetService("Workspace")
local Lighting = game:GetService("Lighting")
-- Ví dụ về việc thay đổi thuộc tính của những dịch vụ này
Workspace.Gravity = 20
Lighting.ClockTime = 4Tài Liệu Tham Khảo API
Thuộc Tính
CreatorId
Mẫu mã
Phát hiện khi chủ sở hữu địa điểm tham gia trò chơi
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("Chủ sở hữu địa điểm đã tham gia trò chơi!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Một thành viên của nhóm sở hữu địa điểm đã tham gia trò chơi!")
end
end
end)CreatorType
Mẫu mã
Phát hiện khi chủ sở hữu địa điểm tham gia trò chơi
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(player)
if game.CreatorType == Enum.CreatorType.User then
if player.UserId == game.CreatorId then
print("Chủ sở hữu địa điểm đã tham gia trò chơi!")
end
elseif game.CreatorType == Enum.CreatorType.Group then
if player:IsInGroupAsync(game.CreatorId) then
print("Một thành viên của nhóm sở hữu địa điểm đã tham gia trò chơi!")
end
end
end)GearGenreSetting
Genre
lighting
PlaceVersion
Mẫu mã
Giao diện số phiên bản máy chủ
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("Phiên bản máy chủ: %s", placeVersion)
textLabel.Parent = versionGui
versionGui.Parent = StarterGuiPrivateServerId
Mẫu mã
Phát hiện Máy chủ Riêng
local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "Máy chủ VIP"
else
return "Máy chủ Đặt trước"
end
else
return "Máy chủ Tiêu chuẩn"
end
end
print(getServerType())PrivateServerOwnerId
Mẫu mã
Phát hiện Máy chủ Riêng
local function getServerType()
if game.PrivateServerId ~= "" then
if game.PrivateServerOwnerId ~= 0 then
return "Máy chủ VIP"
else
return "Máy chủ Đặt trước"
end
else
return "Máy chủ Tiêu chuẩn"
end
end
print(getServerType())VIPServerId
VIPServerOwnerId
workspace
Phương Pháp
BindToClose
Tham Số
Lợi Nhuận
()
Mẫu mã
Lưu dữ liệu người chơi trước khi tắ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
-- Tránh ghi dữ liệu studio vào sản xuất và làm chậm quá trình đóng phiên thử nghiệm
return
end
-- Tham chiếu để tạm dừng và tiếp tục sau
local mainThread = coroutine.running()
-- Đếm lên cho mỗi luồng mới, xuống khi luồng hoàn thành. Khi đạt 0,
-- luồng riêng biết rằng đây là luồng cuối cùng hoàn thành và nên tiếp tục luồng chính
local numThreadsRunning = 0
-- Gọi hàm này sau sẽ bắt đầu trên một luồng mới vì coroutine.wrap
local startSaveThread = coroutine.wrap(function(userId, sessionData)
-- Thực hiện thao tác lưu
local success, result = pcall(savePlayerDataAsync, userId, sessionData)
if not success then
-- Có thể thực hiện lại
warn(string.format("Không thể lưu dữ liệu của %d: %s", userId, result))
end
-- Luồng đã hoàn thành, giảm đếm
numThreadsRunning -= 1
if numThreadsRunning == 0 then
-- Đây là luồng cuối cùng hoàn thành, tiếp tục luồng chính
coroutine.resume(mainThread)
end
end)
-- Điều này giả định rằng playerData sẽ được xóa khỏi bảng dữ liệu trong quá trình lưu cuối cùng trên PlayerRemoving,
-- vì vậy điều này đang lặp qua tất cả dữ liệu của người chơi vẫn trong trò chơi mà chưa được lưu
for userId, sessionData in pairs(allPlayerSessionDataCache) do
numThreadsRunning += 1
-- Vòng lặp này hoàn thành việc chạy và đếm numThreadsRunning trước khi bất kỳ
-- luồng lưu nào bắt đầu vì coroutine.wrap có sự trì hoãn tích hợp khi bắt đầu
startSaveThread(userId, sessionData)
end
if numThreadsRunning > 0 then
-- Dừng tắt cho đến khi các luồng lưu hoàn thành. Được tiếp tục bởi luồng lưu cuối cùng khi nó hoàn thành
coroutine.yield()
end
end
game:BindToClose(onServerShutdown)Liên kết và Xử lý Tắt Game
game:BindToClose(function(closeReason)
print(`Đóng với lý do {closeReason}`)
task.wait(3)
print("Done")
end)GetJobsInfo
Lợi Nhuận
Mẫu mã
Lấy Thông Tin Công Việc
local jobInfo = game:GetJobsInfo()
local jobTitles = jobInfo[1]
table.remove(jobInfo, 1)
local divider = string.rep("-", 120)
print(divider)
warn("THÔNG TIN CÔNG VIỆC:")
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
Lợi Nhuận
Mẫu mã
Màn Hình Tải Tùy Chỉnh
local Players = game:GetService("Players")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
-- Tạo một màn hình tải cơ bản
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 = "Đang Tải"
textLabel.TextSize = 28
textLabel.Parent = screenGui
-- Gán toàn bộ GUI màn hình cho GUI người chơi
screenGui.Parent = playerGui
-- Xóa màn hình tải mặc định
ReplicatedFirst:RemoveDefaultLoadingScreen()
--task.wait(3) -- Tùy chọn buộc màn hình xuất hiện trong một số giây tối thiểu
if not game:IsLoaded() then
game.Loaded:Wait()
end
screenGui:Destroy()SavePlace
Sự Kiện
AllowedGearTypeChanged
GraphicsQualityChangeRequest
Tham Số
Mẫu mã
Xử lý thay đổi của người dùng trong chất lượng đồ họa
game.GraphicsQualityChangeRequest:Connect(function(betterQuality)
if betterQuality then
print("Người dùng đã yêu cầu tăng chất lượng đồ họa!")
else
print("Người dùng đã yêu cầu giảm chất lượng đồ họa!")
end
end)ItemChanged
ServerRestartScheduled
DataModel.ServerRestartScheduled(
Tham Số
Mẫu mã
LịchTrìnhKhởiĐộngLạiMáyChủ
local roundInProgress = false -- Đặt ở nơi khác trong mã trò chơi bất cứ khi nào một vòng chơi bắt đầu hoặc kết thúc
local restartPending = false
game.ServerRestartScheduled:Connect(function(restartTime, source, attributes)
local msg = attributes and attributes.message or ""
local timeStr = restartTime:FormatLocalTime("LTS", "en-us") -- vì điều này được chạy trên máy chủ, nó sẽ ở định dạng UTC
-- Chuyển tiếp các trường này đến khách hàng qua remote:FireAllClients() để hiển thị thông điệp tùy chỉnh trong UI của bạn
print(string.format("Khởi động lại máy chủ vào lúc %s từ nguồn: %s. Lý do: %s.", timeStr, tostring(source), msg))
if not roundInProgress then
print("Không có vòng chơi nào đang diễn ra. Dịch chuyển người chơi trong 10 giây")
task.wait(10)
-- Dịch chuyển người chơi khi một khởi động lại đã được lên lịch sẽ đưa họ đến một máy chủ trên phiên bản địa điểm mới nhất
game:GetService("TeleportService"):TeleportAsync(game.PlaceId, game:GetService("Players"):GetPlayers())
else
-- Bạn có thể thêm mã để dịch chuyển người chơi sau khi một vòng chơi kết thúc nếu restartPending là true.
restartPending = true
end
end)Gọi Lại
OnClose