Quick point: You should update your DataStore Editor plugin to get V3!
I already got this one for 150 robux and i like this datastore plugin, but sure i can change it, can you link it to me i can’t find it ;3
It’s the same one! Go to Studio > Plugins tab, and click Manage Plugins. Then update from there.
Oh, thanks! Have a great day.
Is it possible to do this with bool values?
Yeah, it’s possible to do with all types of values, String values, int values, bool values…
Sorry but your script doesnt work it doesnt have any value in the datastore to index the save.
Never mind, It worked… Thank u so much!
No problem! …
where do i put the script server script service?
Yeah you put the script in server script service
There are nick picks I’d like to mention out.
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.
local dict = {
Cash = player.leaderstats.Cash.Value
}
player.leaderstats.Cash.Value = dict.Cash
This makes the code more readable and therefore is better.
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.
Thanks,
d_cyph
Make sure where you put the script isn’t getting blocked or anything
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?
Post lines 40-60 to so we can evaluate what’s wrong with the code.
EDIT: Never mind, I have the same problem and I’m currently debugging it.
EDIT 2: I fixed it.
Add if [currencyName] then
to check if your currency loads under the if success then
.
Hope this helps!
EDIT 3: Realized I spelled “previously” wrong on line 461 in the second picture LOL.
It actually worked, thanks alot my guy
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 wasn’t trying to fix the data loss problems, just the one error.
Ok then
Maybe this will be important for other people.