shape1
shape2
shape3
shape4
shape7
shape8

Как создавать диалоговые окна и действия для них

  • Автор темы compan
  • Дата начала

C

compan

Гость
Гость
ShowPlayerDialog - данная функция показывает диалоговое окно определенному игроку.

Параметры:

(playerid, dialogid, style, caption[], info[], button1[], button2[])

playerid ID игрока, которому будет показан диалог.
dialogid Уникальный ID диалога. Используется в OnDialogResponse. При значении, равном -1, любой текущий диалог будет скрыт с экрана игрока.
style Стиль диалогового окна.
caption[] Заголовок окна.
info[] Текст самого диалога. Можно использовать \n для перевода строки и \t для табуляции.
button1[] Название первой (левой) кнопки диалога.
button2[] Название второй (правой) кнопки.



Теперь о стилях диалоговых окон.

h_1435150231_5435166_f2996f3f5d.png
 





Пример:

CMD:dialog1(playerid, params[])
{
ShowPlayerDialog(playerid, 2100, DIALOG_STYLE_MSGBOX, "PAWNO-CRMP.RU",
"{A5C3DE}Специально для {F7AC67}PAWNO-CRMP.RU\n\
{A5C3DE}Стиль диалога - {F7AC67}DIALOG_STYLE_MSGBOX\n\n\
{A5C3DE}Показывает простое сообщение игроку с двумя кнопками ответа.\n\
Если оставить вторую кнопку ответа совершенно пустой {F7AC67}(\"\"){A5C3DE}, то\n\
будет только одна кнопка - первая. Тоже самое, относится к остальным диалогам.",
"Отлично","Отмена");
return 1;
}
if(dialogid == 2100)
{
if(!response)
{
//Если нажал кнопку 2
SendClientMessage(playerid,-1,"Вы нажали кнопку ОТМЕНА");
return 1;
}
//Если нажал кнопку 1
SendClientMessage(playerid,-1,"Вы нажали кнопку ОТЛИЧНО");











h_1435150230_4820681_53d2e3927c.png


Пример:

CMD:dialog2(playerid, params[])
{
ShowPlayerDialog(playerid, 2101, DIALOG_STYLE_INPUT, "PAWNO-CRMP.RU",
"{A5C3DE}Специально для {F7AC67}PAWNO-CRMP.RU\n\
{A5C3DE}Стиль диалога - {F7AC67}DIALOG_STYLE_INPUT\n\n\
{A5C3DE}Этот стиль позволяет вводить в диалоговое окно нужную информацию.",
"Далее","Отмена");
return 1;
}
if(dialogid == 2101)
{
if(!response)
{
//Если нажал кнопку 2
SendClientMessage(playerid,-1,"Вы нажали кнопку ОТМЕНА");
return 1;
}
if(!strlen(inputtext))
{
//Если игрок ничего не ввел и нажал кнопку ДАЛЕЕ
return 1;
}
//Если ввел текст и нажал кнопку ДАЛЕЕ, то показываем веденный текст всем игрокам на сервере
new ss[144];
format(ss,sizeof(ss),"%s",inputtext);
SendClientMessageToAll(-1,ss);
}










h_1435150230_3466455_aaec4c937a.png


Пример:

CMD:dialog3(playerid, params[])
{
ShowPlayerDialog(playerid, 2102, DIALOG_STYLE_LIST, "PAWNO-CRMP.RU",
"Специально для {F7AC67}PAWNO-CRMP.RU\n\
"W"Стиль диалога - {F7AC67}DIALOG_STYLE_LIST\n\n\
"W"Этот стиль позволяет показать список параметров.",
"Выбор","Отмена");
return 1;
}
if(dialogid == 2102)
{
if(!response)
{
//Если нажал кнопку 2
SendClientMessage(playerid,-1,"Вы нажали кнопку ОТМЕНА");
return 1;
}
//Если нажал кнопку 1
//Узнаем какую из строк в диалоговом окне выбрал игрок. НАЧИНАЕТСЯ С НУЛЯ
switch(listitem)
{
case 0:
{
SendClientMessage(playerid,-1,"Вы выбрали параметр ПЕРВУЮ СТРОЧКУ");
}
case 1:
{
SendClientMessage(playerid,-1,"Вы выбрали параметр ВТОРУЮ СТРОЧКУ");
}
case 2:
{
SendClientMessage(playerid,-1,"Вы выбрали параметр ТРЕТЬЮ СТРОЧКУ");
}
}
}










h_1435150231_6300962_75d2bc24ca.png


Пример:

CMD:dialog4(playerid, params[])
{
ShowPlayerDialog(playerid, 2103, DIALOG_STYLE_PASSWORD, "PAWNO-CRMP.RU",
"{A5C3DE}Специально для {F7AC67}PAWNO-CRMP.RU\n\
{A5C3DE}Стиль диалога - {F7AC67}DIALOG_STYLE_PASSWORD\n\n\
{A5C3DE}Этот стиль похож на DIALOG_STYLE_INPUT, но вся веденная информация - {F7AC67}скрыта в виде точек.",
"Выбор","Отмена");
return 1;
}
if(dialogid == 2103)
{
if(!response)
{
//Если нажал кнопку 2
SendClientMessage(playerid,-1,"Вы нажали кнопку ОТМЕНА");
return 1;
}
if(!strlen(inputtext))
{
//Если игрок ничего не ввел и нажал кнопку ВЫБОР
return 1;
}
//Если нажал кнопку 1
/*В принципе, никакого отличия от DIALOG_STYLE_INPUT, но здесь,
предположим, что вы ввели пароль от аккаунта.*/
new ss[144];
format(ss,sizeof(ss),"Вы ввели пароль: %i",inputtext);
SendClientMessage(playerid,-1,ss);
}








В принципе, обо всём я уже рассказал в коде. Теперь, о загадочном \n и других дополнительных функциях который вы могли заметить в коде.


\n - новая строка (т.е перенести текст на новую строку)
\r - возврат каретки (если честно, не заметил никакого эффекта при использовании)
\b - забой (тоже самое что и с \r)
\f  - перевод страницы (не знаю как у вас, но у меня добавило открытую и закрытую квадратную скобку)
\' - одиночная кавычка
\" - двойные кавычки
\? - вопросительный знак (при использовании этой функции, у меня error 027: invalid character constant, она вроде бы нужна для того, чтобы поставить вопросительный знак. Только вопрос зачем? Если его и так можно поставить.)
\t - табуляция
В SA-MP 0.3.7 добавлены два новых типа диалоговых окна, но это уже совсем другая история.. (на CRMP пока не поддерживается)

Автор урока: compan
 
Последнее редактирование: