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

Minigame Script error, "attempt to index a number value" when randomizing map choice?

I'm making a minigame script and it's pretty long... But when the script randomizes the map before loading it, an error shows up in the output: "attempt to index a number value". i'm sorry if the script is too long, i'm not sure if the rest of the script is irrelevant or not.

local maps = game.ServerStorage:WaitForChild("Maps"):GetChildren()
local lobby = game.Workspace:WaitForChild("Lobby")
local message = game.Workspace:WaitForChild("Message")
local numplayers = game.Workspace:WaitForChild("NumPlayers")
local playersNeeded = 1 --Temporarily for testing
local chosenmap = game.Workspace:WaitForChild("ChooseMap")
local selected = game.Workspace:WaitForChild("SelectedMap")


function deleteLastMap()
	selected:ClearAllChildren()
end

function checkPlayers()
	if numplayers.Value >= playersNeeded then
		return true
	else
		return false
	end
end

function getAlivePlayers()
	local n = 0
	local players = game.Players:GetPlayers()
	for i=1, #players do
	if players[i].Settings.afk == false then
		if players[i].Character ~= nil then
			if players[i].Character.Humanoid.Health ~= 0 then
				if players[i].Settings.Playing.Value ~= false then
					n = n+1
				end
			end
		end
	end
	return n
	end
end

function getWinners()
	local n = 0
	local players = game.Players:GetPlayers()
	for i=1, #players do
	if players[i].Settings.afk == false then
		if players[i].Character ~= nil then
			if players[i].Character.Humanoid.Health ~= 0 then
				if players[i].Settings.Winner.Value ~= false then
					n = n+1
				end
			end
		end
	end
	return n
	end
end

function intermission()
	for intermissiontime = 5, 1 do -- in seconds
		wait(1)
		message.Value = "||"..intermissiontime.."||"
	end
end

function choosemap() 
	message.Value = "Choosing minigame..."
	chosenmap.Value = math.random(1, #maps).Name -- where the error is 
end

function displayChosen()
	message.Value = "Minigame chosen:"..chosenmap.Value.."!"
end

function loadMinigame()
	message.Value = "Loading map..."
	local clone = game:GetService("ServerStorage").Maps:FindFirstChild(chosenmap.Value)
	clone:Clone().Parent = workspace
end

function startGame()
end

while true do
	wait()
if checkPlayers() then
		intermission()
		wait (1)
		choosemap()
		wait(3)
		displayChosen()
		wait(2)
		loadMinigame()
		wait(2)
		
	end
end

1 answer

✓ Accepted answer

The "attempt to index X" error message means you have tried to get something from X using the index operator, a[b] or a.b.

In your particular case, you attempted to get something out of a number value. This obviously makes no sense to Lua, and thus it errors.

Here's the problem. math.random simply generates a random number. It can't pick a random element from your map list for you. However, what you can do is use the number returned as a position in your table:

local r = math.random(#maps)
local map = maps[r]

print(map.Name)

2 comments

0

Thanks! That helped a lot!

0

No problem. :)

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