Here is my opening script to get my leaderstat; however when I test it the three options are Cash, Value and Kills. The Cash and Value are linked as the number is the same and changes as one. It creates a prestige under the player.leaderstats, but doens't show up
local DataStore = game:GetService("DataStoreService")
local ds = DataStore:GetDataStore("KillsSaveSystem")
local ds2 = DataStore:GetDataStore("CashSaveSystem")
local ds3 = DataStore:GetDataStore("PrestigeSaveSystem")
game.Players.PlayerAdded:connect(function(player)
local leader = Instance.new("Folder",player)
leader.Name = "leaderstats"
local Kills = Instance.new("IntValue",leader)
Kills.Name = "Kills"
Kills.Value = ds:GetAsync(player.UserId) or 0
ds:SetAsync(player.UserId, Kills.Value)
Kills.Changed:connect(function()
ds:SetAsync(player.UserId, Kills.Value)
end)
local Cash = Instance.new("IntValue",leader)
Cash.Name = "Cash"
Cash.Value = ds2:GetAsync(player.UserId) or 0
ds2:SetAsync(player.UserId, Cash.Value)
Cash.Changed:connect(function()
ds2:SetAsync(player.UserId, Cash.Value)
end)
local Prestige = Instance.new("IntValue",leader)
Prestige.Name = "Prestige"
Prestige.Value = ds3:GetAsync(player.UserId) or 0
ds3:SetAsync(player.UserId, Prestige.Value)
Prestige.Changed:connect(function()
ds3:SetAsync(player.UserId, Prestige.Value)
end)
end)
game.Players.PlayerRemoving:connect(function(player)
ds:SetAsync(player.UserId, player.leaderstats.Kills.Value)
ds2:SetAsync(player.UserId, player.leaderstats.Cash.Value)
ds3:SetAsync(player.UserId, player.leaderstats.Prestige.Value)
end)

2 comments
instead of using 3 datastores for each value, store a table into only 1 datastore as your problem might be making too many calls to the datastore service (there are limits: https://www.robloxdev.com/articles/Datastore-Errors)
^that may or may not fix your problem but its best to take care of it before proceeding with your data saving system