It works fine the first few times I use it but then breaks. Anyone have any idea why this could be happening? any help will be appreciated

debounce = true

script.Parent.Touched:connect(function(hit)
	if debounce == false then return end
	if debounce == true then
		debounce = false
	local hum = hit.Parent:FindFirstChild("Humanoid")
		if hum ~= nil then
		local player = game.Players:GetPlayerFromCharacter(hit.Parent)
		local treasure = player.leaderstats.Treasure		
		if treasure.Value == 50 or treasure.Value > 50 then
			treasure.Value = treasure.Value - 50
			
    local ship = game.ReplicatedStorage.RedShips.Ship1:Clone()
	ship.Parent = game.Workspace.Ships
	ship:MakeJoints()

					script.Parent.Parent.gp.Transparency = 1
					script.Parent.Parent.gp.CanCollide = false
					wait(6)
					script.Parent.Parent.gp.Transparency = 0
					script.Parent.Parent.gp.CanCollide = true		

debounce = true
		else
		if debounce == false then debounce = true
		end
		end
		end
		end
end)

edit: Incase anyone wants to know how I solved it I made the script find the humanoid first so a random brick would break it new script:



debounce = true

script.Parent.Touched:connect(function(hit)
		local hum = hit.Parent:FindFirstChild("Humanoid")
		if hum ~= nil then
	if debounce == false then return end
	if debounce == true then
		debounce = false
		local player = game.Players:GetPlayerFromCharacter(hit.Parent)
		if player then
		local treasure = player.leaderstats.Treasure	
		if treasure then	
		if treasure.Value == 50 or treasure.Value > 50 then
			treasure.Value = treasure.Value - 50
			
    local ship = game.ReplicatedStorage.RedShips.Ship1:Clone()
	ship.Parent = game.Workspace.Ships
	ship:MakeJoints()

					script.Parent.Parent.gp.Transparency = 1
					script.Parent.Parent.gp.CanCollide = false
					wait(6)
					script.Parent.Parent.gp.Transparency = 0
					script.Parent.Parent.gp.CanCollide = true		

debounce = true
		else
		if debounce == false then debounce = true
		end
		end
		end
		end
		end
		end
end)