The script is long, sorry if you have to read all of it. I just can't find what's wrong with the script, please help.
Maps = {"Wobbly Bridge", "Tower of Magic"} randomMap = Maps[math.random(#Maps)] Players = game.Players:GetPlayers() NumP = game.Players.NumPlayers() L = game.Lighting:GetChildren() TimeOfRound = 160 MLength = 1 IntermissionTime = 30 MessageTBS = "Seconds Left: " function mapchose() local m = Instance.new("Message", workspace) m.Text = "You will be playing on the "..randomMap.." map." wait(MLength) m:Destroy() L:findFirstChild(randomMap):Clone().Parent = workspace end function int() local m = Instance.new("Message", Workspace) a = IntermissionTime for i = 1,IntermissionTime do wait(1) m.Text = "Intermission, "..MessageTBS..tostring(a)-1 end m:Destroy() end BrightBlue={} BrightRed={} function assign() local Quarter = math.floor(Game.Players.NumPlayers/2) local Players = Game.Players:GetPlayers() for i = 1, #Players do local random = table.remove(Players, math.random(#Players)) if i <= Quarter then random.TeamColor = BrickColor.new("Bright red") table.insert(BrightRed,random) else random.TeamColor = BrickColor.new("Bright blue") table.insert(BrightBlue,random) end end end function round() for i = 1,TimeOfRound do wait(1) for i,v in pairs(Players) do if v.WipeOuts.Value >10 then for i, z in ipairs(BrightBlue) do if (not z) or v == z then table.remove(BrightBlue,i) end end for i, z in ipairs(BrightRed) do if (not z) or v == z then table.remove(BrightRed,i) end end end end end end function winner() if #BrightBlue == #BrightRed then local m = Instance.new("Message", workspace) m.Text = "The teams have tied!" wait(MLength) m:Destroy() elseif #BrightBlue > #BrightRed then local m = Instance.new("Message", workspace) m.Text = "The Blue Team has won!" wait(MLength) m:Destroy() elseif #BrightRed > #BrightBlue then local m = Instance.new("Message", workspace) m.Text = "The Red Team has won!" wait(MLenght) m:Destroy() end end while true do if NumP >= 2 then int() mapchose() assign() round() winner() else local m = Instance.new("Message", workspace) m.Text = "This game requires 2+ players!" wait(MLength) m:Destroy() end end
I fixed up most of your errors and added comments.
Maps = {"Wobbly Bridge", "Tower of Magic"} randomMap = Maps[math.random(#Maps)] Players = game.Players:GetPlayers() NumP = game.Players.NumPlayers -- It's not a Method, so you don't need '()' L = game.Lighting:GetChildren() TimeOfRound = 160 MLength = 1 IntermissionTime = 30 MessageTBS = "Seconds Left: " function mapchose() local m = Instance.new("Message", workspace) m.Text = "You will be playing on the "..randomMap.." map." wait(MLength) m:Destroy() L:findFirstChild(randomMap):Clone().Parent = workspace end function int() local m = Instance.new("Message", Workspace) a = IntermissionTime for i = 1,IntermissionTime do wait(1) m.Text = "Intermission, "..MessageTBS..tostring(a)-1 end m:Destroy() end BrightBlue={} BrightRed={} function assign() local Quarter = math.floor(NumP/2) local Players = Game.Players:GetPlayers() for i = 1, #Players do local random = table.remove(Players, math.random(#Players)) if i <= Quarter then random.TeamColor = BrickColor.new("Bright red") table.insert(BrightRed,random) else random.TeamColor = BrickColor.new("Bright blue") table.insert(BrightBlue,random) end end end function round() for i = 1,TimeOfRound do wait(1) for i,v in pairs(Players) do if v.leaderstats.WipeOuts.Value >10 then -- Needed to add leaderstats for i, z in ipairs(BrightBlue) do if (not z) or v == z then table.remove(BrightBlue,i) end end for i, z in ipairs(BrightRed) do if (not z) or v == z then table.remove(BrightRed,i) end end end end end end function winner() if #BrightBlue == #BrightRed then -- I feel there's something rong with this, but I'm not an expert on tables. Consider doing this a different way. local m = Instance.new("Message", workspace) m.Text = "The teams have tied!" wait(MLength) m:Destroy() elseif #BrightBlue > #BrightRed then local m = Instance.new("Message", workspace) m.Text = "The Blue Team has won!" wait(MLength) m:Destroy() elseif #BrightRed > #BrightBlue then local m = Instance.new("Message", workspace) m.Text = "The Red Team has won!" wait(MLength) -- You mispelled 'Length' m:Destroy() end end while true do if NumP >= 2 then int() --I recomened adding some wait times in between the calling of the functions, because if you call it all at once, you'll get a bunch of messages which would generate some lag. mapchose() assign() round() winner() else local m = Instance.new("Message", workspace) m.Text = "This game requires 2+ players!" wait(MLength) m:Destroy() end end
I think your problem is on line 5 which is trying to get the number of players :
NumP = game.Players.NumPlayers()
The problem is that game.Players.NumPlayers() isn't a function. Its a property that stores a number.
To fix this just change line 5 to :
NumP = game.Players.NumPlayers
The second problem is that with your while true do loop you don't update the NumP value or check it again. So if a player leaves or joins the game doesn't know that.
I recommend to just add the "NumP =" code I gave you in the loop but not in the if statement.
Correct code :
while true do NumP = game.Players.NumPlayers if NumP >= 2 then int() mapchose() assign() round() winner() else local m = Instance.new("Message", workspace) m.Text = "This game requires 2+ players!" wait(MLength) m:Destroy() end end
I believe I have missed some things and I would recommend checking out the other answers for things I might have missed.
If you have any questions, concerns or just need some help with this PM me on ROBLOX!
I noted on line 6 you have
L = game.Lighting:GetChildren()
and then on line 17 you try to call FindFirstChild on the children of Lighting, which you can't do.
L:findFirstChild(randomMap):Clone().Parent = workspace
What I would do is set L
to just game.Lighting
rather than game.Lighting:GetChildren()
.
L = game.Lighting