Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Pos_fnc.sqf
- * POS_FNC = compile preprocessFile "Pos_fnc.sqf";
- * Dimon UA Find position SCRIPT.
- *FFA_ENEMYFORTFN=["WarfareBCamp","WarfareBDepot","Land_Fort_Watchtower","Land_fortified_nest_big","Land_fortified_nest_small"];
- * пример:
- [[FFA_ENEMYFORTFN, 1000], [getpos player, [500,600]], 0, [200, 300], [10, 10], 0.3, false, [0, 15], [FFA_ENEMYFORTFN, 20], false] call POS_FNC;
- * _minDistance = _this select 2; // минимально допустимая дистанция до ближайшего объекта.
- если значение 0 то:
- _minDistance = sizeOf typeOf vehicle;
- _gradientRadius = sizeOf typeOf vehicle * _gradientRadius;
- _xdistance = sizeOf typeOf vehicle * 1.1;
- */
- #define cn !(isOnRoad _isFlat)
- #define ucn (isOnRoad _isFlat)
- #define tn (count (_isFlat nearRoads _xroads) == 0)
- #define mn (count (nearestObjects [ _isFlat , _neartype, _xdistance]) == 0)
- #define sn sizeOf typeOf _veh
- private["_type","_count","_marker","_radius","_minDistance","_minradius","_maxradius","_minGradient","_maxGradient","_gradientRadius","_onWater","_onShore","_onroad",
- "_xroads","_neartype","_xdistance","_damage","_typecount","_unittype","_xradius","_xGradient",
- "_xcountx","_cnt","_isFlat","_poss","_veh"];
- _type = ((_this select 0) select 0); // массив обьектов
- _count = ((_this select 0) select 1); // кол-во обьектов
- _marker = ((_this select 1) select 0); // центр радиуса размещения обьекта
- _radius1 = (((_this select 1) select 1) select 0); // радиус размещения обьекта
- _radius2 = (((_this select 1) select 1) select 1);
- _minDistance = _this select 2; // минимально допустимая дистанция до ближайшего объекта.
- _minradius = ((_this select 3) select 0); // минимальный радиус поиска площадки вокруг обьекта
- _maxradius = ((_this select 3) select 1); // максимальный радиус поиска площадки вокруг обьекта
- _minGradient=((_this select 4) select 0); // минимальное значение максимального допустимого наклона (разница высот) площадки
- _maxGradient=((_this select 4) select 1); // максимальное значение максимального допустимого наклона (разница высот) площадки
- _gradientRadius = _this select 5; // радиус окружности, в пределах которой учитывается _minGradient
- _onShore=_this select 6; // true если необходима вода в радиусе 25 метров
- _onroad=((_this select 7) select 0); // 0 если дороги не должно быть, 1 если все равно, 2 если дорога требуется.
- _xroads=((_this select 7) select 1); // значение в метрах радиуса в котором ищется наличие дороги.
- _neartype=((_this select 8) select 0); // массив обьектов возле которых при заданной дистанции нельзя ставить обьект.
- _xdistance=((_this select 8) select 1); // дистанция до обьектов возле которых нельзя ставить нужный нам обьект(ы).
- _damage = _this select 9; // true если обьект разрушаем, false если обьект неразрушаем.
- _xradius = (_maxradius - _minradius) / 100;
- _xGradient = (_maxGradient - _minGradient) / 100;
- for "_cnt" from 0 to (_count-1) step 1 do
- {
- _typecount=(count _type)-1;
- _unittype=_type select (round random _typecount);
- _xcountx = 0;
- _isFlat = [];
- _veh=createVehicle [_unittype, _marker, [], _radius1, "CAN_COLLIDE"];
- if (_minDistance == 0) then
- {
- _minDistance = sn * 1;
- _gradientRadius = sn * _gradientRadius;
- _xdistance = sn * 1.1;
- };
- _isFlat = (position _veh) isFlatEmpty [_minDistance , _minradius, _minGradient, _gradientRadius, 0, _onShore, _veh];
- if (count _isFlat > 0) then
- {
- _isFlat set [2, 0];
- if ( _onroad == 1) then
- {
- if (mn) then
- {
- _poss = _isFlat;
- _poss set [2, 0];
- call compile format ["
- _m%1 = createMarker[""mySpot%1"",[_poss select 0,_poss select 1]];
- _m%1 setMarkerShape ""ICON"";
- _m%1 setMarkerType ""DOT"";
- _m%1 setmarkercolor ""colorred"";
- ",_cnt];
- _veh setPos _poss;
- _veh setVectorUp (surfaceNormal (position _veh));
- _veh allowDamage _damage;
- } else {
- deletevehicle _veh;
- _isFlat = [];
- };
- } else {
- if ( _onroad == 0) then
- {
- if ( cn && tn && mn) then
- {
- _poss = _isFlat;
- _poss set [2, 0];
- call compile format ["
- _m%1 = createMarker[""mySpot%1"",[_poss select 0,_poss select 1]];
- _m%1 setMarkerShape ""ICON"";
- _m%1 setMarkerType ""DOT"";
- _m%1 setmarkercolor ""colorred"";
- ",_cnt];
- _veh setPos _poss;
- _veh setVectorUp (surfaceNormal (position _veh));
- _veh allowDamage _damage;
- } else {
- deletevehicle _veh;
- _isFlat = [];
- };
- } else {
- if ( ucn && mn) then
- {
- _poss = _isFlat;
- _poss set [2, 0];
- call compile format ["
- _m%1 = createMarker[""mySpot%1"",[_poss select 0,_poss select 1]];
- _m%1 setMarkerShape ""ICON"";
- _m%1 setMarkerType ""DOT"";
- _m%1 setmarkercolor ""colorred"";
- ",_cnt];
- _veh setPos _poss;
- _veh setVectorUp (surfaceNormal (position _veh));
- _veh allowDamage _damage;
- } else {
- deletevehicle _veh;
- _isFlat = [];
- };
- };
- };
- } else {
- if (count _isFlat == 0) then { deletevehicle _veh };
- _isFlat = [];
- };
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement