scriptName "crashHere.sqf:"; /*-------------------------------------------------------------------- file: crashHere.sqf =================== Description: on activation disables helicopter and controls its decend to make sure it lands in the right spot Params: #0 - some helicopter (Object) #1 - desired crash position (Object, Marker or Position) --------------------------------------------------------------------*/ params [ "_heli", ["_crash", false, [[], objNull, ""], [2,3]] ]; private ["_vel","_mag","_touchdown","_dist","_pos","_vector"]; switch (typeName _crash) do { case "STRING": { _crash = getMarkerPos _crash; }; case "OBJECT": { _crash = getPosATL _crash; }; case "ARRAY": { _crash set [2,0]; }; default { _crash = getPosATL _heli; }; }; if(local _heli) then { _heli setDamage 0.5; _heli setHitPointDamage ["HitVRotor", 1]; _heli setHitPointDamage ["HitHRotor", 1]; _heli setHitPointDamage ["HitGlass1", 1]; _heli setHitPointDamage ["HitGlass2", 1]; _heli setHitPointDamage ["HitAvionics", 1]; _heli setHitPointDamage ["HitGear", 1]; _heli setHitPointDamage ["HitFuel", 1]; _heli setHitPointDamage ["HitEngine", 1]; _heli setHitPointDamage ["HitHull", 1]; _heli hideSelection ["main rotor static", true]; _heli allowDamage false; _gren = createVehicle ["DemoCharge_Remote_Ammo_Scripted", getPosATL _heli, [], 0, "CAN_COLLIDE"]; _gren attachTo [_heli, [0,0,0], "HitVRotor"]; _gren setDamage 1; _vel = velocity _heli; _mag = vectorMagnitude _vel; _touchdown = false; _dist0 = _heli distance2D _crash; while { !_touchdown && {alive _heli} } do { _dist = _heli distance2D _crash; _pos = getPosATL _heli; if ( _dist > 5 ) then { _heli addTorque (_heli vectorModelToWorld [1000,0,5000]); _pos set [2,3]; _vector = _crash vectorDiff _pos; //_vector set [2,-0.1]; _vector = (vectorNormalized _vector) vectorMultiply (25 max (_mag * (_dist / _dist0))); _heli setVelocity _vector; //_heli setVelocity [(_vector select 0) min (_vel select 0), (_vector select 1) min (_vel select 1), 0]; } else { _vector = (( _pos vectorFromTo _crash ) vectorMultiply 10); _vector set [2, (velocity _heli) select 2]; _heli setVelocity _vector; sleep 1; if ((_pos select 2) < 1) then { _touchdown = true; }; }; }; _heli setVelocity [0,0,0]; sleep 5; };