u_dialog.inc -
Untonyst - 13.03.2016
U_DIALOG.INC (1.4)
Описание:
Этот сравнительно небольшой инклуд работает с OnDialogResponse() для обработки диалогов. Метод создания диалогов похож с zcmd. Вы можете показывать диалог в вашем игровой мода, а обрабатывать в фильтрскрипте.
Я писал этот инклуд для упрощения работы с диалогами в больших скриптах (игровых модах).
Использование:
Для показа диалога используйте функцию DialogShowForPlayer().
PHP Code:
DialogShowForPlayer(playerid, function[], style, caption[], info[], button1[], button2[])
Для обработки вызова диалога используйте метод (хз как по другому назвать, вроде и не функция же
![Cheesy](images/smilies/biggrin.png)
D)
PHP Code:
DialogResponse:function(playerid, response, listitem, inputtext[])
{
// что-то делаем
}
Для запрета на обработку вызова диалога (в случае возврата 0). Вызывается перед обработкой диалога.
PHP Code:
public OnDialogPerformed(playerid, function[], response, success)
{
if (/* если игрок не авторизовался */)
return 0;
return 1;
}
Например:
PHP Code:
#include "u_dialog.inc"
public OnPlayerConnect(playerid)
{
DialogShowForPlayer(playerid, "dialog_test", DIALOG_STYLE_INPUT,
"Заголовок",
"Введи текст:",
"Хорошо", "Закрыть");
return 1;
}
DialogResponse:dialog_test(playerid, response, listitem, inputtext[])
{
if(!response)
return 1;
SendClientMessage(playerid, -1, inputtext);
return 1;
}
Скачать!!
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
Romz - 13.03.2016
Почему то мне все это кажется не удобным. Стандартный метод более по душе.
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
Untonyst - 13.03.2016
Quote:
Originally Posted by Kolstin
Почему то мне все это кажется не удобным. Стандартный метод более по душе.
|
Мне не очень удобно, когда от начала скрипта до его конца листаешь, чтобы что-то поправить. А тут можно расположить по-ближе.
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
Romz - 13.03.2016
Quote:
Originally Posted by Untonyst
Мне не очень удобно, когда от начала скрипта до его конца листаешь, чтобы что-то поправить. А тут можно расположить по-ближе.
|
Я использую довольно простую комбинацию клавиш для поиска нужного: Ctrl + F
PS: Комментарии по своему коду не зря же придумали)
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
Stepashka - 14.03.2016
Quote:
Originally Posted by Untonyst
Мне не очень удобно, когда от начала скрипта до его конца листаешь, чтобы что-то поправить. А тут можно расположить по-ближе.
|
Вынеси все "потроха" OnDialogResponce в инклуд и радуйся.
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
Untonyst - 14.03.2016
Quote:
Originally Posted by Stepashka
Вынеси все "потроха" OnDialogResponce в инклуд и радуйся.
|
Слишком просто и без порно. Не могу я так
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
stabker - 14.03.2016
PHP Code:
#define DIALOG:%0 case %0:
public OnDialogResponse(playerid, dialogid, ...)
{
switch(dialogid)
{
DIALOG: 1
{
}
DIALOG: 2
{
}
DIALOG: 3
{
}
}
}
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
Untonyst - 14.03.2016
Quote:
Originally Posted by Stepashka
Вынеси все "потроха" OnDialogResponce в инклуд и радуйся.
|
Quote:
Originally Posted by stabker
PHP Code:
#define DIALOG:%0 case %0:
public OnDialogResponse(playerid, dialogid, ...)
{
switch(dialogid)
{
DIALOG: 1
{
}
DIALOG: 2
{
}
DIALOG: 3
{
}
}
}
|
Суть не в этом. А в том, чтобы можно было не отходя от места показа диалога написать функцию, которая работает аналогичным образом как OnDialogResponse. Но указывать константы для обозначения ID диалога не всегда удобно, поэтому я прикрутил еще диалоги, где за место его id используется имя, которые будет вызывать одноименную функцию. Это уже совсем для ленивых :с
PHP Code:
forward ShowTestDialog(playerid, response, listitem, inputtext[]);
public ShowTestDialog(playerid, response, listitem, inputtext[])
{
printf("%i / %i / %i / %s", playerid, response, listitem, inputtext);
SendClientMessage(playerid, -1, inputtext);
return 1;
}
public OnPlayerSpawn(playerid)
{
ShowPlayerDialogEx(
playerid,
"ShowTestDialog",
DIALOG_STYLE_INPUT,
"Тестовая фича",
"Введите тестовое сообщение",
"Окей", "Не"
);
return 1;
}
Только обновлять инклуд пока не хочется :с
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
ZiGGi - 14.03.2016
Хранить все диалоги в одном месте действительно не удобно. Я для себя реализовал подобную систему, которая используется так:
PHP Code:
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;
}
Создание диалогов подобным образом упрощает построение вложенных диалогов (с кнопками "Назад").
P.S. @Untonyst, Для имени функции выделяется всего 11 ячеек, этого мало (функции могут быть длинной в 31 символ)
PHP Code:
new f_dlg_name[11]
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
Untonyst - 14.03.2016
ZiGGi, я знаю, но я делал это не из-за расчета текстовой части, а из-за цифр. То есть, id диалога - константа. Исходя из этого, "dlg_" - 4 символа, плюс самый последний допустимый номер диалога - "32767" - 5 символов, а это 9 символов + 1 на нуль-символ. Только я где-то обсчитался, лишний символ записал. Что ж, когда обновлю инклуд, то могу смело добавить пункт "оптимизировал код"
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
ZiGGi - 14.03.2016
Quote:
Originally Posted by Untonyst
ZiGGi, я знаю, но я делал это не из-за расчета текстовой части, а из-за цифр. То есть, id диалога - константа. Исходя из этого, "dlg_" - 4 символа, плюс самый последний допустимый номер диалога - "32767" - 5 символов, а это 9 символов + 1 на нуль-символ. Только я где-то обсчитался, лишний символ записал. Что ж, когда обновлю инклуд, то могу смело добавить пункт "оптимизировал код" ![Smiley](images/smilies/smile.png)
|
Точно, используются же числовые ID (думал, что используются буквенные).
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
Richard_Gere - 15.03.2016
Только зачем туда еще и dialogid передавать?
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
Untonyst - 15.03.2016
Quote:
Originally Posted by Richard_Gere
Только зачем туда еще и dialogid передавать?
|
Логика проста. Ее нет, сейчас уберу
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
Richard_Gere - 15.03.2016
Quote:
Originally Posted by Untonyst
Логика проста. Ее нет, сейчас уберу
|
Когда первый раз похожее писал такая же ошибка была, сам сразу не заметил
Re: u_dlg.inc | Ответ на диалог по методу ZCMD -
Untonyst - 15.03.2016
Quote:
Originally Posted by Richard_Gere
Когда первый раз похожее писал такая же ошибка была, сам сразу не заметил ![Cheesy](images/smilies/biggrin.png)
|
Я вообще что-то не обратил на это место внимание. Тупо скопировал параметры из OnDialogResponse и все