Works standalone (SmartFires) or with Night ERS — ESX & QBCore native.
Video Demo: LINK
The moment a fire or EMS call goes live, the nearest station that serves that department tones out and its bay doors swing open — automatically, for everyone. Fully positional 3D audio rendered in-resource. No xsound. No dependencies. No fighting other doorlock scripts.
Drop it in, paste your station coords, register your doors, done.
⚡ Why crews love it
-
Real tone-outs, positioned in the world. Tones play at the station's actual coordinates with true distance fade and stereo pan — computed per-frame from each player's own camera. Walk up on a station mid-tone and you'll hear it get louder. Anyone near the bay hears it too.
-
Doors that behave. Bay doors auto-open at the toned station on accept and stay open until commanded closed. States sync to every player, late joiners included. A streaming guard re-asserts them so they never silently snap shut when you drive back from a call.
-
Zero audio dependencies. All sound is rendered by the resource's own NUI via the Web Audio API. No xsound, no mumble hacks, no external audio resource to install or update.
-
Fire and EMS, handled separately. Fire calls tone the nearest
firestation, EMS calls tone the nearestemsstation, and a call needing both tones both — each at its own closest house.
🧩 Four framework modes — one toggle
Mode
Fires on
Extras
Standalone
Any SmartFires callout — no ERS needed
Tones + doors at the station nearest the fire itself
ERS (default)
Night ERS callout accept
—
ESX
Night ERS callout accept
Door/test commands gated to your fire/EMS jobs
QBCore
Night ERS callout accept
Same job-gating, QBCore-native
Set Config.SmartFiresAnyFire = true in standalone mode to react to every fire SmartFires creates — player-lit, scripted, or spread.
🎛️ Commands
Command
Does
/teststationtones
3D test tone at your nearest station — pre-shift readiness check
/openbay [bay]
Open one bay door at your nearest station
/openallstationdoors
Open every door at your nearest station
/closeallstationdoors
Close every door at your nearest station
/registerdoors
In-game door registration — aim, fire an empty weapon, paste the printed line
/stoptones
Silence every tone on your client instantly
/tonesdiag
Dump live audio engine state (per-tone volume + pan)
All command names are configurable.
🔧 Setup in minutes
- Drop the folder in
resources. - Paste your station vector4 coords into
Config.Stations, mark eachservices = { fire, ems }. - Drop your tone files into
html/sounds/(.oggrecommended — multiple files per department = random pick each tone-out). - Register bay doors in-game with
/registerdoors— it auto-fills the station and prints a ready-to-paste line to F8. -
ensureand go.
Tune volume, audible distance, full-volume radius, and falloff curve entirely from config. First-time Config.Debug = true prints the exact callout data, matched department, and chosen station to your server console so you can confirm every pick.
📦 Requirements
-
SmartFires (standalone mode) or Night ERS (ers / esx / qbcore modes)
-
That's it — no audio resource, no extra dependencies.
🔒 What's open
Escrow-protected via Cfx.re. config.lua, all your sound files, and the full documentation stay open and editable after purchase — station layout, tones, distances, doors, and command names are all yours to configure. Scripts are encrypted.
Documentation