SA-MP Forums Archive
[Include] u_dlg.inc | Ответ на диалог по методу ZCMD - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+----- Forum: Релизы/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=66)
+----- Thread: [Include] u_dlg.inc | Ответ на диалог по методу ZCMD (/showthread.php?tid=602812)



u_dialog.inc - Untonyst - 13.03.2016

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

Использование:
Для показа диалога используйте функцию DialogShowForPlayer(). Для обработки вызова диалога используйте метод (хз как по другому назвать, вроде и не функция же D) Для запрета на обработку вызова диалога (в случае возврата 0). Вызывается перед обработкой диалога.Например:
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;

Скачать!!


Re: u_dlg.inc | Ответ на диалог по методу ZCMD - Romz - 13.03.2016

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


Re: u_dlg.inc | Ответ на диалог по методу ZCMD - Untonyst - 13.03.2016

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


Re: u_dlg.inc | Ответ на диалог по методу ZCMD - Romz - 13.03.2016

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

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


Re: u_dlg.inc | Ответ на диалог по методу ZCMD - Stepashka - 14.03.2016

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


Re: u_dlg.inc | Ответ на диалог по методу ZCMD - Untonyst - 14.03.2016

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


Re: u_dlg.inc | Ответ на диалог по методу ZCMD - stabker - 14.03.2016

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




Re: u_dlg.inc | Ответ на диалог по методу ZCMD - Untonyst - 14.03.2016

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;

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


Re: u_dlg.inc | Ответ на диалог по методу ZCMD - ZiGGi - 14.03.2016

Хранить все диалоги в одном месте действительно не удобно. Я для себя реализовал подобную систему, которая используется так:
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



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
View Post
ZiGGi, я знаю, но я делал это не из-за расчета текстовой части, а из-за цифр. То есть, id диалога - константа. Исходя из этого, "dlg_" - 4 символа, плюс самый последний допустимый номер диалога - "32767" - 5 символов, а это 9 символов + 1 на нуль-символ. Только я где-то обсчитался, лишний символ записал. Что ж, когда обновлю инклуд, то могу смело добавить пункт "оптимизировал код"
Точно, используются же числовые 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
View Post
Только зачем туда еще и dialogid передавать?
Логика проста. Ее нет, сейчас уберу


Re: u_dlg.inc | Ответ на диалог по методу ZCMD - Richard_Gere - 15.03.2016

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


Re: u_dlg.inc | Ответ на диалог по методу ZCMD - Untonyst - 15.03.2016

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