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


Фотография

Непробиваемость стен


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

#1 OFFLINE   Arma 3Arma 3Arma 3

Arma 3Arma 3Arma 3

    Рядовой

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

Отправлено 25 April 2018 - 13:54

Здравствуйте, нужно заполнить объект инициализации так чтобы стена не прошивалась любым калибром. Заранее спасибо


  • 0

#2 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 25 April 2018 - 15:33

Arma 3Arma 3Arma 3, скриптами невозможно обеспечить 100% непробитие для объекта, который можно пробить, для 100% гарантии придется переделывать сам объект
  • 1

#3 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 25 April 2018 - 16:20

За пробиваемость отвечает материал, который вешается на компоненты в лоде FireGeometry самой модели, так что без модификации самой модели ни как.


Как вариант, в обжектбилдере делаете объект, размером со стену, не видимый, то есть прикрутить в визуальный лод прозрачную текстуру, столько объектов, сколько нужно, конкретных размеров, создаёте супер-пупер не пробиваемый материал физики, и вешаете на эти объекты в лоде FireGeometry, в редакторе армы лепите на стены эти объекты.

Получаете удовольствие.

 

Примеры материалов здесь

\a3\data_f\Penetration

Сообщение отредактировал SteelRat: 25 April 2018 - 16:24

  • 0

#4 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 25 April 2018 - 16:32

Arma 3Arma 3Arma 3, скриптами невозможно обеспечить 100% непробитие для объекта, который можно пробить, для 100% гарантии придется переделывать сам объект

 

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

EpeContact
EpeContactStart
EpeContactEnd

на предмет отследить момент столкновения двух физических геометрий, и при контакте, удалить пулю-снаряд-термоядерный заряд.


Сообщение отредактировал SteelRat: 25 April 2018 - 16:36

  • 0

#5 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 25 April 2018 - 17:50

на предмет отследить момент столкновения двух физических геометрий, и при контакте, удалить пулю-снаряд-термоядерный заряд.

Перепробовал все обработчики (Эти не пробовал, но думаю эффект будет такой же) и столкнулся с такой проблемой:
Все команды, который я использовал, (Изменения позиции и удаления) имеют эффект только на следующем кадре, следовательно, если объект стоит близко к этой стене (На расстоянии, которое пуля пролетит за один кадр), то он получает урон, если дальше - нет, т. к. пуля исчезает к этому кадру.
По идее можно решить при помощи каких-нибудь переменных и комбинацией обработчиков на стене и объекте, но тут я не знаю гарантирует ли движок последовательность вызовов обработчиков: обработчик попадания в стену >> обработчик попадания в объект
  • 0

#6 OFFLINE   SteelRat

SteelRat

    Полковник

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

Отправлено 25 April 2018 - 20:14

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

Тут вопрос в другом, поймает ли стена дома контакт от пули, например когда я развлекался с этими хандлерами, они не определяли столкновение объектов с персом.


  • 0

#7 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 26 April 2018 - 01:16

SteelRat, попробовал, “EpeContact*” вообще не реагируют на пули
  • 0

#8 OFFLINE   vlad333000

vlad333000

    Полковник

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

Отправлено 26 April 2018 - 02:20

Короче изобрел скриптовый костыль, должен в подавляющем большинстве случаев работать (Так же требуется передача перезаписи урона в handleDamage между обработчиками):
// Массив "плохих" пуль
badBullets = [];

// Для каждой требуемой стенки добавляем в глобальный массив badBullets все пули, от которых будет спасаться
wall addEventHandler [
	"HitPart",
	{
		badBullets append (_this apply {
			private _projectile = _x select 2;
			deleteVehicle _projectile;
			[_x select 1, (_x select 6) select 4, _projectile];
		});
	}
];

// Для каждого объекта, который в обязательном порядке должен быть защищен от этого прострела,
// переопределяем урон если данные источника урона совпали с хотя бы одной пулей в массиве badBullets
target addEventHandler [
	"HandleDamage",
	{
		private _toFind = [_this select 3, _this select 4];

		if ((badBullets findIf { (_x select [0, 2]) isEqualTo _toFind; }) != -1) then {
			0.0;
		};
	}
];

// Чистим устаревшие пули
addMissionEventHandler [
	"EachFrame",
	{
		badBullets = badBullets select { !isNull (_x select 2); };
	}
];


Ну и конечно если не нужна такая гарантия (Если стоять близко к стене, то урон будет наноситься), то:
wall addEventHandler [
	"HitPart",
	{
		{
			deleteVehicle (_x select 2);
		} forEach _this;
	}
];

Сообщение отредактировал vlad333000: 26 April 2018 - 02:30

  • 1




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