Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

Lights not turning on?

The following script is supposed to fade the lights off if they are on, and fade them on if they are off.

local Me = script.Parent

local H1 = game.Workspace.House_Lights.HouseLight_1.ReadInside.Light.Light.SpotLight
local H2 = game.Workspace.House_Lights.HouseLight_2.ReadInside.Light.Light.SpotLight
local H3 = game.Workspace.House_Lights.HouseLight_3.ReadInside.Light.Light.SpotLight
local H4 = game.Workspace.House_Lights.HouseLight_4.ReadInside.Light.Light.SpotLight
local H5 = game.Workspace.House_Lights.HouseLight_5.ReadInside.Light.Light.SpotLight
local H6 = game.Workspace.House_Lights.HouseLight_6.ReadInside.Light.Light.SpotLight
local H7 = game.Workspace.House_Lights.HouseLight_7.ReadInside.Light.Light.SpotLight
local H8 = game.Workspace.House_Lights.HouseLight_8.ReadInside.Light.Light.SpotLight
local H9 = game.Workspace.House_Lights.HouseLight_9.ReadInside.Light.Light.SpotLight

local AllHouse = H1, H2, H3, H4, H5, H6, H7, H8, H9 --WHERE THE H's ARE LISTED

local on_or_off = "off"

function onClicked ()
	if on_or_off == "off" then --If the house lights are off then
		game.Workspace.HouseLightButton.ClickDetector.MaxActivationDistance = 0
		AllHouse.Enabled = true
		Me.BrickColor = BrickColor.new("Dark green")		
		for i=0,60, 0.5 do 
			AllHouse.Brightness = i
			wait(0.25)
		end
		game.Workspace.HouseLightButton.ClickDetector.MaxActivationDistance = 32
		print("Lights are on. Rise and shine!")
		on_or_off = "on"
	else -- Otherwise, turn the houselights on
		game.Workspace.HouseLightButton.ClickDetector.MaxActivationDistance = 0
		Me.BrickColor = BrickColor.new("Bright red")
		for i=60,0, -0.5 do
			AllHouse.Brightness = i
			wait(0.25)
		end
		game.Workspace.HouseLightButton.ClickDetector.MaxActivationDistance = 32
		AllHouse.Enabled = false
		on_or_off = "off"
		print("Lights are off, goodnight.")
	end
end

game.Workspace.HouseLightButton.ClickDetector.MouseClick:connect(onClicked)

The problem I'm having is it only fades on ONE of the lights (that's H1). None of the others respond. I'm not going into the program and individually telling each and every single one to turn on because that would be ridiculous. If you need any more information about something, I'll be happy to comply.

1 answer

✓ Accepted answer

It's a good instinct that you don't want to repeat yourself. Repeating code for each one is not the right way to approach this :)


This is not how tuples work:

local AllHouse = H1, H2, H3, H4, H5, H6, H7, H8, H9

When you have an assignment with commas, each corresponding thing on the left gets set to the corresponding thing on the right. In this statement, all of the ones after H1 are ignored.


There is no way to make one value be a 'merged' version of a bunch of values (like you wanted AllHouse to be), where setting something on it sets something on all of the lights. Instead, you make a collection of lights and do something to each element of the collection:

-- make a list:
local lights = {H1, H2, H3, H4, H5, H6, H7, H8, H9}

Note the curly braces.

lights is a list -- it does not have an .Brightness property. Instead, you use a for loop to do something for each light in lights:

for i=60,0, -0.5 do
	for _, light in pairs(lights) do
		light.Brightness = i
	end
	wait(0.25)
end

Less code to define your lights

Instead of typing out the full amount to define each H1 to H9, you could just organize your model so that only lights are in workspace.House_Lights. Then you can more easily generate the lights list:

local lights = {} -- start with an empty list
for _, light in pairs(workspace.House_Lights:GetChildren()) do
	local spotLight = light.ReadInside.Light.Light.SpotLight
	table.insert(lights, spotLight) -- add the spot light to the `lights` list
end

1 comment

0

Thanks SOOO Much. Your explanation was perfect. I'm happy you also agree with me that repeating the same command is ridiculous.

This discussion is preserved as it was. New answers, comments, and votes are closed.