[Ajuda] Comandos e Erros
#1

Olб, boa noite tou com dois problemas serio no meu servidor.

1є Comando que nгo funciona direito. ( quando digito /recorde ele pega o level mais auto do server e o id do outro jogador sem ser que ta com level auto).

PHP код:
if(!strcmp(cmdtext"/recorde"true))
    {
    new 
Scor[MAX_PLAYERS];
    for(new 
i!= MAX_PLAYERS; ++iScor[i] = GetPlayerScore(i);
     
BubbleSort(Scorsizeof(Scor));
     
    for(new 
i!= 1i++)
     {
          
format(stringsizeof(string),"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MATA MATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        
SendClientMessage(playeridVerdestring);
         
format(stringsizeof(string),"~> O jogador conectado com o level mais alto й: %s (ID %d) (Level: %d)."PlayerName(i),i,Scor[i]);
         
SendClientMessage(playeridBrancostring);
         
format(stringsizeof(string),"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MATA MATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
         
SendClientMessage(playeridVerdestring);
          
      }
       return 
1;
    } 

2є o segundo problema й a questгo da lataria.
(que fica nesse numero grande)
https://imgur.com/a/di4akmY

PHP код:
new FloatLataria;
GetVehicleHealth(PlayerVehicleModelIDLataria);
format(string,sizeof(string)," ~n~ ~n~ ~n~ ~n~ ~n~ ~n~                              ~g~LATARIA:~w~%d"Lataria);
TextDrawSetString(LatariaVeiculo[i], string);//latariaaqui 
Reply
#2

new Float: Lataria;
GetVehicleHealth(PlayerVehicleModelID, Lataria);
format(string,sizeof(string)," ~n~ ~n~ ~n~ ~n~ ~n~ ~n~ ~g~LATARIA:~w~%.2f", Lataria);
TextDrawSetString(LatariaVeiculo[i], string);//latariaaqui tenta ai
Reply
#3

PHP код:
public OnPlayerCommandText(playeridcmdtext[])
{
    if(
strcmp(cmdtext"/recorde"true) == 0)
    {
        
MaiorNivel()
        return 
1;
    }
    return 
1;
}
MaiorNivel()
{
    new
        
PlayerID = -1,
        
MaiorLevel,
        
string[128]
    ;
    for(new 
0MAX_PLAYERSi++)
    {
        if(!
IsPlayerConnected(i))
            continue
        ;
        if(
GetPlayerScore(i) > MaiorLevel)
        {
            
PlayerID i;
            
MaiorLevel GetPlayerScore(i);
        }
    }
    if(
PlayerID == -1)
        return
    ;
    new 
Name[MAX_PLAYER_NAME];
    
GetPlayerName(PlayerIDNameMAX_PLAYER_NAME);
    
format(stringsizeof(string), "%s (ID: %d) [Level: %d] й o player com o maior nнvel conectado no servidor!"NamePlayerIDGetPlayerScore(i));
    
SendClientMessageToAll(-1string);

Reply
#4

Quote:
Originally Posted by DeusGrego
Посмотреть сообщение
Olб, boa noite tou com dois problemas serio no meu servidor.

1є Comando que nгo funciona direito. ( quando digito /recorde ele pega o level mais auto do server e o id do outro jogador sem ser que ta com level auto).

PHP код:
if(!strcmp(cmdtext"/recorde"true))
    {
    new 
Scor[MAX_PLAYERS];
    for(new 
i!= MAX_PLAYERS; ++iScor[i] = GetPlayerScore(i);
     
BubbleSort(Scorsizeof(Scor));
     
    for(new 
i!= 1i++)
     {
          
format(stringsizeof(string),"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MATA MATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        
SendClientMessage(playeridVerdestring);
         
format(stringsizeof(string),"~> O jogador conectado com o level mais alto й: %s (ID %d) (Level: %d)."PlayerName(i),i,Scor[i]);
         
SendClientMessage(playeridBrancostring);
         
format(stringsizeof(string),"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MATA MATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
         
SendClientMessage(playeridVerdestring);
          
      }
       return 
1;
    } 

2є o segundo problema й a questгo da lataria.
(que fica nesse numero grande)
https://imgur.com/a/di4akmY

PHP код:
new FloatLataria;
GetVehicleHealth(PlayerVehicleModelIDLataria);
format(string,sizeof(string)," ~n~ ~n~ ~n~ ~n~ ~n~ ~n~                              ~g~LATARIA:~w~%d"Lataria);
TextDrawSetString(LatariaVeiculo[i], string);//latariaaqui 
Fica Travado no 1000.00


Quote:
Originally Posted by XandyMello
Посмотреть сообщение
PHP код:
public OnPlayerCommandText(playeridcmdtext[])
{
    if(
strcmp(cmdtext"/recorde"true) == 0)
    {
        
MaiorNivel()
        return 
1;
    }
    return 
1;
}
MaiorNivel()
{
    new
        
PlayerID = -1,
        
MaiorLevel,
        
string[128]
    ;
    for(new 
0MAX_PLAYERSi++)
    {
        if(!
IsPlayerConnected(i))
            continue
        ;
        if(
GetPlayerScore(i) > MaiorLevel)
        {
            
PlayerID i;
            
MaiorLevel GetPlayerScore(i);
        }
    }
    if(
PlayerID == -1)
        return
    ;
    new 
Name[MAX_PLAYER_NAME];
    
GetPlayerName(PlayerIDNameMAX_PLAYER_NAME);
    
format(stringsizeof(string), "%s (ID: %d) [Level: %d] й o player com o maior nнvel conectado no servidor!"NamePlayerIDGetPlayerScore(i));
    
SendClientMessageToAll(-1string);

Nгo funciona corretamente
Reply
#5

Corrija isso
GetPlayerScore(i));

por isso
GetPlayerScore(PlayerID));
Reply
#6

Quote:
Originally Posted by Felipealves
Посмотреть сообщение
Corrija isso
GetPlayerScore(i));

por isso
GetPlayerScore(PlayerID));
Jб fiz isso tambйm no comeзo. Nгo resolveu.
Reply
#7

PHP код:
MaiorNivel() 

    new 
MaiorLevelID INVALID_PLAYER_IDstring[128];
       
    for(new 
0GetPlayerPoolSize(); <= j; ++x)
    { 
        if(
IsPlayerConnected(j))
        {
            if(
GetPlayerScore(j) > GetPlayerScore(MaiorLevelID)) MaiorLevelID j
        }
    }
    new 
Name[MAX_PLAYER_NAME]; 
    
GetPlayerName(MaiorLevelIDNameMAX_PLAYER_NAME); 
    
format(stringsizeof(string), "%s (ID: %d) [Level: %d] й o player com o maior nнvel conectado no servidor!"NameMaiorLevelIDGetPlayerScore(MaiorLevelID)); 
    
SendClientMessageToAll(-1string); 

Obs: Nгo testei
Reply
#8

Tente desta forma:

Код:
if(!strcmp(cmdtext, "/recorde", true)) 
{ 
	new Score[MAX_PLAYERS][2], count = 0; //na prбtica o count й um contador de players online 
	
	for(new i; i != MAX_PLAYERS; i++) if(IsPlayerConnected(i)) Score[count][0] = GetPlayerScore(i), Score[count][1] = i, count++; //Use foreach aqui para ser mais performatico
	//caso use ou vб usar a foreach, basta substituir "for(new i; i != MAX_PLAYERS; i++) if(IsPlayerConnected(i))" por "foreach(Players, i)"
	
	SelectionSort(Score, count); //faz um selection sort pela variбvel bidimensional 'Score' que armazena o Level e o ID dos players
	
	SendClientMessage(playerid, Verde, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MATA MATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 
	for(new i; i != 1; i++) 
	{ 
		format(string, sizeof(string), "~> O jogador conectado com o level mais alto й: %s (ID %d) (Level: %d).", PlayerName(Score[i][1]), Score[i][1], Score[i][0]); 
		SendClientMessage(playerid, Branco, string);    
	} 
	SendClientMessage(playerid, Verde, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ MATA MATA ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 
	return 1;
}

#define TrocarPosicao(%0,%1) (%0 ^= %1, %1 ^= %0, %0 ^= %1)
stock SelectionSort(var_sort[][], size)
{
	new i, j, aux;
	for(i = 0; i < (size-1); i++)
	{
		aux = i;
		for(j = (i+1); j < size; j++) if(var_sort[j][0] > var_sort[aux][0]) aux = j;
		if (i != aux) TrocarPosicao(var_sort[i][0], var_sort[aux][0]), TrocarPosicao(var_sort[i][1], var_sort[aux][1]);
	}
}
OBS: eu nгo testei, apenas adaptei ao seu cуdigo
Reply
#9

Nгo hб necessidade de tudo isso pra fazer um rank level kk. Й sу armazenar o ID do maior jogador SEMPRE em uma variбvel, e verificar se o level do prуximo player й maior que o estiver armazenado nessa variбvel, assim como ele fez no primeiro cуdigo. Nгo sei se dessa forma pode haver bugs, pela lуgica, nгo deveria.
Reply
#10

Dessa minha forma, hб a possibilidade dele ordenar TODOS os id's futuramente, fazer um top 10 por exemplo, ao invйs de sу pegar o player com mais level

Seu cуdigo ali pra pegar o id com mais level na teoria funciona perfeitamente, mas nгo deixa essa possibilidade que falei acima sem que ele precise fazer vбrias adaptaзхes, enfim, deixa ele escolher qual usar 'kk'
Reply
#11

Ah entendi. Jб й uma ajuda caso ele tenha em mente fazer isso agora ou futuramente kk
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)