A3-Conquest.Altis / DAC / Scripts / DAC_Init_Waypoint.sqf
DAC_Init_Waypoint.sqf
Raw
//////////////////////////////
//    Dynamic-AI-Creator    //
//    Version 3.1b - 2014   //
//--------------------------//
//    DAC_Init_Waypoint     //
//--------------------------//
//    Script by Silola      //
//    silola@freenet.de     //
//////////////////////////////

private [
			"_DAC_WP_Typ","_wpConfig","_CheckRadius1","_CheckRadius2","_checkAreaH","_checkNear","_checkObjH1","_checkObjH2",
			"_checkMaxH","_checkMinH","_checkCount","_DAC_Typ_Nr","_MTemp","_string","_TempArray","_DAC_MColor","_sideA","_polyOutLine",
			"_DAC_Typ_Name","_ScriptArray","_DAC_WP_Basic","_minit","_m3","_countairwp","_tnr","_text","_side","_rx","_ry","_px","_py","_pc",
			"_DumyA","_DumyB","_Null","_PosNull","_zonr","_wpnr","_chnr","_hz","_DAC_Count_WP","_DAC_SelectZone","_rsin","_rcos","_polyResult",
			"_DAC_EnemyZone","_DAC_ZoneRadiusX","_DAC_ZoneRadiusY","_DAC_ZoneMode","_DAC_GroupSol","_DAC_GroupVeh","_DAC_PolyCount","_dist",
			"_DAC_GroupTan","_DAC_GroupAir","_DAC_ZoneSide","_tempList","_ln","_wn","_checkwp","_log","_DAC_ActivZoneX","_polyArray",
			"_DAC_ActivZoneY","_RandomX","_RandomY","_PosMin","_PosMax","_nr","_cv","_cr","_np","_cd","_allObjects","_checkResol",
			"_relObjects","_DPos","_ma","_run","_go","_mm1","_m1","_mm2","_m2","_m3","_mm3","_m4","_mm4","_DAC_WP_Nr","_m5","_mm5",
			"_sdv","_sdu","_sdl","_zoneQM"
		];
		
			_DAC_WP_Typ = _this select 0;_wpConfig = [];_checkResol = 90;_tempList = [];_DAC_EnemyZone = objNull;_rx = 0,_ry = 0;_rsin = [];_rcos = [];
			_DAC_Typ_Nr = ["S","V","T","A","C"];_MTemp = [];_string ="Null";_TempArray = [];_ScriptArray = [2,3,4,5];_DAC_WP_Basic = 0;_dist = 0;
			_DAC_MColor = ["ColorBlue","ColorYellow","ColorRed","ColorGreen","ColorBlack"];_minit = 0;_m3 = "";_mm1 = "";_mm2 = "";_countairwp = 0;
			_DAC_Typ_Name = ["Infantry","Unarmed vehicles","Armed vehicles","Helicopter","Camp"];_run = 1;_go = 0;_DAC_WP_Nr = 0;_m5 = "";_mm5 = "";
			_sideA = ["East","West","Guer","Civl"];_DAC_PolyCount = [];_polyArray = [];_polyOutLine = [];_px = 0;_py = 0;_pc = 0;_polyResult = [];
			_sdv = 0;_sdu = [];_sdl = 0;_zoneQM = 0;

sleep 1;

while {_run > 0} do
{
	switch (_run) do
	{
		case 1:	{
					if(!(_DAC_WP_Typ == 1)) then
					{
						_run = 3;
					}
					else
					{
						sleep 1;
						waituntil {(({(getdir (call compile (_x select 0))) == 0} count DAC_Zones) == count DAC_Zones) && (count DAC_Zones > 0)};
						if((DAC_Com_Values select 1) < 2) then {_run = 3} else {_run = 2};
					};
				};
		case 2:	{
					_string = "<t color='#FFFF99' size='0.9' shadow='1' shadowColor='#333333' font='PuristaMedium' align='left'><br/>";
					DAC_InitText = (DAC_InitText + _string + format["=== %1 AI Zone(s) initializes =====",count DAC_Zones] + "<br/><br/></t>");
					if(DAC_Basic_Value != 10) then {hintSilent parseText DAC_InitText};
					_tnr = 0;_text = DAC_Zones select _tnr;
					_string = "<t color='#CCCCCC' size='0.9' font='PuristaMedium' align='left'>";
					While {_tnr < count DAC_Zones} do
					{
						_text = DAC_Zones select _tnr;_side = (_sideA select ((_text select 8) select 0));_string2 = "";_string3 = "<t color='#CCCCCC'>";
						if(((count (_text select 4)) < 2) && ((count (_text select 5)) < 2) && ((count (_text select 6)) < 2) && ((count (_text select 7)) < 2)) then {_side = "Neutral"};
						_DAC_EnemyZone = call compile (_text select 0);
						if((triggerarea _DAC_EnemyZone) select 3) then
						{
							_zoneQM = ((((triggerarea _DAC_EnemyZone) select 0) / 1000) * (((triggerarea _DAC_EnemyZone) select 1) / 1000));
						}
						else
						{
							if(((triggerarea _DAC_EnemyZone) select 0) == ((triggerarea _DAC_EnemyZone) select 1)) then
							{
								_zoneQM = (pi * (((((triggerarea _DAC_EnemyZone) select 0) / 1000) / 2) * ((((triggerarea _DAC_EnemyZone) select 0) / 1000) / 2)));
							}
							else
							{
								_zoneQM = ((((((triggerarea _DAC_EnemyZone) select 0) / 1000) * (((triggerarea _DAC_EnemyZone) select 1) / 1000)) * pi) / 4);
							};
						};
						switch (format["%1",_side]) do
						{
							case "West":{_string2 = "<t color='#66CCFF'>"};
							case "East":{_string2 = "<t color='#FF0033'>"};
							case "Guer":{_string2 = "<t color='#FFFF33'>"};
							case "Civl":{_string2 = "<t color='#33CC33'>"};
							default	{_string2 = "<t color='#999999'>"};
						};
						DAC_InitText = (DAC_InitText + _string + format["%1 -> ",(_text select 0)] + _string2 + format["%1 -> ",_side] + _string3 + format["%1 qkm",_zoneQM] + "<br/></t>");
						if(DAC_Basic_Value != 10) then {hintSilent parseText DAC_InitText};
						_tnr = _tnr + 1;
					};
					sleep 0.1;
					_string = "<t color='#FFFF99' size='0.9' shadow='1' shadowColor='#333333' font='PuristaMedium' align='left'><br/>";
					DAC_InitText = (DAC_InitText + _string + "=== Waypoints are generated ====" + "<br/><br/></t>" + "<t color='#999966' size='0.9' shadow='1' shadowColor='#333333'>");
					if(DAC_Basic_Value != 10) then {hintSilent parseText DAC_InitText};
					_run = 3;
				};
		case 3:	{
					_DumyA = "logic" createvehiclelocal [0,0,0];
					_DumyB = "logic" createvehiclelocal [0,0,0];
					_Null = "EmptyDetector" createvehiclelocal [0,0,0];
					_PosNull = 0;_zonr = 0;_wpnr = 0;_chnr = 0;_hz = 0;_DAC_Count_WP = 0;
					if(_DAC_WP_Typ == 1) then {{[_x]execVM "DAC\Scripts\DAC_Init_Waypoint.sqf"} foreach _ScriptArray};
					if(!(_DAC_WP_Typ in DAC_Init_WP)) then {DAC_Init_WP set [count DAC_Init_WP,_DAC_WP_Typ]};
					if(DAC_Marker > 0) then
					{
						if((DAC_Marker_Val select 1) > 0) then
						{
							_m1 = format["m%1%2%3",_zonr,9999,_DAC_WP_Typ];_mm1 = createmarkerlocal [_m1, position _DumyA];
							_mm1 setMarkerShapelocal "ELLIPSE";_mm1 setMarkerSizelocal [1,1];
							_mm1 setMarkerColorlocal (_DAC_MColor select (_DAC_WP_Typ - 1));
							_m2 = format["p%1%2%3",_zonr,0,_DAC_WP_Typ];_mm2 = createmarkerlocal [_m2, position _DumyA];
							_mm2 setMarkerTypelocal "mil_dot";_mm2 setMarkerSizelocal [1,1];
							_mm2 setMarkerColorlocal "ColorBlack";
							_m5 = format["m%1%2%3",_zonr,9998,_DAC_WP_Typ];_mm5 = createmarkerlocal [_m5, position _DumyA];
							_mm5 setMarkerShapelocal "ELLIPSE";_mm5 setMarkerSizelocal [1,1];
							_mm5 setMarkerColorlocal "ColorRed";
						};
					};
					sleep (random 0.5);
					if(DAC_StartDummy in DAC_Init_WP) then {DAC_Init_WP = DAC_Init_WP - [DAC_StartDummy]};
					_run = 4;
				};
		case 4:	{
					_go = 0;
					while {_go == 0} do
					{
						_wpnr = 0;_chnr = 0;_hz = 0;_DAC_WP_Nr = 0;
						if(_zonr >= count DAC_Zones) then
						{
							_run = 13;_go = 1;
						}
						else
						{
							_DAC_SelectZone = DAC_Zones select _zonr;_DAC_EnemyZone = call compile (_DAC_SelectZone select 0);
							_DAC_ZoneRadiusX = _DAC_SelectZone select 1;_DAC_ZoneRadiusY = _DAC_SelectZone select 2;
							_DAC_ZoneMode = _DAC_SelectZone select 3;_DAC_GroupSol = _DAC_SelectZone select 4;
							_DAC_GroupVeh = _DAC_SelectZone select 5;_DAC_GroupTan = _DAC_SelectZone select 6;
							_DAC_GroupAir = _DAC_SelectZone select 7;_DAC_ZoneSide = _DAC_SelectZone select 8;
							_DAC_PolyCount = _DAC_SelectZone select 10;
							if((count _DAC_ZoneSide) > 4) then
							{
								if((_DAC_ZoneSide select 4) > 0) then
								{
									_DAC_WP_Nr = (_DAC_ZoneSide select 4);
								};
							};
							_wpConfig = [(_DAC_WP_Typ - 1),_DAC_WP_Nr] call DAC_fConfigWP;
							if(count _wpConfig == 0) exitwith {};
							_CheckRadius1 = ((_wpConfig select 0) select 0);_CheckRadius2 = ((_wpConfig select 0) select 1);
							_checkAreaH = _wpConfig select 1;_checkNear = _wpConfig select 2;
							_checkObjH1 = ((_wpConfig select 3) select 0);_checkObjH2 = ((_wpConfig select 3) select 1);
							_checkMaxH = _wpConfig select 4;_checkMinH = _wpConfig select 5;_checkCount = _wpConfig select 6;
							_checkResol = ((_wpConfig select 0) select 2);_mm5 setMarkerSizelocal [_CheckRadius1, _CheckRadius1];
							switch (_DAC_WP_Typ) do
							{
								case 1:	{
											if(count _DAC_GroupSol == 0) then
											{
												_zonr = _zonr + 1;_run = 20;
											}
											else
											{
												if(count _DAC_GroupSol == 1) then
												{
													_DAC_Count_WP = _DAC_GroupSol select 0;
												}
												else
												{
													_DAC_Count_WP = _DAC_GroupSol select 2;
												};
											};
										};
								case 2:	{
											if(count _DAC_GroupVeh == 0) then
											{
												_zonr = _zonr + 1;_run = 20;
											}
											else
											{
												if(count _DAC_GroupVeh == 1) then
												{
													_DAC_Count_WP = _DAC_GroupVeh select 0;
												}
												else
												{
													_DAC_Count_WP = _DAC_GroupVeh select 2;
												};
											};
										};
								case 3:	{
											if(count _DAC_GroupTan == 0) then
											{
												_zonr = _zonr + 1;_run = 20;
											}
											else
											{
												if(count _DAC_GroupTan == 1) then
												{
													_DAC_Count_WP = _DAC_GroupTan select 0;
												}
												else
												{
													_DAC_Count_WP = _DAC_GroupTan select 2;
												};
											};
										};
								case 4:	{
											if((count _DAC_GroupAir == 0) || (count _DAC_GroupAir > 4)) then
											{
												_zonr = _zonr + 1;_run = 20;
											}
											else
											{
												if(count _DAC_GroupAir == 1) then
												{
													_DAC_Count_WP = _DAC_GroupAir select 0;_hz = 1;
													_countairwp = _DAC_GroupAir select 0;
												}
												else
												{
													_DAC_Count_WP = _DAC_GroupAir select 0;
													_countairwp = _DAC_GroupAir select 2;
												};
												DAC_WP_Pool_H set [count DAC_WP_Pool_H,[_DAC_EnemyZone,_DAC_ZoneMode,0,0,0]];
											};
										};
								case 5:	{
											if(count _DAC_GroupAir < 5) then
											{
												_zonr = _zonr + 1;_run = 20;
											}
											else
											{
												_DAC_Count_WP = _DAC_GroupAir select 0;
											};
											DAC_WP_Pool_B set [count DAC_WP_Pool_B,[_DAC_EnemyZone,_DAC_ZoneMode,0,0,0]];
										};
								Default {};
							};
							if(_run == 20) then
							{
								_run = 4;
							}
							else
							{
								if(_DAC_Count_WP <= 0) then
								{
									hintc format["Error: DAC_Init_Waypoint > There are no waypoints > Zone: %1",(_DAC_SelectZone select 0)];
									_run = 0;_go = 1;
								}
								else
								{
									if(_run == 13) then
									{
										_go = 1;
									}
									else
									{
										call compile format["DAC_WP_Pool_%1 set [count DAC_WP_Pool_%1,[_DAC_EnemyZone,_DAC_ZoneMode,_DAC_GroupSol,_DAC_GroupVeh,_DAC_GroupTan,_DAC_GroupAir,_DAC_ZoneSide,_CheckRadius2]]",_DAC_Typ_Nr select (_DAC_WP_Typ - 1)];
										_run = 5;_go = 1;
									};
								};
							};
						};
					};
				};
		case 5:	{
					_go = 1;
					while {_go > 0} do
					{
						switch (_go) do
						{
							case 1:	{
										_tempList = List _DAC_EnemyZone;_sdl = 0;
										if(count _tempList == 0) then
										{
											_go = 4;
										}
										else
										{
											_ln = 0;_wn = 0;_go = 2;_dist = 100000;_log = objNull;
											{
												if((format["%1",typeof _x] == "Logic")
												&& (format["%1",direction _x] == format["%1",_DAC_WP_Typ])
												&& ((count waypoints _x) > 1)) then
												{
													if(format["%1",_x getVariable "Link"] != "<NULL>") then
													{
														if((_x getVariable "Link") == _DAC_EnemyZone) then
														{
															_log = _x;_dist = 0;
														};
													}
													else
													{
														if((getwppos[_x,0] distance _DAC_EnemyZone) < _dist) then
														{
															_log = _x;_dist = (getwppos[_x,0] distance _DAC_EnemyZone);
														};
													};
												}
												else
												{
													if(count DAC_SaveDistance > 0) then
													{
														if(format["%1",_x] in (DAC_SaveDistance select 1)) then {_sdl = 1;_sdv = (DAC_SaveDistance select 0);_sdu = (DAC_SaveDistance select 1)};
													};
												};
											}foreach _tempList;
											if(isNull _log) then {_go = 4} else {_go = 3};
										};
									};
							case 2:	{		
										//disabled;	
									};
							case 3:	{
										while{(((getwppos[_log,_wn + 1]) select 0)+((getwppos[_log,_wn + 1]) select 1) != 0)} do
										{
											_checkwp = getwppos[_log,_wn + 1];
											call compile format["DAC_WP_Pool_%1 set [count DAC_WP_Pool_%1,[_checkwp select 0,_checkwp select 1]]",_DAC_Typ_Nr select (_DAC_WP_Typ - 1)];
											DAC_Master_Init = DAC_Master_Init + 1;_wn = _wn + 1;_wpnr = _wpnr + 1;
											if(DAC_Marker > 0) then
											{
												if((DAC_Marker_Val select 1) > 0) then
												{
													_m = format["m%1%2%3",_zonr,_wn,_log];
													_ma = createmarkerlocal [_m, [_checkwp select 0,_checkwp select 1]];
													_ma setMarkerShapelocal "ELLIPSE";_ma setMarkerSizelocal [_CheckRadius2, _CheckRadius2];
													_ma setMarkerBrush "BORDER"; 
													_ma setMarkerColorlocal (_DAC_MColor select (_DAC_WP_Typ - 1));
													if((DAC_Marker_Val select 1) == 1) then {_MTemp set [count _MTemp,_ma]};
												};
											};
										};
										_go = 4;
									};
							case 4:	{		
										if(_hz == 1) then
										{
											_run = 12;_go = 0;
										}
										else
										{
											_run = 6;_go = 0;
										};
									};
							Default	{};
						};
					};
				};
		case 6:	{
					if(_wpnr >= _DAC_Count_WP) then
					{
						_run = 12;
					}
					else
					{
						_DAC_ActivZoneX  = ((getPosATL _DAC_EnemyZone select 0) - _DAC_ZoneRadiusX);
						_DAC_ActivZoneY  = ((getPosATL _DAC_EnemyZone select 1) - _DAC_ZoneRadiusY);
						if((DAC_Com_Values select 1) > 1) then
						{
							DAC_InitText = (DAC_InitText + "|");
							if(DAC_Basic_Value != 10) then {hintSilent parseText (DAC_InitText + format["%1",DAC_Master_Init+1])};
						};
						_run = 7;
					};
				};
		case 7:	{
					_go = 1;
					while {_go > 0} do
					{
						if(_chnr > _checkCount) then
						{
							_run = 11;_go = 0;
						}
						else
						{
							if(count _DAC_PolyCount > 0) then
							{
								_pc = 0;_px = 0;_py = 0;_xd = 0;_yd = 0;
								while{_pc < count _DAC_PolyCount} do
								{
									if(_pc == 0) then
									{
										_px = ((_DAC_PolyCount select _pc) select 0);_xd = ((_DAC_PolyCount select _pc) select 0);
										_py = ((_DAC_PolyCount select _pc) select 1);_yd = ((_DAC_PolyCount select _pc) select 1);
									}
									else
									{
										if(((_DAC_PolyCount select _pc) select 0) < _px) then
										{
											_px = ((_DAC_PolyCount select _pc) select 0);
										}
										else
										{
											if(((_DAC_PolyCount select _pc) select 0) > _xd) then {_xd = ((_DAC_PolyCount select _pc) select 0)};
										};
										if(((_DAC_PolyCount select _pc) select 1) < _py) then
										{
											_py = ((_DAC_PolyCount select _pc) select 1);
										}
										else
										{
											if(((_DAC_PolyCount select _pc) select 1) > _yd) then {_yd = ((_DAC_PolyCount select _pc) select 1)};
										};
									};
									_pc = _pc + 1;
								};
								_polyResult = [[_px,_py],(_xd - _px),(_yd - _py),_DAC_PolyCount] call DAC_fFindPolyPos;
								_RandomX = (_polyResult Select 0);_RandomY = (_polyResult Select 1);
							}
							else
							{
								if((triggerarea _DAC_EnemyZone) select 3) then
								{
									_rx = random (_DAC_ZoneRadiusX * 2);_ry = random (_DAC_ZoneRadiusY * 2);
									_rsin = [(position _DAC_EnemyZone Select 0) + (Sin (((triggerarea _DAC_EnemyZone) select 2) + 90) * ((-_DAC_ZoneRadiusX) + _rx)),(position _DAC_EnemyZone Select 1) + (Cos (((triggerarea _DAC_EnemyZone) select 2) + 90) * ((-_DAC_ZoneRadiusX) + _rx))];
									_rcos = [(_rsin Select 0) + (Sin ((triggerarea _DAC_EnemyZone) select 2) * ((-_DAC_ZoneRadiusY) + _ry)),(_rsin Select 1) + (Cos ((triggerarea _DAC_EnemyZone) select 2) * ((-_DAC_ZoneRadiusY) + _ry))];
									_RandomX = (_rcos Select 0);_RandomY = (_rcos Select 1);
								}
								else
								{
									_ellipsResult = [_DAC_EnemyZone,_DAC_ZoneRadiusX,_DAC_ZoneRadiusY] call DAC_fFindEllipsPos;
									_RandomX = (_ellipsResult Select 0);_RandomY = (_ellipsResult Select 1);
								};
							};
							if(_checkMinH >= 0) then
							{
								if(surfaceIsWater [_RandomX, _RandomY]) then
								{
									_chnr = _chnr + 1;
								}
								else
								{
									_Null setpos [_RandomX,_RandomY,0];_DumyA setpos [_RandomX,_RandomY,0];
									_mm1 setmarkerposlocal [_RandomX,_RandomY];
									_mm1 setMarkerSizelocal [_CheckRadius2, _CheckRadius2];
									_mm5 setmarkerposlocal [_RandomX,_RandomY];
									if((getPosASL _Null select 2 > _checkminh) && (getPosASL _Null select 2 < _checkmaxh)) then
									{
										_run = 8;_go = 0;
									}
									else
									{
										_chnr = _chnr + 1;
									};
								};
							}
							else
							{
								if(!(surfaceIsWater [_RandomX, _RandomY])) then
								{
									_chnr = _chnr + 1;
								}
								else
								{
									_Null setpos [_RandomX,_RandomY,0];_DumyA setpos [_RandomX,_RandomY,0];
									_mm1 setmarkerposlocal [_RandomX,_RandomY];_mm1 setMarkerSizelocal [_CheckRadius2, _CheckRadius2];
									if((getPosASL _Null select 2 > _checkminh) && (getPosASL _Null select 2 < _checkmaxh)) then
									{
										_run = 8;_go = 0;
									}
									else
									{
										_chnr = _chnr + 1;
									};
								};
							};
						};
					};
				};
		case 8:	{
					_PosMin = (getPosASL _Null select 2);_PosMax = _PosMin;_nr = 0;_cv = 0;_mm2 setmarkerposlocal [_RandomX,_RandomY];
					_DumyA setpos [_RandomX,_RandomY,0];_DumyA setdir 0;_cr = _CheckRadius2;_go = 1;
					while {_go > 0} do
					{
						if(_nr > 360) then
						{
							_go = 0;_run = 9;
						}
						else
						{
							if(_cv == 0) then {_cv = 1;_cr = _CheckRadius2} else {_cv = 0;_cr = (_CheckRadius2 / 2)};
							_np = 	[
										((getPosATL _DumyA Select 0) + (Sin ((getdir _DumyA) + _nr) * _cr)),
										((getPosATL _DumyA Select 1) + (Cos ((getdir _DumyA) + _nr) * _cr)),0
									];
							_Null setpos _np;
							if(_checkMinH >= 0) then
							{
								if(getPosASL _Null select 2 > _PosMax) then {_PosMax = (getPosASL _Null select 2)} else {if(getPosASL _Null select 2 < _PosMin) then {_PosMin = (getPosASL _Null select 2)}};
							}
							else
							{
								if(!(surfaceIsWater (position _Null))) then {_PosMax = (_checkAreaH * 10);_nr = 360};
							};
							_mm2 setmarkerposlocal _np;_mm2 setmarkerdir _nr;
							_nr = _nr + _checkResol;
						};
					};
				};
		case 9:	{
					if((_PosMax - _PosMin) > _checkAreaH) then
					{
						_chnr = _chnr + 1;_run = 7;
					}
					else
					{
						if(_CheckRadius1 == 0) then
						{
							_run = 10;
						}
						else
						{
							_allObjects = nearestObjects [[_RandomX,_RandomY], [], _CheckRadius2];_relObjects = [];
							{
								if(((format["%1",typeOf _x]) != "LOGIC")
								&& ((format["%1",typeOf _x]) != "EmptyDetector")
								&& (speed _x == 0)) then
								{
									if(canmove _x) then
									{
										if(((boundingBox _x select 1) select 2) > _checkObjH1) then
										{
											_relObjects set [count _relObjects,_x];
										};
									}
									else
									{
										if(((position _x) select 2) > _checkObjH1) then
										{
											_relObjects set [count _relObjects,_x];
										};
									};
								};
							} 	foreach _allObjects;
							if(count _relObjects > 0) then
							{
								if(({((([_RandomX,_RandomY] distance _x) - ((((boundingBox _x select 1) select 0) + ((boundingBox _x select 1) select 1)) / 4)) < _CheckRadius1)} count _relObjects) > 0) then
								{
									_chnr = _chnr + 1;_run = 7;
								}
								else
								{
									_run = 10;
								};
							}
							else
							{
								_run = 10;
							};
						};
					};
				};
		case 10:{
					_allObjects = nearestObjects [[_RandomX,_RandomY], [], _CheckRadius2];_relObjects = [];
					{
						if(((format["%1",typeOf _x]) != "LOGIC")
						&& ((format["%1",typeOf _x]) != "EmptyDetector")
						&& (speed _x == 0)) then
						{
							if(canmove _x) then
							{
								if((((position _x) select 2) > _checkObjH2) && ((_x distance _DumyA) < _CheckRadius2)) then
								{
									_relObjects set [count _relObjects,_x];
								};
							}
							else
							{
								if((((boundingBox _x select 1) select 2) > _checkObjH2) && ((_x distance _DumyA) < _CheckRadius2)) then
								{
									_relObjects set [count _relObjects,_x];
								};
							};
						};
					} 	foreach _allObjects;
					if(count _relObjects > 0) then
					{
						_chnr = _chnr + 1;_run = 7;
					}
					else
					{
						if(_sdl == 1) then
						{
							{if(((call compile _x) distance _DumyA) < _sdv) then {_run = 7}}foreach _sdu;
						};
						if((_checkNear > 0) && (_run != 7)) then
						{
							_cd = 0;
							while {_cd < count _TempArray} do
							{
								_DPos = _TempArray select _cd;
								if(count _DPos > 2) then
								{
									_cd = _cd + 1;
								}
								else
								{
									_DumyB setpos [(_DPos select 0),(_DPos select 1),0];
									if((_DumyB distance _DumyA) < _checkNear) then
									{
										_cd = ((count _TempArray) + 1);
										_chnr = _chnr + 1;_run = 7;
									}
									else
									{
										_cd = _cd + 1;
									};
								};
							};
						};
						if(_run != 7) then
						{
							sleep DAC_WP_Speed;
							if(_DAC_Count_WP == 0) then
							{
								call compile format["DAC_WP_Pool_%1 set [count DAC_WP_Pool_%1,[0,0]]",_DAC_Typ_Nr select (_DAC_WP_Typ - 1)];
							}
							else
							{
								if(_wpnr < _DAC_Count_WP) then {call compile format["DAC_WP_Pool_%1 set [count DAC_WP_Pool_%1,[_RandomX,_RandomY]]",_DAC_Typ_Nr select (_DAC_WP_Typ - 1)]};
							};
							if(DAC_Marker > 0) then
							{
								if(((DAC_Marker_Val select 1) > 0) && (_DAC_Count_WP > 0)) then
								{
									if(_wpnr < _DAC_Count_WP) then
									{
										_m = format["m%1%2%3",_zonr,_wpnr,_DAC_WP_Typ];
										_ma = createmarkerLocal [_m, position _DumyA];
										_ma setMarkerShapeLocal "ELLIPSE";_ma setMarkerSizeLocal [_CheckRadius2, _CheckRadius2];
										_ma setMarkerColorLocal (_DAC_MColor select (_DAC_WP_Typ - 1));
										if((DAC_Marker_Val select 1) == 1) then {_MTemp set [count _MTemp,_ma]};
									};
								};
							};
							_TempArray set [count _TempArray,[_RandomX,_RandomY]];
							DAC_Master_Init = DAC_Master_Init + 1;
							publicvariable "DAC_Master_Init";
							_wpnr = _wpnr + 1;_chnr = 0;_minit = 0;
							if(_wpnr >= _DAC_Count_WP) then
							{
								_run = 12;
							}
							else
							{
								_run = 6;
							};
						};
					};
				};
		case 11:{
					hintc format["WP search was interrupted.\n\nZone %2 is not suitable for unit type (%1)",_DAC_Typ_Name select (_DAC_WP_Typ - 1),(_DAC_SelectZone select 0)];
					sleep 1;
					DAC_Basic_Value = 7;publicvariable "DAC_Basic_Value";
					{deletevehicle _x} foreach [_DumyA,_DumyB,_Null];
					deletemarkerlocal _mm1;deletemarkerlocal _mm2;deletemarkerlocal _mm5;
					_run = 0;
				};
		case 12:{
					_zonr = _zonr + 1;
					if((!(_DAC_WP_Typ == 4)) && (!(_DAC_WP_Typ == 5))) then
					{
						_run = 4;
					}
					else
					{
						//if(_DAC_WP_Typ == 4) then {DAC_WP_Pool_H = DAC_WP_Pool_H + [[getpos _DAC_EnemyZone,_DAC_ZoneRadiusX,_DAC_ZoneRadiusY,_countairwp]]};
						if(_DAC_WP_Typ == 4) then {DAC_WP_Pool_H set [count DAC_WP_Pool_H,[_DAC_EnemyZone,_DAC_ZoneRadiusX,_DAC_ZoneRadiusY,_countairwp]]};
						if(_DAC_WP_Typ == 5) then {DAC_WP_Pool_B set [count DAC_WP_Pool_B,[getPosATL _DAC_EnemyZone,_DAC_ZoneRadiusX,_DAC_ZoneRadiusY,0]]};
						_run = 4;
					};
				};
		case 13:{
					sleep 0.1;
					deletemarkerlocal _mm1;deletemarkerlocal _mm2;deletemarkerlocal _mm5;
					DAC_Init_WP = DAC_Init_WP - [_DAC_WP_Typ];
					{deletevehicle _x} foreach [_DumyA,_DumyB,_Null];
					if(count _MTemp > 0) then {[_MTemp]execVM "DAC\Marker\DAC_DeleteMarker.sqf"};
					if(!(_DAC_WP_Typ == 1)) then
					{
						_run = 0;
						DAC_Init_Counter set[(_DAC_WP_Typ - 1),1];
					}
					else
					{
						waituntil {(({_x == 1} count DAC_Init_Counter) == 4)};
						sleep 0.1;
						if((DAC_Com_Values select 1) == 2) then
						{
							_string = "<t color='#FFFF99' size='0.9' shadow='1' shadowColor='#333333' font='PuristaMedium' align='left'><br/><br/>";
							DAC_InitText = (DAC_InitText + _string + "=== Units are generated =======" + "<br/><br/></t>" + "<t color='#999966' size='0.9' shadow='1' shadowColor='#333333'>");
							if(DAC_Basic_Value != 10) then {hintSilent parseText DAC_InitText};
						};
						DAC_Init_Counter set[(_DAC_WP_Typ - 1),1];
						DAC_WPCount_Init = DAC_Master_Init;
						DAC_Master_Init = 0;DAC_List = List DAC_Trigger;
						if(count _this < 2) then
						{
							[1]execVM "DAC\Scripts\DAC_Create_Groups.sqf";
							execVM "DAC\Marker\DAC_LinkMarker.sqf";
							waituntil {((getdir DAC_StartDummy) > 170)};
						};
						_run = 0;
					};
				};
		Default	{};
	};
};