MENU
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » SA-MP SCRIPTING » Школа PAWNO » Диалоговые окна (виды/функции)
Диалоговые окна (виды/функции)
Chev_cheliosДата: Вторник, 17-Янв-2012, 17:17 | Сообщение # 1
Уважаемый человек
Сообщений: 104
Награды: 0
Репутация: 63
Статус:
Все действия диалоговых окон находятся в паблике "OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])"
Изначально паблик выглядит вот так:
Code
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])  
{  
     return 1;  
}

Именно сюда мы и будем вписывать действия диалоговых окон.
Так же нам обязательно нужно знать как вызвать/показать, то или иное диалоговое окно.
Вот пример:

Сама функция:
Code
ShowPlayerDialog(playerid,dialogid,style,caption[],info[],button1[],button2[]);

Разберём всё по порядку:
playerid - ID игрока которому мы будем показывать диалоговое окошко
dialogid - ID диалога который собственно и будет показан/задействован
style - стиль диалогового окна (о нём подробнее будет написанно ниже)
caption[] - заголовок окна (пишется в кавычках)
info[] - содержимое окна (пишется в кавычках)
button1[] - текст на кнопочке №1 (пишется в кавычках)
button2[] - текст на кнопочке №2 (пишется в кавычках)

Пока всё выглядит не так и сложно, не так ли?
Привожу пример окна которое я сделал

Если нажал кнопку да

Если нажал кнопку нет


Вот код чтобы показать его игроку:
Code
ShowPlayerDialog(playerid,113,DIALOG_STYLE_MSGBOX,"Наше первое окно","Нажми кнопку да или кнопку нет","Да","Нет");

Вот содержимое:
Code
if(dialogid == 113)// id может быть любым  
      {  
      if(response)  
          {  
         SendClientMessage(playerid,0xF60000AA,"Ты нажал кнопку да");  
          }  
          else   
          {  
          SendClientMessage(playerid,0xF60000AA,"Ты нажал кнопку нет");  
          }  
      }  

Теперь приступим собственно и к самой "начинке"/действиях окна.
Скорее всего вы сразу и не поймёте, что тут такое и за что оно отвечает.
Давайте рассмотрим этот пример, но уже с комментариями:
Code
if(dialogid == 113)// если ID диалога 113  
      {  
      if(response)// если игрок нажал кнопку номер 1 (в нашем случае это да) то игроку будет выведенно сообщение "Ты нажал да"  
          {  
         SendClientMessage(playerid,0xF60000AA,"Ты нажал кнопку да");// выводим сообщение  
          }  
          else // а если игрок нажал 2 кнопку (в нашем случае это кнопка нет) выводим ему сообщение "Ты нажал кнопку нет"  
          {  
          SendClientMessage(playerid,0xF60000AA,"Ты нажал кнопку нет");// выводим сообщение  
          }  
      }  

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

DIALOG_STYLE_MSGBOX - самый лёгкий вид диалоговых окон (использован в примере выше)


DIALOG_STYLE_LIST - окошко со списком (кликаем и выбираем)

Как показать:
Code
ShowPlayerDialog(playerid,113,DIALOG_STYLE_LIST,"Наше первое окно(со списком)","Привет!\nПока!\nУря!","Выбрать","Отмена");

Конструкция:
Code
if(dialogid == 113)// если ID диалога 113  
      {  
      if(response)// если игрок нажал кнопку номер 1 (в нашем случае это да) и.....  
          {  
         if(listitem == 0)//игрок выбрал 1 пункт в окошке  
             {  
             SendClientMessage(playerid,0xF60000AA,"Привет!");// выводим ему сообщение  
             }  
         if(listitem == 1)//игрок выбрал 2 пункт в окошке  
             {  
             SendClientMessage(playerid,0xF60000AA,"Пока!");// выводим ему сообщение  
             }  
         if(listitem == 2)//игрок выбрал 2 пункт в окошке  
             {  
             SendClientMessage(playerid,0xF60000AA,"Уря!");// выводим ему сообщение  
             }  
          }  
          else // а если игрок нажал 2 кнопку (в нашем случае это кнопка Отмена)  
          {  
          // ничего не выводим  
          }  
      }  

Нажал привет он написал в чат

listitem - это номер пункта который игрок выбрал (Примечание: начинается с 0 и далее. Объявлять не надо! т.е. new listitem; писать не надо)
Выбирать можно 2-мя способами:
1. Нажать 1 раз на пункт и затем ОК
2. Щёлкнуть 2 раза по пункту
У вас вероятно возник вопрос: "А что это \n?"
Об этом будет написано ниже...

DIALOG_STYLE_INPUT - окошко в которое можно ввести текст (там будет поле для ввода текста)

Как показать:
Code
ShowPlayerDialog(playerid,113,DIALOG_STYLE_INPUT,"Наше первое окно (уже со строкой ввода)","Введите текст в поле ниже, затем нажмите ОК","ОК","Отмена");

Конструкция:
Code
if(dialogid == 113)// если ID диалога 113  
      {  
      if(response)// если игрок нажал кнопку номер 1 (в нашем случае это ок) то игроку будет показано сообщение  
          {  
         new text[128];// объявляем переменную  
         format(text,128,"Ты написал - %s",inputtext);// формируем текст  
         SendClientMessage(playerid,0xF60000AA,text);// выводим сообщение/текст  
          }  
          else  
          {  
          // ничего не выводим  
          }  
      }  

Ввёл и нажал ОК


DIALOG_STYLE_PASSWORD - окошко в которое можно ввести текст(копия DIALOG_STYLE_INPUT, правда вводимый текст скрыт под кружками, точками. Называйте как хотите)

Как показать:
Code
ShowPlayerDialog(playerid,DIALOG_STYLE_PASSWORD,3,"{bbbbbb}Дополнение к диалогу DIALOG_STYLE_INPUT","То, что ты вводишь будет закрыто кружками.","Ввод","Отмена");

Конструкция:
Code
if(dialogid == 113)// если ID диалога 113  
     {  
     if(response)  
         {  
         new tmp[61];  
         format(tmp,sizeof(tmp),"Вы ввели: %s",inputtext);  
         SendClientMessage(playerid,-1,tmp);  
         }  
     else  
         {  
         //если нажал "отмена"  
         }  
     return 1;  
     }

Вводим текст и нажимаев Ввод


Наверное вы заметили переменную inputtext.
Объясняю. На самом деле это массив в который и записывается, то что мы вводим (объявлять не надо! т.е. new inputtext[256]; писать не надо)
Теперь о загадочном \n
\n это дополнительная функция работы с текстом (и не только она см. список ниже)

\n - new line - новая строка
\r - возврат каретки
\b - backspae - забой
\f - Form feed - перевод страницы
\' - одиночная кавычка
\" - двойные кавычки
\? - вопросительный знак
\t - табуляция

И ещё...
Текст содержимого можно разукрасить, вот пример и код

Как показать:
Code
ShowPlayerDialog(playerid,113,DIALOG_STYLE_MSGBOX,"Наше первое окно","{7fc7ff}Теперь {ffffff}я умею{faff7f}делать вот такие окошки","Выбрать","Отмена");

Конструкция:
Code
if(dialogid == 113)  
      {  
      if(response)  
          {  
         SendClientMessage(playerid,0xF60000AA,"Умничка!!");// выводим ему сообщение  
          }  
      }

Нажали Выбрать


Автор неизвестен.


 
Форум » SA-MP SCRIPTING » Школа PAWNO » Диалоговые окна (виды/функции)
  • Страница 1 из 1
  • 1
Поиск: