PDA

Просмотр полной версии : [Вопрос] Огромный listitem в mdialog



Kovshevoy
11.11.2019, 01:33
Вечер добрый, написал значи-ца системку, а были проблемы с диалогом, пока я их не залогировал и получилось что параметр listitem = 4339556
Откуда может получиться такое мифическое число?

DeimoS
11.11.2019, 04:45
Как минимум, стоит скинуть код, который приводит к появлению такого значения.

Вероятнее всего это либо ошибка в самом коде, либо в mdialog.

Kovshevoy
11.11.2019, 12:36
DialogCreate:DIALOG_JOB_AIR_CONTRACT(playerid){
Dialog_Open
(
playerid, #DIALOG_JOB_AIR_CONTRACT, DIALOG_STYLE_MSGBOX,
"{FF9900}Договор",
"Компания предлагает Вам устроится на работу!\n\n"\
"По началу будет предложена низкооплачиваемая работа, но со временем вы сможете повышать уровень квалификации:\n\n\t\t\t"\
"Вариант 1[0 EXP]\n \t\t\t"\
"Вариант 2[400 EXP]\n \t\t\t"\
"Вариант 3[3600 EXP]\n \t\t\t"\
"Вариант 4[7500 EXP]\n \t\t\t"\
"Вариант 5[13000 EXP]\n\n"\
"С момента подписания договора будет фиксироваться Ваш стаж и опыт.\n"\
"Именно благодаря этому Вы и сможете приступать к новым видам работ в будущем.\n\n "\
"Вы согласны с условиями и готовы подписать договор?",
"Подпись", "Нет"
);
}
DialogResponse:DIALOG_JOB_AIR_CONTRACT(playerid, dialogid, response, listitem, inputtext[])
{
if(!response)
return false;

return Dialog_Show(playerid, #DIALOG_JOB_AIR);
}
DialogCreate:DIALOG_JOB_AIR(playerid)
{
new string[512];


format
(
string, sizeof string,
"Вариант 1[%d EXP]\n \t\t\t"\
"Вариант 2[%d EXP]\n \t\t\t"\
"Вариант 3[%d EXP]\n \t\t\t"\
"Вариант 4[%d EXP]\n \t\t\t"\
"Вариант 5[%d EXP]\n\n"\
EXP_1_JOB, EXP_2_JOB, EXP_3_JOB, EXP_4_JOB, EXP_5_JOB
);


Dialog_Open
(
playerid, #DIALOG_JOB_AIR, DIALOG_STYLE_LIST,
"{FF9900}Вакансии",
string,
"Выбрать",
""
);
}
DialogResponse:DIALOG_JOB_AIR(playerid, dialogid, response, listitem, inputtext[])
{
printf("dialogid: %d | response: %d | listitem: %d", dialogid, response, listitem);

if(!response) Dialog_Show(playerid, #DIALOG_JOB_AIR_CARD);

printf("тест 1");
new bool:error_job = false;
printf("тест 2");
if(GetPlayerLevel(playerid) < 2 )
{
SendClientMessage(playerid, -1, "Компания не может принять Вас в связи с минимальным временем проживания Вами в городе.");
SendClientMessage(playerid, -1, "Для устройства в аэропорт необходимо иметь не ниже 2-ого уровня.");
}
printf("тест 3");
if(listitem == 1 && GetPlayerAirEXP(playerid) < EXP_1_JOB ) error_job = true;
if(listitem == 2 && GetPlayerAirEXP(playerid) < EXP_2_JOB ) error_job = true;
if(listitem == 3 && GetPlayerAirEXP(playerid) < EXP_3_JOB ) error_job = true;
if(listitem == 4 && GetPlayerAirEXP(playerid) < EXP_4_JOB ) error_job = true;
printf("тест 4");
if(error_job == true)
{
Dialog_Show(playerid, #DIALOG_JOB_AIR);
SendClientMessage(playerid, -1, "Вынуждены отказать, поскольку Ваш стаж и опыт слишком мал, чтобы доверить Вам данный вид деятельности.");
}
printf("тест 5");
if(GetPlayerJob(playerid) == listitem + 1 )
{
SendClientMessage(playerid, -1, "Вы уже занимаетесь данным видом деятельности.");
Dialog_Show(playerid, #DIALOG_JOB_AIR_CARD);
}
printf("тест 6");
if(GetPlayerJob(playerid) > 5 || GetPlayerJob(playerid) < 1)
{
SendClientMessage(playerid, -1, "Поздравляем! Вы успешно приняты нашей компанией. Можете приступать к работе.");
}
printf("тест 7");
GetPlayerJob(playerid) = listitem + 1;
MySQL_SaveInt(playerid, "job", GetPlayerJob(playerid));
printf("тест 8");
static job_str[22 +1], string[MAX_CHATBUBBLE_LENGTH +1];
job_str[0] = EOS; string[0] = EOS;
printf("тест 9");
switch(GetPlayerJob(playerid))
{
case 1: job_str = "вариант 1";
case 2: job_str = "вариант 2";
case 3: job_str = "вариант 3";
case 4: job_str = "вариант 4";
case 5: job_str = "вариант 5";
default: job_str = "вариант 1";
}
printf("тест 10");
format(string, sizeof string, "Компания допускает Вас к данному виду деятельности. Можете приступать к работе {FFFF00}%s", job_str);
SendClientMessage(playerid, -1, string);
printf("тест 11");
Dialog_Show(playerid, #DIALOG_JOB_AIR_CARD);
}


DialogCreate:DIALOG_JOB_AIR_CARD(playerid)
{
new job_info[22], string[256 +1];

switch(GetPlayerJob(playerid))
{
case 1: job_info = "вариант 1";
case 2: job_info = "вариант 2";
case 3: job_info = "вариант 3";
case 4: job_info = "вариант 4";
case 5: job_info = "вариант 5";
default: job_info = "вариант 1";
}


format
(
string, sizeof string,
"{FFFFFF}Опыт и стаж работы: {FFFF00}%d EXP\n"\
"Вид деятельности: {FF9900}%s\n"\
"{FFFFFF}- {74C2FF}Взять транспорт\n "\
"{FFFFFF}- {CB2D2D}Изменить вид деятельности\n "\
"{FFFFFF}- {74C2FF}Помощь",
GetPlayerAirEXP(playerid), job_info
);
Dialog_Open(playerid, #DIALOG_JOB_AIR_CARD, DIALOG_STYLE_LIST, "{FF9900}Трудовая карточка", string, "Выбрать", "Закрыть");
}
DialogResponse:DIALOG_JOB_AIR_CARD(playerid, dialogid, response, listitem, inputtext[])
{
if(!response)
return 1;


if( listitem == 0 || listitem == 1 )
return Dialog_Show(playerid, #DIALOG_JOB_AIR_CARD);

switch(listitem)
{
case 2:
{
if(GetPlayerJob(playerid) == 1)
{
if(airport_wash == 20)
{
Dialog_Show(playerid, #DIALOG_JOB_AIR_CARD);
SendClientMessage(playerid, -1, "К сожалению весь служебный транспорт на данный момент занят. Ожидайте, пока освободится.");
}
airport_wash++;
printf("тест 20");
}

if(GetPlayerJob(playerid) == 2)
{
if(airport_baggage == 10)
{
Dialog_Show(playerid, #DIALOG_JOB_AIR_CARD);
SendClientMessage(playerid, -1, "К сожалению весь служебный транспорт на данный момент занят. Ожидайте, пока освободится.");
}
airport_baggage++;
}

if( GetPlayerJob(playerid) == 5 )
{
new
bool:result = false;


for(new i; i != sizeof( airport_plane ); i++)
{
if( airport_plane_s[ i ] == 1 )
{
continue;
}
else
{
SetPVarInt( playerid, "airport_status", 5 );
result = true;
airport_plane_s[ i ] = 1;
SetPVarInt( playerid, "airport_plane", airport_plane[ i ] );
break;
}
}


if( result == false )
{
Dialog_Show(playerid, #DIALOG_JOB_AIR_CARD);
SendClientMessage(playerid, -1, "К сожалению весь служебный транспорт на данный момент занят. Ожидайте, пока освободится.");
}


PutPlayerInVehicle( playerid, GetPVarInt( playerid, "airport_plane" ), 0 );


new
engine,lights,alarm,doors,bonnet,boot,objective;


GetVehicleParamsEx( GetPVarInt( playerid, "airport_plane" ), engine,lights,alarm,doors,bonnet,boot,objective );
SetVehicleParamsEx( GetPVarInt( playerid, "airport_plane" ), VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective ), g_vehicle_params[GetPVarInt( playerid, "airport_plane" )][V_ENGINE] = VEHICLE_PARAMS_ON;

SetPlayerRaceCheckpoint(playerid, 2, AIRPORT_LS_NAVZLET_1, AIRPORT_LS_NAVZLET_2, 25.0 );
SetPVarInt( playerid, "farm_point", 1 );
AirportTextDraw( playerid, true );
}


SetPlayerCheckpoint( playerid, AIRPORT_TRANSPORT_POS, 1.7 );
SetPlayerSkin( playerid, 16 );
printf("тест 21");
SetPVarInt( playerid, "farm_point", 1 );
SetPVarInt( playerid, "airport_status", GetPlayerJob(playerid) );


SendClientMessage(playerid, -1, "Мы приготовили для Вас рабочий транспорт. Можете его использовать." );
}
case 3: Dialog_Show(playerid, #DIALOG_JOB_AIR);
case 4:
{
switch(GetPlayerJob(playerid))
{
case 1: Dialog_Open(playerid, #DIALOG_JOB_AIR_INFO, DIALOG_STYLE_MSGBOX, "{FF9900}Информация", HELP_1, "Назад", "" );
case 2: Dialog_Open(playerid, #DIALOG_JOB_AIR_INFO, DIALOG_STYLE_MSGBOX, "{FF9900}Информация", HELP_2, "Назад", "" );
case 3: Dialog_Open(playerid, #DIALOG_JOB_AIR_INFO, DIALOG_STYLE_MSGBOX, "{FF9900}Информация", HELP_3, "Назад", "" );
case 4: Dialog_Open(playerid, #DIALOG_JOB_AIR_INFO, DIALOG_STYLE_MSGBOX, "{FF9900}Информация", HELP_4, "Назад", "" );
case 5: Dialog_Open(playerid, #DIALOG_JOB_AIR_INFO, DIALOG_STYLE_MSGBOX, "{FF9900}Информация", HELP_5, "Назад", "" );
default: Dialog_Open(playerid, #DIALOG_JOB_AIR_INFO, DIALOG_STYLE_MSGBOX, "{FF9900}Информация", HELP_1, "Назад", "" );
}
}
}
return 1;
}

DeimoS
11.11.2019, 13:17
Сделай в самом mdialog логирование listitem и посмотри: такое значение туда приходит изначально или нет.

Kovshevoy
11.11.2019, 14:05
Сделай в самом mdialog логирование listitem и посмотри: такое значение туда приходит изначально или нет.
http://prntscr.com/pvb0t5 - сам диалог предоставленный выше

http://prntscr.com/pvb22o - рега и авторизация

Очень странное дерьмо, он всегда показывает 32700?

DeimoS
11.11.2019, 14:10
Так а где информация из mdialog для диалога DIALOG_JOB_AIR?
Скинь нормально код логирования mdialog + полный лог сессии.

Kovshevoy
11.11.2019, 14:20
[13:19:16] dialogid: 32700 | response: 1 | listitem: -1
[13:19:19] dialogid: 32700 | response: 1 | listitem: 0
[13:19:19] DIALOG_JOB_AIR | dialogid: 1 | response: 0 | listitem: 5030368
[13:19:19] тест 1
[13:19:19] тест 2
[13:19:19] тест 3
[13:19:19] тест 4
[13:19:19] тест 5
[13:19:19] тест 6
[13:19:19] тест 7
[13:19:19] тест 8
[13:19:19] тест 9
[13:19:19] тест 10
[13:19:19] тест 11
[13:19:21] dialogid: 32700 | response: 1 | listitem: 2
[13:19:21] DIALOG_JOB_AIR_CARD | dialogid: 1 | response: 2 | listitem: 5030376


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

crashdetect если что - подключен, но от него нет никаких сообщений. Компилирую как и нужно с ключем -d3

vvw
11.11.2019, 14:35
[13:19:16] dialogid: 32700 | response: 1 | listitem: -1
[13:19:19] dialogid: 32700 | response: 1 | listitem: 0
[13:19:19] DIALOG_JOB_AIR | dialogid: 1 | response: 0 | listitem: 5030368
[13:19:19] тест 1
[13:19:19] тест 2
[13:19:19] тест 3
[13:19:19] тест 4
[13:19:19] тест 5
[13:19:19] тест 6
[13:19:19] тест 7
[13:19:19] тест 8
[13:19:19] тест 9
[13:19:19] тест 10
[13:19:19] тест 11
[13:19:21] dialogid: 32700 | response: 1 | listitem: 2
[13:19:21] DIALOG_JOB_AIR_CARD | dialogid: 1 | response: 2 | listitem: 5030376


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

crashdetect если что - подключен, но от него нет никаких сообщений. Компилирую как и нужно с ключем -d3

Почему у вас dialogid для DIALOG_JOB_AIR_CARD и DIALOG_JOB_AIR равен 1? Если вы используете mdialog, то он всегда должен быть 32700.

Kovshevoy
11.11.2019, 14:38
Почему у вас dialogid для DIALOG_JOB_AIR_CARD и DIALOG_JOB_AIR равен 1? Если вы используете mdialog, то он всегда должен быть 32700.
Потому что логирую непосредственно в DialogResponse: данных диалогов и так же в самом инклуде, дабы сравнить значения. И вижу, что они отличаются друг от друга, но почему - не знаю.

Kovshevoy
11.11.2019, 19:10
Лол, конструкция DialogResponse неверная :D
Необходимо (playerid, response, listitem, inputtext[])
А я видимо по глупости скопировал с OnDialogResponse аргументы, ибо dialogid не должен там быть. Сейчас протестирую, в очередной раз убеждаюсь, что нужно больше спать и есть чернику, которая нормальному зрению способствует.
Благодарочка f0Re3t за подсказку.