How to save value without it showing in leaderstats?

Hello! I’m new to scripting and i need some help with my datastore script. I would like to save value without it showing in leaderstats. It’s for simulator backpack so it can change the value whenever someone buys new backpack and gets more room for their “water”. I’ve watched many Youtube tutorials on how to make simulator backpack but there is no tutorial on how to save the backpack.
I just want to save value without it showing in the leaderstats and please say if you know better way to make backpack for simulator game.

Here is my script:

local playerData = DataStoreService:GetDataStore("PlayerData")


local function onPlayerJoin(player)  

	local leaderstats = Instance.new("Folder")  

	leaderstats.Name = "leaderstats"

	leaderstats.Parent = player
	
	

	local money = Instance.new("IntValue") 

	money.Name = "Money"

	money.Parent = leaderstats



	local water = Instance.new("IntValue") 

	water.Name = "Water"

	water.Parent = leaderstats
	
	local backpack = Instance.new("IntValue") 
	
	
	backpack.Name = "Backpack"

	backpack.Parent = leaderstats
	

	local playerUserId = "Player_" .. player.UserId  

	local data = playerData:GetAsync(playerUserId)  

	if data then
		
		money.Value = data['Money']

		water.Value = data['Water']
		
		backpack.Value = data['Backpack']
	else
		
		money.Value = 0

		water.Value = 0
		
		backpack.Value = 0
		
	end

end



local function create_table(player)

	local player_stats = {}

	for _, stat in pairs(player.leaderstats:GetChildren()) do

		player_stats[stat.Name] = stat.Value
		
	end

	return player_stats

end


local function onPlayerExit(player)

	local player_stats = create_table(player)

	local success, err = pcall(function()

		local playerUserId = "Player_" .. player.UserId

		playerData:SetAsync(playerUserId, player_stats)

	end)



	if not success then

		warn('Could not save data!')

	end

end



game.Players.PlayerAdded:Connect(onPlayerJoin)

game.Players.PlayerRemoving:Connect(onPlayerExit)
	

And i want to remove this from here:
leaderstats

1 Like

You can parent it to the Player, and do the same as you’d do with leaderstats.

And save it to data store.

4 Likes

Since anything inside the player’s leaderstats folder will show up (unless you hit the limit, which is 4), simply save it somewhere else, as someone else already mentioned.

There are plenty of places to store it, but having the value attached to the player instance itself would be a solid option, as you don’t need to do checks when the player leaves, as once the player instance is destroyed (ex. when they leave), its descendants will be destroyed too.

  • Useful information
    Leaderboards use value type objects to store and display player stats, nothing else.
    Another note: It will only show children of the leaderstats folder, not its descendants (ex. Player.leaderstats.Folder.BoolValue )
4 Likes

I assumed you understood what I meant, as that is basic knowledge.
Leaderboards use value type objects to store and display player stats, nothing else.

Another note: It will only show children of the leaderstats folder, not its descendants (ex. Player.leaderstats.Folder.BoolValue)

1 Like

I have edited my original post, enjoy.

(Though, most people just copy-paste scripts these days, so you are not wrong regarding new scripters have who no clue on how leaderstats are handled by Roblox’s engine.)

1 Like