Jump to content


Photo

Вопросы по скриптингу

Arma3 как плотформа для созда Скритпы

  • Please log in to reply
1486 replies to this topic

#1301 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 posts
  • Откуда:mscw

Posted 25 July 2018 - 20:30

lopster102, тогда на мой взгляд лучшим способом будет:

private _up = lineIntersectsWith [eyePos player, eyePos player vectorAdd [0, 0, 100], player, objNull, false];
private _down = lineIntersectsWith [eyePos player, eyePos player vectorAdd [0, 0, -100], player, objNull, false];
private _inside = !((_up arrayIntersect _down) isEqualTo []);
Суть в том, что: т. к. здание имеет крышу и пол, то логично предположить, что если линия вверх и линия вниз пересекли один и тот же объект, то мы как минимум находимся в беседке :), так же тут нужно еще проверить, а не находиться ли игрок в технике (Т. к. она тоже как ни странно имеет крышу и пол), и по возможность отфильтровать объекты с которыми мы не хотим взаимодействовать

PS Ну и дальше чисто оптимизация и повышение точности:
* Проверять только наличие крыши над головой
* Ленивую проверку пересечений
* Длину линии проверки
* Больше линий проверки (В разные стороны, со сдвигом в сторону и т. д.)
* и т. д.

 

Спасибо!это похоже то что надо!а вот интересно про второй вариант  почитать бы еще=).


private["_unit", "_inside", "_building", "_relPos", "_boundingBox", "_min", "_max", "_myX", "_myY", "_myZ"];
_unit		=	(_this select 0);
_inside		=	false;
_building	=	nearestObject [_unit, "HouseBase"];
if (isNull _building) exitWith
	{_inside};
_relPos		=	_building worldToModel (getPosATL _unit);
_boundingBox	=	boundingBox _building;
_min		=	_boundingBox select 0;
_max 		=	_boundingBox select 1;
_myX		=	_relPos select 0;
_myY		=	_relPos select 1;
_myZ		=	_relPos select 2;
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;};
			};
	};
_inside

спс


  • 0

#1302 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 posts
  • Откуда:Кострома

Posted 25 July 2018 - 20:31

lopster102, ну пример второго вариант вам уже написали чуть выше, не самый хороший, но дает представление о нем. В вашем случае я бы не рекомендовал его т. к. box'ы у зданий зачастую намного больше самих зданий, поэтому прочитав ваш код и поняв что вам нужно, я понял, что такая точность вам не подойдет и лучше использовать пересечение линий

Edited by vlad333000, 25 July 2018 - 20:32.

  • 0

#1303 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 posts
  • Откуда:mscw

Posted 25 July 2018 - 20:36

lopster102, ну пример второго вариант вам уже написали чуть выше, не самый хороший, но дает представление о нем. В вашем случае я бы не рекомендовал его т. к. box'ы у зданий зачастую намного больше самих зданий, поэтому прочитав ваш код и поняв что вам нужно, я понял, что такая точность вам не подойдет и лучше использовать пересечение линий

ок!спс !да так и есть нужно очень точнее определение  когда вошел и вышел !ща  скриптану с линиями


  • 0

#1304 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 posts
  • Откуда:mscw

Posted 26 July 2018 - 01:25

а получиться ли сделать плавный переход от вида от первого лица к третьему?а то я вроде уже все пересмотрел так и не нашел откуда взять позицию камеры той что у юнита игрока если это вообще возможно.нашел только eyePos но оно мало помогает так как атач камеры все равно на игрока и офсет от позиции юнита нужно писать и поставить созданую камеру в туже точку откуда камера игрока смотрит не поулчается.и еще нашел в конфиге тоже оффсет но он только для третьего лица extCameraPosition[] = {0.22,0.05,-2.2}; как бы тоже не угодаешь в какой позиции будет камера когда например игрок наклонится а хотелось бы чтобы когда в дом заходишь камера плавно сменилась на вид от первого лица и наоборот когда выходишь на третье лицо но плавно перелетела от одного к другому


Edited by lopster102, 26 July 2018 - 01:47.

  • 0

#1305 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 26 July 2018 - 03:30

а получиться ли сделать плавный переход от вида от первого лица к третьему?а то я вроде уже все пересмотрел так и не нашел откуда взять позицию камеры той что у юнита игрока если это вообще возможно.нашел только eyePos но оно мало помогает так как атач камеры все равно на игрока и офсет от позиции юнита нужно писать и поставить созданую камеру в туже точку откуда камера игрока смотрит не поулчается.и еще нашел в конфиге тоже оффсет но он только для третьего лица extCameraPosition[] = {0.22,0.05,-2.2}; как бы тоже не угодаешь в какой позиции будет камера когда например игрок наклонится а хотелось бы чтобы когда в дом заходишь камера плавно сменилась на вид от первого лица и наоборот когда выходишь на третье лицо но плавно перелетела от одного к другому

В семплах армы лежит пример перса.

Открываете в билдере этот пример, идёте в лод memory, в этом лоде ищете селекшен, который привязан к точке которая определяет позицию камеры, имена достаточно интуитивно понятны.

Далее из скрипта запрашиваете позицию этого селекшена, делаем это раскурив команду

selectionPosition

Edited by SteelRat, 26 July 2018 - 03:31.

  • 0

#1306 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 26 July 2018 - 03:36

~


Edited by SteelRat, 26 July 2018 - 03:36.

  • 0

#1307 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 posts
  • Откуда:mscw

Posted 26 July 2018 - 03:46

~

спасибо ! а вы случайно не помните как они называются ?я правильно же понял надо тупо названия  прокси с лода который от третьего лица  который  и тоже самое  для первого лица только вот тоже вопрос а какой из них или там в одном лоде сразу две точки для камеры?

вроде нашел это pilot а вот для третьего лица не найти даже если пилот переключить на "EXTERNAL" не совпадает с камерйо от третьего лица (

Attached Files


Edited by lopster102, 26 July 2018 - 06:04.

  • 0

#1308 OFFLINE   Ego_Brain

Ego_Brain

    Ефрейтор

  • Пользователи
  • 49 posts
  • Откуда:Холмск

Posted 26 July 2018 - 07:11

 


private["_unit", "_inside", "_building", "_relPos", "_boundingBox", "_min", "_max", "_myX", "_myY", "_myZ"];
_unit		=	(_this select 0);
_inside		=	false;
_building	=	nearestObject [_unit, "HouseBase"];
if (isNull _building) exitWith
	{_inside};
_relPos		=	_building worldToModel (getPosATL _unit);
_boundingBox	=	boundingBox _building;
_min		=	_boundingBox select 0;
_max 		=	_boundingBox select 1;
_myX		=	_relPos select 0;
_myY		=	_relPos select 1;
_myZ		=	_relPos select 2;
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;};
			};
	};
_inside

 

Буквально на днях использовал этот самый скрипт, найденный в буржуйских интернетах. Всё отлично работает, нужно было определить, когда боты входят в здание.


  • 0

#1309 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 posts
  • Откуда:Кострома

Posted 26 July 2018 - 10:24

Ego_Brain, да он работает, но его точность оставляет желать лучшего, особенно для скрипта, который нужен был lopster102, и его даже boundingBoxReal не спасает.
Вот наглядные примеры (Красный контур - boundigBox, зеленый - boundingBoxReal)

  • 0

#1310 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 posts
  • Откуда:РФ

Posted 26 July 2018 - 12:09

 

~

спасибо ! а вы случайно не помните как они называются ?я правильно же понял надо тупо названия  прокси с лода который от третьего лица  который  и тоже самое  для первого лица только вот тоже вопрос а какой из них или там в одном лоде сразу две точки для камеры?

вроде нашел это pilot а вот для третьего лица не найти даже если пилот переключить на "EXTERNAL" не совпадает с камерйо от третьего лица (

 

 

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

 

Attached File  screenday_01.jpg   75.99KB   2 downloads

 

ЗЫ

Однако, по идее, eyePos и eyeDir должны возвращать именно позицию, и вектор направления камеры, без всяких заморочек.

 

ЗЫ_2

Всё что нужно сделать для корректности, это при старте миссии зафиксировать текущую позицию камеры, относительно пространства модели, в глобальную переменную, и после уже применять эти данные в расчётах. Если камера не попадает на позицию по умолчанию, значит нужно применять другие, более точные команды позиционирования, коих в арме сейчас развелось как собак не резанных).

 

ЗЫ_3

Хотя при неких обстоятельствах это тоже не даст нужного эффекта, по этому эксперементируйте с самой точкой для камеры.


Edited by SteelRat, 26 July 2018 - 12:23.

  • 0

#1311 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

  • Пользователи
  • 189 posts
  • Откуда:SPB

Posted 26 July 2018 - 13:15


когда боты входят в здание.

Тогда лучше скрипт поточнее.

Боксовый хорошо подходит для чего то простого. Например если есть у персонажа стат - сырость, и под дождем он промокает, то вблизи здания, отключать "намокание"... Этот скрипт подойдет, и полностью оправдан.

Для ботов поточнее понадобится.


  • 0

#1312 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 posts
  • Откуда:mscw

Posted 26 July 2018 - 14:24

 

 

~

спасибо ! а вы случайно не помните как они называются ?я правильно же понял надо тупо названия  прокси с лода который от третьего лица  который  и тоже самое  для первого лица только вот тоже вопрос а какой из них или там в одном лоде сразу две точки для камеры?

вроде нашел это pilot а вот для третьего лица не найти даже если пилот переключить на "EXTERNAL" не совпадает с камерйо от третьего лица (

 

 

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

 

attachicon.gifscreenday_01.jpg

 

ЗЫ

Однако, по идее, eyePos и eyeDir должны возвращать именно позицию, и вектор направления камеры, без всяких заморочек.

 

ЗЫ_2

Всё что нужно сделать для корректности, это при старте миссии зафиксировать текущую позицию камеры, относительно пространства модели, в глобальную переменную, и после уже применять эти данные в расчётах. Если камера не попадает на позицию по умолчанию, значит нужно применять другие, более точные команды позиционирования, коих в арме сейчас развелось как собак не резанных).

 

ЗЫ_3

Хотя при неких обстоятельствах это тоже не даст нужного эффекта, по этому эксперементируйте с самой точкой для камеры.

 

 

спасибо но я вчера всю ночь просидел перебрал все точки всех лодов и так не нашел тертье лицо (видимо не получиться реализовать супер плавный переход камеры


Edited by lopster102, 26 July 2018 - 14:29.

  • 0

#1313 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 posts
  • Откуда:Кострома

Posted 26 July 2018 - 15:22

SteelRat, третье лицо это офсет к какой-то точке с называнием “aimPoint”. Там случаем такой нету нигде? Сам оффсет в конфиге прописан

Edited by vlad333000, 26 July 2018 - 15:23.

  • 0

#1314 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 posts
  • Откуда:mscw

Posted 26 July 2018 - 16:07

SteelRat, третье лицо это офсет к какой-то точке с называнием “aimPoint”. Там случаем такой нету нигде? Сам оффсет в конфиге прописан

привет!в это и дело что в конфиге статичный офсет а эта команда она в том и прикол что берет офсет после анимации объекта аимпоинт тоже  не получается вроде

 

 

вот можно посмотреть где будет третье лицо

_a = player selectionPosition ["aimPoint","Memory"];
cam = "Land_HandyCam_F" createVehicleLocal _a;
cam attachTo [player, _a];
cam switchCamera  "INTERNAL" ;

Edited by lopster102, 26 July 2018 - 16:11.

  • 0

#1315 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 posts
  • Откуда:Кострома

Posted 26 July 2018 - 16:10

lopster102, прочитайте еще раз первые два предложения, я знаю что он статичен!
  • 0

#1316 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 posts
  • Откуда:mscw

Posted 26 July 2018 - 16:16

lopster102, прочитайте еще раз первые два предложения, я знаю что он статичен!

  извиняюсь понял!просто как быть=(


Edited by lopster102, 26 July 2018 - 16:53.

  • 0

#1317 OFFLINE   Afgan0r

Afgan0r

    Рядовой

  • Пользователи
  • 4 posts
  • Отряд:RMI

Posted 10 August 2018 - 10:25

Как сделать проверку кто именно выполняет действие с объектом (addAction)? Например, если есть два бота a1 и a2, и если a1 выполнит действие, то только ему будет выдаваться снаряжение.


  • 0

#1318 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1831 posts

Posted 10 August 2018 - 10:34

Afgan0r, как бы нужно проверить это (внезапно):

_caller = _this select 1;

if (_caller != a1) exitWith {};

Edited by Schatten, 10 August 2018 - 23:59.

  • 0

#1319 OFFLINE   lopster102

lopster102

    Ст.сержант

  • Пользователи
  • 267 posts
  • Откуда:mscw

Posted 11 August 2018 - 01:33

здрв всем!как замутить ботов скажите пожалуйста !ой извините замУтить!ударение на у

Edited by lopster102, 11 August 2018 - 01:38.

  • 0

#1320 OFFLINE   NoNameUltima

NoNameUltima

    Сержант

  • Пользователи
  • 189 posts
  • Откуда:SPB

Posted 11 August 2018 - 04:53

lopster102,

player setVariable ["BIS_noCoreConversations", true];
0 fadeRadio 0;
enableRadio false;
enableSentences false;

ну и т.д. - дальше у богемии смотри.


  • 0




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