I’m sorry to have those issues, but using this works perfectly fine to me, if they wanna know how to use coroutines and updateAsync, that’s on them. I understand that I could’ve mentioned it. But after all this is a tutorial for begginers, I’ve removed the auto-saving as i just saw that i it makes issues, and i fixed the GetChildren, I must have been tired and didn’t see it. Anyways thanks for the reply, have a great day
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
This is a bad way, you are only checking if the pcall was successful, not if the data has loaded. Again, you are setting the value if the pcall was successful and not if the data was actually loaded.
Also, you never check if the data you tried to index whilst setting the value is nil or not. This is a bad practice since there is basically no default value if the data you tried to index was nil.
Also, since you save an dictionary, you can just access the values from the dictionary directly without having to index them by numbers.
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?