Зациклить диалог
#1

Здраствуйте народ! Нужна ваша помощь! Мне надо както защитить показ диалога от его скрытия вызовом другого диалога! Вот часть кода который вызывает диалог:

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);
}
пытался поставить таймер, но не могу понять как заново вызвать диалог через секунду
Reply
#2

PHP код:
stock SPD(playeriddialogidstyleinfo[], string[], buttom1[], buttom2[])
{
    if(
GetPVarInt(playerid"dialog_id")) return false;
    
SetPVarInt(playerid"dialog_id"dialogid);
    return 
ShowPlayerDialog(playeriddialogidstyleinfostringbuttom1buttom2);
}
public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    
SetPVarInt(playerid"dialog_id"0);
    
// остальной код
    
return false;
}
// предварительно все ShowPlayerDialog заменить на SPD 
Reply
#3

Вставляешь в enum с информации о player'е pOpenDialog, или же создай массив
PHP код:
new PlayerOpenDialog[MAX_PLAYERS]; 
Я буду использовать второй вариант.
Идешь в OnDialogResponse
Там в самом начале
PHP код:
if(PlayerOpenDialog[playerid]!=-|| PlayerOpenDialog[playerid]!=dialogidShowLastDialog(playerid); // Тут функция или еще что с текущим диалогом 
Там же в OnDialogResponse, после проверки вставляешь
PHP код:
PlayerOpenDialog[playerid]=-1
Теперь создаем Stock:

PHP код:
stock ShowPlayerDialogEx(playeriddialogidstylecaption[], info[], button1[], button2[]){
    if(
PlayerOpenDialog[playerid]!=-|| PlayerOpenDialog[playerid]!=dialogidShowLastDialog(playerid);
    
PlayerOpenDialog[playerid]=dialogid;
    
ShowPlayerDialog(playeriddialogidstylecaption[], info[], button1[], button2[]);

В итоге:
1. При любом response от диалога он становиться прошедшим (При нажатии любой из кнопок)
2. Новый диалог просто не будет открываться, но старый обновиться (При желании, можно не обновлять, всего-лишь поменяв в ShowPlayerDialogEx "ShowLastDialog(playerid)" на "return 1"
3. После Stock'a можно сделать define
PHP код:
#define ShowPlayerDialog ShowPlayerDialogEx 
Reply
#4

Спасибо!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)