Pawn :: Основы скриптинга
Создание простого диалога с полем ввода
Создадим второй тип диалога: DIALOG_STYLE_INPUT.
Работать с данным стилем диалога будет сложнее по сравнению с остальными стилями диалогов, т.к. тут есть поле ввода.
Начнем с простого примера:
Командой вызовем диалоговое окно, введем текст и данный текст отправиться всем игрокам в чат. Имя игрока видно не будет, сообщение анонимное.
Итак, приступим к созданию диалога:
1 ShowPlayerDialog(playerid,0,DSI,"Отправить сообщение всем","Введите текст сообщения","ОК","Отмена");
Данную строку нужно вписать внутрь готовой команды. Здесь используется константа DSI , чтобы не писать длинное название стиля
диалога, поэтому не забудьте ее добавить в ваш скрипт.
1 #define DSI DIALOG_STYLE_INPUT
Итак, диалоговое окно мы создали, и оно будет выглядеть следующим образом.
Приступим к написанию функции для этого диалога. Как и в прошлом уроке, внутрь функции OnDialogResponse, пишем условную конструкцию проверки на вызов диалога с ID = 0. Внутрь этой
условной конструкции пишем еще одну, проверку на нажатие кнопки. Дальше внутри этой проверки
будет еще одна проверка на то, что поле ввода у нас содержит какие-либо символы. Ведь мы же не
можем отправить пустой текст. Условная конструкция будет такая:
if(!strlen(inputtext))
{
}
else
{
}
Данную условную конструкцию мы пишем внутри условной конструкции if(response).
Strlen – возвращает количество символов в строке.
Inputtext – этот аргумент содержит в себе текст, который мы вводим в поле ввода.
Сначала идет проверка на вызов диалогового окна с ID= 0. Мы данное окно вызывали функцией ShowPlayerDailog(playerid,0…); цифра, это dialogid.
После проверки, внутри идет еще одна проверка на нажатие кнопки.
Если нажата кнопка 1, т.е. кнопка «ОК», идет следующая проверка на то, что в поле ввода есть какой-либо текст.
Если он есть, функция SendClientMessage отправляет в чат значение аргумента inputtext, т.е то, что игрок введет в поле ввода диалогового окна.
Если игрок не введет в поле ввода ничего, функция SendClientMessage отправит в чат сообщение с ошибкой, о том, что текст сообщения не был введен в поле ввода.
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;
}
|
|
|