This script allows you to keep your inventory even after you die, so if you pick up a weapon, you will have it when you respawn, however if you have a situation where you pick up a better weapon, and drop the previous, when you next respawn you will still have both swords in your inventory, which can lead to duping and other sorts, how can I alter this to make it not give you items that you do not have in your inventory when you die?

local wm = Instance.new("Model")
wm.Name = "Weaps"

function give(weap, player) 

	for _, w in ipairs(player.Weaps:GetChildren()) do
		if w.Name == weap.Name then return end
	end

	for _, w in ipairs(game.StarterPack:GetChildren()) do
		if w.Name == weap.Name then return end
	end

	weap:clone().Parent = player.Weaps
end

game.Players.ChildAdded:connect(function(p)
	wm:clone().Parent = p
	wait()
	p.Character.ChildAdded:connect(function(wep)
		if wep.className == "Tool" then
			give(wep, p)
		end
	end)
	p.Changed:connect(function(pr)
		if pr == "Character" then
			for _, w in ipairs(p.Weaps:GetChildren()) do
				w:clone().Parent = p.Backpack
			end
			p.Character.ChildAdded:connect(function(wep)
				if wep.className == "Tool" then
					give(wep, p)
				end
			end)
		end
	end)
	p.Backpack.ChildAdded:connect(function(h)
		if h.className == "HopperBin" then
			give(h, p)		
		end
	end)
end)
	

(I did not make this script)