OBBY
Save Progress (DataStore)
Paste into ServerScriptService as a Script. Saves the Stage leaderstat with DataStore, so leaving and rejoining keeps the stage. Turn on Studio Access to API Services before testing.
-- Paste into ServerScriptService as a Script.
-- Enable Game Settings > Security > Enable Studio Access to API Services.
local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local store = DataStoreService:GetDataStore("StageProgress")
local function getStage(player: Player): IntValue
local leaderstats = player:FindFirstChild("leaderstats")
if not leaderstats then
leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
end
local stage = leaderstats:FindFirstChild("Stage")
if not stage then
stage = Instance.new("IntValue")
stage.Name = "Stage"
stage.Value = 0
stage.Parent = leaderstats
end
return stage :: IntValue
end
local function loadStage(player: Player)
local ok, saved = pcall(function()
return store:GetAsync("stage_" .. player.UserId)
end)
if ok and typeof(saved) == "number" then
getStage(player).Value = saved
end
end
local function saveStage(player: Player)
local stage = getStage(player)
pcall(function()
store:SetAsync("stage_" .. player.UserId, stage.Value)
end)
end
Players.PlayerAdded:Connect(function(player)
loadStage(player)
getStage(player).Changed:Connect(function()
saveStage(player)
end)
end)
Players.PlayerRemoving:Connect(saveStage)
game:BindToClose(function()
for _, player in ipairs(Players:GetPlayers()) do
saveStage(player)
end
end)