I have a script that saves the tools and the leaderstats. It works, but there's a really weird problem. If i join my game, get different tools, leave and rejoin the game, some of the tools loaded are replaced with Healing Potions, and sometimes it has additional healing potions. For example:
Joined game
Gets Sword, Trowel and a Superball
Leaves game (When i leave the items that i just got are saved)
Joins game
**Loads ** up for me a Healing potion, Trowel, Healing potion
What is causing this weird problem? Script:
--------------- --[Variables]-- --------------- local DataStore = game:GetService("DataStoreService"):GetDataStore("RoaHSave") --------------- --[Task Area]-- --------------- game.Players.PlayerAdded:connect(function(newPlayer) --Creates variables local leaderstats = newPlayer:WaitForChild("leaderstats") local xp = leaderstats:WaitForChild("XP") local level = leaderstats:WaitForChild("Lvl") local c = leaderstats:WaitForChild("Tix") local Backpack = newPlayer:WaitForChild("Backpack") newPlayer:WaitForChild("StarterGear") --Creates user key local key = "user-"..newPlayer.userId --Get saved data local savedData = DataStore:GetAsync(key) --If player has data saved, load data. If not, save current data. if savedData then local s = "" for i, v in pairs (savedData) do s = s..v.."/" end print (s) --Get and set RPG Status level.Value = savedData[2] xp.Value = savedData[1] c.Value = savedData[3] --Get and set tools for i, v in pairs (savedData) do if i>3 and v ~= "ClassicSlingshot" then print(v) local clone = game.ServerStorage.Gears.Items:FindFirstChild(v):clone() clone.Parent = newPlayer.Backpack if game.ServerStorage.Gears.Items:FindFirstChild(v).SG.Value == true then local clone2 = game.ServerStorage.Gears.Items:FindFirstChild(v):clone() clone2.Parent = newPlayer.StarterGear end end end else --Set values local valuesToSave = {xp.Value,level.Value,c.Value} local index = 4 for i, v in pairs (Backpack:GetChildren()) do if v.Name ~= "ClassicSlingshot" then table.insert(valuesToSave,index,v.Name) index = index + 1 end end --Store values DataStore:SetAsync(key,valuesToSave) end local function SaveStatusFunction() --Set values local valuesToSave = {xp.Value,level.Value,c.Value} local index = 4 for i, v in pairs (Backpack:GetChildren()) do if v.Name ~= "ClassicSlingshot" then table.insert(valuesToSave,index,v.Name) index = index + 1 end end if newPlayer.Character ~= nil then for i, v in pairs(newPlayer.Character:GetChildren()) do if v.ClassName == "Tool" then table.insert(valuesToSave,index,v.Name) index = index + 1 end end end --Store values DataStore:SetAsync(key,valuesToSave) end -- When the player is leaving, save status game.Players.PlayerRemoving:connect(SaveStatusFunction) end)