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


Фотография

Как заставить обнаружить игрока в любом здании.


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

#1 OFFLINE   Targon

Targon

    Ефрейтор

  • Пользователи
  • 36 сообщений

Отправлено 14 June 2015 - 01:31

Добрый день. Как заставить скрипт обнаружить игрока в любом зданий. Старый способ с Arma 2 не работает. Ищу для Arma 3.

 

Условия таковы. Если игрок вне здания то ему наносится урон в 50. Если он в здании то урон не наносится. Это должно быть любое здание на карте.

 

private["_isinbuilding"];
_isinbuilding = false;

if ([player] call fnc_isInsideBuilding) then {_isinbuilding = true;};
if (!_isinbuilding) then { player setDamage 0.50;};

 


  • 0

#2 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 14 June 2015 - 02:05

_isinbuilding = player in _building;

По идее если тело в здании выражение должно вернуть true.
Но! Вычисляется это относительно боундингбокса строения, то есть, далеко не редкость в арме то, что боундингбокс в реале больше чем модель.

 

И этим далеко не всегда это лечится

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

 

При таком раскладе тело может стоять перед зданием на улице, а определится как будто в здании.


Сообщение отредактировал SteelRat: 14 June 2015 - 02:07

  • 0

#3 OFFLINE   Targon

Targon

    Ефрейтор

  • Пользователи
  • 36 сообщений

Отправлено 17 June 2015 - 22:42

_isinbuilding = player in _building;

По идее если тело в здании выражение должно вернуть true.
Но! Вычисляется это относительно боундингбокса строения, то есть, далеко не редкость в арме то, что боундингбокс в реале больше чем модель.

 

И этим далеко не всегда это лечится

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

 

При таком раскладе тело может стоять перед зданием на улице, а определится как будто в здании.

 

 

спасибо большое.

 

вот аналогичный скрипт

/* Property of DayZ modification - http://www.dayzmod.com/ */
private["_unit1","_building","_type","_relPos","_boundingBox","_min","_max","_myX","_myY","_myZ","_inside"];
_unit1 = _this select 0;
//_building = _this select 1;
_building = nearestObject [_unit1, "HouseBase"];
 
_type = typeOf _building;

_relPos = _building worldToModel (getPosATL _unit1);
_boundingBox = boundingBox _building;
//diag_log ("DEBUG: Building: " + str(_building) );
//diag_log ("DEBUG: Building Type: " + str(_type) );
//diag_log ("DEBUG: BoundingBox: " + str(_boundingBox) );

_min = _boundingBox select 0;
_max = _boundingBox select 1;
			 
//diag_log ("Min: " + str(_min) );
//diag_log ("Max: " + str(_max) );
			 
_myX = _relPos select 0;
_myY = _relPos select 1;
_myZ = _relPos select 2;
			 
//diag_log ("X: " + str(_myX) );
//diag_log ("Y: " + str(_myY) );
//diag_log ("Z: " + str(_myZ) );
	
if ((_myX > (_min select 0)) and (_myX < (_max select 0))) then {
		if ((_myY > (_min select 1)) and (_myY < (_max select 1))) then {
				if ((_myZ > (_min select 2)) and (_myZ < (_max select 2))) then {
						_inside = true;
				} else { _inside = false; };
		} else { _inside = false; };
} else { _inside = false; };

//diag_log ("isinBuilding Check: " + str(_inside) );
_inside

  • 0




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