Btw, before you flag this, im not spamming. I just need help. So i rewrote the script and added bind to close. And it prints saved successfully, but when i rejoin on studio, it doesn't load up. I've tried everything, Allowing studio to get API Access, making it public.... Adding bind to close.. NOTHING works... As far as i can tell, nothing is wrong with the script... Here is the script:
local datastoreservicee = game:GetService("DataStoreService") --- Gets Datastore Service
local AbiltiyStore = datastoreservicee:GetDataStore("AbilityStore") --Get's Ability Store
game.Players.PlayerAdded:Connect(function(player) -- Defining the player added
local leaderstats = Instance.new("Folder") -- Creates A folder
leaderstats.Name = "leaderstats" --- Names folder 'leaderstats'
leaderstats.Parent = player -- parents folder to player --
local Ability = Instance.new("StringValue") --- Makes a new string value which can store numbers and letters
Ability.Name = "Ability" --- changes string value name to Ability
Ability.Parent = leaderstats -- Puts it in the folder leaderstats
local playeruserid = "Player_"..player.UserId -- Makes A playeruser id variable
local data -- Defining the variable, will store something in it later
local success, errormessage = pcall(function() --Uses this to search for errors during data saving
data = AbiltiyStore:GetAsync(playeruserid)
end)
if success then
Ability.Value = data[1]
print("Set Data Successfully")
end
end)
--New function, when player leaves...
game.Players.PlayerRemoving:Connect(function(player) -- When player leaves...
local Playeruserid = "Player_"..player.UserId -- Redifining the variable, because the variable before was local
local data = {player.leaderstats.Ability.Value} -- Creates a table, so we can store numerous stuff in it
local success, errormessage = pcall(function() -- Redifining again, as last time it was local, so withing that function only
AbiltiyStore:SetAsync(Playeruserid, data)
end)
if success then -- Checking if the saving of data was a success (bool, so true or false)
print("Data Saved Successfully")
else -- If check returns false or nil then
print("The was an error when saving the data")
warn(errormessage)
end
end)
game:BindToClose(function()
local RunService = game:GetService("RunService")
-- if the current session is studio, do nothing
if RunService:IsStudio() then
return
end
print("saving player data")
-- go through all players, saving their data
local players = game.Players:GetPlayers()
for _, player in pairs(players) do
local userId = player.UserId
local data = AbiltiyStore[player.UserId]
if data then
-- wrap in pcall to handle any errors
local success, result = pcall(function()
-- SetAsync yields so will stall shutdown
AbiltiyStore:SetAsync(userId, data)
end)
if not success then
warn(result)
end
end
end
print("completed saving player data")
end)

1 comment
Hey it might be because you are testing in studio it dosnt have time to save when you close since you are binding to close sorry for my bad grammer