← Инструменты
Конструктор диалогов
Выберите стиль, напишите заголовок, текст и кнопки, попробуйте диалог как игрок и скопируйте код, который его показывает и обрабатывает ответ.
Каждая строка — отдельный пункт; {RRGGBB} задаёт ему цвет.
Предпросмотр
Нажмите на строку, чтобы выбрать её, и на кнопку (или дважды на строку), чтобы ответить. Стрелки, Enter и Esc работают как в игре.
Teleports
| Los Santos |
| San Fierro |
| Las Venturas |
| Mount Chiliad |
| Back |
Нажмите кнопку в предпросмотре, чтобы увидеть, что получит OnDialogResponse.
В пределах ограничений клиента.
Код
Код для
SA-MP и open.mp принимают этот код как есть: выбор лишь задаёт инклуды, с которыми он компилируется.
Показать диалог
#define DIALOG_TELEPORTS 3
ShowPlayerDialog(playerid, DIALOG_TELEPORTS, DIALOG_STYLE_LIST, "Teleports", "Los Santos\nSan Fierro\nLas Venturas\n{FFFF00}Mount Chiliad\n{AAAAAA}Back", "Go", "Close");Обработать ответ (если у вас уже есть OnDialogResponse, добавьте в него этот if)
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if (dialogid == DIALOG_TELEPORTS)
{
if (!response)
{
// "Close" or Esc
return 1;
}
switch (listitem)
{
case 0: // Los Santos
{
}
case 1: // San Fierro
{
}
case 2: // Las Venturas
{
}
case 3: // Mount Chiliad
{
}
case 4: // Back
{
}
}
return 1;
}
return 0;
}Вставьте ShowPlayerDialog, чтобы его отредактировать
Как работают диалоги SA-MP
- Игрок видит только один диалог за раз: ShowPlayerDialog заменяет открытый, а ID -1 закрывает его.
- OnDialogResponse получает response 1 за левую кнопку или Enter и 0 за правую кнопку или Esc — даже если правой кнопки нет.
- В списке listitem — номер выбранной строки начиная с 0, а inputtext — её текст без цветов. В таблице это текст первого столбца, а строка заголовков не считается.
- Компиляторы Pawn не принимают слишком длинные строки, поэтому длинный текст собирают по частям через strcat в строку, в которую он поместится целиком.