Создание пресетов экипировки в меню респауна.

Доброго утра, недавно добрые люди подкинули мне вариант как создавать пресеты экипировки в меню респауна, прямо как в компании из DLC APEX. Скрины:

И так, первое что нам надо это пройти в наш файл description.ext , а если его нет — то создать или вытащить из любой чужой миссии, и переписать под себя.
Кстати, тут его полное описание на официальном сайте BIS.

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

В файле description.ext пишем следующее:

respawnTemplates[] = {"MenuInventory","MenuPosition"};

Где MenuPosition — это Меню выбора точек респауна, как раз в котором и есть меню выбора пресетов оружия, а уже MenuInventory — это само меню выбора пресетов оружия.

Что бы работало меню выбора точек респауна, нам понадобится как минимум один маркер (можно «Система» → «Пусто». Более традиционный вариант.) с именем (это будет его переменная) respawn_ИМЯСТОРОНЫ .
Полное описание респауна сторон на официальном сайте BIS.

Теперь открываем тот же description.ext и внизу пишем вот что (это только пример, там экипировка из мода ACE 3):

class CfgRespawnInventory
{
class p1_eng
{
displayName = "Страшный дядька";
icon = "iconManEXP";
weapons[] = {
"srifle_EBR_F",
"launch_RPG32_F",
"hgun_ACPC2_F",
"ACE_VectorDay"
};
magazines[] = {
"MiniGrenade",
"MiniGrenade",
"MiniGrenade",
"MiniGrenade",
"HandGrenade",
"HandGrenade",
"HandGrenade",
"HandGrenade",
"SmokeShellGreen",
"SmokeShellGreen",
"SmokeShellGreen",
"SmokeShellGreen",
"20Rnd_762x51_Mag",
"20Rnd_762x51_Mag",
"20Rnd_762x51_Mag",
"20Rnd_762x51_Mag",
"20Rnd_762x51_Mag",
"20Rnd_762x51_Mag",
"20Rnd_762x51_Mag",
"20Rnd_762x51_Mag",
"20Rnd_762x51_Mag",
"20Rnd_762x51_Mag",
"20Rnd_762x51_Mag",
"20Rnd_762x51_Mag",
"RPG32_F",
"RPG32_F",
"RPG32_HE_F",
"RPG32_HE_F",
"RPG32_HE_F",
"9Rnd_45ACP_Mag",
"9Rnd_45ACP_Mag"
};
items[] = {
"ACE_EarPlugs",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_microDAGR",
"ACE_Clacker",
"ACE_MapTools"
};
linkedItems[] = {
"ItemMap",
"ItemCompass",
"ItemWatch",
"ItemRadio",
"I_UavTerminal",
"NVGoggles_INDEP",
"muzzle_snds_B",
"ACE_acc_pointer_green",
"optic_Arco",
"bipod_01_F_blk",
"ACE_muzzle_mzls_smg_01",
"acc_flashlight_pistol",
"optic_MRD",
"H_HelmetIA",
"V_PlateCarrierIA2_dgtl"
};
uniformClass = "U_I_CombatUniform";
backpack = "B_Carryall_oli";
};
class p2_mgunner
{
displayName = "Пулемётчик лёгкий";
icon = "iconMan";
weapons[] = {
"LMG_Mk200_F",
"hgun_ACPC2_F",
"Rangefinder"
};
magazines[] = {
"MiniGrenade",
"MiniGrenade",
"MiniGrenade",
"MiniGrenade",
"MiniGrenade",
"MiniGrenade",
"HandGrenade",
"HandGrenade",
"HandGrenade",
"HandGrenade",
"SmokeShellGreen",
"SmokeShellGreen",
"SmokeShellGreen",
"SmokeShellGreen",
"SmokeShellGreen",
"SmokeShellGreen",
"200Rnd_65x39_cased_Box_Tracer",
"200Rnd_65x39_cased_Box_Tracer",
"200Rnd_65x39_cased_Box_Tracer",
"200Rnd_65x39_cased_Box_Tracer",
"9Rnd_45ACP_Mag",
"9Rnd_45ACP_Mag"
};
items[] = {
"ACE_EarPlugs",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_morphine",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_fieldDressing",
"ACE_microDAGR",
"ACE_MapTools",
"ACE_Clacker",
"APERSMine_Range_Mag",
"APERSMine_Range_Mag"
};
linkedItems[] = {
"ItemMap",
"ItemCompass",
"ItemWatch",
"ItemRadio",
"I_UavTerminal",
"NVGoggles_INDEP",
"muzzle_snds_H",
"ACE_acc_pointer_green",
"optic_Hamr",
"bipod_03_F_blk",
"H_HelmetIA",
"V_PlateCarrierIA2_dgtl"
};
uniformClass = "U_I_CombatUniform";
backpack = "B_Kitbag_rgr";
Headgear = "H_HelmetIA";
Vest = "V_PlateCarrierIA2_dgtl";
};
};

Кстати, можно писать не в description.ext а в cfgRespawnInventory.hpp (не забывая создать его) , только тогда не забываем прописать в наш description.ext вот такую строчку:

#include "cfgRespawnInventory.hpp"

Здесь все класснеймы экипировки на официальном сайте BIS.

Важные моменты по коду экипировки:
class p1_eng — название нашего класса, соответственно, другой набор экипировки = другое название.
displayName = «Сапёр/Инженер»; — название что увидит игрок.
icon = «iconManEXP»; — иконка, наличие не принципиально.
Все прицелы и прочие приспособления для оружия что должны на нём висеть — заносятся в linkedItems .
Кроме того, каска и бронежилет тоже заносятся в linkedItems .
Сколько штук надо — столько раз и пишем строчку с нужным предметом.
При перечислении нужных предметов, важно что бы в последней строчке не было запятой — так как она последняя в контейнере!
После этого лезем в initPlayerLocal.sqf и пишем в нём:

Если нам надо персонально по классам, но с разными пресетами, то:

Код в чистом виде:

private _typeOfPlayer = typeOf player;
switch _typeOfPlayer do {
case "I_engineer_F" : {
[player,"p1_eng"] call BIS_fnc_addRespawnInventory;
[player,"p2_mgunner"] call BIS_fnc_addRespawnInventory;
};
case "I_soldier_F" : {
[player,"p3_recon"] call BIS_fnc_addRespawnInventory;
};
};

Код с расшифровкой:

// Вызов лоудаутов
private _typeOfPlayer = typeOf player;
switch _typeOfPlayer do {
case "I_engineer_F" : { //Если это данный класс, то
[player,"p1_eng"] call BIS_fnc_addRespawnInventory; // первый вариант экипировки
[player,"p2_mgunner"] call BIS_fnc_addRespawnInventory; // Второй вариант экипировки
};
case "I_soldier_F" : { //Если это данный класс, то
[player,"p3_recon"] call BIS_fnc_addRespawnInventory; //вариант экипировки
};
};

или на всю сторону игрока (тут можно и через initServer.sqf)

Код в чистом виде:

[west, "Rifleman1"] call BIS_fnc_addRespawnInventory;
[west, "Grenadier1"] call BIS_fnc_addRespawnInventory;
[west, "Marksman1"] call BIS_fnc_addRespawnInventory;

Код с расшифровкой:

[west, "Rifleman1"] call BIS_fnc_addRespawnInventory; //сторона, тип экипировки
[west, "Grenadier1"] call BIS_fnc_addRespawnInventory; //сторона, тип экипировки
[west, "Marksman1"] call BIS_fnc_addRespawnInventory; //сторона, тип экипировки

Обсудить этот метод можно в нашем Discord канале