Как сделать диалоговое окно самп
Добавил пользователь Morpheus Обновлено: 18.09.2024
dialogid: например 1-2-3-4-5. и т.д
Стили: 3 стиля диалогового окна.
Стиль 0=DIALOG_STYLE_MSGBOX
Стиль 1=DIALOG_STYLE_INPUT
Стиль 2=DIALOG_STYLE_LIST
caption: Название диалога
info: Текст в диалоговом окне
button1: Первая кнопка например: Ок, Login
button2: вторая кнопка .Пример:Cancel
Вот вам пример кода:
if(strcmp(cmdtext, "/login", true) == 0)
<
new s[128];
new loginname[MAX_PLAYER_NAME];
GetPlayerName(playerid,loginname,MAX_PLAYER_NAME);
format(s,sizeof(s),"Welcome again, %s!\n\nContiune to login!",loginname);
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Login Plase!",s,"Login","Cancel");
return 1;
>
if(strcmp(cmdtext, "/login", true) == 0)
<
new s[128];
new loginname[MAX_PLAYER_NAME];
GetPlayerName(playerid,loginname,MAX_PLAYER_NAME);
format(s,sizeof(s)," Здарова еще раз, %s!\n\n Зайди под своим ником!",loginname);
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT," Форма Логина!",s," Логин"," Отмена");
return 1;
>
Проверено, пишет по-русски.. ладно продолжим туториал. Дальше вообще то отсутствует функция работы с диалоговым окном, т.е. что будет срабатывать если нажали на Ок. в туториале который я переводил но шас попробую вам рассказать сам.
Вот паблик функции работы с ней:
Сейчас расскажу здесь что означает:
playerid: ну я думаю вы поняли что это ид игрок.
dialogid: ид диалогового окна
response: проверка нажал ли игрок на первую кнопку или на вторую
listitem: если выбрали стиль окна DIALOG_STYLE_LIST ,то это будет выбор опции находящего в списке
inputtext[] это то что игрок ввел в поле, например, в системе регистрации.
Сейчас сделаю скрипт диалогового окна на примере стиля DIALOG_STYLE_MSGBOX(0).
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
<
if(dialogid == 0)
<
if(response)
<
//Здесь то что случится если игрок нажмет на кнопка1
>
else
<
//А здесь если он нажмет кнопка2
>
>
>
Сама функция, вместе с её параметрами выглядит примерно так - ShowDialog ( style, caption, text, button1, button2, id )
Style - основной параметр, отвечающий за стиль самого диалога.
Captain - заголовок вашего диалога.
Text - текст внутри вашего диалога.
Button1/2 - название кнопок в диалоге ( если нужна только 1 кнопка, вторую оставляйте пустой )
Id - необязательный параметр, позволяет задать персональный ID вашему диалогу, для дальнейшего его считывания.
Сразу поговорим про Escape-последовательности, это специальные знаки, которые влияют на вид вашего текста. Этому есть более сложное объяснение, но для AHK этого не нужно. Я покажу вам 2 основные последовательности:
` - основной экранирующий символ.
`n - перенос строки.
`t - горизонтальная табуляция ( отступ ).
Ну и конечно же нельзя забыть про покраску текста, для этого мы используем HTML-цвета . Думаю как красить через HTML, проблем у вас нет.
< CODE >TEXT
Приступим к самим диалогам.
В AHK существует 3 основных диалога, и несколько дополнительных.
Самый простой информационный диалог. Используют обычно для вывода информации, например /help или шпоры. Но не рекомендую загружать в него много текста. Сразу сможете увидеть работу HTML цветов.
Диалог для ввода информации. Есть несколько способов получить введенный текст, один уже немного стар, второй ещё можно использовать.
Один из самых распространённых диалогов, используют для выбора. Чтобы повесить действие на строку вам нужно ещё одна функция (LineResult), которую вам нужно засунуть в конец вашего кода или в SAMP UDF.
Почти такой же, как и 1, только скрывает введенный текст звездочками. Получить из него текст точно так же, как и в 1. Только учтите, что полученный текст скрыт не будет.
Дополнительные диалоги(редкие, но использовать можно)
Будьте внимательны к разметке в данном диалоге, сложно читать текст внутри из-за того что весь этот текст наслаивается друг на друга. Escape-последовательности также сбивают с толку.
Получить информацию с 2 диалогов ниже можно точно так же, как и со 2 стиля.
Такой, как 4, только добавлены шапки, сверху, в которых также можно написать дополнительную информацию. Из этого диалога сделан Tab(список игроков в онлайн).
ShowPlayerDialog(playerid, 8008 , DIALOG_STYLE_MSGBOX, "Тут название", "Тут текст", "Кнопка1", "Кнопка2");
2) Диалог с полем, в которое можно ввести что-либо Ид: 1Название: DIALOG_STYLE_INPUTСкриншот: Код диалога: Код:
ShowPlayerDialog(playerid,8009,DIALOG_STYLE_INPUT,"Тут название","Тут ваш текст","Кнопка1","Кнопка2");
3) Диалог, со списком Ид: 2Название: DIALOG_STYLE_LISTСкриншот: Код диалога: Код:
ShowPlayerDialog(playerid, 8007, DIALOG_STYLE_LIST, "Тут название", "Пункт 1\nПункт 2", "Кнопка1", "Кнопка2");
4) Диалог, с полем ввода(используется для ввода пароля) он просто шифрует введеные символы точками Внимание: диалог был добавлен в версию клиента samp 0.3d (я его не тестировал, поэтому и скрин с офф сайта) Ид: 3Название: DIALOG_STYLE_PASSWORDСкриншот: Код диалога: Код:
ShowPlayerDialog(playerid, 8008, DIALOG_STYLE_PASSWORD, "Тут название", "Тут текст(можете написать 'Введите пароль')", "Кнопка1", "Кнопка2");
dialogid: id диалога/использующийся диалогом идентификатор
style: доступные стили диалогового окна(Всего 3):
Рассмотрим как создать окно c выбором оружия как на скриншоте!?
Код диалогового окна(вставляем куда это возможно,к примеру в комманды):
ShowPlayerDialog(playerid, dialogid, 2, "List of weapons:", "1\tDeagle\n2\tSawnoff\n3\tPistol\n4\tGrenade\n5\tParachute\n6\tLorikeet", "Select", "Cancel");
* Параметр: \n в тексте диалога перенос на новую строку
** Кавычки " " перед началом текста и в конце обязательны!
Теперь создаём public отвечающий за использование диалоговых окон(Выбрал какое то оружие или отказался от выбора)
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
<
if(dialogid == ид диалога указанный вами)
<
if(response) // Первая кнопка,если игрок согласился(Выбрал)
<
if(listitem == 0) // id выбранной опции(у первой строки всегда 0 id)
<
GivePlayerWeapon(playerid, 24, 100);// Даём игроку Deagle
>
if(listitem == 1)
<
GivePlayerWeapon(playerid, 26, 100);// Даём игроку Sawnoff
>
if(listitem == 2) // Остальные попробуйте расставить сами
<
GivePlayerWeapon(playerid, 22, 100);// Даём игроку Кольт
>
>
else // Если игрок нажал вторую кнопку "CANCEL"
<
SendClientMessage(playerid,COLOR_RED," Вы вышли из меню.");
>
>
return 1;
>
ИНФОРМАЦИОННО-РАЗВЛЕКАТЕЛЬНЫЙ ПОРТАЛ
PrR[ Проект SAMP - Romashka [0.3e] ™18+™
- 0 - DIALOG_STYLE_MSGBOX - обычный диалог с 2мя кнопками,
- 1 - DIALOG_STYLE_INPUT - диалог с полем для ввода,
- 2 - DIALOG_STYLE_LIST - список из нескольких элементов.
- 3 - DIALOG_STYLE_PASSWORD – диалог с полем ввода пароля.
1 ShowPlayerDialog(playerid, , , , , , );
Обычно, чтобы не запоминать цифры и не писать длинное название стилей диалогов, я заменяю их такими константами:
Для написания основного текста диалогового окна вы можете использовать:
\b backspaсe
\f Form feed
\n переход на новую строку
\r возврат каретки
\t табуляция
\v вертикальная табуляция
\' одиночная кавычка
\" двойные кавычки
\? вопросительный знак
Итак, переходим к практике или к разбору первого стиля: DIALOG_STYLE_MSGBOX . Рассмотрим обычный пример: Мы вводим команду, и появляется диалоговое окно с запросом о подтверждении выполнения команды. Для начала мы напишем скрипт простейшей команды в автовызываемую функцию OnPlayerCommandText
if (strcmp("/test", cmdtext, true, 10) == 0)
return 1;
>
Затем с помощью функции ShowPlayerDialog мы вызовем данное диалоговое окно. Так как вызывать меню мы будем с помощью команды, то и пишем данную функцию, приведенную ниже внутри нее.
- Цифра 0 – это идентификатор (ID) диалога, у каждого диалога свой ID.
- После идентификатора пишем название стиля диалога, но он заменен константой, поэтому написано DSM (DIALOG_STYLE_MSGBOX) .
- После стиля пишем название диалога.
- Далее пишем текст диалога и название первой и второй кнопки.
if (strcmp("/test", cmdtext, true, 10) == 0)
ShowPlayerDialog(playerid,0,DSM,"Подтверждение", "Вы точно хотите выполнить команду","Да","Нет");
return 1;
>
А диалоговое окно будет выглядеть так:
Писать функцию диалогового окна мы будем в автовызываемой функции OnDialogResponse . Сначала внутри функции мы напишем условную конструкцию, которая будет проверять, что данное диалоговое окно было вызвано. Код условия такой:
if(dialogid == 0) //Условие: если мы вызвали диалог с > >
Условие проверяет: было ли вызвано диалоговое окно с Внутрь этой условной конструкции
добавляем еще одно условие:
if(response) //Условие: если мы нажали первую кнопку
>
else //Условие: если мы нажали вторую кнопку
>
Условие проверяет, была ли нажата первая кнопка, если нажата вторая кнопка, то выполняется код после else. Внутри этой условной конструкции для первой кнопки мы пишем следующий код.
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, эту функцию, которая возвратит значение, которое и будет значением этой переменной.
Второе диалоговое окно будет выглядеть следующим образом:
Вернемся к условию, если будет нажата вторая кнопка в первом диалоге, тут все просто без объяснений в else пишем:
Читайте также: