Создание Диалоговых Окон. -
BaRRyS3R - 24.03.2010
Диалоговые меню.
Итак, в данном уроке я научу вас создавать диалоговые меню.
Для начала узнаем что из себя представляет диалог. Сам по себе диалог - это GUI (Graphical User Interface)
Графический интерфейс пользователя (ГИП) — разновидность пользовательского интерфейса, в котором элементы интерфейса (меню, кнопки, значки, списки и т. п.), представленные пользователю на дисплее, исполнены в виде графических изображений. © Wikipedia
В сампе есть 3 разновидности GUI:
ID - Объяснение
0 - Обычное окно с сообщением.
1 - Окно с возможностью ввода данных.
2 - Окно со списком.
Итак, сделаем небольшой Фильтрскрипт, который:
1) При входе попреветствует нас.
2) Попросит ввести дату рождения.
3) Предложит выбрать пол.
Итак, начнем с приветствия:
В паблик "OnPlayerConnect" Мы напишем следующее:
Code:
public OnPlayerConnect(playerid)
{
new pName[MAX_PLAYERS], string[256];
GetPlayerName(playerid, pName, sizeof(pName));
format(string, sizeof(string), "Добро пожаловать на сервер, %s", pName);
ShowPlayerDialog(playerid, 666 , 0, "Welcome Message", string, "OK", "Cancel");
return 1;
}
ShowPlayerDialog(playerid, 666 , 0, "Welcome Message", string, "OK", "Cancel");
Тут:
playerid - ИД игрока, вошедшего на сервер.
666 - ИД диалогового окна. (Я написал 666, так как если на сервере будет 2 диалоговых окна с одинаковым ид, то они не будут работать, по этому надо "изощряться")
0 - Стиль диалога. В нашем случае - Диалог с сообщением.
Welcome Message - Название диалога.
string - Вывод строки, которую мы форматировали выше.
OK - Кнопка 1 (Обычно согласие)
Candel - Кнопка 2 (Обычно отмена)
Вот и готов наш диалог приветствия.
Теперь мы сделаем диалог, просящий ввести вас дату рождения.
Code:
public OnPlayerConnect(playerid)
{
ShowPlayerDialog(playerid, 777, 1, "Дата рождения", "Пожалуйста введите вашу дату рождения:", "OK", "Cancel");
return 1;
}
Тут:
playerid - ИД игрока, вошедшего на сервер.
777 - ИД диалогового окна. (Я написал 666, так как если на сервере будет 2 диалоговых окна с одинаковым ид, то они не будут работать, по этому надо "изощряться")
1 - Стиль диалога. В нашем случае - Диалог ввода.
Дата рождения - Название диалога.
Пожалуйста введите вашу дату рождения: - Текст сообщения, внутри диалогового окна.
OK - Кнопка 1 (Обычно согласие)
Candel - Кнопка 2 (Обычно отмена)
Мы создали диалог ввода, но он же должен что то делать, так?
Хм, тогда создадим (если нету) паблик
OnDialogResponse
Code:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
return 0;
}
Тут:
playerid - ИД игрока.
dialogid - ИД диалога.
response - Распознавание, нажал игрок кнопку 1, или 2.
listitem - ИД Элемента, выбранного из списка игроком.
inputtext[] - Текст введенный в диалоговое окно ввода.
По скольку у нас урок по диалоговым окнам, то и делать мы постараемся все на них.
По этому, после ввода даты рождения, она выведеться в Текстовом диалоговом окне.
Для того что бы это сделать, в паблик
OnDialogResponde пишем следующее:
Code:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 777)
{
if(!response) SendClientMessage(playerid, 0xFFFFFF, "Была нажата Отмена");
else
{
new string[256];
format(string, sizeof(string), "Ваша дата рождения: %s", inputtext);
ShowPlayerDialog(playerid, 888, 0, "Дата рождения", string, "OK", "Cancel");
}
}
return 0;
}
Тут:
if(dialogid == 777) - Проверка ИД Диалога.
if(!response) - Если нажал отмену.
else... - Если нажал OK, то в диалоговом окне выведеться дата рождения.
Итак, мы уже создали 2 из 3х типов диалоговых окон. /me танцует ча ча ча =D
Создадим последнее дилоговое окно - Выбор пола.
Все как обычно:
Code:
public OnPlayerConnect(playerid)
{
ShowPlayerDialog(playerid, 999, 2, "Ваш пол:", "Мужской\nЖенский", "OK", "Cancel");
return 1;
}
Тут:
Все по новой писать не буду.
"Мужской\nЖенский" - 1ая строка - "Мужской", 2ая - "Женский". \n - Переход на следующую строку.
Code:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 999)
{
if(!response) SendClientMessage(playerid, 0xFFFFFF, "Была нажата Отмена");
else
{
if(listitem == 0) SendClientMessage(playerid, 0xFFFFFF, "Поздравляем, вы - самец.");
else if(listitem == 1) SendClientMessage(playerid, 0xFFFFFF, "Поздравляем, вы - прекрасная половина человечества :)");
}
}
return 0;
}
Тут:
if(!response) - Если нажал отмену.
listitem == 0 - 1ая строка.
listitem == 1 - 2ая строка.
Вот так мы создали 3 диалоговых окна.
Хм... Ну а теперь давайте объеденим их.
Code:
public OnPlayerConnect(playerid)
{
new pName[MAX_PLAYERS], string[256];
GetPlayerName(playerid, pName, sizeof(pName));
format(string, sizeof(string), "Добро пожаловать на сервер, %s", pName);
ShowPlayerDialog(playerid, 666 , 0, "Welcome Message", string, "OK", "Cancel");
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 666)
{
if(!response) SendClientMessage(playerid, 0xFFFFFF, "Была нажата Отмена");
else ShowPlayerDialog(playerid, 777, 1, "Дата рождения", "Пожалуйста введите вашу дату рождения:", "OK", "Cancel");
}
else if(dialogid == 777)
{
if(!response) SendClientMessage(playerid, 0xFFFFFF, "Была нажата Отмена");
else
{
new string[256];
format(string, sizeof(string), "Ваша дата рождения: %s", inputtext);
ShowPlayerDialog(playerid, 888, 0, "Дата рождения", string, "OK", "Cancel");
}
}
else if(dialogid == 888)
{
if(!response) SendClientMessage(playerid, 0xFFFFFF, "Была нажата Отмена");
else ShowPlayerDialog(playerid, 999, 2, "Ваш пол:", "Мужской\nЖенский", "OK", "Cancel");
}
else if(dialogid == 999)
{
if(!response) SendClientMessage(playerid, 0xFFFFFF, "Была нажата Отмена");
else
{
if(listitem == 0) SendClientMessage(playerid, 0xFFFFFF, "Поздравляем, вы - самец.");
else if(listitem == 1) SendClientMessage(playerid, 0xFFFFFF, "Поздравляем, вы - прекрасная половина человечества :)");
}
}
return 0;
}
Получившийся Фильтерскрипт:
Pastebin
С вами был BaRRy, спасибо за внимание.
Re: [Урок] Создание Диалоговых Окон. -
DeaD_MaN - 03.04.2010
прикольно =)
Re: Создание Диалоговых Окон. -
crazyboy - 17.07.2010
с мта несравнимо)
Re: Создание Диалоговых Окон. -
Riaz - 17.07.2010
ну ты тоже, сравнил самп и мта.