Перейти к содержанию
Авторизация  
#Kot

Типы диалогов и с чем их подавать

Рекомендуемые сообщения

#Kot

И так. Есть диалоги следующих видов:

DIALOG_STYLE_LIST
DIALOG_STYLE_INPUT
DIALOG_STYLE_MXGBOX
DIALOG_STYLE_PASSWORD
А теперь по подробнее.
DIALOG_STYLE_LIST - вид диалога для так сказать вывода списка нужных вам функций/команд и т.д.
Код диалога данного:
CMD:dialog(playerid)
{
        ShowPlayerDialog(playerid,555,DIALOG_STYLE_LIST,"Пример диалога","Содержимое списка 1\nСодержимое списка 2\nСодержимое списка 3","Кнопка 1","Кнопка 2");
        return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(dialogid == 555)
        {
            if(response)
            {
                    if(listitem == 0) return SendClientMessage(playerid,0x88AA88AA,"Вы нажали на кнопку 'Содержимое списка 1'");
                    if(listitem == 1) return SendClientMessage(playerid,0x88AA88AA,"Вы нажали на кнопку 'Содержимое списка 2'");
                    if(listitem == 2) return SendClientMessage(playerid,0x88AA88AA,"Вы нажали на кнопку 'Содержимое списка 3'");

                }
                else
                {
                    SendClientMessage(playerid,0x88AA88AA,"Вы нажали на 'Кнопка 2' либо Esc");
                    return 1;
                }
        }
        return 1;
}
754725_m.png

 

 

Ну нажмём к примеру первую кнопку из списка (а видя по коду мы видим, что при нажатии любой кнопки выводиться текст.)
Идём дальше.
DIALOG_STYLE_MSGBOX - данный тип диалога используется для красивого вывода информации (замена чата). Покрайне мере я так его использую))
Еще его можно использовать в регестрации к примеру выбор 1 из двух "Мужчина/женщина" и т.д.
Код нашего диалога:
CMD:dialog1(playerid)
{
        ShowPlayerDialog(playerid,556,DIALOG_STYLE_MSGBOX,"Пример диалога","Содержимое(текст)","Кнопка 1","Кнопка 2");
        return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(dialogid == 556)
        {
            if(response)
                {
                    SendClientMessage(playerid,0x88AA88AA,"Вы нажали на 'Кнопка 1' либо Enter");
                    return 1;
                }
                else
                {
                    SendClientMessage(playerid,0x88AA88AA,"Вы нажали на 'Кнопка 2' либо Esc");
                    return 1;
                }
        }
        return 1;
}

754727_m.png

 

Как мы видим там две кнопки. Для разъяснения: if(response) { содержимое(код) первой кнопки } else { содержимое(код) второй кнопки }
DIALOG_STYLE_INPUT либо DIALOG_STYLE_PASSWORD - И третий, последний вид диалогов -- это диалоги с функцией ввода данных в них и вывода их на экран(не обязательно в общем то :))
DIALOG_STYLE_INPUT и DIALOG_STYLE_PASSWORD ничем практически не отличается кроме того, что в DIALOG_STYLE_PASSWORD вводимое сразу же скрывается звёздочками на экране, а в DIALOG_STYLE_INPUT не скрывается. По этому далее у нас пойдёт разговор как об одном виде диалогов т.к. они можно сказать идентичны
Код нашего диалога:
CMD:dialog2(playerid)
{
        ShowPlayerDialog(playerid,557,DIALOG_STYLE_INPUT,"Пример диалога","Содержимое(текст)","Кнопка 1","Кнопка 2");
        return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(dialogid == 557)
        {
            if(response)
            {
                new str[100]; format(str,sizeof(str),"Вы ввели: %s",inputtext);
                SendClientMessage(playerid,0x88AA88AA,str);
                return 1;
                }
                else
                {
                    SendClientMessage(playerid,0x88AA88AA,"Вы нажали на 'Кнопка 2' либо Esc");
                    return 1;
                }
        }
        return 1;
}

754729_m.png

 

Введем к примеру текст: "Текст введенный в окошко". И видим что в игре высвечивается текст который мы ввели
Наверное вы заметили такое, как inputext. Так вот при вводе текста(любого содержимого короче) в окошко DIALOG_STYLE_INPUT это всё записывается на переменную inputtext и выводиться (при вашем желании) в чат. Элементарно в принципе) 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

[/hr]

Вопрос 1. Как сделать одну кнопку вместо двух?
Делаем так:
Вместо такого:
ShowPlayerDialog(playerid,557,DIALOG_STYLE_INPUT,"Пример диалога","Содержимое(текст)","Кнопка 1","Кнопка 2");

Ставим такое:

ShowPlayerDialog(playerid,557,DIALOG_STYLE_INPUT,"Пример диалога","Содержимое(текст)","Кнопка 1","");
Вопрос 2. Как вместо длинных DIALOG_STYLE_..... сделать использование цифр к примеру 0,1,2,3
А так и использовать. Вот в a_samp.inc
#define DIALOG_STYLE_MSGBOX  0
#define DIALOG_STYLE_INPUT  1
#define DIALOG_STYLE_LIST  2
#define DIALOG_STYLE_PASSWORD 3

Теперь можно использовать так:

ShowPlayerDialog(playerid,dialogid,2,"Название","1й пункт\n2й пункт","Ok","Cancel");
Вопрос 3. Можно ли использовать ID диалога несколько раз?
Да, можно с учётом того что на него не будет прописаны функции. Но всё-таки не желательно использование одного ID диалога много раз т.к. можно нагрузить сильно мод)
Вопрос 4. Можно ли удалить название диалога либо сменить его цвет?
Да можно. Удаление названия:
ShowPlayerDialog(playerid,dialogid,DIALOG_STYLE_LIST," ","1й пункт\n2й пункт","Ok","Cancel");

Сменить цвет названия:

ShowPlayerDialog(playerid,dialogid,DIALOG_STYLE_LIST,"{ffffff}Название белого цвета","1й пункт\n2й пункт","Ok","Cancel");
Вопрос 5. При вводе %s в DIALOG_STYLE_INPUT происходит крэш сервера, с чем это связано?
Связано это с тем, что это баг SA:MP. Желательно, а точнее нужно поставить замену % к примеру на #. Замену я постараюсь выложить в "Готовые Решения"
Вопрос 6. Как вместо цифр ида диалога (dialogid) использовать буквы?
Вставляете в начало мода такое:
#define iddialoga 100//ид диалога у нас будет к примеру 100

И можно использовать так:

ShowPlayerDialog(playerid,iddialoga,DIALOG_STYLE_LIST,"Название","1й пункт\n2й пункт","Ok","Cancel");
Вопрос 7. Какие есть дополнительные функции для работы с текстом (3D и в диалогах)
Список:
\n - new line - новая строка 
\b - backspace
\f - Form feed - перевод страницы 
\' - одиночная кавычка 
\" - двойные кавычки 
\? - вопросительный знак
\t - табуляция 
Я нашёл этот список в интернете, но я абсолютно не понимаю зачем такое: \' и \? Ведь можно поставить просто знаки без слэша)

 

Автор:sOflY

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

Я терпимо отношусь к копипасте мануалов в принципе, но копипасту говноуроков не выношу.

 

DIALOG_STYLE_LIST - вид диалога для так сказать вывода списка нужных вам функций/команд и т.д.

Сказать "окно со списком из нескольких элементов", видимо, было нельзя.

DIALOG_STYLE_MSGBOX - данный тип диалога используется для красивого вывода информации (замена чата). Покрайне мере я так его использую))

Какая замена чата на месседж-боксах? И потом, никому не интересно, как ты его используешь, если новичку нужна конкретная инфа "как это работает". Объяснения "простое окно-предупреждение" хватило бы за глаза.

Как мы видим там две кнопки. Для разъяснения: if(response) { содержимое(код) первой кнопки } else { содержимое(код) второй кнопки }

Напомню, что в остальных видах диалоговых окон есть те же самые две кнопки, и по-хорошему, о них надо было рассказать еще ДО типов окон.

DIALOG_STYLE_INPUT либо DIALOG_STYLE_PASSWORD - И третий, последний вид диалогов -- это диалоги с функцией ввода данных в них и вывода их на экран(не обязательно в общем то :))

Так если не обязательно, на кой черт вообще об этом упоминать?Окна с полем для ввода пользовательских данных - вот и все объяснение.

Наверное вы заметили такое, как inputext. Так вот при вводе текста(любого содержимого короче) в окошко DIALOG_STYLE_INPUT это всё записывается на переменную inputtext и выводиться (при вашем желании) в чат. Элементарно в принципе)

Да что ты так к чату-то примотался. И, коли уж на то пошло, inputtext - не переменная, а массив.

 

Перейдем к вопросам.

Первый и часть четвертого вопроса ("как удалить название") можно было объяснить на порядок проще - оставить пустым параметр, задающий нужный элемент.

По третьему - вызов диалогов с одинаковым ID ничем по выделению ресурсов не отличается от вызова диалогов с разными ID. По факту, единственное, зачем диалогу нужен уникальный идентификатор - это для создания конкретных действий для каждого из диалогов при вызове OnDialogResponse. Если после вызова диалогового окна никаких действий вообще не планируется - никто не мешает присвоить всем таким диалогам один и тот же ID.

По пятому - это, пардон, не SA:MP косяк, а неумех-программистов, не умеющих фильтровать данные на входе. А сервер после таких приколов падает исключительно потому, что данные на входе никто не проверял. Достаточно простейшим циклом проверить символы в строке - впрочем, проще же сказать "эта сампа касяк, я ахриненый скриптир". То же самое к седьмому вопросу - если ты задаешь вопрос "зачем такое: \' и \? Ведь можно поставить просто знаки без слэша", значит, ты ничего не слышал про экранирование символов. А хорошо бы.

 

Резюмируя вышесказанное.

Обучающая часть - никакая, полезного контента - мизер, обработчик OnDialogResponse не описан вообще. "Вопросы" высосаны из пальца, ответы на них не менее ужасны.

Вывод - такой копипасте в туториалах не место.

  • Like 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.