I'm making a door and I want it to check if the script is already running, and if it is then it will wait until the function is complete before running another function. I noticed the return command could be used somehow, but I wasn't sure how to use it and if it was the best way to tell the script to wait. When I click the OnDoor button once it works but when I click it multiple times the script runs at the same time as the other ones which haven't completed.
ButtonOff script
Door = game.Workspace.TDoor.TheDoor ButtonOn = game.Workspace.TDoor.ButtonOn function OffDoor() Door.Transparency = 0 Door.CanCollide = true ButtonOn.Material = Enum.Material.Plastic end script.Parent.ClickDetector.mouseClick:connect(OffDoor)
Button on script
Door = game.Workspace.TDoor.TheDoor ButtonOn = game.Workspace.TDoor.ButtonOn function OnDoor() Door.Transparency = 0.5 Door.CanCollide = false wait(0.5) ButtonOn.Material = Enum.Material.Neon wait(0.5) ButtonOn.Material = Enum.Material.Plastic wait(0.5) ButtonOn.Material = Enum.Material.Neon wait(0.5) ButtonOn.Material = Enum.Material.Plastic wait(0.5) ButtonOn.Material = Enum.Material.Neon wait(0.5) ButtonOn.Material = Enum.Material.Plastic wait(0.5) ButtonOn.Material = Enum.Material.Neon end script.Parent.ClickDetector.mouseClick:connect(OnDoor)
You're missing a Debounce which is the use of a variable to see if something is already being done so you don't spam the action.
The above link will teach you all about Debounces. Bellow I will show the solution to your problem.
ButtonOff
Door = game.Workspace.TDoor.TheDoor ButtonOn = game.Workspace.TDoor.ButtonOn IsRunning = false function OffDoor() if IsRunning == false then IsRunning = true -- Stops above condition from being passed Door.Transparency = 0 Door.CanCollide = true ButtonOn.Material = Enum.Material.Plastic IsRunning = false -- Allows above condition to be passed now end end script.Parent.ClickDetector.mouseClick:connect(OffDoor)
ButtonOn
Door = game.Workspace.TDoor.TheDoor ButtonOn = game.Workspace.TDoor.ButtonOn IsRunning = false function OnDoor() if IsRunning == false then IsRunning = true Door.Transparency = 0.5 Door.CanCollide = false wait(0.5) ButtonOn.Material = Enum.Material.Neon wait(0.5) ButtonOn.Material = Enum.Material.Plastic wait(0.5) ButtonOn.Material = Enum.Material.Neon wait(0.5) ButtonOn.Material = Enum.Material.Plastic wait(0.5) ButtonOn.Material = Enum.Material.Neon wait(0.5) ButtonOn.Material = Enum.Material.Plastic wait(0.5) ButtonOn.Material = Enum.Material.Neon IsRunning = false end end script.Parent.ClickDetector.mouseClick:connect(OnDoor)
If you add more wait
after IsRunning becomes true, it will take longer for a player to be allowed to click the button again.