В большую
Вид для печати
Функции сортировки работают с одномерными массивами, а у нас двумерный. Потому компилятор и ругается. Вот, попробуйте такой велосипед
PHP код:
if(strcmp(cmd, "/top", true) == 0)
{
Result = db_query(Database, "SELECT Name, Kills FROM `USERS` WHERE Kills > 0 ORDER BY Kills DESC LIMIT 10");
new string[20+MAX_PLAYER_NAME+11],
buff_name[10][MAX_PLAYER_NAME],
buff_kills[10][11],
player_kills[10],
i;
while(db_next_row(Result))
{
db_get_field_assoc(Result, "Name", buff_name[i], MAX_PLAYER_NAME);
db_get_field_assoc(Result, "Kills", buff_kills[i], 11);
player_kills[i] = strval(buff_kills[i]);
i++;
}
db_free_result(Result);
SelectionSort(player_kills);
for(i = 0; i != 10; i++)
{
for(new _i = 0; _i != 10; _i++)
{
if(strval(buff_kills[_i]) == player_kills[_i])
{
format(string, sizeof(string), "Ник: %s || Kills: %d", buff_name[_i], player_kills[i]);
SendClientMessage(playerid, 0xFFFFFFAA, string);
}
}
}
return 1;
}
stock SelectionSort(_array[], size = sizeof _array)
{
for(new i = 0, value = 0, j = 0, swap = 0; i != size - 1; i++)
{
value = i;
for(j = i + 1; j != size; j++)
{
if(_array[ j ] > _array[ value ]) value = j;
}
if(value != i)
{
swap = _array[ i ];
_array[ i ] = _array[ value ];
_array[ value ] = swap;
}
}
}ф
Тут такая проблема...
Все работает, Kills распределяет правильно, но когда я вставляю команду вашу
Вот что происходит
http://s015.radikal.ru/i333/1407/e9/4c0a9d9335b5.jpg
А когда делаю команду вот так
То вот так
http://s019.radikal.ru/i604/1407/52/d1cd433c80b4.jpg
Но, что интересно, Ники игроков не правильно ставятся
Вот как было раньше, когда не правильно распределялись килы
http://i024.radikal.ru/1407/94/28d2aef64d0c.jpg
А вот как сейчас, килы правильно распределяются, а ники так и остались
http://s019.radikal.ru/i604/1407/52/d1cd433c80b4.jpg
В чем проблема?
Ах да, мой косяк.
Правда возможен ещё один баг, когда система будет находить неверный ник при одинаковых кол-вах фрагов. Если такое будет, используйте этот кодPHP код:
if(strcmp(cmd, "/top", true) == 0)
{
Result = db_query(Database, "SELECT Name, Kills FROM `USERS` WHERE Kills > 0 ORDER BY Kills DESC LIMIT 10");
new string[20+MAX_PLAYER_NAME+11],
buff_name[10][MAX_PLAYER_NAME],
buff_kills[10][11],
player_kills[10],
i;
while(db_next_row(Result))
{
db_get_field_assoc(Result, "Name", buff_name[i], MAX_PLAYER_NAME);
db_get_field_assoc(Result, "Kills", buff_kills[i], 11);
player_kills[i] = strval(buff_kills[i]);
i++;
}
db_free_result(Result);
SelectionSort(player_kills);
for(i = 0; i != 10; i++)
{
for(new _i = 0; _i != 10; _i++)
{
if(strval(buff_kills[_i]) == player_kills[_i])
{
format(string, sizeof(string), "Ник: %s || Kills: %d", buff_name[_i], player_kills[i]);
SendClientMessage(playerid, 0xFFFFFFAA, string);
break;
}
}
}
return 1;
}
НО ТОЛЬКО ЕСЛИ БУДЕТ БАГ.
И да, я уверен, что сейчас создаю жуткие велосипеды. Но такой уж я :grin:
P.S. Всё пишется в браузере и если будут ошибки - сообщите, исправлю