Четверг, 17.07.2025, 18:08
Приветствую Вас Гость | RSS
[•X•X•X•X•X•X•X•X•X• SRK •X•X•X•X•X•X•X•X•X•] - 193.107.179.214:7777
Главная | Урок №19 DIALOG_STYLE_MSGBOX - Форум | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: DimanCC, Awesome, [Tuner_Life]Nikotin  
Урок №19 DIALOG_STYLE_MSGBOX
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,"Команда отменена");

Вот в принципе и все, В следующем уроке мы рассмотрим другой стиль диалога. Переходим
к следующему уроку.


я вернулся
 
  • Страница 1 из 1
  • 1
Поиск:

Поддержка пишите на наш форум:Walter & alisa