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"; |