A3-Conquest.Altis / scripts / AEGIS / Random / Base_Spawn.sqf
Base_Spawn.sqf
Raw
// Base_Spawn.sqf: Used to randomally generate Attacking sides FOBs & Carriers on Init
// DAC Notes: [// Side 0,// Side 0,// Side 0,// Camp Type from DAC_Config_Camps 0,// Side ]

// Define Globals
detailsFOBs = [];
detailsCarriers = [];

// Geo Center of Map
_coordsMapCenter = [worldSize / 2, worldsize / 2, 0];
_searchRadius = (worldSize / 2);

// Minimum distance2D between team base spawns
_distanceBetweenBeachFOBMax = 1000;
_distanceBetweenBeachFOBMin = 500;

// Define distances between opposing side base coords
_distanceBetweenBasesMin = 5000;

// Less than _distanceBetweenBasesMin
_distanceBetweenFOBCarrierMax = 3000;

// Less than _distanceBetweenFOBCarrierMax
_distanceBetweenCarriersMin = 1500;
_distanceBetweenFOBCarrierMin = (_distanceBetweenFOBCarrierMax / 2);
		
// Generate a random DACZone config to be shared between both attacking side FOBs
private _InfantryGroupAmount = [2,6] call BIS_fnc_randomInt;
private _InfantryGroupSize = [4,8] call BIS_fnc_randomInt;
private _randomZoneConfigInfantry = [_InfantryGroupAmount,_InfantryGroupSize,_InfantryGroupSize * _InfantryGroupAmount,_InfantryGroupSize];

private _WheeledGroupAmount = [2,4] call BIS_fnc_randomInt;
private _WheeledGroupSize = [2,4] call BIS_fnc_randomInt;
private _randomZoneConfigWheeled = [_WheeledGroupAmount,_WheeledGroupSize,_WheeledGroupSize * _WheeledGroupAmount,_WheeledGroupSize];

private _TrackedGroupAmount = [1,2] call BIS_fnc_randomInt;
private _TrackedGroupSize = [1,2] call BIS_fnc_randomInt;
private _randomZoneConfigTracked = [_TrackedGroupAmount,_TrackedGroupSize,_TrackedGroupSize * _TrackedGroupAmount,_TrackedGroupSize];

//private _HelicopterGroupAmount = [1,2] call BIS_fnc_randomInt;
//private _HelicopterGroupSize = [1,2] call BIS_fnc_randomInt;
//private _randomZoneConfigHelicopter = [_HelicopterGroupAmount,_HelicopterGroupSize,_HelicopterGroupSize * 2];

// ---- OPFOR FOB ----
	// Random Coordinates
	private _posOPFORFOBBeach = [_coordsMapCenter, 201, _searchRadius, 0, 0, 0.5, 1] call BIS_fnc_findSafePos;
	private _posOPFORFOB = [_posOPFORFOBBeach, 25, _distanceBetweenBeachFOBMax, 0, 0, 0.5, 0] call BIS_fnc_findSafePos;
	while {((_posOPFORFOB distance2D _posOPFORFOBBeach) < _distanceBetweenBeachFOBMin)} do {_posOPFORFOB = [_posOPFORFOBBeach, 25, _distanceBetweenBeachFOBMax, 0, 0, 0.5, 0] call BIS_fnc_findSafePos;};
	
		// FOB Marker
		private _markerOPFORFOB = createMarker ["markerOPFORFOB", _posOPFORFOB]; 
			"markerOPFORFOB" setMarkerType "o_hq"; 
				"markerOPFORFOB" setMarkerText "OPFOR FOB"; 
					"markerOPFORFOB" setMarkerColor "colorOPFOR";
						"markerOPFORFOB" setMarkerSize [0.9, 0.9];
						
	// Respawn
	[east, [_posOPFORFOB select 0, _posOPFORFOB select 1, 0]] call BIS_fnc_addRespawnPosition;
	
		// Restricted Area Trigger, Alert, Action
		private _triggerOPFORFOBRestricted = createTrigger ["EmptyDetector", [_posOPFORFOB select 0, _posOPFORFOB select 1, 0]];
		_triggerOPFORFOBRestricted setTriggerArea [200, 200, 200, false];
		_triggerOPFORFOBRestricted setTriggerActivation ["ANYPLAYER", "PRESENT", true];
		_triggerOPFORFOBRestricted setTriggerStatements ["thisList findIf {side _x == WEST} > -1", "[thisList] execVM 'scripts\AEGIS\Restricted\Restricted_Area_Enter.sqf'", "[] execVM 'scripts\AEGIS\Restricted\Restricted_Area_Exit.sqf'"];
		
		// Protected Area Trigger, Alert, Action
		private _triggerOPFORFOBProtected = createTrigger ["EmptyDetector", [_posOPFORFOB select 0, _posOPFORFOB select 1, 0]];
		_triggerOPFORFOBProtected setTriggerArea [200, 200, 200, false];
		_triggerOPFORFOBProtected setTriggerType "NONE";
		_triggerOPFORFOBProtected setTriggerActivation ["ANYPLAYER", "PRESENT", true];
		_triggerOPFORFOBProtected setTriggerStatements ["thisList findIf {side _x == EAST} > -1", "[thisTrigger call BIS_fnc_getArea, (getPos thisTrigger), ((thisTrigger call BIS_fnc_getArea) select 1)] execVM 'scripts\AEGIS\Protected\Protected_Area_Enter.sqf'", "[(getPos thisTrigger), ((thisTrigger call BIS_fnc_getArea) select 1)] execVM 'scripts\AEGIS\Protected\Protected_Area_Exit.sqf'"];


// ---- BLUFOR FOB ----
	// Random Coordinates
	private _posBLUFORFOBBeach = [_coordsMapCenter, 201, _searchRadius, 0, 0, 0.5, 1] call BIS_fnc_findSafePos;
	while {((_posBLUFORFOBBeach distance2D _posOPFORFOBBeach) < _distanceBetweenBasesMin)} do {_posBLUFORFOBBeach = [_coordsMapCenter, 201, _searchRadius, 0, 0, 0.5, 1] call BIS_fnc_findSafePos;};
	private _posBLUFORFOB = [_posBLUFORFOBBeach, 25, _distanceBetweenBeachFOBMax, 0, 0, 0.5, 0] call BIS_fnc_findSafePos;
	while {((_posBLUFORFOB distance2D _posBLUFORFOBBeach) < _distanceBetweenBeachFOBMin) || ((_posBLUFORFOB distance2D _posOPFORFOB) < _distanceBetweenBasesMin)} do {_posBLUFORFOB = [_posBLUFORFOBBeach, 25, _distanceBetweenBeachFOBMax, 0, 0, 0.5, 0] call BIS_fnc_findSafePos;};
	
		// FOB Marker
		private _markerBLUFORFOB = createMarker ["markerBLUFORFOB", _posBLUFORFOB]; 
			"markerBLUFORFOB" setMarkerType "o_hq"; 
				"markerBLUFORFOB" setMarkerText "BLUFOR FOB"; 
					"markerBLUFORFOB" setMarkerColor "colorBLUFOR";
						"markerBLUFORFOB" setMarkerSize [0.9, 0.9];
						
	// Respawn
	[west, [_posBLUFORFOB select 0, _posBLUFORFOB select 1, 0]] call BIS_fnc_addRespawnPosition;
	
		// Restricted Area Trigger, Alert, Action
		private _triggerBLUFORFOBRestricted = createTrigger ["EmptyDetector", [_posBLUFORFOB select 0, _posBLUFORFOB select 1, 0]];
		_triggerBLUFORFOBRestricted setTriggerArea [200, 200, 200, false];
		_triggerBLUFORFOBRestricted setTriggerActivation ["ANYPLAYER", "PRESENT", true];
		_triggerBLUFORFOBRestricted setTriggerStatements ["thisList findIf {side _x == EAST} > -1", "[thisList] execVM 'scripts\AEGIS\Restricted\Restricted_Area_Enter.sqf'", "[] execVM 'scripts\AEGIS\Restricted\Restricted_Area_Exit.sqf'"];
		
		// Protected Area Trigger, Alert, Action
		private _triggerBLUFORFOBProtected = createTrigger ["EmptyDetector", [_posBLUFORFOB select 0, _posBLUFORFOB select 1, 0]];
		_triggerBLUFORFOBProtected setTriggerArea [200, 200, 200, false];
		_triggerBLUFORFOBProtected setTriggerType "NONE";
		_triggerBLUFORFOBProtected setTriggerActivation ["ANYPLAYER", "PRESENT", true];
		_triggerBLUFORFOBProtected setTriggerStatements ["thisList findIf {side _x == WEST} > -1", "[thisTrigger call BIS_fnc_getArea, (getPos thisTrigger), ((thisTrigger call BIS_fnc_getArea) select 1)] execVM 'scripts\AEGIS\Protected\Protected_Area_Enter.sqf'", "[(getPos thisTrigger), ((thisTrigger call BIS_fnc_getArea) select 1)] execVM 'scripts\AEGIS\Protected\Protected_Area_Exit.sqf'"];


// ---- OPFOR Carrier ----
	// Random Coordinates
	private _posOPFORCarrier = [_posOPFORFOBBeach, 25, _distanceBetweenFOBCarrierMax, 0, 2, 1, 0] call BIS_fnc_findSafePos;
	while {((_posOPFORCarrier distance2D _posOPFORFOB) < _distanceBetweenFOBCarrierMin)} do {_posOPFORCarrier = [_posOPFORFOBBeach, 25, _distanceBetweenFOBCarrierMax, 0, 2, 1, 0] call BIS_fnc_findSafePos;};
	 
		// Carrier Marker
		private _markerOPFORCarrier = createMarker ["markerOPFORCarrier", _posOPFORCarrier]; 
			"markerOPFORCarrier" setMarkerType "o_naval"; 
				"markerOPFORCarrier" setMarkerText "OPFOR Carrier"; 
					"markerOPFORCarrier" setMarkerColor "colorOPFOR"; 
						"markerOPFORCarrier" setMarkerSize [1.05, 1.05];

	// Spawn Carrier
	private _carrierOPFOR = createVehicle ["Land_Carrier_01_base_F",getMarkerPos "markerOPFORCarrier",[],0,"None"];

		// Place, Rotate, & Surface Carrier
		_posOPFORCarrier = _posOPFORCarrier getPos [0,random [360,0,360]]; 
			_carrierOPFOR setPosWorld ASLToATL _posOPFORCarrier; 
				_carrierOPFOR setDir (random [360,0,360]); 
					[_carrierOPFOR] call BIS_fnc_Carrier01PosUpdate;
	
	// Respawn
	[east, [_posOPFORCarrier select 0, _posOPFORCarrier select 1, 25]] call BIS_fnc_addRespawnPosition;
	
		// Restricted Area Trigger, Alert, Action
		private _triggerOPFORCarrierRestricted = createTrigger ["EmptyDetector", [_posOPFORCarrier select 0, _posOPFORCarrier select 1, 25]];
		_triggerOPFORCarrierRestricted setTriggerArea [200, 200, 200, false];
		_triggerOPFORCarrierRestricted setTriggerActivation ["ANYPLAYER", "PRESENT", true];
		_triggerOPFORCarrierRestricted setTriggerStatements ["thisList findIf {side _x == WEST} > -1", "[thisList] execVM 'scripts\AEGIS\Restricted\Restricted_Area_Enter.sqf'", "[] execVM 'scripts\AEGIS\Restricted\Restricted_Area_Exit.sqf'"];
		
		// Protected Area Trigger, Alert, Action
		private _triggerOPFORCarrierProtected = createTrigger ["EmptyDetector", [_posOPFORCarrier select 0, _posOPFORCarrier select 1, 25]];
		_triggerOPFORCarrierProtected setTriggerArea [200, 200, 200, false];
		_triggerOPFORCarrierProtected setTriggerActivation ["ANYPLAYER", "PRESENT", true];
		_triggerOPFORCarrierProtected setTriggerStatements ["thisList findIf {side _x == EAST} > -1", "[thisTrigger call BIS_fnc_getArea, (getPos thisTrigger), ((thisTrigger call BIS_fnc_getArea) select 1)] execVM 'scripts\AEGIS\Protected\Protected_Area_Enter.sqf'", "[(getPos thisTrigger), ((thisTrigger call BIS_fnc_getArea) select 1)] execVM 'scripts\AEGIS\Protected\Protected_Area_Exit.sqf'"];


// ---- BLUFOR Carrier ----
	// Random Coordinates
	private _posBLUFORCarrier = [_posBLUFORFOBBeach, 25, _distanceBetweenFOBCarrierMax, 0, 2, 1, 0] call BIS_fnc_findSafePos;
	while {((_posBLUFORCarrier distance2D _posBLUFORFOB) < _distanceBetweenFOBCarrierMin) || ((_posBLUFORCarrier distance2D _posOPFORCarrier) < _distanceBetweenCarriersMin)} do {_posBLUFORCarrier = [_posBLUFORFOBBeach, 25, _distanceBetweenFOBCarrierMax, 0, 2, 1, 0] call BIS_fnc_findSafePos;};
	 
		// Carrier Marker
		private _markerBLUFORCarrier = createMarker ["markerBLUFORCarrier", _posBLUFORCarrier]; 
			"markerBLUFORCarrier" setMarkerType "o_naval"; 
				"markerBLUFORCarrier" setMarkerText "BLUFOR Carrier"; 
					"markerBLUFORCarrier" setMarkerColor "colorBLUFOR"; 
						"markerBLUFORCarrier" setMarkerSize [1.05, 1.05];

	// Spawn Carrier
	private _carrierBLUFOR = createVehicle ["Land_Carrier_01_base_F",getMarkerPos "markerBLUFORCarrier",[],0,"None"];

		// Place, Rotate, & Surface Carrier
		_posBLUFORCarrier = _posBLUFORCarrier getPos [0,random [360,0,360]]; 
			_carrierBLUFOR setPosWorld ASLToATL _posBLUFORCarrier; 
				_carrierBLUFOR setDir (random [360,0,360]); 
					[_carrierBLUFOR] call BIS_fnc_Carrier01PosUpdate;
	
	// Respawn
	[west, [_posBLUFORCarrier select 0, _posBLUFORCarrier select 1, 25]] call BIS_fnc_addRespawnPosition;
	
		// Restricted Area Trigger, Alert, Action
		private _triggerBLUFORCarrierRestricted = createTrigger ["EmptyDetector", [_posBLUFORCarrier select 0, _posBLUFORCarrier select 1, 25]];
		_triggerBLUFORCarrierRestricted setTriggerArea [200, 200, 200, false];
		_triggerBLUFORCarrierRestricted setTriggerActivation ["ANYPLAYER", "PRESENT", true];
		_triggerBLUFORCarrierRestricted setTriggerStatements ["thisList findIf {side _x == EAST} > -1", "[thisList] execVM 'scripts\AEGIS\Restricted\Restricted_Area_Enter.sqf'", "[] execVM 'scripts\AEGIS\Restricted\Restricted_Area_Exit.sqf'"];
		
		// Protected Area Trigger, Alert, Action
		private _triggerBLUFORCarrierProtected = createTrigger ["EmptyDetector", [_posBLUFORCarrier select 0, _posBLUFORCarrier select 1, 25]];
		_triggerBLUFORCarrierProtected setTriggerArea [200, 200, 200, false];
		_triggerBLUFORCarrierProtected setTriggerActivation ["ANYPLAYER", "PRESENT", true];
		_triggerBLUFORCarrierProtected setTriggerStatements ["thisList findIf {side _x == WEST} > -1", "[thisTrigger call BIS_fnc_getArea, (getPos thisTrigger), ((thisTrigger call BIS_fnc_getArea) select 1)] execVM 'scripts\AEGIS\Protected\Protected_Area_Enter.sqf'", "[(getPos thisTrigger), ((thisTrigger call BIS_fnc_getArea) select 1)] execVM 'scripts\AEGIS\Protected\Protected_Area_Exit.sqf'"];

// Append generated markers, coords, and areas
detailsFOBs append [["markerOPFORFOB", [_posOPFORFOB select 0, _posOPFORFOB select 1, 0], 200], ["markerBLUFORFOB", [_posBLUFORFOB select 0, _posBLUFORFOB select 1, 0], 200]];
detailsCarriers append [["markerOPFORCarrier", [_posOPFORCarrier select 0, _posOPFORCarrier select 1, 0], 200], ["markerBLUFORCarrier", [_posBLUFORCarrier select 0, _posBLUFORCarrier select 1, 0], 200]];