``local currencyName = "Coins"
local DataStore = game:GetService("DataStoreService"):GetDataStore("DataStore")
game.Players.PlayerAdded:Connect(function(player)
local folder = Instance.new("Folder") folder.Name = "leaderstats" folder.Parent = player local currency = Instance.new("IntValue") currency.Name = currencyName currency.Parent = folder local ID = currencyName.."-"..player.UserId local savedData = nil pcall(function() local savedData = DataStore:GetAsync(ID) end) if savedData ~= nil then currency.Value = savedData else currency.Value = 10 print("New") end
end)
game.Players.PlayerRemoving:Connect(function(player)
local ID = currencyName.."-"..player.UserId DataStore:SetAsync(ID,player.leaderstats[currencyName].Value)
end)
game:BindToClose(function()
for i, player in pairs(game.Players:GetPlayers())do if player then player:Kick("this game is shutting down") end end wait(5)
end)
Why is the code no saving or loading is working right?
In your pcall
statement you define a new function. Inside that function you define a new variable savedData
. The local
keyword creates a variable in the current scope. You're currently creating the variable inside the scope of the anonymous function you passed to pcall
.
Simply remove the local
from the savedData
declaration inside the pcall
.
local savedData = nil pcall(function() savedData = DataStore:GetAsync(ID) end)