Alright, so this is a "free-modelled" tool persistance that saves/load on command. (im sure youve seen it before). Now im been trying to make this code to automatically save when someone enters and leaves, however it doesnt seem to work. There are no errors, and i cant tell whats going wrong, whether its the save or the load (on exit/enter). This is the original script, i was wondering if someone could help make it auto load on enter, and save on leave? ~thx, bubs
forceSaveCommand = "save/" forceLoadCommand = "load/" clearStarterGearOnLoad = true dataReadyWaitTimeout = 8 saveSuccessMessage = "Your tools have been saved" loadSuccessMessage = "Your tools have been loaded" loadErrorMessage = "Your tools could not be loaded. Chat \"" .. forceLoadCommand .. "\" to retry." saveErrorMessage = "Your tools could not be saved. Chat \"" .. forceSaveCommand .. "\" to retry." loadFastMessage = "You can only load your tools every 3 minutes." saveFastMessage = "You can only save your tools every 30 seconds." dpPrefix = "SavedTools-0-" --Debug mode debug = false save_times = {} load_times = {} debris = game:GetService("Debris") function tellPlayer(player, text, time) -- messaging system if not player.Parent then return end local m = Instance.new("Message", player:findFirstChild("PlayerGui")) m.Text = text debris:AddItem(m, time or 3) end function waitForDataReady(player) local start = tick() while tick() < start + dataReadyWaitTimeout do if player.DataReady then return true end wait() end return false end function playerSave(player) if not waitForDataReady(player) then tellPlayer(player, saveErrorMessage) return end if (save_times[player] or 0) + 30 > tick() then tellPlayer(player, saveFastMessage) return end save_times[player] = tick() local gear = player:findFirstChild("StarterGear") if not gear then tellPlayer(player, saveErrorMessage) return end local tools = gear:GetChildren() local worked = false pcall(function () player:SaveNumber(dpPrefix .. "Count", #tools) worked = true end) if not worked then tellPlayer(player, saveErrorMessage) return end for i, tool in pairs(tools) do pcall(function () player:SaveInstance(dpPrefix .. tostring(i), tool) end) end tellPlayer(player, saveSuccessMessage) end function playerLoad(player) if not waitForDataReady(player) then tellPlayer(player, loadErrorMessage) return end if (load_times[player] or 0) + 60*3 > tick() then tellPlayer(player, loadFastMessage) return end load_times[player] = tick() local gear = player:findFirstChild("StarterGear") local backpack = player:findFirstChild("Backpack") local current = gear:GetChildren() local count = 0 pcall(function () count = player:LoadNumber(dpPrefix .. "Count") end) local tools = {} for i = 1, count do pcall(function () tools[#tools + 1] = player:LoadInstance(dpPrefix .. tostring(i)) end) end for i, tool in pairs(tools) do local copy = tool:clone() copy.Parent = backpack local copy2 = tool:clone() copy2.Parent = gear end if clearStarterGearOnLoad then for i, tool in pairs(current) do tool:remove() end end tellPlayer(player, loadSuccessMessage) end function onPlayerChatted(player, message, recipient) message = message:lower() if message == forceSaveCommand then playerSave(player) elseif message == forceLoadCommand then local s, e = pcall(function () playerLoad(player) end) if not s then if debug then tellPlayer(player, "playerLoad error:" .. e) end end end end function onPlayerEntered(player) player.Chatted:connect(function (msg, rec) onPlayerChatted(player, msg, rec) end)--ive taken this out before, and it still doesnt work. playerLoad(player) end function onPlayerLeft(player) local s, e = pcall(function () -- pcall is the only thing i dont understand in the code? playerSave(player) end) if not s then if debug then Instance.new("Message", workspace).Text = "playerSave error:" .. e end end end game.Players.PlayerAdded:connect(onPlayerEntered) game.Players.PlayerRemoving:connect(onPlayerLeft)