Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.94 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.  
  44. // START LOOP TO MONITOR THE VEHICLE
  45. while { true } Do {
  46.  
  47. sleep 1;
  48.  
  49. // IF THE VEHICLE IS ALIVE AND CAN MOVE AND IS EMPTY THEN THE VEHICLE IS ABANDONED
  50. if ( ( alive _veh ) && { ( canMove _veh ) && { { ( alive _x ) } count ( crew _veh ) == 0 } } ) then {
  51.  
  52. _abandoned = true;
  53.  
  54. // COUNTDOWN THE ABANDONED DELAY - STALL SCRIPT HERE
  55. for "_i" from 0 to _abandonDelay do {
  56.  
  57. // 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
  58. if ( { ( alive _x ) } count (crew _veh) > 0 || { !( alive _veh ) || { !( canMove _veh ) } } ) exitWith { _abandoned = false; };
  59. sleep 1;
  60.  
  61. };
  62.  
  63. // 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
  64. if ( ( _abandoned ) && { _veh distance _vehPos > 10 } ) then {
  65.  
  66. deleteVehicle _veh;
  67. sleep 1;
  68. _veh = createVehicle [ _vehtype, _vehPos, [], 0, "CAN_COLLIDE" ];
  69. _veh setDir _vehDir;
  70. _veh setPos [ ( _vehPos select 0 ), ( _vehPos select 1 ), 0 ];
  71. _veh call _vehInit;
  72. if (_vehName != "") then {
  73. missionNamespace setVariable [_vehName, _veh];
  74. publicVariable _vehName;
  75. };
  76. };
  77. };
  78.  
  79. // IF THE VEHICLE IS DESTROYED OR IF IT CAN'T MOVE THEN ITS DEAD
  80. if ( !( alive _veh ) || { !( canMove _veh ) } ) then {
  81.  
  82. _dead = true;
  83.  
  84. // COUNTDOWN THE DEAD DELAY - STALL SCRIPT HERE
  85. for "_i" from 0 to _destroyedDelay do {
  86.  
  87. // 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
  88. if ( { ( alive _x ) } count ( crew _veh ) > 0 || { ( canMove _veh ) } ) exitWith { _dead = false; };
  89. sleep 1;
  90.  
  91. };
  92.  
  93. // IF THE VEHICLE IS DEAD THEN DELETE IT AND CREATE A NEW ONE AT THE STARTING POSITION
  94. if ( _dead ) then {
  95.  
  96. deleteVehicle _veh;
  97. sleep 1;
  98. _veh = createVehicle [ _vehtype, _vehPos, [], 0, "CAN_COLLIDE" ];
  99. _veh setDir _vehDir;
  100. _veh setPos [ ( _vehPos select 0 ), (_vehPos select 1 ), 0 ];
  101. _veh call _vehInit;
  102. if (_vehName != "") then {
  103. missionNamespace setVariable [_vehName, _veh];
  104. publicVariable _vehName;
  105. };
  106.  
  107. };
  108. };
  109. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement