Weapon Mechanics
Core Inventory features a full simulated weapon system with magazine-based reloading, weapon attachments, holster animations, durability, and serial numbers.
Ammo System
When UseMagazineSystem = true (default), weapons use a realistic magazine workflow:
- Magazines are items — each weapon type has clip items (standard, extended, drum) that exist in your inventory
- Loading ammo into magazines — drag ammo onto a magazine item to fill it
- Equipping magazines — attach a loaded magazine to your weapon via the attachments menu
- Reloading — pressing
Rswaps the current magazine with the next compatible loaded magazine from your inventory - Unloading — right-click a weapon and select "Unload Ammo" to remove the current magazine
lua
-- config_weapons.lua
UseMagazineSystem = true,How Magazine Reload Works
When the player reloads:
- The script searches inventory for a compatible magazine with ammo
- The old magazine (with remaining ammo) goes back to inventory
- The new magazine is attached to the weapon
- If no compatible magazine is found, a notification is shown
INFO
Magazine capacity is determined by the clip component. Extended clips hold more rounds than standard clips, and drum magazines hold the most.
Ammunition Types
Ammo is defined in config_weapons.lua. Each ammo item maps to the magazine components and/or weapon models it's compatible with:
lua
Ammunition = {
['pistol_ammo'] = {
-- Magazine components this ammo fits
'COMPONENT_PISTOL_CLIP_01',
'COMPONENT_PISTOL_CLIP_02',
'COMPONENT_COMBATPISTOL_CLIP_01',
-- ...
-- Weapon models for simple ammo reload
'WEAPON_PISTOL',
'WEAPON_COMBATPISTOL',
-- ...
},
}Default Ammo Categories
| Ammo Item | Weapons |
|---|---|
pistol_ammo | All pistols and revolvers |
smg_ammo | Micro SMG, SMG, Assault SMG, Combat PDW, etc. |
mg_ammo | MG, Combat MG, Gusenberg Sweeper, Minigun |
rifle_ammo | All assault and battle rifles |
sniper_ammo | Sniper Rifle, Heavy Sniper, Marksman Rifle |
shotgun_ammo | All shotguns |
Weapon Attachments
Attachments are physical items that players drag onto weapons. The system supports three configuration modes:
One attachment item per weapon category — e.g., at_clip_extended_pistol works on all pistols, at_clip_extended_rifle works on all rifles.
lua
UniqueComponentByWeaponCategory = true, -- Default
ComponentsByCategory = {
['at_clip_extended_pistol'] = {
'COMPONENT_PISTOL_CLIP_02',
'COMPONENT_COMBATPISTOL_CLIP_02',
'COMPONENT_HEAVYPISTOL_CLIP_02',
-- ...
},
['at_suppressor_light'] = {
'COMPONENT_AT_PI_SUPP',
'COMPONENT_AT_PI_SUPP_02',
-- ...
},
}Best for balanced gameplay — fewer items to manage while still having weapon-class variety.
Attachment Categories
Scopes
Macro, small, medium, holo, NV, thermal, and advanced scopes.
Suppressors
Light (pistol) and heavy (rifle/sniper) suppressors.
Grips
Foregrip attachments for reduced recoil.
Flashlights
Weapon-mounted flashlights for pistols and rifles.
Clips
Standard, extended, and drum magazines.
Barrels & Muzzles
Heavy barrels, flat, tactical, slanted, and more muzzle brakes.
Weapon Holstering
Weapons have equip/holster animations that play when switching weapons:
lua
WeaponHolsterAnimation = true,
-- Jobs with special holster animation for pistols
JobWeaponHaveHolsterAnimation = {
['police'] = true,
['fbi'] = true,
['bcso'] = true
},Custom Holster Animations
Each weapon group can have custom intro (equip) and outro (holster) animations:
lua
HolsterAnimations = {
['GROUP_PISTOL'] = {
intro = { dict = 'reaction@intimidation@cop@unarmed',
anim = 'intro', sleep = 400 },
outro = { dict = 'reaction@intimidation@cop@unarmed',
anim = 'outro', sleep = 450 }
},
['GROUP_MELEE'] = {
intro = { dict = 'melee@holster',
anim = 'unholster', sleep = 200 },
outro = { dict = 'melee@holster',
anim = 'holster', sleep = 400 }
},
['DEFAULT'] = {
intro = { dict = 'reaction@intimidation@1h',
anim = 'intro', sleep = 1200 },
outro = { dict = 'reaction@intimidation@1h',
anim = 'outro', sleep = 1400 }
}
},The sleep value controls how long (ms) to wait during the animation before the weapon appears/disappears.
Weapon Durability
Weapons have durability that degrades with use:
lua
ShootingDurabilityDegradation = 0.1, -- Per-shot degradation- Weapons in the
weaponscategory automatically get durability tracking - Broken weapons (0 durability) display with the
BrokenItemColor - Durability can be set via metadata or the
setDurabilityexport
Serial Numbers
All weapons automatically receive a unique serial number:
lua
ItemCategories = {
["weapons"] = {
serial = true, -- Auto-generate serial numbers
durability = true,
},
}Serial numbers are visible in the item info panel and persist through trades, drops, and storage.
Weapon Slots
The inventory provides dedicated weapon holder slots:
| Slot | Purpose | Default Key |
|---|---|---|
primary | Primary weapon (rifles, shotguns, etc.) | 1 |
secondry | Secondary weapon (pistols, SMGs) | 2 |
melee | Melee weapon | 3 |
lua
EnableSecondaryWeaponSlot = true, -- Enable the secondary slot
EnableMeleeWeaponSlot = true, -- Enable the melee slotQuick-switch between weapon slots using the number keys 1, 2, 3.
