_nObject = nearestObject [_this select 0, "Helicopter"]; [ _this select 0, "Sling to Nearest Helicopter", "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_connect_ca.paa", "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_connect_ca.paa", "_this distance _target < 3", // Condition for the action to be shown "_caller distance _target < 3", // Condition for the action to progress {}, // Code executed when action starts {}, // Code executed on every progress tick { private ["_cargo","_nObject","_pilot","_Rope1","_Rope2","_Rope3","_Rope4","_widthFactor","_lengthFactor","_centerOfMass","_bbr","_p1","_p2","_maxWidth","_widthOffset","_maxLength","_lengthOffset","_maxHeight","_heightOffset","_rearCorner","_rearCorner2","_frontCorner","_frontCorner2"]; _cargo = _this select 0; _nObject = nearestObject [_cargo, "Helicopter"]; _pilot = currentPilot _nObject; _cargo attachTo [_nObject, [0, 0, -5]]; removeAllActions _cargo; /* Credits for finding corners go to sethduda from Advanced Sling Loading https://github.com/sethduda/ https://github.com/sethduda/AdvancedSlingLoading */ _widthFactor = 0.5; _lengthFactor = 0.5; if(_nObject isKindOf "Air") then { _widthFactor = 0.3; }; if(_nObject isKindOf "Helicopter") then { _widthFactor = 0.2; _lengthFactor = 0.45; }; _centerOfMass = getCenterOfMass _nObject; _bbr = boundingBoxReal _nObject; _p1 = _bbr select 0; _p2 = _bbr select 1; _maxWidth = abs ((_p2 select 0) - (_p1 select 0)); _widthOffset = ((_maxWidth / 2) - abs ( _centerOfMass select 0 )) * _widthFactor; _maxLength = abs ((_p2 select 1) - (_p1 select 1)); _lengthOffset = ((_maxLength / 2) - abs (_centerOfMass select 1 )) * _lengthFactor; _maxHeight = abs ((_p2 select 2) - (_p1 select 2)); _heightOffset = _maxHeight/6; _rearCorner = [(_centerOfMass select 0) + _widthOffset, (_centerOfMass select 1) - _lengthOffset, (_centerOfMass select 2)+_heightOffset]; _rearCorner2 = [(_centerOfMass select 0) - _widthOffset, (_centerOfMass select 1) - _lengthOffset, (_centerOfMass select 2)+_heightOffset]; _frontCorner = [(_centerOfMass select 0) + _widthOffset, (_centerOfMass select 1) + _lengthOffset, (_centerOfMass select 2)+_heightOffset]; _frontCorner2 = [(_centerOfMass select 0) - _widthOffset, (_centerOfMass select 1) + _lengthOffset, (_centerOfMass select 2)+_heightOffset]; _Rope1 = ropeCreate [_nObject, [0,0,0], 14]; _Rope2 = ropeCreate [_nObject, [0,0,0], 14]; _Rope3 = ropeCreate [_nObject, [0,0,0], 14]; _Rope4 = ropeCreate [_nObject, [0,0,0], 14]; [_cargo , _rearCorner, [0,0,-1]] ropeAttachTo (_Rope1); [_cargo , __rearCorner2, [0,0,-1]] ropeAttachTo (_Rope2); [_cargo , _frontCorner, [0,0,-1]] ropeAttachTo (_Rope3); [_cargo , _frontCorner2, [0,0,-1]] ropeAttachTo (_Rope4); _pilot addAction ["Release Cargo", { if !(isNull objectParent player) then { _nObject = nearestObject [player, "B_MRAP_01_F"]; _cargoRopes = ropes t1; // Needs to be changed { ropeDestroy _x; } forEach _cargoRopes; detach _nObject; [_nObject] execVM "MPD_SlingLoad\sling.sqf"; }; removeAllActions player; }]; }, {}, // Code executed on interrupted [], // Arguments passed to the scripts as _this select 3 8, // Action duration [s] 0, // Priority true, // Remove on completion false // Show in unconscious state ] remoteExec ["BIS_fnc_holdActionAdd", 0, _this select 0]; // MP compatible implementation