Как сделать диалоговое окно на pawn


Как сделать диалоговое окно на pawn
Как сделать диалоговое окно на pawn
Как сделать диалоговое окно на pawn
Как сделать диалоговое окно на pawn

ADE

10.12.2014, 21:48

ShowPlayerDialog
Данная функция была добавлена в SA-MP 0.3a и не будет работать в более ранних версиях!
Описание:
Показывает диалоговое окно определенному игроку.
Параметры:
(playerid,<ID диалога>,<ID стиля>,<Название>,<Текст>,<Первая кнопка>,<Вторая кнопка>)
Разбор кода:
playerid
ID игрока, которому будет показан диалог.
<ID диалога>
Уникальный ID диалога.
<ID стиля>
Стиль диалогового окна.
<Название>
Заголовок окна.
<Текст>
Текст самого диалога.
<Первая кнопка>
Название первой (левой) кнопки диалога.
<Вторая кнопка>
Название второй (правой) кнопки.
Возвращаемые значения:
Данная функция не возвращает какого-либо конкретного значения.
Стили диалога:
0
DIALOG_STYLE_MSGBOX
Обычный диалог с 2-мя кнопками
1
DIALOG_STYLE_INPUT
Диалог с полем для ввода
2
DIALOG_STYLE_LIST
Список из нескольких элементов
3
DIALOG_STYLE_PASSWORD
Позволяет игрокам вводить пароль не раскрывая его
Функция:
Вызывается диалоговое окно функцией ShowPlayerDialog, структура функции такая:
ShowPlayerDialog(playerid,<ID диалога>,<ID стиля>,<Название>,<Текст>,<Первая кнопка>,<Вторая кнопка>);
Упрощение:
Обычно, чтобы не запоминать цифры и не писать длинное название стилей диалогов, я заменяю их такими макросами:
#define LIST DIALOG_STYLE_LIST
#define PASSWORD DIALOG_STYLE_PASSWORD
#define MSGBOX DIALOG_STYLE_MSGBOX
#define INPUT DIALOG_STYLE_INPUT
Или можно использовать <ID> стиля диалогового окна
Для написания основного текста диалогового окна вы можете использовать нижеприведенную таблицу:
\b
backspaсe
\f
Form feed
\n
Переход на новую строку
\r
Возврат каретки
\t
Табуляция
\v
Вертикальная табуляция
\'
Одиночная кавычка
\"
Двойные кавычки
\?
Вопросительный знак
Пример диалогов:
//пример для DIALOG_STYLE_MSGBOX
ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX,"Уведомление","Вы вошли на сервер","Закрыть","");
//пример для DIALOG_STYLE_INPUT
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Авторизация","Введите свой пароль:","Войти","Отмена");
//пример для DIALOG_STYLE_LIST
ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,"Мой диалог","1. Строка\r\n2. Строка\r\n3. Строка","Опция 1", "Опция 2");
//пример для DIALOG_STYLE_PASSWORD
ShowPlayerDialog(playerid,1,DIALOG_STYLE_PASSWORD,"Авторизация","Введите ваш пароль ниже:","Готово","Отмена");
Ответ на диалог:
Мы сделали диалоговое меню, состоящее из 9 пунктов. А нам надо сделать так, чтобы при нажатии на первый пункт, у нас появлялся другой диалог с другой информацией. Для этот мы будем использовать вот такой код:
case <ID диалога>:
{
if(response)
{
if(listitem == 0) // Первый пункт
{
}
else if(listitem == 1) // Второй пункт
{
}
else if(listitem == 2) // Третий пункт
{
}
else if(listitem == 3) // Четвертый пункт
{
}
else if(listitem == 4) // Пятый пункт
{
}
else if(listitem == 5) // Шестой пункт
{
}
else if(listitem == 6) // Седьмой пункт
{
}
else if(listitem == 7) // Восьмой пункт
{
}
else if(listitem == 8) // Девятый пункт
{
}
}
}
Условные конструкции:
Вот примет одной конструкции
if(response) //Условие: если мы нажали первую кнопку
{
}
else //Условие: если мы нажали вторую кнопку
{
}
Пример диалога с использование условной конструкцией
Создадим команду с использование ZCMD (командный процессор)
CMD:test(playerid, params[])
{
ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX,"Уведомление","Выберите кнопку","Первая","Вторая");
}
if (strcmp("/test", cmdtext, true, 10) == 0)
{
ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX,"Уведомление","Выберите кнопку","Первая","Вторая");
}
И в public OnDialogResponse мы добавим ответ на наш диалог
case 1:
{
if(response) //Условие: если мы нажали первую кнопку
{
SendClientMessage(playerid,0xFFFFFFAA,"Вы нажали первую кнопку");
}
else //Условие: если мы нажали вторую кнопку
{
SendClientMessage(playerid,0xFFFFFFAA,"Вы нажали вторую кнопку");
}
}
Креативизация:
Вы решили создать диалог, а он серы и скучный?
Мы можем раскрасить наш диалог в любые цвета формата RGB.
Пример:
ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX,"{FFFFFF}Уведомление","{3DB6F2}Выберите кнопку","Первая","Вторая");
Цвет мы заключаем в фигурную скобку "{" и "}"
FFFFFF - это белый цвет
3DB6F2 - светло-голубой
Думаю цвета вам не доставит большого труда отыскать. Для этого есть множество поисковых система.
Версия: 1.2
Лучше использовать switch для перебора диалогов.
Что же такое этот оператор switch?
Оператор switch – это оператор выбора. Он удобен в первую очередь тем, что может заменить много условий if, которые проверяют значение одной переменной.
Пример построения с этим оператором:
switch(reason)
{
case 0: // Первый пункт
{
// Тут у Вас что то будет
}
case 1: // Второй пункт
{
// Тут у Вас что то будет
}
case 2: // Третий пункт
{
// Тут у Вас что то будет
}
}
! Стоить отметить, что в официальной документации к языку написано: ‘In pawn, switch is a structured “if”‘, а это значит, что конструкция switch — это набор структурированных if’ов, отсюда следует, что switch не может работать быстрее if. Но это не всегда так.
Примеры by ZiGGi
Следующая конструкция:
switch(var)
{
case 40,80,150,160,230,420: return 1;
}
быстрее, чем
if ( var == 40 || var == 80 || var == 150 || var == 160 || var == 230 || var == 420 ) return 1;
Следующая конструкция:
switch(var)
{
case 40..80,150..160,230..420: return 1;
}
медленнее чем
if ( var >= 40 && var <= 80 || var >= 150 && var <= 160 || var >= 230 && var <= 420 ) return 1;
Следующая конструкция:
switch(var)
{
case 40: return 1;
}
одинакова как и
if ( var == 40 ) return 1;
Следующая конструкция:
switch(var)
{
case 40..50: return 1;
}
быстрее чем
if ( var >= 40 && var <= 50 ) return 1;
Как видим — switch/case медленнее(значительно) if только на больших промежутках значений.
Версия: 1.3
Сейчас бы я хотел немного рассказать вам о том, как можно в один диалог использовать гораздо большее количество символов.
Данный метод подходит, когда есть некоторые переменные, которые нужно внедрить в текст.
new string[кол-во символов];
format(string, sizeof(string), "1 строка");
format(string, sizeof(string), "\n2 строка ",string);
format(string, sizeof(string), "\n3 строка",string);
format(string, sizeof(string), "\n4 строка",string);
format(string, sizeof(string), "\n5строка",string);
ShowPlayerDialog(playerid, НОМЕР_ДИАЛОГА, СТИЛЬ_ДИАЛОГОВОГО_ОКНА, "ЗАГОЛОВОК", string, "КНОПКА1", "КНОПКА2");
Строки - это места для хранения символов (букв и/или символов). Строки должны быть помещены в массив, так что каждая ячейка может содержать букву, вы должны указать экстра-ячейку для идентификатора строки - "0".
new string[128];
format(string, sizeof(string), "Ваше имя: %s",pInfo[playerid][pName]);
format(string, sizeof(string), "\nИгровой уровень: %d",string,pInfo[playerid][pLevel]);
format(string, sizeof(string), "\nДата регистрации: %d ",string,pInfo[playerid][pDataReg]);
format(string, sizeof(string), "\nКоличество убийств: %d и смертей: %d",string,pInfo[playerid][pKills],pInfo[playerid][pDeaths]);
ShowPlayerDialog(playerid, 228, DIALOG_STYLE_MSGBOX, "Статистика", string, "Понятно", "");
Есть еще один метод, который более менее мне известный - это константная переменная. Этот пример часто встречается в RLS/SRL модах. Мне же не очень нравится этот метод.Причины: не очень читабельный для человека, в отличии от первого примера.
static const _n[5][] =
{
"1 строка\n",
"2 строка\n",
"3 строка\n",
"4 строка\n",
"5 строка"
}
format(string, sizeof(string),"%s%s%s%s%s%s", _n[0],_n[1],_n[2],_n[3],_n[5]);
ShowPlayerDialog(playerid, НОМЕР_ДИАЛОГА, СТИЛЬ_ДИАЛОГОВОГО_ОКНА, "ЗАГОЛОВОК", string, "КНОПКА1", "КНОПКА2");
static const _n[11][] =
{
"Lorem Ipsum - это текст-рыба, часто используемый в печати и\n",
"вэб-дизайне. Lorem Ipsum является стандартной рыбой для\n",
"текстов на латинице с начала XVI века. В то время некий \n",
"безымянный печатник создал большую коллекцию размеров и\n",
"форм шрифтов, используя Lorem Ipsum для распечатки образцов.\n"
"Lorem Ipsum не только успешно пережил без заметных изменений\n"
"пять веков, но и перешагнул в электронный дизайн. Его\n"
"популяризации в новое время послужили публикация листов\n"
"Letraset с образцами Lorem Ipsum в 60-х годах и, в более недавнее\n"
"время, программы электронной вёрстки типа Aldus PageMaker, в\n"
"шаблонах которых используется Lorem Ipsum."
}
format(string, sizeof(string),"%s%s%s%s%s%s", _n[0],_n[1],_n[2],_n[3],_n[5],_n[6],_n[7],_n[8],_n[9],_n[10]);
ShowPlayerDialog(playerid, 1337, DIALOG_STYLE_MSGBOX, "Lorem Ipsum", string, "Понятно", "Закрыть");

Powered by vBulletin® Version 4.2.0 Copyright © 2018 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot

Как сделать диалоговое окно на pawn Как сделать диалоговое окно на pawn Как сделать диалоговое окно на pawn Как сделать диалоговое окно на pawn Как сделать диалоговое окно на pawn Как сделать диалоговое окно на pawn Как сделать диалоговое окно на pawn Как сделать диалоговое окно на pawn Как сделать диалоговое окно на pawn Как сделать диалоговое окно на pawn Как сделать диалоговое окно на pawn Как сделать диалоговое окно на pawn

Статьи по теме:



Alarm схема подключения и инструкция

Как сделать стрипсы из курицы

Миндальный маникюр описание

Дежурное освещение схемы

Вязанные косынки на спицах со схемами