Hey! I need some help explaining i, v in pairs. I am making a script where I have 3 spawns where for each one, 1 out of 3 players from a certain team spawns.
My code:
for i, Red in pairs(game.Teams.Red:GetPlayers()) do
But I want it to make a list out of the 3 players, where for I select 1 player, put them in 1 of the spawns and then it selects the randomly chosen 2nd player and places it there, etc.
you could create a table of the spawns: local spawns = {workspace.A, workspace.B, workspace.C}
then use table notation to put the players at each spawn:
for k,v in game.Teams.Red:GetPlayers() do
v.Character:PivotTo(spawns[k].CFrame)
end
*if your number of players is not reliably 3 you may want to use a counter instead, s.t. players 1,2,3 go to spawns 1,2,3, but upon encountering player 4, counter resets to 1, putting player 4 at spawn 1.
local count = 1
local spawns = {workspace.A, workspace.B, workspace.C}
local numSpawns = #spawns --==3, so count will go 1,2,3,1,2,3...
for _,v in game:GetService("Teams"):WaitForChild("Red"):GetPlayers() do
if count > numSpawns then count = 1 end -- to catch if there are more players than spawns
v.Character:PivotTo(spawns[count].CFrame)
count += 1 -- increment the count for the next iteration
end
Yes, that’s correct! In this loop, v is an element of game:GetService("Teams"):WaitForChild("Red"):GetPlayers() , which is a list of all players on the Red team. The loop iterates through each player in the list, and for each player, it pivots their character to the CFrame of the corresponding spawn location.
The count variable is used to index into the spawns table, which contains the locations where the characters should be sent. It starts at 1, and is incremented by 1 for each iteration of the loop. If count exceeds the number of elements in spawns , then it is reset to 1 using the line if count > numSpawns then count = 1 end . This causes the loop to “wrap around” and reuse the spawn locations when there are more players than spawn locations.
So if count is defined as 2 at the start of the loop, the first player’s character will be pivoted to the CFrame of spawns[1] , and the second player’s character will be pivoted to the CFrame of spawns[2]
The pairs function returns two values, the key and value of a table. (Learn more here: lua-users wiki: Lua Types Tutorial)
It is more commonly used like this in Roblox Studio: for i, v in pairs(game.Teams.Red:GetPlayers()) do
print(i … " " … v)
end
You could also use pairs() like this: for i, v in pairs(game.Teams.Red:GetPlayers()) do
print(v)
end
The result of the two will be the same, however i and v can be used to index and access the game.Teams.Red