---
title: "OnDialogResponse | open.mp"
description: "Callback นี้ถูกเรียกเมื่อผู้เล่นตอบสนองกับกล่องโต้ตอบที่แสดงโดยใช้ ShowPlayerDialog"
canonical: https://omp.itsneufox.com/th/docs/scripting/callbacks/OnDialogResponse
language: th
---

# OnDialogResponse

## คำอธิบาย

Callback นี้ถูกเรียกเมื่อผู้เล่นตอบสนองกับกล่องโต้ตอบที่แสดงโดยใช้ ShowPlayerDialog ไม่ว่าจะ คลิกปุ่ม, กด ENTER/ESC หรือดับเบิลคลิกที่รายการไอเท(หากใช้กล่องโต้ตอบแบบรายการ)

| ชื่อ | คำอธิบาย |
| --- | --- |
| playerid | ไอดีของผู้เล่นที่ตอบสนองกับกล่องโต้ตอบ |
| dialogid | ไอดีของกล่องโต้ตอบที่ผู้เล่นตอบสนองที่มาจาก ShowPlayerDialog |
| response | 1 สำหรับปุ่มซ้าย และ 0 จากปุ่มขวา (หากมีแค่ปุ่มเดียว จะเป็น 1 เสมอ) |
| listitem | ไอดีของรายการไอเทมที่ถูกเลือกโดยผู้เล่น (เริ่มจาก 0) (แค่กล่องโต้ตอบรูปแบบรายการ นอกนั้นจะเป็น -1) |
| inputtext\[\] | ข้อความที่ถูกป้อนเข้ามาโดยผู้เล่นหรือรายการไอเทมที่ถูกเลือก |

## ส่งคืน

จะถูกเรียกใน Filterscripts ก่อนเป็นอันดับแรกเสมอ ดังนั้นการส่งค่าคืนเป็น 1 จะบล็อกไม่ให้ Filterscripts อื่น ๆ ได้เห็น

## ตัวอย่าง

**DIALOG\_STYLE\_MSGBOX**

```c
// กำหนดไอดีกล่องโต้ตอบ เพื่อให้เราสามารถควบคุมการตอบสนองได้
#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 กฎของเซิร์ฟเวอร์!");
        }
        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

// คำสั่งประมาณนี้
ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_LIST, "อาวุธ", "Desert Eagle\nAK-47\nCombat Shotgun", "เลือก", "ปิด");

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); // ให้ Combat Shotgun พวกเขา
            }
        }
        return 1; // เราได้จัดการกล่องโต้ตอบนี้เรียบร้อยแล้วดังนั้นส่งค่าคืน 1 เหมือนกับ OnPlayerCommandText
    }

    return 0; // คุณต้องส่งค่าคืนเป็น 0 ตรงนี้! เหมือนกับ OnPlayerCommandText
}
```

**DIALOG\_STYLE\_TABLIST\_HEADERS**

```c
#define DIALOG_WEAPONS 3

// คำสั่งประมาณนี้
ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_TABLIST_HEADERS, "อาวุธ",
"อาวุธ\tกระสุน\tราคา\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/th/docs/scripting/resources/dialogstyles)).

เคล็ดลับ

It is appropriate to switch through different dialogids, if you have many.

warning

กล่องโต้ตอบของผู้เล่นจะไม่ถูกซ่อนเมื่อเกมโหมดรีสตาร์ท ทำให้เซิร์ฟเวอร์ปริ้นท์ "Warning: PlayerDialogResponse PlayerId: 0 dialog ID doesn't match last sent dialog ID" หากผู้เล่นตอบสนองกับกล่องโต้ตอบนี้หลังจากรีสตาร์ท

## ฟังก์ชั่นที่เกี่ยวข้องกัน

-   [ShowPlayerDialog](https://omp.itsneufox.com/th/docs/scripting/functions/ShowPlayerDialog): แสดงกล่องโต้ตอบกับผู้เล่น
