123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- /*
- ==================================================================================================================
- Simple Vehicle Respawn Script v1.81 for Arma 3
- by Tophe of Östgöta Ops [OOPS] and tweaked for I&A 3 by Rarek [AW]
- Edited for Star Wars Opposistion by 501st Legion
-
- Put this in the vehicles init line:
- veh = [this] execVM "vehicle.sqf"
-
- Options:
- There are some optional settings. The format for these are:
- veh = [object, Delay, Deserted timer, Respawns, Effect, Dynamic] execVM "vehicle.sqf"
-
- Default respawn delay is 30 seconds, to set a custom respawn delay time, put that in the init as well.
- Like this:
- veh = [this, 15] execVM "vehicle.sqf"
- Default respawn time when vehicle is deserted, but not destroyed is 120 seconds. To set a custom timer for this
- first set respawn delay, then the deserted vehicle timer. (0 = disabled)
- Like this:
- veh = [this, 15, 10] execVM "vehicle.sqf"
- By default the number of respawns is infinite. To set a limit first set preceding values then the number of respawns you want (0 = infinite).
- Like this:
- veh = [this, 15, 10, 5] execVM "vehicle.sqf"
- Set this value to TRUE to add a special explosion effect to the wreck when respawning.
- Default value is FALSE, which will simply have the wreck disappear.
- Like this:
- veh = [this, 15, 10, 5, TRUE] execVM "vehicle.sqf"
-
- By default the vehicle will respawn to the point where it first was when the mission started (static).
- This can be changed to dynamic. Then the vehicle will respawn to the position where it was destroyed.
- First set all preceding values then set TRUE for dynamic or FALSE for static.
- Like this:
- veh = [this, 15, 10, 5, TRUE, TRUE] execVM "vehicle.sqf"
-
- If you you want to set the INIT field of the respawned vehicle, first set all other values, then set init commands.
- Those must be inside quotations.
- Like this:
- veh = [this, 15, 10, 5, TRUE, FALSE, "this setDammage 0.5"] execVM "vehicle.sqf"
-
- Default values of all settings are:
- veh = [this, 30, 120, 0, FALSE, FALSE] execVM "vehicle.sqf"
-
-
- Contact & Bugreport: cwadensten@gmail.com
- ================================================================================================================== */
-
- if (!isServer) exitWith {};
- // Define variables
- _unit = [_this,0,objNull,[objNull]] call BIS_fnc_param;
- _delay = [_this,1,30,[0]] call BIS_fnc_param;
- _deserted = [_this,2,120,[0]] call BIS_fnc_param;
- _respawns = [_this,3,0,[0]] call BIS_fnc_param;
- _explode = [_this,4,false,[true]] call BIS_fnc_param;
- _dynamic = [_this,5,false,[true]] call BIS_fnc_param;
- _unitinit = [_this,6];
- _haveinit = if (count _this > 6) then { true } else { false };
- _hasname = false;
- _unitname = vehicleVarName _unit;
- if (isNil _unitname) then {_hasname = false;} else {_hasname = true;};
- _noend = true;
- _run = true;
- _rounds = 0;
- if (_delay < 0) then {_delay = 0};
- if (_deserted < 0) then {_deserted = 0};
- if (_respawns <= 0) then {_respawns= 0; _noend = true;};
- if (_respawns > 0) then {_noend = false};
- _dir = getDir _unit;
- _position = getPosASL _unit;
- _type = typeOf _unit;
- _dead = false;
- _nodelay = false;
- // Start monitoring the vehicle
- while {_run} do
- {
- sleep (2 + random 10);
- if ((getDammage _unit > 0.8) and ({alive _x} count crew _unit == 0)) then {_dead = true};
- // Check if the vehicle is deserted.
- if (_deserted > 0) then
- {
- if ((getPosASL _unit distance _position > 10) and ({alive _x} count crew _unit == 0) and (getDammage _unit < 0.8)) then
- {
- _timeout = time + _deserted;
- sleep 0.1;
- waitUntil {_timeout < time or !alive _unit or {alive _x} count crew _unit > 0};
- if ({alive _x} count crew _unit > 0) then {_dead = false};
- if ({alive _x} count crew _unit == 0) then {_dead = true; _nodelay =true};
- if !(alive _unit) then {_dead = true; _nodelay = false};
- };
- };
- // Respawn vehicle
- if (_dead) then
- {
- if (_nodelay) then {sleep 0.1; _nodelay = false;} else {sleep _delay;};
- if (_dynamic) then {_position = getPosASL _unit; _dir = getDir _unit;};
- if (_explode) then {_effect = "M_AT" createVehicle getPosASL _unit; _effect setPosASL getPosASL _unit;};
- sleep 0.1;
- deleteVehicle _unit;
- sleep 2;
- _unit = _type createVehicle _position;
- _unit setPosASL _position;
- _unit setDir _dir;
- if (["B_UAV", _type] call BIS_fnc_inString) then { createVehicleCrew _unit; };
- if (_haveinit) then
- {
- _unit call compile format ["%1=_This; PublicVariable '%1'",_unitinit];
- };
- if (_hasname) then
- {
- _unit setVehicleVarName _unitname;
- _unit call compile format ["%1=_This; PublicVariable '%1'",_unitname];
- };
- _dead = false;
- // Check respawn amount
- if !(_noend) then {_rounds = _rounds + 1};
- if ((_rounds == _respawns) and !(_noend)) then {_run = false;};
- };
- };
|