Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.55 KB | None | 0 0
  1. /* ----------------------------------------------------------------------------------------------------
  2.  
  3. File: fn_vehRespawn.sqf
  4.  
  5. Author: Iceman77
  6.  
  7. Description:
  8. - Monitor a vehicle and "respawn" it if it's destroyed or abandoned
  9. - Can be used on vehicles
  10. - Set vehicle init upon respawn (optional)
  11. - Store and keep the vehicle's variable name automatically
  12.  
  13. Parameter(s):
  14. - _this select 0: < OBJECT > - VEHICLE
  15. - _this select 1: < NUMBER > - ABANDONED DELAY IN SECONDS
  16. - _this select 2: < NUMBER > - DESTROYED DELAY IN SECONDS
  17. - _this select 3: < CODE > - FUNCTION THE VEHICLE CALLS UPON RESPAWN (OPTIONAL)
  18.  
  19. Usage (Vehicle init Line):
  20. _nul = [ this, 120, 60, LVR_fnc_hunterInit ] spawn LVR_fnc_vehRespawn << have the vehicle call the custom LVR Function upon respawn (see functions.hpp && fn_hunterInit.sqf)
  21. _nul = [ this, 120, 60 ] spawn LVR_fnc_vehRespawn; << Default usage
  22.  
  23. ---------------------------------------------------------------------------------------------------- */
  24.  
  25.  
  26. // SERVER CODE
  27. if ( ! ( isServer ) ) exitWith {};
  28.  
  29. // SET SCOPE OF LOCAL VARIABLES
  30. private ["_veh","_abandonDelay","_destroyedDelay","_vehInit","_vehName","_vehDir","_vehPos","_vehtype","_abandoned","_dead"];
  31.  
  32. // PASSED ARGUMENTS ( OBJECT, ABANDONED DELAY, DESTROYED DELAY )
  33. _veh = [_this, 0, objNull, [objNull]] call BIS_fnc_param;
  34. _abandonDelay = [_this, 1, 60, [0]] call BIS_fnc_param;
  35. _destroyedDelay = [_this, 2, 60, [0]] call BIS_fnc_param;
  36. _vehInit = [_this, 3, {}, [{}] ] call BIS_fnc_param;
  37.  
  38. // STORE THE VEHICLES NAME, DIRECTION, POSITION AND TYPE
  39. _vehName = vehicleVarName _veh;
  40. _vehDir = getDir _veh;
  41. _vehPos = getPos _veh;
  42. _vehtype = typeOf _veh;
  43. _vehTexture = getObjectTextures _veh;
  44.  
  45. // START LOOP TO MONITOR THE VEHICLE
  46. while { true } Do {
  47.  
  48. sleep 1;
  49.  
  50. // IF THE VEHICLE IS ALIVE AND CAN MOVE AND IS EMPTY THEN THE VEHICLE IS ABANDONED
  51. if ( ( alive _veh ) && { ( canMove _veh ) && { { ( alive _x ) } count ( crew _veh ) == 0 } } ) then {
  52.  
  53. _abandoned = true;
  54.  
  55. // COUNTDOWN THE ABANDONED DELAY - STALL SCRIPT HERE
  56. for "_i" from 0 to _abandonDelay do {
  57.  
  58. // IF THE VEHICLE ISN'T EMPTY, OR IS DESTROYED, OR IF IT CAN'T MOVE THEN IT'S NOT ABANDONED SO EXIT THE COUNTDOWN EARLY - CONTINUE THE SCRIPT
  59. if ( { ( alive _x ) } count (crew _veh) > 0 || { !( alive _veh ) || { !( canMove _veh ) } } ) exitWith { _abandoned = false; };
  60. sleep 1;
  61.  
  62. };
  63.  
  64. // IF THE VEHICLE IS ABANDONED AND ISN'T CLOSE TO IT'S STARTING POSITION THEN DELETE IT AND CREATE A NEW ONE AT THE STARTING POSITION
  65. if ( ( _abandoned ) && { _veh distance _vehPos > 10 } ) then {
  66.  
  67. deleteVehicle _veh;
  68. sleep 1;
  69. _veh = createVehicle [ _vehtype, _vehPos, [], 0, "CAN_COLLIDE" ];
  70. _veh setDir _vehDir;
  71. _veh setPos [ ( _vehPos select 0 ), ( _vehPos select 1 ), 0 ];
  72. _veh call _vehInit;
  73. _countTexture = count _vehTexture;
  74. switch (_countTexture) do {
  75. case 1 :
  76. {
  77. _veh setObjectTextureGlobal [0,(_vehTexture select 0)];
  78. };
  79. case 2 :
  80. {
  81. _veh setObjectTextureGlobal [0,(_vehTexture select 0)];
  82. _veh setObjectTextureGlobal [1,(_vehTexture select 1)];
  83. };
  84. case 3 :
  85. {
  86. _veh setObjectTextureGlobal [0,(_vehTexture select 0)];
  87. _veh setObjectTextureGlobal [1,(_vehTexture select 1)];
  88. _veh setObjectTextureGlobal [2,(_vehTexture select 2)];
  89. };
  90. case 4 :
  91. {
  92. _veh setObjectTextureGlobal [0,(_vehTexture select 0)];
  93. _veh setObjectTextureGlobal [1,(_vehTexture select 1)];
  94. _veh setObjectTextureGlobal [2,(_vehTexture select 2)];
  95. _veh setObjectTextureGlobal [3,(_vehTexture select 3)];
  96. };
  97. };
  98.  
  99. if (_vehName != "") then {
  100. missionNamespace setVariable [_vehName, _veh];
  101. publicVariable _vehName;
  102. };
  103. };
  104. };
  105.  
  106. // IF THE VEHICLE IS DESTROYED OR IF IT CAN'T MOVE THEN ITS DEAD
  107. if ( !( alive _veh ) || { !( canMove _veh ) } ) then {
  108.  
  109. _dead = true;
  110.  
  111. // COUNTDOWN THE DEAD DELAY - STALL SCRIPT HERE
  112. for "_i" from 0 to _destroyedDelay do {
  113.  
  114. // IF THE VEHICLE ISN'T EMPTY, OR IF IT CAN MOVE ( HAS BEEN REPAIRED ) THEN IT'S NOT DEAD SO EXIT THE COUNTDOWN EARLY - CONTINUE THE SCRIPT
  115. if ( { ( alive _x ) } count ( crew _veh ) > 0 || { ( canMove _veh ) } ) exitWith { _dead = false; };
  116. sleep 1;
  117.  
  118. };
  119.  
  120. // IF THE VEHICLE IS DEAD THEN DELETE IT AND CREATE A NEW ONE AT THE STARTING POSITION
  121. if ( _dead ) then {
  122.  
  123. deleteVehicle _veh;
  124. sleep 1;
  125. _veh = createVehicle [ _vehtype, _vehPos, [], 0, "CAN_COLLIDE" ];
  126. _veh setDir _vehDir;
  127. _veh setPos [ ( _vehPos select 0 ), (_vehPos select 1 ), 0 ];
  128. _veh call _vehInit;
  129. _countTexture = count _vehTexture;
  130. switch (_countTexture) do {
  131. case 1 :
  132. {
  133. _veh setObjectTextureGlobal [0,(_vehTexture select 0)];
  134. };
  135. case 2 :
  136. {
  137. _veh setObjectTextureGlobal [0,(_vehTexture select 0)];
  138. _veh setObjectTextureGlobal [1,(_vehTexture select 1)];
  139. };
  140. case 3 :
  141. {
  142. _veh setObjectTextureGlobal [0,(_vehTexture select 0)];
  143. _veh setObjectTextureGlobal [1,(_vehTexture select 1)];
  144. _veh setObjectTextureGlobal [2,(_vehTexture select 2)];
  145. };
  146. case 4 :
  147. {
  148. _veh setObjectTextureGlobal [0,(_vehTexture select 0)];
  149. _veh setObjectTextureGlobal [1,(_vehTexture select 1)];
  150. _veh setObjectTextureGlobal [2,(_vehTexture select 2)];
  151. _veh setObjectTextureGlobal [3,(_vehTexture select 3)];
  152. };
  153. };
  154.  
  155. if (_vehName != "") then {
  156. missionNamespace setVariable [_vehName, _veh];
  157. publicVariable _vehName;
  158. };
  159. };
  160. };
  161. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement