[Ajuda] Bug ao Contar players!
#1

esta contando somente os tres primeiro que logam...


pawn Код:
ContarJogadores()
{
 new Jogadores = 0;
 for(new i = 0; i < MAX_PLAYERS; ++i){
  if(IsPlayerConnected(i))
   Jogadores++;
 }
 return Jogadores;
}
forward PlayersOnline(playerid);
public PlayersOnline(playerid)
{
   format(String, sizeof(String), "%d/%d", ContarJogadores(), MAX_PLAYERS);
   TextDrawSetString(Players, String);
   return 1;
}
Reply
#2

Код HTML:
ContarJogadores()
{
	new Jogadores = 0;
	for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) 
	{
		if(IsPlayerConnected(i))
		{	
			Jogadores++;
		}	
	}
 	return Jogadores;
}
Reply
#3

@Mark009
Faltou declarar a var j


@topic
Aparentemente nгo estб errado.
Faзa algo prбtico evitando um timer, coisa realmente simples:
Код:
new Jogadores, String[8], Text:Players;

public OnPlayerConnect(playerid)
{
	Jogadores ++;
	
	format(String, sizeof(String), "%03d/%03d", Jogadores, MAX_PLAYERS);
	TextDrawSetString(Players, String);
	
	return true;
}

public OnPlayerDisconnect(playerid, reason)
{
	Jogadores --;
	
	format(String, sizeof(String), "%03d/%03d", Jogadores, MAX_PLAYERS);
	TextDrawSetString(Players, String);
	
	return true;
}
Desta maneira nгo precisamos verificar a cada segundo, somente ao conectar e desconectar!
Reply
#4

best95, Ambas as 2 soluзхes postadas acima estгo corretas, e melhores que a sua em questхes de performance.

Sу gostaria de enfatizar que a resposta do F1N4L parece ser a mais bacana, eu havia publicado um source desse estilo no meu pastebin 3 anos atrбs, que era exatamente oque eu usava nos meus projetos: http://pastebin.com/YTjkqu9M


Se vocк for calcular o quгo melhor й isso, imagina o seguinte:

Toda vez que um usuбrio efetuar login, ele vai somar + 1 na variбvel global jogadores, oque й uma operaзгo normal, simples e rбpida pro processador.

A partir do momento que vocк comeзa a rodar um loop no seu cуdigo, vocк comeзa a deixar seu cуdigo mais lento, pois vocк vai rodar MAX_PLAYERS que й equivalente ao numero maxplayers do seu server config.

Imagina se for MAX_PLAYERS = 500, vocк vai rodar 500 vezes pra saber quantos users estгo logados.
Imagina agora se o seu server receber 1 login por min, vocк vai executar 500 vezes essa mesma estrutura por min (500/min), impedindo o resto do cуdigo que deveria receber prioridade de ser executado, pois pawn nгo й multi-threading.

No total de 10 min vocк teria 10x500 = 5000


Se pra tudo no seu servidor, vocк pensar em loop/if-else, quando chegar a hora de colocar seu GM online, vocк vai notar que seu GM nгo aguenta nada de users onlines, e vai exigir que vocк gaste bem mais com servidores, e qualquer /ping na tentativa de simular um DOS no seu server vai fazer ele cair, sem contar as possibilidades de crashs


+ rep pros que responderam
Reply
#5

warning 203: symbol is never used: "ContarJogadores"
Reply
#6

Apague essa var, ou substitua a que eu criei (Jogadores) por esta.
Nгo sei se vai usar o meu sistema, mas como @WLSF comentou, evitar um loop, aparentemente em um timer, vai ser algo relativamente rбpido comparado com o seu sistema.
Reply
#7

nгo funciona este modo FINAL. ja ate desisti pq ja tentei de tudo ou da um bug ou da outro..
Reply
#8

ja arrumei.
Reply
#9

o esquema й criar um sistema que pega o ip fixo do cara, onde localisa atй a cidade onde ele mora e tals mas isso pra uma base de um banco de dados. assim vocк iria conhecer melhor os players e o problema de contar iria acabar
Reply
#10

@TOPICO FECHADO!
Reply


Forum Jump:


Users browsing this thread: