PDA

Просмотр полной версии : [Include] mdialog



ziggi
20.09.2016, 13:48
mdialog
GitHub (https://github.com/Open-GTO/mdialog)

Описание
Библиотека, которая даёт возможность организовать код диалогов в стиле zcmd.

Функции
Открыть диалог
Dialog_Open(playerid, function[], style, caption[], info[], button1[], button2[]);

Закрыть диалог
Dialog_Close(playerid);

Статус открытости диалога
Dialog_IsOpen(playerid);

Открыть специально подготовленный диалог
Dialog_Show(playerid, function[]);

Открыть диалог сообщения
Dialog_Message(playerid, caption[], info[], button1[]);

Открыть диалог сообщения с собственным обработчиком нажатия
Dialog_MessageEx(playerid, response[], caption[], info[], button1[], button2[]);

Поддержка zlang (http://pro-pawn.ru/showthread.php?14265)
Если перед подключением mdialog задефайнить MDIALOG_ZLANG_MODE то некоторые функции приобретут новый вид.

Открыть диалог
Dialog_Open(playerid, function[], style, caption[], info[], button1[], button2[], {Float, _}:...);

Открыть диалог сообщения
Dialog_Message(playerid, caption[], info[], button1[], {Float, _}:...);

Открыть диалог сообщения с собственным обработчиком нажатия
Dialog_MessageEx(playerid, response[], caption[], info[], button1[], button2[], {Float, _}:...);

Поддержка тэгов
Вы можете использовать теги для стилизации вашего текста:




Тег

Описание


\\c
Центрирует текст


\\r
Выравнивает текст по правому краю



https://user-images.githubusercontent.com/1020099/30522188-aac33382-9bd4-11e7-9d78-92b240309931.png

Использование
Вы можете использовать DialogCreate: и DialogResponse: префиксы:
DialogCreate:test(playerid)
{
Dialog_Open(playerid, Dialog:test, DIALOG_STYLE_MSGBOX,
"Hello",
"Are you ok?",
"Yes", "No");
}

DialogResponse:test(playerid, response, listitem, inputtext[])
{
if (!response) {
SendClientMessage(playerid, -1, "This club only for OK guys!");
Dialog_Show(playerid, Dialog:test);
return 1;
}

SendClientMessage(playerid, -1, "Welcome to the club");
return 1;
}

Использовать DialogCreate: не обязательно, можно напрямую вызывать диалог с помощью Dialog_Open. Использование DialogCreate полностью себя оправдывает при создании вложенных диалогов, где один и тот же диалог приходится вызывать более, чем один раз. Да и в целом код читать удобнее, когда функция создания и функция обработки располагаются рядом.

Использование в режиме zlang
Использование библиотеки в режиме zlang немного отличается:
#define MDIALOG_ZLANG_MODE
#include "mdialog"

DialogCreate:test(playerid)
{
Dialog_Open(playerid, Dialog:test, DIALOG_STYLE_MSGBOX,
"Hello",
"LANG_ARE_YOU_OK",
"Yes", "BUTTON_NO",
playerid);
}

DialogResponse:test(playerid, response, listitem, inputtext[])
{
if (!response) {
SendClientMessage(playerid, -1, "This club only for OK guys!");
Dialog_Show(playerid, Dialog:test);
return 1;
}

SendClientMessage(playerid, -1, "Welcome to the club");
return 1;
}

Содержимое языкового файла:
LANG_ARE_YOU_OK = Hey id %d, are you ok?
BUTTON_NO = No

Скачать

Последнюю версию вы всегда можете найти на странице релизов GitHub (https://github.com/Open-GTO/mdialog/releases).

ziggi
17.09.2017, 19:28
mdialog v1.2.0

Теперь вы можете использовать теги для стилизации вашего текста:




Тег

Описание


\\c
Центрирует текст


\\r
Выравнивает текст по правому краю



https://user-images.githubusercontent.com/1020099/30522188-aac33382-9bd4-11e7-9d78-92b240309931.png

ziggi
17.09.2017, 21:18
Забыл написать об отличиях последнего обновления от всем известной Dialog Center Text (http://forum.sa-mp.com/showthread.php?t=625090):
- Намного более оптимальный алгоритм и чистый код (в 2 раза меньше строк, меньше циклов, вызовов функций, нет goto).
- Более точные размеры символов (используются Float значения).
- Поддержка всех символов Windows-1251.
- Возможность выровнять текст по правой границе.
- Нет поддержки управления заголовками (может быть потом реализую).

vasyok28
18.09.2017, 00:58
Как будет себя вести на разных расширениях мониторов ?

ziggi
18.09.2017, 08:32
Как будет себя вести на разных расширениях мониторов ?

Должно быть одинаково. Проблемы могут возникнуть при изменении шрифта.

vasyok28
18.09.2017, 10:13
Еще такой вопрос табуляцию пофиксили ?

ziggi
18.09.2017, 12:24
Еще такой вопрос табуляцию пофиксили ?

Ширина табов меняется в зависимости от длины строки, это очень сильно усложняет процесс расчёта длины строки. И я не уверен, возможно ли это реализовать. Если научусь высчитывать длину табов, то реализую.

Mr_LemoneZ
18.09.2017, 20:59
При использовании в Linux на чистом сервере возникает ошибка в функции _MDialog_ProcessTags:

[19:50:01] [debug] Server crashed while executing test.amx
[19:50:01] [debug] AMX backtrace:
[19:50:01] [debug] #0 native strfind () from samp03svr
[19:50:01] [debug] #1 00000a40 in _MDialog_ProcessTags (info[]=@0000dedc "Test", result_info[]=@000094b8 "Test", size_info=4096) at ../include/mdialog.inc:671
[19:50:01] [debug] #2 00000338 in _Dialog_Open (playerid=0, function[]=@0000d4b8 "Message", style=0, caption[]=@0000dec8 "Test", info[]=@0000dedc "Test", button1[]=@0000def0 "OK", button2[]=@0000d4d8 "") at ../include/mdialog.inc:382
[19:50:01] [debug] #3 000004a4 in Dialog_Message (playerid=0, caption[]=@0000dec8 "Test", info[]=@0000dedc "Test", button1[]=@0000def0 "OK") at ../include/mdialog.inc:517
[19:50:01] [debug] #4 0000158c in public OnPlayerRequestClass (playerid=0, classid=1) at /home/lemonez/Pawn/samp03/gamemodes/test.pwn:9
[19:50:01] [debug] Native backtrace:
[19:50:01] [debug] #0 b72da180 in _Z13GetStackTraceRSt6vectorI10StackFrameSaIS0_EEPv () from plugins/crashdetect.so
[19:50:01] [debug] #1 b72d2064 in _ZN11CrashDetect20PrintNativeBacktraceERSoRKN2os7ContextE () from plugins/crashdetect.so
[19:50:01] [debug] #2 b72d2d64 in _ZN11CrashDetect20PrintNativeBacktraceERKN2os7ContextE () from plugins/crashdetect.so
[19:50:01] [debug] #3 b72d4cdb in _ZN11CrashDetect7OnCrashERKN2os7ContextE () from plugins/crashdetect.so
[19:50:01] [debug] #4 b72d94d5 in ?? () from plugins/crashdetect.so
[19:50:01] [debug] #5 b76dfc20 in ?? ()
[19:50:01] [debug] #6 b76dfc31 in ?? ()
[19:50:01] [debug] #7 b732eea9 in gsignal () from /lib/i386-linux-gnu/libc.so.6
[19:50:01] [debug] #8 b7330407 in abort () from /lib/i386-linux-gnu/libc.so.6
[19:50:01] [debug] #9 b7327d07 in ?? () from /lib/i386-linux-gnu/libc.so.6
[19:50:01] [debug] #10 b7327d8b in ?? () from /lib/i386-linux-gnu/libc.so.6
[19:50:01] [debug] #11 0809d27f in ?? () from ./samp03svr
[19:50:01] [debug] #12 0809d432 in ?? () from ./samp03svr
[19:50:01] [debug] #13 080950e4 in ?? () from ./samp03svr
[19:50:01] [debug] #14 b72d3ad3 in _ZN11CrashDetect17HandleAMXCallbackEiPiS0_ () from plugins/crashdetect.so
[19:50:01] [debug] #15 00000002 in ?? () from H·i·|µi·ґES ґES µGS ґES sIS ґIS T
[19:50:01] [debug] j·
[19:50:01] [debug] Registers:
[19:50:01] [debug] EAX: 00000000 EBX: 00003261 ECX: 00003261 EDX: 00000006
[19:50:01] [debug] ESI: b76da000 EDI: bf9b1ed4 EBP: bf9b1fe8 ESP: bf9b1e18
[19:50:01] [debug] EIP: b76dfc31 EFLAGS: 00000202
[19:50:01] [debug] Stack:
[19:50:01] [debug] ESP+00000000: bf9b1fe8 00000006 00003261 b732eea9
[19:50:01] [debug] ESP+00000020: 00000000 b74b5000 0000004c 0000004d
[19:50:01] [debug] ESP+00000040: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+00000060: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+00000080: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+000000a0: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+000000c0: bf9b1ef0 08049bfb 00000000 00000004
[19:50:01] [debug] ESP+000000e0: b7373f00 b7374470 bf9b1e90 b746228c
[19:50:01] [debug] ESP+00000100: 00000010 00000000 b736b1d7 b74b5000
[19:50:01] [debug] ESP+00000120: b73e5c84 b74b5000 b74b5cc0 b74b5cc0
[19:50:01] [debug] ESP+00000140: bf9b1fe8 b7327cff b73302b7 b74b5000
[19:50:01] [debug] ESP+00000160: 09393a70 00001000 b74b5000 00000000
[19:50:01] [debug] ESP+00000180: 08158eb9 00000128 08158feb b7462224
[19:50:01] [debug] ESP+000001a0: 00000000 0809d27f 08158ef4 08158eb9
[19:50:01] [debug] ESP+000001c0: 0952bb5c ffffffff 00000000 09522aac
[19:50:01] [debug] ESP+000001e0: ffffffff 09520f50 00000004 00000002
[19:50:01] [debug] ESP+00000200: 0952bb5c 09520f50 00000050 0951fd70
[19:50:01] [debug] ESP+00000220: 00000000 b72cb14a bf9b2150 00000000
[19:50:01] [debug] ESP+00000240: bf9b23a8 b72d3ad3 0951fd70 00000007
[19:50:01] [debug] ESP+00000260: 00000000 00000000 2e332e30 00000037
[19:50:01] [debug] ESP+00000280: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+000002a0: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+000002c0: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+000002e0: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+00000300: 00000000 00000000 00000000 00000010
[19:50:01] [debug] ESP+00000320: 00000000 00000004 00000000 00000000
[19:50:01] [debug] ESP+00000340: 00011e88 00000a40 00000007 0951fd70
[19:50:01] [debug] ESP+00000360: b7372079 b74b5780 b74b5000 00000004
[19:50:01] [debug] ESP+00000380: 00000000 b72feff4 0951fd70 0945aa90
[19:50:01] [debug] ESP+000003a0: bf9b224c 09534518 00000004 00000000
[19:50:01] [debug] ESP+000003c0: bf9b2208 0951fd70 0951fd70 09521b50
[19:50:01] [debug] ESP+000003e0: bf9b224c 09534518 09389bbc 00000008
[19:50:01] [debug] Loaded modules:
[19:50:01] [debug] 00000000 - 00187f43 samp03svr
[19:50:01] [debug] b76df000 - b76dfd72
[19:50:01] [debug] b76bf000 - b76c1a04 /lib/i386-linux-gnu/libdl.so.2
[19:50:01] [debug] b76a2000 - b76bd6ef /lib/i386-linux-gnu/libpthread.so.0
[19:50:01] [debug] b752b000 - b76abb4b /usr/lib/i386-linux-gnu/libstdc++.so.6
[19:50:01] [debug] b74d6000 - b752a010 /lib/i386-linux-gnu/libm.so.6
[19:50:01] [debug] b74b9000 - b74d51e4 /lib/i386-linux-gnu/libgcc_s.so.1
[19:50:01] [debug] b7303000 - b74bfb07 /lib/i386-linux-gnu/libc.so.6
[19:50:01] [debug] b76e0000 - b7703784 /lib/ld-linux.so.2
[19:50:01] [debug] b72bc000 - b72feac4 plugins/crashdetect.so
[19:50:01] [debug] b7282000 - b72932ec /lib/i386-linux-gnu/libnss_files.so.2

ziggi
18.09.2017, 22:12
При использовании в Linux на чистом сервере возникает ошибка в функции _MDialog_ProcessTags:

[19:50:01] [debug] Server crashed while executing test.amx
[19:50:01] [debug] AMX backtrace:
[19:50:01] [debug] #0 native strfind () from samp03svr
[19:50:01] [debug] #1 00000a40 in _MDialog_ProcessTags (info[]=@0000dedc "Test", result_info[]=@000094b8 "Test", size_info=4096) at ../include/mdialog.inc:671
[19:50:01] [debug] #2 00000338 in _Dialog_Open (playerid=0, function[]=@0000d4b8 "Message", style=0, caption[]=@0000dec8 "Test", info[]=@0000dedc "Test", button1[]=@0000def0 "OK", button2[]=@0000d4d8 "") at ../include/mdialog.inc:382
[19:50:01] [debug] #3 000004a4 in Dialog_Message (playerid=0, caption[]=@0000dec8 "Test", info[]=@0000dedc "Test", button1[]=@0000def0 "OK") at ../include/mdialog.inc:517
[19:50:01] [debug] #4 0000158c in public OnPlayerRequestClass (playerid=0, classid=1) at /home/lemonez/Pawn/samp03/gamemodes/test.pwn:9
[19:50:01] [debug] Native backtrace:
[19:50:01] [debug] #0 b72da180 in _Z13GetStackTraceRSt6vectorI10StackFrameSaIS0_EEPv () from plugins/crashdetect.so
[19:50:01] [debug] #1 b72d2064 in _ZN11CrashDetect20PrintNativeBacktraceERSoRKN2os7ContextE () from plugins/crashdetect.so
[19:50:01] [debug] #2 b72d2d64 in _ZN11CrashDetect20PrintNativeBacktraceERKN2os7ContextE () from plugins/crashdetect.so
[19:50:01] [debug] #3 b72d4cdb in _ZN11CrashDetect7OnCrashERKN2os7ContextE () from plugins/crashdetect.so
[19:50:01] [debug] #4 b72d94d5 in ?? () from plugins/crashdetect.so
[19:50:01] [debug] #5 b76dfc20 in ?? ()
[19:50:01] [debug] #6 b76dfc31 in ?? ()
[19:50:01] [debug] #7 b732eea9 in gsignal () from /lib/i386-linux-gnu/libc.so.6
[19:50:01] [debug] #8 b7330407 in abort () from /lib/i386-linux-gnu/libc.so.6
[19:50:01] [debug] #9 b7327d07 in ?? () from /lib/i386-linux-gnu/libc.so.6
[19:50:01] [debug] #10 b7327d8b in ?? () from /lib/i386-linux-gnu/libc.so.6
[19:50:01] [debug] #11 0809d27f in ?? () from ./samp03svr
[19:50:01] [debug] #12 0809d432 in ?? () from ./samp03svr
[19:50:01] [debug] #13 080950e4 in ?? () from ./samp03svr
[19:50:01] [debug] #14 b72d3ad3 in _ZN11CrashDetect17HandleAMXCallbackEiPiS0_ () from plugins/crashdetect.so
[19:50:01] [debug] #15 00000002 in ?? () from H·i·|µi·ґES ґES µGS ґES sIS ґIS T
[19:50:01] [debug] j·
[19:50:01] [debug] Registers:
[19:50:01] [debug] EAX: 00000000 EBX: 00003261 ECX: 00003261 EDX: 00000006
[19:50:01] [debug] ESI: b76da000 EDI: bf9b1ed4 EBP: bf9b1fe8 ESP: bf9b1e18
[19:50:01] [debug] EIP: b76dfc31 EFLAGS: 00000202
[19:50:01] [debug] Stack:
[19:50:01] [debug] ESP+00000000: bf9b1fe8 00000006 00003261 b732eea9
[19:50:01] [debug] ESP+00000020: 00000000 b74b5000 0000004c 0000004d
[19:50:01] [debug] ESP+00000040: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+00000060: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+00000080: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+000000a0: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+000000c0: bf9b1ef0 08049bfb 00000000 00000004
[19:50:01] [debug] ESP+000000e0: b7373f00 b7374470 bf9b1e90 b746228c
[19:50:01] [debug] ESP+00000100: 00000010 00000000 b736b1d7 b74b5000
[19:50:01] [debug] ESP+00000120: b73e5c84 b74b5000 b74b5cc0 b74b5cc0
[19:50:01] [debug] ESP+00000140: bf9b1fe8 b7327cff b73302b7 b74b5000
[19:50:01] [debug] ESP+00000160: 09393a70 00001000 b74b5000 00000000
[19:50:01] [debug] ESP+00000180: 08158eb9 00000128 08158feb b7462224
[19:50:01] [debug] ESP+000001a0: 00000000 0809d27f 08158ef4 08158eb9
[19:50:01] [debug] ESP+000001c0: 0952bb5c ffffffff 00000000 09522aac
[19:50:01] [debug] ESP+000001e0: ffffffff 09520f50 00000004 00000002
[19:50:01] [debug] ESP+00000200: 0952bb5c 09520f50 00000050 0951fd70
[19:50:01] [debug] ESP+00000220: 00000000 b72cb14a bf9b2150 00000000
[19:50:01] [debug] ESP+00000240: bf9b23a8 b72d3ad3 0951fd70 00000007
[19:50:01] [debug] ESP+00000260: 00000000 00000000 2e332e30 00000037
[19:50:01] [debug] ESP+00000280: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+000002a0: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+000002c0: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+000002e0: 00000000 00000000 00000000 00000000
[19:50:01] [debug] ESP+00000300: 00000000 00000000 00000000 00000010
[19:50:01] [debug] ESP+00000320: 00000000 00000004 00000000 00000000
[19:50:01] [debug] ESP+00000340: 00011e88 00000a40 00000007 0951fd70
[19:50:01] [debug] ESP+00000360: b7372079 b74b5780 b74b5000 00000004
[19:50:01] [debug] ESP+00000380: 00000000 b72feff4 0951fd70 0945aa90
[19:50:01] [debug] ESP+000003a0: bf9b224c 09534518 00000004 00000000
[19:50:01] [debug] ESP+000003c0: bf9b2208 0951fd70 0951fd70 09521b50
[19:50:01] [debug] ESP+000003e0: bf9b224c 09534518 09389bbc 00000008
[19:50:01] [debug] Loaded modules:
[19:50:01] [debug] 00000000 - 00187f43 samp03svr
[19:50:01] [debug] b76df000 - b76dfd72
[19:50:01] [debug] b76bf000 - b76c1a04 /lib/i386-linux-gnu/libdl.so.2
[19:50:01] [debug] b76a2000 - b76bd6ef /lib/i386-linux-gnu/libpthread.so.0
[19:50:01] [debug] b752b000 - b76abb4b /usr/lib/i386-linux-gnu/libstdc++.so.6
[19:50:01] [debug] b74d6000 - b752a010 /lib/i386-linux-gnu/libm.so.6
[19:50:01] [debug] b74b9000 - b74d51e4 /lib/i386-linux-gnu/libgcc_s.so.1
[19:50:01] [debug] b7303000 - b74bfb07 /lib/i386-linux-gnu/libc.so.6
[19:50:01] [debug] b76e0000 - b7703784 /lib/ld-linux.so.2
[19:50:01] [debug] b72bc000 - b72feac4 plugins/crashdetect.so
[19:50:01] [debug] b7282000 - b72932ec /lib/i386-linux-gnu/libnss_files.so.2

Пример передаваемой строки можно?

Mr_LemoneZ
20.09.2017, 19:30
Пример передаваемой строки можно?

Да тот же «Test».

Если убрать атрибут static у функции _MDialog_ProcessTags и вызвать её напрямую, то проблем не возникает.
Хотя нет, если массив, в который будет передаваться обработанный текст объявить не как new, а как static, сервер падает. Соответственно после того, как в функции _Dialog_Open массив info_result я объявил как new, то всё стало ОК. (Правда это ооочень затратно...)

P. S. В терминале при падении сервера получаю вот это:
samp03svr: amx/amxstring.c:296: compare: Assertion `c1!=0 && c2!=0' failed.

ziggi
20.09.2017, 20:27
Да тот же «Test».

Если убрать атрибут static у функции _MDialog_ProcessTags и вызвать её напрямую, то проблем не возникает.
Хотя нет, если массив, в который будет передаваться обработанный текст объявить не как new, а как static, сервер падает. Соответственно после того, как в функции _Dialog_Open массив info_result я объявил как new, то всё стало ОК. (Правда это ооочень затратно...)

P. S. В терминале при падении сервера получаю вот это:
samp03svr: amx/amxstring.c:296: compare: Assertion `c1!=0 && c2!=0' failed.

Поправил: https://github.com/Open-GTO/mdialog/commit/64752a4bf12bd95afa0e3b7ce6df5682c0e8aba2

alonso
25.09.2017, 05:09
Как я могу применить данные действия с использованием mdialog?
Пример:

ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, "...", "....", "....", "....");
OnDialogResponse(...)
{
switch(dialogid)
{
case dialogid:
{
if(!response) return 0;
if(strlen(inputtext))
return ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, "Ошибка", "....", "Повтор", ""); // при нажатии на повтор, я вернусь к диалогу
//dialogid, но не могу добиться того же результат с инклудом mdialog.
//Могу ли я применить это действие с инклудом без использования DialogCreate и DialogResponse
}
}
}

ziggi
25.09.2017, 08:50
Как я могу применить данные действия с использованием mdialog?
Пример:

ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, "...", "....", "....", "....");
OnDialogResponse(...)
{
switch(dialogid)
{
case dialogid:
{
if(!response) return 0;
if(strlen(inputtext))
return ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, "Ошибка", "....", "Повтор", ""); // при нажатии на повтор, я вернусь к диалогу
//dialogid, но не могу добиться того же результат с инклудом mdialog.
//Могу ли я применить это действие с инклудом без использования DialogCreate и DialogResponse
}
}
}

Действия по выравниванию? Никак, будет время - я вынесу этот функционал в отдельную библиотеку.

Алинка
03.10.2017, 01:27
ПО инструкции нифига не понятно какое имя должно быть у языкового файла:dash2:

ziggi
03.10.2017, 10:59
ПО инструкции нифига не понятно какое имя должно быть у языкового файла:dash2:

Библиотека может работать и без zlang, а тема по zlang здесь: http://pro-pawn.ru/showthread.php?14265

alonso
05.03.2018, 16:12
Можно пример с Dialog_MessageEx?

ziggi
05.03.2018, 19:17
Можно пример с Dialog_MessageEx?

Обычно это удобно использовать для информационных сообщений с двумя кнопками "Выход" и "Назад".
Пример можно посмотреть здесь: https://github.com/Open-GTO/Open-GTO/blob/63a52303bec9212535a2d38eb8d6e59438f1e5e2/sources/player/player_menu_teleport.pwn#L73-L131

Kovshevoy
18.07.2019, 19:10
/dell

Unreal
31.03.2020, 21:15
Было бы здорово если добавите в Dialog_Message дефолтный колор

Что-бы каждый раз не писать {ffffff}
Dialog_Message(playerid, "Проверьте вашу почту", "{ffffff}Мы отправили новый пароль вам на почту", "Закрыть");

Nexius_Tailer
01.04.2020, 14:02
Было бы здорово если добавите в Dialog_Message дефолтный колор

Что-бы каждый раз не писать {ffffff}
Dialog_Message(playerid, "Проверьте вашу почту", "{ffffff}Мы отправили новый пароль вам на почту", "Закрыть");
Сам параметр будет полезным, но в качестве дефолтного значения в самом инклуде его придётся заполнить именно тем цветом, который ставит по умолчанию самп (а для этого его нужно будет как-то поточнее подобрать).

А, ну хотя проблемы никакой нет сделать передачу пустой строки как сигнал того, что никакой цвет применять не нужно.

MassonNN
24.04.2020, 15:13
хорошая и простая реализация, гораздо лучше аналогов

punkochel
09.06.2020, 11:59
Начиная с версии 1.4.0 в моде появляется рекурсия

recursion detected: function Dialog_Close indirectly calls itself:
Dialog_Close <- MDialog_ShowPlayerDialog <- Dialog_Close
recursion detected: function Dialog_Interrupt indirectly calls itself:
Dialog_Interrupt <- Dialog_Close <- MDialog_ShowPlayerDialog <- Dialog_Interrupt
recursion detected: function Dialog_IsOpen indirectly calls itself:
Dialog_IsOpen <- FIXES_OnDialogResponse <- Dialog_IsOpen
recursion detected: function FIXES_ShowPlayerDialog indirectly calls itself:
FIXES_ShowPlayerDialog <- MDialog_ShowPlayerDialog <- Dialog_Close <- FIXES_ShowPlayerDialog
recursion detected: function FIXES_strcmp directly calls itself
recursion detected: function MDialog_ShowPlayerDialog indirectly calls itself:
MDialog_ShowPlayerDialog <- Dialog_Close <- MDialog_ShowPlayerDialog

На new.pwn результат тот-же, за исключением:

recursion detected: function FIXES_ShowPlayerDialog indirectly calls itself:
FIXES_ShowPlayerDialog <- MDialog_ShowPlayerDialog <- Dialog_Close <- FIXES_ShowPlayerDialog
recursion detected: function FIXES_strcmp directly calls itself


При всем при этом не работает вызов DialogInterrupt:

CMD:test(playerid)
{
SendClientMessage(id, -1, mes);*/
Dialog_Show(playerid, Dialog:test);
return 1;
}
DialogCreate:test(playerid)
{
Dialog_Open(playerid, Dialog:test, DIALOG_STYLE_MSGBOX,
"Hello",
"Are you ok?",
"Yes", "No");
}

DialogResponse:test(playerid, response, listitem, inputtext[])
{
if (!response) {
SendClientMessage(playerid, -1, "This club only for OK guys!");
return 1;
}

SendClientMessage(playerid, -1, "Welcome to the club");
return 1;
}

DialogInterrupt:test(playerid)
{
SendClientMessage(playerid, -1, "Dialog \"test\" was closed by Dialog_Close or by opening other dialog");
return 1;
}

UPD:

Решение проблемы с рекурсией:

Было:
stock MDialog_ShowPlayerDialog(playerid, dialogid, style, const caption[], const info[], const button1[], const button2[])
{
if (dialogid != -1 && dialogid != MDIALOG_DIALOG_ID) {
if (Dialog_IsOpen(playerid, gDialogFunction[playerid])) {
Dialog_Close(playerid, gDialogFunction[playerid][4], false);
}
}

return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
}
#if defined _ALS_ShowPlayerDialog
#undef ShowPlayerDialog
#else
#define _ALS_ShowPlayerDialog
#endif

#define ShowPlayerDialog MDialog_ShowPlayerDialog

Стало:
stock MDialog_ShowPlayerDialog(playerid, dialogid, style, const caption[], const info[], const button1[], const button2[])
{
if (dialogid != -1 && dialogid != MDIALOG_DIALOG_ID) {
if (Dialog_IsOpen(playerid, gDialogFunction[playerid][4])) {
Dialog_Interrupt(playerid, gDialogFunction[playerid][4]);
}
}

return ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
}
#if defined _ALS_ShowPlayerDialog
#undef ShowPlayerDialog
#else
#define _ALS_ShowPlayerDialog
#endif

#define ShowPlayerDialog MDialog_ShowPlayerDialog

Решение проблемы с неработоспособностью DialogInterrupt:

Было:
static stock _Dialog_Open(playerid, const function[], style, const caption[], const info[], const button1[], const button2[])
{
if (Dialog_IsOpen(playerid, gDialogFunction[playerid])) {
Dialog_Interrupt(playerid, gDialogFunction[playerid][4]);
}

gIsDialogOpen{playerid} = true;

gDialogFunction[playerid] = "dre_";
strcat(gDialogFunction[playerid], function, sizeof(gDialogFunction[]));

switch (style) {
case DIALOG_STYLE_MSGBOX, DIALOG_STYLE_INPUT, DIALOG_STYLE_PASSWORD: {
#if defined MDIALOG_DISABLE_TAGS
return ShowPlayerDialog(playerid, MDIALOG_DIALOG_ID, style, caption, info, button1, button2);
#else
static info_result[MDIALOG_MAX_INFO_SIZE];
_MDialog_ProcessTags(info, info_result);
return ShowPlayerDialog(playerid, MDIALOG_DIALOG_ID, style, caption, info_result, button1, button2);
#endif
}
}

return ShowPlayerDialog(playerid, MDIALOG_DIALOG_ID, style, caption, info, button1, button2);
}

Стало:
static stock _Dialog_Open(playerid, const function[], style, const caption[], const info[], const button1[], const button2[])
{
gIsDialogOpen{playerid} = true;
if (Dialog_IsOpen(playerid, gDialogFunction[playerid][4])) {
Dialog_Interrupt(playerid, gDialogFunction[playerid][4]);
}

gDialogFunction[playerid] = "dre_";
strcat(gDialogFunction[playerid], function, sizeof(gDialogFunction[]));

switch (style) {
case DIALOG_STYLE_MSGBOX, DIALOG_STYLE_INPUT, DIALOG_STYLE_PASSWORD: {
#if defined MDIALOG_DISABLE_TAGS
return ShowPlayerDialog(playerid, MDIALOG_DIALOG_ID, style, caption, info, button1, button2);
#else
static info_result[MDIALOG_MAX_INFO_SIZE];
_MDialog_ProcessTags(info, info_result);
return ShowPlayerDialog(playerid, MDIALOG_DIALOG_ID, style, caption, info_result, button1, button2);
#endif
}
}

return ShowPlayerDialog(playerid, MDIALOG_DIALOG_ID, style, caption, info, button1, button2);
}

PS: Дорабатывалась версия mdialog v1.4.1 (https://github.com/Open-GTO/mdialog/releases/tag/v1.4.1)