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

Why doesn't this work?

This is a script for a terminal, and I'm wondering why this isn't working. Please help!

function onTouched(part)
    local character = part.Parent
    local player = game.Players:GetPlayerFromCharacter( character )
    if character and player then
        local team = player.TeamColor
        if team == BrickColor.new("Medium stone grey") then --Raider Group Color
	for progress = 5, 100, 5 do
			wait(60)
			local hint = Instance.new('Hint', workspace)
			hint.Text = progress .. "%"		
	game.Workspace.Colors.A.BrickColor = BrickColor.new("Medium stone grey") --Raider Team Color (Change All)
	game.Workspace.Colors.B.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.C.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.D.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.E.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.F.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.G.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.H.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.I.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.J.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.K.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.L.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.M.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.N.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.O.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.P.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.Q.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.R.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.S.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.T.BrickColor = BrickColor.new("Medium stone grey")	
	game.Workspace.Colors.U.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Colors.V.BrickColor = BrickColor.new("Medium stone grey")
	game.Workspace.Light.Part.BrickColor = BrickColor.New("Medium stone grey")
	end
        elseif team == BrickColor.new("Really red") then
	game.Workspace.Colors.A.BrickColor = BrickColor.new("Really red") --Home Team Group Color (Change All)
	game.Workspace.Colors.B.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.C.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.D.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.E.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.F.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.G.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.H.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.I.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.J.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.K.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.L.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.M.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.N.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.O.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.P.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.Q.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.R.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.S.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.T.BrickColor = BrickColor.new("Really red")	
	game.Workspace.Colors.U.BrickColor = BrickColor.new("Really red")
	game.Workspace.Colors.V.BrickColor = BrickColor.new("Really red")
	game.Workspace.Light.Part.BrickColor = BrickColor.New("Really red")
	game.Workspace.Message:Remove()
        end
    end
end

1 answer

First: tab your code correctly.

Second: Don't have 20 lines that do the same thing.

Use a loop over the children of the model

for _, part in pairs(workspace.Colors:GetChildren()) do
	part.BrickColor = BrickColor.new("Medium stone grey")
end
workspace.Light.Part.BrickColor = BrickColor.new("Medium stone grey")

Now you don't have to "change all"" (you should never have to do that in a good program).


You have the above snippet repeated twice; the only difference is that you are using the color of team. So why not just do the above regardless of the team to just match team?

function onTouched(part)
	local character = part.Parent
	local player = game.Players:GetPlayerFromCharacter( character )
	if character and player then
		local team = player.TeamColor
		if team == BrickColor.new("Medium stone grey") then --Raider Group Color
			for progress = 5, 100, 5 do
				wait(60)
				local hint = Instance.new('Hint', workspace)
				hint.Text = progress .. "%"
			end
		elseif team == BrickColor.new("Really red") then
			game.Workspace.Message:Remove()
		end
		-- These four lines replace forty in the original...
		for _, part in pairs(workspace.Colors:GetChildren()) do
			part.BrickColor = team
		end
		workspace.Light.Part.BrickColor = team
		--
	end
end

Remaining potential issues:

  • You tried to :Remove() workspace.Message, but it's possible that there isn't a such thing as workspace.Message. That would cause an error. You should check if workspace:FindFirstChild("Message") then first.

  • You didn't include anything that will ever run onTouched. Is there a connection line that you just didn't quote here? If not, there should be one.

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