|
|
Модератор форума: Slon |
Форум » РЕДАКТОР - ArmA 2 Operation Arrowhead » Скрипты » Рандомное расположение обьекта(ов) |
Рандомное расположение обьекта(ов) |
› Четверг
› 22.01.2015
› 12:51
› Сообщение #
Функция рандомного расположения обьекта(ов) в заданном радиусе.
В функции можно регулировать респ обьекта(ов) только на дороге, только не на дороге + задавать дистанцию до ближайшей дороги, если необходима вода в радиусе 25 метров. Делал для себя, каких знаний хватило, так что помощь в доработке приветствуется. В функции имеется момент, что при не нахождении нужной площадки респа обьект не появится. Это важный момент, если требуется поставить критически важный обьект. Так что с осторожностью используйте заданные значения, чтобы дать больше вариантов для поиска подходящей площадки для респа обьекта(ов). Как вариант делать проверку на наличие обьекта и ставить его другим способом Цитата Цитата * POS_FNC = compile preprocessFile "Pos_fnc.sqf"; *FFA_ENEMYFORTFN=["WarfareBCamp","WarfareBDepot","Land_Fort_Watchtower","Land_for tified_nest_big","Land_fortified_nest_small"]; * пример: [[FFA_ENEMYFORTFN, 20], [getpos player, [500,600]], 0, [200, 300], [6, 8], 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; функция POS_FNC Проверочный скрипт возможных мест респа обьекта(ов). скрипт миссия для проверки Добавлено (24.09.2014, 22:10) Пример: Создаем обьекты (100 штук) в радиусе 200 метров Цитата _count=100; for "_cnt" from 0 to (_count-1) step 1 do { _veh=createVehicle ["Sign_sphere100cm_EP1", getpos player, [], 200, "CAN_COLLIDE"]; _p = position _veh; call compile format [" _m%1 = createMarker[""mySpot%1"",[_p select 0,_p select 1]]; _m%1 setMarkerShape ""ICON""; _m%1 setMarkerType ""DOT""; _m%1 setmarkercolor ""colorred""; ",_cnt]; }; получаем вот такую картину запускаем поиск позиции через функцию: _onroad= 1; - все равно: есть дорога или нет + не в воде по умолчанию Цитата Pos_mark_fnc2 = compile preprocessFile "Pos_mark_fnc2.sqf"; _count=100; for "_cnt" from 0 to (_count-1) step 1 do { _veh=createVehicle ["Sign_sphere100cm_EP1", getpos player, [], 200, "CAN_COLLIDE"]; [_veh, getpos player, 3, [100, 100], [10, 10], 0.1, false, [1, 20, 40], [[],0], 1500, _cnt] call Pos_mark_fnc2; }; _onroad= 0; - дороги не должно быть _onroad= 2 - только на дороге _onroad= 3 - дороги не должно быть, но нужно разместить в пределах радиуса от дороги _onroad= 4 - дорога должна быть или допустимый радиус от дороги. _onroad= 5 - дороги не должно быть и мин радиус от дороги где не должно быть, + радиус от дороги где можно разместить Кол-во проверок можно задать, а можно и по-дефолту -1500. Есть нюанс: если функция не нашла нужную позицию то обьект останется там где он изначально реснулся. Для этого нужно сделать проверку стоит ли обьект там где мы хотим: Цитата _veh=createVehicle ["Sign_sphere100cm_EP1", getpos player, [], 200, "CAN_COLLIDE"]; [_veh, getpos player, 3, [100, 100], [10, 10], 0.1, false, [1, 20, 40], [[],0], 1500, _cnt] call Pos_mark_fnc2; if ( проверка на наши ключевые условия) then {}; где можно обьект удалить или запустить новый поиск позиции, например с другими параметрами. Так же проверочный скрипт для редактора: Pos_mark_fnc2 и миссия в архиве: Ссылка Добавлено (24.09.2014, 22:35) Добавлено (29.09.2014, 01:06) Цитата Pos_mark_fnc3 = compile preprocessFile "Pos_mark_fnc3.sqf"; _count=400; for "_cnt" from 0 to (_count-1) step 1 do { _veh=createVehicle ["Sign_sphere100cm_EP1", getpos player, [], 50, "CAN_COLLIDE"]; _newPos=[getpos player, [0,400], 10, [100, 100], [10, 10], 0.1, [0,false], [0], 20, 60], [["House","Sign_sphere100cm_EP1"],10],1500,_cnt] call Pos_mark_fnc3; _veh setpos _newPos; }; _newPos=[getpos player, [0,400], 10, [100, 100], [10, 10], 0.1, [0,false], [0, 20, 60], [["House","Sign_sphere100cm_EP1"],10],1500,_cnt] call Pos_mark_fnc3; _newPos=[getpos player, [0,400], 10, [100, 100], [10, 10], 0.1, [0,false], [1, 20, 60], [["House","Sign_sphere100cm_EP1"],10],1500,_cnt] call Pos_mark_fnc3; _newPos=[getpos player, [0,400], 10, [100, 100], [10, 10], 0.1, [0,false], [2, 20, 60], [["House","Sign_sphere100cm_EP1"],10],1500,_cnt] call Pos_mark_fnc3; _newPos=[getpos player, [0,400], 10, [100, 100], [10, 10], 0.1, [0,false], [3, 20, 60], [["House","Sign_sphere100cm_EP1"],10],1500,_cnt] call Pos_mark_fnc3; _newPos=[getpos player, [0,400], 10, [100, 100], [10, 10], 0.1, [0,false], [4, 20, 60], [["House","Sign_sphere100cm_EP1"],10],1500,_cnt] call Pos_mark_fnc3; [spoiler=дорога + возле дороги][/spoiler] _newPos=[getpos player, [0,400], 10, [100, 100], [10, 10], 0.1, [0,false], [5, 20, 60], [["House","Sign_sphere100cm_EP1"],10],1500,_cnt] call Pos_mark_fnc3; _newPos=[getpos player, [0,400], 10, [100, 100], [10, 10], 0.1, [0,false], [6, 20, 60], [["House","Sign_sphere100cm_EP1"],10],1500,_cnt] call Pos_mark_fnc3; _newPos=[getpos player, [0,400], 10, [100, 100], [10, 10], 0.1, [2,false], [1, 20, 60], [["House","Sign_sphere100cm_EP1"],10],1500,_cnt] call Pos_mark_fnc3; _newPos=[getpos player, [0,400], 1, [100, 100], [10, 10], 0.1, [0,true], [1, 20, 60], [["House","Sign_sphere100cm_EP1"],10],1500,_cnt] call Pos_mark_fnc3; POS_FNC3 Pos_mark_fnc3 Добавлено (30.12.2014, 00:56) Код while {_xcountx < _xc} do { on Код for "_xcountx" from 1 to _xc step 1 do { github Добавлено (22.01.2015, 12:51) |
| |||
| |||
Чат сайта |