Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Все о диалогах и всех типах (0.3z)

Статус
В этой теме нельзя размещать новые ответы.

_FliKZeT_

Умник



Автор мануала: XaskeL(_FliKZeT_)

Думаю мало кто знает как использовать/создавать - диалоги, из новичков Pawn.
В этом уроке, я попробую объяснить что к чему с этой темой 'диалоги'.


1) Как создавать диалог? Функция: ShowPlayerDialog возможно у вас используются диалоги типа SPD, если создать по стандарту через ShowPlayerDialog после его закрытия вас будет просто кикать, если такая проблема есть, замените функцию ShowPlayerDialog на SPD
Чтобы создать диалог, нам нужна команда или его вызов в stock, действия диалогам, а именно кнопкам задаются через паблик OnDialogResponse

Вывод диалога:

PHP:
ShowPlayerDialog(playerid,D_LOGIN,DIALOG_STYLE_PASSWORD,"заголовок","текст","Кнопка (1)","Кнопка (2)");
D_LOGIN у меня это задейфайненый ID диалога, то есть:

PHP:
#define D_LOGIN 333
333 это ID диалога(номер)
playerid - это кому мы вывели диалог, в данном случае игроку тому кто выполнял действие связанное с вызовом диалога
DIALOG_STYLE_PASSWORD - стиль диалога

Стили диалогов существует 4, такие как(В 0.3.7 RC3 добавили 2 или 3 новых типа диалогов, о них мы поговорим чуть позже):

PHP:
1. DIALOG_STYLE_LIST
2. DIALOG_STYLE_INPUT
3. DIALOG_STYLE_PASSWORD
4. DIALOG_STYLE_MSGBOX
2) Как создать действие на кнопки? Ищем паблик: OnDialogResponse

например у нас был ID диалога 333

Создаем действие:
PHP:
if(dialogid == 333) // ID диалога: 333
{
	if(response)//Кнопка номер 1
	{
	    SendClientMessage(playerid,-1,"Вы нажали на кнопку номер 1");
	}
	if(!response)//Кнопка номер 2
	{
	    SendClientMessage(playerid,-1,"Вы нажали на кнопку номер 2");
	}
	//Тут тоже можно задать действие только оно будет выполнятся независимо от нажатия на кнопку
	return true;
}
Если у вас нет такого: "if(dialogid == 333)" - типо такого, с использованием dialogid. А просто номера типо: case 1: , case 2: , итд, а в начале паблика: switch(dialogid)

То все диалоги будут идти у вас по порядку, но так же с ID'aми

Пример:

PHP:
case 333: // ID диалога: 333
{
	if(response)//Кнопка номер 1
	{
	    SendClientMessage(playerid,-1,"Вы нажали на кнопку номер 1");
	}
	if(!response)//Кнопка номер 2
	{
	    SendClientMessage(playerid,-1,"Вы нажали на кнопку номер 2");
	}
	//Тут тоже можно задать действие только оно будет выполнятся независимо от нажатия на кнопку
	return true;
}
2) Как создать форматированный dialog? К примеру к статистике:

PHP:
new DC = 4;
new asd[60]; // Объявляем переменную
format(asd,sizeof(asd),"Переменная DC равна: %d",DC); // В диалоге будет этот текст, вместо "текст" мы заменяем это на название переменной
ShowPlayerDialog(playerid,333,DIALOG_STYLE_MSGBOX,"Заголовок",asd,"Кнопка 1","Кнопка 2");
Скрины стилей диалогов, кроме INPUT:

DIALOG_STYLE_LIST:
DIALOG_STYLE_MSGBOX:
DIALOG_STYLE_PASSWORD:
DIALOG_STYLE_INPUT: он как PASSWORD, только текст не скрывается.


На всякий случай, stock SPD даю вам, вдруг у кого-то нет, тогда все ShowPlayerDialog заменить на SPD
Либо в начало мода:

PHP:
#define ShowPlayerDialog SPD
Сам stock:

PHP:
stock SPD(playerid, dialogid, style, caption[], info[], button1[], button2[])
{
	ShowPlayerDialog(playerid,dialogid, style, caption, info, button1, button2);
	SetPVarInt(playerid,"USEDIALOGID", dialogid);
	return true;
}
В OnDialogResponse в начало:

PHP:
if(GetPVarInt(playerid,"USEDIALOGID") != dialogid) return Kick(playerid);//Если использовал не существующий диалог, то наказываем игрока.

​
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу