PDA

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



Lars Keller
06.12.2014, 00:26
Приветствую всех, и у меня проблема как сделать так, что бы при нажатий открывался счет в диалоге и с ним можно было работать дальше (Снять деньги и т.д)
http://rghost.ru/59444330.view

Заранее спасибо!

Elaid
06.12.2014, 19:58
Сделай ответ на диалог.

Lars Keller
06.12.2014, 20:28
Сделай ответ на диалог.

В смысле?

Daniel_Cortez
07.12.2014, 13:10
Просто оставлю это здесь:
http://wiki.sa-mp.com/wiki/ShowPlayerDialog_RU
http://wiki.sa-mp.com/wiki/OnDialogResponse_RU

Lars Keller
07.12.2014, 15:03
Просто оставлю это здесь:
http://wiki.sa-mp.com/wiki/ShowPlayerDialog_RU
http://wiki.sa-mp.com/wiki/OnDialogResponse_RU


Ну дак листемсу надо как то передать выбраны в диалоге счет, вот в чем проблема :dntknw:

Daniel_Cortez
07.12.2014, 19:00
С помощью PVar'ов, например.
Выглядеть будет примерно так:


new items_count = [кол-во элементов в списке];
SetPVarInt(playerid, "bank_accounts_list__items", items_count);
new pvar_name[26];
for(new i=0; i<items_count; ++i)
{
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", i);
SetPVarInt(playerid, pvar_name, [номер счёта на i-той строке]);
}
ShowPlayerDialog(...);


Затем в OnDialogResponse:


new items_count = GetPVarInt(playerid, "bank_accounts_list__items")
if(!(0 <= listitem < items_count))
return 1; // подмена номера выбранного пункта в списке (возможно, сейчас таких читов ещё нет, но перестраховаться не помешает)
new pvar_name[26];
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", listitem);
new bank_account_id = GetPVarInt(playerid, pvar_name);
for(new i=0; i<items_count; ++i)
{
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", i);
DeletePVar(playerid, pvar_name);
}
// дальше Ваши действия, ID банковского счёта будет в переменной bank_account_id

Lars Keller
07.12.2014, 20:05
С помощью PVar'ов, например.
Выглядеть будет примерно так:


new items_count = [кол-во элементов в списке];
SetPVarInt(playerid, "bank_accounts_list__items", items_count);
new pvar_name[26];
for(new i=0; i<items_count; ++i)
{
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", i);
SetPVarInt(playerid, pvar_name, [номер счёта на i-той строке]);
}
ShowPlayerDialog(...);


Затем в OnDialogResponse:


new items_count = GetPVarInt(playerid, "bank_accounts_list__items")
if(!(0 <= listitem < items_count))
return 1; // подмена номера выбранного пункта в списке (возможно, сейчас таких читов ещё нет, но перестраховаться не помешает)
new pvar_name[26];
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", listitem);
new bank_account_id = GetPVarInt(playerid, pvar_name);
for(new i=0; i<items_count; ++i)
{
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", i);
DeletePVar(playerid, pvar_name);
}
// дальше Ваши действия, ID банковского счёта будет в переменной bank_account_id




forward bank_score(playerid);
public bank_score(playerid)
{
new rows, fields, str[200];
cache_get_data(rows, fields);
if(rows)
{
static window_title[] = "{FFAA00}Номер счета \t Вледелец счета \t Название счета";
new text_in_dialog[500], name_score[MAX_PLAYERS];
for(new r; r < rows; r++)
{
cache_get_field_content(r, "expense_holder", pInfo[r][pName], mysql_connect_ID, 24);
cache_get_field_content(r, "expense_name", name_score[r], mysql_connect_ID, 50);
new ID_score = cache_get_field_content_int(r, "ID_Expense", mysql_connect_ID);
format(str, sizeof str, "%d \t %s \t %s", ID_score, name_score, pInfo[r][pName]);
strcat(text_in_dialog, str);
strcat(text_in_dialog,"\n");
}
ShowPlayerDialog(playerid, dOpenHolder, DIALOG_STYLE_LIST, window_title, text_in_dialog, "Выход", "");
}
}

Думаю цикл не надо?
P.S: rows возвращает количество найденных по запросу ячеек

Lars Keller
07.12.2014, 21:15
Сделал вот так вот:


forward bank_score(playerid);
public bank_score(playerid)
{
new rows, fields, str[200];
cache_get_data(rows, fields);
if(rows)
{
static window_title[] = "{FFAA00}Номер счета \t Вледелец счета \t Название счета";
new text_in_dialog[500], name_score[MAX_PLAYERS];
SetPVarInt(playerid, "bank_accounts_list__items", rows);
new pvar_name[26];
for(new r; r < rows; r++)
{
cache_get_field_content(r, "expense_holder", pInfo[r][pName], mysql_connect_ID, 24);
cache_get_field_content(r, "expense_name", name_score[r], mysql_connect_ID, 50);
new ID_score = cache_get_field_content_int(r, "ID_Expense", mysql_connect_ID);
format(str, sizeof str, "%d \t %s \t %s", ID_score, name_score, pInfo[r][pName]);
strcat(text_in_dialog, str);
strcat(text_in_dialog,"\n");
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", r);
SetPVarInt(playerid, pvar_name, r);
}
ShowPlayerDialog(playerid, dOpenHolder, DIALOG_STYLE_LIST, window_title, text_in_dialog, "Выход", "");
}
}



case dOpenHolder:
{
new items_count = GetPVarInt(playerid, "bank_accounts_list__items");
if(!(0 <= listitem < items_count))
return 1; // подмена номера выбранного пункта в списке (возможно, сейчас таких читов ещё нет, но перестраховаться не помешает)
new pvar_name[26];
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", listitem);
new bank_account_id = GetPVarInt(playerid, pvar_name);
for(new i=0; i<items_count; ++i)
{
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", i);
DeletePVar(playerid, pvar_name);
}
printf("bank_account_id: %d", bank_account_id);

}

И как я понял по логированию будет возвращать ID нажатой кнопки (листем), да?
Но а как теперь продолжить работать счетом например, снять с него?
Просто если работать с select`om то надо хотя бы передать ID выбранного счета, но как?

Daniel_Cortez
09.12.2014, 08:59
Ещё раз посмотрите мой пост выше. Там было сказано записывать в PVar'ы номер столбца в таблице (r)? Или может всё-таки номер банковского счёта?
В отрывке для OnDialogResponse также указано, в какой переменной будет номер счёта. Просто внимательно прочтите пост.

И да, забыл написать, PVar bank_accounts_list__items тоже нужно удалять в OnDialogResponse.

Lars Keller
09.12.2014, 16:01
Все понял, van love Daniel Cortez :air_kiss:

Но наверное, надо поставить ограничение на создание счетов, видь есть ограничение на символов в диалоге, и если так то сколько счетов можно будет поставить?
Или у Вас есть какой то вариант, кроме страниц? (Не хочу их делать)

И есть ли какие нибудь примичание по коду, во общее?

Заранее спасибо

Lars Keller
11.12.2014, 18:41
Сделал что то подобное с пин - кодом, но всегда возвращает последний загружённый счет, почему так?


case dOpenHolder:
{
new items_count = GetPVarInt(playerid, "bank_accounts_list__items");
if(!(0 <= listitem < items_count)) return 1;
new pvar_name[26], pvar_name_[26];
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", listitem);
bank_account_id = GetPVarInt(playerid, pvar_name);
format(pvar_name_, sizeof(pvar_name_), "pincode_bank_accounts_list__%d", listitem);
bank_pincode = GetPVarInt(playerid, pvar_name_);
new str[128];
format(str, sizeof str, "До | bank_pincode: %d", bank_pincode);
SendClientMessageToAll(-1, str);
format(str, sizeof str, "До | bank_account_id: %d", bank_account_id);
SendClientMessageToAll(-1, str);
for(new i=0; i<items_count; ++i)
{
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", i);
DeletePVar(playerid, pvar_name);
format(pvar_name_, sizeof(pvar_name_), "pincode_bank_accounts_list__%d", i);
DeletePVar(playerid, pvar_name_);
}
format(str, sizeof str, "После | bank_pincode: %d", bank_pincode);
SendClientMessageToAll(-1, str);
format(str, sizeof str, "После | bank_account_id: %d", bank_account_id);
SendClientMessageToAll(-1, str);
DeletePVar(playerid, "bank_accounts_list__items");
static fmt_str0[] =
"Введите 6 значный пин - код, который был указан при регистраций банковского счета";
ShowPlayerDialog(playerid, dPinCode_Bank , DIALOG_STYLE_INPUT, "PinCode", fmt_str0, "Ок", "Отмена");

}



forward bank_score(playerid);
public bank_score(playerid)
{
new rows, fields, str[128];
cache_get_data(rows, fields);
if(rows)
{
static window_title[] = "{FFAA00}Номер счета \t Вледелец счета \t Название счета";
new text_in_dialog[500], name_score[50];
SetPVarInt(playerid, "bank_accounts_list__items", rows);
new pvar_name[26], pvar_name_[26];
for(new r; r < rows; r++)
{
cache_get_field_content(r, "expense_holder", pInfo[r][pName], mysql_connect_ID, 24);
cache_get_field_content(r, "expense_name", name_score[r], mysql_connect_ID, 50);
new ID_score = cache_get_field_content_int(r, "ID_Expense", mysql_connect_ID);
new pincode = cache_get_field_content_int(r, "pincode", mysql_connect_ID);
format(str, sizeof str, "%d \t %s \t %s", ID_score, name_score, pInfo[r][pName]);
strcat(text_in_dialog, str);
strcat(text_in_dialog,"\n");
format(pvar_name, sizeof(pvar_name), "bank_accounts_list__%d", r);
SetPVarInt(playerid, pvar_name, ID_score);
format(pvar_name_, sizeof(pvar_name_), "pincode_bank_accounts_list__%d", r);
SetPVarInt(playerid, pvar_name_, pincode);
}
ShowPlayerDialog(playerid, dOpenHolder, DIALOG_STYLE_LIST, window_title, text_in_dialog, "Выход", "");
}
}

Заранее спасибо)