Jump to content
Sign in to follow this  
mycatsaid

Respawn Deserted Vehicles script and Clone AI Players on Restart

Recommended Posts

I was wondering if anyone knew the reason why after a map restart mid-game by admin in domination, AI clones can sometimes appear in the spawn area of the map. I have disabledAI=1; in the description.ext.

Also can anyone give me a hand modifying the vrespawn2 script to have a Empty Respawn Timer like the helirespawn2 script but making sure that MHQ doesn't respawn while deployed only when undeployed.

x_helirespawn2.sqf

// by Xeno
#define THIS_FILE "x_helirespawn2.sqf"
#include "x_setup.sqf"
private ["_heli_array", "_vec_a", "_vehicle", "_number_v", "_is_west_chopper", "_i", "_tt", "_ifdamage", "_empty", "_disabled", "_empty_respawn", "_startpos", "_hasbox", "_fuelleft"];
if (!isServer) exitWith{};

_heli_array = [];
{
_vec_a = _x;
_vehicle = _vec_a select 0;
_number_v = _vec_a select 1;
_ifdamage = _vec_a select 2;
_heli_array set [count _heli_array, [_vehicle,_number_v,_ifdamage,-1, position _vehicle,direction _vehicle,typeOf _vehicle,if (_ifdamage) then {-1} else {_vec_a select 3}]];

_vehicle setVariable [QGVAR(OUT_OF_SPACE), -1];
_vehicle setVariable [QGVAR(vec), _number_v, true];
_vehicle setVariable [QGVAR(vec_islocked), (locked _vehicle)];

if (!__A2Ver) then {
	_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(fuelCheck)}}];
};

#ifdef __TT__
if (_number_v < 400) then {
	if (!__A2Ver) then {
		_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(checkveckillwest)}}];
	} else {
		_vehicle addEventhandler ["Killed", {if (isServer) then {_this call FUNC(checkveckillwest)}}];
	};
} else {
	if (!__A2Ver) then {
		_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(checkveckilleast)}}];
	} else {
		_vehicle addEventhandler ["Killed", {if (isServer) then {_this call FUNC(checkveckilleast)}}];
	};
};
#endif
} forEach _this;
_this = nil;

_isfirst = true;

while {true} do {
__MPCheck;
#ifdef __A2ONLY__
private "_forEachIndex";
_forEachIndex = 0;
#endif
{
	_tt = 20 + random 10;
	sleep _tt;
	_vec_a = _x;
	_vehicle = _vec_a select 0;
	_ifdamage = _vec_a select 2;

	_empty = _vehicle call FUNC(GetVehicleEmpty);

	_disabled = false;
	if (!_ifdamage) then {
		_empty_respawn = _vec_a select 3;
		if (_empty && _vehicle distance (_vec_a select 4) > 10 && _empty_respawn == -1) then {
			_vec_a set [3, time + (_vec_a select 7)];
		};

		if (_empty && time > _empty_respawn && _empty_respawn != -1) then {
			_disabled = true;
		} else {
			if (!_empty && alive _vehicle) then {_vec_a set [3,-1]};
		};
	};

	if (damage _vehicle > 0.9) then {_disabled = true};

	if (_empty && !_disabled && alive _vehicle && (_vehicle call FUNC(OutOfBounds))) then {
		_outb = _vehicle getVariable QGVAR(OUT_OF_SPACE);
		if (_outb != -1) then {
			if (time > _outb) then {_disabled = true};
		} else {
			_vehicle setVariable [QGVAR(OUT_OF_SPACE), time + 600];
		};
	} else {
		_vehicle setVariable [QGVAR(OUT_OF_SPACE), -1];
	};

	sleep 0.01;

	if ((_disabled && _empty) || (_empty && !(alive _vehicle))) then {
		_hasbox = GV(_vehicle,GVAR(ammobox));
		if (isNil "_hasbox") then {_hasbox = false};
		_fuelleft = GV(_vehicle,GVAR(fuel));
		if (isNil "_fuelleft") then {_fuelleft = 1};
		if (_hasbox) then {["ammo_boxes",__XJIPGetVar(ammo_boxes) - 1] call FUNC(NetSetJIP)};
		_isitlocked = _vehicle getVariable QGVAR(vec_islocked);
		sleep 0.1;
		deletevehicle _vehicle;
		if (!_ifdamage) then {_vec_a set [3,-1]};
		sleep 0.5;
		_vehicle = objNull;
		_vehicle = createVehicle [_vec_a select 6, _vec_a select 4, [], 0, "NONE"];
		_vehicle setdir (_vec_a select 5);
#ifndef __CARRIER__
		_vehicle setpos (_vec_a select 4);
#else
		_vehicle setPosASL [(_vec_a select 4) select 0, (_vec_a select 4) select 1, 15.9];
#endif

		_vehicle setVariable [QGVAR(vec_islocked), _isitlocked];
		if (_isitlocked) then {_vehicle lock true};

		_vehicle setFuel _fuelleft;

		_vec_a set [0,_vehicle];
		_heli_array set [_forEachIndex, _vec_a];
		_number_v = _vec_a select 1;
		_vehicle setVariable [QGVAR(OUT_OF_SPACE), -1];
		_vehicle setVariable [QGVAR(vec), _number_v, true];
		[QGVAR(n_v), _vehicle] call FUNC(NetCallEvent);

		if (!__A2Ver) then {
			_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(fuelCheck)}}];
		};

#ifdef __TT__
		if (_number_v < 400) then {
			if (!__A2Ver) then {
				_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(checkveckillwest)}}];
			} else {
				_vehicle addEventhandler ["Killed", {if (isServer) then {_this call FUNC(checkveckillwest)}}];
			};
		} else {
			if (!__A2Ver) then {
				_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(checkveckilleast)}}];
			} else {
				_vehicle addEventhandler ["Killed", {if (isServer) then {_this call FUNC(checkveckilleast)}}];
			};
		};
#endif
	};
	#ifdef __A2ONLY__
	__INC(_forEachIndex);
	#endif
} forEach _heli_array;
sleep 20 + random 5;
};

x_vrespawn2.sqf

// by Xeno
#define THIS_FILE "x_vrespawn2.sqf"
#include "x_setup.sqf"

#define __Trans(tkind) _trans = getNumber(configFile >> #CfgVehicles >> typeOf _vehicle >> #tkind)
private ["_vehicle", "_camotype", "_camo", "_i", "_disabled", "_trans", "_empty", "_outb", "_hasbox", "_fuelleft"];
if (!isServer) exitWith{};

_vec_array = [];
{
_vehicle = _x select 0;
_number_v = _x select 1;
_vec_array set [count _vec_array, [_vehicle,_number_v,position _vehicle,direction _vehicle,typeOf _vehicle]];

_vehicle setVariable [QGVAR(OUT_OF_SPACE), -1];
_vehicle setVariable [QGVAR(vec), _number_v, true];
_vehicle setAmmoCargo 0;
_vehicle setVariable [QGVAR(vec_islocked), locked _vehicle];

if !(__A2Ver) then {
	_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(fuelCheck)}}];
};
#ifdef __TT__
if (_number_v < 100) then {
	if !(__A2Ver) then {
		_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(checkveckillwest)}}];
	} else {
		_vehicle addEventhandler ["Killed", {_this call FUNC(checkveckillwest)}];
	};
} else {
	if !(__A2Ver) then {
		_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(checkveckilleast)}}];
	} else {
		_vehicle addEventhandler ["Killed", {_this call FUNC(checkveckilleast)}];
	};
};
#endif
if (_number_v < 10 || (_number_v > 99 && _number_v < 110)) then {
	#ifndef __A2ONLY__
	_vehicle addMPEventhandler ["MPKilled", {(_this select 0) call FUNC(MHQFunc)}];
	#else
	_vehicle addEventhandler ["Killed", {(_this select 0) call FUNC(MHQFunc)}];
	#endif
};

#ifndef __CARRIER__
if (GVAR(with_base_camonet) == 0) then {
	_camotype = switch (getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "side")) do {
		case 1: {
			switch (true) do {
				case (__OAVer): {"Land_CamoNetB_NATO_EP1"};
				case (__COVer): {"Land_CamoNetB_NATO"};
			}
		};
		case 0: {
			switch (true) do {
				case (__OAVer): {"Land_CamoNetB_EAST_EP1"};
				case (__COVer): {"Land_CamoNetB_EAST"};
			};
		};
	};
	_camo = createVehicle [_camotype, position _vehicle, [], 0, "NONE"];
	_camo setDir (direction _vehicle) + 180;
	_camo setPos position _vehicle;
	_vehicle setVariable [QGVAR(camonet), _camo];
};
#endif
} forEach _this;
_this = nil;

//sleep 65;
sleep 5;

while {true} do {
sleep 8 + random 5;
__MPCheck;
#ifdef __A2ONLY__
private "_forEachIndex";
_forEachIndex = 0;
#endif
{
	_vec_a = _x;
	_vehicle = _vec_a select 0;

	_disabled = false;
	if (damage _vehicle > 0.9) then {
		_disabled = true;
	} else {
		__Trans(transportAmmo);
		if (_trans > 0) then {
			_vehicle setAmmoCargo 1;
		};
		__Trans(transportRepair);
		if (_trans > 0) then {
			_vehicle setRepairCargo 1;
		};
		__Trans(transportFuel);
		if (_trans > 0) then {
			_vehicle setFuelCargo 1;
		};
	};

	_empty = _vehicle call FUNC(GetVehicleEmpty);

	if (_empty && !_disabled && alive _vehicle && (_vehicle call FUNC(OutOfBounds))) then {
		_outb = _vehicle getVariable QGVAR(OUT_OF_SPACE);
		if (_outb != -1) then {
			if (time > _outb) then {_disabled = true};
		} else {
			_vehicle setVariable [QGVAR(OUT_OF_SPACE), time + 600];
		};
	} else {
		_vehicle setVariable [QGVAR(OUT_OF_SPACE), -1];
	};

	sleep 0.01;

#ifdef __ACE__
	_aliveve = if (!isNil {_vehicle getVariable "ace_canmove"}) then {_vehicle call ace_v_alive} else {alive _vehicle};
#else
	_aliveve = alive _vehicle;
#endif
	if ((_disabled && _empty) || (_empty && !_aliveve)) then {
		_number_v = _vec_a select 1;
		_hasbox = GV(_vehicle,GVAR(ammobox));
		if (isNil "_hasbox") then {_hasbox = false};
		_fuelleft = GV(_vehicle,GVAR(fuel));
		if (isNil "_fuelleft") then {_fuelleft = 1};
		if (_hasbox) then {["ammo_boxes",__XJIPGetVar(ammo_boxes) - 1] call FUNC(NetSetJIP)};
		if (_number_v < 10 || (_number_v > 99 && _number_v < 110)) then {
			_dhqcamo = GV(_vehicle,GVAR(MHQ_Camo));
			if (isNil "_dhqcamo") then {_dhqcamo = objNull};
			if (!isNull _dhqcamo) then {deleteVehicle _dhqcamo};
		};
#ifndef __CARRIER__
		if (GVAR(with_base_camonet) == 0) then {
			_camo = GV(_vehicle,GVAR(camonet));
			if (isNil "_camo") then {_camo = objNull};
			if (!isNull _camo) then {deleteVehicle _camo;_camo = objNull} else {_camo = objNull};
		};
#endif
		_isitlocked = _vehicle getVariable QGVAR(vec_islocked);
		sleep 0.1;
		deletevehicle _vehicle;
		sleep 0.5;
		_vehicle = objNull;
		_vehicle = createVehicle [_vec_a select 4, _vec_a select 2, [], 0, "NONE"];
		_vehicle setdir (_vec_a select 3);
#ifndef __CARRIER__
		_vehicle setpos (_vec_a select 2);
#else
		if (_number_v > 9) then {
			_vehicle setPos (_vec_a select 3);
		} else {
			_vehicle setPosASL [(_vec_a select 2) select 0, (_vec_a select 2) select 1, 15.9];
		};
#endif
		_vehicle setFuel _fuelleft;

		if (!__A2Ver) then {
			_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(fuelCheck)}}];
		};

		if (_number_v < 10 || (_number_v > 99 && _number_v < 110)) then {
#ifndef __A2ONLY__
			_vehicle addMPEventhandler ["MPKilled", {(_this select 0) call FUNC(MHQFunc)}];
#else
			_vehicle addEventhandler ["Killed", {(_this select 0) call FUNC(MHQFunc)}];
#endif
		};
		_vec_a set [0, _vehicle];
		_vec_array set [_forEachIndex, _vec_a];
		_vehicle setVariable [QGVAR(OUT_OF_SPACE), -1];
		_vehicle setVariable [QGVAR(vec), _number_v, true];
		_vehicle setAmmoCargo 0;
		_vehicle setVariable [QGVAR(vec_islocked), _isitlocked];
		if (_isitlocked) then {_vehicle lock true};
		[QGVAR(n_v), _vehicle] call FUNC(NetCallEvent);

#ifdef __TT__
		if (_number_v < 100) then {
			if !(__A2Ver) then {
				_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(checkveckillwest)}}];
			} else {
				_vehicle addEventhandler ["Killed", {_this call FUNC(checkveckillwest)}];
			};
		} else {
			if !(__A2Ver) then {
				_vehicle addMPEventhandler ["MPKilled", {if (isServer) then {_this call FUNC(checkveckilleast)}}];
			} else {
				_vehicle addEventhandler ["Killed", {_this call FUNC(checkveckilleast)}];
			};
		};
#endif
#ifndef __CARRIER__
		if (GVAR(with_base_camonet) == 0) then {
			if (isNull _camo) then {
				_camotype = switch (getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "side")) do {
					case 1: {
						switch (true) do {
							case (__OAVer): {"Land_CamoNetB_NATO_EP1"};
							case (__COVer): {"Land_CamoNetB_NATO"};
						}
					};
					case 0: {
						switch (true) do {
							case (__OAVer): {"Land_CamoNetB_EAST_EP1"};
							case (__COVer): {"Land_CamoNetB_EAST"};
						};
					};
				};
				_camo = createVehicle [_camotype, position _vehicle, [], 0, "NONE"];
				_camo setDir (direction _vehicle) + 180;
				_camo setPos position _vehicle;
				_vehicle setVariable [QGVAR(camonet), _camo];
			};
		};
#endif
	};
	sleep 8 + random 5;
	#ifdef __A2ONLY__
	__INC(_forEachIndex);
	#endif
} forEach _vec_array;
};

Thanks to any replies.

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×