Configuration Reference
Every oxide-ems setting, what it does, and its shipped default — settings live in the database and are edited in-game through /ems settings.
Every setting in oxide-ems, what it does, and what it is set to out of the box.
Where settings actually live
This is the most important thing to understand before you change anything.
oxide-ems keeps its settings in a database table, not in its config files.
- On the very first boot, the values in
shared/config.luaandshared/config/*.luaare copied into the sharedoxide_settingstable. - From then on, the database is what the server reads. The config files are no longer consulted at startup.
- Settings are changed in-game with
/ems settings. Changes save to the database and take effect immediately — no restart, no resource reload. - Each setting has a Reset to default button, which restores the value from the config file as it reads today.
Practical consequences:
- Editing a config file on a server that has already booted once does nothing — until you press Reset to default on that setting, which re-reads the file.
- When you update
oxide-ems, any settings that are new in the update are seeded from the new config files automatically. Existing settings keep your customised values. - If you want to configure a server before it ever starts, editing the config files works fine — that is what they are for.
Opening the editor:
/ems settingsAdmin only. The panel has a search box, a Basic and an Advanced tier, and four categories in the sidebar: Core, Medical, Operations and Integration.
The three file-only settings
Three sub-settings are not exposed in the in-game editor and can only be changed in the config files. Because the database copy wins after first boot, changing them on a running server takes two steps: edit the file, then press Reset to default on the setting group that contains them (which re-reads the whole group from the file, discarding your other in-game edits to that group).
| Setting | File | What it is |
|---|---|---|
Config.Stabilize.BlockingConditions | shared/config/stabilize.lua | Which conditions must be treated before a patient can be stabilized |
Config.Surgery.SurgicalConditions | shared/config/surgery.lua | Exact condition types that require an operating table |
Config.StationMarkers scaling keys | shared/config.lua | UpdateInterval, ScaleMin, ScaleMax, ScaleNearDist, ScaleFarDist |
Everything else on this page is editable in /ems settings.
What is not a setting at all
Departments, facilities, interaction points, grades, garages, the vehicle fleet, uniforms, radio channels and the supply shop catalog are not settings. They are built in-game through /ems admin and stored in their own database tables. See Admin.
Core
General
| Setting | Default | What it does |
|---|---|---|
| Debug logging (advanced) | Off | Prints debug messages to the console. Also required for the /ems test simulations. |
| Multi-department enrolment | Off | Lets one character hold a place in several EMS departments at once, each with its own rank and badge, following whichever job they currently have active. Off: hiring somebody who already works elsewhere transfers them. |
| Medical bag | see below | The usable kit item and what it unpacks into. |
Medical bag
| Field | Default |
|---|---|
| Bag item | medical_bag |
| Include first-aid item | On |
| Contents | medical_bandage ×5, medical_splint ×2, medical_surgical_kit ×1, antibiotics ×2, antiviral ×2, antacid ×2, painkillers ×2, bandage ×5 |
Using the bag consumes it first (so a full inventory cannot duplicate it), then hands over the contents. Anything that does not fit — or any item name your inventory does not recognise — is skipped, the medic is told some supplies didn't fit, and it is written to the log.
Include first-aid item adds your framework's own first-aid item on top of the contents above — firstaid on QBCore and Qbox, medikit on ESX. Because the name is worked out when the bag is used, the same default list works on every framework. Turn it off if you would rather list a first-aid item yourself under Contents.
Renaming the bag item registers the new name immediately, with no restart. The old name stays registered as usable for the rest of the session but no longer unpacks anything — clear the old item out of players' inventories, or restart when convenient.
Duty & Payroll
| Setting | Default | What it does |
|---|---|---|
| Require facility clock-in | On | Medics must clock in at a placed clock-in point. Off: /ems duty toggles duty from anywhere, and the session is attributed to the department's first facility. |
| Salary interval | 900000 ms (15 min) | How often an on-duty medic is paid. Applies from their next clock-in. |
| Use banking accounts | On | Department treasuries are real bank accounts (requires oxide-banking). Off: the balance is a column on the department row. |
| Starting treasury balance | 30000 | What a department's bank account is created with, the first time that department loads. |
| Treasury-funded salaries | On | Salaries are debited from the department treasury, and ticks the treasury cannot fund accrue as back pay for a boss to settle. Off: salaries are paid by the framework and back pay never accrues. |
| Unpaid payroll decay (advanced) | 30 days | Unclaimed back-pay rows older than this are dropped at server start. 0 never expires them. |
On the two salary modes. With Treasury-funded on, a department that runs out of money stops paying — but the medic is not simply skipped. The tick is recorded as back pay, the medic is told (at most once a minute), and the boss sees the total in their management panel and can settle it once the treasury recovers. Settlement pays oldest debts first and only as far as the balance stretches; offline medics are paid where the framework supports it.
Facilities
| Setting | Default | What it does |
|---|---|---|
| Locker slots | 40 | Slots in a medic's personal locker stash. |
| Locker max weight | 100000 | Weight limit of that stash. |
| Facility zone radius | 1.0 m | Default size of an interaction point's zone. A radius set while placing a specific point overrides this. |
| Facility zone distance | 1.5 m | How close you have to be for a facility interaction to become usable. |
| Garage zone radius | 1.5 m | Default size of a garage's interaction zone. |
| Station markers | see below | The hold-H in-world cards. |
Lockers are per character, per facility — a medic's locker at one hospital is not their locker at another.
Station markers
| Field | Default | What it does |
|---|---|---|
| Visibility range | 750 m | Markers beyond this do not render. |
| Max visible | 3 | How many of the nearest in-range markers show at once. |
| Point height offset | 1.5 m | How high above an interaction point the card floats. |
| Fallback height offset | 5.0 m | How high above the building the card floats when a facility has no clock-in point placed. |
File-only (shared/config.lua): UpdateInterval (0 = every frame), ScaleMin 0.5, ScaleMax 1.0, ScaleNearDist 30.0, ScaleFarDist 300.0 — the card shrinks with distance between the two distances.
Medical
Field Care
Revive
| Field | Default | What it does |
|---|---|---|
| Required item | (framework default) | Item the medic must carry, consumed on success. Blank means firstaid on QBCore and Qbox, medikit on ESX. Enter none to require no item. |
| Require stabilized | On | Every street revive needs a stabilized patient, and the overlay offers Stabilize or Revive, never both. Off: non-critical patients can be revived directly and both actions stay available. |
| CPR time | 15000 ms | How long the revive takes. |
| Medic payout | 700 | Paid to the medic's bank per successful revive. |
| Patient charge | 0 | Invoiced to the patient per revive. 0 disables patient billing. |
| Max distance | 3.0 m | How far the medic may stray before the revive fails. |
Critical patients can never be revived on the street regardless of these settings — that is the triage rule, not a toggle. Patient charges are delivered as banking invoices; without a banking provider the charge is skipped and a warning is logged rather than the money being taken by force.
Stabilize
| Field | Default | What it does |
|---|---|---|
| Required item | (framework default) | Same rule as the revive item. |
| Stabilize time | 12000 ms | How long stabilizing takes. |
| Max distance | 3.0 m | How far the medic may stray. |
| Medic payout | 0 | Paid to the medic per stabilization. 0 disables. |
| Destabilize on reinjury | On | A fresh wound cancels the stabilization and restarts the patient's timers. |
| Block respawn while stabilized | On | A stabilized dead player cannot give up and respawn — they are under care. |
| Stabilization timeout | 600 s | How long a stabilization holds before it lapses and the timers resume. |
| Procedure hold timeout | 600 s | How long the timer freeze survives with nobody attending. While a medic is actually working — CPR, a stabilization, an operation, or a patient lying on an operating table — the freeze is refreshed continuously. This is the abandonment timeout, not the treatment timeout. |
| Patient can climb out | On | A downed patient can leave a stopped vehicle themselves, so nobody is stranded when their medic disconnects. Never available while the vehicle is moving. |
| Climb-out key | 47 (G) | The prompt key. The targeting eye does not work while downed, so this is the only input the patient has. Do not use 38 (E) — that is bound to hold-to-respawn. |
| QBX top-up interval | 10000 ms | Qbox only. How often a stabilized patient's game client re-freezes qbx_medical's countdown. |
File-only — blocking conditions (shared/config/stabilize.lua). Conditions that must be treated in the field before a stabilization will take. Ships as gunshot and laceration, both pointing at the "stop the bleeding first" message. These are also the only conditions a medic can treat on a patient lying in the street.
Critical
| Field | Default | What it does |
|---|---|---|
| Severity threshold | 4 | Any active condition at or above this severity marks the patient critical. 4 is the medical system's own "critical" level. |
| Critical weapons | 27 entries | The fallback when there is no medical record to read: the patient is critical if they were put down by one of these. Ships with high-calibre rifles, every shotgun, and explosives. |
The weapon fallback is not used when oxide-medical is running — severity is. It also cannot work on Qbox with oxide-medical stopped, because qbx_medical does not report what put a player down; a warning is logged once and critical detection is simply off in that combination.
Downed
These timings apply on QBCore and ESX, where oxide-ems runs the downed/dead loop. On Qbox, qbx_medical owns them instead.
| Field | Default | What it does |
|---|---|---|
| Laststand time | 360 s | How long a player stays downed and revivable before bleeding out. QBCore only — ESX has no laststand phase and goes straight to dead. |
| Respawn available after | 300 s | How long after full death before giving up becomes possible. |
| Respawn hold time | 5 s | How long the respawn key must be held. |
| Respawn control ID | 38 (E) | The hold-to-respawn key. |
| Respawn fee | 0 | Charged to the player's bank for respawning at a hospital, credited to that hospital's department. 0 disables. Skipped, never blocking, if they cannot afford it. |
| Lose items on respawn | Keep everything | What giving up costs. Keep everything / Lose weapons only / Lose everything. Applies on every framework, not just QBCore and ESX. A medic or admin revive never takes anything. |
| Respawn health | 100% | Health restored on respawn, as a share of the range above the game's floor of 100. |
Treatments & Clinic
Treatment price book
Per-condition pricing, keyed by condition type. Each entry sets a price, the supplies consumed from the treating medic, and the treatment time.
| Condition | Price | Supplies | Time |
|---|---|---|---|
retained_bullet | 900 | medical_surgical_kit ×1 | 20000 ms |
gunshot | 250 | medical_bandage ×1 | 8000 ms |
laceration | 200 | medical_bandage ×1 | 6000 ms |
cardiac_arrest | 1200 | none | 15000 ms |
Add a row for any condition type you want priced specifically.
Category defaults
Anything not in the price book falls back to its category:
| Category | Price | Supplies | Time |
|---|---|---|---|
fracture | 600 | none | 10000 ms |
disease | 400 | none | 8000 ms |
sickness | 150 | none | 5000 ms |
wound | 250 | none | 6000 ms |
Severity multiplier
| Severity | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| Multiplier | 1.0 | 1.25 | 1.5 | 2.0 |
Applied to whichever price was resolved. A severity-4 fracture with no specific entry costs 600 × 2.0 = 1200.
Clinic
| Field | Default | What it does |
|---|---|---|
| Medic cut | 30% | Share of each treatment invoice paid to the treating medic's bank. The rest is logged as department revenue. |
| Examine distance | 3.0 m | How close a medic must be to examine or treat a patient away from an operating table. |
The patient is invoiced through banking, not charged directly. Without a banking provider, the medic still takes their cut, the patient is not billed, and a warning is logged.
Surgery
Covers the operating table and the keypress minigame that every treatment runs through — in the field, at a doctor's office and on the table alike.
| Field | Default | What it does |
|---|---|---|
| Position radius | 4.0 m | How close the medic and patient must both be to the table spot to place a patient, and how close the medic must stay while operating on the table. |
| Require operating table | On | Surgical conditions can only be treated at a table. Off: they fall back to being treatable anywhere. |
| Surgical categories | fracture ≥ 3 | Condition categories that require a table at or above the given severity. |
| Monitor height | 1.6 m | How far above the placed point the in-world monitor floats. |
| Monitor width / height (size) | 1.2 m / 0.7 m | Default monitor size. Admins resize each one with the arrow keys while placing it; these apply to monitors placed without a stored size. |
| Monitor refresh | 1000 ms | How often nearby clients refresh a monitor. |
| Monitor range | 35.0 m | How close a player must be for their monitors to receive data. |
| Lying pose | amb@world_human_sunbathe@male@back@base / base | The pose a patient holds on the table, and the placement preview. |
| Surgeon animation | mini@cpr@char_a@cpr_str / cpr_pumpchest, flags 49 | Played on the medic while operating. Flag 49 is an upper-body loop so the surgeon stays standing; flag 1 would drop them into the full-body CPR pose on the floor. |
File-only — surgical conditions (shared/config/surgery.lua). Exact condition types that require a table, on top of the category rule. Ships as retained_bullet.
Minigame
| Field | Default | What it does |
|---|---|---|
| Min / max rounds | 3 / 6 | Rounds per operation. |
| Min / max keys per round | 2 / 5 | Prompts per round. |
| Key pool | Q W E R A S D F G | Which keys the prompts draw from. |
| Approach time | 900 ms | How long the ring takes to shrink onto a key — spawn to the perfect moment. |
| Min / max key gap | 450 / 1100 ms | Random gap between consecutive prompts in a round. |
| Pause between rounds | 1400 ms | |
| Intro lead-in | 1200 ms | Before round 1. |
| Timing windows | perfect 80 ms, good 160 ms, ok 280 ms | How far off the beat each grade allows. Outside ok — or never pressed — is a miss. |
| Scores | perfect 1.0, good 0.9, ok 0.55 | What each grade is worth. |
| Severity extra rounds | On | Severity 3 and 4 conditions bias the round count toward the maximum. |
| Abort counts as fail | On | Aborting mid-operation (double ESC) is a failed surgery rather than a free retry. |
Read the scores against the grading thresholds below. Accuracy is the mean score across every prompt, so a run that lands every key in one band scores exactly that band's value. good (0.9) therefore has to sit above the full-success threshold (0.85), or clean play could never earn a clean operation. If you lower the scores, lower the thresholds with them.
Grading
| Field | Default |
|---|---|
| Full success at | 0.85 |
| Partial success at | 0.50 |
At or above full: a clean cure. At or above partial: cured, with a complication. Below partial: failed.
Outcomes
| Field | Default | What it does |
|---|---|---|
| Partial success adds | sickness / post_op_complication, severity 1, expires in 1800 s | Given to the patient on a partial success. |
| Failure adds | wound / laceration, severity 2 | Given on a failure, at the body part you were operating on. |
| Destabilize patient | On | A failed operation destabilizes a stabilized patient. |
| Bill on fail | Off | Invoice the patient and pay the medic even when the operation fails. |
| Max inflicted conditions | 2 | Ceiling on how many still-active conditions this resource has given one patient. At the cap, a botched operation adds nothing (it still fails and still costs the supplies). Operating on a condition surgery itself caused never adds another. 0 disables outcome conditions entirely. |
The condition types under Outcomes are not checked against the medical system's catalog. Custom types work, but a patient will only show symptoms for a type the medical resource also defines.
Diagnosis & X-ray
Diagnosis
| Field | Default | What it does |
|---|---|---|
| Camera distance | 1.5 m | How far in front of a standing patient the camera sits. |
| Top-down height | 2.2 m | Camera height above a patient on the ground. |
| Table top-down height | 1.1 m | Camera height above a patient on an operating table — tighter, so the patient fills the screen. |
| Marker refresh | 40 ms | How often the on-body dots are re-projected onto the screen. |
| Body dots | 7 regions | The clickable regions, each tracking a real ped bone. |
The seven regions and the body parts that group onto them:
| Region | Bone | Groups |
|---|---|---|
head | 31086 | HEAD, NECK |
torso | 24817 | UPPER_BODY, SPINE |
abdomen | 11816 | LOWER_BODY |
left_arm | 61163 | LARM, LHAND, LFINGER |
right_arm | 28252 | RARM, RHAND, RFINGER |
left_leg | 58271 | LLEG, LFOOT |
right_leg | 36864 | RLEG, RFOOT |
Conditions with no body part — illnesses, sicknesses — group onto the torso.
X-ray
| Field | Default | What it does |
|---|---|---|
| Scan radius | 2.5 m | How close the patient must be to the machine's patient spot to be scanned. Falls back to the screen's own position when no patient spot is placed. |
| Position radius | 4.0 m | How close the medic and patient must both be to place a patient on the machine. |
| Scan time | 6000 ms | |
| Screen height | 1.6 m | How far above the placed point the screen floats. |
| Screen width / height (size) | 1.6 m / 0.9 m | Default screen size. Admins resize each one with the arrow keys while placing it. |
| Lying pose | amb@world_human_sunbathe@male@back@base / base | The pose a patient holds while positioned lying down. |
Scan results are broadcast to every x-ray screen within 30 metres, so the patient sees their own result.
Operations
Dispatch
| Field | Default | What it does |
|---|---|---|
| Alert debounce | 60 s | How long before another automatic down/death alert can fire for the same patient. Covers both events, so a player bleeding out inside the window does not alert twice. |
| Distress cooldown | 30 s | How long a player must wait between manual distress signals. Also governs /911e, clinic reception pages and understaffed bed-request alerts. |
| Extra alert jobs | ambulance, ems | Jobs that receive EMS alerts in addition to every enabled EMS department name. Department names are added automatically, so this is for non-EMS jobs you want copied in. |
Alerts always broadcast regardless of how many medics are on duty — routing is the dispatch system's job.
Stretcher
| Field | Default | What it does |
|---|---|---|
| Prop model | fernocot | The streamed stretcher prop. |
| Stretcher vehicles | ambulance, firetruk, ambulance2 | Vehicle models that carry a stretcher in the rear. |
| Rear distance | 3.0 m | How close to the vehicle's rear taking out and stowing work. |
| Take-out offset | 0.0, -4.0, 0.0 | Where the stretcher appears relative to the vehicle. |
| Lie offset | 0.020, 0.000, 2.100 | The patient's position relative to the prop's centre. |
| Lie heading | 86° | Heading offset when lying. 0 puts the feet toward the head end. |
| Lie pose | amb@world_human_sunbathe@male@back@base / base | |
| Drag offset | -0.190, 1.520, -0.960 | Where the stretcher sits relative to the medic while being pushed. |
| Drag rotation | 0.0, 1.0, 96.0 | Its rotation while being pushed. |
| Patient max distance | 3.0 m | How close a downed patient must be to be placed on it. |
The stretcher prop is streamed by this resource. Changing the model, or updating the resource's streamed files, needs a full server restart — restart oxide-ems is not enough.
Beds
| Field | Default | What it does |
|---|---|---|
| Heal time | 60000 ms | How long a bed stay takes to heal to full. |
| Heal tick | 5000 ms | How often the heal applies while occupied. |
| Self check-in fee | 500 | Charged to the patient's bank for checking themselves in, credited to the department. Medic-assisted check-ins are free — the treatment and revive billing covers those. |
| Medics to block self check-in | 2 | Self check-in is refused once this many medics are on duty; the patient is told to call a doctor and on-duty EMS get an alert. 0 never blocks. |
| Preview ped model | a_m_y_business_03 | The ghost patient shown while placing a bed. |
| Allow downed check-in | On | Downed and dead players can check themselves in at a bed or reception desk, and anyone nearby can check a downed player in. Still subject to the fee and the medics-on-duty block. Turn off to require a medic. |
| Downed check-in key | 45 (R) | The prompt key for a downed player. The targeting eye is dead while downed, so this is their only input. Do not use 38 (E) — it is hold-to-respawn, so sharing the key would check the player in and then respawn them straight back out of the bed. |
| Check-in radius | 5.0 m | How close a player must be to a bed or reception desk to check in. |
| Waive stabilization when short-staffed | On | Critical patients normally need stabilizing before a bed accepts them. Waived while on-duty medics are below the block threshold, because nobody is available to do it. Off keeps the requirement no matter what. |
| Nearby patient radius | 3.0 m | How far "Check In Nearby" reaches for bodies. Keep it tight, or it picks up patients on the other side of the ward. |
| Nearby check-in is medics only | Off | On: only on-duty medics see "Check In Nearby". Players can still check themselves in either way. |
| Clear injuries on bed revive | Off | On: a bed revive also wipes every injury, illness and fracture, so the patient leaves completely healthy. Off: being revived puts them back on their feet, but whatever put them down still needs treating. Beds restore health either way, and a conscious patient healing in a bed always keeps their injuries. |
Fleet
The catalog of vehicles a department boss can buy from the treasury. Ships empty — add the models installed on your server.
Each row is a model (spawn name), a label, a type (car / helicopter / boat) and a cost.
The type decides which garage a purchase can go into and how the vehicle is spawned. Cost, label and type are always resolved from this catalog on the server — the buying UI only sends which model was picked, so a modified client cannot buy a helicopter for one dollar.
An empty catalog is handled gracefully: the boss panel shows an empty-catalog notice and hides the buy button; admins can still add vehicles directly by typing a model name.
Integration
Framework Compat (advanced)
Only the block matching your detected framework applies.
ESX
| Field | Default | What it does |
|---|---|---|
| Strip cash on bleedout | Off | Take the player's cash and black money when they bleed out and respawn — the stock esx_ambulancejob behaviour. Items and weapons are governed by Lose items on respawn under Field Care, which applies on every framework. |
| Register esx_society | Off | Registers the EMS society with esx_society, for servers running society add-ons alongside this resource. |
Job table sync
| Field | Default | What it does |
|---|---|---|
| Enabled | Off | Writes oxide-ems departments and grades into ESX's own jobs and job_grades tables, so xPlayer.job works for custom department names. This writes to your framework's tables — turn it on deliberately. |
| Sync on start | On | Sync when the resource starts. |
| Sync on change | On | Sync whenever a department or grade changes. |
| Zero framework salary | On | Writes 0 into the ESX grade salary. oxide-ems pays its own duty salaries, so leaving the ESX salary in place would pay medics twice. |
| Job type | ems | Written to the jobs.type column when your schema has one. |
A department named after a job that already exists (ambulance, for example) updates that job's rows rather than creating a duplicate.
g-multijob
| Field | Default | What it does |
|---|---|---|
| Mirror employment | On | Mirrors hires, fires and promotions into g-multijob's menu. No-op unless g-multijob is installed. |
Pairs with Multi-department enrolment. Without multi-department, oxide-ems owns the character's single framework job outright and mirroring would only add phantom menu entries.
QBCore and Qbox
No toggles. Both frameworks are handled entirely by their compatibility shims — see QBCore and Qbox.