Как сделать диалоговое окно самп

Обновлено: 05.07.2024

Создание диалоговых окон может показаться сложнее чем это есть на самом деле. В этом уроке описано как можно создать диалоговое окно, с выбором элемента. В данном диалоге не будет использовано много функций, так как это только демонстрация.

В этом примере показано, как сделать диалоговое окно, дающее возможность купить себе напитки (используя SetPlayerSpecialAction) за определенное количество денег.

Диалоговое окно будет вызываться командой. Добавьте это в паблик - public OnPlayerCommandText(playerid, cmdtext[])

if(! strcmp ( cmdtext , "/выпивка" , true ))
ShowPlayerDialog ( playerid , 1 , DIALOG_STYLE_LIST , "Что из этого вы хотите выпить?" , "Sprunk ($1)\nПиво ($2)\nВино ($3)" , "Купить" , "Отмена" );
return 1 ;
>

Как вы видите, использована функция ShowPlayerDialog со вторым типом диалогового окна.
Используя \n можно добавлять несколько элементов. ( \n - перенос строки (добавление новой строки))
Сейчас мы должны указать что будет выполнятся при выборе какого-либо элемента, используя авто вызываемую функцию OnDialogResponse .

В паблик - public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) вставляем:

Если вы всё правильно делали, то диалоговое окно будет работать отлично. Чтобы его вызвать, надо набрать команду /выпивка .

Как сделать диалоговое окно самп

Возвращаемые значения:
Данная функция не возвращает какого-либо конкретного значения.

Стили диалога:

0DIALOG_STYLE_MSGBOXОбычный диалог с 2-мя кнопками
1DIALOG_STYLE_INPUTДиалог с полем для ввода
2DIALOG_STYLE_LISTСписок из нескольких элементов
3DIALOG_STYLE_PASSWORDПозволяет игрокам вводить пароль не раскрывая его

Функция:
Вызывается диалоговое окно функцией ShowPlayerDialog, структура функции такая:

Упрощение:
Обычно, чтобы не запоминать цифры и не писать длинное название стилей диалогов, я заменяю их такими макросами:

Или можно использовать <ID> стиля диалогового окна

Для написания основного текста диалогового окна вы можете использовать нижеприведенную таблицу:

\bbackspaсe
\fForm feed
\nПереход на новую строку
\rВозврат каретки
\tТабуляция
\vВертикальная табуляция
\'Одиночная кавычка
\"Двойные кавычки
\?Вопросительный знак
Ответ на диалог:
Мы сделали диалоговое меню, состоящее из 9 пунктов. А нам надо сделать так, чтобы при нажатии на первый пункт, у нас появлялся другой диалог с другой информацией. Для этот мы будем использовать вот такой код:
Условные конструкции:
Вот примет одной конструкции

Пример диалога с использование условной конструкцией

Создадим команду с использование ZCMD (командный процессор)

Спойлер: Пример команды на стандартном командном процессере И в public OnDialogResponse мы добавим ответ на наш диалог
Креативизация:
Вы решили создать диалог, а он серы и скучный?
Мы можем раскрасить наш диалог в любые цвета формата RGB.
Пример:

Цвет мы заключаем в фигурную скобку "<" и ">"
FFFFFF - это белый цвет
3DB6F2 - светло-голубой
Думаю цвета вам не доставит большого труда отыскать. Для этого есть множество поисковых система.

Что же такое этот оператор switch?
Оператор switch – это оператор выбора. Он удобен в первую очередь тем, что может заменить много условий if, которые проверяют значение одной переменной.
Пример построения с этим оператором:
! Стоить отметить, что в официальной документации к языку написано: ‘In pawn, switch is a structured “if”‘, а это значит, что конструкция switch — это набор структурированных if’ов, отсюда следует, что switch не может работать быстрее if. Но это не всегда так.
Как видим — switch/case медленнее(значительно) if только на больших промежутках значений.

Сейчас бы я хотел немного рассказать вам о том, как можно в один диалог использовать гораздо большее количество символов.

Данный метод подходит, когда есть некоторые переменные, которые нужно внедрить в текст.

Есть еще один метод, который более менее мне известный - это константная переменная. Этот пример часто встречается в RLS/SRL модах. Мне же не очень нравится этот метод.Причины: не очень читабельный для человека, в отличии от первого примера.

В пером случаи делается все давольно просто и знакомо, где после обьявления макроса, мы задаем имя и параметр.

Совет: для объявления макроса/директивы, лучше использовать имена в ВЕРХНЕМ регистре. Почему? А вот почему: если мы будем исползовать имена в нижнем регистре, то есть вероятность того, что мы сможем перепутать их с переменными.

Во втором случае мы добавим перечисление enum <>.

Само слово перечисление говорит нам о том, что мы будет перечислять по порядку от нуля до N-ного числа.

Пользователь офлайн

Mike

Изображение

2) Диалог с полем, в которое можно ввести что-либо
Ид: 1
Название: DIALOG_STYLE_INPUT
Скриншот:
Код диалога:

Изображение

3) Диалог, со списком
Ид: 2
Название: DIALOG_STYLE_LIST
Скриншот:
Код диалога:

Изображение

4) Диалог, с полем ввода(используется для ввода пароля) он просто шифрует введеные символы точками
Внимание: диалог был добавлен в версию клиента samp 0.3d (я его не тестировал, поэтому и скрин с офф сайта)
Ид: 3
Название: DIALOG_STYLE_PASSWORD
Скриншот:
Код диалога:

Как создать диалог

Создание диалогов (в новом samp 0.3) может показаться довольно трудным, хотя на самом деле довольно просто создать диалоговое окно. Эта краткая инструкция продемонстрирует вам, как сделать диалоговый список. Это диалоговое окно для демонстрационных целей и будет довольно ограниченным.

Сдесь будут показаны 3 примера стилей диалоговых окон: DIALOG_STYLE_MSGBOX, DIALOG_STYLE_INPUT и DIALOG_STYLE_LIST.

Объяснение

Сначала рассмотрим функцию ShowPlayerDialog

И все её параметры:

playeridID игрока которому будет показан данный диалог.
dialogidID диалога, чтобы в дальнейшем мы могли с ним работать.
info[]Текст в окне диалога. Используйте \n чтобы начать писать с новой строки и \t для сведения в таблицу.


и обработка вызовов при нажатии кнопок диалога (button1[] или button2[])

responseЛогика: true - если была нажата кнопка №1, false - если была нажата кнопка №2
listitemИспользуется только в диалоге со стилем DIALOG_STYLE_LIST, первый элемент 0 и т.д. по возрастанию.
inputtext[]Используется только в диалоге со стилем DIALOG_STYLE_INPUT, это строка ввода в диалоговом окне.


now that is done we can proceed

List dialog

Во первыъ, рассмотрим пример с показом диалога по команде ввода. С использованием OnPlayerCommandText:

Теперь, когда мы создали даилог вызываемый командой, мы должны настроить обработку вызовов OnDialogResponse при нажатии кнопок.

Let me explain what this does, there are two switches. one for the dialogid, and one for the listitem. the if statement at top is needed else it doesnt check what button you clicked.

msgbox dialog

This is a simple one. it just is a textbox with two buttons no input no different choises just two buttons to process

this will show the dialog with ID 2(we already used dialogid 1) to the player. the style here is DIALOG_STYLE_MSGBOX.

now we need to setup the response again.

explanation: this only checks the dialogid because it already checked if you pressed the first button wich is yes. and then applys the animation for 10 seconds

input dialog

This dialog will have a line for input. (as the name implies).

We will make a chatdialog (what is typed in the dialog will appear in the chat).

This is a command created with strcmp, so it belongs under the OnPlayerCommandText callback.

Let's set-up the response, again..

As seen, this will print the inputtext string into a chat message for everyone.

Как сделать диалоговое окно самп

А создается еще проще, чем выглядит. Приступим,

Разберем подробней. И так, разберем параметры функции (все то, что находится в скобках).
playerid - это игрок, каждый игрок имеет свой уникальный id, по нему и определяется игрок. В данном случае, это означает, что данный диалог будет показываться тому, кто его вызывает.

айди_диалога - это число, или же текст, используют это в качестве обозначения номера действия для диалога. То есть если у нас айди диалога "1234", то это значение мы и будет проверять, чтобы выполнить действие. Пример:

И теперь в паблике OnDialogResponse ставим проверку на диалог.

Стиль. Вот это пожалуй самое главное. Стили бывают разные, давайте ознакомимся с ними.
DIALOG_STYLE_MSGBOX - это самый примитивный тип, не имеет списка, только заголовок, содержание и 2 кнопки. Выглядит так:


Стиль DIALOG_STYLE_LIST - это окно уже серьезней, имеет список, заголовок, 2 кнопки. Каждая строчка списка - это новая проверка (или case если используете), имеет вид:


DIALOG_STYLE_INPUT - Этот стиль используется для ввода информации (текст, цифры), чаще всего используют для регистрации/авторизации на сервере. Имеет заголовок, поле ввода, 2 кнопки. Имеет вид:


DIALOG_STYLE_PASSWORD - Этот стиль используют исключительно для паролей. Вся введенная информация - шифруется, как и на WEB сайтах. Имеет заголовок, поле ввода, 2 кнопки. Её советуют использовать исключительно для системы регистрации/авторизации и скрытия секретных данных. Функция была добавлена в 0.3D версии. Имеет вид:


И так, разобрались со стилями. Идем дальше. Поговорим о заголовках. Он может содержать текст, текст переменной, цифры, символы. Находится в левой верхней части окна, имеет маленький шрифт. Идем дальше.

Содержание - Это пожалуй одно из главных. Тут у вас будет функции, которые будут находится по центру. Зависит от стиля, например в DIALOG_STYLE_MSGBOX - содержанием (структурой) будет текст. Т.к ничего кроме текста и символов нельзя создать в этом стиле.

Кнопки 1, 2 - кнопки так же выполняют действия, и имеют свой текст. Обычно пишут "Да", "Нет" или "Принять", "Отмена".

Создадим наш первый диалог. Код имеет вид:

Теперь добавим проверку на наш диалог в паблик OnDialogResponse (Подробней о нем - на Samp-Wiki
)

С кнопками покончено. Приступим дальше!
Теперь сделаем диалог со стилем "списка". Создавать будем так:

Из написанного выше, мы уже помним что и куда вставлять. Так ведь?

Рассмотрим еще парочку примеров. Тут мы будем использовать DIALOG_STYLE_INPUT, создаем диалог:


После использования функции, это будет выглядеть так:


И последний пример, это ввод с шифрованием текста.
Создаем диалог:


Выполнение функции будет выглядеть так:

А теперь не много об inputtext. Это массив, в который записывается вся информация, которую мы вводим. Не требует объявления.

Читайте также: