One of my stats isn't saving

I’m working on a nametag store which saves two values. I’ve only tested the minitag value which didnt save anything when I changed it.

Heres the script

local DataStore = game:GetService("DataStoreService"):GetDataStore("DataStore")

game.Players.PlayerAdded:Connect(function(Player)
	local Leaderstats = Instance.new("Folder")
	Leaderstats.Name = "leaderstats"
	Leaderstats.Parent = Player

	local Money = Instance.new("IntValue")
	Money.Name = "💰Coins"
	Money.Parent = Leaderstats

	local Snowballs = Instance.new("IntValue")
	Snowballs.Name = "🏆Wins"
	Snowballs.Parent = Leaderstats
	
	local hidden = Instance.new("Folder")
	hidden.Name = 'HiddenStats'
	hidden.Parent = Player
	
	local equipedtag = Instance.new("ObjectValue")
	equipedtag.Name = 'EquipedTag'
	equipedtag.Parent = hidden
	
	local mgt = Instance.new("IntValue")
	mgt.Name = "MiniTagOwned"
	mgt.Parent = hidden
	


	local MoneyData
	local SnowballsData
	local equipedtagData
	local mgtData

	local Success, ErrorMessage = pcall(function()
		MoneyData = DataStore:GetAsync(Player.UserId.."-MoneyData")
		SnowballsData = DataStore:GetAsync(Player.UserId.."-WinsData")
		equipedtagData = DataStore:GetAsync(Player.UserId.."-equipedtagData")
		mgtData = DataStore:GetAsync(Player.UserId.."-mgtData")
	end)

	if not Success then
		print(ErrorMessage)
	end

	if MoneyData ~= nil then
		Money.Value = MoneyData
	else
		Money.Value = 0
	end

	if SnowballsData ~= nil then
		Snowballs.Value = SnowballsData
	else
		Snowballs.Value = 0
	end
	
	if mgtData ~= nil then
		Snowballs.Value = SnowballsData
	else
		Snowballs.Value = 0
	end

	if equipedtagData ~= nil then
		equipedtag.Value = equipedtagData
	else
		equipedtag.Value = nil
	end
end)

game.Players.PlayerRemoving:Connect(function(Player)
	pcall(function()
		DataStore:SetAsync(Player.UserId.."-MoneyData", Player.leaderstats["💰Coins"].Value)
		DataStore:SetAsync(Player.UserId.."-WinsData", Player.leaderstats["🏆Wins"].Value)
		DataStore:SetAsync(Player.UserId.."-equipedtagData", Player.HiddenStats.EquipedTag.Value)
	end)
end)

You are forgetting to add :SetAsync to -mgtData

1 Like

I didn’t even notice. :laughing: Good catch let me test it again

It’s still not saving. I have no clue what the cause is

Can you show the code?

Text

try removing all the data stores and just make one instead where you save a table of all the stats

I changed It but now none of the stats save

local DataStore = game:GetService("DataStoreService"):GetDataStore("DataStore")

game.Players.PlayerAdded:Connect(function(Player)
	local UserIdKey = Player.UserId.."TableData"
	
	local Leaderstats = Instance.new("Folder")
	Leaderstats.Name = "leaderstats"
	Leaderstats.Parent = Player

	local Money = Instance.new("IntValue")
	Money.Name = "💰Coins"
	Money.Parent = Leaderstats

	local Snowballs = Instance.new("IntValue")
	Snowballs.Name = "🏆Wins"
	Snowballs.Parent = Leaderstats
	
	local hidden = Instance.new("Folder")
	hidden.Name = 'HiddenStats'
	hidden.Parent = Player
	
	local equipedtag = Instance.new("ObjectValue")
	equipedtag.Name = 'EquipedTag'
	equipedtag.Parent = hidden
	
	local minigtag = Instance.new("BoolValue")
	minigtag.Name = 'MinigamerTagOwned'
	minigtag.Parent = hidden
	
	local data
	local Success, errormessage = pcall(function()
		data = DataStore:GetAsync(UserIdKey)
	end)
	if data and data[1] and data[2] and data[3] and data[4] then
		Money.Value = data[1]
		Snowballs.Value = data[2]
		equipedtag.Value = data[3]
		minigtag.Value = data[4]
	else
		Money.Value = 0
		Snowballs.Value = 0
		equipedtag.Value = game.ReplicatedStorage.None
		minigtag.Value = false
end

game.Players.PlayerRemoving:Connect(function(Player)
	local UserIdKey = Player.UserId.."TableData"
	local TableToSave = {}
	table.insert(TableToSave,1,Player.leaderstats["💰Coins"].Value)
	table.insert(TableToSave,2,Player.leaderstats["🏆Wins"].Value)
	table.insert(TableToSave,3,Player.HiddenStats.EquipedTag.Value)
	table.insert(TableToSave,4,Player.HiddenStats.MinigamerTagOwned.Value)
	local Success, errormessage = pcall(function()
		DataStore:SetAsync(UserIdKey, TableToSave)			
	end)
	if Success then
		print("Data was Saved")
	else
		print(errormessage)
	end
	end)
end)

game:BindToClose(function()
	for _, Player in pairs(game.Players:GetChildren()) do
		local UserIdKey = Player.UserId.."TableData"
		local TableToSave = {}
		table.insert(TableToSave,1,Player.leaderstats["💰Coins"].Value)
		table.insert(TableToSave,2,Player.leaderstats["🏆Wins"].Value)
		table.insert(TableToSave,3,Player.HiddenStats.EquipedTag.Value)
		table.insert(TableToSave,4,Player.HiddenStats.MinigamerTagOwned.Value)
		local Success, errormessage = pcall(function()
			DataStore:SetAsync(UserIdKey, TableToSave)			
		end)
	end
end)

Try this code. Untested.

local DataStoreService = game:GetService("DataStoreService")
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local DataStore = DataStoreService:GetDataStore("DataStore")

local function SavePlayerData(Player)
	local UserIdKey = Player.UserId.."-TableData"
	local TableToSave = {
		Player.leaderstats["💰Coins"].Value,
		Player.leaderstats["🏆Wins"].Value,
		Player.HiddenStats.EquipedTag.Value,
		Player.HiddenStats.MinigamerTagOwned.Value,
	}
	local Success, errormessage = pcall(function()
		DataStore:SetAsync(UserIdKey, TableToSave)			
	end)
	if Success then
		print("Data was Saved")
	else
		print(errormessage)
	end
end

Players.PlayerAdded:Connect(function(Player)
	local UserIdKey = Player.UserId.."-TableData"

	local Leaderstats = Instance.new("Folder")
	Leaderstats.Name = "leaderstats"
	Leaderstats.Parent = Player

	local Money = Instance.new("IntValue")
	Money.Name = "💰Coins"
	Money.Parent = Leaderstats

	local Snowballs = Instance.new("IntValue")
	Snowballs.Name = "🏆Wins"
	Snowballs.Parent = Leaderstats

	local hidden = Instance.new("Folder")
	hidden.Name = 'HiddenStats'
	hidden.Parent = Player

	local equipedtag = Instance.new("ObjectValue")
	equipedtag.Name = 'EquipedTag'
	equipedtag.Parent = hidden

	local minigtag = Instance.new("BoolValue")
	minigtag.Name = 'MinigamerTagOwned'
	minigtag.Parent = hidden

	local data
	local Success,Err = pcall(function()
		data = DataStore:GetAsync(UserIdKey)
	end)
	
	if data and data[1] and data[2] and data[3] and data[4] then
		Money.Value = data[1]
		Snowballs.Value = data[2]
		equipedtag.Value = data[3]
		minigtag.Value = data[4]
	else
		Money.Value = 0
		Snowballs.Value = 0
		equipedtag.Value = ReplicatedStorage.None
		minigtag.Value = false
	end
end)

Players.PlayerRemoving:Connect(function(Player)
	task.spawn(function()
		SavePlayerData(Player)
	end)
end)

game:BindToClose(function()
	for _, Player in pairs(Players:GetChildren()) do
		task.spawn(function()
			SavePlayerData(Player)
		end)
	end
end)

Be sure to also enable this setting:

that setting is enabled and it still doesn’t load. The data saves. it just doesn’t load

Try saving the data with the new formatting then try loading it again. Your file may still be saved the old way.

what do you mean by the new formatting?

Ah yes, you forgot to put “leaderstats” on Player.HiddenStats.EquipedTag.Value:

game.Players.PlayerRemoving:Connect(function(Player)
	pcall(function()
		DataStore:SetAsync(Player.UserId.."-MoneyData", Player.leaderstats["💰Coins"].Value)
		DataStore:SetAsync(Player.UserId.."-WinsData", Player.leaderstats["🏆Wins"].Value)
		DataStore:SetAsync(Player.UserId.."-equipedtagData", Player.leaderstats.HiddenStats.EquipedTag.Value)
	end)
end)

FIrst of all, why do you have emojis in the stat name?

i dont have Hidden stats saved under leaderstats

Change

if data and data[1] and data[2] and data[3] and data[4] then

to

if data ~= nil then

You are accessing the full table, no need for table[index]

ok ill give that a try. thanks

Yes you do have HiddenStats under the leaderstats:

Oh wait, shoot, I forgot that HiddenStats wasn’t inside of the leaderstats.

But the parent of the hidden stat folder is the player

Don’t forget to add something after.

Like, it’s being replied to a nil value or to 0, or something like that.

	local MoneyData = nil or 0
	local SnowballsData = nil or 0
	local equipedtagData = nil or 0
	local mgtData = nil or 0

It’s optional to use it.
Maybe I’m wrong, maybe I’m right, I don’t know.

Ok Now The Money and Wins stat load but the other two dont