View difference between Paste ID: Vs9vr9An and e3xurPug
SHOW: | | - or go back to the newest paste.
1-
/*
1+
_root = configFile >> "cfgVehicles";
2-
* Pos_fnc.sqf
2+
_configs = [];
3-
* POS_FNC = compile preprocessFile "Pos_fnc.sqf";
3+
_parents = [];
4-
* Dimon UA Find position SCRIPT.
4+
_output = "";
5-
*FFA_ENEMYFORTFN=["WarfareBCamp","WarfareBDepot","Land_Fort_Watchtower","Land_fortified_nest_big","Land_fortified_nest_small"];
5+
for "_i" from 0 to (count _root - 1) do {
6-
* пример: 
6+
	_configs set [_i, configName(_root select _i)];
7-
	[[FFA_ENEMYFORTFN, 1000], [getpos player, [500,600]], 0, [200, 300], [10, 10], 0.3, false, [0, 15], [FFA_ENEMYFORTFN, 20], false] call POS_FNC;
7+
	_parents set [_i, configName inheritsFrom(_root select _i)];
8
};
9-
*	_minDistance = _this select 2;     			// минимально допустимая дистанция до ближайшего объекта. 
9+
_getChildren = 
10-
	если значение 0 то: 
10+
{
11-
	_minDistance = sizeOf typeOf vehicle;
11+
	private["_class", "_tab", "_i","_temp","_DisplayName","_side","_cargospace","_crew","_magazines","_weapons"];
12-
	_gradientRadius = sizeOf typeOf vehicle * _gradientRadius;
12+
	_class = _this select 0;
13-
	_xdistance = sizeOf typeOf vehicle * 1.1;
13+
	_tab = _this select 1;
14-
*/
14+
	for "_i" from 0 to (count _configs - 1) do 
15
	{
16-
#define cn !(isOnRoad _isFlat)
16+
17-
#define ucn (isOnRoad _isFlat)
17+
		if ((_parents select _i) == _class) then 
18-
#define tn (count (_isFlat nearRoads _xroads) == 0)
18+
19-
#define mn (count (nearestObjects [ _isFlat , _neartype, _xdistance]) == 0)
19+
			_abstract = if(getText((_root select _i) >> "model") != "")then{""}else{"*"};
20-
#define sn sizeOf typeOf _veh
20+
			// if (_abstract != "*") then {
21
22
23-
private["_type","_count","_marker","_radius","_minDistance","_minradius","_maxradius","_minGradient","_maxGradient","_gradientRadius","_onShore","_onroad", "_xroads","_neartype","_xdistance","_damage","_typecount","_unittype","_xradius","_xGradient", "_xcountx","_cnt","_isFlat","_poss","_veh"];
23+
			if (((_configs select _i) isKindOf "Man") || ((_configs select _i) isKindOf "landvehicle") || ((_configs select _i) isKindOf "air") ) then {
24
			_DisplayName = getText (_root>>(_configs select _i)>> "displayname"); 
25-
	_type = ((_this select 0) select 0);        // массив обьектов
25+
26-
	_count = ((_this select 0) select 1);       // кол-во обьектов
26+
			_side="unknown";
27-
	_marker = ((_this select 1) select 0);      // центр радиуса размещения обьекта
27+
			_crew="";
28-
	_radius1 = (((_this select 1) select 1) select 0);	// минимальный максимальный радиус размещения обьекта
28+
			_magazines="";
29-
	_radius2 = (((_this select 1) select 1) select 1); // максимальный радиус размещения обьекта
29+
			_weapons="";
30-
	_minDistance = _this select 2;     			// минимально допустимая дистанция до ближайшего объекта.
30+
			_cargospace=""; 
31-
	_minradius = ((_this select 3) select 0);  	// минимальный радиус поиска площадки вокруг обьекта
31+
32-
	_maxradius = ((_this select 3) select 1); 	// максимальный радиус поиска площадки вокруг обьекта
32+
			if ((getNumber (_root>>(_configs select _i)>> "side")) == 0) then {_side="east"};
33-
	_minGradient=((_this select 4) select 0); // минимальное значение максимального допустимого наклона (разница высот) площадки
33+
			if ((getNumber (_root>>(_configs select _i)>> "side")) == 1) then {_side="west"};
34-
	_maxGradient=((_this select 4) select 1); // максимальное значение максимального допустимого наклона (разница высот) площадки
34+
			if ((getNumber (_root>>(_configs select _i)>> "side")) == 2) then {_side="guerilla"};
35-
	_gradientRadius = _this select 5;  			// радиус окружности, в пределах которой учитывается _minGradient
35+
			if ((getNumber (_root>>(_configs select _i)>> "side")) == 3) then {_side="civilian"};
36-
	_onShore=_this select 6;          			// true если необходима вода в радиусе 25 метров
36+
37-
	_onroad=((_this select 7) select 0);  		// 0 если дороги не должно быть, 1 если все равно, 2 если дорога требуется.
37+
			if ((_configs select _i) isKindOf "Man") then 
38-
	_xroads=((_this select 7) select 1); 		// значение в метрах радиуса в котором ищется наличие дороги.
38+
39-
	_neartype=((_this select 8) select 0);     // массив обьектов возле которых при заданной дистанции  нельзя ставить обьект.
39+
				_cargospace="";
40-
	_xdistance=((_this select 8) select 1);     // дистанция до обьектов возле которых нельзя ставить нужный нам обьект(ы).
40+
				_crew="";
41-
	_damage = _this select 9;		// true если обьект разрушаем, false если обьект неразрушаем.
41+
				{_magazines=_magazines+", "+_x} forEach getArray (_root>>(_configs select _i)>> "magazines");
42
				{_weapons=_weapons+", "+_x} forEach getArray (_root>>(_configs select _i)>> "weapons");
43-
	_xradius = (_maxradius - _minradius) / 100;
43+
			}; 
44-
	_xGradient = (_maxGradient - _minGradient) / 100;
44+
45-
	_xradius1 = (_radius2 - _radius1) / 100;
45+
			if ((_configs select _i) isKindOf "landvehicle") then 
46-
	for "_cnt" from 0 to (_count-1) step 1 do
46+
47-
 	{
47+
				_magazines="";
48-
		_typecount=(count _type)-1;
48+
				_weapons="";
49-
		_unittype=_type select (round random _typecount);
49+
				_cargospace=format["%1",(getNumber (_root>>(_configs select _i)>> "transportsoldier"))];
50-
		_xcountx = 0;
50+
				{_crew=_crew+", "+_x} forEach getArray (_root>>(_configs select _i)>> "typicalcargo");
51-
		_isFlat = [];
51+
52-
		while {_xcountx < 100} do 
52+
53
			if ((_configs select _i) isKindOf "air") then 
54-
			_veh=createVehicle [_unittype, _marker, [], _radius1, "CAN_COLLIDE"];
54+
55-
			if (_minDistance == 0) then 
55+
				_magazines="";
56
				_weapons="";
57-
				_minDistance = sn;
57+
				_cargospace=format["%1",(getNumber (_root>>(_configs select _i)>> "transportsoldier"))];
58-
				_gradientRadius = sn * _gradientRadius;
58+
				{_crew=_crew+", "+_x} forEach getArray (_root>>(_configs select _i)>> "typicalcargo");
59-
				_xdistance = sn * 1.1;
59+
60-
			};			
60+
61-
			_isFlat = (position _veh) isFlatEmpty [_minDistance , _minradius, _minGradient, _gradientRadius, 0, _onShore, _veh];
61+
			diag_log format ["%1;%2;%3;%4;%5;%6;%7", (_configs select _i), _DisplayName,_side,_cargospace,_crew,_magazines,_weapons];
62-
			if (count _isFlat > 0) then 
62+
			// _output = _output+_abstract+(_configs select _i)+";"+_DisplayName+";"+_side+";"+_magazines+";"+_weapons+";"+_cargospace+";"+_crew+toString[10];
63
			};
64-
				_isFlat set [2, 0];
64+
65-
				if ( _onroad == 1) then  
65+
66-
				{
66+
			hint (_configs select _i);
67-
					if (mn) then
67+
			[_configs select _i, _tab + " "] call _getChildren;
68-
					{
68+
69-
						_poss = _isFlat;
69+
70-
						_poss set [2, 0];
70+
	};
71-
						_veh setPos _poss;		
71+
};
72-
						_veh setVectorUp (surfaceNormal (position _veh));
72+
["", ""] call _getChildren;
73-
						_veh allowDamage _damage;
73+
//copyToClipboard _output;
74-
						_xcountx = _xcountx + 100;
74+
hint "done";