BLOXBUILDS
Discord
Back
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)