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,"Умничка!!");// выводим ему сообщение } } Нажали Выбрать
Автор неизвестен.
|
|
| |