Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How would I turn this into a function?

Asked by
Irvene 5
9 years ago

This teaming script, is hard to read, could someone explain to me how to turn it into a function, so next time I'll understand, I'm confused of how to make it into a function.

while true do
wait(1)
for i,v in pairs(Game.Players:GetPlayers()) do
team = {"Bright yellow", "Dark stone grey"}
if i ~= #game.Players:GetPlayers() or #game.Players:GetPlayers()%#team ~= 0 then
v.TeamColor = BrickColor.new(team[(i%#team)+1])
else
v.TeamColor = BrickColor.new(team[math.random(#team)])
end
end
wait(3)
for i,v in pairs(Game.Players:GetPlayers()) do
v.TeamColor = BrickColor.new("White")

1 answer

Log in to vote
0
Answered by
BlueTaslem 18071 Moderation Voter Administrator Community Moderator Super Administrator
9 years ago

The function you want would probably be to auto assign players to a list of teams.

Its declaration would look like this:

function autoAssignTeams( teams )

Where teams will be a list of Brick Color names.

We can see pretty clearly what to get as the body of the function from what you posted:

for i,v in pairs(Game.Players:GetPlayers()) do
    if i ~= #game.Players:GetPlayers() and #game.Players:GetPlayers() % #teams ~= 0 then
        v.TeamColor = BrickColor.new( teams[(i%#teams)+1] )
    else
        v.TeamColor = BrickColor.new( teams[math.random(#teams)] )
    end
end

So we just wrap this into our functoin:

function autoAssignTeams( teams )
    for i,v in pairs(Game.Players:GetPlayers()) do
        if i ~= #game.Players:GetPlayers() and #game.Players:GetPlayers() % #teams ~= 0 then
            v.TeamColor = BrickColor.new( teams[(i%#teams)+1] )
        else
            v.TeamColor = BrickColor.new( teams[math.random(#teams)] )
        end
    end
end

This is how you would use this function to accomplish the same thing as the snippet you posted in your question:

while true do
    wait(1)
    autoAssignTeams( {"Bright yellow", "Dark stone grey"} )
    wait(3)
    autoAssignTeams( {"White"} )
end

A small note: the implementation is wrong if you want teams to be as even as possible with more than two teams. The i ~= #game.Players:GetPlayers() only applies (in general) as a sufficient check for 2 input teams -- more may be balanced wrong. The solution to this is not very easy, though.

There was also a mistake in the above; it should be using and instead of or

Ad

Answer this question