10/10/2023 21:28
(Esta mensagem foi modificada pela última vez a: 10/10/2023 21:49 por leonardos08bt.
Motivo da edição: Complementar o código e corrigir alguns pontos da explicação
)
O y_iterate é a versão mais avançada do foreach, dentre as includes disponíveis do foreach a mais recomendada é a y_iterate.inc da biblioteca YSI.
Bom, o foreach ("for - each | para - cada") é um otimizador de loop, eu particularmente digo que o foreach é o calmante da CPU.
Você deve usar o foreach porque além dele otimizar seu servidor ele é mais simples de ser usado.
O foreach na maioria dos casos ganha de 10x0 do loop normal do pawn (for)
Uso do Foreach:
Diferença entre o loop normal (for) e o foreach
Viu a diferença e a simplicidade?
Com o loop normal, o loop vai ser repetido 1000 vezes mesmo se não possuir jogador conectado.
Com o foreach, o loop vai ser repetido apenas nos jogadores conectados. Muito melhor
Criar Lista
Eu posso usar isso no foreach como mencionei anteriormente:
Ah, como eu faço para adicionar algo nessa 'lista'?
e para remover?
como pegar todos os jogadores online ou algo do tipo?
Espero que tenha entendido, se eu deixei de informar algo, mande uma nova mensagem no tópico para eu ou outro membro responder a dúvida.
Bom, o foreach ("for - each | para - cada") é um otimizador de loop, eu particularmente digo que o foreach é o calmante da CPU.
Você deve usar o foreach porque além dele otimizar seu servidor ele é mais simples de ser usado.
O foreach na maioria dos casos ganha de 10x0 do loop normal do pawn (for)
Uso do Foreach:
Citar:foreach(new int : lista) //Cria a variável int que vai ser repetida em cada 'ocupação' da lista
Diferença entre o loop normal (for) e o foreach
Citar://Sem o foreach:
for(new i; i < MAX_PLAYERS; i++) //Loop de 0 à 1000(Número padrão do MAX_PLAYERS).
{
if(IsPlayerConnected(i))
{
SendClientMessage(i, -1, "Você está conectado);
}
}
------
//Com o foreach:
foreach(new i : Player) //Loop nos jogadores online!
{
//Não necessita de IsPlayerConnected, pois o loop é feito apenas nos jogadores conectados.
SendClientMessage(i, -1, "Você está conectado);
}
Viu a diferença e a simplicidade?
Com o loop normal, o loop vai ser repetido 1000 vezes mesmo se não possuir jogador conectado.
Com o foreach, o loop vai ser repetido apenas nos jogadores conectados. Muito melhor
Criar Lista
Citar:new Iterator:Vehicle<MAX_VEHICLES> //Nova iteração, Vehicle = nome da lista, MAX_VEHICLES = número máximo que a lista pode receber (recebe se for menor que o número máximo que definir)Com isso eu crio uma lista chamada Vehicles.
Eu posso usar isso no foreach como mencionei anteriormente:
Citar:foreach(new veh : Vehicle)
Ah, como eu faço para adicionar algo nessa 'lista'?
Citar:Iter_Add(lista, valor(variável));
Ex.:
new veh1 = CreateVehicle(411, ...);
new veh2 = CreateVehicle(411, ...);
Iter_Add(Vehicle, veh1);
Iter_Add(Vehicle, veh2);
e para remover?
Citar:Iter_Remove(lista, valor(variável));
Ex.:
Iter_Remove(Vehicle, veh2);
como pegar todos os jogadores online ou algo do tipo?
Citar:Iter_Count(lista);
Ex.:
printf("Jogadores Online: %d!", Iter_Count(Player));
Espero que tenha entendido, se eu deixei de informar algo, mande uma nova mensagem no tópico para eu ou outro membro responder a dúvida.