I'm trying to make a model fade with a "flicker-ish" effect by randomly iterating through each part of the model, then adding transparency, and repeating this process until ALL children of the model are transparent.

The script I have is kindof working. The problem I'm running into is that from time-to-time, not ALL of the parts in the model are made transparent, but the script ends anyways. So sometimes there will be 1, 2, 3, 4 or more parts that are still kinda visible although the function is finished. Why is this happening?

I've included the function below. If I can clarify anything further, please let me know.

Variables to know:

Fields = a table of parts in the model

randHit = a local table that I use to cross-check what parts have been fully modified or not (this step might be unnecessary, I use this check to eliminate further transparency checks since I know the part is already fully transparent)

hit = a local bool that I set to true IF the part being checked is already inside of randHit

allTrans = a bool that I use to fully check if ALL parts of the model are transparent. Is set to true each time the loop activates and then is set to false ANY time one of the parts isn't transparent enough. Loop only finishes if allTrans is still true by the end

function onFunction()
	repeat 
		wait(0)
		allTrans = true
		local numHit = 0
		local randHit = {}
		local hit = false
		
		repeat
			hit = false
			local inc = math.random(1,#Fields) 
			for i, v in pairs (randHit)do -- this loop might be unnecessary
				if Fields[inc] == v then 
					hit = true
				end
			end
			
			if not hit then
				if Fields[inc].Transparency > transAmt then
					Fields[inc].Transparency = Fields[inc].Transparency - .2
					allTrans = false
				else
					table.insert(randHit,Fields[inc])
				end
				
			end
			
			numHit = numHit + 1

		until numHit == (#Fields)
	--[[	
		for i, v in pairs(Fields) do
			wait(0)
			allTrans = true
			if v.Transparency > transAmt then
				allTrans = false
				v.Transparency = v.Transparency - .3
			end
	end]]
	
	until allTrans == true


	for _,v in pairs(script.Parent.buttons:GetChildren()) do
		if v:IsA("BasePart") then
			v.BrickColor = BrickColor.new("Lime green")
		end
	end
	on = true	
	debounce = false
end