Перейти к содержимому


Фотография

BIS_fnc_findSafePos


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 23

#1 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 11 October 2018 - 22:01

Всем добрый вечер.

Товарищи подскажите пожалуйста - следующий расклад так сказать: 

Пишу:

 

///Находим локации на "Стратисе" - там их будет 7 шт.

 

_locations = nearestLocations [getPos Player,["nameCity","nameVillage"],10000];
_count_locations = count _locations;
hintSilent str _count_locations;

 

///Далее нужно к каждой найденной локации прикрутить вот это:

 

_pos = [ ЛОКАЦИЯ!!!, 1, 150, 3, 0, 20, 0]

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

BIS_fnc_findSafePos;

 

Вопрос: как это сделать?


  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1799 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 11 October 2018 - 22:06

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


  • 0

#3 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 11 October 2018 - 22:57

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

Видимо так?
 
_locations = nearestLocations [getPos Player,["nameCity","nameVillage"],10000];
_count_locations = count _locations;
hintSilent str _count_locations;
{
_SafePos = [locationPosition _x, 1, 150, 3, 0, 20, 0] call BIS_fnc_findSafePos;
_veh = "ProtectionZone_F" createVehicle _SafePos;
} forEach _locations;

  • 0

#4 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1799 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 11 October 2018 - 23:15

D_Donskoy, да, вполне.


  • 0

#5 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 11 October 2018 - 23:35

Спасибо.

Вопрос далее - простите.

Как получить размер радиуса триггера?

_locations = nearestLocations [getPos Player,["nameCity","nameVillage"],РАЗМЕР ТРИГГЕРА];


  • 0

#6 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1799 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 11 October 2018 - 23:41

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


 
P. S.
Радиус может быть переменным.


Сообщение отредактировал Schatten: 12 October 2018 - 00:51

  • 0

#7 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 11 October 2018 - 23:51

... у меня триггер ставится на карту из редактора.

И вот его то радиус и нужен, как это использовать тогда? - 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


  • 0

#8 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 сообщений
  • Откуда:Донецк

Отправлено 12 October 2018 - 00:17

... у меня триггер ставится на карту из редактора.

И вот его то радиус и нужен, как это использовать тогда? - 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

У вас триггер стоит в редакторе, и его радиус вы хотите добавить в массив ? Я правильно понял ? 


  • 0

#9 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 12 October 2018 - 00:25

Да, верно.

Давно не играл и вот путаюсь - не умею!


Сообщение отредактировал D_Donskoy: 12 October 2018 - 00:25

  • 0

#10 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 сообщений
  • Откуда:Донецк

Отправлено 12 October 2018 - 00:28

Ну вам как минимум нужно дать ему переменную что бы получить нужный вам триггер, а дальше уже получить его размеры с помощью 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание


  • 0

#11 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 12 October 2018 - 00:35

… я так понимаю этому: _locations = nearestLocations [getPos Player,["nameCity","nameVillage"],РАЗМЕР ТРИГГЕРА]; - нужна цифра.

triggerArea - территория триггера (x,y,z), не подходит.


_WarFare_Zone_Area = triggerArea WarFare_Zone;

_locations = nearestLocations [getPos WarFare_Zone,["nameCity","nameVillage","NameCityCapital"], _WarFare_Zone_Area select 1];

Вот так заработало.

 

Но тогда это размер Y, а не радиус - не корректно)))


Сообщение отредактировал D_Donskoy: 12 October 2018 - 00:36

  • 0

#12 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1799 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 12 October 2018 - 00:37

D_Donskoy, поскольку команды типа nearestLocations производят поиск только в пределах круга (частный случай эллипса), то надо указать радиус окружности, описанной вокруг триггера, а потом ещё отфильтровать найденное.

Триггер может быть прямоугольником или эллипсом. В первом случае радиус будет равен половине диагонали, во втором -- большей полуоси.

Итого:

_area = triggerArea _trigger;
_sizes = _area select [0, 2];
_isRectangle = _area select 3;

_radius = if (_isRectangle) then {
    sqrt ((_sizes # 0) ^ 2 + (_sizes # 1) ^ 2);
} else {
    selectMax _sizes;
};

_locations = nearestLocations [..., _radius];
_locations = _locations select {_x inArea _area};

Сообщение отредактировал Schatten: 12 October 2018 - 00:50

  • 0

#13 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 сообщений
  • Откуда:Донецк

Отправлено 12 October 2018 - 00:37

… я так понимаю этому: _locations = nearestLocations [getPos Player,["nameCity","nameVillage"],РАЗМЕР ТРИГГЕРА]; - нужна цифра.

triggerArea - территория триггера (x,y,z), не подходит.

Было бы проще если бы вы сказали какая суть всего этого, там где написано "РАЗМЕР ТРИГГЕРА", нужен радиус, верно ? Верно, радиус у нас это круг, не квадрат, получается триггер должен быть у вас круглый, и иметь одинаковый X и Y, получаем его радиус через 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

, и выбираем X или Y.


  • 0

#14 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 12 October 2018 - 00:56

Смысл в том … эээ … 

_locations = nearestLocations [getPos Player,["nameCity","nameVillage"],5000]; - здесь точкой отсчета идет игрок и от него 5000.

Чтобы не привязывать эту команду к игроку, а привязать ее к триггеру для того чтобы локации определялись только в поставленном триггере (см.выше) вместо игрока используем триггер (Trigger), а в место 5000, его радиус:

_locations = nearestLocations [getPos Trigger,["nameCity","nameVillage"],Trigger radius];

Вот и весь смысл - просто так красивей наверное. )


 

D_Donskoy, поскольку команды типа nearestLocations производят поиск только в пределах круга (частный случай эллипса), то надо указать радиус окружности, описанной вокруг триггера, а потом ещё отфильтровать найденное.

Триггер может быть прямоугольником или эллипсом. В первом случае радиус будет равен половине диагонали, во втором -- большей полуоси.

Итого:

_area = triggerArea _trigger;
_sizes = _area select [0, 2];
_isRectangle = _area select 3;

_radius = if (_isRectangle) then {
    sqrt ((_sizes # 0) ^ 2 + (_sizes # 1) ^ 2);
} else {
    selectMax _sizes;
};

_locations = nearestLocations [..., _radius];
_locations = _locations select {_x inArea _area};

Да, супер - спасибо.

Миссия развивается и назрел следующий вопрос:

_Town_Patrol = [_SafePos, EAST, 2] call BIS_fnc_spawnGroup;

Как обратится именно ко второму или третьему члену группы _Town_Patrol?

Т.е. - _groupmember = nameofgroup select 1; - почему то не работает.

 

Смысл в том, чтобы каждого члена группы поставить на свое место "БИЛДИНГА".

 

 

_buildings = nearestObjects [WarFare_Zone, ["Land_Cargo_HQ_V1_F"],10000];
_count_buildings  = count _buildings;
{
_buildingPos = _x call BIS_fnc_buildingPositions;
{
_HQ_Guard = [_x, EAST, 5] call BIS_fnc_spawnGroup;
} forEach _buildingPos;
} forEach _buildings;

Сообщение отредактировал D_Donskoy: 12 October 2018 - 00:58

  • 0

#15 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1799 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 12 October 2018 - 01:00

_groupmember = nameofgroup select 1; - почему то не работает.

Конечно, тип nameofgroup -- группа, а не массив входящих в неё юнитов. Надо их получить с помощью

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.


  • 0

#16 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 сообщений
  • Откуда:Донецк

Отправлено 12 October 2018 - 01:10

_buildings = nearestObjects [getPos Player, ["Land_Cargo_HQ_V1_F"],10000];
_group = [getPos Player, EAST, 5] call BIS_fnc_spawnGroup;
{
	_buildingPos = _x call BIS_fnc_buildingPositions;
	{
		_x setPos (selectRandom _buildingPos);
	} forEach (units _group);
} forEach _buildings;

Сообщение отредактировал nIkRon: 12 October 2018 - 01:11

  • 0

#17 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1799 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 12 October 2018 - 11:10

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.


  • 0

#18 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 сообщений
  • Откуда:Донецк

Отправлено 12 October 2018 - 14:10

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.

Я скопировал его код и вставил, но в любом случае спасибо, не знал об этом. Всегда боролся за оптимизацию только максимальным упрощением кода, не думал что еще есть такое  :)


Сообщение отредактировал nIkRon: 12 October 2018 - 14:13

  • 0

#19 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

  • Пользователи
  • 447 сообщений
  • Откуда:Россия

Отправлено 16 October 2018 - 20:18

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.

Подскажите, что не так?


  • 0

#20 OFFLINE   nIkRon

nIkRon

    Сержант

  • Пользователи
  • 195 сообщений
  • Откуда:Донецк

Отправлено 17 October 2018 - 05:01

 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

.

Подскажите, что не так?

 

nearestObjects заменить на nearEntities так как она работает быстрее в этом случае


  • 0




Яндекс.Метрика