No, Not always, thats the reason’s people recommend having game:BindToClose when saving Data under DataStoreService, so if something happens and PlayerRemoving Doesnt work, BindToClose will save it to ensure you dont lose data.
If you have a Active Server, it should still save depending on how you handle the data.
But then all these datastores I see are not good ? Developers tend to kick the player if the data doesn’t load to avoid to save an erroned data, but it the plr.PlayerRemoving is launched it doesn’t make sense because the player will save an empty data ?
People check if the Data exists if Getting the Data was Successful, like this:
local sessions = {} -- Session Holder
-- PlayerAdded :
if success then -- If GetAsync was successful
if data then -- if there is data
sessions[player.UserId] = data -- Adds Data to a Session Holder
else -- if there is no data
sessions[player.UserId] = {...}
end
else -- If Failed
player:Kick"Something went wrong!"
end
-- PlayerRemoving :
if sessions[player.UserId] then -- if there is a session to save
-- save data
end