My tycoon upgraders are acting weird

So basically I was playtesting my game to test lag spikes (They gone now) But well, uh, for some reason my upgraders are upgrading blocks TONS of times.
Here’s the code I use for the upgraders:

local upgradePart = script.Parent:WaitForChild("UpgradePart")
upgradePart.Touched:Connect(function(hit)
	if hit:GetAttribute("Value") then
		if hit:GetAttribute("HasBeenAdvancedUpgraded") then return end
		hit:SetAttribute("HasBeenAdvancedUpgraded")
		local value = hit:GetAttribute("Value")
		local newValue = value * script.Parent:GetAttribute("UpgradeValue")
		hit:SetAttribute("Value", newValue)
	end
end)

For some reason the bug always happened right after I recorded a vid but here’s the problem
Sometimes they sell for more than the normal price 30. Once, one of them sold for like 1735272 cash or something. I want to fix this quickly as it could easily limit my ability to test the game. Does anyone know what’s wrong with my code?

Maybe implementing a debounce would fix your problem maybe using :GetServerTimeNow()?

local DEBOUNCE_TIME = 1

local upgradePart = script.Parent:WaitForChild("UpgradePart")
upgradePart.Touched:Connect(function(hit)
	local lastTime = workspace:GetServerTimeNow()
	
	if hit:GetAttribute("Value") then
		if hit:GetAttribute("HasBeenAdvancedUpgraded") then return end
		hit:SetAttribute("HasBeenAdvancedUpgraded")
		
		if (workspace:GetServerTimeNow() - lastTime) >= DEBOUNCE_TIME then
			lastTime = workspace:GetServerTimeNow()
			
			local value = hit:GetAttribute("Value")
			local newValue = value * script.Parent:GetAttribute("UpgradeValue")
			hit:SetAttribute("Value", newValue)
		end
	end
end)