Генератор парковки

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

ОписаниеIIIVCSA
Индекс переменной начала:1000
Количество элементов:160185500
Следующий свободный индекс:116011851500

Создавать транспорт можно через свойство "CAR_PARK". Методы инициализации были упрощены. Теперь создать транспорт можно так:

[Thread]
public void TEST() {

    CAR_PARK.init<Car>( 0.0, 21.0, 112.0, 180.0, VehicleModel.ADMIRAL );
    CAR_PARK.init<Boat>( 120.0, -231.0, 13.0, 90.0, BoatModel.JETMAX );

    end_thread();
}

Мы обязаны указать тип транспорта в треугольных скобках, чтобы потом библиотека смогла определить какие методы нужно будет использовать в дальнейшем. Если нужно указать конкретные параметры, то вместо null нужно указать параметр:

[Thread]
public void TEST() {

    CAR_PARK.init<Car>( 0.0, 21.0, 112.0, 180.0, VehicleModel.ADMIRAL );
    CAR_PARK.init<Boat>( 120.0, -231.0, 13.0, 90.0, BoatModel.JETMAX );

    // null: пропустить параметр ( см. подсказки Visual Studio )
    CAR_PARK.init<Heli>( 1440.0, 12.0, 12.9, 30.0, HeliModel.POLMAV, 0, 1, null, null, 4 );

    end_thread();
}

В итоге мы получит такой код для Sanny Builder:

//------------- TEST ---------------

:TEST
03A4: name_thread 'TEST'
014B: $1000 = init_car_generator 445 color -1 -1 force_spawn 0 alarm 0 door_lock 0 min_delay 0 max_delay 10000 at 0.0 21.0 112.0 angle 180.0
014B: $1001 = init_car_generator 493 color -1 -1 force_spawn 0 alarm 0 door_lock 0 min_delay 0 max_delay 10000 at 120.0 -231.0 13.0 angle 90.0
014B: $1002 = init_car_generator 497 color 0 1 force_spawn 0 alarm 0 door_lock 4 min_delay 0 max_delay 10000 at 1440.0 12.0 12.9 angle 30.0
004E: end_thread

Он отлично подойдёт для тех случаев, когда нам не нужно указывать шанс генерации транспорта. Но иногда нужно изменить тип парковки или нам требуется работа с созданным транспортом. Метод инициализации возвращает ссылку на объект класса "CarParkVehicle", который мы можем использовать для управления генератора парковки:

[Thread]
public void TEST() {

    var parkingCar = CAR_PARK.init<Car>( 0.0, 21.0, 112.0, 180.0, VehicleModel.ADMIRAL ); // $1000
    var parkingBoat = CAR_PARK.init<Boat>( 120.0, -231.0, 13.0, 90.0, BoatModel.JETMAX ); // $1001
    var parkingHeli = CAR_PARK.init<Heli>( 1440.0, 12.0, 12.9, 30.0, HeliModel.POLMAV ); // $1002

    parkingCar.set_to_player_owned( true );
    parkingBoat.set_chance_to_generate( 101 );

	parkingHeli.Vehicle.is_defined().Write();

    end_thread();
}

Если нужно получить доступ к прикреплённому транспорту, то достаточно получить его через свойство "Vehicle". Вот такой результат будет у нас:

//------------- TEST ---------------

:TEST
03A4: name_thread 'TEST'
014B: $1000 = init_car_generator 445 color -1 -1 force_spawn 0 alarm 0 door_lock 0 min_delay 0 max_delay 10000 at 0.0 21.0 112.0 angle 180.0
014B: $1001 = init_car_generator 493 color -1 -1 force_spawn 0 alarm 0 door_lock 0 min_delay 0 max_delay 10000 at 120.0 -231.0 13.0 angle 90.0
014B: $1002 = init_car_generator 497 color -1 -1 force_spawn 0 alarm 0 door_lock 0 min_delay 0 max_delay 10000 at 1440.0 12.0 12.9 angle 30.0
0A17: set_parked_car_generator $1000 to_player_owned 1
014C: set_parked_car_generator $1001 cars_to_generate_to 101
056E:     car $1002 defined
004E: end_thread

P.S. Если возникнет ситуация, когда генератор парковки создаёт транспорт в одном потоке а нужно изменить его параметры в другом, то достаточно сделать переменную статической.