local function saveData(player) -- The functions that saves data
local tableToSave = {
player.leaderstats.Money.Value; -- First value from the table
player.leaderstats.Coins.Value -- Second value from the table
}
local success, err = pcall(function()
dataStore:SetAsync(player.UserId, tableToSave) -- Save the data with the player UserId, and the table we wanna save
end)
if success then -- If the data has been saved
print("Data has been saved!")
else -- Else if the save failed
print("Data hasn't been saved!")
warn(err)
end
end
game.Players.PlayerAdded:Connect(function(player) -- When a player joins the game
-- // Assigning player stats //
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local Platinum = Instance.new("IntValue")
Platinum.Name = "Platinum"
Platinum.Parent = leaderstats
local Rubies = Instance.new("IntValue")
Rubies.Name = "Rubies"
Rubies.Parent = leaderstats
local data -- We will define the data here so we can use it later, this data is the table we saved
local success, err = pcall(function()
data = dataStore:GetAsync(player.UserId) -- Get the data from the datastore
end)
if success then -- If there were no errors and player loaded the data
Platinum.Value = data[1] -- Set the money to the first value of the table (data)
Rubies.Value = data[2] -- Set the coins to the second value of the table (data)
else -- The player didn't load in the data, and probably is a new player
print("The player has no data!") -- The default will be set to 0
end
end)
game.Players.PlayerRemoving:Connect(function(player)-- When a player leaves
local data
local success, err = pcall(function()
saveData(player) -- Save the data
end)
if success then
print("Data has been saved")
else
print("Data has not been saved!")
end
end)
game:BindToClose(function() -- When the server shuts down
for _, player in pairs(game.Players:GetPlayers()) do -- Loop through all the players
local success, err = pcall(function()
saveData(player) -- Save the data
end)
if success then
print("Data has been saved")
else
print("Data has not been saved!")
end
end
end)
For starters, since you already call a pcall function in the saveData function, there’s no need to wrap that function in a pcall.
Also, when you actually GET the player’s data, it’s much better to use a table as the initial value.
This is your script:
It should look like:
data = dataStore:GetAsync(player.UserId) or {0, 0}
for more flexibility for changing starting values for the player. This datastore in general is just really messy and you should start looking for more effective and safe ways to save a player’s data.