Этот инклуд задумывался как инструмент, с помощью которого можно создавать функции для обработки диалогов в любом удобном для вас месте вашего скрипта. Я не стремлюсь его сделать функциональным инструментом, для этого есть mdialog, я хочу сделать работу в отдельных функция похожей как на OnDialogResponse() для совместимости кода и так же для просто уверенной и привычной работы в этих функциях.
Скачать:
- GitHub
-
u_dialogs.inc
[2,89К]Лог изменений:
1.0 - Создание первой версии. 1.1 - Добавление функции IsPlayerUsingDialog(). - Добавление колбэка OnDialogHide(). 1.2 - Исправление макроса создания функций-обработчиков. 1.3 - Удаление функции IsPlayerUsingDialog(). - Удаление колбэка OnDialogHider(). - Некоторая оптимизация памяти. 1.4 - Удаление макроса DLG, как и его псевдонимы. - Добавление нового синтаксиса создания диалогов - DialogResponse. - Добавление DialogShowForPlayer (псевдоним ShowPlayerDialogEx()) - Некоторая оптимизация памяти. - Исправление этого бага. 1.5 - Добавление макроса IsDialog(). - Обновление синтаксиса создания функций. - Обновил OnDialogReceived() (раньше он вообще был назван не правильно, логическая ошибка). Добавил два аргумента - response и listitem. - Удалил DialogShowForPlayer(). Теперь только ShowPlayerDialogEx(). - Удалил макрос isnull().
Пример использования:
#include <a_samp>
#include "u_dialogs"
public OnPlayerConnect(playerid)
{
ShowPlayerDialogEx(
playerid, "test", DIALOG_STYLE_MSGBOX,
"Важное уведомление",
"Вы сегодня спали?",
"Да", "Нет"
);
return 1;
}
/*
Решил сделать создание функций-обработчиков похожими
на создание обычных функций. Ведь, зачастую, нам не нужно
использовать все 4 аргумента, а достаточно только два.
Ненужные аргументы можно скрыть через
#pragma unused <arg>
Функция всегда должна возвращать любое значение.
*/
DialogResponse:test(playerid, response, ...)
{
if (!response)
{
SendClientMessage(playerid, -1, "Как это вы не спали?!");
}
else
{
SendClientMessage(playerid, -1, "Хорошо что вы спали. Сегодня много дел!");
}
return 1;
}
/*
Этот колбэк вызывает перед обработкой диалога и,
в случает возвращение нуля, не обрабатывает диалог.
При любом другом значении - обрабатывает.
*/
public OnDialogReceived(playerid, function[], response, listitem)
{
if (IsDialog(function, "test"))
{
SendClientMessage(playerid, -1, "Вам запрещено отвечать на этот вопрос!");
return 0;
}
return 1;
}
Автор: Troels_Segor
Вход
Регистрация
Помощь










