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.