PDA

Просмотр полной версии : [Вопрос] Диалог вызывается один раз



Edwin
11.07.2014, 13:10
Всем доброго здравия.
Сразу к вопросу:
В моей команде /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;
}

DeimoS
11.07.2014, 19:43
crashdetect что-нибудь говорит?

Edwin
12.07.2014, 00:20
crashdetect что-нибудь говорит?

Помалкивает

DeimoS
12.07.2014, 01:50
Запрос бы увидеть. Ибо если отлов игроков идёт не по одному, тогда проблема в 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;
}

Edwin
12.07.2014, 11:12
Так вот именно, что я уже это и делал
Ставив обычное логирование, я таким образом добрался до вызова всего лишь одной строчки "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 уже не вызывалась.
Кстати, ещё один факт: если список пустой, то окно с сообщением об этом вызывается нормально

MR_BEN
12.07.2014, 21:44
Версия плагина MySQL какая?

Edwin
13.07.2014, 11:38
Версия плагина MySQL какая?

MySQL R8 (R34)

MR_BEN
13.07.2014, 12:40
Попробуй


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;
}

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

И запрос бы ещё увидеть.

Edwin
14.07.2014, 10:52
Попробуй


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;
}

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

И запрос бы ещё увидеть.

Вот спасибо тебе, братишка
Блин, самый прикол, что я уже делал извлечение данных этой строчкой и всё равно срабатывало один раз, только я ставил её в начало коллбэка...
Всех благодарю, закройте тему.