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

private [
			"_thisZone","_KiZone","_ZonePos","_mxvalue","_myvalue","_s","_start","_isserv",
			"_ZoneMode","_GroupSol","_GroupVeh","_GroupTan","_GroupAir","_ZoneSide","_zPoly",
			"_ZoneRadius","_randomcount","_typ","_zs","_ma","_cu","_marker","_ac","_zoneLoc"
		];

			_thisZone = _this select 0;_cu = 0;_mxvalue = 0;_myvalue = 0;_s = 0;_marker = [];_typ = 0;_zoneLoc = objNull;
			_ZoneMode = 0;_GroupSol = [];_GroupVeh = [];_GroupTan = [];_GroupAir = [];_ZoneSide = 0;_zoneValues = [];
			_mxvalue = 0;_myvalue = 0;_ac = 0;_randomcount = 0;_zs = "";_ma = objNull;_KiZone = objNull;_zPoly = [];

if((DAC_Com_Values select 1) == 1) then
{
	_text1 = "<t color='#FFFF66' size='1.0' shadow='1' shadowColor='#333333' align='left'>DAC v3.1b</t>";
	_text2 = "<t color='#CCCCCC' size='0.9' shadow='1' shadowColor='#666666' align='left'> is initialized ...</t><br/>";
	DAC_InitText = (_text1 + _text2);
	hintSilent parseText DAC_InitText;
};
			
if((typeName _thisZone) != "STRING") then
{
	hintc format["The name of a zone is not correct !\n\nThe Name of a zone in the Script call must be a string."];
	DAC_Basic_Value = 8;publicvariable "DAC_Basic_Value";
	if(time > 0) exitwith {};
}
else
{
	if((format["%1",(typeName (call compile _thisZone))] == "scalar") || (format["%1",(call compile _thisZone)] == "ANY")) then
	{
		hintc format["The name of a zone is not correct !\n\nEither in the Script call,\nor the name of one Trigger\nis not right.\n\n%1",_thisZone];
		DAC_Basic_Value = 8;publicvariable "DAC_Basic_Value";
		if(time > 0) exitwith {};
	}
	else
	{
		_KiZone = call compile _thisZone;
		if(_thisZone in DAC_CheckZones) then
		{
			hintc format["The name of a zone is not correct !\n\nThere are at least two zones, which contain the same zone name."];
			DAC_Basic_Value = 8;publicvariable "DAC_Basic_Value";
			if(time > 0) exitwith {};
		}
		else
		{
			DAC_CheckZones set [count DAC_CheckZones,_thisZone];
			if	(((count (_this select 2) + count (_this select 3) + count (_this select 4) + count (_this select 5)) == 0) ||
				((count (_this select 1)) < 3) || ((count (_this select 1)) > 4) ||
				(((count (_this select 2)) < 4) && (!((count (_this select 2)) <= 1))) || ((count (_this select 2)) > 5) ||
				(((count (_this select 3)) < 4) && (!((count (_this select 3)) <= 1))) || ((count (_this select 3)) > 5) ||
				(((count (_this select 4)) < 4) && (!((count (_this select 4)) <= 1))) || ((count (_this select 4)) > 5) ||
				(((count (_this select 5)) < 3) && (!((count (_this select 5)) <= 1))) || ((count (_this select 5)) == 5) ||
				((count (_this select 5)) > 7) || ((count (_this select 6)) < 4) || ((count (_this select 6)) > 5)) then
			{
				hintc format[
								"Attention, in at least one zone\nthere is a faulty one script call.\n\nEither parameters were handed over\nnot enough, or too many parameters\nwere handed over...\n\n%1\n%2\n%3\n%4\n%5\n%6\n\nName of the faulty zone: = %7",
								_this select 1,_this select 2,_this select 3,_this select 4,_this select 5,_this select 6,_thisZone
							];
				DAC_Basic_Value = 2;publicvariable "DAC_Basic_Value";
				if(time > 0) exitwith {};
			}
			else
			{
				if(((_this select 6) select 0) > 3) then
				{
					hintc format["Error: DAC_Create_Zone > No valid side value > Zone: %1",_thisZone];
				}
				else
				{
					_zPoly = [_KiZone] call DAC_fFindPolyLog;
					if(count _zPoly == 0) then
					{
						_typ = ((_this select 6) select 0);_mxvalue = ((triggerArea _KiZone) select 0);_myvalue = ((triggerArea _KiZone) select 1);
						if(((count (_this select 2)) < 2) && ((count (_this select 3)) < 2) && ((count (_this select 4)) < 2) && ((count (_this select 5)) < 2)) then {_typ = 4};
						[
							_KiZone,_typ,
							_mxvalue,
							_myvalue,
							(_this select 6)
						]	execVM "DAC\Marker\DAC_ZoneMarker.sqf";
					}
					else
					{
						_typ = ((_this select 6) select 0);_mxvalue = ((triggerArea _KiZone) select 0);_myvalue = ((triggerArea _KiZone) select 1);
						if(((count (_this select 2)) < 2) && ((count (_this select 3)) < 2) && ((count (_this select 4)) < 2) && ((count (_this select 5)) < 2)) then {_typ = 4};
						[
							_KiZone,_typ,
							0,
							_zPoly,
							(_this select 6)
						]	execVM "DAC\Marker\DAC_ZoneMarker.sqf";
					};
					sleep (random 0.3);
					waituntil {((format["%1",isnull DAC_StartDummy] != "BOOL") && ((getPosATL DAC_StartDummy select 0) > 1))};
				};
			};
		};
		
		_ZoneMode 	= _this select 1;_GroupSol = _this select 2;
		_GroupVeh 	= _this select 3;_GroupTan = _this select 4;
		_GroupAir 	= _this select 5;_ZoneSide = _this select 6;
		_mxvalue 	= ((triggerArea _KiZone) select 0);_myvalue = ((triggerArea _KiZone) select 1);_ac = _ZoneMode select 1;_randomcount = random 10000;
		
		_zoneValues =	[
							[1,[(position _KiZone select 0),(position _KiZone select 1)]],
							[2,[_mxvalue,_myvalue]],
							[3,[(_ZoneSide select 1),(_ZoneSide select 2)]]
						];
	
		DAC_Init_Zone set [count DAC_Init_Zone,_randomcount];
		sleep 0.01;
		while {_cu < count _zoneValues} do
		{
			_zs = format["%1_%2",_thisZone,_cu];
			_ma = createmarkerlocal [_zs, ((_zoneValues select _cu) select 1)];
			_ma setMarkerShapelocal "RECTANGLE";
			_ma setMarkerSizelocal [6,6];
			_ma setMarkerColorlocal "ColorBlack";
			_ma setMarkerAlphaLocal 0; 
			if(_ac == 1) then {_ma setMarkerSizelocal [4,4]};
			_marker set [count _marker,_ma];
			_cu = _cu + 1;
		};

		DAC_Zones set [count DAC_Zones,[_thisZone,_mxvalue,_myvalue,_ZoneMode,_GroupSol,_GroupVeh,_GroupTan,_GroupAir,_ZoneSide,_marker,_zPoly]];
		DAC_Init_Zone = DAC_Init_Zone - [_randomcount];

		_zoneLoc = createLocation ["Name", position _KiZone, ((triggerArea _KiZone) select 0), ((triggerArea _KiZone) select 1)];
		_zoneLoc setDirection ((triggerArea _KiZone) select 2);
		_zoneLoc setRectangular ((triggerArea _KiZone) select 3);
		_zoneLoc attachObject _KiZone;
		_zoneLoc setVariable ["DAC_Zone", _KiZone];
		_zoneLoc setVariable ["DAC_Type", "NewZone"];
		_KiZone setVariable ["DAC_ZoneLoc", _zoneLoc];

		if(DAC_StartDummy in DAC_Init_Zone) then {DAC_Init_Zone = DAC_Init_Zone - [DAC_StartDummy]};
		call compile format["z_%1 = 0",_thisZone];
		waituntil{DAC_Basic_Value == 1};
		sleep (5 + (random 1));
		if((DAC_Com_Values select 0) > 0) then {if((_ZoneMode select 1) == 1) then {DAC_Inactive_Zones set [count DAC_Inactive_Zones,_KiZone];player groupchat format["Zone %1 is deactivated",_thisZone]}};
	};
};