12.02.2009, 18:28
(
Последний раз редактировалось [LDT]LuxurY; 07.07.2010 в 17:22.
)
[HowTo] Creating TOP lists.
Most of server admins want to get TOP lists of players on their servers. And you don't need to create hard coded pieces of code. It'll be something like this:pawn Код:
stock fill ( array[][] )
{
new x_count;
for ( new g = 0; g < MAX_PLAYERS; g++ )
if ( IsPlayerConnected ( g ) )
{
x_count++;
array[g][1] = g;
array[g][0] = GetPlayerScore ( g );
}
return x_count;
}
pawn Код:
stock process ( array[][] , size = sizeof ( array ) )
{
if ( size > 1 )
{
new
bool:flag,
tmpx;
do
{
flag = true;
for ( new i = size - 1; i > 0; i-- )
if ( array[i][0] < array[i - 1][0] )
{
tmpx = array[i][0];
array[i][0] = array[i - 1][0];
array[i - 1][0] = tmpx;
tmpx = array[i][1];
array[i][1] = array[i - 1][1];
array[i - 1][1] = tmpx;
flag = false;
}
}
while flag == false;
}
}
Function will not be processed if there is only 1 player or there is no players on the server.
We'll get array[][1] - TOP playerid and array[][0] - TOP player's score/money/health/time in race etc...
And then, for example to create TOP 10 players, we should write something like this:
pawn Код:
stock CreateTop ( array[][] , max , count = 10 )
{
new
str[64],
pln[24];
for ( new i = 0; i < ( ( max < count) ? max : count ); i++ )
{
GetPlayerName ( array[i][1] , pln , sizeof ( pln ) );
format( str , sizeof ( str ) , "%d.%s: %d" , i + 1 , pln , array[i][0] );
SendClientMessageToAll ( 0x33FF33AA , str );
}
return true;
}
Online players >= TOP list count - OK!
Online players < TOP list count - Failure!
pawn Код:
( ( max < count) ? max : count )
It'll print count lines ( default = 10 ) in game chat if the count of online player will be >= 10.
So the usage:
pawn Код:
new
ar[MAX_PLAYERS][2],
tmpsize;
tmpsize = fill ( ar );
process( ar , tmpsize );
CreateTop ( ar , tmpsize );
I think it'll help someone.
Cheers,
[LDT]LuxurY.