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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±

    Закрытие / Открытие военного транспорта в диалоге

    Ко всем new:
    PHP код:
    const
        
    DLG_ARMY_TRANSPORT_LOCK 11001// если этот ID диалога уже занят, замените на свободный
        
    MAX_ARMY_VEH_NAME 12;

    new
        
    vehicle_info[4 char];

    enum
        e_ARMY_VEH_INFO
        
    {
            
    armyVehName[MAX_ARMY_VEH_NAME],
            
    armyVehID
        
    };

    static const
        
    ArmyVehicles[][e_ARMY_VEH_INFO] =
        {
            {{
    "Sea Sparrow"}, 447},
            {{
    "Rhino"}, 432},
            {{
    "Hydra"}, 520},
            {{
    "Hunter"}, 425}
        }; 
    Всего транспортов, доступных для открытия / закрытия: 4. Вы можете добавить свою модель транспорта, если вам это нужно.

    В диалоге будет показываться состояния транспортов, их всего два:
    • Транспорт может быть [Закрыт]
    • Транспорт может быть [Открыт]


    Создадим функцию, которая будет открывать диалог игроку (так как диалог будет использоваться не один раз).
    В конец мода:
    PHP код:
    ShowPlayerVehicleInfoDialog(const playerid)
    {
        static const
            
    str_status[][] =
            {
                {
    "{ff0000}За"},
                {
    "{00ff00}От"}
            },
            
    fmt_str[] = "1.\t%s\t[%sкрыт{FFFFFF}]\n2.\t%s\t\t[%sкрыт{FFFFFF}]\n3.\t%s\t\t[%sкрыт{FFFFFF}]\n4.\t%s\t\t[%sкрыт{FFFFFF}]";

        new
            
    str[sizeof(fmt_str) + ((-MAX_ARMY_VEH_NAME 1) + (-sizeof(str_status[]) - 1)) * sizeof(VehicleInfo) * (cellbits charbits)];

        
    format(strsizeof(str),
            
    fmt_str,
            
    ArmyVehicles[0][armyVehName], str_status[vehicle_info{0}],
            
    ArmyVehicles[1][armyVehName], str_status[vehicle_info{1}],
            
    ArmyVehicles[2][armyVehName], str_status[vehicle_info{2}],
            
    ArmyVehicles[3][armyVehName], str_status[vehicle_info{3}]
        );
        return 
    ShowPlayerDialog(playeridDLG_ARMY_TRANSPORT_LOCK2"Открытие / Закрытие военной техники"str"Выбрать""Закрыть");

    Далее создадим команду для управления транспортом.
    Если у вас стандартный командный процессор, то в public OnPlayerCommandText:
    PHP код:
    if(strcmp(cmdtext"/vi"true) == 0)
    {
        if(
    IsPlayerAdmin(playerid) == 0)
            return 
    1;

        return 
    ShowPlayerVehicleInfoDialog(playerid);

    Если dc_cmd, zcmd, ..., к остальным командам, либо в конец мода
    PHP код:
    CMD:vi(playeridparams[])
    {
        if(
    IsPlayerAdmin(playerid) == 0)
            return 
    1;

        return 
    ShowPlayerVehicleInfoDialog(playerid);

    IsPlayerAdmin(playerid) замените своей проверкой на лидерку армии.

    Создадим распознавание диалога. Примечание: Если вы в паблике используете switch(dialogid), то пишем case DLG_ARMY_TRANSPORT_LOCK:, если нет, то пишем if(dialogid == DLG_ARMY_TRANSPORT_LOCK).
    В public OnDialogResponse:
    PHP код:
    case DLG_ARMY_TRANSPORT_LOCK:
    {
        if(
    response == 0)
            return 
    1;
        
        new
            
    GetMaxPlayers();

        if(
    vehicle_info{listitem} == 1)
        {
            
    vehicle_info{listitem} = 0;
            
            do
            {
                --
    i;
                if(
    IsPlayerConnected(i) && GetVehicleModel(GetPlayerVehicleID(i)) == ArmyVehicles[listitem][armyVehID])
                    
    RemovePlayerFromVehicle(i);
            }
            while(
    i);
        }
        else
            
    vehicle_info{listitem} = 1;
        
        static const
            
    fmt_str[] = "%s (%d) %sкрыл транспорт: %s";
        
        new
            
    str[sizeof(fmt_str) + (-MAX_PLAYER_NAME) + (-3) + (-2) + (-+ (MAX_ARMY_VEH_NAME 1))];

        
    GetPlayerName(playeridstrMAX_PLAYER_NAME);
        
    format(strsizeof(str), fmt_strstrplayeridvehicle_info{listitem} == ? ("от") : ("за"), ArmyVehicles[listitem][armyVehName]);    
        
    SendClientMessageToAll(-1str);
        return 
    ShowPlayerVehicleInfoDialog(playerid);

    Теперь перейдём к самой проверке на закрытость транспорта. В public OnPlayerStateChange:
    PHP код:
    if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    {
        new
            
    sizeof(vehicle_info) * (cellbits charbits),
            
    vehicleid GetPlayerVehicleID(playerid),
            
    modelid GetVehicleModel(vehicleid);

        do
        {
            --
    i;
            if(
    vehicle_info{i} == && model == ArmyVehicles[i][armyVehID])
            {
                
    SendClientMessage(playerid0xFF0000FF"Транспорт временно закрыт.");
                
    RemovePlayerFromVehicle(playerid);
                break;
            }
        }
        while(
    i);

     Скриншот диалога



    Автор статьи: L0ndl3m

    Специально для: Pro-Pawn.Ru


    Копирование данной статьи без разрешения автора запрещено!
    Последний раз редактировалось L0ndl3m; 20.01.2020 в 09:10.

  2. 2 пользователя(ей) сказали cпасибо:
    Wesley (24.11.2013) [Koteyka] (24.11.2013)
  3. #2
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Лучший!

  4. #3
    Аватар для [Koteyka]
    Пользователь

    Статус
    Оффлайн
    Регистрация
    18.11.2013
    Адрес
    Казань
    Сообщений
    12
    Репутация:
    7 ±
    Лови спасибку :)
     Когда повысили до 4 lvl админки .

  5. #4
    Аватар для Wesley
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.11.2013
    Сообщений
    90
    Репутация:
    14 ±
    + Тебе!

  6. #5
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Еще и с комментариями для новичков:)

 

 

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

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

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

Ваши права

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