I think the problem is while true do, because you want every 5 seconds since pick up, but while true do does it every 5 seconds constantly. I’ve solved it by making spawners so the tools won’t have to carry the script, and have a backup inside replicated storage
local debounce = false
while wait() do
if script.Parent:FindFirstChild("Steve") == nil and debounce == false then
debounce = true
wait(5)
local Backup = game.ReplicatedStorage.Steve:Clone()
Backup.Handle.CFrame = script.Parent.CFrame
Backup.Parent = script.Parent
debounce = false
end
end