Сегодня Я расскажу не много о диалоговых окнах. Их создание, принцип работы, дополнительные функции. И так, для начала нам требуется создать сам диалог, то есть показать его игроку. Все диалоги выглядят так:
А создается еще проще, чем выглядит. Приступим,
Code
ShowPlayerDialog(playerid,айди_диалога,стиль,"Заголовок окна","Содержимое окна","Текст первой кнопки","Текст второй кнопки");
Разберем подробней. И так, разберем параметры функции (все то, что находится в скобках). playerid - это игрок, каждый игрок имеет свой уникальный id, по нему и определяется игрок. В данном случае, это означает, что данный диалог будет показываться тому, кто его вызывает.
айди_диалога - это число, или же текст, используют это в качестве обозначения номера действия для диалога. То есть если у нас айди диалога "1234", то это значение мы и будет проверять, чтобы выполнить действие. Пример:
Code
ShowPlayerDialog(playerid,1,стиль,"Заголовок окна","Содержимое окна","Текст первой кнопки","Текст второй кнопки");
И теперь в паблике OnDialogResponse ставим проверку на диалог.
Поясняю, при вызове диалога id1, в чат игроку напишет сообщение "Вы вызвали диалог id1. Думаю понятно, идем дальше.
Стиль. Вот это пожалуй самое главное. Стили бывают разные, давайте ознакомимся с ними. 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 - кнопки так же выполняют действия, и имеют свой текст. Обычно пишут "Да", "Нет" или "Принять", "Отмена".
Создадим наш первый диалог. Код имеет вид:
Code
ShowPlayerDialog(playerid,456,DIALOG_STYLE_MSGBOX,"Наше первое окно","Жми на одну из кнопок","Да","Нет");
Теперь добавим проверку на наш диалог в паблик OnDialogResponse (Подробней о нем - на Samp-Wiki )
Code
if(dialogid == 456)// проверяем ID диалога { if(response)// если нажал первую кнопку, то... { SendClientMessage(playerid,0xF60000AA,"Ты нажал кнопку да");// выводим сообщение } else // а это если нажал кнопку нет, то... { SendClientMessage(playerid,0xF60000AA,"Ты нажал кнопку нет");// выводим сообщение } }
С кнопками покончено. Приступим дальше! Теперь сделаем диалог со стилем "списка". Создавать будем так:
Из написанного выше, мы уже помним что и куда вставлять. Так ведь?
Code
if(dialogid == 113)// проверка на 113 диалог { if(response)// если игрок нажал первую кнопку (в нашем случае это да) и..... { if(listitem == 0)//проверка, если выбрал 1 пункт { SendClientMessage(playerid,0xF60000AA,"Привет!");// вывод сообщения игроку } if(listitem == 1)//игрок выбрал 2 пункт в окошке { SendClientMessage(playerid,0xF60000AA,"Пока!");// вывод сообщения игроку } if(listitem == 2)//а это если третий пункт { SendClientMessage(playerid,0xF60000AA,"Уря!");// вывод сообщения игроку } } else // а это если нажал вторую кнопку (в нашем случае это кнопка Отмена) { // ничего не выводим } }
listitem - это функция, которая проверяет значение (ложное/истинное). То есть, если игрок выбрал 3 пункт, выводим ему 3 пункт (а точнее второй, т.к нумерация идет с 0). Эту функцию не нужно объявлять. \n - это перенос на новую строчку, то есть если сделать так: Меню\nМеню\nМеню, то в игре будет показано списком так: Меню Меню Меню
Рассмотрим еще парочку примеров. Тут мы будем использовать DIALOG_STYLE_INPUT, создаем диалог:
Code
ShowPlayerDialog(playerid,114,DIALOG_STYLE_INPUT,"Строка ввода","Введите текст в поле ниже, затем нажмите ОК","ОК","Отмена");
Проверяем диалоги.
Code
if(dialogid == 114)// проверка на 114 диалог { if(response)// если игрок нажал первую кнопку, то... { new text[128];// объявляем переменную format(text,128,"Ты написал - %s",inputtext);// форматирует текст SendClientMessage(playerid,0xF60000AA,text);// отправляет сообщение/текст } else { // ничего не выводим } }
После использования функции, это будет выглядеть так:
И последний пример, это ввод с шифрованием текста. Создаем диалог:
Code
ShowPlayerDialog(playerid,3,DIALOG_STYLE_PASSWORD,"{bbbbbb}Дополнение к диалогу DIALOG_STYLE_INPUT","То, что ты вводишь будет закрыто кружками.","Ввод","Отмена");
А теперь не много об inputtext. Это массив, в который записывается вся информация, которую мы вводим. Не требует объявления.
А вот некоторые дополнения к уроку: \n - new line - новая строка \r - возврат каретки \b - backspae - забой \f - Form feed - перевод страницы \' - одиночная кавычка \" - двойные кавычки \? - вопросительный знак \t - табуляция