SA-MP Forums

SA-MP Forums (https://forum.sa-mp.com/index.php)
-   Русский/Russian (https://forum.sa-mp.com/forumdisplay.php?f=32)
-   -   Статусы в авто-меню (https://forum.sa-mp.com/showthread.php?t=259917)

temka1993 06/06/2011 04:25 PM

Статусы в авто-меню
 
Привет всем. Помогите хоть здесь, третий день сообразить немогу, пишу авто-меню со "статусом" в диалоговом окне, получается какая то ересь.

Работает таким образом:

1. Садимся в машину и жмем субмиссию
2. Вылазит окно и там список чего открывать/закрывать т.е. капот/багажник и т.д.

Функционал есть, но вот статус "открыто" и "закрыто" ерундит. Кроме статуса двигателя. вот кодец:

PHP Code:

    new carid GetPlayerVehicleID(playerid);
    
GetVehicleParamsEx(caridenginelightsalarmdoorsbonnetbootobjective);
    
    new 
message[2][24] ={ "{00CC66}Завести","{CC0000}Заглушить"};
    new 
lightstat[2][24] ={ "{00CC66}Включить""{CC0000}Выключить"};
    new 
alarmstat[2][24] ={ "{00CC66}Включить""{CC0000}Выключить"};
    new 
bonnetstat[2][24]={ "{00CC66}Открыть""{CC0000}Закрыть"};
    new 
bootstats[2][24] ={ "{00CC66}Открыть""{CC0000}Закрыть"};
    new 
doorstats[2][24] ={ "{00CC66}Открыть""{CC0000}Закрыть"};

    if(
newkeys == 512)
    {
        
format(string,1024,
        
"{0099FF}**Случайный тюнинг\n\
        {0099FF}Двигатель   {FFFF00}| %s\n\
        {0099FF}Фары        {FFFF00}| %s\n\
        {0099FF}Аварийка    {FFFF00}| %s\n\
        {0099FF}Капот       {FFFF00}| %s\n\
        {0099FF}Багажник    {FFFF00}| %s\n\
        {0099FF}Двери       {FFFF00}| %s\n\
        {0099FF}Номер       {FFFF00}| {00CC66}%s\n\
        {0099FF}**Установить неон"
,(engine message[1] : message[0] ),(lights lightstat[0] : lightstat[1]),(alarm alarmstat[0] : alarmstat[1]),
        (
bonnet bonnetstat[0] : bonnetstat[1]),(boot bootstats[0] : bootstats[1]),(doors doorstats[0] : doorstats[1]),(GetVehicleNumberPlate(carid)) );
        
ShowPlayerDialog(playeridDIALOGCARDIALOG_STYLE_LIST"{00CCFF}Меню Функций над Машиной",string"..::|Ок|::.."".:|Отмена|:.");
        return 
true;
    } 

это вызов диалога....

а вот его действия:

PHP Code:

    if(dialogid == DIALOGCAR && response)
    {
        new 
carid GetPlayerVehicleID(playerid);
        switch(
listitem)
        {
            case 
0:{}
            case 
1:
            {
                
GetVehicleParamsEx(carid,engine,lights,alarm,doors,bonnet,boot,objective);
                if(
engine == 0SetVehicleParamsEx(carid,1,lights,alarm,doors,bonnet,boot,objective);
                else 
SetVehicleParamsEx(carid,0,lights,alarm,doors,bonnet,boot,objective);
            }
            case 
2:
            {
                  
GetVehicleParamsEx(carid,engine,lights,alarm,doors,bonnet,boot,objective);
                if(
lights == 0SetVehicleParamsEx(carid,engine,1,alarm,doors,bonnet,boot,objective);
                else 
SetVehicleParamsEx(carid,engine,0,alarm,doors,bonnet,boot,objective);
            }
            case 
3:
            {
                
GetVehicleParamsEx(carid,engine,lights,alarm,doors,bonnet,boot,objective);
                if(
alarm == 1SetVehicleParamsEx(carid,engine,lights,0,doors,bonnet,boot,objective);
                else 
SetVehicleParamsEx(carid,engine,lights,1,doors,bonnet,boot,objective);
            }
            case 
4:
            {
                  
GetVehicleParamsEx(carid,engine,lights,alarm,doors,bonnet,boot,objective);
                if(
bonnet == 1SetVehicleParamsEx(carid,engine,lights,alarm,doors,0,boot,objective);
                else 
SetVehicleParamsEx(carid,engine,lights,alarm,doors,1,boot,objective);
            }
            case 
5:
            {
                   
GetVehicleParamsEx(carid,engine,lights,alarm,doors,bonnet,boot,objective);
                if(
boot == 1SetVehicleParamsEx(carid,engine,lights,alarm,doors,bonnet,0,objective);
                else 
SetVehicleParamsEx(carid,engine,lights,alarm,doors,bonnet,1,objective);
            }
            case 
6:
            {
                   
GetVehicleParamsEx(carid,engine,lights,alarm,doors,bonnet,boot,objective);
                if(
doors == 0SetVehicleParamsEx(carid,engine,lights,alarm,1,bonnet,boot,objective);
                else 
SetVehicleParamsEx(carid,engine,lights,alarm,0,bonnet,boot,objective);
            }
            case 
7:
            {
                
ShowPlayerDialog(playerid,PLATEDIALOG,DIALOG_STYLE_INPUT,"Смена номера","Введите номера авто в окошко","Готово","Отмена");
            }
        }
        return 
true;
    } 

Подскажите, почему статус в диалоговом окне не соответствует действительности?...

т.е. включаем "сигнализацию" а статус на "выключить" не изменился...и статус изменяется не с первого раза...в чем может быть проблема?...

действительно ума не хватает

Stepashka 06/06/2011 05:50 PM

Re: Статусы в авто-меню
 
Для начала немного здравого смысла, ты не заметил что ты 5 раз повторил один и тодже код?
Может стоит делать его 1 раз:
pawn Code:
if(dialogid == DIALOGCAR && response)
{
    new carid = GetPlayerVehicleID(playerid);
    GetVehicleParamsEx(carid,engine,lights,alarm,doors,bonnet,boot,objective);
    switch(listitem)
    {
        case 1:
        {
            engine = ((!engine) ? 1 : 0);
        }
        case 2:
        {
            lights = ((!lights) ? 1 : 0);
        }
        case 3:
        {
            alarm = ((!alarm) ? 1 : 0);
        }
        case 4:
        {
            bonnet = ((!bonnet) ? 1 : 0);
        }
        case 5:
        {
            boot = ((!boot) ? 1 : 0);
        }
        case 6:
        {
            doors = ((!doors) ? 1 : 0);
        }
        case 7:
        {
            ShowPlayerDialog(playerid,PLATEDIALOG,DIALOG_STYLE_INPUT,"Смена номера","Введите номера авто в окошко","Готово","Отмена");
            return 1;
        }
        SetVehicleParamsEx(carid,0,lights,alarm,doors,bonnet,boot,objective);
    }
    return 1;
}
Проблема в том что по умолчанию в функции стоит -1!
смени проверки на
pawn Code:
((!engine) ? message[0] : message[1])

temka1993 06/06/2011 06:26 PM

Re: Статусы в авто-меню
 
хм...теперь все с точностью да наоборот, не считая статуса двигателя - с ним впорядке было и раньше, и сейчас

теперь меняется статус, а вот функция срабатывает не сразу... сделал вот так:

PHP Code:

            case 3:
            {
                
alarm = ((!alarm) ? 0);
                  
SetVehicleParamsEx(carid,engine,lights,alarm,doors,bonnet,boot,objective);
            } 


Stepashka 06/06/2011 06:56 PM

Re: Статусы в авто-меню
 
сделай так:
pawn Code:
case 3:
        {
                alarm = ((!alarm) ? 1 : 0);
                break;
        }
и так в каждом, кроме case 7.

Ну и у меня там опечатка с двигателем :)
SetVehicleParamsEx(carid,0,lights,alarm,doors,bonnet,boot,objective);

temka1993 07/06/2011 05:52 AM

Re: Статусы в авто-меню
 
break;
так вообще компилировать отказывается...

я уже всяко перепробывал, ну не хочет и все, если изначально статус стоит -1, нужно его привести в 0, а затем включать и выключать...т.е. 1 и 0 соответственно, а вот привести в состояние 0 у меня и как раз не выходит

OKStyle 07/06/2011 02:26 PM

Re: Статусы в авто-меню
 
Ну всё, все поехали теперь плагиатить систему с моего мода )

Stepashka 07/06/2011 02:29 PM

Re: Статусы в авто-меню
 
pawn Code:
public OnVehicleSpawn(vehicleid)
{
    SetVehicleParamsEx(vehicleid,0,0,0,0,0,0,0);
    return 1;
}

temka1993 07/06/2011 02:47 PM

Re: Статусы в авто-меню
 
OKStyle ну а как же:) и не с Вашего мода. а с universal'а :)

Stepashka спасибо, это не помогло все же
вся проблема в том что теперь уже статус меняется а состояние машины нет...срабатывает со 2 раза только...блин я уже все мозги изьел)

OKStyle 07/06/2011 04:41 PM

Re: Статусы в авто-меню
 
Может быть идея и с Юнивёрсала, но код вырви-глаз как знаком...

temka1993 07/06/2011 04:43 PM

Re: Статусы в авто-меню
 
OKStyle я постил этот код не только здесь)...


All times are GMT. The time now is 02:20 AM.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.