ERS (Emergency Response Simulator)¶
PulseCAD integrates with Emergency Response Simulator (night_ers), the FiveM callout system. When an officer accepts an ERS callout, it becomes a real call on the CAD board, and it stays in step with the callout from there: arriving puts the officer on scene, completing closes the call out.
The point is that ERS callouts stop being invisible to dispatch. A dispatcher watching the board sees what units are actually doing, on the same board as every other call, with the same notes, timers and history.
What happens, and when¶
| In ERS | In PulseCAD |
|---|---|
| Officer accepts a callout | A call is created, named after the callout, at the callout's postal. The accepting officer is attached as primary and set ENROUTE. Caller name, callout details and requested units are added as call notes. |
| Officer arrives | That unit goes ON SCENE, which starts the per-call safety timer, if a dispatcher is in service. |
| Callout completed or ended | The call is closed (disposition ERS CALLOUT COMPLETED / ERS CALLOUT ENDED) and every attached unit returns to AVAILABLE. |
Callouts are matched to their call automatically, so accepting the same callout twice won't create a duplicate.
Why accepting, and not offering
ERS offers the same callout to several players individually, and most offers are declined. Creating a call at that point would fill your board with callouts nobody took. Accepting is the first moment a callout has a real officer on it.
Setup¶
- Run
night_erson your server. - In the CAD, open Admin → FiveM, enable ERS integration, then re-download / reload the resource. (It is a per-community toggle and is off by default.)
That's usually all of it. Postals are what place the call (see below), and every community already has a set; you only need step 3 if yours isn't the standard one.
- (Only if your community calls out a non-standard postal set.) Choose it under Admin → Dispatch & CAD → Maps & Postals.
There is nothing to wire up. PulseCAD listens for ERS's own integration events, and it does so alongside anything else already using them: ps-dispatch, DrSnyder86's ERS-Integration, your own scripts. Nothing is intercepted or taken over, and PulseCAD never reads another resource's database.
Turning it on
Changing the ERS toggle in Admin → FiveM applies live; installed servers pick it up within about 10 seconds (or press Push update). No restart needed just to enable or disable it.
Postals place the call¶
ERS describes a callout's location as a postal code and a street name; it does not give coordinates. PulseCAD looks that postal up in your community's postal pack to put the call on the map.
If you have never chosen a pack, you are on New & Improved, the FiveM standard (Virus_City) set of about 1,687 postals, which is what most communities call out and what ERS itself uses. That is the normal case and it needs no setup.
You only need to change it if your community calls out a different set. PulseCAD bundles OCRP, Oulsen (satellite) and the original 2017 set, and you can upload your own as a JSON array of { code, x, y }. All of it lives under Admin → Dispatch & CAD → Maps & Postals.
- Postal is in your pack → the call lands on the map at the right place, blips work, and "nearest unit" is meaningful.
- Postal is not in your pack → the call is still created with its street name, but has no map position. The call carries a note saying exactly that, so it's obvious what happened rather than looking like a bug.
The call is not where the officer was standing
A callout is placed at the callout's own postal, not at wherever the officer happened to be when they accepted it, which is usually nowhere near it.
Self-initiated traffic stops¶
An ERS pullover opens the same call as the MDT's Traffic Stop button and the in-game /ts command; there is nothing separate to learn or configure. Pull a car over and PulseCAD:
- opens a TRAFFIC STOP call at your location and attaches you on scene;
- runs the plate automatically and attaches the full return as a note, including the registered owner;
- records the driver's name on the call.
Releasing the driver closes the call and puts you back available, so you can go straight into the next stop.
If a stop never gets released (you drive off, the script hiccups) the next stop you make replaces it rather than being blocked, because you cannot be on two traffic stops at once. The abandoned one closes as ERS STOP SUPERSEDED.
Callouts are never replaced
A unit can only be on one active call, and a callout outranks a traffic stop: if you are on one, a pullover will not open a stop and will not close your callout. You are told in game which call to clear, so it never just silently fails.
Prefer to clear stops yourself?
Set Config.Ers.closeOnPulloverEnd = false in config.lua and releasing the driver leaves the call open for you to clear from the MDT with a disposition: citation, warning, arrest, gone on arrival.
ERS people and vehicles become records¶
ERS invents a full identity for every NPC and car it generates: name, date of birth, address, phone, plate, make, colour. None of that exists in the CAD, so before this a lookup on an ERS character correctly returned no results: the CAD was being asked about someone who had never existed in it.
Now, the first time an officer IDs a ped or runs a car, ERS hands that identity over and PulseCAD mirrors it into your records. From that moment the person and the vehicle are ordinary CAD records: searchable in Person and Plate lookups, attachable to reports, warrants and calls, exactly like a player's civilian.
What comes across:
| Person | Name, date of birth, sex, address, phone, SSN, and photo |
| Licences | Driver and CDL with their real numbers and status; a motorcycle entitlement rides as an endorsement. A class ERS says they don't hold simply isn't there |
| Markers | Every flag ERS raised (wanted, active warrant, armed and dangerous, and the rest) recorded on the person, along with whether they were drunk or under the influence at the time |
| Vehicle | Plate, year, make, model, colour, insurance, stolen status, and the registered owner linked to the person |
So the person is findable three ways: by name, by SSN, and by driver licence number, which is what a stop actually runs on.
Two things follow from that, both deliberate:
- A lookup before first contact still returns nothing. The CAD only knows the NPCs your officers have actually met. That is not a failure; nobody has encountered that person yet.
- Mirrored records are tagged as ERS-generated. They never get confused with your players' own civilians, and they can be cleared out later without touching real ones.
Records already in the CAD are never overwritten. If an officer corrects a mirrored person, a later contact fills only the fields still blank; and if an ERS car happens to share a plate with one of your players' registered vehicles, the player's record wins, and their registration, insurance and stolen flag are left alone.
How long they're kept¶
Mirrored records are kept for 30 days, then the unused ones are removed. "Unused" is strict: a person is only removed if nobody ever charged them and no warrant was ever issued against them, and a vehicle only if it was never impounded or reported stolen.
Anything an officer actually acted on stays permanently; it is part of your records now, not a leftover from a callout. The licences and vehicle that came across with a person are not "use": they are the mirror itself, so they go when an unused person does.
To change the window, set ersRetentionDays in your community's FiveM settings; 0 keeps mirrored records forever.
Wanted flags
When ERS marks a ped wanted, that is recorded as a note on the person. It does not raise a CAD warrant; warrants are yours to issue, through the normal report and approval flow.
When the officer isn't available¶
Two cases are handled deliberately, and neither loses the callout:
- The officer isn't linked or isn't on duty. The call still appears on the board, pending and unassigned, for a dispatcher to assign. (Players link once with
/cadlink; see Overview & Install.) - The officer is already on another call. They are not pulled off it. The new callout lands pending, with a note naming the call they're on, and dispatch decides.
If something isn't coming through¶
ERS is a paid resource and its payload has changed between versions, so if callouts, people or vehicles aren't reaching the CAD, the fastest way to see why is to look at what ERS actually sent.
In config.lua, set:
Restart the resource, then trigger the thing that isn't working: accept a callout, ID a ped, run a car. PulseCAD prints the raw data it received to both places, so it doesn't matter which one you have access to:
- the FXServer console, for whoever runs the server;
- the in-game F8 console of the player who triggered it, for whoever is actually testing.
Look for a line beginning [pulsecad] ERS accept raw, ERS ped raw, or ERS vehicle raw, followed by the payload. Send us that line and we can tell immediately whether a field name has moved.
Turn Config.Debug back off when you're done; it is noisy.
Other callout scripts¶
If you run a callout system that isn't ERS, you can bridge it yourself. Trigger this server event when a callout starts:
TriggerEvent('pulsecad:ers:callout', {
name = 'Armed Robbery in Progress',
x = 1234.5, -- optional; world coords
y = -567.25,
street = 'Vespucci Boulevard',
})
With no player attached, PulseCAD creates the call and assigns the nearest available unit by road (not by straight line; see Dispatch).