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

What is wrong with this script?

I got my answer from putting music in each decal slides or the ones that needs it. But the one problem is that it has an error to the script. This is the script and error:

local bin = script.Parent
local decal = bin.Decal
local sound = Instance.new("Sound", bin) -- Creates a sound object to play assets

local MainSlides = {
    {'http://www.roblox.com/asset/?id=213163470', 189421358, 15},
    {'http://www.roblox.com/asset/?id=213486920', nil, 3},
    {'http://www.roblox.com/asset/?id=157656296', nil, 3},
    {'http://www.roblox.com/asset/?id=213486967', nil, 3},
    {'http://www.roblox.com/asset/?id=151111211', 160442087, 3},
    {'http://www.roblox.com/asset/?id=213487020', nil, 3}
    -- You can add sounds where you want, just make sure they are in the correct index of the table.
    -- If you do not want a sound on the slide, put nil where the asset ID would go.
}

function getNumTabs(tab)
    local num = 0
    for i,v in pairs(tab) do num = num + 1 end
    return num
end

function runTable(tab)
    for i = 1,getNumTabs(tab) do
        local currentTab = tab[tostring(i)]

        if currentTab[2] ~= nil then  -- If there is an asset ID given then
            sound.SoundId = currentTab[2] -- Load asset ID into sound
            sound:Play() -- Play the sound
        end

        decal.Texture = currentTab[1]
        wait(currentTab[3])
        sound:Pause() -- Pauses the sound
    end
end

local c = game.Workspace.Countdown.SurfaceGui.TextLabel

function countDown()
    for timeLeft = 20, 0, -1 do
        c.Text = timeLeft
        wait(1)
    end
    c.Text = "Movie has started!"
end

while true do
    countDown()
    runTable(MainSlides)
end

Error:

00:09:23.912 - Workspace.Part.SlideScript:358: attempt to index local 'currentTab' (a nil value)

Thank you!

1 answer

MainSlides is a list. That means the indices are 1, 2, 3, ....

The indices are not the text "1", "2", "3", ....


In other words, there is no reason to use tostring on line 24 -- you want the number i, so use just i.


Similarly, since MainSlides is a list, getNumTabs(MainSlides) will just be the length of MainSlides, or #MainSlides.

for i = 1, #tab do
	local currentTab = tab[i]

Usually, it's better to use ipairs than direction iteration like this:

for _, currentTab in ipairs(tab) do
	if currentTab[2] ~= then
		....

1 comment

0

Thanks bro.

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