Cappuccino*
Новичок
Диалоги бывают трех типов:
1 - DIALOG_STYLE_MSGBOX - обычный диалог с 2мя кнопками.
2 - DIALOG_STYLE_INPUT - диалог с полем для ввода.
3 - DIALOG_STYLE_LIST - список из нескольких элементов.
4 - DIALOG_STYLE_PASSWORD – диалог с полем ввода пароля.
Вызывается диалоговое окно функцией ShowPlayerDialog, структура функции такая:
Обычно, чтобы не запоминать цифры и не писать длинное название стилей диалогов, я заменяю их
такими константами:
Что можно использовать в создании диалога?
Итак, переходим к практике или к разбору первого стиля: DIALOG_STYLE_MSGBOX. Рассмотрим
обычный пример: Мы вводим команду, и появляется диалоговое окно с запросом о подтверждении
выполнения команды. Для начала мы напишем скрипт простейшей команды в автовызываемую функцию
OnPlayerCommandText.
Затем с помощью функции ShowPlayerDialog мы вызовем данное диалоговое окно. Так как вызывать
меню мы будем с помощью команды, то и пишем данную функцию, приведенную ниже внутри нее.
Цифра 0 – это идентификатор (ID) диалога, у каждого диалога свой ID. После идентификатора пишем
название стиля диалога, но я заменил его константой, поэтому я написал DSM (DIALOG_STYLE_MSGBOX). После
стиля пишем название диалога. Далее пишем текст диалога и название первой и второй кнопки.
В общем, код будет выглядеть следующим образом:
А диалоговое окно будет выглядеть так:
Но данное диалоговое окно работать не будет, если мы не напишем для него функцию. Допустим, наша
команда выдаст в чат всю информацию об игроке, т.е. при нажатии кнопки «Да» все так и будет, но при нажатии
кнопки «Нет», мы выдадим сообщение красным цветом о том, что данная команда не была выполнена.
Писать функцию диалогового окна мы будем в автовызываемой функции OnDialogResponse. Сначала
внутри функции мы напишем условную конструкцию, которая будет проверять, что данное диалоговое окно
было вызвано. Код условия такой:
Условие проверяет: было ли вызвано диалоговое окно с ID = 0. Внутрь этой условной конструкции добавляем еще одно условие:
Условие проверяет, была ли нажата первая кнопка, если нажата вторая кнопка, то выполняется код
после else. Внутри этой условной конструкции для первой кнопки мы пишем следующий код.
Сначала мы создаем все необходимые переменные, а потом получаем данные и сразу же их записываем
их во всех переменные. Обратите внимание на функцию GetPlayerMoney, в скобках она имеет всего один
аргумент (playerid), в отличие от других, и она возвращает количество денег игрока. Поэтому мы присваиваем
переменной money, эту функцию, которая возвратит значение, которое и будет значением этой переменной.
Еще обратите внимание на %.2f, я мог бы использовать просто %f, как показано в таблице. Точка и цифра
означает, сколько чисел должно быть после запятой у десятичного числа. Дальше мы форматируем сообщение,
после чего вызываем новое диалоговое окно с новым ID. Обратите внимание, что имя второй кнопки не
указано, в таком случае, эта кнопка просто будет отсутствовать в диалоге. А вместо основного текста мы
подставляем переменную string в которой уже есть готовое отформатированное сообщение.
Вот и всё, ничего сложного я не увидел!
1 - DIALOG_STYLE_MSGBOX - обычный диалог с 2мя кнопками.
2 - DIALOG_STYLE_INPUT - диалог с полем для ввода.
3 - DIALOG_STYLE_LIST - список из нескольких элементов.
4 - DIALOG_STYLE_PASSWORD – диалог с полем ввода пароля.
Вызывается диалоговое окно функцией ShowPlayerDialog, структура функции такая:
Код:
ShowPlayerDialog(playerid,<ID диалога>,<ID стиля>,<Название>,<Текст>,<Первая кнопка>,<Вторая>);
такими константами:
Код:
#define DSL DIALOG_STYLE_LIST
#define DSI DIALOG_STYLE_INPUT
#define DSM DIALOG_STYLE_MSGBOX
#define DSP DIALOG_STYLE_PASSWORD
Код:
\b backspaсe
\f Form feed
\n переход на новую строку
\r возврат каретки
\t табуляция
\v вертикальная табуляция
\' одиночная кавычка
\" двойные кавычки
\? вопросительный знак
обычный пример: Мы вводим команду, и появляется диалоговое окно с запросом о подтверждении
выполнения команды. Для начала мы напишем скрипт простейшей команды в автовызываемую функцию
OnPlayerCommandText.
Код:
if (strcmp("/test", cmdtext, true, 10) == 0)
{
return 1;
}
меню мы будем с помощью команды, то и пишем данную функцию, приведенную ниже внутри нее.
Код:
ShowPlayerDialog(playerid,0,DSM,"Подтверждение","Вы точно хотите выполнить команду","Да","Нет");
название стиля диалога, но я заменил его константой, поэтому я написал DSM (DIALOG_STYLE_MSGBOX). После
стиля пишем название диалога. Далее пишем текст диалога и название первой и второй кнопки.
В общем, код будет выглядеть следующим образом:
Код:
if (strcmp("/test", cmdtext, true, 10) == 0)
{
ShowPlayerDialog(playerid,0,DSM,"[COLOR="#DAA520"]Подтверждение[/COLOR]", "[COLOR="#DAA520"]Вы точно хотите выполнить команду[/COLOR]","[COLOR="#DAA520"]Да[/COLOR]","[COLOR="#DAA520"]Нет[/COLOR]");
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 в которой уже есть готовое отформатированное сообщение.
Вот и всё, ничего сложного я не увидел!
