Итак, плодом моих с gerasimow9 совместных усилий стали два скрипта, выполняющие одинаковую функцию, но имеющие небольшие различия. Хочу обратить внимание на то, что основную часть кода написал gerasimow9, я лишь исправил кое-какие ошибки и сделал версию скрипта в sqf! Также я сделал два примера, один для чистой ArmA2, второй для ArmA2 OA.
Вот и вышла новая версия скрипта, это случилось благодаря совету товарища DICS. В новой версии я оставил только sqf файл.
Список изменений: Ящик появляется точно на месте посадки. Исправлено несколько ненужных строк в коде. Написал объяснение исправленного скрипта.
активация скрипта:
В триггере или скрипте пишите
Code
p=[sam] execVM "sbros.sqf";
версия скрипта SQF
sam - имя самолёта, которое будет передано в скрипт, может быть любым!
Code
// _c130 название самолёта, локальная переменная! // _chute Название парашюта, локальная переменная! // _boks Название ящика, локальная переменная! // _bam Название нового ящика, локальная переменная!
// "ParachuteMediumWest_EP1" название парашюта, можно вписать любой // "USBasicAmmunitionBox_EP1" название ящика, можно вписать любой!
_c130 = _this select 0; // передача названия самолёта в скрипт _chute = "ParachuteMediumWest_EP1" createVehicle [0, 0, 0]; // Создание парашюта _chute setPos [(getpos _c130 select 0), (getPos _c130 select 1), (getPos _c130 select 2)]; // Телепортация парашюта к к координатам самолёта _box = "USBasicAmmunitionBox_EP1" createVehicle [0, 0, 0]; // Создание ящика _box setpos [(getpos _c130 select 0), (getpos _c130 select 1), (getpos _c130 select 2)]; // Телепортация ящика к к координатам самолёта _box attachto [_chute, [0, 0, 0]]; // прикрепеление ящика к парашюту waitUntil {((getPos _box) select 2) < 1}; // Ожидание приземления ящика detach _box; // Отцепление ящика от парашюта _box setpos [(getpos _box select 0), (getpos _box select 1), 0]; // Поднятия ящика до уровня земли(0 мтеров) _bam ="USBasicAmmunitionBox_EP1" createVehicle [(getpos _box select 0),(getpos _box select 1),(getpos _box select 2)+0]; // Создание нового ящика deletevehicle _box; // Удаление старого ящика
s229, да, но заточен под ящики, так как именно с ними были проблемы при десантировании, но по желанию, скрипт можно с лёгостью изменить под любой вид техники, просто подкорректировать под себя
Зачем писать координаты в создании ящика/парашюта. Все равно вы его портируете. Пишите [0, 0, 0] И зачем создаете 2 ящик, если можно использовать первый.
DICS, понятно, сейчас посмотрю твой способ В любом случае, спасибо за совет!
Добавлено (27.06.2011, 13:10) --------------------------------------------- DICS, твой код хорош, но имеет один серьёзный недостаток, из ящика ничего не возможно взять, также как и положить, хоть твой ящик и стоит на земле! А всё потому что...
Quote (leh2012)
Ящик проваливается под землю, надо заменять
Сажу точнее, просто, надо заменять!
Добавлено (27.06.2011, 13:17) --------------------------------------------- DICS, итак, спасибо за совет, в общем, вот новый код, он работает лучше чем прежний
привет! на счёт почему там 2 ящика , просто когда ящик приземлится на землю , то он будет нерабочий , вот поэтому и заменяется на такой же самый ящик , на счёт провала под землю это мы там же устраняли в скрипте самом скрипты работали на отлично . лично проверял я в играх арма 2 , и арма 2 оа
gerasimow9, да ты не волнуйся, уже всё нормально. Я просто выпустил уже версию 1.1, там, благодаря совету DICS, исправлены некоторые лишние строки кода, и самое главное-ящик появляется точно в том месте, на которое приземлился!
Итак, рад сообщить о выходе новой версии этого скрипта!
О версии 1.2
Эту версию я делал уже без участия Gerasimow9 и я очень много в неё вложил. Надеюсь, что она оправдает ваши ожидания! Теперь скрипт отлично работает не только с ящиками, но и с техникой!
* Скрипт полностью универсален, больше не придётся сворачивать игру и открывать скрипт. Всё можно сделать через редактор!
* Добавлено две ветви запуска скрипта. С параметром true, скрипт работает для ящиков, а с параметром false для техники.
* Добавлены дымовые шашки и осветительные ракеты, которые укажут место приземления груза. В случае уничтожения груза, дымовухи и остветилки не будут созданы.
* Теперь, если во время полёта ящик будет уничтожен, он не заменится новым при приземлении!
* Некоторые изменения в коде.
Code
// Как запустить?
// 1 Создать миссию // 2 Поместить скрипт в папку с миссией // 3 Поставить самолёт и дать ему имя // 4 Активировать скрипт // Например так: p=[true,sam,"ParachuteBigWest_EP1","M2A2_EP1"] execVM "sbros.sqf"
// true режим для ящиков, если хотите сбросить ящик с боеприпасами, пишите true // false режим для техники, если хотите сбросить технику, пишите false // sam название самолёта который десантирует объект, нужно поставить его в редакторе! // "ParachuteBigWest_EP1" название парашюта(из конфига) // "M2A2_EP1" название ящика/техники (из конфига)
// _c130 название самолёта, локальная переменная! // _chute Название парашюта, локальная переменная! // _box Название ящика, локальная переменная! // _bam Название нового ящика, локальная переменная!
// "ParachuteMediumWest_EP1" название парашюта, можно вписать любой // "USBasicAmmunitionBox_EP1" название техники/ящика, можно вписать любой!
_nm = TypeOf (_this select 1); if (_this select 0) then { // если true, то выполнять этот блок(Для ящиков)
_c130 = _this select 1; // передача названия самолёта в скрипт _chute = (_this select 2) createVehicle [0, 0, 0]; // Создание парашюта _chute setPos [(getpos _c130 select 0), (getPos _c130 select 1)-10, (getPos _c130 select 2)-10]; // Телепортация парашюта к самолёту _box = (_this select 3) createVehicle [0, 0, 0]; // Создание ящика/техники _box setpos [(getpos _c130 select 0), (getpos _c130 select 1)-10, (getpos _c130 select 2)-10]; // Телепортация ящика к самолёту _box attachto [_chute, [0, 0, 0]]; // прикрепеление ящика к парашюту waitUntil {((getPos _box) select 2) < 1}; // Ожидание приземления ящика switch (true) do { case not (alive _box): {detach _box;_box setpos [(getpos _box select 0), (getpos _box select 1), 0];}; // Если ящик уничтожен, выполнять это case alive _box: {detach _box;_box setpos [(getpos _box select 0), (getpos _box select 1), 0];_bam =(_this select 3) createVehicle [(getpos _box select 0),(getpos _box select 1),(getpos _box select 2)+0];deletevehicle _box;"SmokeShellgreen" createVehicle getPos _bam;_flare = "F_40mm_White" createVehicle [getPos _bam select 0,getPos _bam select 1,+150];}; // Если ящик жив, выполнять это }; _chute setPos [(getpos _box select 0)+2, (getPos _box select 1), (getPos _box select 2)]; // Телепортация парашюта к краю ящика
} else { // если false, то выполнять этот блок(Для техники)
_c130 = _this select 1; // передача названия самолёта в скрипт _chute = (_this select 2) createVehicle [0, 0, 0]; // Создание парашюта _chute setPos [(getpos _c130 select 0), (getPos _c130 select 1)-10, (getPos _c130 select 2)-10]; // Телепортация парашюта к самолёту _box = (_this select 3) createVehicle [0, 0, 0]; // Создание техники _box setpos [(getpos _c130 select 0), (getpos _c130 select 1)-10, (getpos _c130 select 2)-10]; // Телепортация техники к самолёту _box attachto [_chute, [0, 0, 0]]; // Приклепление техники к парашюту waitUntil {((getPos _box) select 2) < 1}; // Ожидание приземления техники switch (true) do { case not (alive _box): {detach _box;}; // Если техника уничтожена, отцепить её от парашюта case alive _box: {detach _box;"SmokeShellgreen" createVehicle getPos _box;_flare = "F_40mm_White" createVehicle [getPos _box select 0,getPos _box select 1,+150];}; // Если техника жива, отцепить её от парашюта. Создать дымовуху. Создать осветилку. }; _chute setPos [(getpos _box select 0)+2, (getPos _box select 1), (getPos _box select 2)]; // Телепортация парашюта к краю техники. };
Что в архиве? * Пример для ArmA2 * Пример для ArmA2 OA * Readme на двух языках