SHOW:
|
|
- or go back to the newest paste.
1 | /* | |
2 | * Pos_fnc.sqf | |
3 | * POS_FNC = compile preprocessFile "Pos_fnc.sqf"; | |
4 | * Dimon UA Find position SCRIPT. | |
5 | *FFA_ENEMYFORTFN=["WarfareBCamp","WarfareBDepot","Land_Fort_Watchtower","Land_fortified_nest_big","Land_fortified_nest_small"]; | |
6 | * пример: | |
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; | |
8 | ||
9 | * _minDistance = _this select 2; // минимально допустимая дистанция до ближайшего объекта. | |
10 | если значение 0 то: | |
11 | _minDistance = sizeOf typeOf vehicle; | |
12 | _gradientRadius = sizeOf typeOf vehicle * _gradientRadius; | |
13 | _xdistance = sizeOf typeOf vehicle * 1.1; | |
14 | */ | |
15 | ||
16 | #define cn !(isOnRoad _isFlat) | |
17 | #define ucn (isOnRoad _isFlat) | |
18 | #define tn (count (_isFlat nearRoads _xroads) == 0) | |
19 | #define mn (count (nearestObjects [ _isFlat , _neartype, _xdistance]) == 0) | |
20 | #define sn sizeOf typeOf _veh | |
21 | ||
22 | ||
23 | private["_type","_count","_marker","_radius","_minDistance","_minradius","_maxradius","_minGradient","_maxGradient","_gradientRadius","_onWater","_onShore","_onroad", | |
24 | "_xroads","_neartype","_xdistance","_damage","_typecount","_unittype","_xradius","_xGradient", | |
25 | "_xcountx","_cnt","_isFlat","_poss","_veh"]; | |
26 | ||
27 | _type = ((_this select 0) select 0); // массив обьектов | |
28 | _count = ((_this select 0) select 1); // кол-во обьектов | |
29 | _marker = ((_this select 1) select 0); // центр радиуса размещения обьекта | |
30 | _radius1 = (((_this select 1) select 1) select 0); // радиус размещения обьекта | |
31 | _radius2 = (((_this select 1) select 1) select 1); | |
32 | - | _minDistance = _this select 2; // минимально допустимая дистанция до ближайшего объекта. если значение 0 то _minDistance = sizeOf typeOf vehicle. |
32 | + | _minDistance = _this select 2; // минимально допустимая дистанция до ближайшего объекта. |
33 | _minradius = ((_this select 3) select 0); // минимальный радиус поиска площадки вокруг обьекта | |
34 | _maxradius = ((_this select 3) select 1); // максимальный радиус поиска площадки вокруг обьекта | |
35 | - | _minGradient=((_this select 4) select 0); // минимальное значение максимального допустимого наклона (разница высот) площадки |
35 | + | _minGradient=((_this select 4) select 0); // минимальное значение максимального допустимого наклона (разница высот) площадки |
36 | - | _maxGradient=((_this select 4) select 1); // максимальное значение максимального допустимого наклона (разница высот) площадки |
36 | + | _maxGradient=((_this select 4) select 1); // максимальное значение максимального допустимого наклона (разница высот) площадки |
37 | _gradientRadius = _this select 5; // радиус окружности, в пределах которой учитывается _minGradient | |
38 | _onShore=_this select 6; // true если необходима вода в радиусе 25 метров | |
39 | _onroad=((_this select 7) select 0); // 0 если дороги не должно быть, 1 если все равно, 2 если дорога требуется. | |
40 | _xroads=((_this select 7) select 1); // значение в метрах радиуса в котором ищется наличие дороги. | |
41 | - | _neartype=((_this select 8) select 0); // массив обьектов возле которых при заданной дистанции от обьекта нельзя ставить обьект. |
41 | + | _neartype=((_this select 8) select 0); // массив обьектов возле которых при заданной дистанции нельзя ставить обьект. |
42 | _xdistance=((_this select 8) select 1); // дистанция до обьектов возле которых нельзя ставить нужный нам обьект(ы). | |
43 | - | _damage = _this select 9; // true если обьект разрушаем, false если обьект неразрушаем. |
43 | + | _damage = _this select 9; // true если обьект разрушаем, false если обьект неразрушаем. |
44 | ||
45 | _xradius = (_maxradius - _minradius) / 100; | |
46 | _xGradient = (_maxGradient - _minGradient) / 100; | |
47 | ||
48 | for "_cnt" from 0 to (_count-1) step 1 do | |
49 | { | |
50 | _typecount=(count _type)-1; | |
51 | _unittype=_type select (round random _typecount); | |
52 | _xcountx = 0; | |
53 | _isFlat = []; | |
54 | ||
55 | _veh=createVehicle [_unittype, _marker, [], _radius1, "CAN_COLLIDE"]; | |
56 | if (_minDistance == 0) then | |
57 | { | |
58 | _minDistance = sn * 1; | |
59 | _gradientRadius = sn * _gradientRadius; | |
60 | _xdistance = sn * 1.1; | |
61 | }; | |
62 | _isFlat = (position _veh) isFlatEmpty [_minDistance , _minradius, _minGradient, _gradientRadius, 0, _onShore, _veh]; | |
63 | if (count _isFlat > 0) then | |
64 | { | |
65 | _isFlat set [2, 0]; | |
66 | if ( _onroad == 1) then | |
67 | { | |
68 | if (mn) then | |
69 | { | |
70 | _poss = _isFlat; | |
71 | _poss set [2, 0]; | |
72 | call compile format [" | |
73 | _m%1 = createMarker[""mySpot%1"",[_poss select 0,_poss select 1]]; | |
74 | _m%1 setMarkerShape ""ICON""; | |
75 | _m%1 setMarkerType ""DOT""; | |
76 | _m%1 setmarkercolor ""colorred""; | |
77 | ",_cnt]; | |
78 | _veh setPos _poss; | |
79 | _veh setVectorUp (surfaceNormal (position _veh)); | |
80 | _veh allowDamage _damage; | |
81 | } else { | |
82 | deletevehicle _veh; | |
83 | _isFlat = []; | |
84 | }; | |
85 | } else { | |
86 | if ( _onroad == 0) then | |
87 | { | |
88 | if ( cn && tn && mn) then | |
89 | { | |
90 | _poss = _isFlat; | |
91 | ||
92 | _poss set [2, 0]; | |
93 | call compile format [" | |
94 | _m%1 = createMarker[""mySpot%1"",[_poss select 0,_poss select 1]]; | |
95 | _m%1 setMarkerShape ""ICON""; | |
96 | _m%1 setMarkerType ""DOT""; | |
97 | _m%1 setmarkercolor ""colorred""; | |
98 | ",_cnt]; | |
99 | _veh setPos _poss; | |
100 | _veh setVectorUp (surfaceNormal (position _veh)); | |
101 | _veh allowDamage _damage; | |
102 | } else { | |
103 | deletevehicle _veh; | |
104 | _isFlat = []; | |
105 | }; | |
106 | } else { | |
107 | if ( ucn && mn) then | |
108 | { | |
109 | _poss = _isFlat; | |
110 | ||
111 | _poss set [2, 0]; | |
112 | call compile format [" | |
113 | _m%1 = createMarker[""mySpot%1"",[_poss select 0,_poss select 1]]; | |
114 | _m%1 setMarkerShape ""ICON""; | |
115 | _m%1 setMarkerType ""DOT""; | |
116 | _m%1 setmarkercolor ""colorred""; | |
117 | ",_cnt]; | |
118 | _veh setPos _poss; | |
119 | _veh setVectorUp (surfaceNormal (position _veh)); | |
120 | _veh allowDamage _damage; | |
121 | } else { | |
122 | deletevehicle _veh; | |
123 | _isFlat = []; | |
124 | }; | |
125 | }; | |
126 | }; | |
127 | } else { | |
128 | if (count _isFlat == 0) then { deletevehicle _veh }; | |
129 | _isFlat = []; | |
130 | }; | |
131 | ||
132 | }; |