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

Bowling Lane Bumpers (Scripted) - Can you help and figure this out? (SOLVED)

Hi, I am a owner of Liberty Lanes. I just need a bit of help with the lane bumpers which I have just installed. The problem with this script is that it is only reading 1 part instead of all of them.

This model has 92 parts, but the problem is that it is just only highlighting the 92nd part instead of the rest.

Problem (which it is in part of the script): for i = 1, 92 do

Old Script:

local isOn = true

function on()
	isOn = true
	script.Parent.PosA1.Transparency = 0
	script.Parent.PosA1.CanCollide = true
	script.Parent.PosA2.Transparency = 1
	script.Parent.PosA2.CanCollide = false
        script.Parent.lol1.Transparency = 1 
        script.Parent.lol1.CanCollide = false
        script.Parent.lol2.Transparency = 1 
        script.Parent.lol2.CanCollide = false
        script.Parent.lol3.Transparency = 1 
        script.Parent.lol3.CanCollide = false
        script.Parent.lol4.Transparency = 1 
        script.Parent.lol4.CanCollide = false
        script.Parent.lol5.Transparency = 1 
        script.Parent.lol5.CanCollide = false
        script.Parent.lol6.Transparency = 1 
        script.Parent.lol6.CanCollide = false
        script.Parent.lol7.Transparency = 1 
        script.Parent.lol7.CanCollide = false
        script.Parent.lol8.Transparency = 1 
        script.Parent.lol8.CanCollide = false
        script.Parent.lol9.Transparency = 1 
        script.Parent.lol9.CanCollide = false
        script.Parent.lol10.Transparency = 1 
        script.Parent.lol10.CanCollide = false
        script.Parent.lol11.Transparency = 1 
        script.Parent.lol11.CanCollide = false
        script.Parent.lol12.Transparency = 1 
        script.Parent.lol12.CanCollide = false
        script.Parent.lol13.Transparency = 1
        script.Parent.lol13.CanCollide = false
        script.Parent.lol14.Transparency = 1 
        script.Parent.lol14.CanCollide = false
        script.Parent.lol15.Transparency = 1 
        script.Parent.lol15.CanCollide = false
        script.Parent.lol16.Transparency = 1 
        script.Parent.lol16.CanCollide = false
        script.Parent.lol17.Transparency = 1 
        script.Parent.lol17.CanCollide = false
        script.Parent.lol18.Transparency = 1 
        script.Parent.lol18.CanCollide = false
        script.Parent.lol19.Transparency = 1 
        script.Parent.lol19.CanCollide = false
        script.Parent.lol20.Transparency = 1 
        script.Parent.lol20.CanCollide = false
        script.Parent.lol21.Transparency = 1 
        script.Parent.lol21.CanCollide = false
        script.Parent.lol22.Transparency = 1 
        script.Parent.lol22.CanCollide = false
        script.Parent.lol23.Transparency = 1 
        script.Parent.lol23.CanCollide = false
        script.Parent.lol24.Transparency = 1 
        script.Parent.lol24.CanCollide = false
        script.Parent.lol25.Transparency = 1
        script.Parent.lol25.CanCollide = false
        script.Parent.lol26.Transparency = 1 
        script.Parent.lol26.CanCollide = false
        script.Parent.lol27.Transparency = 1 
        script.Parent.lol27.CanCollide = false
        script.Parent.lol28.Transparency = 1 
        script.Parent.lol28.CanCollide = false
        script.Parent.lol29.Transparency = 1 
        script.Parent.lol29.CanCollide = false
        script.Parent.lol30.Transparency = 1
        script.Parent.lol30.CanCollide = false
-- Continues to "lol92"...

end

function off()
	isOn = false
		script.Parent.PosA1.Transparency = 1
	script.Parent.PosA1.CanCollide = false
	script.Parent.PosA2.Transparency = 0
	script.Parent.PosA2.CanCollide = true
        script.Parent.lol1.Transparency = 0 
        script.Parent.lol1.CanCollide = true
        script.Parent.lol2.Transparency = 0 
        script.Parent.lol2.CanCollide = true
        script.Parent.lol3.Transparency = 0 
        script.Parent.lol3.CanCollide = true
        script.Parent.lol4.Transparency = 0 
        script.Parent.lol4.CanCollide = true
        script.Parent.lol5.Transparency = 0 
        script.Parent.lol5.CanCollide = true
        script.Parent.lol6.Transparency = 0 
        script.Parent.lol6.CanCollide = true
        script.Parent.lol7.Transparency = 0 
        script.Parent.lol7.CanCollide = true
        script.Parent.lol8.Transparency = 0 
        script.Parent.lol8.CanCollide = true
        script.Parent.lol9.Transparency = 0 
        script.Parent.lol9.CanCollide = true
        script.Parent.lol10.Transparency = 0 
        script.Parent.lol10.CanCollide = true
        script.Parent.lol11.Transparency = 0 
        script.Parent.lol11.CanCollide = true
        script.Parent.lol12.Transparency = 0 
        script.Parent.lol12.CanCollide = true
        script.Parent.lol13.Transparency = 0
        script.Parent.lol13.CanCollide = true
        script.Parent.lol14.Transparency = 0 
        script.Parent.lol14.CanCollide = true
        script.Parent.lol15.Transparency = 0 
        script.Parent.lol15.CanCollide = true
        script.Parent.lol16.Transparency = 0 
        script.Parent.lol16.CanCollide = true
        script.Parent.lol17.Transparency = 0 
        script.Parent.lol17.CanCollide = true
        script.Parent.lol18.Transparency = 0 
        script.Parent.lol18.CanCollide = true
        script.Parent.lol19.Transparency = 0 
        script.Parent.lol19.CanCollide = true
        script.Parent.lol20.Transparency = 0 
        script.Parent.lol20.CanCollide = true
        script.Parent.lol21.Transparency = 0 
        script.Parent.lol21.CanCollide = true
        script.Parent.lol22.Transparency = 0 
        script.Parent.lol22.CanCollide = true
        script.Parent.lol23.Transparency = 0 
        script.Parent.lol23.CanCollide = true
        script.Parent.lol24.Transparency = 0 
        script.Parent.lol24.CanCollide = true
        script.Parent.lol25.Transparency = 0
        script.Parent.lol25.CanCollide = true
        script.Parent.lol26.Transparency = 0 
        script.Parent.lol26.CanCollide = true
        script.Parent.lol27.Transparency = 0 
        script.Parent.lol27.CanCollide = true
        script.Parent.lol28.Transparency = 0 
        script.Parent.lol28.CanCollide = true
        script.Parent.lol29.Transparency = 0 
        script.Parent.lol29.CanCollide = true
        script.Parent.lol30.Transparency = 0
        script.Parent.lol30.CanCollide = true
-- Continues to "lol92"...

end

function onClicked()
	
	if isOn == true then off() else on() end

end

script.Parent.PosA1.ClickDetector.MouseClick:connect(onClicked)
script.Parent.PosA2.ClickDetector.MouseClick:connect(onClicked)

on()

New and the latest script (needs correcting):

local isOn = true
for i = 1,  92 do
function on()
	isOn = true
	script.Parent:FindFirstChild("lol"..i).Transparency = 1
	script.Parent:FindFirstChild("lol"..i).CanCollide = false
end

function off()
	isOn = false
	script.Parent:FindFirstChild("lol"..i).Transparency = 0
	script.Parent:FindFirstChild("lol"..i).CanCollide = true
end

function onClicked()
	
	if isOn == true then off() else on() end

end
end

script.Parent.PosA1.ClickDetector.MouseClick:connect(onClicked)
script.Parent.PosA2.ClickDetector.MouseClick:connect(onClicked)

on()

1 comment

0

22:12:43.166 - lol1 is not a valid member of Model

3 answers

What's going on here is that the for loop is running 92 times but the functions are running once and since the for loop has completed, the i value is 92.

To fix this, stick a for loop within each function.

local isOn = true
function on()
	isOn = true
	for i = 1,92 do
		script.Parent:FindFirstChild("lol"..i).Transparency = 1
		script.Parent:FindFirstChild("lol"..i).CanCollide = false
	end
end

function off()
	isOn = false
	for i = 1,92 do
		script.Parent:FindFirstChild("lol"..i).Transparency = 0
		script.Parent:FindFirstChild("lol"..i).CanCollide = true
	end
end

function onClicked()
	if isOn == true then off() else on() end
end

script.Parent.PosA1.ClickDetector.MouseClick:connect(onClicked)
script.Parent.PosA2.ClickDetector.MouseClick:connect(onClicked)

on()

That should fix it, let me know if it errors.

1 comment

0

Script doesn't work. Do I have to put something into a model or something to make it work?

Your problem is that you're expecting the for loop to iterate inside the on and off functions. For this to happen, you have to define the for loop inside the scope of the functions.


Essentially what's happening in your code is that as the loop runs, it redefines your on and off functions, so since on the last iteration of the loop(the last time your functions would be defined) the value of 'i' is 92, then your functions are changing script.Parent:FindFirstChild("lol"..i)'s properties.. which is lol92.


So to fix? Put the numerical for loops inside of your functions.

But why stop there? Lets make your code a bit more efficient..

Combine both the off and on functions and add a parameter which will be the bool of whether to turn the bowling lane bumpers on or off - then edit all the parts according to this bool.


local on = true

function toggleBowlingLanes(bool)
	local part = script.Parent:FindFirstChild('lol'..i)
	for i = 1,92 do
		if bool then
			part.Transparency = 0
		else
			part.Transparency = 1
		end
		part.CanCollide = bool
	end
end

function onClicked()
	on = not on
	toggleBowlingLanes(on)
end

toggleBowlingLanes(true)

script.Parent.PosA1.ClickDetector.MouseClick:connect(onClicked)
script.Parent.PosA2.ClickDetector.MouseClick:connect(onClicked)

9 comments

0

Script doesn't work. Do I have to put something into a model or something to make it work?

0

Into wherever it was before. The code is fine, just the connection statements(lines 22 + 23) are still yours, check your parenting and make sure it's indexing the correct places.

0

Checked it, all right. But why wont the script repsond?

0

Is FilteringEnabled on? Also make sure the script isn't disabled

0

Is that in the settings?

0

The script doesn't work when if the FilteringEnabled is turned on, also the script isn't disabled. So, it might be your script. On studio, I can see the bumpers which they are all visible - but it dissapears in-game, you know what I mean?

0

My code is fine, it's just that it probably doesn't match your setup. Do you have skype? I'll try to help from there. And I was asking about the FilteringEnabled because this wouldn't work if it was on.

0

Nah it's fine now, just figured it out but it was hard!

I have finally sorted the script out, but the solution was this script.

SOLUTION

local isOn = true

function on()
	isOn = true
        for _,v in pairs(script.Parent:GetChildren()) do
                if string.sub(v.Name,1,3) == "lol" or string.sub(v.Name,1,4) == "" then
                        v.Transparency = 1
                        v.CanCollide = false
                end
        end
end

function off()
        isOn = false
        for _,v in pairs(script.Parent:GetChildren()) do
                if string.sub(v.Name,1,3) == "lol" or string.sub(v.Name,1,4) == "" then
                        v.Transparency = 0
                        v.CanCollide = true
                end
        end
end

function onClicked()
	
	if isOn == true then off() else on() end

end

script.Parent.PosA1.ClickDetector.MouseClick:connect(onClicked)
script.Parent.PosA2.ClickDetector.MouseClick:connect(onClicked)

on()

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