As you can see in my leaderstats script I am saving my data after player leaves, which is highly risky and can cause data loss, I am trying to save data at regular intervals but problem is that if I will make while loop here then everything will be interrupted, isn't it? so then how can I save data at regular intervals?
local dataStoreService = game:GetService("DataStoreService")
local playerData = dataStoreService:GetDataStore("PlayerData")
game.Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local kills = Instance.new("IntValue")
kills.Parent = leaderstats
kills.Name = "Kills"
local Experience = Instance.new("StringValue")
Experience.Parent = leaderstats
Experience.Name = "Experience"
local SurvivalTime = Instance.new("IntValue")
SurvivalTime.Parent = leaderstats
SurvivalTime.Name = "Survived"
local Money = Instance.new("IntValue")
Money.Parent = leaderstats
Money.Name = "BackDollars"
player.CharacterAdded:Connect(function(character)
local humanoid = character:FindFirstChild("Humanoid")
humanoid.Died:Connect(function(died)
local tag = humanoid:FindFirstChild("creator")
local killer = tag.Value
if tag and killer then
killer.leaderstats:FindFirstChild("Kills").Value = killer.leaderstats:FindFirstChild("Kills").Value + 1
killer.leaderstats:FindFirstChild("BackDollars").Value += 1
end
end)
end)
local playerUserId = "Player_"..player.UserId
local data = playerData:GetAsync(playerUserId)
if data then
kills.Value = data["Kills"]
Experience.Value = data["Experience"]
SurvivalTime.Value = data["Survived"]
Money.Value = data["BackDollars"]
else
kills.Value = 0
Experience.Value = "Newcomer"
SurvivalTime.Value = 0
Money.Value = 0
print("datastore")
end
end)
local function create_table(player)
local player_stats = {}
for i, stat in pairs(player.leaderstats:GetChildren()) do
player_stats[stat.Name] = stat.Value
end
return player_stats
end
local function onPlayerExit(player)
local player_stats = create_table(player)
local success, err = pcall(function()
local playerUserId = "Player_"..player.UserId
playerData:SetAsync(playerUserId, player_stats)
end)
if not success then
warn("Could not save data")
end
end
game.Players.PlayerRemoving:Connect(onPlayerExit)

1 comment
I have no idea what are you talking about. It works (possibly).