I need to have my tools save when the players respawn or leave the game
I have been using this script and it has been working on/off for the past few weeks.
local ds = game:GetService("DataStoreService")
local data = ds:GetDataStore("Stats")
local savetools = game.ReplicatedStorage.CurcWeapons
game.Players.PlayerAdded:Connect(function(plr)
local savedItems = data:GetAsync(plr.UserId.."-Items")
if savedItems then
for i, item in pairs(savedItems) do
for i, tool in pairs(savetools:GetChildren()) do
if item == tool.Name then
local toolClone1 = tool:Clone()
toolClone1.Parent = plr.Backpack
print("Cloned ", tool.Name)
local toolClone2 = tool:Clone()
toolClone2.Parent = plr.StarterGear
print("Cloned Starter ", tool.Name)
end
end
end
end
end)
game.Players.PlayerAdded:Connect(function(plr)
local savedItems = data:GetAsync(plr.UserId.."-Items")
if savedItems then
for i, item in pairs(savedItems) do
for i, tool in pairs(savetools:GetChildren()) do
if item == tool.Name then
local toolClone1 = tool:Clone()
toolClone1.Parent = plr.Backpack
print("Cloned ", tool.Name)
local toolClone2 = tool:Clone()
toolClone2.Parent = plr.StarterGear
print("Cloned Starter ", tool.Name)
end
end
end
end
end)
game.Players.PlayerRemoving:Connect(function(plr)
plr.CharacterRemoving:Connect(function(char)
local humanoid = char.Humanoid
humanoid:UnquipTools()
end)
local suc, err = pcall(function()
local savedItems = {}
for i, item in pairs(plr.Backpack:GetChildren()) do
table.insert(savedItems, item.Name)
print(savedItems, item.Name)
end
data:SetAsync(plr.UserId.."-Items", savedItems)
end)
end)
I need to make “humanoid health changed” I think but I am not sure what line i need to put in it so it can save the items every time they die not just when leaving and rejoin.
This script should save weapon’s when leaving, make new weapons keep on death, and load them back in when rejoining
local DatastoreService = game:GetService("DataStoreService")
local RunService = game:GetService("RunService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ToolDataStore = DatastoreService:GetDataStore("tools")
local ToolRefrence = ReplicatedStorage.Tools
game.Players.PlayerAdded:Connect(function(player: Player)
local savedTools = nil
local success, err = pcall(function()
savedTools = ToolDataStore:GetAsync(player.UserId)
end)
if success then
print("Tools Loaded!")
print(savedTools)
elseif err then
warn(err)
end
local starterGear = player.StarterGear
-- Give's tools based on the saved tool names
if savedTools then
for toolName, _ in pairs(savedTools) do
local toolTemplate = ToolRefrence:FindFirstChild(toolName)
if toolTemplate then
local newStarterGear = toolTemplate:Clone()
newStarterGear.Parent = starterGear
end
end
end
-- When the player dies make sure that the unsaved weapons will still be in the backpack
player.CharacterRemoving:Connect(function()
for _,tool in pairs(player.Backpack:GetChildren()) do
if starterGear:FindFirstChild(tool.Name) == nil then
local clone = tool:Clone()
clone.Parent = starterGear
end
end
end)
if not player:HasAppearanceLoaded() then
player.CharacterAppearanceLoaded:Wait()
end
-- Add tools if not given by starter pack
for _,tool in pairs(player.StarterGear:GetChildren()) do
if player.Backpack:FindFirstChild(tool.Name) == nil then
local clone = tool:Clone()
clone.Parent = player.Backpack
end
end
end)
game.Players.PlayerRemoving:Connect(function(player)
local toolSave = {}
for _, tool in pairs(player.StarterGear:GetChildren()) do
if ToolRefrence:FindFirstChild(tool.Name) then -- Makes sure that the tool is able to be loaded back in
toolSave[tool.Name] = true
end
end
local success, err = pcall(function()
ToolDataStore:SetAsync(player.UserId, toolSave)
end)
if success then
print("Tools Saved!")
print(toolSave)
elseif err then
warn(err)
end
end)
game:BindToClose(function()
if RunService:IsStudio() then
task.wait(3)
else
task.wait(10)
end
end)
local ds = game:GetService("DataStoreService")
local data = ds:GetDataStore("Stats")
local savetools = game.ReplicatedStorage.CurcWeapons
game.Players.PlayerAdded:Connect(function(plr)
local savedItems = data:GetAsync(plr.UserId.."-Items")
if savedItems then
for i, item in pairs(savedItems) do
local tool = savetools:FindFirstChild(i)
if tool then
local toolClone1 = tool:Clone()
toolClone1.Parent = plr.Backpack
print("Cloned ", tool.Name)
local toolClone2 = tool:Clone()
toolClone2.Parent = plr.StarterGear
print("Cloned Starter ", tool.Name)
end
end
end
end)
game.Players.PlayerRemoving:Connect(function(plr)
plr.CharacterRemoving:Connect(function(char)
local humanoid = char.Humanoid
humanoid:UnequipTools()
end)
local suc, err = pcall(function()
local savedItems = {}
for i, item in pairs(plr.Backpack:GetChildren()) do
table.insert(savedItems, item.Name)
print(savedItems, item.Name)
end
data:SetAsync(plr.UserId.."-Items", savedItems)
end)
end)