Shooting range
Shooting range
The range measures what a weapon actually does, under conditions you can rebuild exactly. It needs the range scope.
/gunsmithrange
Why scenarios
Setting distance and target by hand makes every session slightly different, and the numbers stop being comparable. A scenario rebuilds the same conditions every time — which is the precondition for comparing anything at all.
| Scenario | Distance | Target | Notes |
|---|---|---|---|
| Close quarters | 5 m | Patrol | |
| Mid range | 25 m | Static | |
| Long range | 80 m | Static | |
| Armoured target | 15 m | Armoured | |
| Under pressure | 10 m | Full combat | |
| Bench | 15 m | Static, immortal | Damage, spread and RPM only — nothing dies, so TTK and STK are not measured |
| Distance curve | from 5 m | Static, immortal | The target steps further away stage by stage |
The distance curve collects a set number of countable hits at each stage before the target moves back on its own. The target must be immortal for this: a death would cut the curve in half, and a killing blow is excluded from the measurement anyway.
Scenarios live in Config.RangeScenarios. Their id is written into every session record and later used to compare sessions of the same scenario, so changing an id breaks comparison against older records.
What it records
| Metric | Meaning |
|---|---|
| TTK | Time to kill |
| STK | Shots to kill |
| DPS | Damage per second |
| Accuracy | Hits over shots |
| Avg / total damage | Per hit, and cumulative |
| RPM | Measured rate of fire |
| Zone split | Head / torso / limb hit counts |
Sessions are stored in aty_gunsmith_range with the balance version they were recorded under. Without that, comparing two sessions across a deploy would be meaningless.
Only sessions with three or more hits are recorded.
Comparing
The comparison panel needs at least two recorded sessions. It shows the difference without a verdict: a lower TTK means faster, which is good on one weapon and bad on another. The call is yours.
Where sessions come from different balance versions, the panel says so — and reminds you that meta fields only took effect after a restart, so a session recorded before that restart was measured on the old values.
Class averages shown next to a result are computed from your own recorded sessions. They are also what the balance lab linter compares against.
Falloff
Falloff fields — start range, end range, damage modifier — are meta class. A change only reaches the curve after a server restart. The range says so on the curve panel rather than letting you measure a value that is not live yet.
Where it is
The default range zone is defined in Config.Zones:
shooting_range = { coords = vector3(13.0, -1097.0, 29.8), radius = 2.0, label = 'range' },
and referenced from Config.Access.range.zones. Move it, or add more, to suit your map.
See also
- Balance lab
- Permissions