Skip Stage Script or Checkpoint Autosaving Wont work

I was recently watching a YouTube tutorial on how to make a difficult chart obby. The issue is that, neither the checkpoint autosaving and skip stage scripts are working. I’d appreciate some assistance, please note that I’m not a scripter. I only know how to script UIs like open/close button, or prompt purchase.

Autosaving:

AutosavingScript
local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local SaveDataStore = DataStoreService:GetDataStore("SaveData", 2)--If you ever wanna reset 
the data store, just change the 1 to 2 etc.

local function SavePlayerData(player)

local success,errormsg = pcall(function()

	local SaveData = {}

	for i,stats in pairs(player.leaderstats:GetChildren()) do

		SaveData[stats.Name] = stats.Value
	end 
	SaveDataStore:SetAsync(player.UserId,SaveData)
end)

if not success then
	return errormsg
end         
end 



Players.PlayerAdded:Connect(function(player)

local Stats = Instance.new("Folder")
Stats.Name = "leaderstats"
Stats.Parent = player

local Stage = Instance.new("NumberValue")
Stage.Name = "Stage"
Stage.Parent = Stats
Stage.Value = 1

local Data = SaveDataStore:GetAsync(player.UserId)

if Data then

	print(Data.Stage)

	for i,stats in pairs(Stats:GetChildren()) do

		stats.Value = Data[stats.Name]      
	end         
else        
	print(player.Name .. " has no data.")           
end


player.CharacterAdded:Connect(function(character)

	local Humanoid = character:WaitForChild("Humanoid")
	local Torso = character:WaitForChild("HumanoidRootPart")

	wait()

	if Torso and Humanoid then
		if Stage.Value ~= 0 then

			local StagePart = workspace.Stages:FindFirstChild(Stage.Value)
			Torso.CFrame = StagePart.CFrame + Vector3.new(0,1,0)                    
		end 
	end 
end)        
end)


Players.PlayerRemoving:Connect(function(player)

local errormsg = SavePlayerData(player)

if errormsg then    
	warn(errormsg)      
end 
end)

game:BindToClose(function()
for i,player in pairs(Players:GetPlayers()) do  

	local errormsg = SavePlayerData(player)
	if errormsg then
		warn(errormsg)
	end         
end
wait(2) 
end)

Skip Stage:

Skip Stage (Am I missing something?)

ServerScript in ServerScriptServer:

LocalScript in the UI:

1 Like

I mean by me missing something, like am I missing a bit where you teleport to that checkpoint?
I want the player to teleport to the checkpoint they were on, after resetting, and if they leave and rejoin.
Any help is appreciated!

ServerScript:

local mps = game:GetService("MarketplaceService")

local devProductID = ID


mps.ProcessReceipt = function(purchaseInfo)

local plrPurchased = game.Players:GetPlayerByUserId(purchaseInfo.PlayerId)

if not plrPurchased then 
    return Enum.ProductPurchaseDecision.NotProcessedYet 
end


if purchaseInfo.ProductId == devProductID then
    
    
    if tonumber(plrPurchased.leaderstats.Stage.Value) < #workspace.Checkpoints:GetChildren() - 1 then
        
        plrPurchased.leaderstats.Stage.Value = plrPurchased.leaderstats.Stage.Value + 1
        
        
    else
        
        plrPurchased.leaderstats.Stage.Value = "End"
    end
    
    
    plrPurchased:LoadCharacter()
    
    
    return Enum.ProductPurchaseDecision.PurchaseGranted
  end
end

Then for the LoadScript do this:

local mps = game:GetService("MarketplaceService")

local devProductID =  ID


local plr = game.Players.LocalPlayer


local button = script.Parent


button.MouseButton1Click:Connect(function()

if plr.leaderstats.Stage.Value == "End" then return end


mps:PromptProductPurchase(plr, devProductID)
end)