[Include] u_dlg.inc | Ответ на диалог по методу ZCMD
#1

U_DIALOG.INC (1.4)
Описание:
Этот сравнительно небольшой инклуд работает с OnDialogResponse() для обработки диалогов. Метод создания диалогов похож с zcmd. Вы можете показывать диалог в вашем игровой мода, а обрабатывать в фильтрскрипте.
Я писал этот инклуд для упрощения работы с диалогами в больших скриптах (игровых модах).

Использование:
Для показа диалога используйте функцию DialogShowForPlayer().
  • PHP Code:
    DialogShowForPlayer(playerid, function[], stylecaption[], info[], button1[], button2[]) 
Для обработки вызова диалога используйте метод (хз как по другому назвать, вроде и не функция же D)
  • PHP Code:
    DialogResponse:function(playeridresponselistiteminputtext[])
    {
        
    // что-то делаем

Для запрета на обработку вызова диалога (в случае возврата 0). Вызывается перед обработкой диалога.
  • PHP Code:
    public OnDialogPerformed(playerid, function[], responsesuccess)
    {
        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(playeridresponselistiteminputtext[])
{
    if(!
response)
        return 
1;
    
SendClientMessage(playerid, -1inputtext);
    return 
1;

Скачать!!
Reply
#2

Почему то мне все это кажется не удобным. Стандартный метод более по душе.
Reply
#3

Quote:
Originally Posted by Kolstin
View Post
Почему то мне все это кажется не удобным. Стандартный метод более по душе.
Мне не очень удобно, когда от начала скрипта до его конца листаешь, чтобы что-то поправить. А тут можно расположить по-ближе.
Reply
#4

Quote:
Originally Posted by Untonyst
View Post
Мне не очень удобно, когда от начала скрипта до его конца листаешь, чтобы что-то поправить. А тут можно расположить по-ближе.
Я использую довольно простую комбинацию клавиш для поиска нужного: Ctrl + F

PS: Комментарии по своему коду не зря же придумали)
Reply
#5

Quote:
Originally Posted by Untonyst
View Post
Мне не очень удобно, когда от начала скрипта до его конца листаешь, чтобы что-то поправить. А тут можно расположить по-ближе.
Вынеси все "потроха" OnDialogResponce в инклуд и радуйся.
Reply
#6

Quote:
Originally Posted by Stepashka
View Post
Вынеси все "потроха" OnDialogResponce в инклуд и радуйся.
Слишком просто и без порно. Не могу я так
Reply
#7

PHP Code:
#define DIALOG:%0 case %0:
public OnDialogResponse(playeriddialogid, ...)
{
    switch(
dialogid)
    {
        
DIALOG1
        
{
            
        }
        
DIALOG2
        
{
            
        }
        
DIALOG3
        
{
            
        }
    }

Reply
#8

Quote:
Originally Posted by Stepashka
View Post
Вынеси все "потроха" OnDialogResponce в инклуд и радуйся.
Quote:
Originally Posted by stabker
View Post
PHP Code:
#define DIALOG:%0 case %0:
public OnDialogResponse(playeriddialogid, ...)
{
    switch(
dialogid)
    {
        
DIALOG1
        
{
            
        }
        
DIALOG2
        
{
            
        }
        
DIALOG3
        
{
            
        }
    }

Суть не в этом. А в том, чтобы можно было не отходя от места показа диалога написать функцию, которая работает аналогичным образом как OnDialogResponse. Но указывать константы для обозначения ID диалога не всегда удобно, поэтому я прикрутил еще диалоги, где за место его id используется имя, которые будет вызывать одноименную функцию. Это уже совсем для ленивых :с

PHP Code:
forward ShowTestDialog(playeridresponselistiteminputtext[]);
public 
ShowTestDialog(playeridresponselistiteminputtext[])
{
    
printf("%i / %i / %i / %s"playeridresponselistiteminputtext);
    
SendClientMessage(playerid, -1inputtext);
    return 
1;
}
public 
OnPlayerSpawn(playerid)
{
    
ShowPlayerDialogEx(
        
playerid,
        
"ShowTestDialog",
        
DIALOG_STYLE_INPUT,
        
"Тестовая фича",
        
"Введите тестовое сообщение",
        
"Окей""Не"
    
);
    return 
1;

Только обновлять инклуд пока не хочется :с
Reply
#9

Хранить все диалоги в одном месте действительно не удобно. Я для себя реализовал подобную систему, которая используется так:
PHP Code:
DialogCreate:test(playerid)
{
    
Dialog_Open(playeridDialog:testDIALOG_STYLE_MSGBOX,
            
"Hello",
            
"Are you ok?",
            
"Yes""No"
        
);
}
DialogResponse:test(playeridresponselistiteminputtext[])
{
    if (!
response) {
        
SendClientMessage(playerid, -1"This club only for OK guys!");
        
Dialog_Show(playeridDialog:test);
        return 
1;
    }
    
SendClientMessage(playerid, -1"Welcome to the club");
    return 
1;

Создание диалогов подобным образом упрощает построение вложенных диалогов (с кнопками "Назад").

P.S. @Untonyst, Для имени функции выделяется всего 11 ячеек, этого мало (функции могут быть длинной в 31 символ)
PHP Code:
new f_dlg_name[11
Reply
#10

ZiGGi, я знаю, но я делал это не из-за расчета текстовой части, а из-за цифр. То есть, id диалога - константа. Исходя из этого, "dlg_" - 4 символа, плюс самый последний допустимый номер диалога - "32767" - 5 символов, а это 9 символов + 1 на нуль-символ. Только я где-то обсчитался, лишний символ записал. Что ж, когда обновлю инклуд, то могу смело добавить пункт "оптимизировал код"
Reply
#11

Quote:
Originally Posted by Untonyst
View Post
ZiGGi, я знаю, но я делал это не из-за расчета текстовой части, а из-за цифр. То есть, id диалога - константа. Исходя из этого, "dlg_" - 4 символа, плюс самый последний допустимый номер диалога - "32767" - 5 символов, а это 9 символов + 1 на нуль-символ. Только я где-то обсчитался, лишний символ записал. Что ж, когда обновлю инклуд, то могу смело добавить пункт "оптимизировал код"
Точно, используются же числовые ID (думал, что используются буквенные).
Reply
#12

Только зачем туда еще и dialogid передавать?
Reply
#13

Quote:
Originally Posted by Richard_Gere
View Post
Только зачем туда еще и dialogid передавать?
Логика проста. Ее нет, сейчас уберу
Reply
#14

Quote:
Originally Posted by Untonyst
View Post
Логика проста. Ее нет, сейчас уберу
Когда первый раз похожее писал такая же ошибка была, сам сразу не заметил
Reply
#15

Quote:
Originally Posted by Richard_Gere
View Post
Когда первый раз похожее писал такая же ошибка была, сам сразу не заметил
Я вообще что-то не обратил на это место внимание. Тупо скопировал параметры из OnDialogResponse и все
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)