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

Тема: Цикл

  1. #1
    Аватар для iStrange
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Сообщений
    54
    Репутация:
    26 ±

    Цикл

    Дано:
    PHP код:
        for(new i=0i<MAX_VEHICLESi++)
        {
            if(
    GetVehicleModel(i))
            {
                
    GetVehiclePos(i,X,Y,Z);
                if(
    PlayerToPoint(6.0playeridXYZ)) return i;
            }
        } 
    Можно ли юзануть тут foreach?
    Если да, то как получится?

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Нет,только на игроков(Если не ошибаюсь)
    Подожди других ответов.

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

    Статус
    Оффлайн
    Регистрация
    07.03.2014
    Сообщений
    54
    Репутация:
    26 ±
    Цитата Сообщение от Salvador Посмотреть сообщение
    Нет,только на игроков(Если не ошибаюсь)
    Подожди других ответов.
    Ну а как этот цикл оптимизировать?
    MAX_VEHICLES = 1к

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

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    PHP код:
    new MAX_VEHICLES;
    do
    {
        if(
    GetVehicleModel(i))
        {
                
    GetVehiclePos(i,X,Y,Z); 
                if(
    PlayerToPoint(6.0playeridXYZ)) return i
        }
    }
    while(--
    i);//Londlem 
    пробуй.
    Последний раз редактировалось Salvacore; 19.03.2014 в 19:56.

  5. #5
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Могу посоветовать 2 варианта: простой и сложный.
    Простой (почти тот же, что и у Londlem):
    PHP код:
    new veh MAX_VEHICLES;
    do{
        if(
    GetVehiclePos(vehXYZ)) // сама функция возвращает 1 при удачном выполнении и 0 при ошибке (несуществующий транспорт)
            
    if(IsPlayerInRangeOfPoint(playerid6.0XYZ))
                return 
    i;
    }while(--
    veh != 0); 
    Сложный: в самое начало мода (после <a_samp>) вставить
    PHP код:
    #include <foreach>
    new Iterator:Vehicle<MAX_VEHICLES>;

    stock foreach_wr_CreateVehicle(modelidFloat:xFloat:yFloat:zFloat:anglecolor1color2respawn_delay)
    {
        new 
    veh CreateVehicle(modelidxyzanglecolor1color2respawn_delay);
        
    Itter_Add(Vehicleveh);
        return 
    veh;
    }
    #if    defined    _ALS_CreateVehicle
        #undef    CreateVehicle
    #else
        #define    _ALS_CreateVehicle
    #endif
    #define    CreateVehicle(%0)    foreach_wr_CreateVehicle(%0)

    stock foreach_wr_AddStaticVehicleEx(modelidFloat:xFloat:yFloat:zFloat:anglecolor1color2respawn_delay)
    {
        new 
    veh AddStaticVehicleEx(modelidxyzanglecolor1color2respawn_delay);
        
    Itter_Add(Vehicleveh);
        return 
    veh;
    }
    #if    defined    _ALS_AddStaticVehicleEx
        #undef    AddStaticVehicleEx
    #else
        #define    _ALS_AddStaticVehicleEx
    #endif
    #define    AddStaticVehicleEx(%0)    foreach_wr_AddStaticVehicleEx(%0)

    stock foreach_wr_AddStaticVehicle(modelidFloat:xFloat:yFloat:zFloat:anglecolor1color2)
    {
        new 
    veh AddStaticVehicle(modelidxyzanglecolor1color2);
        
    Itter_Add(Vehicleveh);
        return 
    veh;
    }
    #if    defined    _ALS_AddStaticVehicle
        #undef    AddStaticVehicle
    #else
        #define    _ALS_AddStaticVehicle
    #endif
    #define    AddStaticVehicle(%0)    foreach_wr_AddStaticVehicle(%0)

    stock foreach_wr_DestroyVehicle(veh)
    {
        
    Itter_Remove(Vehicleveh);
        return 
    DestroyVehicle(veh);
    }
    #if    defined    _ALS_DestroyVehicle
        #undef    DestroyVehicle
    #else
        #define    _ALS_DestroyVehicle
    #endif
    #define    DestroyVehicle(%0)    foreach_wr_DestroyVehicle(%0) 
    С этим кодом будет создан итератор Vehicle (как Player, только для машин) и перехвачены функции CreateVehicle, AddStaticVehicle, AddStaticVehicleEx и DestroyVehicle, благодаря чему создаваемые машины будут автоматически добавляться в итератор Vehicle и удаляться оттуда при уничтожении.
    После этого можно будет использовать foreach:
    PHP код:
    print("ID всего транспорта на сервере:");
    foreach(new 
    i:Vehicle)
    {
        
    printf("%d"i);

    Последний раз редактировалось Daniel_Cortez; 21.03.2014 в 15:28. Причина: как тут оказался код для добавления игроков? -fixed
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. 7 пользователя(ей) сказали cпасибо:
    $continue$ (28.03.2015) DeimoS (20.03.2014) L0ndl3m (19.03.2014) nonfaktor (20.03.2014) Salvacore (19.03.2014) Seviel (15.01.2017) ^_^ (19.03.2014)
 

 

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

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

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

Ваши права

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