---
title: "OnDialogResponse | open.mp"
description: "Этот коллбэк вызывается, когда игрок взаимодействует с диалогом, показанным ему через ShowPlayerDialog."
canonical: https://omp.itsneufox.com/ru/docs/scripting/callbacks/OnDialogResponse
language: ru
---

# OnDialogResponse

warning

This callback was added in SA-MP 0.3.7 and will not work in earlier versions!

## Описание

Этот коллбэк вызывается, когда игрок взаимодействует с диалогом, показанным ему через ShowPlayerDialog.

| Аргумент | Описание |
| --- | --- |
| playerid | ID игрока, взаимодействующего с диалогом. |
| dialogid | ID диалога, показанного через ShowPlayerDialog, с которым взаимодействует игрок. |
| response | 1 - нажатие на левую кнопку диалога (Enter), 0 нажатие на правую кнопку диалога (ESC) (всегда 1, если показана только 1 кнопка). |
| listitem | ID элемента списка, выбранного игроком (начинается с 0) (если у диалога выбран стиль списка, иначе всегда будет -1). |
| inputtext\[\] | Текст, введённый игроком в диалог или текст элемента списка, если у диалога выбран стиль списка. |

## Результат

Коллбэк всегда срабатывает в filterscript'ах первее, поэтому `return 1` не позволяет другим фильтрскриптам вызвать этот коллбэк

## Пример

**DIALOG\_STYLE\_MSGBOX**

```c
// Макрос ID диалога, с которым будет взаимодействие
#define DIALOG_RULES 1

// В каком-либо месте кода
ShowPlayerDialog(playerid, DIALOG_RULES, DIALOG_STYLE_MSGBOX, "Правила сервера", "- Нет читам!\n- Не спамить\n- Уважать администрации\n\nВы принимаете данные правила?", "Да", "Нет");

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if (dialogid == DIALOG_RULES)
    {
        if (response) // Если игрок нажал на 'Да' или нажал Enter
        {
            SendClientMessage(playerid, COLOR_GREEN, "Thank you for agreeing to the server rules!");
        }
        else // Если игрок нажал на 'Нет' или нажал Esc
        {
            Kick(playerid);
        }
        return 1; // Мы обработали диалог, поэтому возвращаем 1. Прямо как в OnPlayerCommandText.
    }

    return 0; // Вы ДОЛЖНЫ возвращать 0 здесь! Прямо как в OnPlayerCommandText.
}
```

**DIALOG\_STYLE\_INPUT**

```c
#define DIALOG_LOGIN 2

// В каком-либо месте кода
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "Введите ваш пароль:", "Войти", "Отмена");

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if (dialogid == DIALOG_LOGIN)
    {
        if (!response) // Если игрок нажал 'Отмена' или Esc
        {
            Kick(playerid);
        }
        else // Если игрок нажал 'Войти' или Enter
        {
            if (CheckPassword(playerid, inputtext))
            {
                SendClientMessage(playerid, COLOR_RED, "Вы успешно авторизовались!");
            }
            else
            {
                SendClientMessage(playerid, COLOR_RED, "НЕ УДАЛОСЬ АВТОРИЗОВАТЬСЯ.");

                // Показ диалога авторизации заново
                ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Авторизация", "Введите ваш пароль:", "Войти", "Отмена");
            }
        }
        return 1; // Мы обработали диалог, поэтому возвращаем 1. Прямо как в OnPlayerCommandText.
    }

    return 0; // Вы ДОЛЖНЫ возвращать 0 здесь! Прямо как в OnPlayerCommandText.
}
```

**DIALOG\_STYLE\_LIST**

```c
#define DIALOG_WEAPONS 3

// In some command
ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_LIST, "Оружие", "Desert Eagle\nAK-47\nБоевой дробовик", "Выбрать", "Закрыть");

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if (dialogid == DIALOG_WEAPONS)
    {
        if (response) // Если игрок нажал 'Выбрать' или сделал двойной клик по оружию
        {
            // Выдаём ему оружие
            switch (listitem)
            {
                case 0: GivePlayerWeapon(playerid, WEAPON_DEAGLE, 14); // Выдаём desert eagle
                case 1: GivePlayerWeapon(playerid, WEAPON_AK47, 120); // Выдаём AK-47
                case 2: GivePlayerWeapon(playerid, WEAPON_SHOTGSPA, 28); // Выдаём Боевой дробовик
            }
        }
        return 1; // Мы обработали диалог, поэтому возвращаем 1. Прямо как в OnPlayerCommandText.
    }

    return 0;// Вы ДОЛЖНЫ возвращать 0 здесь! Прямо как в OnPlayerCommandText.
}
```

**DIALOG\_STYLE\_TABLIST\_HEADERS**

```c
#define DIALOG_WEAPONS 3

// In some command
ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_TABLIST_HEADERS, "Weapons",
"Weapon\tAmmo\tPrice\n\
M4\t120\t500\n\
MP5\t90\t350\n\
AK-47\t120\t400",
"Выбрать", "Закрыть");

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if (dialogid == DIALOG_WEAPONS)
    {
        if (response) // Если игрок нажал 'Выбрать' или сделал двойной клик по оружию
        {
            // Выдаём ему оружие
            switch (listitem)
            {
                case 0: GivePlayerWeapon(playerid, WEAPON_M4, 120); // Выдаём M4
                case 1: GivePlayerWeapon(playerid, WEAPON_MP5, 90); // Выдаём MP5
                case 2: GivePlayerWeapon(playerid, WEAPON_AK47, 120); // Выдаём AK-47
            }
        }
        return 1; // Мы обработали диалог, поэтому возвращаем 1. Прямо как в OnPlayerCommandText.
    }

    return 0; // Вы ДОЛЖНЫ возвращать 0 здесь! Прямо как в OnPlayerCommandText.
}
```

## Примечания

примечание

Параметры могут отличаться в зависимости от стиля диалога ([см. больше примеров](https://omp.itsneufox.com/ru/docs/scripting/resources/dialogstyles)).

подсказка

Разумно использовать switch для поиска нужного диалога, если вы имеете их много.

warning

Диалог, показанный игроку, не скрывается при рестарте сервера, что приводит к предупреждению: "Warning: PlayerDialogResponse PlayerId: 0 dialog ID doesn't match last sent dialog ID" if a player responded to this dialog after restart."

## Функции

Следующие функции могут быть полезны, т.к. они так или иначе связаны с текущей функцией.

-   [ShowPlayerDialog](https://omp.itsneufox.com/ru/docs/scripting/functions/ShowPlayerDialog): Показать диалог игроку.
