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

private [
			"_group","_wppos","_newpos","_newbeh","_side","_leader","_md","_np","_wait","_go","_ison",
			"_m","_ma","_na","_r","_d","_n","_check","_rf","_sz","_t","_v","_l","_s","_pos","_rn","_run"
		];
		
_run = 0;_go = true;_ison = 0;_pos = [];_newbeh = 0;_md = "";_np = "";
_group = _this select 0;_side = _this select 1;_leader = leader _group;
_check = true;_wppos = [0,0];_newpos = [0,0];_m = "";_ma = "";_na = "";
_rf = ((DAC_Marker_Val select 6) select 1);_sz = ((DAC_Marker_Val select 7) select 0);
_t = 0;_v = 0;_rn = _rf;_wait = time + 5;_r = 0;_d = 0;_n = 0;_l = "";_s = 0;

if(isDedicated) exitwith {};

waituntil {(getdir DAC_StartDummy) > 170};
sleep 3;

{[_x,(_this select 0)] spawn DAC_fLeaderMarker} foreach units (_this select 0);

while {_go} do
{
	switch (_run) do
	{
		case 0:	{
					while {_run == 0} do
					{
						sleep (1 + random 1);
						if((DAC_Marker > 0) && (((DAC_Marker_Val select 7) select 0) > 0) && (((DAC_Marker_Val select 7) select 1) > 0)) then {_run = 1};
					};
				};
		case 1:	{
					if(({alive _x} count units _group) > 0) then
					{
						_group = _this select 0;_side = _this select 1;_leader = leader _group;
						_check = true;_wppos = [0,0];_newpos = [0,0];_t = 0;_v = 0;_rn = _rf;_wait = time + 5;
						_rf = ((DAC_Marker_Val select 6) select 1);_sz = ((DAC_Marker_Val select 7) select 0);
						_m  = format["_mwp%1%2",_group,(round (random 1000))];_ma = createmarkerlocal [_m, position (units _group select 0)];
						_ma setMarkerShapelocal "RECTANGLE";_ma setMarkerSizelocal [1,1];_ma setMarkerColorlocal ((DAC_Marker_Val select 14) select 6);
						_l  = format["_nwp%1%2",_group,(round (random 1000))];_na = createmarkerlocal [_l, position (units _group select 0)];_ison = 0;
						_na setMarkerShapelocal "ELLIPSE";_na setMarkerSizelocal [((DAC_Marker_Val select 7) select 1),((DAC_Marker_Val select 7) select 1)];_na setMarkerColorlocal ((DAC_Marker_Val select 14) select 5);
						while {_check} do
						{
							sleep (_rn);
							if(format["%1",_group getVariable "dacData"] != "<NULL>") then
							{
								_wppos = ((_group getVariable "dacData") select 1);_newbeh = ((_group getVariable "dacData") select 0);
								_na setmarkerposlocal _wppos;_t = 0;_v = 0;
								_na setMarkerSizelocal [((DAC_Marker_Val select 7) select 1),((DAC_Marker_Val select 7) select 1)];_rn = _rf;
								switch (_newbeh) do
								{
									case 0:	{
												_ma setMarkerColorlocal ((DAC_Marker_Val select 14) select 5);
												_na setMarkerColorlocal ((DAC_Marker_Val select 14) select 6);
											};
									case 1:	{
												_ma setMarkerColorlocal "ColorBlue";
												_na setMarkerColorlocal "ColorBlue";
											};
									case 2:	{
												_ma setMarkerColorlocal "ColorRed";
												_na setMarkerColorlocal "ColorRed";
											};
									case 3:	{
												_ma setMarkerColorlocal "ColorYellow";
												_na setMarkerColorlocal "ColorYellow";
											};
									Default {};
								};
								if(({alive _x} count units _group) == 0) then
								{
									deletemarkerlocal _na;deletemarkerlocal _ma;_check = false;_go = false;
									sleep 1;
								}
								else
								{
									if(!(_group in DAC_All_Groups)) then
									{
										deletemarkerlocal _na;deletemarkerlocal _ma;_check = false;_run = 0;_go = false;
									}
									else
									{
										if((DAC_Marker == 0) || ((((DAC_Marker_Val select 7) select 0) == 0) && (((DAC_Marker_Val select 7) select 1) == 0))) then
										{
											deletemarkerlocal _na;deletemarkerlocal _ma;_check = false;_run = 0;
										}
										else
										{
											if((alive _leader) && (_group == group _leader)) then
											{
												_d = ((_wppos distance [(position _leader select 0),(position _leader select 1),0]) / 2);
												_r = ((_wppos select 0) - (position _leader select 0)) atan2 ((_wppos select 1) - (position _leader select 1));
												_n = [(position _leader select 0) + (Sin (_r) * _d),(position _leader select 1) + (Cos (_r) * _d),0];
												_ma setMarkerSizelocal [_d,_sz];_ma setMarkerPoslocal _n;_ma setMarkerDirlocal (_r + 90);
											}
											else
											{
												{_x setMarkerColorlocal "ColorWhite"} foreach [_ma,_na];
												waituntil {((DAC_Marker == 0) || (({alive _x} count units _group) == 0) || ((!(leader _group == _leader)) || ((format["%1",group _leader] == "<NULL-group>") && (({alive _x} count units _group) == 0))))};
												if(DAC_Marker == 0) then
												{
													deletemarkerlocal _na;deletemarkerlocal _ma;_check = false;_run = 0;
												}
												else
												{
													if((({alive _x} count units _group) == 0) || ((({alive _x} count units _group) == 0) && (format["%1",group _leader] == "<NULL-group>"))) then
													{
														deletemarkerlocal _na;deletemarkerlocal _ma;_check = false;_go = false;
														sleep 1;
													}
													else
													{
														_leader = leader _group;_wppos = [0,0];
														sleep 1;
													};
												};
											};
										};
									};
								};
							};
						};
					}
					else
					{
						_check = false;_go = false;
					};
				};
	};
};