Зациклить диалог -
OmegaKiller72 - 05.07.2015
Здраствуйте народ! Нужна ваша помощь! Мне надо както защитить показ диалога от его скрытия вызовом другого диалога! Вот часть кода который вызывает диалог:
if(newstate == 2)
{
new Car = GetPlayerVehicleID(playerid);
new result;
new cid;
new pName[24];
for(new i;i<MAX_xCARS1;i++)
{
if(Car == cInfo[i][cCarID])
{
result = 1;
cid = i;
break;
}
else result = 0;
}
if(result)
{
GetPlayerName(playerid,pName,24);
if(strcmp(cInfo[cid][cOwner],pName,false,24))
{
if(!strcmp(cInfo[cid][cOwner],"sell",true,24))
{
new str[256];
format(str,256,"Äàííàÿ ìàøèíà âûñòàâëåíà íà ïðîäàæó\nÖåíà: %i\nÂû õîòèòå åå êóïèòü?",cInfo[cid][cCoast]);
ShowPlayerDialog(playerid,3500,0,"Äèëëåð",str,"êóï èòü","âûéòè");
}
else
{
new str[256];
format(str,256,":::Ýòî àâòî ïðèíàäëåæèò '%s'",cInfo[cid][cOwner]);
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid,0xffffffaa,str);
}
пытался поставить таймер, но не могу понять как заново вызвать диалог через секунду
Re: Зациклить диалог -
SoNikMells - 05.07.2015
PHP код:
stock SPD(playerid, dialogid, style, info[], string[], buttom1[], buttom2[])
{
if(GetPVarInt(playerid, "dialog_id")) return false;
SetPVarInt(playerid, "dialog_id", dialogid);
return ShowPlayerDialog(playerid, dialogid, style, info, string, buttom1, buttom2);
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
SetPVarInt(playerid, "dialog_id", 0);
// остальной код
return false;
}
// предварительно все ShowPlayerDialog заменить на SPD
Re: Зациклить диалог -
po61 - 05.07.2015
Вставляешь в enum с информации о player'е pOpenDialog, или же создай массив
PHP код:
new PlayerOpenDialog[MAX_PLAYERS];
Я буду использовать второй вариант.
Идешь в OnDialogResponse
Там в самом начале
PHP код:
if(PlayerOpenDialog[playerid]!=-1 || PlayerOpenDialog[playerid]!=dialogid) ShowLastDialog(playerid); // Тут функция или еще что с текущим диалогом
Там же в OnDialogResponse, после проверки вставляешь
PHP код:
PlayerOpenDialog[playerid]=-1;
Теперь создаем Stock:
PHP код:
stock ShowPlayerDialogEx(playerid, dialogid, style, caption[], info[], button1[], button2[]){
if(PlayerOpenDialog[playerid]!=-1 || PlayerOpenDialog[playerid]!=dialogid) ShowLastDialog(playerid);
PlayerOpenDialog[playerid]=dialogid;
ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]);
}
В итоге:
1. При любом response от диалога он становиться прошедшим (При нажатии любой из кнопок)
2. Новый диалог просто не будет открываться, но старый обновиться (При желании, можно не обновлять, всего-лишь поменяв в ShowPlayerDialogEx "ShowLastDialog(playerid)" на "return 1"
3. После Stock'a можно сделать define
PHP код:
#define ShowPlayerDialog ShowPlayerDialogEx
Re: Зациклить диалог -
OmegaKiller72 - 06.07.2015
Спасибо!