Автоматическое устранение трупов (FIFO)
Материал из F2 RU
Содержание |
Описание
Компонент Автоматическое устранение трупов использует метод добавления обработчика события каждому юниту; когда юнит убивают, запускается скрипт, который выполняет задержку на определённое время, а потом удаляет тело. Единственный недостаток этого подхода – трупы могут исчезать прямо перед игроками, что не есть естественно.
Есть другой метод устранения трупов под названием FIFO - это аббревиатура “First In, First Out”. Для каждого юнита, также, добавляется обработчик события, но, когда юнит убивают, он добавляется в массив, который содержит все мёртвые тела. Когда массив полностью заполняется, первый юнит, который зашёл в него, удаляется из миссии (представьте конвейер). Подход FIFO уменьшает шанс, когда тело исчезает прямо на глазах у игроков.
Чтобы тела наверняка не исчезали прямо перед игроками, FIFO также позволяет создателю миссии определить минимальное расстояние, на котором должно находиться тело от игрока, перед удалением.
Требуемые файлы
- init.sqf
- f\server\f_abrFIFO.sqf
- f\common\f_setLocalVars.sqf
- f\common\f_addRemoveBodyEH.sqf
- f\common\f_abrAddToFIFO.sqf
Как активировать
Откройте файл init.sqf и найдите фрагмент кода:
// F2 - Automatic Body Removal (FIFO)
Отредактируйте следующий блок кода, убрав символы // в начале каждой строки:
// f_abrFIFOlength = 30; // f_abrDistance = 150; // f_abrFIFOmaxLength = 50; // f_doNotRemoveBodies = []; // ["fifo"] execVM "f\common\f_addRemoveBodyEH.sqf"; // [] execVM "f\server\f_abrFIFO.sqf";
Как использовать
Настройки по умолчанию
По умолчанию этот компонент настроен на устранения трупов после смерти 30 юнитов (30 – это размер FIFO массива). Тела также не будут удаляться, пока расстояние не будет не менее, чем 150м до ближайшего игрока, только если FIFO массив не будет содержать 50 или более мёртвых тел – в этом случае удаление будет происходить независимо от расстояния. Также все трупы групп (включая группы игроков) будут удаляться – исключений нет по умолчанию.
Изменение размера массива FIFO
Чтобы изменить количество тел, которое должно находится в массиве FIFO до удаления тела, откройте файл init.sqf и найдите фрагмент кода:
// F2 - Automatic Body Removal (FIFO)
Отредактируйте следующую строку, изменив значение f_abrFIFOlength = 30; на желаемое количество тел:
f_abrFIFOlength = 30;
Изменение минимального расстояния
Чтобы изменить расстояние, на котором должно находиться тело от ближайшего игрока, откройте файл init.sqf и найдите фрагмент кода:
// F2 - Automatic Body Removal (FIFO)
Отредактируйте следующую строку, изменив значение f_abrDistance = 150; на желаемое расстояние (в метрах):
f_abrDistance = 150;
Изменение максимального размера массива FIFO
Чтобы изменить количество тел, которое должно находиться в массиве FIFO, при котором удаление происходит независимо от расстояния до ближайшего игрока, откройте файл init.sqf и найдите фрагмент кода:
// F2 - Automatic Body Removal (FIFO)
Отредактируйте следующую строку, изменив значение f_abrFIFOmaxLength = 50; на желаемое количество тел:
f_abrFIFOmaxLength = 50;
Исключение указанных групп
Так как снаряжение на мёртвом теле удаляется, возможно, вы захотите отключить эту функцию для некоторых групп солдат (например, групп игроков). Для исключения группы, откройте файл init.sqf и найдите фрагмент кода:
// F2 - Automatic Body Removal (FIFO)
Отредактируйте следующую строку, изменив значение f_doNotRemoveBodies с [] на желаемые имена групп для исключения.
f_doNotRemoveBodies = [];
Например, для исключения группы GrpUSMC_1Plt_Charlie, измените строку на:
f_doNotRemoveBodies = [GrpUSMC_1Plt_Charlie];
Для исключения более одной группы, используйте запятые:
f_doNotRemoveBodies = [GrpUSMC_1Plt_Charlie,GrpUSMC_1Plt_C1,GrpUSMC_1Plt_C2,GrpUSMC_1Plt_C3];
Советы
- Важное ограничение этого компонента заключается в невозможности автоматического добавления обработчика события для юнитов, созданных динамически во время миссии (например, если вы используете скрипт для динамической генерации врагов или гражданских). Но вы можете установить обработчик для всех динамически созданных юнитов, вставив следующий код в их поле Инициализация:
this addEventHandler ["killed",
{
if (isServer) then
{
f_abrFIFO = f_abrFIFO + [_this select 0];
} else
{
_this execVM "f\common\f_abrAddToFIFO.sqf"
};
}];
Авторы
- Headspace
- Raedor
