Tool saving script works on leave, but not on death

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)

If you can help, please do.

1 Like

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

Hey, I tried this and it still didnt work. The player doesn’t receive the item back when they die, still only if they leave.

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)

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.