From fc7f84bfc20f119ee589311a30bed5964f491d62 Mon Sep 17 00:00:00 2001 From: mrpvtdagger Date: Sun, 21 Feb 2021 20:32:15 -0400 Subject: [PATCH] Upload SlingLoad --- MPD_SlingLoad/init.sqf | 29 ++++++++++++++ MPD_SlingLoad/sling.sqf | 83 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 MPD_SlingLoad/init.sqf create mode 100644 MPD_SlingLoad/sling.sqf diff --git a/MPD_SlingLoad/init.sqf b/MPD_SlingLoad/init.sqf new file mode 100644 index 0000000..34a5535 --- /dev/null +++ b/MPD_SlingLoad/init.sqf @@ -0,0 +1,29 @@ +/* + Simple Sling Load Script by MrPvTDagger#4176 :D +*/ + +diag_log "MPD_SlingLoad is Loading..."; + +/* +This is for Modded Objects that Might not be slingable by default. I have done this automtically but Just incase it doesn't work with all mods. + +EXAMPLE: +_ccargo = [ + RHS_Storage_Create_1, + RHS_Storage_Create_2, + RHS_Storage_Create_3 // Make sure the last one doesn't have a comment at the end +]; +*/ + + +_ccargo = [ + +]; + +// ====================== Don't Touch Anything Below this line ====================== +_acargo = entities [[], ["Air","Man"], true];; // Maybe Better way of Doing This???? + +_acargo append _ccargo; +{ + [_x] execVM "MPD_SlingLoad\sling.sqf"; +} forEach _acargo; \ No newline at end of file diff --git a/MPD_SlingLoad/sling.sqf b/MPD_SlingLoad/sling.sqf new file mode 100644 index 0000000..1f9f673 --- /dev/null +++ b/MPD_SlingLoad/sling.sqf @@ -0,0 +1,83 @@ +_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 \ No newline at end of file