Активный
- Тема Автор
- #1
Диалоги - важный элемент интерфейса для взаимодействия с игроками. Разберем все типы.
Типы диалогов:
- DIALOG_STYLE_MSGBOX - простое сообщение с кнопками
- DIALOG_STYLE_INPUT - ввод текста
- DIALOG_STYLE_LIST - список для выбора
- DIALOG_STYLE_PASSWORD - ввод пароля
- DIALOG_STYLE_TABLIST_HEADERS - таблица с заголовками
- DIALOG_STYLE_TABLIST - таблица
Простое сообщение (MSGBOX)
Ввод текста (INPUT)
Список (LIST)
Пароль (PASSWORD)
Обработка ответов
Определение ID диалогов
Динамические списки
Важные моменты:
- Всегда проверяйте response (нажата ли кнопка)
- Проверяйте длину inputtext перед использованием
- Используйте listitem для определения выбранного элемента
- Ограничение длины текста диалога - 4096 символов
Диалоги делают сервер интерактивным и удобным!
Типы диалогов:
- DIALOG_STYLE_MSGBOX - простое сообщение с кнопками
- DIALOG_STYLE_INPUT - ввод текста
- DIALOG_STYLE_LIST - список для выбора
- DIALOG_STYLE_PASSWORD - ввод пароля
- DIALOG_STYLE_TABLIST_HEADERS - таблица с заголовками
- DIALOG_STYLE_TABLIST - таблица
Простое сообщение (MSGBOX)
Код:
ShowPlayerDialog(playerid, DIALOG_WELCOME, DIALOG_STYLE_MSGBOX,
"Добро пожаловать",
"Добро пожаловать на сервер!\nНажмите OK для продолжения.",
"OK", "");
Ввод текста (INPUT)
Код:
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,
"Вход в систему",
"Введите ваш пароль:",
"Войти", "Отмена");
Список (LIST)
Код:
new list[256] = "Оружие 1\nОружие 2\nОружие 3\nОружие 4";
ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_LIST,
"Выбор оружия",
list,
"Выбрать", "Отмена");
Пароль (PASSWORD)
Код:
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,
"Регистрация",
"Введите пароль для регистрации:",
"Зарегистрироваться", "Отмена");
Обработка ответов
Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_WELCOME:
{
if(response)
{
SendClientMessage(playerid, -1, "Добро пожаловать!");
}
}
case DIALOG_LOGIN:
{
if(response)
{
if(strlen(inputtext) > 0)
{
// Проверка пароля
if(CheckPassword(playerid, inputtext))
{
SendClientMessage(playerid, -1, "Успешный вход!");
}
else
{
SendClientMessage(playerid, -1, "Неверный пароль!");
}
}
}
}
case DIALOG_WEAPONS:
{
if(response)
{
new weapons[] = {24, 25, 26, 27};
GivePlayerWeapon(playerid, weapons[listitem], 500);
SendClientMessage(playerid, -1, "Оружие выдано!");
}
}
}
return 1;
}
Определение ID диалогов
Код:
#define DIALOG_WELCOME 1
#define DIALOG_LOGIN 2
#define DIALOG_REGISTER 3
#define DIALOG_WEAPONS 4
Динамические списки
Код:
ShowWeaponDialog(playerid)
{
new list[512], count = 0;
for(new i = 0; i < sizeof(WeaponList); i++)
{
if(PlayerHasAccess(playerid, WeaponList[i][wLevel]))
{
format(list, sizeof(list), "%s%s\n", list, WeaponList[i][wName]);
count++;
}
}
if(count > 0)
{
ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_LIST,
"Доступное оружие", list, "Выбрать", "Отмена");
}
}
Важные моменты:
- Всегда проверяйте response (нажата ли кнопка)
- Проверяйте длину inputtext перед использованием
- Используйте listitem для определения выбранного элемента
- Ограничение длины текста диалога - 4096 символов
Диалоги делают сервер интерактивным и удобным!