Yo, so my datastore script seems to have this issue where instead of saving the players level and exp, it for some reason jumps a level or two sometimes?? (for example: the players level would be 1, then once they leave and rejoin it becomes 2?)
Here is the code if anyone wants to know;
local DSService = game:GetService("DataStoreService"):GetDataStore("-test#1222") local RunService = game:GetService("RunService") game.Players.PlayerAdded:Connect(function(plr) local uniquekey = 'id-'..plr.userId local leaderstats = Instance.new("Folder", plr) local Level = Instance.new("NumberValue") local EXP = Instance.new("NumberValue") local MaxEXP = Instance.new("NumberValue") local Cash = Instance.new("NumberValue") local FactionEXP = Instance.new("NumberValue") local Strength = Instance.new("NumberValue") local Stamina = Instance.new("NumberValue") local Defence = Instance.new("NumberValue") local Quirk = Instance.new("NumberValue") local Points = Instance.new("NumberValue") local New = Instance.new("BoolValue") leaderstats.Name = "Data" Level.Parent = leaderstats EXP.Parent = leaderstats MaxEXP.Parent = leaderstats Cash.Parent = leaderstats FactionEXP.Parent = leaderstats New.Parent = leaderstats Strength.Parent = leaderstats Stamina.Parent = leaderstats Defence.Parent = leaderstats Quirk.Parent = leaderstats Points.Parent = leaderstats Level.Name = "Level" EXP.Name = "EXP" MaxEXP.Name = "MaxEXP" Cash.Name = "Cash" FactionEXP.Name = "FactionEXP" Strength.Name = "Strength" Stamina.Name = "Stamina" Defence.Name = "Defence" Quirk.Name = "Quirk" Points.Name = "Points" New.Name = "New" Level.Value = 1 EXP.Value = 0 MaxEXP.Value = 100 Cash.Value = 0 FactionEXP.Value = 0 New.Value = true Strength.Value = 0 Stamina.Value = 0 Defence.Value = 0 Quirk.Value = 0 Points.Value = 0 local GetSaved = DSService:GetAsync(uniquekey) if GetSaved then Level.Value = GetSaved[1] EXP.Value = GetSaved[2] Cash.Value = GetSaved[3] FactionEXP.Value = GetSaved[4] New.Value = GetSaved[5] Strength.Value = GetSaved[6] Stamina.Value = GetSaved[7] Defence.Value = GetSaved[8] Quirk.Value = GetSaved[9] EXP.Value = GetSaved[10] Points.Value = GetSaved[11] else local NumberFS = {Level.Value,EXP.Value,Cash.Value,FactionEXP.Value,New.Value,Strength.Value,Defence.Value,Quirk.Value,Stamina.Value,MaxEXP.Value,Points.Value,} DSService:SetAsync(uniquekey,NumberFS) end end) game.Players.PlayerRemoving:Connect(function(plr) local uniquekey = "id-"..plr.userId local SaveTable = {plr.Data.Level.Value,plr.Data.EXP.Value,plr.Data.Cash.Value,plr.Data.FactionEXP.Value,plr.Data.New.Value,plr.Data.Strength.Value,plr.Data.Defence.Value,plr.Data.Stamina.Value,plr.Data.Quirk.Value,plr.Data.MaxEXP.Value,plr.Data.Points.Value} DSService:SetAsync(uniquekey, SaveTable) print("Number") end)~~~~~~~~~~~~~~~~~
Heres my datastore:
local Ds = game:GetService("DataStoreService") -- access datastore local abilites = Ds:GetDataStore("PlayerStats_00") -- Datastore key function getPlayerData(player) -- load data local success, data = false, nil repeat success = pcall(function() data = abilites:GetAsync(player.UserId) end) until success player.IfData.Value = true return data end function saveData(player) if player.IfData.Value then local data = {} for i,v in pairs(player.leaderstats:GetChildren()) do table.insert(data, v.Value) end pcall(function() abilites:SetAsync(player.UserId, data) end) end end function loadStats(player) local leaderstats = Instance.new("Folder",player) leaderstats.Name = "leaderstats" local Credits = Instance.new("IntValue", leaderstats) Credits.Name = "Coins" local Wins = Instance.new("IntValue", leaderstats) Wins.Name = "Wins" local loaded = Instance.new("BoolValue", player) loaded.Name = "IfData" local savefile = getPlayerData(player) if savefile then Credits.Value = savefile[1] Wins.Value = savefile[1] else Credits.Value = 0 Wins.Value = 0 end end game.Players.PlayerAdded:Connect(loadStats) -- When player joins load their stats game.Players.PlayerRemoving:Connect(saveData) -- when player leaves save their stats -- Auto-Saving (When game is releasing make an setting) while wait(30) do for _, player in pairs(game.Players:GetPlayers())do saveData(player) end end