I placed the vanilla script at the beginning of your post inside of a script named DataSave inside a folder named Framework in ServerScriptService and it doesn’t seem to show a leaderstat on the leaderboard. code
-- // Assigning variables //
local DataStoreService = game:GetService("DataStoreService")
local dataStore = DataStoreService:GetDataStore("MyDataStore") -- This can be changed to whatever you want
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
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 Money = Instance.new("IntValue")
Money.Name = "Money"
Money.Parent = leaderstats
local Coins = Instance.new("IntValue")
Coins.Name = "Coins"
Coins.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
Money.Value = data[1] -- Set the money to the first value of the table (data)
Coins.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 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)
And I have too much JUNK in my output to show you what’s there.
for some reason, i tried using your method to save data on my game, but no matter what it always errors when i change the name of the datastore, any way to fix this?
I think it’s not safe. If something goes wrong when fetching player’s data, all data will be lost.
Probably this is better:
local success, result = pcall(function()
local data = MoneySaves:GetAsync(player.UserId)
return data
end)
if success then
-- nothing went wrong
if result then -- if everything goes well, "result" will be the player's data (if nil, player has no data)
Money.Value = result[1]
else
print('Player has no data.')
end
else
warn(result) -- if it fails, "result" will be the error message
player:Kick('Avoiding dataloss.')
end
It is also a good idea to check whether the player’s data has been loaded before saving it.
I’m new with Datastore, so I’m not sure if this is right.
i actually did that with my line of code to prevent data loss, but yeah it might be useful for other people
if not success then
player:Kick("Couldnt find data, kicking player to prevent data loss")
elseif success then
if data then
Strength.Value = data[1]
Speed.Value = data[2]
InCombat.Value = data[3]
SkinColor.Value = data[4]
warn(player.Name.."'s data has been loaded.. ID"..player.userId)
else
warn(player.Name.." doesnt have any data, assigning default values.. ID"..player.userId)
InCombat.Value = false
Speed.Value = 16
Strength.Value = 1
SkinColor.Value = SkinColors[math.random(#SkinColors)]
print(SkinColor.Value)
end
end
Awesome tutorial! Really appreciate it and really helped me for saving data in my game, now I understand it perfectly! Thanks so much for the help and keep up the great work!
Sorry for the late reply, i haven’t been active as much if you already made 1 data store, look at the top of the script you’ve made and look at your datastore name, then you can use that datastore name in the new script u can make using this tutorial,