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()
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.
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)
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()