Datastore Not Saving Data?

local DS = game:GetService("DataStoreService") --- Gets Datastore Service
local CSS = DS:GetDataStore("ChaosSpleefStore_7")
local OwnedDatastore = DS:GetDataStore("OwnedDatastore_8")
local OwnedEffectsDatastore = DS:GetDataStore("OwnedEffectsDatastore")
local ownedPlaceHolder , ownedEffectsPlaceHolder = {}, {}
game.Players.PlayerAdded:Connect(function(player)
	local owned = {}

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

	local CRW =Instance.new("BoolValue")
	CRW.Parent = player
	CRW.Name = "CRW"
	CRW.Value = false

	local benefits = Instance.new("IntValue")
	benefits.Parent = player
	benefits.Name = "Benefits"
	benefits.Value = 1

	local rank = Instance.new("StringValue")
	rank.Parent = player
	rank.Name  = "Rank"
	rank.Value  = "Newbie"

	local spleefCoins = Instance.new("IntValue")
	spleefCoins.Parent = player
	spleefCoins.Name = "SpleefCoins"

	local wins = Instance.new("IntValue")
	wins.Parent = ldbrd
	wins.Name = "Wins"

	local Levels = Instance.new("NumberValue")
	Levels.Parent = player
	Levels.Name = "Level"
	Levels.Value = 1

	local XP = Instance.new("NumberValue", Levels)
	XP.Name = "XP"

	local XP_Limit =Instance.new("NumberValue", Levels)
	XP_Limit.Name = "XP_Limit"
	XP_Limit.Value = 30

	local  Equipped = Instance.new("StringValue")
	Equipped.Parent = player
	Equipped.Name = "Equipped"
	Equipped.Value = "1"

	local  EquippedEffect = Instance.new("StringValue")
	EquippedEffect.Parent = player
	EquippedEffect.Name = "EquippedEffect"
	EquippedEffect.Value = "1"

	local playeruserid = "Player_"..player.UserId
	local data = {}
	local owned
	local success, errormsg = pcall(function()
		data = CSS:GetAsync(playeruserid)
		owned = OwnedDatastore:GetAsync(playeruserid)
		ownedEffectsPlaceHolder = OwnedEffectsDatastore:GetAsync(playeruserid)
	end)
	if success then
		if data ~= nil then 
			print("Retrieved Essential Values")
		end

		if owned ~= nil then
			print("Retrieved Serialized Trails")
		end

		if ownedEffectsPlaceHolder ~= nil then
			print("Retrieved Serialized Particle Emitters")
		end
		print("Data Retrieved Succesfully")
		local ListOfValues =  {player.SpleefCoins.Value, player.leaderstats.Wins.Value, player.Benefits.Value,player.Level.Value, player.Level.XP.Value, player.Level.XP_Limit.Value, player.CRW.Value,player.Rank.Value, player.Equipped.Value,player.EquippedEffect.Value}
		for i, v in pairs(ListOfValues) do
			if data ~= nil then
				for indexValue, Value in pairs(data)do
					v = Value
				end
			else
				print("New User Joined")
			end
		end

	end




	game.ReplicatedStorage.sendEquippedEffect:FireClient(player, Equipped.Value)
	game.ReplicatedStorage.sendOwnedEffects:FireClient(player, ownedEffectsPlaceHolder)

end)
game.ServerStorage.PassAlongOwnedTrails.Event:Connect(function(o)
	ownedPlaceHolder = o
end)

game.ServerStorage.PassAlongOwnedEffects.Event:Connect(function(owneed)
	ownedEffectsPlaceHolder = owneed
end)




function Save()
	local players = game.Players:GetPlayers()
	for _, player in pairs(players) do
		local userId = "Player_"..player.UserId
		local data = {player.SpleefCoins.Value, player.leaderstats.Wins.Value, player.Benefits.Value,player.Level.Value, player.Level.XP.Value, player.Level.XP_Limit.Value, player.CRW.Value,player.Rank.Value, player.Equipped.Value,player.EquippedEffect.Value}

		if data then
			local success, result = pcall(function()
				CSS:SetAsync(userId, data)
				if ownedPlaceHolder ~= nil then
					OwnedDatastore:UpdateAsync(userId, function(
						ownedPlaceHolder)

					end)
				end
				if ownedEffectsPlaceHolder ~= nil then
					ownedEffectsPlaceHolder:SetAsync(userId, ownedEffectsPlaceHolder)
				end

			end)
			if not success then
				warn(result)
			else
				return true
			end   
		end
	end


end

while wait(10) do
	if Save()then
		print("Saved Data")
	end
end
game.Players.PlayerRemoving:Connect(function(player)
	if Save() then
		print("Saved "..player.Name.."'s data before they left")
	end
end)

game:BindToClose(Save)

It prints data retrieved, but no data was retrieved. Help?

You’re doing:

local Data = {}
data = CSS:GetAsync()

You’re not even printing data, Try print data. My reasoning is that Its returning a table inside GetAsync and its not getting the proper value.

Why are you setting data as a table? Instead u can do local data

1 Like

I should probably do that. I’ll try it and see if it affects anything

Didn’t appear to work, even though I thought it did before

Sorry for the late reply, So it didn’t print anything?

It just returns the preset values, even though I have myself 1000 coins for testing/

Current Code:

local DS = game:GetService("DataStoreService") --- Gets Datastore Service
local CSS = DS:GetDataStore("ChaosSpleefStore_7")
local OwnedDatastore = DS:GetDataStore("OwnedDatastore_8")
local OwnedEffectsDatastore = DS:GetDataStore("OwnedEffectsDatastore")
local ownedPlaceHolder , ownedEffectsPlaceHolder = {}, {}
local p
game.Players.PlayerAdded:Connect(function(player)
	local owned = {}
	p = player
	local ldbrd = Instance.new("Folder")
	ldbrd.Name = "leaderstats"
	ldbrd.Parent  = player

	local CRW =Instance.new("BoolValue")
	CRW.Parent = player
	CRW.Name = "CRW"
	CRW.Value = false

	local benefits = Instance.new("IntValue")
	benefits.Parent = player
	benefits.Name = "Benefits"
	benefits.Value = 1

	local rank = Instance.new("StringValue")
	rank.Parent = player
	rank.Name  = "Rank"

	local spleefCoins = Instance.new("IntValue")
	spleefCoins.Parent = player
	spleefCoins.Name = "SpleefCoins"
	

	

	local wins = Instance.new("IntValue")
	wins.Parent = ldbrd
	wins.Name = "Wins"

	local Levels = Instance.new("NumberValue")
	Levels.Parent = player
	Levels.Name = "Level"
	Levels.Value = 1

	local XP = Instance.new("NumberValue", Levels)
	XP.Name = "XP"

	local XP_Limit =Instance.new("NumberValue", Levels)
	XP_Limit.Name = "XP_Limit"
	XP_Limit.Value = 30

	local  Equipped = Instance.new("StringValue")
	Equipped.Parent = player
	Equipped.Name = "Equipped"
	Equipped.Value = "1"

	local  EquippedEffect = Instance.new("StringValue")
	EquippedEffect.Parent = player
	EquippedEffect.Name = "EquippedEffect"
	EquippedEffect.Value = "1"

	local playeruserid = "Player_"..player.UserId
	local data
	local owned
	local success, errormsg = pcall(function()
		data = CSS:GetAsync(playeruserid)
		for i, v in pairs(data) do
			print(v)
		end
		owned = OwnedDatastore:GetAsync(playeruserid)
		ownedEffectsPlaceHolder = OwnedEffectsDatastore:GetAsync(playeruserid)
	end)
	if success then
		if data ~= nil then 
			print("Retrieved Essential Values")
		end

		if owned ~= nil then
			print("Retrieved Serialized Trails")
		else
			print("New User")
		end

		if ownedEffectsPlaceHolder ~= nil then
		else
			print("New User")
			print("Retrieved Serialized Particle Emitters")
		end
		print("Data Retrieved Succesfully")
		local ListOfValues =  {player.SpleefCoins.Value, player.leaderstats.Wins.Value, player.Benefits.Value,player.Level.Value, player.Level.XP.Value, player.Level.XP_Limit.Value, player.CRW.Value,player.Rank.Value, player.Equipped.Value,player.EquippedEffect.Value}
		for i = 1, #ListOfValues do
			ListOfValues[i] = data[i]
		end

	end




	game.ReplicatedStorage.sendEquippedEffect:FireClient(player, Equipped.Value)
	game.ReplicatedStorage.sendOwnedEffects:FireClient(player, ownedEffectsPlaceHolder)

end)
game.ServerStorage.PassAlongOwnedTrails.Event:Connect(function(o)
	ownedPlaceHolder = o
end)

game.ServerStorage.PassAlongOwnedEffects.Event:Connect(function(owneed)
	ownedEffectsPlaceHolder = owneed
end)




function Save(player)
	local userId = "Player-"..player.UserId
	local data = {player.SpleefCoins.Value, player.leaderstats.Wins.Value, player.Benefits.Value,player.Level.Value, player.Level.XP.Value, player.Level.XP_Limit.Value, player.CRW.Value,player.Rank.Value, player.Equipped.Value,player.EquippedEffect.Value}
	local s, e = pcall(function()
	if data then
		CSS:SetAsync(userId, data)
		if ownedPlaceHolder ~= nil then
			OwnedDatastore:SetAsync(userId,ownedPlaceHolder)
		end
		
		if ownedEffectsPlaceHolder ~= nil then
			OwnedEffectsDatastore:SetAsync(userId, ownedEffectsPlaceHolder)
		end
		
		end
	end)
	if s then
		return true
	end
	
	

end


while wait(10) do
	if Save(p)then
		print("Saved Data")
	end
end
game.Players.PlayerRemoving:Connect(function(player)
	if Save(player) then
		print("Saved "..player.Name.."'s data before they left")
	end
end)
function SaveAllData()
	for i,v in pairs(game.Players:GetPlayers())do
		Save(v)
	end
end
game:BindToClose(SaveAllData)