Перейти к содержимому

Оружие, отдача и магазины

Три места: bs_weapons/config/config_weapons.lua (обвесы, магазины, шум), bs_skills/config/config_recoil.lua (отдача) и предметы-оружие в bs_inventory/config/config_items.lua.

Оружие это предмет инвентаря с data.weapon = 'WEAPON_X'. Патроны тоже предметы (ammo_pistol, ammo_rifle…). Оружие, найденное в мире, пустое, так задумано. Оружие, выданное админом, идёт с одним магазином (spawnRounds).

Обвесы это настоящие предметы, которые ставятся через колесо. Клавиша по умолчанию O (Weapons.Settings.openKey, команда /weaponwheel). Слоты в Weapons.Slots: muzzle, optic, grip, light, laser, magazine.

Каждый обвес в Weapons.Attachments сопоставляет предмет с компонентом базовой игры для каждого оружия отдельно, потому что глушитель пистолета это другой компонент, чем у винтовки. Неверная пара ничего не ломает, слот просто не предлагается.

Что они делают (Weapons.Effects):

suppressor = { noiseScale = 0.28 }, -- 90 m of noise becomes ~25 m
grip = { recoil = 0.85 },
extmag = { ammo = 1.5 },

Глушитель здесь очень важен, зомби слышат выстрелы (Weapons.Noise).

Weapons.Magazines, одна строка на оружие:

WEAPON_PISTOL = { base = 12, ext = 16, ammo = 'ammo_pistol' },
WEAPON_SMG = { base = 30, ext = 45, drum = 100, ammo = 'ammo_pistol' },
WEAPON_ASSAULTRIFLE = { base = 30, ext = 45, drum = 100, ammo = 'ammo_rifle' },

Каждое значение base есть и в консоли F1 (Оружие и отдача).

Проверка магазина (Weapons.MagCheck): игроки могут проверить магазин. По умолчанию он говорит примерно, насколько полон («примерно наполовину»), а не точное число. Поставь exact = true, если хочешь «17 / 30».

Skills.Recoil в bs_skills/config/config_recoil.lua. Каждый выстрел поднимает камеру на kick группы, смещает вбок до drift, никогда не поднимается выше maxClimb и трясёт на shake:

groups = {
pistol = { kick = 0.35, drift = 0.10, maxClimb = 2.5, shake = 0.05 },
rifle = { kick = 0.30, drift = 0.12, maxClimb = 3.5, shake = 0.10 },
shotgun = { kick = 1.10, drift = 0.25, maxClimb = 3.0, shake = 0.22 },
sniper = { kick = 1.40, drift = 0.20, maxClimb = 3.0, shake = 0.20 },
...
},

weapons.WEAPON_X переопределяет группу для одного оружия (пистолет .50, револьвер, тяжёлая снайперская…).

Что её масштабирует:

  • Боевой навык: уровень 0 это lowSkillMult (1.35), максимальный highSkillMult (0.70). Перк Steady Hands x steadyHandsMult.
  • Обвесы: глушитель и рукоять уменьшают подъём и тряску.
  • Наркотики: statebag bsDrugMods.sway тоже масштабирует отдачу, в пределах drugMin..drugMax.
  • Бустер Focus: x steady.
  • F1: Global.recoilMultiplier для всех.

После прекращения стрельбы 60% подъёма возвращается вниз за 250 мс (recoverFraction, recoverMs). Поставь debug = true, чтобы при настройке выводить в F8 числа каждого выстрела.