PDA

Просмотр полной версии : [Вопрос] Оформление функции с большим диалогом



Elrmrnt-Kritik
04.07.2018, 21:46
Всем привет. Уже, наверное, больше половины года пользуюсь диалоговыми процессорами (большую часть времени - mdialog). И не так давно столкнулся с такой проблемой, что код одного из диалогов не хочет вызываться. Пробовал уже и по-разному данные диалога забивать (убирал цвета из названия, текста), переименовывал название диалога. Никак не вызывается в общем... Подскажите пожалуйста, в чем может быть проблема.


ShowPlayerDialog (http://wiki.sa-mp.com/wiki/ShowPlayerDialog)(playerid, DLG_VEH_MENU_DEFAULT, DIALOG_STYLE_TABLIST_HEADERS, "{0080BB}Меню транспортного средства", string, "Выбрать", "Закрыть");


DLG:DLG_VEH_MENU_DEFAULT_HP(playerid, response, listitem, inputtext[])
{
/**/print("DEBUG DLG_VEH_MENU_DEFAULT_HP");
if(!response)
return ShowPlayerVehicleMenu(playerid, gPlayer[playerid][pVehicleMenu]);
new health, vehicleid = gPlayer[playerid][pVehicleMenu];
if(sscanf(inputtext, "f", health))
return ShowPlayerVehicleMenu(playerid, vehicleid);
else if(!IsValidVehicleHealth(health))
return ShowPlayerVehicleMenu(playerid, vehicleid);
SetVehicleHealthEx(vehicleid, health);


if(gVehicle[vehicleid][vID] > 0)
{
new string[41+(-2+MAX_LENGTH_VEHICLE_ID)+(-2+MAX_LENGTH_FLOAT)+1];
format(string, sizeof string, "изменение здоровья транспорта %d на %.2f", gVehicle[vehicleid][vID], health);
CreateAdminLog(playerid, string);
}


ShowPlayerVehicleMenu(playerid, vehicleid);
return 1;
}


(DEBUG DLG_VEH_MENU_DEFAULT_HP не пишется в логах).

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

Ой. Почему-то название не то... Поправьте пожалуйста.

Также присутствуют:


#define ShowPlayerDialog(%0,%1,%2,%3,%4,%5,%6) Dialog_Open(%0,Dialog:%1,%2,%3,%4,%5,%6)
#define DLG DialogResponse

DeimoS
06.07.2018, 12:08
Логируй данные, которые приходят в OnDialogResponse (имя диалога и то, какая строка попадает в CallRemoteFunction) и сверяй их с теми именем, что получается у тебя

Elrmrnt-Kritik
11.07.2018, 22:40
Прошу прощения за задержку. Почему-то всегда одно и то же название передается в CallRemoteFunction. Там в gDialogFunction записывается текст в формате "dre_НАЗВАНИЕ_ДИАЛОГА_ИЗ_КОТОРОГО_Я_ПОПАЛ_В_ЭТОТ".

X!X
11.07.2018, 22:53
В mdialog не showplayerdialog, а - Dialog_Open(playerid, function[], style, caption[], info[], button1[], button2[]);
http://pro-pawn.ru/showthread.php?14311-mdialog&highlight=mdialog - почитай тему

Elrmrnt-Kritik
11.07.2018, 22:56
Не-не, у меня свои макросы :)


#define ShowPlayerDialog(%0,%1,%2,%3,%4,%5,%6) Dialog_Open(%0,Dialog:%1,%2,%3,%4,%5,%6)
#define HidePlayerDialog Dialog_Close
#define DLG DialogResponse

X!X
11.07.2018, 23:07
Не знаю, может в этом дело? Ты вызываешь диалог с ID - DLG_VEH_MENU_DEFAULT, а в DialogResponse указан - DLG_VEH_MENU_DEFAULT_HP

Elrmrnt-Kritik
11.07.2018, 23:09
Там еще есть диалог DLG_VEH_MENU_DEFAULT, в котором идет switch(listitem). В нем уже идет последующий вызов диалога DLG_VEH_MENU_DEFAULT_HP:


case 3: // ремонт
{
ShowPlayerDialog(playerid, DLG_VEH_MENU_DEFAULT_HP, DIALOG_STYLE_INPUT, "{0080BB}Меню транспортного средства", "{FFFFFF}Введите новое количество здоровья для этого транспорта.", "Готово", "Назад");
return 1;
}

DeimoS
12.07.2018, 05:13
https://i.imgur.com/QkrcPPw.png

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

Elrmrnt-Kritik
12.07.2018, 15:40
Было время сегодня еще поковыряться. В общем, все-таки проблемы были в макросе. Не знаю почему, но если вызывать напрямую Dialog_Open, все работает хорошо. В .lst вместо Dialog_Open так и был ShowPlayerDialog. Почему-то макрос не обрабатывался, хоть и стоял в самом начале.

Пришлось заменить свой макрос:

#define ShowPlayerDialog(%0,%1,%2,%3,%4,%5,%6) Dialog_Open(%0,%1,#%2,%3,%4,%5,%6)


Этим:

#define ShowPlayerDialog Dialog_Open


И использую:

ShowPlayerDialog(playerid, #DLG_NULL, DIALOG_STYLE_MSGBOX, "Благодарность", "Спасибо всем участникам данной темы", "Хорошо", "Закрыть");


Спасибо, закройте пожалуйста :blush2: