Skip to main content

OnDialogResponse

คำอธิบาย

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

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

ส่งคืน

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

ตัวอย่าง

// กำหนดไอดีกล่องโต้ตอบ เพื่อให้เราสามารถควบคุมการตอบสนองได้
#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
}
#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
}
#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
}
#define DIALOG_WEAPONS 3

// คำสั่งประมาณนี้
ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_LIST, "อาวุธ",
"อาวุธ\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
}

บันทึก

tip

พารามิเตอร์สามารถมีค่าที่แตกต่างกันได้ ขึ้นอยู่กับรูปแบบของกล่องโต้ตอบ (คลิกเพื่อดูตัวอย่างเพิ่มเติม).

tip

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: แสดงกล่องโต้ตอบกับผู้เล่น