PDA

Просмотр полной версии : [Вопрос] tdw_dialog и динамический template



Skipter
22.01.2019, 23:01
Приветствую, господа.

Решил попробовать использовать TDW Dialog library от VVWVV. Принципе все изначально понравилось, но возникла одна проблема, которая поставила меня в ступор.

Допустим, есть какая-то функция SomeFunc в которой, например, используется cache_get_row_count, и цикл на rows. Но каким же образом мне формировать диалог, если переменная rows не будет видна в template, который должен находится з-за пабликом? Глобальная переменная? Это уже мазохизм какой-то будет...

public SomeFunc() {

new
rows;

cache_get_row_count(rows);

for(new i; i < rows; i ++) {
// и что дальше?
}
}

Как бы это выглядело на стандартном процессоре диалогов:

public SomeFunc(playerid) {

new
rows;

cache_get_row_count(rows);

for(new i; i < rows; i ++) {
format(string, sizeof string, "%s\n%s", string, massive_var);
}
return ShowPlayerDialog(playerid, DIALOG_STYLE_LIST, "test", string, "button1", "");
}

Geebrox
22.01.2019, 23:53
Можно подробнее что ты хочешь сделать и что не получается? Я не очень понял проблему, но возможно тебе нужно использовать аргументы функции.

Skipter
23.01.2019, 02:34
В базу вписаны какие-то значения (https://imgur.com/a/2jny6GL). Мне нужно их оттуда достать и вывести в диалог. Я делаю SELECT запрос. И в паблике, который указал в аргументе mysql_tquery, делаю цикл(в примерах выше), но дальше - тупик.

Если в обычном обработчике диалогов это делается через format + ShowPlayerDialog, то здесь же нужно составлять template, который должен находится отдельно и там формировать диалог, но переменная rows для него "вне зоны видимости".

Если не понятно, то попробуй просто написать код, который достал бы те значения и запихнул их в диалог, используя tdw_dialog.

Geebrox
23.01.2019, 20:38
В базу вписаны какие-то значения (https://imgur.com/a/2jny6GL). Мне нужно их оттуда достать и вывести в диалог. Я делаю SELECT запрос. И в паблике, который указал в аргументе mysql_tquery, делаю цикл(в примерах выше), но дальше - тупик.

Если в обычном обработчике диалогов это делается через format + ShowPlayerDialog, то здесь же нужно составлять template, который должен находится отдельно и там формировать диалог, но переменная rows для него "вне зоны видимости".

Если не понятно, то попробуй просто написать код, который достал бы те значения и запихнул их в диалог, используя tdw_dialog.

что мешает передать переменную rows как аргумент для template? как указанно в примере tdw_dialog:

dialog [<атрибуты>] название_функции(аргументы)
{
// код..
}

исходя из этого:



dialog [template] имя_функции(playerid, rows)
{
//обработка
}

Skipter
24.01.2019, 18:02
new variable;
variable = 24;
ShowDialog(playerid, dfunc: DIALOG_TEST);
dialog [template] DIALOG_TEST(playerid, variable)
{
printf("var: %d", variable);
}
Результат: 12

Skipter
24.01.2019, 22:30
Проблема решена.

Форматируем текст и напрямую вызываем OpenDialog без template.