Datastore not working?

-- datastore script
local DSS = game:GetService("DataStoreService")
local GS = DSS:GetDataStore("GeneralStore")
	
local function savedata(plr)
	local TS = plr.leaderstats.Survivals.Value
	
	local success, err = pcall(function()
		GS:SetAsync(plr.UserId, TS)
	end)
		
	if success then
		print("Successful")
			
	else
		print("Save not successful")
		warn(err)
	end
end	

game.Players.PlayerAdded:Connect(function(player)
	local TS = player:WaitForChild("leaderstats").Survivals
	local data
	local success, err = pcall(function()
		data = GS:GetAsync(player.UserId)
	end)
	if success and data then
		print("Data given successfully")
		TS.Value = data
	else
		print("Player has no data, set to 0.")
	end
end)

game.Players.PlayerRemoving:Connect(function(plr)
	savedata(plr)
end)

game:BindToClose(function()
	for i,v in pairs(game.Players:GetPlayers()) do
		local success, err = pcall(function()
			savedata(v)
		end)
		if success then
			print("data has been saved [DC save]")
			
		else
			print("Data has not been DC saved.")
		end
	end
end)
-- point giver script
Dead = false
game.ReplicatedStorage.ClientGameChange.OnClientEvent:Connect(function()
	print("Starting the death penalty thing")
	
	local Char = game.Players.LocalPlayer.Character
	Char:WaitForChild("Humanoid").Died:Connect(function()
		Dead = true
	end)
	
	game.ReplicatedStorage.ClientGameEnd.OnClientEvent:Connect(function()
		if Dead == false then
			print("Plr survived")
			game.Players.LocalPlayer.leaderstats.Survivals.Value = game.Players.LocalPlayer.leaderstats.Survivals.Value + 1
			game.Players.LocalPlayer.leaderstats.Grub.Value = game.Players.LocalPlayer.leaderstats.Grub.Value + 10
		else
			print("Player Died")
			Dead = false
		end
	end)
end)

the datastore doesn’t save the information given when the player leaves, why is this?

Maybe because you accidentally put SetAsync instead of GetAsync on line 9?

Not entirely sure.

didn’t change anything on the script, it doesn’t appear to be the issue

If the player has no data, it will give nil.

-- datastore script
local DSS = game:GetService("DataStoreService")
local GS = DSS:GetDataStore("GeneralStore")

local DataOld = {}
game:GetService("Players").PlayerAdded:Connect(function(player)
	local TS = player:WaitForChild("leaderstats").Survivals
	local success, data = pcall(GS.GetAsync, GS, player.UserId)
	if success then
		print("Data given successfully")
		TS.Value = data or 0
		DataOld[player] = TS.Value
	else
		print("Player has no data, set to 0.")
		DataOld[player] = 0
	end
end)

local function savedata(player)
	local TS = player.leaderstats.Survivals.Value
	if DataOld[player] and DataOld[player] ~= TS then
		DataOld[player] = nil
		local success, err = pcall(GS.SetAsync, GS, player.UserId, TS)
		if success then
			print("Successful")
		else
			print("Save not successful")
			warn(err)
		end
	end
end	
game:GetService("Players").PlayerRemoving:Connect(savedata)

game:BindToClose(function()
	for player in pairs(DataOld) do
		task.spawn(savedata, player)
	end
	task.wait(2)
end)

I added a storage to not save 2 times.


The server will not see these changes, everything related to the data must be done from the server.

1 Like