Para obter a lista de jogadores online, vc só precisa obter todos os elementos do tipo "player". Para isso você usa getElementsByType ("player")
Se você quiser acessar cada jogador obtido por meio de um loop, por exemplo, pra dar um jetpack á cada um deles. Dai você faz assim:
function jetPraGeral (thePlayer, cmd)
local todoMundo = getElementsByType ("player") -- todoMundo é uma table com todos os jogadores conectados ao server.
for i, jogador in ipairs (todoMundo) do -- Para cada elemento dessa table, faça o seguinte:
setPedWearingJetpack (jogador, true) -- Dá um jetpack pra esse elemento.
end
end
addCommandHandler ("todosJet", jetPraGeral)
A table acima seria tipo assim:
local todoMundo = {player1, player2, player3} -- player1 não é o nick do jogador, e sim um elemento do tipo "player".
-- Supondo que só tenham 3 jogadores no server.
Ali naquele loop do FOR:
i se refere ao índice de cada elemento dessa table. No entanto ela não está indexada, então o MTA considera índices inteiros em ordem. Se você quer obter o player2, você pode acessá-lo com todoMundo[2], pois o 2 é o índice que o MTA deu pra ele.
jogador se refere a cada elemento em si.
ipairs indica que o loop percorre os elementos com índices inteiros numa tabela, em ordem.
Obs: Se você quer que o i comece a partir do 0 em vez de 1, use pairs em vez de ipairs. Por exemplo em casos onde você quer contar quantos players estão dentro de um veículo. Porém você deve considerar o assento 0, que é do motorista.
function meusOcupantes (thePlayer, cmd)
local myVehicle = getPedOccupiedVehicle (thePlayer) -- myVehicle recebe o veículo que o jogador que executou o comando está.
if not myVehicle then return end -- Se o jogador que executou o comando não está em um veículo, nada acontece.
local counter = 0 -- Contador de ocupantes começa em 0.
local ocupantes = getVehicleOccupants(myVehicle) -- ocupantes recebe uma table com todos os jogadores que estão dentro do veículo. Indexada com os assentos ocupados.
for seat, player in pairs(ocupantes) do
counter = counter + 1
outputChatBox ("Assento "..seat..": "..getPlayerName(player), thePlayer, 255, 255, 255, true)
end
outputChatBox ("Ocupantes: "..counter, thePlayer)
end
A table acima é tipo assim:
local ocupantes = {
[0] = motorista;
[1] = player2;
[3] = player3
}
-- Supondo que não tenha jogador no assento 2.
Note que ela está indexada com o assento em que cada jogador está. No entanto se usar ipairs, o motorista seria ignorado, pois o loop começaria a partir do 1, ignorando o índice 0. Então o loop deve ser feito com pairs, que considera todos os elementos independente de seu índice. Porém o loop pairs percorre a table de maneira aleatória, e não em ordem como o ipairs. Outra coisa a ser levada em consideração entre os dois tipos de loop, é que se você estiver usando uma table com índices não-inteiros, o ipairs não pegará nenhum dos elementos, pois ela só funciona com índices inteiros ou com tabelas que não estão indexadas.
Faça o seguinte teste entre eles: client-side (recomendável)
tabelaNaoIndexada = { -- O próprio MTA irá indexar isso automaticamente em ordem inteira.
" ",
"Um",
2,
"ABC",
0.15
}
tabelaIndexadaInt = { -- Funciona com ipairs, mas ignora o 0.
[0] = " ",
[1] = "Um",
[2] = 2,
[3] = "ABC",
[4] = 0.15
}
tabelaIndexadaQualquer = { -- Não funciona com ipairs, pois não é possível determinar a ordem dos índices, pois eles não são todos inteiros.
[0] = " ",
["1"] = "Um",
["dois"] = 2,
[3.3] = "ABC",
[4] = 0.15
}
tabelaIndexadaIntQualquer = { -- Só funciona com ipairs até onde existe o índice seguinte. Se não encontrar o índice seguinte, o resto será ignorado.
[1] = " ",
[2] = "Um",
[4] = 2,
[5] = "ABC",
[6] = 0.15 -- Se substituir o 6 pelo 3 que está faltando, essa table funcionará perfeitamente no ipairs. Pois não terá índice faltando na sequência.
}
for index, valor in ipairs (tabelaNaoIndexada) do -- Substitua o tabelaNaoIndexada pelas outras tables para testar. Tente também usando o pairs.
outputChatBox (index.." = "..valor)
end
outputChatBox ("Tamanho: "..#tabelaNaoIndexada) -- Tente verificar o tamanho das tables com isso e observe os bugs.
A função #table serve para mostrar o tamanho de uma table. No entanto ela não conta os elementos e irá bugar em tables indexadas como os 2 últimos exemplos.
Na verdade ela apenas mostra o maior índice inteiro da sequência. No caso do último exemplo, onde o maior índice é 6. Ele vai dizer que o tamanho dela é 6, quando na verdade é 5.
Qualquer dúvida que você ainda tiver sobre as tables e os loops, estarei aqui pra ajudar.