Portal SAMP
[Tutorial] Otimizando Loopings ( Parte 2 ) - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Guias e Tutoriais (https://portalsamp.com/forumdisplay.php?fid=7)
+--- Tópico: [Tutorial] Otimizando Loopings ( Parte 2 ) (/showthread.php?tid=1890)



Otimizando Loopings ( Parte 2 ) - SrBlue - 03/12/2021

Bom dia/tarde/noite.

Aproveitando o tópico do amigo Nilat, vim trazer a parte mas aprofudanda do foreach

no tutorial do mesmo, foi dito somente como otimizar loop para a variavel MAX_PLAYESR ( PLAYERS ),

para podermos utilizar outras variaveis como MAX_VEHICLES, ou como exemplo, MAX_ORGS nos teria que criar.
como faço para criar?

use:

   new B = 10;
   Iterator: A <B>
  • - A, seria o nome da variavel, que seria chamada no foreach, exemplo:
    foreach (new x: A ) {...};
  • - B, seria valor da variavel, que o foreach vai percorrer.
    * B tem valor de 10 nesse caso.

segue exemplo do MAX_VEHICLES:



Código:
#define MAX_VEHICLES 100
new Iterator:MAX_VEH<MAX_VEHICLES>;

foreach(new vehid: MAX_VEH){ // Percorre o laço MAX_VEH( do 0 até o numero maximo de veiculos definidos )
SetVehicleNumberPlate(vehid, "000-XXXX"); // passa todos valores 0,1,2,3,4 pra vehid
}




Exemplo²




Código:
new MAX_ORGS = 15;
new Iterator:MAX_ORGS<MAX_ORGS>;

foreach(new orgid: MAX_ORGS){ // percorre pelo laço max_orgs...
    printf("org id: %i ",orgid);
}


pode-se notar que ocorreu um warning denonimado de:
    * warning 203: symbol is never used: "MAX_ORGS@YSII_Cg"

isso ocorreu nos ambos exemplos devido NÃO TER INICIADO A ARRAY!

para iniciar, usemos:

new B = VALOR
Iterator: A <B>
Iter_init(A);



exemplo:

Código:
#define MAX_VEHICLES 100
new Iterator:MAX_VEH<MAX_VEHICLES>;
Iter_init(MAX_VEH);

foreach(new vehid: MAX_VEH){ // Percorre o laço MAX_VEH( do 0 até o numero maximo de veiculos definidos )
SetVehicleNumberPlate(vehid, "000-XXXX"); // passa todos valores 0,1,2,3,4 pra vehid
}



e sim, nos podemos usar NUMERO diretamente invés de pré definir uma variável com valor.
exemplo:
Código:
new Iterator:NomeAleatorio<10>;
Iter_init(NomeAleatorio);


enfim, esse é o tutorial =)


RE: Otimizando Loopings ( Parte 2 ) - ipsLuan - 03/12/2021

Bom tutorial ensinando o uso do foreach, mas há algo que você se equivocou.
O foreach percorre os dados de 0 até o último valor definido pelo init e não pelo valor máximo definido anteriormente.

Um adendo que esqueci: hoje em dia existe GetVehiclePoolSize e GetPlayerPoolSize que faz basicamente a mesma coisa que o foreach em MAX_PLAYERS e MAX_VEHICLES.


RE: Otimizando Loopings ( Parte 2 ) - SrBlue - 03/12/2021

(03/12/2021 13:09)ipsLuan Escreveu: Bom tutorial ensinando o uso do foreach, mas há algo que você se equivocou.
O foreach percorre os dados de 0 até o último valor definido pelo init e não pelo valor máximo definido anteriormente.

Um adendo que esqueci: hoje em dia existe GetVehiclePoolSize e GetPlayerPoolSize que faz basicamente a mesma coisa que o foreach em MAX_PLAYERS e MAX_VEHICLES.

opa, reforçando, o init somente INICIA a ARRAY,
sendo assim quando inicia um interator, ele vem vazio ( esqueci de mecionar no tutorial ),
Código:
new Iterator:MAX_VEHICLES<MAX_VEHICLES>;
sendo assim o MAX_VEHICLES vai ser o valor MAXIMO de MAX_VEHICLES
ou seja MAX_VEHICLES vai ser somente o valor MAX_VEHICLES definido anteriormente

para definimos varios valor na array devemos usar:

Código:
for(new veh=0....veh<....veh++){ // abreviado ( SOMENTE TEORICA )
             Iter_Add(MAX_VEHICLES,veh);
}


sendo assim vai ficar na teorica

MAX_VEHICLES = [0,1,2,3,4,5,6,7.... até o valor max];

ai na forech vai precorrer entre esse valores!

alias sobre os GetVehiclePoolSize e GetPlayerPoolSize , dei exemplo os valores de Vehicle, porem pode-se ser feito com qual quer valor especifico Smile
grato pelo comentario!


RE: Otimizando Loopings ( Parte 2 ) - xbruno1000x - 03/12/2021

Ótimo complemento, tenho certeza que ajudará muitos.