How do I make this script work?

Basically, I want to make it so that if those 6 parts become the color green, then I want the items in the if statement to turn green, but right now what happens is that I turn the 6 parts color into green in-game and the items inside the if statement stay the same. How do I fix this?

Current server script under ServerScriptService:

local Orb = game.Workspace.PortalArea.Orb
local OrbParticle1 = game.Workspace.PortalArea.Orb.Center.GreenLight
local OrbParticle2 = game.Workspace.PortalArea.Orb.Center.RedLight
local OrbLight1 = game.Workspace.PortalArea.Orb.PointLight
local OrbLight2 = game.Workspace.PortalArea.Orb.PointLight2

local Light1 = game.Workspace.Lights.Light1
local Light2 = game.Workspace.Lights.Light2
local Light3 = game.Workspace.Lights.Light3
local Light4 = game.Workspace.Lights.Light4
local Light5 = game.Workspace.Lights.Light5
local Light6 = game.Workspace.Lights.Light6

local ColorGreen = Color3.fromRGB(0, 255, 0)

local BottomLight = game.Workspace.PortalArea.OrbBottomLight


while true do 
	
	if Light1.Color == ColorGreen and Light2.Color == ColorGreen and Light3.Color == ColorGreen and Light4.Color == ColorGreen and Light5.Color == ColorGreen and Light6.Color == ColorGreen then
	
		OrbParticle1.Color = Color3.new(0, 255, 0)
		OrbParticle2.Color = Color3.new(0, 255, 0)
		OrbLight1.Color = Color3.new(0, 255, 0)
		OrbLight2.Color = Color3.new(0, 255, 0)
		BottomLight.Color = Color3.new(0, 255, 0)
	
	end
	wait()
end
3 Likes

use WaitForChild() and :GetAttributeChangedSignal or .Changed

local Lights = workspace:WaitForChild("Lights"):GetChildren() -- Make sure you use WaitForChild() when getting things from workspace
local PortalArea = workspace:WaitForChild("PortalArea")
green = Color3.fromRGB(0, 255, 0)

local function CheckLightColor(Color) -- Loop through the lights instead of checking each one yourself
  for _, Light in Lights do
    if Light.Color ~= Color then return end
    -- if Light:GetAttribute("Color") ~= Color then return end -- Could give lights different colors using attributes
  end
	
  return true
end

local function UpdateLightColors()
  if not CheckLightColor(green) then return end
	
  for _, Particle in PortalArea.Orb:GetDescendants() do -- Loop through particles if lights are green,
    Particle.Color = green
  end
end

for _, Light in Lights do
  Light:GetAttributeChangedSignal("Color"):Connect(UpdateLightColors) -- Update lights if 1 light changes (instead of looping constantly)
end
1 Like

you can do if if Light1.Color == ColorGreen then`
if Light2.Color == ColorGreen then
if Light3.Color == ColorGreen then
if Light4.Color == ColorGreen then
if Light5.Color == ColorGreen then
if Light6.Color == ColorGreen then
… your code

1 Like