daily pastebin goal
9%
SHARE
TWEET

Evac

Pwner-Actual Mar 19th, 2019 63 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // =======================================================================================
  2. // =======================================  SETUP  =======================================
  3. // =======================================================================================
  4. // INSTRUCTIONS
  5. // =======================================================================================
  6. /*
  7.     USAGE   :   Server only.
  8.     PURPOSE :   Have a helicopter move to a marker (argument 0) for pick-up, where a player can,
  9.                 thru the helicopter's action menu, order it to move to the DZ marker (argument 1).
  10.                 At the drop zone, the embarked units wil be ejected at ground level.
  11.                 This script is good for seaborne insertions/extractions as well as in treacherous terrain.
  12.                 Smoke and flares may be launched at both positions.
  13.                 N.B. The aircraft and crew cannot be damaged and will not fire / be fired upon.
  14.    
  15.     EXAMPLE :   nul = ["marker_1","marker_2","B_Heli_Transport_01_F",50,0] execVM "UAF\evac.sqf";
  16.     EXAMPLE :   nul = ["pickup_mkr","DZ_mkr","B_Heli_Transport_01_camo_F",80,1] execVM "UAF\evac.sqf";
  17.    
  18.     FORMAT  :   nul = ["A","B","C",D,E] execVM "UAF\evac.sqf";
  19.  
  20.     A =         Marker name for the pick-up location.
  21.     B =         Marker name for the drop-off point.
  22.     C =         Classname of aircraft that will be spawned.
  23.                 Find your helicopter here : https://community.bistudio.com/wiki/Arma_3_Assets
  24.     D =         Flight altitude in  meters
  25.     E =         Launch smoke and flares at both pickup and DZ points (1 = yes / 0 = no)
  26. */
  27. // =======================================================================================
  28. // SERVER ONLY
  29. // =======================================================================================
  30. if (!isServer) exitWith {};
  31. // =======================================================================================
  32. // DEFINE & DECLARE VARIABLES
  33. // =======================================================================================
  34. //      VARS & VALUES THRU ARGUMENTS
  35. // =======================================================================================
  36. private _PU     = getMarkerPos (_this select 0);    // marker pos pickup
  37. private _DZ     = getMarkerPos (_this select 1);    // marker pos DZ
  38. private _craft  = _this select 2;                   // chopper classname
  39. private _alt    = _this select 3;                   // flight altitude
  40. private _flr    = _this select 4;                   // launch flares and smoke
  41. // =======================================================================================
  42. //      VARS & VALUES THRU SCRIPT
  43. // =======================================================================================
  44. private ["_pos","_grp","_veh","_pad","_pos2"];
  45. private _rad    = 2000; // spawn distance
  46. private _dis    = 150;  // "waypoint" completion
  47. // =======================================================================================
  48. // ====================================  SCRIPT  =========================================
  49. // =======================================================================================
  50. // SPAWN TRANSPORT
  51. // =======================================================================================
  52. // define random angle
  53. _ang        = random 360;
  54. // choose random point on circumference
  55. _pos        = [(_PU select 0)+_rad*cos(_ang),(_PU select 1)+_rad*sin(_ang),_alt];
  56. // spawn vehicle
  57. _vehSide    = createGroup Civilian;                                     // avoid shooting / being shot at
  58. _relDir     = _pos getDir _PU;                                          // spawn with good heading
  59. _arr        = [_pos,_relDir,_craft,_vehSide] call BIS_fnc_spawnVehicle; // create flying aircraft
  60. _veh        = _arr select 0;                                            // get vehicle object
  61. _crew       = _arr select 1;                                            // get vehicle crew
  62. _grp        = _arr select 2;                                            // get group object
  63. _veh flyInHeight _alt;                                                  // flight altitude
  64. _veh allowDamage false;                                                 // disable damage
  65. // =======================================================================================
  66. //      SET GROUP / CREW ATTRIBUTES
  67. // =======================================================================================
  68. _grp deleteGroupWhenEmpty true;
  69. (units _grp) apply {
  70.     _x allowDamage false; _x setskill ["courage",1]; _x allowFleeing 0;
  71.     _x disableAI "FSM"; _x disableAI "TARGET"; _x disableAI "AUTOTARGET"; _x disableAI "AUTOCOMBAT";
  72. };
  73. [_grp, 0]   setWaypointCombatMode "BLUE";
  74. [_grp, 0]   setWaypointBehaviour "CARELESS";
  75. [_grp, 0]   setWaypointSpeed "FULL";
  76. // =======================================================================================
  77. // MAKE THE TRANSPORT MOVE TO PICK UP
  78. // =======================================================================================
  79. _pad = "Land_HelipadEmpty_F" createVehicle _PU;                             // help landing
  80. _veh doMove _PU;                                                            // move to WP for pick-up  
  81. while {!(unitReady _veh) || (_veh distance _PU > _dis)} do {sleep 1;};      // wait for being close and ready
  82. _veh flyInHeight 3;                                                         // hover low
  83. // throw smoke and flares
  84. if (_flr == 1) then {
  85. _signal = (selectRandom ["SmokeShellYellow","SmokeShellGreen","SmokeShellOrange","SmokeShellBlue"]) createVehicle getPos _veh;     
  86. for [{_i= (8+(random 15))},{_i>-1},{_i=_i-1}] do {sleep 0.25; _veh action ["useWeapon", _veh, driver _veh, 0];};
  87. _signal = (selectRandom ["SmokeShellYellow","SmokeShellGreen","SmokeShellOrange","SmokeShellBlue"]) createVehicle getPos _veh; 
  88. };
  89. while {((getPos _veh) select 2) > 3;} do {sleep 1;};                        // wait for hover to be done
  90. // =======================================================================================
  91. // GIVE ACTION TO MOVE OUT
  92. // =======================================================================================
  93. [   _veh,                                                                               // Object the action is attached to
  94.     "<t size='1.15' font='RobotoCondensedBold' color='#FFFF00'>Move to DZ</t>",         // Title of the action
  95.     "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_takeOff2_ca.paa",                    // Idle icon shown on screen
  96.     "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_takeOff2_ca.paa",                    // Progress icon shown on screen
  97.     "(
  98.         (alive _target)
  99.         &&
  100.         ((side group _this) getFriend (side _target) >= 0.6)
  101.     )",                                                                                 // Conditions for the action to be shown
  102.     "(alive _target)",                                                                  // Conditions for the action to progress
  103.     {},                                                                                 // Code executed when action starts
  104.     {},                                                                                 // Code executed on every progress tick
  105.     {
  106.         params ["_target", "_caller", "_actionId", "_args"];
  107.         _target doMove (_args select 0);
  108.         _target flyInHeight (_args select 1);
  109.     },                                                                                  // Code executed on completion
  110.     {},                                                                                 // Code executed on interrupted
  111.     [_DZ,_alt],                                                                         // Arguments passed to the scripts as _this select 3
  112.     0.5,                                                                                // Action duration [s]
  113.     0,                                                                                  // Priority
  114.     true,                                                                               // Remove on completion
  115.     false                                                                               // Show in unconscious state
  116. ]   remoteExec ["BIS_fnc_holdActionAdd", [0,-2] select isDedicated, _veh];
  117. // =======================================================================================
  118. // MOVE TO DZ
  119. // =======================================================================================
  120. _pad setPos _DZ;                                                                        // help landing
  121. while {!(unitReady _veh) || (_veh distance _DZ > _dis)} do {sleep 1;};                  // wait for arrival near DZ
  122. _veh flyInHeight 3;                                                                     // hover low
  123. // throw smoke and flares
  124. if (_flr == 1) then {
  125. _signal = (selectRandom ["SmokeShellYellow","SmokeShellGreen","SmokeShellOrange","SmokeShellBlue"]) createVehicle getPos _veh;     
  126. for [{_i= (8+(random 15))},{_i>-1},{_i=_i-1}] do {sleep 0.25; _veh action ["useWeapon", _veh, driver _veh, 0];};
  127. _signal = (selectRandom ["SmokeShellYellow","SmokeShellGreen","SmokeShellOrange","SmokeShellBlue"]) createVehicle getPos _veh; 
  128. };
  129. while {((getPos _veh) select 2) > 3;} do {sleep 1;};                                    // wait for hover
  130. // =======================================================================================
  131. // EJECT UNITS
  132. // =======================================================================================
  133. (crew _veh) - (units _grp) apply {_x action ["Eject", _veh];};
  134. while {count crew _veh > count units _grp} do {sleep 1;};                               // wait for all ejections
  135. // =======================================================================================
  136. // MOVE TO DESPAWN
  137. // =======================================================================================
  138. // define random angle
  139. _ang    = random 360;
  140. // choose random point on circumference
  141. _pos2   = [(_DZ select 0)+_rad*cos(_ang),(_DZ select 1)+_rad*sin(_ang),_alt];
  142. _veh flyInHeight _alt;
  143. _veh doMove _pos2;
  144. while {!(unitReady _veh)} do {sleep 1;};
  145. (crew _veh)     apply {deleteVehicle _x};                                               // delete crew
  146. (units _grp)   apply {deleteVehicle _x};                                               // delete group
  147. deleteVehicle   _veh;                                                                   // delete chopper
  148. deleteVehicle   _pad;                                                                   // delete pad
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top