Flickering beam doesnt work

This script should flicker a beam randomly. it doesnt work

a = true
local beam = script.Parent.lightning1.Beam

function picktimer()
	d = 0.105
	w = 0.8
	r = 0.135
	wait(0.1)
end

function disappear()
	wait(w)
	beam.Enabled = false
	wait(d)
	beam.Enabled = false
	wait(d)
	beam.Enabled = false
	wait(d)
	beam.Enabled = false
	wait(d)
	beam.Enabled = false
	wait(d)
	beam.Enabled = true
	wait(d)
	beam.Enabled = false
	wait(d)
	beam.Enabled = false
	wait(d)
	beam.Enabled = true
	wait(d)
	beam.Enabled = false
	beam.CanCollide = false
	wait(w)
	beam.Enabled = true
	beam.CanCollide = true
	wait(r)
	beam.Enabled = false
	wait(r)
	beam.Enabled = false
	wait(r)
	beam.Enabled = false
	wait(r)
	beam.Enabled = true
	wait(r)
	beam.Enabled = false
	wait(r)
	beam.Enabled = true
	wait(r)
	beam.Enabled = false
	wait(r)
	beam.Enabled = false
	wait(r)
	beam.Enabled = false
end

while true do
	if a == true then
		picktimer()
		a = false
	else
		disappear()
	end
end

Number 1: Use task.wait() instead
Number 2: Use math.random() for random flickering
Number 3: Use a for loop

Final product:

for i = 0,6 do
    beam.Enabled = true
    task.wait(math.random(0.1,0.8))
    beam.Enabled = false
    task.wait(math.random(0.1,0.8))
end
3 Likes

I suggest that you try to get acquainted with math.random() function
random | math | Roblox Creator Documentation

Here’s an example based on your provided code

while true do task.wait(math.random(80, 135)/100)
   if math.random(1, 2) == 1 then
      beam.Enabled = false
   else
      beam.Enabled = true
   end
end
1 Like

like this?

a = true
local beam = script.Parent.lightning1.Beam
i = 0.6


for i = 0,6 do
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = true
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = true
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	beam.CanCollide = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = true
	beam.CanCollide = true
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = true
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = true
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
	task.wait(math.random(0.1,0.8))
	beam.Enabled = false
end


No. Write it exactly as I have written. That will make it loop 6 times.

it needs to loop infinite times tho

If you want it to loop infinitely then atleast have a variable ready to stop it.

local isFlickering = true
local minWait = 0.1
local maxWait = 0.8

repeat
    beam.Enabled = true
    task.wait(math.random(minWait,maxWait))
    beam.Enabled = false
    task.wait(math.random(minWait,maxWait))
until not isFlickering

You can set isFlickering to false and it will stop looping. You can also easily change the wait times at the top, though I doubt they’ll do much.

2 Likes