How to save 2 Leaderstat Instances?

Hello
So i have an problem for 5 hours now and cant fix it, I dont know how to save this code below via an DataStore, I tryd an script but it doesn’t worked. Both scripts are below thanks for any Help / Fix!!

**Leaderstat Script **

local Rs = game.ReplicatedStorage
local Event = Rs:WaitForChild("Events")

game.Players.PlayerAdded:Connect(function(Player)
	local leaderstats = Instance.new("Folder")
	leaderstats.Parent = Player
	leaderstats.Name = "leaderstats"
	
	local Stage = Instance.new("NumberValue")
	Stage.Parent = leaderstats
	Stage.Name = "Stage"
	Stage.Value = 0
	
	local Rebirth = Instance.new("NumberValue")
	Rebirth.Parent = leaderstats
	Rebirth.Name = "Rebirth"
	Rebirth.Value = 0

	local CheckpointsFolder = game.Workspace:FindFirstChild("Checkpoints")
	
	for i, Checkpoint in pairs(CheckpointsFolder:GetChildren()) do
		
		Checkpoint.Touched:Connect(function(Hit)
			if Hit.Parent:FindFirstChild("Humanoid") then
				local PlayerHit = game.Players:GetPlayerFromCharacter(Hit.Parent)
				
				Checkpoint.Color = Color3.fromRGB(0, 255, 0)
				Checkpoint.Material = Enum.Material.Neon
				
				if PlayerHit.leaderstats:FindFirstChild("Stage").Value == Checkpoint.Name - 1 then
					PlayerHit.leaderstats:FindFirstChild("Stage").Value = Checkpoint.Name
					
					workspace.SoundFx.Success:Play()
					Event.CheckPointEvent:FireClient(Player)
				end
			end
		end)
		
		Player.CharacterAdded:Connect(function(Character)
			repeat
				wait()
			until Character ~= nil
			
			local HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
			HumanoidRootPart.CFrame = CheckpointsFolder:FindFirstChild(Stage.Value).CFrame + Vector3.new(0, 2, 0)
		end)
	end
end)

Datastore Save Script

local dataStore = game:GetService("DataStoreService"):GetDataStore("SaveData")
game.Players.PlayerAdded:Connect(function(plr)
	wait()
	local plrid = "id_"..plr.userId
	local save1 = plr.leaderstats.Stage
	local save2 = plr.leaderstats.Rebirth
	
	local GetSaved = dataStore:GetAsync(plrid)
	if GetSaved then
		save1.Value = GetSaved[1]
		save2.Value = GetSaved[2]
	else
		local NumberForSaving = {save1.Value, save2.Value}
		dataStore:GetAsync(plrid,NumberForSaving)
	end
end)

game.Players.PlayerRemoving:Connect(function(plr)
	dataStore:SetAsync("id_"..plr.userId {plr.leaderstats.Stages.Value, plr.leaderstats.Rebirth.Value})
end)

You should use pcall for more info about data store i would suggest you looking up alvinblox or devkings datastore service video.

you can save it in dictionary like this

local dataStore = game:GetService("DataStoreService"):GetDataStore("SaveData")
game.Players.PlayerAdded:Connect(function(plr)
	wait()
	local plrid = "id_"..plr.UserId
	local save1 = plr.leaderstats.Stage
	local save2 = plr.leaderstats.Rebirth
    local GetSaved
	local success, errorr = pcall(function()
    
           GetSaved = dataStore:GetAsync(plrid)
    end
	 
	if success then
		for i,v in pairs(plr.leaderstats:GetChildren())do
               v.Value = GetSaved[v.Name]

         
        end


	else
		warn(errorr)
	end
end)

game.Players.PlayerRemoving:Connect(function(plr)
    local tab = {}
     for i,v in pairs(plr.leaderstats:GetChildren())do

          tab[v.Name] = v.Value
     end
	dataStore:SetAsync("id_"..plr.UserId,tab)
end)

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.