Путём переделки конфигов и добавлением скриптов.
Как сделаны скрипты можно посмотреть у мода Rev Guns.
Конфиг прикрепил ниже.
class CfgPatches
{
class *уникальный класс*
{
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
requiredAddons[] = {"DZ_Weapons_Firearms","DZ_Sounds_Effects","DZ_Weapons_Magazines"};
};
};
class Mode_Safe;
class Mode_SemiAuto;
class Mode_Burst;
class Mode_FullAuto;
class OpticsInfoRifle;
class cfgWeapons
{
class Rifle_Base;
class *класс_бейс*: Rifle_Base
{
scope = 0;
displayName = "";
descriptionShort = "";
weight = ;
model = ;
absorbency = 0.0;
repairableWithKits[] = {1};
repairCosts[] = {30.0,25.0};
PPDOFProperties[] = {1,0.6,50,200,4,10};
WeaponLength = 1.1;
barrelArmor = 3.888;
attachments[] = {""};
itemSize[] = {};
chamberSize = 1;
chamberedRound = "";
chamberableFrom[] = {""};
magazines[] = {""};
ejectType = 1;
recoilModifier[] = {};
swayModifier[] = {};
simpleHiddenSelections[] = {"hide_barrel","folding_lowered","folding_raised"};
modes[] = {"SemiAuto"};
class SemiAuto: Mode_SemiAuto
{
soundSetShot[] = {""};
soundSetShotExt[] = {{""}};
reloadTime = ;
dispersion = ;
magazineSlot = "magazine";
};
class OpticsInfo: OpticsInfoRifle
{
memoryPointCamera = "eye";
discreteDistance[] = {100,200,300,400,500,600,700,800,900,1000};
discreteDistanceInitIndex = 0;
modelOptics = "-";
distanceZoomMin = 100;
distanceZoomMax = 1000;
};
class Particles
{
class OnFire
{
class SmokeCloud
{
overrideParticle = "weapon_shot_winded_smoke";
};
class MuzzleFlash
{
overrideParticle = "weapon_shot_akm_01";
ignoreIfSuppressed = 1;
illuminateWorld = 1;
positionOffset[] = {-0.05,0,0};
};
class ChamberSmokeBurst
{
overrideParticle = "weapon_shot_chamber_smoke";
overridePoint = "Nabojnicestart";
overrideDirectionPoint = "Nabojniceend";
};
};
class OnOverheating
{
maxOverheatingValue = 120;
shotsToStartOverheating = 2;
overheatingDecayInterval = 1;
class SmokingBarrel1
{
positionOffset[] = {-0.02,0,0};
overrideParticle = "smoking_barrel_small";
onlyWithinOverheatLimits[] = {0.0,0.2};
onlyWithinRainLimits[] = {0,0.2};
};
class SmokingBarrelHot1
{
positionOffset[] = {0.1,0,0};
overrideParticle = "smoking_barrel";
onlyWithinOverheatLimits[] = {0.2,0.6};
onlyWithinRainLimits[] = {0,0.2};
};
class SmokingBarrelHot3
{
positionOffset[] = {0.3,0,0};
overrideParticle = "smoking_barrel_heavy";
onlyWithinOverheatLimits[] = {0.6,1};
onlyWithinRainLimits[] = {0,0.2};
};
class SmokingBarrelHotSteam
{
overrideParticle = "smoking_barrel_steam";
positionOffset[] = {0.35,0,0};
onlyWithinOverheatLimits[] = {0,1};
onlyWithinRainLimits[] = {0.2,1};
};
class OpenChamberSmoke
{
onlyIfBoltIsOpen = 1;
overrideParticle = "smoking_barrel_small";
overridePoint = "Nabojnicestart";
};
};
class OnBulletCasingEject
{
class ChamberSmokeRaise
{
overrideParticle = "weapon_shot_chamber_smoke_raise";
overridePoint = "Nabojnicestart";
};
};
};
class DamageSystem
{
class GlobalHealth
{
class Health
{
hitpoints = 300;
healthLevels[] =
{
{1.0,{""}},
{0.7,{""}},
{0.5,{""}},
{0.3,{""}},
{0.0,{""}}
};
};
};
};
};
class *класс который будет виден*: *класс бейс который делали выше*
{
scope = 2;
};
};
class cfgMagazines
{
class Magazine_Base;
class *класс магазина* : Magazine_Base
{
scope = 2;
displayName = "";
descriptionShort = "";
model = "";
weight = 75;
itemSize[] = {1,1};
count = 10;
ammo = "";
ammoItems[] = {""};
tracersEvery = 0;
class DamageSystem
{
class GlobalHealth
{
class Health
{
hitpoints = 100;
healthLevels[] =
{
{1.0,{""}},
{0.7,{""}},
{0.5,{""}},
{0.3,{""}},
{0.0,{""}}
};
};
};
};
class AnimEvents
{
class SoundWeapon
{
class MagRifle_fill_in
{
soundSet = "MagRifle_fill_in_SoundSet";
id = 1;
};
class MagRifle_fill_loop
{
soundSet = "MagRifle_fill_loop_SoundSet";
id = 2;
};
class MagRifle_fill_out
{
soundSet = "MagRifle_fill_out_SoundSet";
id = 3;
};
class MagRifle_empty_in
{
soundSet = "MagRifle_empty_in_SoundSet";
id = 4;
};
class MagRifle_empty_loop
{
soundSet = "MagRifle_empty_loop_SoundSet";
id = 5;
};
class MagRifle_empty_out
{
soundSet = "MagRifle_empty_out_SoundSet";
id = 6;
};
class MagPistol_fill_in
{
soundSet = "MagPistol_fill_in_SoundSet";
id = 7;
};
class MagPistol_fill_loop
{
soundSet = "MagPistol_fill_loop_SoundSet";
id = 8;
};
class MagPistol_fill_out
{
soundSet = "MagPistol_fill_out_SoundSet";
id = 9;
};
class MagPistol_empty_in
{
soundSet = "MagPistol_empty_in_SoundSet";
id = 10;
};
class MagPistol_empty_loop
{
soundSet = "MagPistol_empty_loop_SoundSet";
id = 11;
};
class MagPistol_empty_out
{
soundSet = "MagPistol_empty_out_SoundSet";
id = 12;
};
};
};
};
class CfgNonAIVehicles
{
class ProxyAttachment;
class Proxy*ваш_магазин*: ProxyAttachment
{
scope = 0;
inventorySlot = "magazine";
model = "модель_магазина";
};
};
P.S, возможно где-то пропустил скобки.