SA-MP Forums Archive
[Ajuda] Isso aqui й um bom mйtodo? - 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] Isso aqui й um bom mйtodo? (/showthread.php?tid=540638)



Isso aqui й um bom mйtodo? - lnasc256 - 06.10.2014

Eu gostaria de saber se isso que eu fiz poderia otimizar loops que vгo a todos os players online
PHP код:
//lnasc256
new max_players;
public 
OnPlayerConnect(playerid){
    if(
playerid>max_players)
        
max_players=playerid;
    return 
1;
}
public 
OnPlayerDisconnect(playerid,reason){
    if(
max_players&&playerid==max_players){
        new 
current_max_player;
        for(new 
i;i!=GetMaxPlayers();++i)
            if(
IsPlayerConnected(i)&&max_players>i>current_max_player)max_players=i;
    }return 
1;
}
public 
OnGameModeExit(){
    
max_players=0;
    return 
1;

Й assim: se eu tenho 5 players online que as IDs vгo de 0 a 4, ele vai fazer o loop sу de 0 a 4

Exemplo de uso:
PHP код:
forward SendMessageToAllEx(color,string[]);
public 
SendMessageToAllEx(color,string[]){
    for(new 
i;i<=max_players;++i)
        if(
IsPlayerConnected(i))
            
SendClientMessage(i,color,string);
    return 
1;




Re: Isso aqui й um bom mйtodo? - Dolby - 06.10.2014

Nгo й necessбrio tantas incrementaзхes e condicionais. Basta incrementar uma variбvel no Connect e decrementa-la no Disconnect.

Mas vocк pode usar um macro com um valor prй-definido. Aн vocк escolhe, se quer fazer algumas iteraзхes no nada, ou se quer reservar um espaзo na memoria para evitar essas iteraзхes. Particularmente eu utilizaria o macro, й mais viбvel.


Re: Isso aqui й um bom mйtodo? - lnasc256 - 06.10.2014

O loop no disconnect й por causa que, pense no seguinte:
Eu tenho no meu server os players com as ids 0,1,2,3,5
A variбvel ta la id 5 e se o id 5 desconectar se eu decrementar vai ficar 4 e assim ainda o loop vai durar +1

E se tipo eu tenho os players id 0,7 logados e o player id 1 logar e eu incrementar, a variбvel vai ficar 8 mas o player com a id mais alta й 7, e assim a loop vai durar +1


Re: Isso aqui й um bom mйtodo? - Dolby - 06.10.2014

Eu entendi, й por isto que eu disse que achava mais viбvel um macro.


Re: Isso aqui й um bom mйtodo? - lnasc256 - 06.10.2014

E como seria um exemplo desse macro?

Ah tem outro exemplo
se tipo eu tenho os players de 0 a 4 no server e o id 2 desconecta, a variavel vai de 4 para 3, aн o loop nгo passaria pelo id 4

E esse cуdigo no disconect(tou pelo celular)
PHP код:
if(max_players==playerid){
    if(
max_players){
        new 
bool:finded;
        for(new 
i=playerid-1;i>=0;--i)
            if(
IsPlayerConnected(i){
                
max_players=i;
                
finded=true;
                break;
           }
       if(!
finded)max_players=0;
    }




Re: Isso aqui й um bom mйtodo? - Dolby - 06.10.2014

pawn Код:
#if defined MAX_PLAYERS
#undef MAX_PLAYERS
#endif
#define MAX_PLAYERS 15



Re: Isso aqui й um bom mйtodo? - lnasc256 - 06.10.2014

Eu ja tinha isso do define, com a verificaзгo se й igual ao max players do server.cfg no ongamemodeinit

Mas tipo eu tenho 50 slots e 10 players on, todos os loops passariam por +40, e se eu usar o loop no disconnect ele poderia a economizar atй todos os 40 nos loops

isso nгo seria eficiente?


Re: Isso aqui й um bom mйtodo? - Dolby - 06.10.2014

Quote:
Originally Posted by lnasc256
Посмотреть сообщение
Eu ja tinha isso do define, com a verificaзгo se й igual ao max players do server.cfg no ongamemodeinit

Mas tipo eu tenho 50 slots e 10 players on, todos os loops passariam por +40, e se eu usar o loop no disconnect ele poderia a economizar atй todos os 40 nos loops

isso nгo seria eficiente?
A pensar por este modo sim, mas se for pensar tudo minunciosamente, com a alocaзгo de memoria da variбvel, com as condicionais usadas e com o loop que elas rodam devido ao "pulo" entre ID's, no fim das contas acabaria nгo se tornando tгo eficiente.

Mas isto vai do modo de programar de cada um.


Re: Isso aqui й um bom mйtodo? - lnasc256 - 06.10.2014

O meu gm й do zero, jб tem 12000 linhas, e ele deve ter quase 100 loops de players, serб que nao seria bom um loop do tipo para economizar em todos os loops?

Sobre a variavel, nao seria mais eficiente usar ela com relaзгo ao GetMaxPlayers()? Pois ela jб estaria no cache

Й como eu pular 40 players em um loop, ou pular 40 players em 100 loops


Re: Isso aqui й um bom mйtodo? - Dolby - 06.10.2014

Й como eu disse, independente do modo que vocк escolher, vocк vai ter percas e ganhos, seja de performance, seja de memoria. Fica por sua escolha o mйtodo que vocк acha melhor a se trabalhar. Й como eu disse, isso varia de programador para programador.