while task.wait(60) do
for i,plr in Players:GetPlayers() do
if sessions[plr.UserId] then
local Data = {
Coins = plr.Tout.Coins.Value,
Inventaire = {},
Equipped = {}
}
for _, item in plr.Tout.Equipped:GetChildren() do
table.insert(Data.Equipped, item.Name)
end
for _, item in plr.Tout.Inventaire:GetChildren() do
table.insert(Data.Inventaire, item.Name)
end
local dataSave
local success, err = pcall(function()
dataSave = SaveData:SetAsync(plr.UserId, Data)
end)
end
end
end
So imagine that the players leave 0.01 seconds after being detected with the for i, plr in Players:GetPlayers() , then when it goes to the Data table , as the player is not anymore in the game it will return an error with the plr.Tout.Coins.Value and broke the loop definitely ?? So this loop isn’t safe ? all this is supposition i’m looking for a way to save the data of the players regurlary to avoid data loss but i don’t really know how to do it, i hear that RunService is a pain for the server as too much frame while a task.wait is more optimized. Please if you know, let me know thank you…
When a script is running, nothing else can happen in the data model (workspace, players, etc). That means if you do Players:GetPlayers(), nobody can disappear from that list until the next time the world updates. So as long as you don’t put a wait in your for loop, you’ll be fine. This means you do have to check if objects are still in the game if you are calling them in a way that could introduce delay, such as through a remote.
Thank you for this information, I’m not sure I understood some of it. You say that when the plr:GetPlayers are selected then they freeze in the data models, so why if I put a wait() it will defreeze them? And what does it mean when the world updates? Thanks again for your much appreciated help
While your script is running, every other part of the game is actually stopped, each part has to run in a specific order every tick. Note that in roblox the game tick and framerate are seperated, the framerate may be faster or slower without affecting gameplay timing. See this page for more info: Task Scheduler | Roblox Creator Documentation
Any kind of wait in a script causes the current script to stop, if other scripts have not yet run, the scheduler may continue running those scripts. The order that scripts run is not knowable (this is why you don’t use _G!!). Since those other scripts, including internal ones, could remove something from the workspace, there are no guarantees that an Instance you saw in a previous tick is still there. But, as long as you see something and act on it without Waiting, no other part of the game can mess with it.