Вот что наваял тут не глядя. Придется его ломать прикручивая работу с листами, а он вышел такой ладненький - жалко. И всего то на 64 строчки, вместе с комментариями.

На данный момент в качестве респа берется маркер на карте, и из за этого приходится самому выставлять оптимальную высоту. Если вместо маркера будет какой то ГО на поверхности, то такой проблемы не будет.

Код:
//название техники, которую нужно будет создавать
nameVehicle = "B_Heli_Light_01_F";
//название маркера, который выступает в роли респа
nameMarker = "hspawn";
//задаем высоту над уровнем моря
height = 0;
//задержка удаления обломков    
delay1 = 14;
//задержка что бы техника успела удалиться и вообще делаем задержку респа, к примеру для техники
//которая не должна часто респиться
delay2 = 1;
//создаем технику
ob = nameVehicle createVehicle getMarkerPos nameMarker;
//вешаем на нее событие, которое по исполнении вызывает функцию
ob addEventHandler ["killed", { systemChat format ["техника 1 уничтожена  = %1", 0]; [] spawn setDamageF; }];
ob setDir markerDir nameMarker;
ob setPosASL [getMarkerPos nameMarker select 0,getMarkerPos nameMarker select 1,(getMarkerPos nameMarker select 2) + height];


setDamageF = 
{
    //задержка удаления обломков    
    sleep delay1;
    
    //удаляем событие
    ob removeEventHandler ["killed", 0];
    //удаляем технику
    deleteVehicle ob;
    
    //задержка что бы техника успела удалиться и вообще делаем задержку респа, к примеру для техники
    //которая не должна часто респиться
    sleep delay2;
    
    //diag_log format ["Нашли предметы  = %1", nearestObjects [getMarkerPos nameMarker, [], 10]];
    //diag_log format ["Нашли предметы  = %1", getMarkerPos nameMarker nearEntities 20];
    diag_log format ["Нашли предметы  = %1", nearestObjects [getMarkerPos nameMarker, ["AllVehicles"], 3]];
    //diag_log format ["Нашли предметы  = %1", nearestObjects [getMarkerPos nameMarker, [], 10]];
    
    _boolDelay = true;
    _objectTrue = [];


    //создаем цикл который будет проверять, есть ли какой то транспорт или юнит на месте респа
    While {_boolDelay} do 
    {     
        //и если нет ни чего, то респим технику
        _objectTrue = nearestObjects [getMarkerPos nameMarker, ["AllVehicles"], 6];
        if( count _objectTrue == 0 ) then
        {
            _boolDelay = false;
        };
        
        sleep 1;
    };
    
    //создаем технику
    ob = nameVehicle createVehicle getMarkerPos nameMarker;
    ob setDir markerDir nameMarker;
    ob setPosASL [getMarkerPos nameMarker select 0,getMarkerPos nameMarker select 1,(getMarkerPos nameMarker select 2) + height];
    
    systemChat format ["удалили технику  = %1", 0];
    
    //вешаем на нее событие которое вызывает эту функцию по уничтожении техники
    ob addEventHandler ["killed", { systemChat format ["снова техника 1 уничтожена  = %1", 0]; [] spawn setDamageF; }];
};