Pular para o conteúdo

Armas, recuo e carregadores

Três sítios: bs_weapons/config/config_weapons.lua (acessórios, carregadores, ruído), bs_skills/config/config_recoil.lua (recuo) e os itens de armas em bs_inventory/config/config_items.lua.

Uma arma é um item do inventário com data.weapon = 'WEAPON_X'. A munição também são itens (ammo_pistol, ammo_rifle…). Uma arma que encontras no mundo está vazia, de propósito. As armas que um admin cria vêm com um carregador (spawnRounds).

Os acessórios são itens reais que montas numa roda. Tecla por defeito O (Weapons.Settings.openKey, comando /weaponwheel). Slots em Weapons.Slots: muzzle, optic, grip, light, laser, magazine.

Cada acessório em Weapons.Attachments mapeia o item para o componente do jogo base por arma, porque o supressor de uma pistola é um componente diferente do de uma espingarda. Um emparelhamento errado não estraga nada, o slot simplesmente não é oferecido.

O que fazem (Weapons.Effects):

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

O supressor importa muito aqui, os zombies ouvem tiros (Weapons.Noise).

Weapons.Magazines, uma linha por arma:

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' },

Todos os valores base também estão na consola F1 (Armas e Recuo).

Verificação do carregador (Weapons.MagCheck): os jogadores podem verificar o carregador. Por defeito diz mais ou menos quão cheio está (“cerca de metade”) e não a contagem exata. Define exact = true se quiseres “17 / 30”.

Skills.Recoil em bs_skills/config/config_recoil.lua. Cada disparo levanta a câmara pelo kick do grupo, desvia-se para o lado até drift, nunca sobe além de maxClimb, e treme por 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 substitui um grupo para uma arma (a pistola .50, o revólver, a sniper pesada…).

O que o escala:

  • Skill de combate: o nível 0 é lowSkillMult (1.35), o nível máximo highSkillMult (0.70). Perk Steady Hands x steadyHandsMult.
  • Acessórios: o supressor e o grip reduzem a subida e o tremor.
  • Drogas: o statebag bsDrugMods.sway também escala o recuo, limitado a drugMin..drugMax.
  • Booster Focus: x steady.
  • F1: Global.recoilMultiplier para todos.

Depois de parares de disparar, 60% da subida volta a descer em 250 ms (recoverFraction, recoverMs). Define debug = true para imprimir no F8 os números de cada disparo ao afinar.