Очень часто в закромах всяких
, и прочих складах полезного, и не очень контента появляются аддоны с красивыми модельками, скриптами и различными реализациями интересных функций, но с ужасно (или неподходящими для вас) настроенными конфигами или отдельными частями.Вы конечно можете распаковать аддон, заменить/добавить/вырезать интересующую вас часть и запаковать обратно, но в большинстве случаев это не удобно, а в случае обновления аддона - вам придется проделывать те же самые действия с новым аддоном, да и не каждый автор дает разрешение на модификацию своего творения.
Так что же делать?
- мы будем писать так называемую замену конфига - ведь все, интересующее нас начинается именно с config.cpp.
В качестве примера мы возьмем аддон
с ПТУР «Конкурс» и заменим боеприпасы на аналог из аддона .
I. Подготовка.
Для создания собственного аддона необходимо:
Создать папку, файл с префиксом аддона, и файл конфига.
Рассматривать варианты с файлами префикса не будем, остановимся лишь на самом простом:
Назовите файл $PBOPREFIX$, а внутри опишите название аддона, либо виртуальный путь, по которому в дальнейшем мы сможем обращаться к ресурсам нашего аддона (если они есть).
Пускай, в данном случае префиксом будет cha_brdm2_rhs.
Далее создаем файл конфига с именем config.cpp, в который мы поместим информацию и требования для нашего аддона.
Стоит отметить, что наш патч должен загружаться после инициализации аддонов, с которыми мы хотим взаимодействовать. Для этого мы берем их идентификаторы из класса CfgPatches в файлах config.cpp наших аддонов.
В нашем случае - это аддон Cha_BRDM2 (аддон с БРДМ 2) и rhs_c_heavyweapons (аддон с конфигурацией оружия у RHS).
В дальнейшем мы пропишем их в параметре requiredAddons нашего аддона:
class CfgPatches { class cha_brdm2_rhs // Идентификатор нашего аддона { units[] = {}; weapons[] = {}; requiredVersion = 0.1; requiredAddons[] = { "Cha_BRDM2", "rhs_c_heavyweapons" }; // Требуемые нашим патчем аддоны для предзагрузки version = "0.1"; // Версия versionStr = "0.1"; // Версия в строковом варианте (необязательно, используется CBA) versionAr[] = {0, 1}; // Версия в виде массива (необязательно, используется CBA) author[] = {"Blender"}; // Автор (необязательно, используется CBA) authorUrl = "http://www.arma3.ru"; // URL (необязательно, используется CBA) description = "Chairborne BRDM 2 ATGM to RHS replacement"; // Описание (необязательно, используется CBA) }; };
II. Поиск и замена необходимых классов в интересующих нас аддонах.
Теперь, нам нужно заменить боеприпасы у БРДМ 2 на аналогичные из аддона RHS и "научить" оружие аддона Chairborne заряжаться от этих боеприпасов.
Для этого мы поищем и найдем в аддоне rhs_c_heavyweapons что-нибудь связанное с ATGM, например файл rhs_mags_atgm.hpp. Откроем его, и увидим два подходящих нам класса:
class rhs_mag_9m113_3 : VehicleMagazine { scope = public; DISP_MAG_STR(9M113); ammo = "rhs_ammo_9m113"; count = 3; initSpeed = 80; //maxleadspeed = 100; nameSound = "missiles"; }; class rhs_mag_9m113_4 : rhs_mag_9m113_3 { count = 4; };
class CfgMagazines { class rhs_mag_9m113_4; // Инициализируем в нашем аддоне класс RHS class rhs_mag_9m113_5: rhs_mag_9m113_4 { // Создаем свой, 5-ти зарядный на основе RHS count = 5; // Даем ему 5 зарядов }; };
class Cha_BRDM2_AT5_Launcher: Missiles_Scalpel { canlock = 0; magazines[] = {"Cha_BRDM2_5Rnd_At5"}; displayname = "9M113 Konkurs"; magazineReloadTime = 60; };
class CfgWeapons { class Missiles_Scalpel; // Ссылка на базовый класс для нашего оружия class Cha_BRDM2_AT5_Launcher: Missiles_Scalpel { magazines[] = {"Cha_BRDM2_5Rnd_At5", "rhs_mag_9m113_5"}; }; };
Теперь в БРДМ 2 можно заряжать и наш, созданный на основе RHS - 5-ти зарядный боеприпас.
Нам остается заменить выдачу боеприпасов на старте.
Для этого в классе CfgVehicles аддона cha_brdm2 находим нужный нам базовый класс БРДМ, где описано установленное на него вооружение и боеприпасы - Cha_BRDM2_ATGM_Base и видим, что в Turrets >> MainTurret присутствует класс magazines, в котором выдано два стандартных Cha-боеприпаса по 5 ракет:
magazines[] = {"Cha_BRDM2_5Rnd_AT5","Cha_BRDM2_5Rnd_AT5"};
Отлично, теперь делаем ссылки на классы в нашем патче соблюдая порядок наследования в конфиге cha_brdm2, и заменяем боеприпасы:
class CfgVehicles { class Car; class Car_F: Car { class NewTurret; class Turrets { class MainTurret: NewTurret {}; }; }; class Wheeled_APC_F: Car_F{}; class Cha_BRDM2_Base: Wheeled_APC_F {}; class Cha_BRDM2_ATGM_Base: Cha_BRDM2_Base { class Turrets: Turrets { class MainTurret: MainTurret { magazines[] = {"rhs_mag_9m113_5", "rhs_mag_9m113_5"}; // Вот они, наши боеприпасы }; }; }; };
Вот и все, остается только запаковать наш аддон и патч готов!
Надеюсь расписал все более-менее понятно. Если есть вопросы - задавайте.