Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How do i fix my triple savescript in server script service?

There are no errors within the output, but it doesnt work. I know what the problem is

game.Players.PlayerRemoving:Connect(function()
			ds1:SetAsync(player.UserId, gold.Value) 
			ds2:SetAsync(player.UserId, exp.Value)
			ds3:SetAsync(player.UserId, level.Value)
		end)

but i dont know how to fix it. Full script:

local ds = game:GetService("DataStoreService")
local ds1 = ds:GetDataStore("GoldSaveSystem")
local ds2 = ds:GetDataStore("ExpSaveSystem")
local ds3 = ds:GetDataStore("LevelSaveSystem")

game.Players.PlayerAdded:Connect(function(player)
	local folder = Instance.new("Folder", player)
	folder.Name = "leaderstats"
	local gold = Instance.new("IntValue", folder)
	gold.Name = "Gold"
	local exp = Instance.new("IntValue", folder)
	exp.Name = "Experience"
	local level = Instance.new("IntValue", folder)
	level.Name = "Level"
	
	gold.Value = ds1:GetAsync(player.UserId) or 0
	ds1:SetAsync(player.UserId, gold.Value)
	
	exp.Value = ds2:GetAsync(player.UserId) or 0
	ds2:SetAsync(player.UserId, exp.Value)
	
	level.Value = ds3:GetAsync(player.UserId) or 0
	ds3:SetAsync(player.UserId, exp.Value)
	
	exp.Changed:Connect(function()
		if player.leaderstats.Experience.Value >= 100 * (player.leaderstats.Level.Value +1) then
			player.leaderstats.Experience.Value = 0
			player.leaderstats.Level.Value = player.leaderstats.Level.Value +1
		end
	end)
	level.Changed:Connect(function()
		player.Character.Humanoid.MaxHealth = 100 * (player.leaderstats.Level.Value +1)
		player.Character.Humanoid.Health = 100 *(player.leaderstats.Level.Value +1)
		
		game.Players.PlayerRemoving:Connect(function()
			ds1:SetAsync(player.UserId, gold.Value)
			ds2:SetAsync(player.UserId, exp.Value)
			ds3:SetAsync(player.UserId, level.Value)
		end)
	end)
end)

1 answer

✓ Accepted answer

You put game.Players.PlayerRemoving:Connect(function(player) inside the PlayerAdded. I moved outside.

local ds = game:GetService("DataStoreService")
local ds1 = ds:GetDataStore("GoldSaveSystem")
local ds2 = ds:GetDataStore("ExpSaveSystem")
local ds3 = ds:GetDataStore("LevelSaveSystem")

game.Players.PlayerAdded:Connect(function(player)
	local folder = Instance.new("Folder", player)
	folder.Name = "leaderstats"
	local gold = Instance.new("IntValue", folder)
	gold.Name = "Gold"
	local exp = Instance.new("IntValue", folder)
	exp.Name = "Experience"
	local level = Instance.new("IntValue", folder)
	level.Name = "Level"

	gold.Value = ds1:GetAsync(player.UserId) or 0
	ds1:SetAsync(player.UserId, gold.Value)

	exp.Value = ds2:GetAsync(player.UserId) or 0
	ds2:SetAsync(player.UserId, exp.Value)

	level.Value = ds3:GetAsync(player.UserId) or 0
	ds3:SetAsync(player.UserId, exp.Value)

	exp.Changed:Connect(function()
		if player.leaderstats.Experience.Value >= 100 * (player.leaderstats.Level.Value +1) then
			player.leaderstats.Experience.Value = 0
			player.leaderstats.Level.Value = player.leaderstats.Level.Value +1
		end
	end)
	level.Changed:Connect(function()
		player.Character.Humanoid.MaxHealth = 100 * (player.leaderstats.Level.Value +1)
		player.Character.Humanoid.Health = 100 *(player.leaderstats.Level.Value +1)
	end)
end)

game.Players.PlayerRemoving:Connect(function(player)
	local gold = player.leaderstats.Gold
	local exp = player.leaderstats.Experience
	local level = player.leaderstats.Level
	ds1:SetAsync(player.UserId, gold.Value)
	ds2:SetAsync(player.UserId, exp.Value)
	ds3:SetAsync(player.UserId, level.Value)
end)

This discussion is preserved as it was. New answers, comments, and votes are closed.