24.03.2010, 15:29
Диалоговые меню.
Итак, в данном уроке я научу вас создавать диалоговые меню.
Для начала узнаем что из себя представляет диалог. Сам по себе диалог - это GUI (Graphical User Interface)
Графический интерфейс пользователя (ГИП) — разновидность пользовательского интерфейса, в котором элементы интерфейса (меню, кнопки, значки, списки и т. п.), представленные пользователю на дисплее, исполнены в виде графических изображений. © Wikipedia
В сампе есть 3 разновидности GUI:
ID - Объяснение
0 - Обычное окно с сообщением.
1 - Окно с возможностью ввода данных.
2 - Окно со списком.
Итак, сделаем небольшой Фильтрскрипт, который:
1) При входе попреветствует нас.
2) Попросит ввести дату рождения.
3) Предложит выбрать пол.
Итак, начнем с приветствия:
В паблик "OnPlayerConnect" Мы напишем следующее:
ShowPlayerDialog(playerid, 666 , 0, "Welcome Message", string, "OK", "Cancel");
Тут:
playerid - ИД игрока, вошедшего на сервер.
666 - ИД диалогового окна. (Я написал 666, так как если на сервере будет 2 диалоговых окна с одинаковым ид, то они не будут работать, по этому надо "изощряться")
0 - Стиль диалога. В нашем случае - Диалог с сообщением.
Welcome Message - Название диалога.
string - Вывод строки, которую мы форматировали выше.
OK - Кнопка 1 (Обычно согласие)
Candel - Кнопка 2 (Обычно отмена)
Вот и готов наш диалог приветствия.
Теперь мы сделаем диалог, просящий ввести вас дату рождения.
Тут:
playerid - ИД игрока, вошедшего на сервер.
777 - ИД диалогового окна. (Я написал 666, так как если на сервере будет 2 диалоговых окна с одинаковым ид, то они не будут работать, по этому надо "изощряться")
1 - Стиль диалога. В нашем случае - Диалог ввода.
Дата рождения - Название диалога.
Пожалуйста введите вашу дату рождения: - Текст сообщения, внутри диалогового окна.
OK - Кнопка 1 (Обычно согласие)
Candel - Кнопка 2 (Обычно отмена)
Мы создали диалог ввода, но он же должен что то делать, так?
Хм, тогда создадим (если нету) паблик OnDialogResponse
Тут:
playerid - ИД игрока.
dialogid - ИД диалога.
response - Распознавание, нажал игрок кнопку 1, или 2.
listitem - ИД Элемента, выбранного из списка игроком.
inputtext[] - Текст введенный в диалоговое окно ввода.
По скольку у нас урок по диалоговым окнам, то и делать мы постараемся все на них.
По этому, после ввода даты рождения, она выведеться в Текстовом диалоговом окне.
Для того что бы это сделать, в паблик OnDialogResponde пишем следующее:
Тут:
if(dialogid == 777) - Проверка ИД Диалога.
if(!response) - Если нажал отмену.
else... - Если нажал OK, то в диалоговом окне выведеться дата рождения.
Итак, мы уже создали 2 из 3х типов диалоговых окон. /me танцует ча ча ча =D
Создадим последнее дилоговое окно - Выбор пола.
Все как обычно:
Тут:
Все по новой писать не буду.
"Мужской\nЖенский" - 1ая строка - "Мужской", 2ая - "Женский". \n - Переход на следующую строку.
Тут:
if(!response) - Если нажал отмену.
listitem == 0 - 1ая строка.
listitem == 1 - 2ая строка.
Вот так мы создали 3 диалоговых окна.
Хм... Ну а теперь давайте объеденим их.
Получившийся Фильтерскрипт:
Pastebin
С вами был BaRRy, спасибо за внимание.
Итак, в данном уроке я научу вас создавать диалоговые меню.
Для начала узнаем что из себя представляет диалог. Сам по себе диалог - это 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; }
Тут:
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, спасибо за внимание.