[Ajuda] Isso aqui й um bom mйtodo?
#1

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;

Reply
#2

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

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

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

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

Reply
#6

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

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

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

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

Й 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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)