[Ajuda] Dъvida sobre loops
#1

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?
Reply
#2

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

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
Reply
#4

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!
Reply
#5

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?
Reply
#6

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

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.
Reply
#8

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.

Reply
#9

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.
Reply
#10

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); 
    } 
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)