Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 9 из 9
  1. #1
    Аватар для Эдуард
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.01.2015
    Сообщений
    32
    Репутация:
    0 ±

    цикл + действие

    Здравствуйте, возник такой вопрос, у меня есть система личного транспорта, есть команда /cars где циклом показываются все автомобили твои, и при нажатии на какую-то из них открывается диалог с действиями, так вот тут и случилась проблема, при клике на тачку мне нужно получить ид этой машины(именно на ту что кликнул), но непонятно как((

    PHP код:
    COMMAND:cars(playerid,params[])
    {
        new
            
    veh_doors_status[8];
            
        new 
    string[(32 sizeof(veh_doors_status[]) )*5];

        
    string "ID\tМодель\tДвери";

        for(new 
    0AllPrivateCarsi++)
        {
            switch(
    cInfo[i][vdoors])
            {
                case 
    0veh_doors_status "Закрыты";
                case 
    1veh_doors_status "Открыты";
            }

            if(!
    strcmp(cInfo[i][cOwner],player[playerid][player_name],false))
            {
                if(
    5)
                {
                    
    format(stringsizeof(string), "%s\n№%d\t%s\t%s"string,i+1VehicleNames[cInfo[i][cModel] - 400], veh_doors_status);
                }
            }
        }
        
    ShowPlayerDialog(playerid8888,DIALOG_STYLE_TABLIST_HEADERS,"тачки",string,"Выбрать""Закрыть");
        return 
    true;

    Я хочу получить например координату этой машины на которую кликнул, но какой параметр указывать тут: cInfo[параметр][xcx]?
    Последний раз редактировалось Эдуард; 10.04.2017 в 20:51.

  2. #2
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Используйте listitem.

  3. #3
    Аватар для Эдуард
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.01.2015
    Сообщений
    32
    Репутация:
    0 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Используйте listitem.
    Использовал, не той тачки координаты выдал)

  4. #4
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Эдуард Посмотреть сообщение
    Использовал, не той тачки координаты выдал)
    Упс... не полностью прочитал тему.

  5. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    +- так можно попробовать
    PHP код:
    new buff[3];
    strmid(buffinputtext1strfind(inputtext" "true1));
    new 
    id strval(buff); 
    Только не уверен, что "\t" = пробел и нет возможности проверить
    Последний раз редактировалось DeimoS; 10.04.2017 в 22:03.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #6
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    +- так можно попробовать
    PHP код:
    new buff[3];
    strmid(buffinputtext1strfind(inputtext" "true1));
    new 
    id strval(buff); 
    Только не уверен, что "\t" = пробел и нет возможности проверить
    в inputtext запишет только символы до \t (не включительно)

    в форматировании будет
    PHP код:
    124\tVehicleName\tEweparametr 
    т.е в диалоге в строчке будет
    PHP код:
    124 VehicleName Eweparametr 
    в inputtext при клике, выведет только 124

    т.е разумно будет поместить ID автомобиля (необходимый для использования в переменной) на место первого столбца, либо записывать в перменную при показе диалога по типу
    PHP код:
    _listitem[0][playerid] = vInfo[ID][vID];
    ShowPlayerDialog...


    OnDialogResponse()
    {
     case 
    nujniy_dialog
     {
       
    //использование
       
    new string[20];
       
    format(string,sizeof(string), "ID авто %d"_listitem[listitem][playerid]);
       
    SendClientMessage(playerid, -1string);
       return 
    1;
     }

    Последний раз редактировалось wAx; 11.04.2017 в 15:31.

  7. #7
    Аватар для Эдуард
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.01.2015
    Сообщений
    32
    Репутация:
    0 ±
    Цитата Сообщение от wAx Посмотреть сообщение
    в inputtext запишет только символы до \t (не включительно)

    в форматировании будет
    PHP код:
    124\tVehicleName\tEweparametr 
    т.е в диалоге в строчке будет
    PHP код:
    124 VehicleName Eweparametr 
    в inputtext при клике, выведет только 124

    т.е разумно будет поместить ID автомобиля (необходимый для использования в переменной) на место первого столбца, либо записывать в перменную при показе диалога по типу
    PHP код:
    _listitem[0][playerid] = vInfo[ID][vID];
    ShowPlayerDialog...


    OnDialogResponse()
    {
     case 
    nujniy_dialog
     {
       
    //использование
       
    new string[20];
       
    format(string,sizeof(string), "ID авто %d"_listitem[listitem][playerid]);
       
    SendClientMessage(playerid, -1string);
       return 
    1;
     }

    Сделал по такому принципу всё работает, но что если ты удалишь автомобиль например 2( всего три автомобиля), тогда он укажет не те координаты

  8. #8
    Аватар для wAx
    ¯\_(ツ)_/¯

    Статус
    Оффлайн
    Регистрация
    13.12.2013
    Сообщений
    377
    Репутация:
    146 ±
    показывай диалог заново после удаления

  9. #9
    Аватар для Эдуард
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.01.2015
    Сообщений
    32
    Репутация:
    0 ±
    Цитата Сообщение от wAx Посмотреть сообщение
    показывай диалог заново после удаления
    PHP код:
    COMMAND:vmenu(playerid,params[])
    {
        new
            
    veh_doors_status[8];
            
        new 
    string[(32 sizeof(veh_doors_status[]) )*5];

        
    string "ID\tМодель\tДвери";
        for(new 
    0AllPrivateCarsi++)
        {
            switch(
    cInfo[i][vdoors])
            {
                case 
    0veh_doors_status "Закрыты";
                case 
    1veh_doors_status "Открыты";
            }

            if(!
    strcmp(cInfo[i][cOwner],player[playerid][player_name],false))
            {
                switch(
    i)
                {
                    case 
    0vehID[playerid][0] = cInfo[i][cCarID];
                    case 
    1vehID[playerid][1] = cInfo[i][cCarID];
                    case 
    2vehID[playerid][2] = cInfo[i][cCarID];
                    case 
    3vehID[playerid][3] = cInfo[i][cCarID];
                    case 
    4vehID[playerid][4] = cInfo[i][cCarID];
                }
                if(
    == || 6)
                {
                    
    format(stringsizeof(string), "%s\n№%d\t%s\t%s"string,cInfo[i][cCarID], VehicleNames[cInfo[i][cModel] - 400], veh_doors_status);
                }
                else
                {
                    
    ShowPlayerDialog(playerid8888,DIALOG_STYLE_TABLIST_HEADERS,"Список личного транспорта","ПУСТО","Выбрать""Закрыть");
                    break;
                }
            }
        }
        
    ShowPlayerDialog(playerid8888,DIALOG_STYLE_TABLIST_HEADERS,"Список личного транспорта",string,"Выбрать""Закрыть");
        return 
    true;

    PHP код:
    case 8888:
            {
                if(
    response == 0)
                    return 
    1;
                switch(
    listitem)
                {
                    case 
    0SetPVarInt(playerid"VehID"1);
                    case 
    1SetPVarInt(playerid"VehID"2);
                    case 
    2SetPVarInt(playerid"VehID"3);
                    case 
    3SetPVarInt(playerid"VehID"4);
                    case 
    4SetPVarInt(playerid"VehID"5);
                }
                
    показ след диалога (8889)
            } 
    PHP код:
    case 8889:
            {
                if(
    response == 0)
                    return 
    callcmd::vmenu(playerid,"");
                new 
    id GetPVarInt(playerid"VehID");
                new 
    idx vehID[playerid][id];
                switch(
    listitem)
                {
                    case 
    0:
                    {

                        
    SetPlayerCheckpoint(playeridcInfo[idx][xcx], cInfo[idx][xcy], cInfo[idx][xcz], 3.0);
                    
                        
    printf("dialog8889 = %d"cInfo[idx][cCarID]);
                    }
                    
                }
            } 
    Что не так в коде? Он не те машины определяет

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •