Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

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

Asked by 9 years ago

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()
0
22:12:43.166 - lol1 is not a valid member of Model BenHall4433 0 — 9y

3 answers

Log in to vote
0
Answered by
Sublimus 992 Moderation Voter
9 years ago

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.

0
Script doesn't work. Do I have to put something into a model or something to make it work? BenHall4433 0 — 9y
Ad
Log in to vote
0
Answered by
Goulstem 8144 Badge of Merit Moderation Voter Administrator Community Moderator
9 years ago

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)
0
Script doesn't work. Do I have to put something into a model or something to make it work? BenHall4433 0 — 9y
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. Goulstem 8144 — 9y
0
Checked it, all right. But why wont the script repsond? BenHall4433 0 — 9y
0
Is FilteringEnabled on? Also make sure the script isn't disabled Goulstem 8144 — 9y
View all comments (5 more)
0
Is that in the settings? BenHall4433 0 — 9y
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? BenHall4433 0 — 9y
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. Goulstem 8144 — 9y
0
Nah it's fine now, just figured it out but it was hard! BenHall4433 0 — 9y
Log in to vote
0
Answered by 9 years ago

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

Answer this question