SA-MP Forums Archive
[Ajuda] Dъvida sobre loops - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Dъvida sobre loops (/showthread.php?tid=604288)



Dъvida sobre loops - bruxo00 - 02.04.2016

Bem, estava aqui a fazer umas alteraзхes quando olhei para um loop que tenho aqui:

PHP Code:
    for(new 0GetOnlinePlayers(); i++)
    {
        if(!
IsPlayerConnected(i)) continue;
        
        
GuardarJogador(i);
    } 
PHP Code:
stock GetOnlinePlayers()
{
    new 
countGetMaxPlayers();
    for(new 
dgd++) if(IsPlayerConnected(d) && !IsPlayerNPC(d)) count++;
    return 
count;

A dъvida й a seguinte: como hб a possibilidade de estarem 20 jogadores no servidor, mas por exemplo haver um deles estar com o ID 50. (podem ter saнdo todos do ID 20 ao ID 40). O loop nгo vai chegar ao jogador com o ID 50, certo? Ou vai?


Re: Dъvida sobre loops - F1N4L - 02.04.2016

Se estivesse usando MAX_PLAYERS eu teria certeza em responder q sim, mas n sei como funciona com GetMaxPlayers...


Re: Dъvida sobre loops - Dayvison_ - 02.04.2016

Isto ae sу fez seu loop ficar mais lento, e nгo nгo vai chegar no jogador 50.

@Edit mais lento '-', nгo menor


Re: Dъvida sobre loops - PT - 02.04.2016

Quote:
Originally Posted by bruxo00
View Post
Bem, estava aqui a fazer umas alteraзхes quando olhei para um loop que tenho aqui:

PHP Code:
    for(new 0GetOnlinePlayers(); i++)
    {
        if(!
IsPlayerConnected(i)) continue;
        
        
GuardarJogador(i);
    } 
PHP Code:
stock GetOnlinePlayers()
{
    new 
countGetMaxPlayers();
    for(new 
dgd++) if(IsPlayerConnected(d) && !IsPlayerNPC(d)) count++;
    return 
count;

A dъvida й a seguinte: como hб a possibilidade de estarem 20 jogadores no servidor, mas por exemplo haver um deles estar com o ID 50. (podem ter saнdo todos do ID 20 ao ID 40). O loop nгo vai chegar ao jogador com o ID 50, certo? Ou vai?
Estas a colocar os teus loops lentos desnecessariamente.
Usa foreach/y_iterate!


Re: Dъvida sobre loops - bruxo00 - 03.04.2016

Quote:
Originally Posted by PT
View Post
Estas a colocar os teus loops lentos desnecessariamente.
Usa foreach/y_iterate!
Qual й o verdadeiro ganho em trocar de um loop "normal" para o foreach?


Re: Dъvida sobre loops - PT - 03.04.2016

Vais fazer loops com valores de quem apenas estб on-line. E dб para fazer muito mais coisas


Re: Dъvida sobre loops - Artista - 03.04.2016

Quote:
Originally Posted by bruxo00
View Post
PHP Code:
    for(new 0GetOnlinePlayers(); i++)
    {
        if(!
IsPlayerConnected(i)) continue;
        
        
GuardarJogador(i);
    } 
PHP Code:
stock GetOnlinePlayers()
{
    new 
countGetMaxPlayers();
    for(new 
dgd++) if(IsPlayerConnected(d) && !IsPlayerNPC(d)) count++;
    return 
count;

Esse loop ficarб muito lento, atй se vocк fizer...
PHP Code:
for(new 0MAX_PLAYERSi++)
{
    if(!
IsPlayerConnected(i)) continue;
    
GuardarJogador(i);

... ficarб melhor do que isso.

E bem, tambйm recomendo o uso do foreach. Imagine que vocк tenha 3 jogadores online no servidor, com os ids: 0, 14, 53
Em vez de precisar fazer um loop comeзando do 0 ao 53, isto й, 54 voltas, o foreach farб um loop com apenas 3 voltas e terб o mesmo resultado porйm muito mais rбpido. Isto porque ele armazena os ids que estгo online tornando a checagem bem rбpida.


Re: Dъvida sobre loops - Coreia - 04.04.2016

Nгo, GetMaxPlayers o nome da prуpria funзгo jб diz "Getar o nъmero mбximo de jogadores no servidor. "

JOGADOR nгo ID.




Re: Dъvida sobre loops - widhost - 04.04.2016

Quote:
Originally Posted by bruxo00
View Post
Bem, estava aqui a fazer umas alteraзхes quando olhei para um loop que tenho aqui:

PHP Code:
    for(new 0GetOnlinePlayers(); i++)
    {
        if(!
IsPlayerConnected(i)) continue;
        
        
GuardarJogador(i);
    } 
PHP Code:
stock GetOnlinePlayers()
{
    new 
countGetMaxPlayers();
    for(new 
dgd++) if(IsPlayerConnected(d) && !IsPlayerNPC(d)) count++;
    return 
count;

A dъvida й a seguinte: como hб a possibilidade de estarem 20 jogadores no servidor, mas por exemplo haver um deles estar com o ID 50. (podem ter saнdo todos do ID 20 ao ID 40). O loop nгo vai chegar ao jogador com o ID 50, certo? Ou vai?
Vai sim, O ID do player nгo tem nada a ver com este loop, ID й apenas a identificaзгo dele naquele momento,

Pode existir ID: 9, 4, 5, 19, 200, 45 e 40
Esse loop nгo vai rodar 200 vezes, ele vai rodar o nъmero de jogadores no momento do loop.
No caso, 7 players, de 0 а 6.

Vocк deve perceber que O ID do jogador nгo tem relaзгo com a quantidade de jogadores.


Re: Dъvida sobre loops - Bruno13 - 04.04.2016

Vocк nгo estб sabendo qual a utilidade da funзгo que tens...basta vocк ler e interpretar o que a funзгo executa e seu retorno, logo, verбs que ela lhe fornece o nъmero total de players online. Nгo deve ser usado em loops, e sim, apenas uma informaзгo de quantos players estгo conectados.

E para loops, se nгo fores utilizar alguma lib que conte com um loop mais eficiente, pelo menos utilize o mбximo que as funзхes nativa lhe permitem...

PHP Code:
    static iplayerPoolSize;
    
playerPoolSize GetPlayerPoolSize();
    for(
0<= playerPoolSizei++) 
    { 
        if(!
IsPlayerConnected(i)) continue; 
         
        
GuardarJogador(i); 
    }