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

Урок №19 – Создание простого диалога

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

Devin Coleman

В дальнейших уроках мы рассмотрим все типы диалогов и работу с ними. Для начала я

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

типу диалога. Итак, приступим к теории. Диалоги бывают трех типов:

0 - DIALOG_STYLE_MSGBOX - обычный диалог с 2мя кнопками,

1 - DIALOG_STYLE_INPUT - диалог с полем для ввода,

2 - DIALOG_STYLE_LIST - список из нескольких элементов.

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

ShowPlayerDialog(playerid,<ID диалога>,<ID стиля>,<Название>,<Текст>,<Первая кнопка>,<Вторая>);
Обычно, чтобы не запоминать цифры и не писать длинное название стилей диалогов, я

заменяю их такими константами:

#define DSL DIALOG_STYLE_LIST
#define DSI DIALOG_STYLE_INPUT
#define DSM DIALOG_STYLE_MSGBOX
Для написания основного текста диалогового окна вы можете использовать:

\b backspaсe

\f Form feed

\n переход на новую строку

\r возврат каретки

\' одиночная кавычка

\" двойные кавычки

\? вопросительный знак

Итак, переходим к практике или к разбору первого стиля: DIALOG_STYLE_MSGBOX.

Рассмотрим обычный пример: Мы вводим команду, и появляется диалоговое окно с запросом о

подтверждении выполнения команды. Для начала мы напишем скрипт простейшей команды в

автовызываемую функцию OnPlayerCommandText.

if (strcmp("/test", cmdtext, true, 10) == 0)
{
return 1;
}
Затем с помощью функции ShowPlayerDialog мы вызовем данное диалоговое окно. Так как

вызывать меню мы будем с помощью команды, то и пишем данную функцию, приведенную ниже

внутри нее.

ShowPlayerDialog(playerid,0,DSM,"Подтверждение","Вы точно хотите выполнить команду","Да","Нет");
Цифра 0 – это идентификатор (ID) диалога, у каждого диалога свой ID. После

идентификатора пишем название стиля диалога, но я заменил его константой, поэтому я написал

DSM (DIALOG_STYLE_MSGBOX). После стиля пишем название диалога. Далее пишем текст диалога и

название первой и второй кнопки.

В общем, код будет выглядеть следующим образом:

if (strcmp("/test", cmdtext, true, 10) == 0)
{
ShowPlayerDialog(playerid,0,DSM,"Подтверждение","Вы точно хотите выполнить команду","Да","Нет");
return 1;
}
Но данное диалоговое окно работать не будет, если мы не напишем для него функцию.

Допустим, наша команда выдаст в чат всю информацию об игроке, т.е при нажатии кнопки «Да»

все так и будет, но при нажатии кнопки «Нет», мы выдадим сообщение красным цветом о том что

данная команда не была выполнена.

Писать функцию диалогового окна мы будем в автовызываемой функции

OnDialogResponse. Сначала внутри функции мы напишем условную конструкцию, которая будет

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

if(dialogid == 0)
{
}
Условие проверяет: было ли вызвано диалоговое окно с ID = 0. Внутрь этой условной

конструкции добавляем еще одно условие:

if(response)
{
}else{
}
Условие проверяет, была ли нажата первая кнопка, если нажата вторая кнопка, то

выполняется код после else. Внутри этой условной конструкции для первой кнопки мы пишем

следующий код.

if(response)
{
new string[128]; //Переменная с основным текстом диалога
new plname[MAX_PLAYER_NAME]; //Переменная с именем игрока
new money; //Переменные для хранения кол-ва наличных денег игрока
new Float: health, Float: armor; //Переменные для хранения кол-ва здоровья и брони игрока
GetPlayerName(playerid,plname,MAX_PLAYER_NAME); //Записываем имя игрока в переменную plname
money = GetPlayerMoney(playerid); //Записываем деньги игрока в переменную money и т.д.
GetPlayerHealth(playerid,health);
GetPlayerArmour(playerid,armor);
format(string,sizeof(string),”Игрок: %s(ID:%d). Деньги: %d $.\n Здоровье: %.2f\n Броня:
%.2f”,plname,playerid,money,health,armor);
ShowPlayerDialog(playerid,1,DSM,"Информация об игроке",string,"ОК","");
}else{
Сначала мы создаем все необходимые переменные, а потом получаем данные и сразу же их

записываем их во всех переменные. Обратите внимание на функцию GetPlayerMoney, в скобках

она имеет всего один аргумент (playerid), в отличие от других, и она возвращает количество денег

игрока. Поэтому мы присваиваем переменной money, эту функцию, которая возвратит значение,

которое и будет значением этой переменной.

Еще обратите внимание на %.2f, я мог бы использовать просто %f, как показано в таблице.

Точка и цифра означает, сколько чисел должно быть после запятой у десятичного числа. Дальше

мы форматируем сообщение, после чего вызываем новое диалоговое окно с новым ID. Обратите

внимание, что имя второй кнопки не указано, в таком случае, эта кнопка просто будет

отсутствовать в диалоге. А вместо основного текста мы подставляем переменную string в которой

уже есть готовое отформатированное сообщение.

Вернемся к условию, если будет нажата вторая кнопка в первом диалоге, тут все просто без

объяснений в else пишем:

SendClientMessage(playerid,COLOR_RED,"Команда отменена");
Вот в принципе и все, В следующем уроке мы рассмотрим другой стиль диалога. Переходим

к следующему уроку.

 

Автор Cloud

  • Like 1

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


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

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

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

×

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

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