PDA

Просмотр полной версии : [Вопрос] По команде /top SQlite



Flime
26.06.2014, 22:24
CMD:top(playerid, params[])
{
if(GetPVarInt(playerid, "Login") != 2) return 1;
u_result = db_query(users_base, "SELECT * FROM USERS WHERE KILL > 0 BY KILL DESC LIMIT 10");
SCM(playerid,0xAFAFAFAA,"Топ 10 лучших игроков:");
static const fmt_string[] = "Ник: %s || Kills: %d";
new string[sizeof(fmt_string)-4+11+MAX_PLAYER_NAME];
new name[MAX_PLAYER_NAME+1],kills[11];
while(db_next_row(u_result))
{
db_get_field_assoc(u_result,"Name", name, MAX_PLAYER_NAME);
db_get_field_assoc(u_result,"Kill", kills,11);
format(string, sizeof(string), fmt_string, name, strval(kills));
SCM(playerid, 0xFFFFFFAA, string);
}
db_free_result(u_result);
return 1;
}

Что-то не работает... По коду вроде верно. Не могу понять в чем ошибка..
Вот что выводит http://s019.radikal.ru/i634/1406/05/540884924178.png

Zeror_Dalglish
27.06.2014, 05:20
CMD:top(playerid, params[])
{
if(GetPVarInt(playerid, "Login") != 2) return 1;
u_result = db_query(users_base, "SELECT * FROM USERS WHERE KILL > 0 BY KILL DESC");
SCM(playerid,0xAFAFAFAA,"Топ 10 лучших игроков:");
static const fmt_string[] = "Ник: %s || Kills: %d";
new string[sizeof(fmt_string)-4+11+MAX_PLAYER_NAME];
new name[MAX_PLAYER_NAME+1],kills[11];
for(new i; i < 10; i++)
{
db_get_field_assoc(u_result,"Name", name, MAX_PLAYER_NAME);
db_get_field_assoc(u_result,"Kill", kills,11);
format(string, sizeof(string), fmt_string, name,kills);
SCM(playerid, 0xFFFFFFAA, string);
db_next_row(u_result);
}
db_free_result(u_result);
return 1;
}

Что-то не работает... По коду вроде верно. Не могу понять в чем ошибка..

Прологирую и посмотри где оканчивается работоспособность кода

Flime
28.06.2014, 18:44
Команда выполняется полностью. Но не верно. Вместо топа 10 игроков. Выводит бред..

DeimoS
28.06.2014, 19:09
Что именно не так? Пока я вижу лишь то, что kills имеет формат строки, а выгружаете вы её значение в целочисленный заполнитель

И почему бы не использовать LIMIT в запросе?

- - - Добавлено - - -

Как-нибудь так

CMD:top(playerid, params[])
{
if(GetPVarInt(playerid, "Login") != 2) return 1;
u_result = db_query(users_base, "SELECT * FROM USERS WHERE KILL > 0 BY KILL DESC LIMIT 10");
SCM(playerid,0xAFAFAFAA,"Топ 10 лучших игроков:");
static const fmt_string[] = "Ник: %s || Kills: %d";
new string[sizeof(fmt_string)-4+11+MAX_PLAYER_NAME];
new name[MAX_PLAYER_NAME+1],kills[11];
while(db_next_row(u_result))
{
db_get_field_assoc(u_result,"Name", name, MAX_PLAYER_NAME);
db_get_field_assoc(u_result,"Kill", kills,11);
format(string, sizeof(string), fmt_string, name, strval(kills));
SCM(playerid, 0xFFFFFFAA, string);
}
db_free_result(u_result);
return 1;
}

Flime
28.06.2014, 19:11
Вот что выводит. http://s019.radikal.ru/i634/1406/05/540884924178.png Отредактировал команду. Не заметил...

DeimoS
28.06.2014, 19:33
CMD:top(playerid, params[])
{
if(GetPVarInt(playerid, "Login") != 2) return 1;
u_result = db_query(users_base, "SELECT * FROM USERS WHERE KILL > 0 BY KILL DESC");
if(!db_num_rows(u_result)) return SendClientMessage(playerid, 0xFF0000FF, "Данные не найдены");
SCM(playerid,0xAFAFAFAA,"Топ 10 лучших игроков:");
static const fmt_string[] = "Ник: %s || Kills: %d";
new string[sizeof(fmt_string)-4+11+MAX_PLAYER_NAME];
new name[MAX_PLAYER_NAME+1],kills[11];
while(db_next_row(u_result))
{
db_get_field_assoc(u_result,"Name", name, MAX_PLAYER_NAME);
db_get_field_assoc(u_result,"Kill", kills,11);
format(string, sizeof(string), fmt_string, name, strval(kills));
SCM(playerid, 0xFFFFFFAA, string);
}
db_free_result(u_result);
return 1;
}