eDialog -> Экспериментальный диалоговый процессор
Инклуд позволяет использовать вызов диалога в форме:
ShowPlayerDialog(playerid, DIALOG_NAME, response, listitem, inputtext[]);
при этом DIALOG_NAME не требует объявления,
и вызывется напрямую, обходя перебор dialogid.
Все названия диалогов пишутся цифрами, либо буквами без кавычек.
Использование инклуда:
DLG:DIALOG_NAME(playerid, response, listitem, inputtext)
DIALOG:DIALOG_NAME(playerid, response, listitem, inputtext)
E_DLG:DIALOG_NAME()
ShowInfoDialog(playerid, caption[], info[]); // Информационное окно
Коллбэки:
OnDialogResponseError(playerid, dialogid, response, listitem, inputtext[]); // Напишет в консоль данные в случае несовпадения dialogid
Примеры использования:
PHP код:
else if (strcmp("/dlg", cmdtext, true, 10) == 0)
{
ShowPlayerDialog(playerid, D_TEST1, DIALOG_STYLE_MSGBOX, "Тестовый диалог", "{ffffff}Диалог {00ff00}№1 {ffffff}вызвался!", "Второй", "Закрыть");
return 1;
}
В свободном месте мода обозначается сам диалог:
PHP код:
DLG:D_TEST1(playerid, response, listitem, inputtext[])
{
if(!response) return 1;
return ShowPlayerDialog(playerid, D_TEST2, DIALOG_STYLE_MSGBOX, "Тестовый диалог", "{ffffff}Диалог {0000ff}№2 {ffffff}вызвался!", "Первый", "Закрыть");
}
DLG:D_TEST2(playerid, response, listitem, inputtext[])
{
if(!response) return 1;
return ShowPlayerDialog(playerid, D_TEST1, DIALOG_STYLE_MSGBOX, "Тестовый диалог", "{ffffff}Диалог {00ff00}№1 {ffffff}вызвался!", "Второй", "Закрыть");
}
Открыть/закрыть
Тест скорости
Тест реализован на цикле в 100000 итераций, в которых сначала показывается диалог, а после вызывается OnDialogResponse.
Для стандартного движка создано 200 простых диалогов в OnDialogResponse
Сами замеры:
Код HTML:
'ShowPlayerDialog' productiveness Test result:
ShowPlayerDialog = 439ms
OnDialogResponse = 303ms
// И ещё раз
'ShowPlayerDialog' productiveness Test result:
ShowPlayerDialog = 416ms
OnDialogResponse = 311ms
//=================
eDialog include productiveness Test result:
ShowPlayerDialog = 533ms
OnDialogResponse = 74ms
// И ещё раз
eDialog include productiveness Test result:
ShowPlayerDialog = 573ms
OnDialogResponse = 65ms
Как мы видим из теста, процессор слегка проигрывает стандартному ShowPlayerDialog при вызове диалога, из-за получения индексирования функций и короткой работы с массивами, но результаты обработки колоссально от него отличаются: они превосходят его по скорости в 4-5 раз.
Открыть/закрыть
Коды файлов, использованных для теста:
PasteBin
Текущая версия инклуда: 3.0
Скачать инклуд можно по ссылке: eDialog.inc
PasteBin
Автор: Edwin, то есть я. Копирование на других сайтах без подписи автора - подсудное дело