PDA

View Full Version : Ranking system of players in the race


Marllun
25/11/2016, 08:30 PM
Hello everyone, I wanted to know how to create a ranking system in the race showing the first second to the tenth of the players in the race are the checkpoints of them I use the adrenaline game mode

Gamemode:http://forum.sa-mp.com/showthread.php?t=5236

Marllun
25/11/2016, 10:47 PM
someone help

Dignity
25/11/2016, 11:06 PM
I'm not entirely sure on how to do it but I'd use an array to store the players in every time they pass a checkpoint.

I'm on my phone, but to give you an example:


//outside your checkpoint callback
#define MAX_RACE_PARTICIPANTS ( 10 ) // people in the race
new racePositions [MAX_RACE_PARTICIPANTS] ;

// inside your cp callback
new raceCount ;
racePositions [ ++ raceCount] = playerid ;


To get the list, simply do a loop. 0 = first, 1 = second, 2 = third and so on.

Written on phone so it's missing stuff but this is what it comes down to.

Marllun
26/11/2016, 12:03 AM
Then there's the one I have in my friend's gm he shows 1 2 3 place in the race sorry I'm from Brazil


public TimerTextDrawEvento()
{
new MaximosPegos[3] = -1;
foreach (Player, I)
{
if(FoiProEvento[I] == 1)
{
new S[50];
if(TotalDeCpsQuePegou[I] >= MaximosPegos[0])
{
format(S,sizeof(S),"~r~~h~~h~1| ~w~/ ~r~~h~%d", JogadoresNoEvento);
TextDrawSetString(TextoEvento[I], S);
TextDrawShowForPlayer(I, TextoEvento[I]);
MaximosPegos[0] = TotalDeCpsQuePegou[I];
MaximosPegos[1] = MaximosPegos[0] - 1;
MaximosPegos[2] = MaximosPegos[0] - 2;
}
else if(TotalDeCpsQuePegou[I] == MaximosPegos[1])
{
format(S,sizeof(S),"~r~~h~~h~2| ~w~/ ~r~~h~%d", JogadoresNoEvento);
TextDrawSetString(TextoEvento[I], S);
TextDrawShowForPlayer(I, TextoEvento[I]);
}
else if(TotalDeCpsQuePegou[I] == MaximosPegos[2])
{
format(S,sizeof(S),"~r~~h~~h~3| ~w~/ ~r~~h~%d", JogadoresNoEvento);
TextDrawSetString(TextoEvento[I], S);
TextDrawShowForPlayer(I, TextoEvento[I]);
}
for(new C = ID_Atual_CP_ADM; C >= 0; C --)
{
if(TotalDeCpsQuePegou[I] == (MaximoPegoAtual - C))
{
format(S,sizeof(S),"~r~~h~~h~%d| ~w~/ ~r~~h~%d", C, JogadoresNoEvento);
TextDrawSetString(TextoEvento[I], S);
TextDrawShowForPlayer(I, TextoEvento[I]);
}
}
new S[50];
format(S,sizeof(S),"~r~~h~~h~%d| ~w~/ ~r~~h~%d", Posicao[I], JogadoresNoEvento);
TextDrawSetString(TextoEvento[I], S);
TextDrawShowForPlayer(I, TextoEvento[I]);
}
}
new ar[MAX_PLAYERS][2], tmpsize;
tmpsize = fill (ar);
process( ar , tmpsize );
CreateTop (ar , tmpsize);

if(LimiteJogadoresEvento != -1)
{
if(CPSADMAtivados == 0)
{
if(ArquivoCPCarregado == -1) CancelarEvento();
else
{
new S[175], TotalQueFoi = 0;
foreach (Player, I) if(FoiProEvento[I] == 1) TotalQueFoi ++;
if(TempoMelhorCP == 999999999)
format(S, sizeof(S), "~r~~h~~h~CPs ID: ~w~%d~n~~p~~h~Recorde: Nenhum~n~~b~~h~~h~Jogadores no evento: ~w~%d", ArquivoCPCarregado, TotalQueFoi);
else
format(S, sizeof(S), "~r~~h~~h~CPs ID: ~w~%d~n~~p~~h~Recorde: ~w~%s (%02d:%02d:%02d)~n~~b~~h~~h~Jogadores no evento: ~w~%d", ArquivoCPCarregado, NomeMelhor, CPs_Horas(TempoMelhorCP), CPs_Minutos(TempoMelhorCP), CPs_Segundos(TempoMelhorCP), TotalQueFoi);
TextDrawSetString(TextoEvento, S);
foreach (Player, I) if(FoiProEvento[I] == 1) TextDrawShowForPlayer(I, TextoEvento);
}
}
else
{
#define Valor_Distancia_Maxima 999999999.999
new Resultado1 = -1, Resultado2 = -1, Resultado3 = -1,
Float:Desempate1 = Valor_Distancia_Maxima, Float:Desempate2 = Valor_Distancia_Maxima, Float:Desempate3 = Valor_Distancia_Maxima,
Vencedor1 = -1, Vencedor2 = -1, Vencedor3 = -1,
Empatados1 = -1, Empatados2 = -1,
Ganhador1[MAX_PLAYERS] = -1, Ganhador2[MAX_PLAYERS] = -1, Ganhador3[MAX_PLAYERS] = -1, JaFoiPremiado[MAX_PLAYERS] = 0;
// Achar o primeiro colocado ************************************************** ************************************************** ***
foreach (Player, I)
{
if((FoiProEvento[I] == 1) && (TotalDeCpsQuePegou[I] >= Resultado1) && (GetPlayerState(I) == 2))
{
Resultado1 = TotalDeCpsQuePegou[I];
}
}
foreach (Player, I)
{
if((TotalDeCpsQuePegou[I] == Resultado1) && (GetPlayerState(I) == 2))
{
Ganhador1[I] = 1;
if(Empatados1 < 2) Empatados1 ++;
}
else Ganhador1[I] = -1;
}
foreach (Player, I)
{
if((Ganhador1[I] == 1) && (GetPlayerState(I) == 2))
{
new Float:D = GetDistanceToPoint(I, CoordenadasCPSADM[Resultado1][0], CoordenadasCPSADM[Resultado1][1], CoordenadasCPSADM[Resultado1][2]);
if(D <= Desempate1)
{
Desempate1 = D;
Vencedor1 = I;
//break;
}
}
}
JaFoiPremiado[Vencedor1] = 1;
if(Empatados1 == 1)
{
Desempate1 = Valor_Distancia_Maxima;
foreach (Player, I)
{
if((Ganhador1[I] == 1) && (JaFoiPremiado[I] == 0) && (GetPlayerState(I) == 2))
{
new Float:D = GetDistanceToPoint(I, CoordenadasCPSADM[Resultado1][0], CoordenadasCPSADM[Resultado1][1], CoordenadasCPSADM[Resultado1][2]);
if(D <= Desempate1)
{
Desempate1 = D;
Vencedor2 = I;
//break;
}
}
}
JaFoiPremiado[Vencedor2] = 1;
}
else if(Empatados1 == 2)
{
Desempate1 = Valor_Distancia_Maxima;
foreach (Player, I)
{
if((Ganhador1[I] == 1) && (JaFoiPremiado[I] == 0) && (GetPlayerState(I) == 2))
{
new Float:D = GetDistanceToPoint(I, CoordenadasCPSADM[Resultado1][0], CoordenadasCPSADM[Resultado1][1], CoordenadasCPSADM[Resultado1][2]);
if(D <= Desempate1)
{
Desempate1 = D;
Vencedor3 = I;
//break;
}
}
}
JaFoiPremiado[Vencedor3] = 1;
}
// Achar o vencedor 2 ************************************************** ************************************************** ***
if(Vencedor2 == -1)
{
foreach (Player, I)
{
if((FoiProEvento[I] == 1) && (TotalDeCpsQuePegou[I] >= Resultado2) && (TotalDeCpsQuePegou[I] != Resultado1) && (JaFoiPremiado[I] == 0) && (GetPlayerState(I) == 2))
{
Resultado2 = TotalDeCpsQuePegou[I];
}
}
foreach (Player, I)
{
if((TotalDeCpsQuePegou[I] == Resultado2) && (GetPlayerState(I) == 2))
{
Ganhador2[I] = 1;
if(Empatados2 < 1) Empatados2 ++;
}
else Ganhador2[I] = -1;
}
foreach (Player, I)
{
if((Ganhador2[I] == 1) && (JaFoiPremiado[I] == 0) && (GetPlayerState(I) == 2))
{
new Float:D = GetDistanceToPoint(I, CoordenadasCPSADM[Resultado2][0], CoordenadasCPSADM[Resultado2][1], CoordenadasCPSADM[Resultado2][2]);
if(D <= Desempate2)
{
Desempate2 = D;
Vencedor2 = I;
//break;
}
}
}
JaFoiPremiado[Vencedor2] = 1;
if(Empatados2 == 1)
{
Desempate2 = Valor_Distancia_Maxima;
foreach (Player, I)
{
if((Ganhador2[I] == 1) && (JaFoiPremiado[I] == 0) && (GetPlayerState(I) == 2))
{
new Float:D = GetDistanceToPoint(I, CoordenadasCPSADM[Resultado2][0], CoordenadasCPSADM[Resultado2][1], CoordenadasCPSADM[Resultado2][2]);
if(D <= Desempate2)
{
Desempate2 = D;
Vencedor3 = I;
//break;
}
}
}
JaFoiPremiado[Vencedor3] = 1;
}
}
// Achar o vencedor 3 ************************************************** ************************************************** ***
if(Vencedor3 == -1)
{
foreach (Player, I)
{
if((FoiProEvento[I] == 1) && (TotalDeCpsQuePegou[I] >= Resultado3) && (TotalDeCpsQuePegou[I] != Resultado1) && (TotalDeCpsQuePegou[I] != Resultado2) && (JaFoiPremiado[I] == 0) && (GetPlayerState(I) == 2))
{
Resultado3 = TotalDeCpsQuePegou[I];
}
}
foreach (Player, I)
{
if((TotalDeCpsQuePegou[I] == Resultado3) && (GetPlayerState(I) == 2))
{
Ganhador3[I] = 1;
}
else Ganhador3[I] = -1;
}
foreach (Player, I)
{
if((Ganhador3[I] == 1) && (JaFoiPremiado[I] == 0) && (GetPlayerState(I) == 2))
{
new Float:D = GetDistanceToPoint(I, CoordenadasCPSADM[Resultado3][0], CoordenadasCPSADM[Resultado3][1], CoordenadasCPSADM[Resultado3][2]);
if(D <= Desempate3)
{
Desempate3 = D;
Vencedor3 = I;
//break;
}
}
}
JaFoiPremiado[Vencedor3] = 1;
}
foreach (Player, I)
{
if(strcmp(NomeVencedor1, PlayerName(I)) == 0)
Vencedor1 = I;
else if(strcmp(NomeVencedor2, PlayerName(I)) == 0)
Vencedor2 = I;
else if(strcmp(NomeVencedor3, PlayerName(I)) == 0)
Vencedor3 = I;
}
new S[175];
if(Vencedor3 != -1) format(S, sizeof(S), "~r~1| ~w~%s ~y~%d~n~~r~2| ~w~%s ~y~%d~n~~r~3| ~w~%s ~y~%d", PlayerName(Vencedor1), TotalDeCpsQuePegou[Vencedor1], PlayerName(Vencedor2), TotalDeCpsQuePegou[Vencedor2], PlayerName(Vencedor3), TotalDeCpsQuePegou[Vencedor3]);
else if(Vencedor2 != -1) format(S, sizeof(S), "~r~1| ~w~%s ~y~%d~n~~r~2| ~w~%s ~y~%d~n~~r~3| ~w~Ninguem", PlayerName(Vencedor1), TotalDeCpsQuePegou[Vencedor1], PlayerName(Vencedor2), TotalDeCpsQuePegou[Vencedor2]);
else if(Vencedor1 != -1) format(S, sizeof(S), "~r~1| ~w~%s ~y~%d~n~~r~2| ~w~Ninguem~n~~r~3| ~w~Ninguem", PlayerName(Vencedor1), TotalDeCpsQuePegou[Vencedor1]);
TextDrawSetString(TextoEvento, S);
foreach (Player, I) if(FoiProEvento[I] == 1) TextDrawShowForPlayer(I, TextoEvento);
}
return 1;
}