- 692
- 1,555
Разобрался как создать диалог типа list, вот код:
В PAWNO показ диалога реализован вот так:
Теперь проблема состоит в том, как выполнить определенную функцию, при выборе итема из списка, в PAWNO это реализовано так:
Код:
void SAMP_Dialog(int send, int dialogID, int typedialog, char *caption, char *text, char *button1, char *button2)
{
uint32_t func = g_Samp_base+SAMP_DIALOG_SHOW;
uint32_t data = g_Samp_base+SAMP_DIALOG_INFO_OFFSET;
__asm mov eax, dword ptr [data]
__asm mov ecx, dword ptr [eax] //mov to offset
__asm push send //0 - No send response, 1 - Send response
__asm push button2
__asm push button1
__asm push text
__asm push caption
__asm push typedialog
__asm push dialogID
__asm call func
return;
}
В PAWNO показ диалога реализован вот так:
Код:
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Что из этого вы хотите выпить?", "Sprunk ($1)\nПиво ($2)\nВино ($3)", "Купить", "Отмена");
Теперь проблема состоит в том, как выполнить определенную функцию, при выборе итема из списка, в PAWNO это реализовано так:
Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
// Для более простого управления диалоговыми окнами, можно использовать switch(dialogid), но в
//этом уроке использовано лишь одно диалоговое окно.
if(dialogid == 1 && response) // Если ID диалогового окна 1 (как мы указали в ShowPlayerDialog), и игрок нажал 'Купить'
{
// Теперь используем switch(listitem), чтобы выполнять действия для разных элементов
//диалогового окна. ID первого элемента в диалоговом окне - 0.
switch(listitem)
{
case 0:
{
if(GetPlayerMoney(playerid) < 1)
return SendClientMessage(playerid, 0xFFFFFF, "У вас недостаточно денег.");
GivePlayerMoney(playerid, -1);
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK);
}
case 1:
{
if(GetPlayerMoney(playerid) < 2)
return SendClientMessage(playerid, 0xFFFFFF, "У вас недостаточно денег.");
GivePlayerMoney(playerid, -2);
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);
}
case 2:
{
if(GetPlayerMoney(playerid) < 3)
return SendClientMessage(playerid, 0xFFFFFF, "У вас недостаточно денег.");
GivePlayerMoney(playerid, -3);
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE);
}
}
}
return 1;
}