Small Scripts, Big Impact
Agency-Seatbelt is one of the smallest scripts we ship, but feedback consistently ranks it among the most appreciated. There's a lesson there: RP is built from small mechanical touches that make the world feel consistent, not from monolithic feature dumps.
The Realism Payoff
When players have to physically put on a seatbelt before driving, three things change. Chase sequences become more dangerous because buckling up mid-pursuit costs you time. Police officers gain a new thing to ticket. Passengers experience real consequences from driver negligence. Each of those is a tiny RP hook that adds depth without adding cognitive load.
The Animation and Audio Details
We spent more time on the buckle/unbuckle animation than on the core logic. A two-second animation, a subtle click sound, and a distinct seatbelt indicator on the HUD — these are the kind of polish details that signal to players "this server takes itself seriously." When everything else is doing its job quietly, those little moments stand out.
Integration With Vehicle Scripts
Agency-Seatbelt hooks cleanly into any vehicle damage script because we expose a simple client event — `agency-seatbelt:isBuckled` — that other scripts can query. Your tow truck script can refuse tow requests from players who just ejected through their windshield. Your hospital script can add realistic injury modifiers. The script is small enough to not care, but flexible enough to participate.
Free, Because It Should Be
Agency-Seatbelt ships at €0 forever. A basic safety mechanic shouldn't be behind a paywall. Use it, fork it, modify it — we don't care. Every server using our free scripts is a server that might one day buy our premium ones, and we're playing the long game.
Installation & Setup
Agency-Seatbelt is free and has zero dependencies. Download from GitHub or the Tebex free tier, drop the folder into your resources directory, and add ensure agency-seatbelt to server.cfg. The resource starts working immediately on the next server restart. No database, no framework, no configuration required.
If you want to customize the keybind, ticket integration, or HUD indicator behavior, open config.lua. The defaults are sensible for most servers — many server owners run Agency-Seatbelt for months without ever touching the config.
Configuration Options
The config.lua covers the interaction and consequence settings:
- Buckle keybind — the key players press to fasten and unfasten. Default: B (same as many legacy seatbelt scripts for familiar muscle memory).
- Ejection threshold — vehicle speed at which an unbuckled player is ejected on collision. Default: 50 km/h.
- Ejection force — how far the player is thrown on ejection. Higher values are more dramatic; lower values are more realistic.
- Damage on ejection — health and armor removed when a player ejects without a seatbelt. Configurable separately from ejection force.
- HUD indicator — whether a small belt icon appears on the HUD when unbuckled while in a vehicle. Requires Agency-Hud or exports a position event for custom HUDs.
- Police command — enable
/checkbeltfor police to check the seatbelt state of a nearby vehicle's occupants. - Passenger enforcement — whether passengers as well as drivers are ejected when unbuckled. Default: enabled.
Framework Compatibility
Agency-Seatbelt has no framework dependencies. The ejection and damage logic uses native FiveM vehicle and ped manipulation functions that work identically on any server. The optional police command uses a simple permission check — implement Config.IsPolice(src) for any custom job system, or disable the command entirely if unneeded.
Why This Matters for Roleplay
The design philosophy behind Agency-Seatbelt is that the smallest mechanical touches accumulate into server character. A server with seatbelts, sitting, custom notifications, and a polished HUD feels fundamentally different from one without — even if a player can't articulate exactly why. Seatbelts are one line in that list of quiet signals that say "this server takes care of the details."
The law enforcement angle is where this script generates the most active RP value. Police characters on servers with Agency-Seatbelt have a new soft traffic enforcement tool. A traffic stop that starts with "I noticed your passenger wasn't buckled" is a better RP opening than a pretext that everyone knows is fictional. The small detail gives officers a realistic reason to interact with civilians, which opens scenarios that wouldn't otherwise happen.
Chase scenes change meaningfully when drivers know that high-speed collisions have real consequences. The calculus around "do I risk a crash to lose them?" becomes more interesting when one outcome involves flying through a windshield. That tension is exactly the kind that makes chases more than just a speed comparison between two vehicles.
Vehicle passengers become invested in driver behavior. A passenger who knows they'll pay consequences for a reckless driver's decisions will ask the driver to slow down, argue about routes, or get out rather than risk the drive. These are micro-RP moments that simply don't exist without the consequence system the seatbelt creates.
Frequently Asked Questions
Does ejection work in all vehicle types?
Ejection works in cars, trucks, and vans. Motorcycles and bicycles use a separate (reduced) ejection force since physics behaves differently. Helicopters and planes disable seatbelt checks by default — aircraft ejection creates more grief scenarios than RP value. You can enable aircraft checks in config.lua if your server has specific aviation RP needs.
Can we give traffic fines for seatbelt violations?
Yes. Agency-Seatbelt fires a server-side event agency-seatbelt:violation with player ID and vehicle net ID when a police check reveals an unbuckled occupant. Your police or fine script listens to this event and applies whatever fine system your server uses. The seatbelt script handles detection; your fine script handles economic consequences.
Does the ejection mechanic interact with deathscreen scripts?
Agency-Seatbelt fires agency-seatbelt:onEjection before dealing damage. Deathscreen scripts that listen to health change events pick up the damage naturally. For tighter integration (custom injury types, scene crime data), listen to the ejection event directly and add your logic there.
Is there a way to disable ejection in certain zones (like racing tracks)?
Yes. Use exports['agency-seatbelt']:DisableInZone(coords, radius) from any server script. Ejection is suppressed for all players within that radius. Call it during an event setup and remove the zone after. This prevents seatbelt mechanics from interfering with racing events or other scenarios where vehicle crashes are expected and non-consequence.
Requirements
- FiveM server (any framework or standalone)
- Free — no Tebex license required
- No database dependency
- No external resource dependencies
