Просмотр полной версии : [Вопрос] Диалог вызывается один раз
Всем доброго здравия.
Сразу к вопросу:
В моей команде /banlist идёт вызов функции показа диалогов (по одному на каждого забаненного с информацией о бане).
Проблема состоит в том, что при вводе команды диалог мне показывают один раз, после чего при последующих вводах ничего не происходит...
Точнее, происходит всё, что находится до строчки "if(mysql_fetch_row_format(name))", и дальше ничего не срабатывает, пока я не перезайду в игру.
Я не силён в таких редких функциях MySQL, мало работал со strcat, поэтому обращаюсь сюда. В чём тут может быть проблема?
forward Banlist(playerid);
public Banlist(playerid)
{
new rows, fields, banlist[1000];
new name[24], line[30];
cache_get_data(rows, fields);
if(rows)
{
for(new i;i < rows;i++)
{
if(mysql_fetch_row_format(name))
{
format(line, sizeof(line), "{FF0000}%s\n", name);
strcat(banlist, line);
}
}
ShowPlayerDialog(playerid, D_BANINFO, DIALOG_STYLE_LIST, "Банлист", banlist, "Выбрать", "Закрыть");
mysql_free_result();
}
else ShowPlayerDialog(playerid, 1029, DIALOG_STYLE_MSGBOX, "Банлист", " Список пуст", "Закрыть", "");
return true;
}
crashdetect что-нибудь говорит?
crashdetect что-нибудь говорит?
Помалкивает
Запрос бы увидеть. Ибо если отлов игроков идёт не по одному, тогда проблема в mysql_fetch_row_format, которая обрабатывает все строки сразу и записывает их в одну. Скорее всего, там и проблема.
Доведите мод до вызова бага и покажите логи
forward Banlist(playerid);
public Banlist(playerid)
{
new rows, fields, banlist[1000];
new name[24], line[30];
cache_get_data(rows, fields);
if(rows)
{
for(new i;i < rows;i++)
{
if(mysql_fetch_row_format(name))
{
printf("name = \"%s\"", name);
format(line, sizeof(line), "{FF0000}%s\n", name);
strcat(banlist, line);
}
}
ShowPlayerDialog(playerid, D_BANINFO, DIALOG_STYLE_LIST, "Банлист", banlist, "Выбрать", "Закрыть");
mysql_free_result();
}
else ShowPlayerDialog(playerid, 1029, DIALOG_STYLE_MSGBOX, "Банлист", " Список пуст", "Закрыть", "");
return true;
}
Так вот именно, что я уже это и делал
Ставив обычное логирование, я таким образом добрался до вызова всего лишь одной строчки "Banlist1", вот уже в таком варианте:
public Banlist(playerid)
{
new rows, fields, banlist[1000];
new name[24], line[30];
cache_get_data(rows, fields);
if(rows)
{
for(new i;i < rows;i++)
{
SendClientMessage(playerid, COLOR_WHITE, "Banlist1");
if(mysql_fetch_row_format(name))
{
printf("name = \"%s\"", name);
SendClientMessage(playerid, COLOR_WHITE, "Banlist2");
format(line, sizeof(line), "{FF0000}%s\n", name);
strcat(banlist, line);
}
}
ShowPlayerDialog(playerid, D_BANINFO, DIALOG_STYLE_LIST, "Банлист", banlist, "Выбрать", "Закрыть");
mysql_free_result();
}
else ShowPlayerDialog(playerid, 1029, DIALOG_STYLE_MSGBOX, "Банлист", " Список пуст", "Закрыть", "");
return true;
}
Banlist2 уже не вызывалась.
Кстати, ещё один факт: если список пустой, то окно с сообщением об этом вызывается нормально
Версия плагина MySQL какая?
Версия плагина MySQL какая?
MySQL R8 (R34)
Попробуй
forward Banlist(playerid);
public Banlist(playerid)
{
new rows, fields, banlist[1000];
new name[24], line[30];
cache_get_data(rows, fields);
if(rows)
{
for(new i;i < rows;i++)
{
cache_get_field_content(i,"Name",name,переменная подключения mysql,длина строки);
format(line, sizeof(line), "{FF0000}%s\n", name);
strcat(banlist, line);
}
ShowPlayerDialog(playerid, D_BANINFO, DIALOG_STYLE_LIST, "Банлист", banlist, "Выбрать", "Закрыть");
}
else ShowPlayerDialog(playerid, 1029, DIALOG_STYLE_MSGBOX, "Банлист", " Список пуст", "Закрыть", "");
return true;
}
- - - Добавлено - - -
И запрос бы ещё увидеть.
Попробуй
forward Banlist(playerid);
public Banlist(playerid)
{
new rows, fields, banlist[1000];
new name[24], line[30];
cache_get_data(rows, fields);
if(rows)
{
for(new i;i < rows;i++)
{
cache_get_field_content(i,"Name",name,переменная подключения mysql,длина строки);
format(line, sizeof(line), "{FF0000}%s\n", name);
trcat(banlist, line);
}
ShowPlayerDialog(playerid, D_BANINFO, DIALOG_STYLE_LIST, "Банлист", banlist, "Выбрать", "Закрыть");
}
else ShowPlayerDialog(playerid, 1029, DIALOG_STYLE_MSGBOX, "Банлист", " Список пуст", "Закрыть", "");
return true;
}
- - - Добавлено - - -
И запрос бы ещё увидеть.
Вот спасибо тебе, братишка
Блин, самый прикол, что я уже делал извлечение данных этой строчкой и всё равно срабатывало один раз, только я ставил её в начало коллбэка...
Всех благодарю, закройте тему.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot