How keep a script from executing again until after its finished its current task?

Hello, I would like to find out how to keep a script from re-executing until the script finishes its initial task. Basically, I have a signal with a countdown timer and I would like for it to not get hit again until it turns yellow after the countdown.

Would you mind sharing your code?

not at all

sp = script.Parent.Parent.Signal.Signal1
local MS = sp.MS.SurfaceGui.TextLabel

function Signal()
	if MS.Visible == false then
		MS.Visible = true
	end
	if sp.BY.BrickColor == BrickColor.Yellow() then
		sp.BY.BrickColor = BrickColor.Black()
		sp.TG.Material = Enum.Material.Glass
	end

	sp.BG.BrickColor = BrickColor.Black()
	sp.BG.Material = Enum.Material.Glass	
	sp.TG.BrickColor = BrickColor.Black()
	sp.TG.Material = Enum.Material.Glass
	wait(0.5)
	sp.BR.BrickColor = BrickColor.Red()
	sp.BR.Material = Enum.Material.Neon
	sp.TR.BrickColor = BrickColor.Red()
	sp.TR.Material = Enum.Material.Neon
	for i = (15), 0, -1 do
		MS.Text = tostring(i)
		wait(1)
	end
	MS.Visible = false
	sp.BR.BrickColor = BrickColor.Black()
	sp.TR.Material = Enum.Material.Glass
	sp.TR.BrickColor = BrickColor.Black()
	sp.TG.Material = Enum.Material.Glass
	wait(0.5)
	sp.TY.BrickColor = BrickColor.Yellow()
	sp.TY.Material = Enum.Material.Neon
	sp.BG.BrickColor = BrickColor.Green()
	sp.BG.Material = Enum.Material.Neon
	wait(15)
	sp.TY.BrickColor = BrickColor.Black()
	sp.TY.Material = Enum.Material.Glass
	wait(0.5)
	sp.TG.BrickColor = BrickColor.Green()
	sp.TG.Material = Enum.Material.Neon

end

script.Parent.Touched:connect(Signal)
sp = script.Parent.Parent.Signal.Signal1
local MS = sp.MS.SurfaceGui.TextLabel
local db = false

function Signal()
	if MS.Visible == false then
		MS.Visible = true
	end
	if sp.BY.BrickColor == BrickColor.Yellow() then
		sp.BY.BrickColor = BrickColor.Black()
		sp.TG.Material = Enum.Material.Glass
	end

	sp.BG.BrickColor = BrickColor.Black()
	sp.BG.Material = Enum.Material.Glass	
	sp.TG.BrickColor = BrickColor.Black()
	sp.TG.Material = Enum.Material.Glass
	wait(0.5)
	sp.BR.BrickColor = BrickColor.Red()
	sp.BR.Material = Enum.Material.Neon
	sp.TR.BrickColor = BrickColor.Red()
	sp.TR.Material = Enum.Material.Neon
	for i = (15), 0, -1 do
		MS.Text = tostring(i)
		wait(1)
	end
	MS.Visible = false
	sp.BR.BrickColor = BrickColor.Black()
	sp.TR.Material = Enum.Material.Glass
	sp.TR.BrickColor = BrickColor.Black()
	sp.TG.Material = Enum.Material.Glass
	wait(0.5)
	sp.TY.BrickColor = BrickColor.Yellow()
	sp.TY.Material = Enum.Material.Neon
	sp.BG.BrickColor = BrickColor.Green()
	sp.BG.Material = Enum.Material.Neon
	wait(15)
	sp.TY.BrickColor = BrickColor.Black()
	sp.TY.Material = Enum.Material.Glass
	wait(0.5)
	sp.TG.BrickColor = BrickColor.Green()
	sp.TG.Material = Enum.Material.Neon
debounce = false
end

script.Parent.Touched:connect(function()
if db == false then
db = true
Signal()
end
end)

Try that, I haven’t tested it yet so tell me if there are any errors. Also, my apologies for the bad indentation.

its alright, I don’t mind considering I do the same thing at night.

worked perfectly, thanks. Only bug was that it refuses to execute again after its done

Glad I could be of use. Mark it as the solution if it is.

sp = script.Parent.Parent.Signal.Signal1
local MS = sp.MS.SurfaceGui.TextLabel
local db = false

function Signal()
	if MS.Visible == false then
		MS.Visible = true
	end
	if sp.BY.BrickColor == BrickColor.Yellow() then
		sp.BY.BrickColor = BrickColor.Black()
		sp.TG.Material = Enum.Material.Glass
	end

	sp.BG.BrickColor = BrickColor.Black()
	sp.BG.Material = Enum.Material.Glass	
	sp.TG.BrickColor = BrickColor.Black()
	sp.TG.Material = Enum.Material.Glass
	wait(0.5)
	sp.BR.BrickColor = BrickColor.Red()
	sp.BR.Material = Enum.Material.Neon
	sp.TR.BrickColor = BrickColor.Red()
	sp.TR.Material = Enum.Material.Neon
	for i = (15), 0, -1 do
		MS.Text = tostring(i)
		wait(1)
	end
	MS.Visible = false
	sp.BR.BrickColor = BrickColor.Black()
	sp.TR.Material = Enum.Material.Glass
	sp.TR.BrickColor = BrickColor.Black()
	sp.TG.Material = Enum.Material.Glass
	wait(0.5)
	sp.TY.BrickColor = BrickColor.Yellow()
	sp.TY.Material = Enum.Material.Neon
	sp.BG.BrickColor = BrickColor.Green()
	sp.BG.Material = Enum.Material.Neon
	wait(15)
	sp.TY.BrickColor = BrickColor.Black()
	sp.TY.Material = Enum.Material.Glass
	wait(0.5)
	sp.TG.BrickColor = BrickColor.Green()
	sp.TG.Material = Enum.Material.Neon
end

script.Parent.Touched:connect(function()
if db == false then
db = true
Signal()
db = false
end
end)

Here is the new code, this should work.

Yes, it did indeed work, thank you so much for your time and help. Have a great day/night!