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

Diaster script not running?

I am making a new surivive the diasters and the models in lighting will not load.

disasters = {"Minotaurs!!!", "Zombies", "", "", "", ""} --Disaster names are case-sensitive and all disaster models must be in the lighting

getpoints = 100 --Points you will get after Disaster
countdownTime = 1 -- The ammount of time to wait between each disaster.
disasterTime = 100 -- The ammount of time that the disaster will be in the game before it is removed.

countdownMessage = "The next Disaster will occur in %s seconds." -- The message displayed between disasters. %s will be replaced with the number of seconds left.
WdisasterMessage = "Disaster Choosen: %s" -- The message displayed when a disaster occurs. %s will be replaced with the disaster name. Set to nil if you do not want a message
disasterTimeMessage = "The Disasters will stop in %s"

---------------------------------Don't do anything there!Only if u know how!----------------------------------------------------------------------------------------
items = {}
leaderboard = game.Workspace:findFirstChild("BTS Leaderboard") -- Used to work with my BTS leaderboard
local w = game.Workspace:getChildren()
for i=1,#w do
	if w[i].Name == "leaderboard" and w[i]:findFirstChild("running") ~= nil and w[i]:findFirstChild("points") ~= ni then
		leaderboard = w[i]
	end
end
for i=1,#disasters do
	local item = game.Lighting:findFirstChild(disasters[i])
	if item ~= nil then
		item.Parent = nil
		table.insert(items, item)
	else
		print("Error! ", disasters[i], " was not found!")
	end
end

function chooseDisaster()
	return items[math.random(#items)]
end

function sethint(text)
	local hint = game.Workspace:findFirstChild("hint")
	if (hint ~= nil) then
		hint.Text = text
	else
		print("Hint does not exist, creating...")
		h = Instance.new("Hint")
		h.Name = "hint"
		h.Text = text
		h.Parent = game.Workspace
	end
	--print("Hint set to: ", text)
end

function removeHint()
	hint = game.Workspace:findFirstChild("hint")
	if (hint ~= nil) then hint:remove() end
end

function countdown(time)
	sethint(string.format(countdownMessage, tostring(time)))
	while (time > 0) do
		wait(1)
		time = time - 1
		sethint(string.format(countdownMessage, tostring(time)))
	end
	removeHint()
	return true
end

function disaster(time)
	sethint(string.format(disasterTimeMessage, tostring(time)))
	while (time > 0) do
		wait(1)
		time = time - 1
		sethint(string.format(disasterTimeMessage, tostring(time)))
	end
	removeHint()
	return true
end

while true do
	countdown(countdownTime)

	if leaderboard ~= nil and leaderboard:findFirstChild("running") and leaderboard:findFirstChild("points") then -- For use with my BTS leaderboard.
		leaderboard.points.Value = getpoints
		leaderboard.running.Value = true
	end

	local m = chooseDisaster():clone()

	if WdisasterMessage ~= nil then
		local msg = Instance.new("Message")
		msg.Name = "WDisasterMsg"
		msg.Text = string.format(WdisasterMessage, m.Name)
		msg.Parent = game.Workspace
		wait(3)
		msg.Parent = nil
	end

	m.Parent = game.Workspace
	m:makeJoints()
	disaster(disasterTime)
	m:remove()

	if leaderboard ~= nil then -- For use with the bts leaderboard.
		leaderboard.running.Value = false
	end
end


When it starts, it says in a bold red text: 20:39:26.972 - Workspace.ZombieRoundScript:31: bad argument #1 to 'random' (interval is empty) Please help me! Thanks!

1 comment

0

Side note, you might want to use replicated storage instead of lighting to store all the models. That is the purpose of it.

1 answer

✓ Accepted answer

I'm pretty sure it might be because of the spare "" in the disasters. If this is the case this is the script (I haven't tried it yet so it might not work):

disasters = {"Minotaurs!!!", "Zombies"} --Disaster names are case-sensitive and all disaster models must be in the lighting. To add disasters, add ,"..." (example , "Aliens")

getpoints = 100 --Points you will get after Disaster
countdownTime = 1 -- The ammount of time to wait between each disaster.
disasterTime = 100 -- The ammount of time that the disaster will be in the game before it is removed.

countdownMessage = "The next Disaster will occur in %s seconds." -- The message displayed between disasters. %s will be replaced with the number of seconds left.
WdisasterMessage = "Disaster Choosen: %s" -- The message displayed when a disaster occurs. %s will be replaced with the disaster name. Set to nil if you do not want a message
disasterTimeMessage = "The Disasters will stop in %s"

---------------------------------Don't do anything there!Only if u know how!----------------------------------------------------------------------------------------
items = {}
leaderboard = game.Workspace:findFirstChild("BTS Leaderboard") -- Used to work with my BTS leaderboard
local w = game.Workspace:getChildren()
for i=1,#w do
    if w[i].Name == "leaderboard" and w[i]:findFirstChild("running") ~= nil and w[i]:findFirstChild("points") ~= ni then
        leaderboard = w[i]
    end
end
for i=1,#disasters do
    local item = game.Lighting:findFirstChild(disasters[i])
    if item ~= nil then
        item.Parent = nil
        table.insert(items, item)
    else
        print("Error! ", disasters[i], " was not found!")
    end
end

function chooseDisaster()
    return items[math.random(#items)]
end

function sethint(text)
    local hint = game.Workspace:findFirstChild("hint")
    if (hint ~= nil) then
        hint.Text = text
    else
        print("Hint does not exist, creating...")
        h = Instance.new("Hint")
        h.Name = "hint"
        h.Text = text
        h.Parent = game.Workspace
    end
    --print("Hint set to: ", text)
end

function removeHint()
    hint = game.Workspace:findFirstChild("hint")
    if (hint ~= nil) then hint:remove() end
end

function countdown(time)
    sethint(string.format(countdownMessage, tostring(time)))
    while (time > 0) do
        wait(1)
        time = time - 1
        sethint(string.format(countdownMessage, tostring(time)))
    end
    removeHint()
    return true
end

function disaster(time)
    sethint(string.format(disasterTimeMessage, tostring(time)))
    while (time > 0) do
        wait(1)
        time = time - 1
        sethint(string.format(disasterTimeMessage, tostring(time)))
    end
    removeHint()
    return true
end

while true do
    countdown(countdownTime)

    if leaderboard ~= nil and leaderboard:findFirstChild("running") and leaderboard:findFirstChild("points") then -- For use with my BTS leaderboard.
        leaderboard.points.Value = getpoints
        leaderboard.running.Value = true
    end

    local m = chooseDisaster():clone()

    if WdisasterMessage ~= nil then
        local msg = Instance.new("Message")
        msg.Name = "WDisasterMsg"
        msg.Text = string.format(WdisasterMessage, m.Name)
        msg.Parent = game.Workspace
        wait(3)
        msg.Parent = nil
    end

    m.Parent = game.Workspace
    m:makeJoints()
    disaster(disasterTime)
    m:remove()

    if leaderboard ~= nil then -- For use with the bts leaderboard.
        leaderboard.running.Value = false
    end
end

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