Okay I've been trying for ages and can figure this out. What i need to do is make it so if there's say 4 people on the server that 3 of them need to be on team survivor and 1 needs to be put on team zombie at the start of a round. so that on my 16 slot server when the round starts 4 random people are put on team zombie and the rest are put on team survivor. Get what I'm saying?
Here's one way to do it. (Didn't test it!)
[lua]
//Team 1 being zombie
//Team 2 being survivor
function SetTeams()
local ZCount = 0
while ZCount < 4 do
local ply = table.Random( player.GetAll() )
if ply:Team() != 1 then
ply:SetTeam(1)
ZCount = ZCount + 1
end
end
for _,v in pairs(player.GetAll()) do
if v:Team() != 1 then
v:SetTeam(2)
end
end
end
[/lua]
Thank you i will have to try this tomorrow when i have a lot of people on my server! :D i also wanted to add this.
less then or equal to 4 people = 1 zombie 3 survivors
less then or equal to 8 people = 2 zombie 6 survivors
less then or equal to 12 people = 3 zombie 9 survivors
less then or equal to 16 people = 4 zombie 12 survivors
Thank you and sorry i didn't mention that. If u want to save me time from trying to figure out how to get how many players are on the server i would much appreciate that.
im guessing something like
[code]
local Players = player.GetAll()
table.Count(Players)
[/code]
I believe this would work for that. (Also not tested)
[lua]
function SetTeams()
local ratio = 1/4 //Ratio is how many zombies per players (in this case 1 zombie per 4 players)
local ZCount = 0
while ZCount < math.floor(#player.GetAll()*ratio) do
local ply = table.Random( player.GetAll() )
if ply:Team() != 1 then
ply:SetTeam(1)
ZCount = ZCount + 1
end
end
for _,v in pairs(player.GetAll()) do
if v:Team() != 1 then
v:SetTeam(2)
end
end
end
[/lua]
However, if there's less than 4 people there won't be any zombies.
Well thank you for replying so fast i am going have so much fun implementing this tomorrow your defiantly going in the credits :D
Thanks! Also in case you wanted to know, using # before any table will return the number of items in it. So like #player.GetAll() will give you the number of players on the server.
Wow. Thank you i would have never found that out. :D trying to come up with a creative way to make at least 1 zombie spawn. :P Also is there an easy way to test this out with out having to beg 16 of my friends to join ?
[editline]16th July 2011[/editline]
[code]
function SetTeams()
local ratio = 1/4 //Ratio is how many zombies per players (in this case 1 zombie per 4 players)
local ZCount = 0
while ZCount < math.floor(#player.GetAll()*ratio) do
local ply = table.Random( player.GetAll() )
if ply:Team() != 1 then
ply:SetTeam(1)
ZCount = ZCount + 1
end
end
for _,v in pairs(player.GetAll()) do
if v:Team() != 1 and team.NumPlayers(1) >= 1 then
v:SetTeam(2)
else
v:SetTeam(1)
end
end
end
[/code]
Really Stupid but fixes no zombies :P
its 4 am need sleep will try this out tomorrow "later today" lol
Actually, the way I would've done it is probably more complicated, haha.
You can use this to test it w/o players (I think):
[lua]
local TestTbl = {}
for i = 1,16 do
TestTbl[i] = { Team = 0 }
end
function SetTeams()
local ratio = 1/4 //Ratio is how many zombies per players (in this case 1 zombie per 4 players)
local ZCount = 0
while ZCount < math.floor(#TestTbl*ratio) do
local ply = table.Random( TestTbl )
if ply.Team != 1 then
ply.Team = 1
ZCount = ZCount + 1
end
end
for _,v in pairs(TestTbl) do
if v.Team != 1 then
v.Team = 2
else
v.Team = 1
end
end
PrintTable( TestTbl )
end
[/lua]
It's a little different, but I hope it works.
Also, it's 4 AM here too, should g2 bed now.
Edit:
Actually the table.HasValue thing won't work. I took it out.
I'm a little confused. I'm not seeing where its getting the player from TestTbl
[QUOTE=Sparky-Z;31149961]Actually, the way I would've done it is probably more complicated, haha.
[B]You can use this to test it w/o players (I think):[/B]
[lua]
local TestTbl = {}
for i = 1,16 do
TestTbl[i] = { Team = 0 }
end
function SetTeams()
local ratio = 1/4 //Ratio is how many zombies per players (in this case 1 zombie per 4 players)
local ZCount = 0
while ZCount < math.floor(#TestTbl*ratio) do
local ply = table.Random( TestTbl )
if ply.Team != 1 then
ply.Team = 1
ZCount = ZCount + 1
end
end
for _,v in pairs(TestTbl) do
if v.Team != 1 and table.HasValue(TestTbl, {Team = 1}) then
v.Team = 2
else
v.Team = 1
end
end
PrintTable( TestTbl )
end
[/lua]
It's a little different, and i'm not sure about that table.HasValue thing either, but I hope it works.
Also, it's 4 AM here too, should g2 bed now.[/QUOTE]
Sorry, you need to Log In to post a reply to this thread.