Ok people so I am new to using RunService so I tried it in my light script. The script is below.
--Script that makes light flicker and fade and whatever --Services local RunService = game:GetService("RunService") --Variables for objects local lightModel = script.Parent local lightPart = lightModel.Light local light = lightPart.SurfaceLight --Ignore this just some notes. --Variables for light configurations are not usable --Found out that creating variables directly for a property, will get the number --But not the property itself. Just takes number. So you must manually edit, as it is below --Variables for a few amounts local LOWEST_AMOUNT = 0.1 local HIGHEST_AMOUNT = 1 local minFades = 1 local maxFades = 5 local minFlickers = 1 local maxFlickers = 4 local backupAmount = 0.1 local goingDown = true local goingUp = false local startNewFade = false local function fadeOutAndFadeIn(initialAmount, lowestAmount, changeAmount) --Light is always VERY near wanted amount, but not exactly, so if you check if it is 0 all the time, it will not be, so it will not work. local brightness = 1 local finishedFade = false RunService.Stepped:Connect(function() if goingDown == true then print(brightness - changeAmount) brightness = brightness - changeAmount print(brightness) light.Brightness = brightness print(light.Brightness) if brightness <= lowestAmount then goingDown = false goingUp = true brightness = lowestAmount end elseif goingUp == true then print(brightness + changeAmount) brightness = brightness + changeAmount print(brightness) light.Brightness = brightness print(light.Brightness) if brightness >= initialAmount then brightness = initialAmount goingUp = false finishedFade = true end elseif finishedFade == true then brightness = initialAmount finishedFade = false goingDown = true startNewFade = true end end) end local function flickerLight(topAmount, lowestAmount, gap) print("Started flicker") light.Brightness = topAmount wait(gap) light.Brightness = lowestAmount wait(gap) light.Brightness = topAmount return "Done" end while true do local howManyFades = math.random(minFades, maxFades) local howManyFlickers = math.random(minFlickers, maxFlickers) print(howManyFades, howManyFlickers) for count = 1, howManyFades do fadeOutAndFadeIn(HIGHEST_AMOUNT, LOWEST_AMOUNT, 0.01) print("Fadehappen") repeat wait() until startNewFade == true startNewFade = false end wait() for flickerCount = 1, howManyFlickers do local flickerFunction = flickerLight() repeat wait() until flickerFunction == "Done" end end
So what is meant to happen is it smoothly flickers a random amount of times, and then it flickers, and then that happens forever. The fading is my first issue. At first, it fades in and out smoothly, as expected. However, as time goes on, the numbers seem to jump. It is not a problem with the brightness not working, but the numbers themselves.
print(brightness - changeAmount) brightness = brightness - changeAmount
They gradually start to change in larger amounts. For example, 0.53 turning into 0.42, and even worse, they jump up in the process of going down. At some point they start to act like the flicker, the light value changing in values not too far from 1 and it gets worse. The prints get fast and unsteady, the lag increases. Secondly, the flickers happen randomly in the process of fading too. Maybe I should have used a different RunService thing like Heartbeat which I haven't used and barely know the difference about. Don't blame me if there is a really stupid error I am not good at this stuff. But I would like to know why this happens. It might be because of things running at the same time or whatever but please help.
Note: I will try TweenService with this too, don't say, because I haven't used that before too.
Just ask if you need more information on the results of prints. Thanks in advance.
Ahh I was told to use TweenService so yeah. Maybe the RunService is not good for this... Oh well.