[Tutorial] Создание Диалоговых Окон.
#1

Диалоговые меню.

Итак, в данном уроке я научу вас создавать диалоговые меню.

Для начала узнаем что из себя представляет диалог. Сам по себе диалог - это 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, спасибо за внимание.
Reply
#2

прикольно =)
Reply
#3

с мта несравнимо)
Reply
#4

ну ты тоже, сравнил самп и мта.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)