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

private [
			"_SideID","_SideCP","_SideTX","_CampList","_CheckD","_ln","_wn","_zi","_ti",
			"_NextList","_checkwp","_CList","_TempCamp1","_TempPos1","_cid","_check",
			"_TestZone","_TempZone","_ZoneSide","_tempList","_log","_NextZone","_countF","_flag",
			"_TempNext","_wn","_s1","_mn","_entry","_find1","_find2","_find3","_find4","_find5","_find6","_find7"
		];

			_SideID = _this select 0;_SideCP = ["DAC_Spawn_CampsE","DAC_Spawn_CampsW"];
			_SideTX = ["East","West"];_CampList = format["%1",_SideCP select _SideID];_flag = _this select 1;

waituntil {(DAC_Basic_Value > 0)};
sleep 1;

_CheckD = "Logic" createvehiclelocal [0,0,0];_cid = 0;_check = 0;
_find1 = 0;_find2 = 0;_find3 = 0;_find4 = 0;_find5 = 0;_find6 = 0;_find7 = 0;_countF = 0;

if((count (call compile _CampList)) == 0) then
{
	_find1 = 99;
};

while {_find1 == 0} do
{
	while {_check == 0} do
	{
		if(_cid >= count DAC_Zones) then
		{
			_check = 2;
		}
		else
		{
			_TestZone = DAC_Zones select _cid;_zi = 0;
			_TempZone = call compile (_TestZone select 0);
			_ZoneSide = ((_TestZone select 8) select 0);
			
			switch (_ZoneSide) do
			{
				case 0:	{
							if(!(_ZoneSide == _SideID)) then {_cid = _cid + 1} else	{_check = 1};
						};
				case 1:	{
							if(!(_ZoneSide == _SideID)) then {_cid = _cid + 1} else	{_check = 1};
						};
				case 2:	{
							if(DAC_Res_Side == 0) then
							{
								if(_SideID == 1) then {_cid = _cid + 1} else {_check = 1};
							}
							else
							{
								if(_SideID == 0) then {_cid = _cid + 1} else {_check = 1};
							};
						};
				case 3:	{
							if(!(_ZoneSide == _SideID)) then {_cid = _cid + 1} else	{_check = 1};
						};
				Default {_check = 3};
			};
		};
	};
	sleep 0.2;
	switch (_check) do
	{
		case 3:	{
					player groupchat format["Error connect Camps: %1 is not a valid side value",_ZoneSide];
					_find1 = 2;
				};
		case 2:	{
					if(_countF == 0) then
					{
						//player groupchat format["No Camp on side %1 are connected.",_SideTX select _SideID];
					};
					_find1 = 3;
				};
		case 1:	{
					_tempList = List _TempZone;
					sleep 0.2;
					if(count _tempList == 0) then
					{
						_cid = _cid + 1;_check = 0;
					}
					else
					{
						_ln = 0;_wn = 0;_find2 = 0;
						while{_find2 == 0} do
						{
							if(_ln >= count _tempList) then
							{
								_cid = _cid + 1;_check = 0;_find2 = 1;
							}
							else
							{
								_log = _tempList select _ln;
								if(!(format["%1",typeof _log] == "Logic")) then
								{
									_ln = _ln + 1;
								}
								else
								{
									if((format["%1",(getdir _log)] in ["1","2","3","4","5"]) || ((count waypoints _log) < 2)) then
									{
										_ln = _ln + 1;
									}
									else
									{
										_find3 = 0;
										while {_find3 == 0} do
										{
											_checkwp = getwppos[_log,_wn];
											if((_checkwp select 0)+(_checkwp select 1) == 0) then
											{
												_ln = _ln + 1;_wn = 0;_find3 = 1;
											}
											else
											{
												_CheckD setpos _checkwp;_ti = 0;
												sleep 0.6;
												_find4 = 0;
												while {_find4 == 0} do
												{
													if(_ti >= count DAC_Zones) then
													{
														_ln = _ln + 1;_wn = 0;_find3 = 1;_find4 = 1;
													}
													else
													{
														_NextZone = DAC_Zones select _ti;
														_TempNext = call compile (_NextZone select 0);
														_NextList = List _TempNext;
														sleep 0.6;
														if(!(_CheckD in _NextList)) then
														{
															_ti = _ti + 1;
														}
														else
														{
															_find5 = 0;
															while {_find5 == 0} do
															{
																_checkwp = getwppos[_log,_wn+1];_sl = 0;
																if((_checkwp select 0)+(_checkwp select 1) == 0) then
																{
																	_ln = _ln + 1;_wn = 0;_find3 = 1;_find4 = 1;_find5 = 1;
																}
																else
																{
																	_CheckD setpos _checkwp;
																	sleep 0.6;
																	_find6 = 0;
																	while {_find6 == 0} do
																	{
																		if(_sl >= count DAC_Zones) then
																		{
																			_wn = _wn + 1;_ti = _ti + 1;_find6 = 1;
																		}
																		else
																		{
																			_CheckZone = call compile ((DAC_Zones select _sl) select 0);
																			_CList     = List _CheckZone;
																			_ZoneSide  = (((DAC_Zones select _sl) select 8) select 0);
																			sleep 0.6;
																			if(!(_CheckD in _CList)) then
																			{
																				_sl = _sl + 1;
																			}
																			else
																			{
																				if(_ZoneSide < 2) then
																				{
																					if(!(_ZoneSide == _SideID)) then
																					{
																						_sl = _sl + 1;
																					};
																				}
																				else
																				{
																					if(_ZoneSide > 2) then
																					{
																						_sl = _sl + 1;
																					}
																					else
																					{
																						if(DAC_Res_Side == 0) then
																						{
																							if(_SideID == 1) then
																							{
																								_sl = _sl + 1;
																							}
																							else
																							{
																								if(_SideID == 0) then
																								{
																									_sl = _sl + 1;
																								};
																							};
																						};
																					};
																				};
																				_mn = 0;_find7 = 0;
																				while {_find7 == 0} do
																				{
																					if(_mn >= count (call compile _CampList)) then
																					{
																						_sl = _sl + 1;_find7 = 1;
																					}
																					else
																					{
																						_TempCamp1 = ((call compile _CampList) select _mn);
																						_TempPos1 = _TempCamp1 select 0;
																						sleep 0.1;
																						if(!(format["%1",(_TempPos1 select 0) + (_TempPos1 select 1)] == format["%1",(getPosATL _TempNext select 0) + (getPosATL _TempNext select 1)])) then
																						{
																							_mn = _mn + 1;
																						}
																						else
																						{
																							_entry = count ((call compile _CampList select _mn) select 6);
																							if(!((getPosATL _CheckZone select 0) in (((call compile _CampList) select _mn) select 6))) then
																							{
																								(((call compile _CampList) select _mn) select 6) set [_entry,(getPosATL _CheckZone select 0)];
																								_countF = _countF + 1;
																								if((DAC_Com_Values select 0) > 0) then
																								{
																									player groupchat format["(%4) DAC connects [%1_Camp_%2] with [Zone_%3]",_SideTX select _SideID,round (getPosATL (((call compile _CampList) select _mn) select 1) select 0),round (getPosATL _CheckZone select 0),_countF];
																								};
																							};
																							_mn = _mn + 1;
																						};
																					};
																				};
																			};
																		};
																	};
																};
															};
														};
													};
												};
											};
										};
									};
								};
							};
						};
					};
				};
		Default {};
	};
sleep 0.1;
_check = 0;
};
sleep (random 1);
deletevehicle _CheckD;
if(_countF > 0) then {DAC_AI_Spawn set [2,1]};
sleep (random 1);
[_SideID,_flag]execVM "DAC\Marker\DAC_CampMarker.sqf";