Hello, my tool save script works, however it only works when the player leaves and rejoins, not when they die and respawn.
Here’s the script:
local DataStoreService = game:GetService("DataStoreService")
local SaveData = DataStoreService:GetDataStore("SaveData")
local ToolFolder = game:GetService("ReplicatedStorage"):FindFirstChild("Tools")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(Player)
local ToolData = SaveData:GetAsync(Player.UserId)
local Backpack = Player:WaitForChild("Backpack")
local StarterGear = Player:WaitForChild("StarterGear")
if ToolData then
for i, v in pairs(ToolData) do
if ToolFolder:FindFirstChild(v) and not Backpack:FindFirstChild(v) and not StarterGear:FindFirstChild(v) then
ToolFolder[v]:Clone().Parent = Backpack
ToolFolder[v]:Clone().Parent = StarterGear
end
end
end
Player.CharacterRemoving:Connect(function(Character)
Character:WaitForChild("Humanoid"):UnequipTools()
end)
end)
Players.PlayerAdded:Connect(function(Player)
Player.CharacterRemoving:Connect(function()
local ToolTable
for i,v in pairs(Player.Backpack:GetChildren()) do
if not ToolTable then ToolTable = {} end
table.insert(ToolTable, v.Name)
end
if ToolTable then
SaveData:SetAsync(Player.UserId, ToolTable)
end
end)
end)
Players.PlayerRemoving:Connect(function(Player)
local ToolTable
for i,v in pairs(Player.Backpack:GetChildren()) do
if not ToolTable then ToolTable = {} end
table.insert(ToolTable, v.Name)
end
if ToolTable then
SaveData:SetAsync(Player.UserId, ToolTable)
end
end)
i think the problem is that the player added functions only runs when a player joins the sever so i think what you need is player.character.humanoid.Died and have the loading data function so like thois
local DataStoreService = game:GetService("DataStoreService")
local SaveData = DataStoreService:GetDataStore("SaveData")
local ToolFolder = game:GetService("ReplicatedStorage"):FindFirstChild("Tools")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(Player)
local ToolData = SaveData:GetAsync(Player.UserId)
local Backpack = Player:WaitForChild("Backpack")
local StarterGear = Player:WaitForChild("StarterGear")
if ToolData then
for i, v in pairs(ToolData) do
if ToolFolder:FindFirstChild(v) and not Backpack:FindFirstChild(v) and not StarterGear:FindFirstChild(v) then
ToolFolder[v]:Clone().Parent = Backpack
ToolFolder[v]:Clone().Parent = StarterGear
end
end
end
Player.CharacterRemoving:Connect(function(Character)
Character:WaitForChild("Humanoid"):UnequipTools()
end)
end)
Players.PlayerAdded:Connect(function(Player)
Player.Character.Humanoid.Died:Connect(function()
local ToolTable
for i,v in pairs(Player.Backpack:GetChildren()) do
if not ToolTable then ToolTable = {} end
table.insert(ToolTable, v.Name)
end
if ToolTable then
SaveData:SetAsync(Player.UserId, ToolTable)
end
end)
end)
Players.PlayerRemoving:Connect(function(Player)
local ToolTable
for i,v in pairs(Player.Backpack:GetChildren()) do
if not ToolTable then ToolTable = {} end
table.insert(ToolTable, v.Name)
end
if ToolTable then
SaveData:SetAsync(Player.UserId, ToolTable)
end
end)```
i think idk through since i cant test it
Nevermind, I managed to fix it myself. Here’s the script if anyone needs it:
local DataStoreService = game:GetService("DataStoreService")
local SaveData = DataStoreService:GetDataStore("SaveData")
local ToolFolder = game:GetService("ReplicatedStorage"):FindFirstChild("Tools")
local Players = game:GetService("Players")
Players.PlayerAdded:Connect(function(Player)
Player.CharacterAdded:Connect(function(Character)
local ToolData = SaveData:GetAsync(Player.UserId)
local Backpack = Player:WaitForChild("Backpack")
local StarterGear = Player:WaitForChild("StarterGear")
if ToolData then
for i, v in pairs(ToolData) do
if ToolFolder:FindFirstChild(v) and not Backpack:FindFirstChild(v) and not StarterGear:FindFirstChild(v) then
ToolFolder[v]:Clone().Parent = Backpack
ToolFolder[v]:Clone().Parent = StarterGear
end
end
end
Character:FindFirstChild("Humanoid").Died:Connect(function()
local ToolTable
for i,v in pairs(Player.Backpack:GetChildren()) do
if not ToolTable then ToolTable = {} end
table.insert(ToolTable, v.Name)
end
if ToolTable then
SaveData:SetAsync(Player.UserId, ToolTable)
end
end)
end)
end)
Players.PlayerRemoving:Connect(function(Player)
local ToolTable
for i,v in pairs(Player.Backpack:GetChildren()) do
if not ToolTable then ToolTable = {} end
table.insert(ToolTable, v.Name)
end
if ToolTable then
SaveData:SetAsync(Player.UserId, ToolTable)
end
end)