Awesome | Дата: Среда, 29.02.2012, 16:30 | Сообщение # 1 |
 Генерал-майор
Группа: Проверенные
Сообщений: 70
Награды: 14
Репутация: 25
Статус: Offline
| В дальнейших уроках мы рассмотрим все типы диалогов и работу с ними. Для начала я ознакомлю вас со всеми диалогами, а затем в каждом уроке мы будем рассматривать по каждому типу диалога. Итак, приступим к теории. Диалоги бывают трех типов: 0 - DIALOG_STYLE_MSGBOX - обычный диалог с 2мя кнопками, 1 - DIALOG_STYLE_INPUT - диалог с полем для ввода, 2 - DIALOG_STYLE_LIST - список из нескольких элементов. Вызывается диалоговое окно функцией ShowPlayerDialog, структура функции такая: Code ShowPlayerDialog(playerid,<ID диалога>,<ID стиля>,<Название>,<Текст>,<Первая кнопка>,<Вторая>);
Обычно, чтобы не запоминать цифры и не писать длинное название стилей диалогов, я заменяю их такими константами: Code #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. Code if (strcmp("/test", cmdtext, true, 10) == 0) { return 1; }
Затем с помощью функции ShowPlayerDialog мы вызовем данное диалоговое окно. Так как вызывать меню мы будем с помощью команды, то и пишем данную функцию, приведенную ниже внутри нее. Code ShowPlayerDialog(playerid,0,DSM,"Подтверждение","Вы точно хотите выполнить команду","Да","Нет");
Цифра 0 – это идентификатор (ID) диалога, у каждого диалога свой ID. После идентификатора пишем название стиля диалога, но я заменил его константой, поэтому я написал DSM (DIALOG_STYLE_MSGBOX). После стиля пишем название диалога. Далее пишем текст диалога и название первой и второй кнопки. В общем, код будет выглядеть следующим образом: Code if (strcmp("/test", cmdtext, true, 10) == 0) { ShowPlayerDialog(playerid,0,DSM,"Подтверждение","Вы точно хотите выполнить команду","Да","Нет"); return 1; }
Но данное диалоговое окно работать не будет, если мы не напишем для него функцию. Допустим, наша команда выдаст в чат всю информацию об игроке, т.е при нажатии кнопки «Да» все так и будет, но при нажатии кнопки «Нет», мы выдадим сообщение красным цветом о том что данная команда не была выполнена. Писать функцию диалогового окна мы будем в автовызываемой функции OnDialogResponse. Сначала внутри функции мы напишем условную конструкцию, которая будет проверять, что данное диалоговое окно было вызвано. Код условия такой: Code if(dialogid == 0) { }
Условие проверяет: было ли вызвано диалоговое окно с ID = 0. Внутрь этой условной конструкции добавляем еще одно условие: Code if(response) { }else{ }
Условие проверяет, была ли нажата первая кнопка, если нажата вторая кнопка, то выполняется код после else. Внутри этой условной конструкции для первой кнопки мы пишем следующий код. Code 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 пишем: Code SendClientMessage(playerid,COLOR_RED,"Команда отменена"); Вот в принципе и все, В следующем уроке мы рассмотрим другой стиль диалога. Переходим к следующему уроку.
я вернулся
|
|
| |