Awesome | Дата: Среда, 29.02.2012, 16:39 | Сообщение # 1 |
 Генерал-майор
Группа: Проверенные
Сообщений: 70
Награды: 14
Репутация: 25
Статус: Offline
| В этом уроке мы переходим к разбору второго стиля диалога: DIALOG_STYLE_INPUT. Работать с данным стилем диалога будет сложнее по сравнению с остальными стилями диалогов, т.к. тут есть поле ввода. Начнем с простого примера: мы командой вызовем диалоговое окно, введем текст и данный текст отправиться всем игрокам в чат. Имя игрока видно не будет, сообщение анонимное. Итак, приступим к созданию диалога: Code ShowPlayerDialog(playerid,0,DSI,"Отправить сообщение всем","Введите текст сообщения","ОК","Отмена");
Данную строку я думаю, вы уже догадались, что ее нужно вписать внутрь готовой команды. Я все также использовал константу DSI из прошлого урока, чтобы не писать длинное название стиля диалога, поэтому не забудьте ее добавить в ваш скрипт. Code #define DSI DIALOG_STYLE_INPUT
Итак, диалоговое окно мы создали, и оно будет выглядеть следующим образом. Приступим к написанию функции для этого диалога. Как и в прошлом уроке, внутрь функции OnDialogResponse, пишем условную конструкцию проверки на вызов диалога с ID = 0. Внутрь этой условной конструкции пишем еще одну, проверку на нажатие кнопки. Дальше внутри этой проверки будет еще одна проверка на то, что поле ввода у нас содержит какие-либо символы. Ведь мы же не можем отправить пустой текст. Условная конструкция будет такая: Code if(!strlen(inputtext)) { }else{ }
Данную условную конструкцию мы пишем внутри условной конструкции if(response). А теперь я вам объясню, что значит strlen и inputtext: Strlen – возвращает количество символов в строке. Inputtext – этот аргумент содержит в себе текст, который мы вводим в поле ввода. В общем, думаю, вам будет все понятно, посмотрев нижеприведенный готовый скрипт, но все же я вам кратко его объясню на всякий случай. Сначала идет проверка на вызов диалогового окна с ID = 0. Мы данное окно вызывали функцией ShowPlayerDailog(playerid,0…); - я специально выделил цифру, это dialogid. После проверки, внутри идет еще одна проверка на нажатие кнопки. Если нажата кнопка 1, т.е. кнопка «ОК», идет следующая проверка на то, что в поле ввода есть какой-либо текст. Если он есть, функция SendClientMessage отправляет в чат значение аргумента inputtext, т.е то что игрок введет в поле ввода диалогового окна. Если игрок не введет в поле ввода ничего, функция SendClientMessage отправит в чат сообщение с ошибкой, о том что текст сообщения не был введен в поле ввода.
Code public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 0) { if(response) //Если была нажата 1 кнопка { if(!strlen(inputtext)){ //Если в поле не был введен текст при отправке SendClientMessage(playerid,COLOR_RED,"Вы не написали текст сообщения в поле ввода"); return 1; }else{ SendClientMessage(playerid,COLOR_WHITE,inputtext); } } } return 1; }
Если вы поняли этот урок, тогда переходим к следующему.
я вернулся
|
|
| |