shape1
shape2
shape3
shape4
shape7
shape8

Работа с диалогами и с чем их едят


_KostyaGames_

Новичок
Пользователь
10.05.2016
39
7
0
Привет, уважаемые форумчане!
Я к вам вернулся с уроком по диалогам.
Давайте же начнём.

Для начала сделаем основу диалогам в OnDialogResponse:

switch(dialogid){
case 1:
{
//Первый диалог
}
case 2:
{
//Второй диалог
}
//Ну в общем я думаю принцип системы ясен.
}

Разберём типы диалогов

DIALOG_STYLE_INPUT - это диалог в который вводится текст.
DIALOG_STYLE_PASSWORD - это диалог в который вводится текст, но он зашифрован точками.
DIALOG_STYLE_LIST - это диалог в котором выбирают предмет из списка.
DIALOG_STYLE_MSGBOX - это диалог который отображает текст.

Ну а теперь разберём функцию показа диалога на примере команды:


CMD:showdialog1(playerid, params[]) //Какой вы процессор используете впринципе не важен
{
ShowPlayerDialog(playerid /* Кому показываем диалог */,DIALOG_STYLE_INPUT /* Тип диалога */,1 /* ID диалога */, "Заголовок", "Содержимое диалога", "Кнопка1", "Кнопка2");
}
Теперь сделаем так чтобы нам выводило текст из строки которую игрок ввёл в чат.
Это мы будем писать в кейс диалога:

case 1:
{
if(response){ // 1 кнопка
if(inputtext != null) return "Поле пустое"; // Проверка на то что в строке что-то есть
SendClientMessage(playerid, -1, inputtext); // Отправляем ему этот текст
} else { // 2 кнопка
SendClientMessage(playerid, -1, "Вы нажали кнопку 2"); // Отправляем игроку текст что он нажал кнопку 2
}
}
Мы разобрали этот тип диалога. Принцип работы с PASSWORD тот же самый поэтому я показывать это не буду.
Перейдём сразу к LIST. Показ диалога немного другой.

ShowPlayerDialog(playerid /* Кому показываем диалог */,DIALOG_STYLE_LIST /* Тип диалога */,1 /* ID диалога */, "Заголовок", "Персонаж\nПротивник\nИграть", "Кнопка1", "Кнопка2");

Теперь будем писать диалог:

case 1:
{
if(response){ // 1 кнопка
switch(listitem){ // Switch всех айтемов списка
case 0: { // 1
// Что-то происходит...
}
case 1: { // 2
// Что-то происходит...
}
case 2: { // 3
// Что-то происходит...
}
}
} else { // 2 кнопка
SendClientMessage(playerid, -1, "Вы нажали кнопку 2"); // Отправляем игроку текст что он нажал кнопку 2
}
}

Ну и наконец MSG_BOX.

ShowPlayerDialog(playerid, DIALOG_STYLE_MSGBOX, 1,"Заголовок","Строка 1\nСтрока 2", "Кнопка 1", "Кнопка 2");

case 1:
{
if(response){ // Кнопка 1
// Что-то происходит...
} else { // Кнопка 2
// Что-то происходит...
}
}

MSGBOX может только что-то делать на кнопки отображать текст.

Если что-то попутал исправьте.
Автор урока: _KostyaGames_

 

Remmi_Channel

Ничего особенного, просто создаю проект и помогаю
Пользователь
27.10.2015
362
1
37
0
22
@_KostyaGames_, думаю было бы уместно сделать привязку как к пикапу так и к команде ибо новичкам было бы приятно видеть здесь нежели бегать по темам 

 
Последнее редактирование модератором:

Vlad_Trifonov

Гуру
Пользователь
13.03.2015
1 465
5
331
0
@Remmi_Channel, а чего там привязывать? Строку-то одну, я думаю, они догадаются перенести. Тут и знания не нужны, все логично.  

 

16Shadows

99% причин ошибок сидят в 50 сантиметрах от монито
Пользователь
15.03.2017
0
1
42
0
@_KostyaGames_, дополню, чтобы не путаться в id диалогов, можно дефайнить id диалогов
 

#define DIALOG_EXAMPLE 1

Или задать id  с помощью enum'a
 

enum
{
DIALOG_EXAMPLE_1,
DIALOG_EXAMPLE_2
};

И в ShowPlayerDialog использовать
 

ShowPlayerDialog(playerid /* Кому показываем диалог */,DIALOG_STYLE_LIST /* Тип диалога */,DIALOG_EXAMPLE /* ID диалога */, "Заголовок", "Персонаж\nПротивник\nИграть", "Кнопка1", "Кнопка2");

А в OnPlayerDialogResponse
 

Код:
switch(dialogid)
{
    case DIALOG_EXAMPLE_1: {}
    case DIALOG_EXAMPLE_2: {}
}
 

16Shadows

99% причин ошибок сидят в 50 сантиметрах от монито
Пользователь
15.03.2017
0
1
42
0
@_KostyaGames_, наиболее эффективный способ - enum.

Если не знаете, почитайте о его работе. Так точно не сбиться в id диалогов.