PDA

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



VVWVV
11.12.2016, 20:06
TDW Dialog library
библиотека для удобной работы с диалогами


Описание
Библиотека разработана для удобной работы с обычными диалогами. Теперь появилась возможность обрабатывать значения диалогов в отдельных друг от друга функциях. Данная возможность обеспечивает достаточно хорошую читаемость. Кроме того, данная библиотека поддерживает и другие библиотеки, например, библиотеку y_hooks (из проекта YSI).

Документация
Создание обработчика
Особенностью данной библиотеки является её синтаксис. Он достаточно гибкий, поскольку в любой момент можно добавить собственный функционал.


dialog [<атрибуты>] название_функции(аргументы)
{
// код..
}


Квадратные скобки и атрибуты в них могут не использоваться.
Вместо "dialog" можно использовать "Dialog:", "DialogResponse:".
Доступные атрибуты:
hook
nohook
template - генерирует функцию-шаблон.

Добавление нового атрибута
Для добавления нового атрибута его сначала необходимо зарегистрировать, а уже после - использовать. Пример регистрации атрибута:


// Регистрация нового атрибута "symbol". Макрос получает
// название функции (параметр 1), аргументы (параметр 2),
// флаги (ещё не реализованы).
#define r@symbol:%8$%1(%2)(%3) %8$// код реализации...

Опции и значения по умолчанию
Кроме того, библиотека позволяет определять значения по умолчанию.
НазваниеОписание
TDW_DIALOG_DEFAULT_HOOKПозволяет использовать hook'и по умолчанию. Стоит отметить, что данная возможность работает только при включении библиотеки y_hooks.
TDW_DIALOG_SKIP_ARGSС данной опцией появляется возможность пропускать аргументы. Предупреждение: данная опция может увеличить размер кода. Кроме того, запрещает использовать иные названия аргументов (то есть только: playerid, response, listitem, inputtext[])TDW_DIALOG_IDСодержит идентификатор диалога, который будет использоваться для обработки. По умолчанию имеет значение "32767".
Функции
НазваниеОписание
OpenDialog/Dialog_Open (https://github.com/TDW-org/samp-include-dialog/blob/bfed7d81711beb7b0e71f414143f64eca3cb6f39/tdw_dialog.inc#L117-L118)Позволяет открыть диалоговое окно.
CloseDialog/Dialog_Close (https://github.com/TDW-org/samp-include-dialog/blob/bfed7d81711beb7b0e71f414143f64eca3cb6f39/tdw_dialog.inc#L129)Закрывает диалоговое окно для игрока.
ShowDialog/Dialog_Show (https://github.com/TDW-org/samp-include-dialog/blob/bfed7d81711beb7b0e71f414143f64eca3cb6f39/tdw_dialog.inc#L146)
Показывает шаблон для игрока.
IsPlayerInDialog (https://github.com/TDW-org/samp-include-dialog/blob/bfed7d81711beb7b0e71f414143f64eca3cb6f39/tdw_dialog.inc#L141)
Возвращает состояние игрока. 1 - игрок находиться в диалоговом окне, иначе нуль.

Пример использования:

#include <a_samp>
#define TDW_DIALOG_SKIP_ARGS
#include <dialog\tdw_dialog>

dialog [hook] register(playerid)
{

}

dialog [template] register(playerid)
{
OpenDialog(playerid, dfunc:register, DIALOG_STYLE_MSGBOX,
"Register",
"Hello!",
"Register", "Cancel"
);
}

public OnPlayerConnect(playerid)
{
ShowDialog(playerid, dfunc:register);
return 1;
}


Скачать

github (https://github.com/TDW-org/samp-include-dialog/tree/master)
Перейдите в репозиторий на github (ссылка выше).
Для скачивания на открывшейся странице нажмите на кнопку "Clone or download" (зелёного цвета) и в открывшемся меню - "Download ZIP".
Все файлы библиотеки перемести в папку '/pawno/includes/'.
Скомпилировать изменённые вами скрипты.

Благодарность:
$continue$ (http://pro-pawn.ru/member.php?3392) - тестирование библиотеки.

Автор:

VVWVV (http://pro-pawn.ru/member.php?4348)

Лицензия
Библиотека доступна по лицензии Zlib.

vovandolg
12.12.2016, 18:40
А когда через читы допустим Dialog Hider юзаешь то он как то вызовет OnDialogPerformed или функцию закрытия?

VVWVV
12.12.2016, 18:43
А когда через читы допустим Dialog Hider юзаешь то он как то вызовет OnDialogPerformed или функцию закрытия?

Нет. Впрочем, если вы хотите, то могу сделать.

UPD: Сделал.

vovandolg
12.12.2016, 19:48
Нет. Впрочем, если вы хотите, то могу сделать.
В сампце не ковыряюсь уже почти, так просто уточнил,
вдруг кто то остался кто воюет с читерами и ему понравилась эта система,
а защиты в ней нету)

Battista
13.02.2017, 12:44
Если в include записал dialog , а вызываешь его в gamemode , то игроку вылезают "кракозябры", а если записываешь и вызываешь его самом gamemode , то все нормально.
Почему?

VVWVV
13.02.2017, 13:14
Если в include записал dialog , а вызываешь его в gamemode , то игроку вылезают "кракозябры", а если записываешь и вызываешь его самом gamemode , то все нормально.
Почему?

Мне кажется, что это проблема с кодировкой файла

Battista
13.02.2017, 14:02
Мне кажется, что это проблема с кодировкой файла.

Кодировка файла UTF-8, проблема все такая же

VVWVV
13.02.2017, 14:11
Кодировка файла UTF-8, проблема все такая же

Используйте кодировку Windows 1251

Battista
13.02.2017, 14:39
Используйте кодировку Windows 1251

Тогда "кракозябры" появляются в файле .inc

UPD:
в Notepad++ переводит кодировку криво
SublimeText 3 все нормально

Извините за беспокойство, удачного дня :)

$continue$
19.07.2017, 02:20
Неплохо было бы вшить библиотеку центр текста (http://forum.sa-mp.com/showthread.php?t=625090).

Алинка
03.10.2017, 00:46
Я все сделала правильно, но вылезли ошибки:


C:\samp03e_svr_r2_win32\pawno\include\tdw_dialog.inc(108) : error 075: input line too long (after substitutions)
C:\samp03e_svr_r2_win32\pawno\include\tdw_dialog.inc(113) : error 055: start of function body without function header
C:\samp03e_svr_r2_win32\pawno\include\tdw_dialog.inc(113) : error 010: invalid function or declaration

VVWVV
03.10.2017, 01:04
Я все сделала правильно, но вылезли ошибки:


C:\samp03e_svr_r2_win32\pawno\include\tdw_dialog.inc(108) : error 075: input line too long (after substitutions)
C:\samp03e_svr_r2_win32\pawno\include\tdw_dialog.inc(113) : error 055: start of function body without function header
C:\samp03e_svr_r2_win32\pawno\include\tdw_dialog.inc(113) : error 010: invalid function or declaration


Видимо старая версия компилятора.

P.S. на данный момент делается новая версия библиотеки.

Алинка
03.10.2017, 01:09
Видимо старая версия компилятора.

P.S. на данный момент делается новая версия библиотеки.

И где взять новый? У меня 2006 года, самый последний оффициальный

DeimoS
03.10.2017, 01:47
Видимо, речь идёт о форке Zeex (https://github.com/Zeex/pawn/releases) (если его версию вообще моно обозвать форком)

Алинка
03.10.2017, 21:47
Видимо, речь идёт о форке Zeex (https://github.com/Zeex/pawn/releases) (если его версию вообще моно обозвать форком)

Что-то на него слишком много "проблем" подано. 51 не решена. А вдруг он будет глючить и работать хуже чем официальный?

ziggi
03.10.2017, 22:13
Что-то на него слишком много "проблем" подано. 51 не решена. А вдруг он будет глючить и работать хуже чем официальный?

Не, хуже уже некуда :) А на странице issues не только проблемы, там могут быть ещё вопросы и предложения.

VVWVV
06.10.2017, 19:25
Обновление 6.10.17.

Глобальное обновление библиотеки (изменил первый пост)

DeimoS
06.10.2017, 20:02
А можно подсказать пример ситуации, в которой может пригодится перехват диалога?

VVWVV
06.10.2017, 20:05
А можно подсказать пример ситуации, в которой может пригодится перехват диалога?

Многофайловые проекты. Можно диалог с один названием использовать в каждом файле без каких-либо префиксов/суффиксов.

DeimoS
06.10.2017, 20:23
Многофайловые проекты. Можно диалог с один названием использовать в каждом файле без каких-либо префиксов/суффиксов.

Каким образом тогда работает этот хук? Как я понимаю, перехватывается само содержимое диалога, да? То бишь, любой добавленный код будет распространятся на все файлы впоследствии

VVWVV
06.10.2017, 20:29
Каким образом тогда работает этот хук? Как я понимаю, перехватывается само содержимое диалога, да? То бишь, любой добавленный код будет распространятся на все файлы впоследствии

Да, любой добавленный код будет распространяться на все файлы.

P.S. Немного не понял о содержимом..

DeimoS
06.10.2017, 20:46
Да, любой добавленный код будет распространяться на все файлы.

P.S. Немного не понял о содержимом..

Ну тот код, что обычно в OnDialogResponse находится - это он перехватывается или можно и само объявление перехватить?

Хотя в любом случае я этому не вижу широкого применения (да и применения как такового). Перехваты ведь хороши, в основном, для написания библиотек, в которых уже перехватываются конкретные, заранее известные функции. А перехват одного диалога из другого файла лишь внесёт путаницу в код, как по мне.

Хотя слушать меня в данном случае, наверное, не самое лучшее решение, ибо я и все эти навороты с синтаксисом, типа разделения на Dialog_Open и Dialog_Show, считаю ненужным усложнением. Как по мне, диалоговый процессор не должен изменять ничего, кроме самого принципа обработки диалога (выноса кода из OnDialogResponse). А уже все навороты с разными возможностями по показу диалогов должны подаваться отдельно.
Командные процессоры - хороший пример того, как должны выглядеть подобные обработчики. А многие диалоговые процессоры сейчас делают так же, как если бы командные процессоры пытались выполнять функционал sscanf, например. Ну это моё скромное имхо.

VVWVV
06.10.2017, 20:58
Ну тот код, что обычно в OnDialogResponse находится - это он перехватывается или можно и само объявление перехватить?

Хотя в любом случае я этому не вижу широкого применения (да и применения как такового). Перехваты ведь хороши, в основном, для написания библиотек, в которых уже перехватываются конкретные, заранее известные функции. А перехват одного диалога из другого файла лишь внесёт путаницу в код, как по мне.

Хотя слушать меня в данном случае, наверное, не самое лучшее решение, ибо я и все эти навороты с синтаксисом, типа разделения на Dialog_Open и Dialog_Show, считаю ненужным усложнением. Как по мне, диалоговый процессор не должен изменять ничего, кроме самого принципа обработки диалога (выноса кода из OnDialogResponse). А уже все навороты с разными возможностями по показу диалогов должны подаваться отдельно.
Командные процессоры - хороший пример того, как должны выглядеть подобные обработчики. А многие диалоговые процессоры сейчас делают так же, как если бы командные процессоры пытались выполнять функционал sscanf, например. Ну это моё скромное имхо.

Основной функционал сохранился. Атрибуты это лишь дополнительный функционал, который можно и не использовать.

DeimoS
06.10.2017, 21:14
Основной функционал сохранился. Атрибуты это лишь дополнительный функционал, который можно и не использовать.

Ну тип этот функционал лишь усложняет понимание принципов работы с библиотекой. При желании можно и в какой-нибудь Pawn.CMD вшить функционал sscanf, добавив соответствующий синтаксис, но только зачем?

Хотя я говорю, это лишь моё мнение. Как по мне, вот так (http://pro-pawn.ru/showthread.php?13626-u_dialogs-inc) должен выглядеть диалоговый процессор. Минимум отхождения от стандартного синтаксиса и минимум функционала. А уже всё остальное можно докрутить дополнительно, если вдруг это потребуется

UPD: Ладно, мы друг друга не понимаем, так что больше не буду флудить.

VVWVV
06.10.2017, 21:28
Ну тип этот функционал лишь усложняет понимание принципов работы с библиотекой. При желании можно и в какой-нибудь Pawn.CMD вшить функционал sscanf, добавив соответствующий синтаксис, но только зачем?

Хотя я говорю, это лишь моё мнение. Как по мне, вот так (http://pro-pawn.ru/showthread.php?13626-u_dialogs-inc) должен выглядеть диалоговый процессор. Минимум отхождения от стандартного синтаксиса и минимум функционала. А уже всё остальное можно докрутить дополнительно, если вдруг это потребуется

Синтаксис данной библиотеке поддерживает вариант от Стяжкина. Как уже было сказано в первом посте, все атрибуты необязательны к использованию, то есть их можно просто пропустить. Синтаксис можно подстроить под себя.

В ней нет постороннего функционала, но есть дополнения, которые появляются при появлении тех или иных сторонних библиотек. К примеру, возможность создания хуков появляется только тогда, когда в скрипте включена библиотека y_hooks.

Впрочем, у каждого разные взгляды.

DeimoS
14.12.2018, 14:01
VVWVV,

центр текста (http://forum.sa-mp.com/showthread.php?t=625090)

Не думаешь вшивать?

Seviel
14.12.2018, 16:01
VVWVV,


Не думаешь вшивать?

mdialog-е есть функция для кириллических символов, а там нету(