диалоги и с чем их едят pawno
Диалоги и с чем их едят pawno
Пользователь singmen задал вопрос «Ошибка» (0)
Пользователь singmen задал вопрос «LOL» (0)
Пользователь singmen задал вопрос «LOL» (0)
Пользователь singmen задал вопрос «TTERGSDGSDFGF» (0)
А создается еще проще, чем выглядит. Приступим,
И теперь в паблике OnDialogResponse ставим проверку на диалог.
Поясняю, при вызове диалога id1, в чат игроку напишет сообщение «Вы вызвали диалог id1. Думаю понятно, идем дальше.
И так, разобрались со стилями. Идем дальше. Поговорим о заголовках. Он может содержать текст, текст переменной, цифры, символы. Находится в левой верхней части окна, имеет маленький шрифт. Идем дальше.
Создадим наш первый диалог. Код имеет вид:
С кнопками покончено. Приступим дальше!
Теперь сделаем диалог со стилем «списка». Создавать будем так:
Из написанного выше, мы уже помним что и куда вставлять. Так ведь?
Рассмотрим еще парочку примеров. Тут мы будем использовать DIALOG_STYLE_INPUT, создаем диалог:
После использования функции, это будет выглядеть так:
И последний пример, это ввод с шифрованием текста.
Создаем диалог:
Выполнение функции будет выглядеть так:
А теперь не много об inputtext. Это массив, в который записывается вся информация, которую мы вводим. Не требует объявления.
Диалоги и с чем их едят pawno
Данная функция была добавлена в SA-MP 0.3a и не будет работать в более ранних версиях!
Описание:
Показывает диалоговое окно определенному игроку.
Параметры:
playerid
ID игрока, которому будет показан диалог.
Уникальный ID диалога.
Стиль диалогового окна.
Текст самого диалога.
Название первой (левой) кнопки диалога.
Название второй (правой) кнопки.
Возвращаемые значения:
Данная функция не возвращает какого-либо конкретного значения.
0
DIALOG_STYLE_MSGBOX
Обычный диалог с 2-мя кнопками
1
DIALOG_STYLE_INPUT
Диалог с полем для ввода
2
DIALOG_STYLE_LIST
Список из нескольких элементов
3
DIALOG_STYLE_PASSWORD
Позволяет игрокам вводить пароль не раскрывая его
Функция:
Вызывается диалоговое окно функцией ShowPlayerDialog, структура функции такая:
Упрощение:
Обычно, чтобы не запоминать цифры и не писать длинное название стилей диалогов, я заменяю их такими макросами:
#define LIST DIALOG_STYLE_LIST
#define PASSWORD DIALOG_STYLE_PASSWORD
#define MSGBOX DIALOG_STYLE_MSGBOX
#define INPUT DIALOG_STYLE_INPUT
Или можно использовать стиля диалогового окна
Для написания основного текста диалогового окна вы можете использовать нижеприведенную таблицу:
\n
Переход на новую строку
\v
Вертикальная табуляция
//пример для DIALOG_STYLE_MSGBOX
ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX,»Уведомление»,»Вы вошли на сервер»,»Закрыть»,»»);
//пример для DIALOG_STYLE_INPUT
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,»Авторизация»,»Введите свой пароль:»,»Войти»,»Отмена»);
//пример для DIALOG_STYLE_LIST
ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,»Мой диалог»,»1. Строка\r\n2. Строка\r\n3. Строка»,»Опция 1″, «Опция 2»);
//пример для DIALOG_STYLE_PASSWORD
ShowPlayerDialog(playerid,1,DIALOG_STYLE_PASSWORD,»Авторизация»,»Введите ваш пароль ниже:»,»Готово»,»Отмена»);
Ответ на диалог:
Мы сделали диалоговое меню, состоящее из 9 пунктов. А нам надо сделать так, чтобы при нажатии на первый пункт, у нас появлялся другой диалог с другой информацией. Для этот мы будем использовать вот такой код:
case :
<
if(response)
<
if(listitem == 0) // Первый пункт
<
>
else if(listitem == 1) // Второй пункт
<
>
else if(listitem == 2) // Третий пункт
<
>
else if(listitem == 3) // Четвертый пункт
<
>
else if(listitem == 4) // Пятый пункт
<
>
else if(listitem == 5) // Шестой пункт
<
>
else if(listitem == 6) // Седьмой пункт
<
>
else if(listitem == 7) // Восьмой пункт
<
>
else if(listitem == 8) // Девятый пункт
<
>
>
>
Условные конструкции:
Вот примет одной конструкции
if(response) //Условие: если мы нажали первую кнопку
<
>
else //Условие: если мы нажали вторую кнопку
<
>
Пример диалога с использование условной конструкцией
Создадим команду с использование ZCMD (командный процессор)
CMD:test(playerid, params[])
<
ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX,»Уведомление»,»Выберите кнопку»,»Первая»,»Вторая»);
>
if (strcmp(«/test», cmdtext, true, 10) == 0)
<
ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX,»Уведомление»,»Выберите кнопку»,»Первая»,»Вторая»);
>
И в public OnDialogResponse мы добавим ответ на наш диалог
case 1:
<
if(response) //Условие: если мы нажали первую кнопку
<
SendClientMessage(playerid,0xFFFFFFAA,»Вы нажали первую кнопку»);
>
else //Условие: если мы нажали вторую кнопку
<
SendClientMessage(playerid,0xFFFFFFAA,»Вы нажали вторую кнопку»);
>
>
Креативизация:
Вы решили создать диалог, а он серы и скучный?
Мы можем раскрасить наш диалог в любые цвета формата RGB.
Пример:
Лучше использовать switch для перебора диалогов.
Что же такое этот оператор switch?
Оператор switch – это оператор выбора. Он удобен в первую очередь тем, что может заменить много условий if, которые проверяют значение одной переменной.
Пример построения с этим оператором:
switch(reason)
<
case 0: // Первый пункт
<
// Тут у Вас что то будет
>
case 1: // Второй пункт
<
// Тут у Вас что то будет
>
case 2: // Третий пункт
<
// Тут у Вас что то будет
>
>
! Стоить отметить, что в официальной документации к языку написано: ‘In pawn, switch is a structured “if”‘, а это значит, что конструкция switch — это набор структурированных if’ов, отсюда следует, что switch не может работать быстрее if. Но это не всегда так.
switch(var)
<
case 40,80,150,160,230,420: return 1;
>
if ( var == 40 || var == 80 || var == 150 || var == 160 || var == 230 || var == 420 ) return 1;
Следующая конструкция:
switch(var)
<
case 40..80,150..160,230..420: return 1;
>
if ( var >= 40 && var = 150 && var = 230 && var = 40 && var
Доброго времени суток, уважаемые пользователи!
Сегодня Я хотел бы Вам рассказать о такой возможности в pawn, как соединение диалогов.
Для того чтобы понимать, что происходит в данном уроке, Вам необходимо хотя-бы знать Азы программирования Pawn. Их много в других уроках, поэтому Я сразу начну.
1. Введение
Итак, мы хотим создать длинный диалог без краша компилятора в 256 символов. Если мы скомпилируем такой диалог, то Pawn компилятор просто крашнится. Чтобы этого не происходило, надо разделить диалог. Многие задавались вопросом: «Как разделить диалог?», «Как перенести диалог?». Ну чтож, для этого и нужен урок!)
Нам понадобится такая функция как:
С помощью данной функции Мы не сможем «разделить» диалог, но сможем собрать его из кусочков.
Использование данной функции:
2. Пример использования
Давайте представим ситуацию, где нам нужно будет указать в диалоге сразу несколько длинных строчек:
Нам нужно будет записать вот такой текст:
Отлично! Теперь давайте «собирать» наш диалог.
При попытке компилирования, мы получим краш.
3. Как исправить
Итак, приступим. Для начала нам понадобится переменная, с помощью которой, Мы будем соединять диалог.
К примеру
Да, неплохо, нам нужна переменная с 512 размером, потому что мы совмещаем немалый текст, но не стоит переборщать, нужно соблюдать правило: «Сохраняйте размеры меньше».
Итак, приступим к соединению нашего диалога:
Таким образом Мы сможем вместить Весь текст:
Ух! Теперь то наш мод спокойно скомпилируется. Кстати, данную функцию можно использовать для построения таких команд, как /find или /members.
4. Другой вариант.
Итак, не менее интересной функцией является
Давайте поработаем и с ней!
Текст:
Итак, давайте разберём код по-подробнее:
Также можно сделать диалог по несколько строк(предложил gmosergey ):
На этом всё! Всем спасибо!
- диалог это что означает
- диалоги платона о чем они