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.lua and shared/config/*.lua are copied into the shared oxide_settings table.
  • 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:

  1. 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.
  2. 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.
  3. 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 settings

Admin 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).

SettingFileWhat it is
Config.Stabilize.BlockingConditionsshared/config/stabilize.luaWhich conditions must be treated before a patient can be stabilized
Config.Surgery.SurgicalConditionsshared/config/surgery.luaExact condition types that require an operating table
Config.StationMarkers scaling keysshared/config.luaUpdateInterval, 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

SettingDefaultWhat it does
Debug logging (advanced)OffPrints debug messages to the console. Also required for the /ems test simulations.
Multi-department enrolmentOffLets 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 bagsee belowThe usable kit item and what it unpacks into.

Medical bag

FieldDefault
Bag itemmedical_bag
Include first-aid itemOn
Contentsmedical_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

SettingDefaultWhat it does
Require facility clock-inOnMedics 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 interval900000 ms (15 min)How often an on-duty medic is paid. Applies from their next clock-in.
Use banking accountsOnDepartment treasuries are real bank accounts (requires oxide-banking). Off: the balance is a column on the department row.
Starting treasury balance30000What a department's bank account is created with, the first time that department loads.
Treasury-funded salariesOnSalaries 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 daysUnclaimed 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

SettingDefaultWhat it does
Locker slots40Slots in a medic's personal locker stash.
Locker max weight100000Weight limit of that stash.
Facility zone radius1.0 mDefault size of an interaction point's zone. A radius set while placing a specific point overrides this.
Facility zone distance1.5 mHow close you have to be for a facility interaction to become usable.
Garage zone radius1.5 mDefault size of a garage's interaction zone.
Station markerssee belowThe 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

FieldDefaultWhat it does
Visibility range750 mMarkers beyond this do not render.
Max visible3How many of the nearest in-range markers show at once.
Point height offset1.5 mHow high above an interaction point the card floats.
Fallback height offset5.0 mHow 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

FieldDefaultWhat 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 stabilizedOnEvery 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 time15000 msHow long the revive takes.
Medic payout700Paid to the medic's bank per successful revive.
Patient charge0Invoiced to the patient per revive. 0 disables patient billing.
Max distance3.0 mHow 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

FieldDefaultWhat it does
Required item(framework default)Same rule as the revive item.
Stabilize time12000 msHow long stabilizing takes.
Max distance3.0 mHow far the medic may stray.
Medic payout0Paid to the medic per stabilization. 0 disables.
Destabilize on reinjuryOnA fresh wound cancels the stabilization and restarts the patient's timers.
Block respawn while stabilizedOnA stabilized dead player cannot give up and respawn — they are under care.
Stabilization timeout600 sHow long a stabilization holds before it lapses and the timers resume.
Procedure hold timeout600 sHow 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 outOnA 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 key47 (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 interval10000 msQbox 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

FieldDefaultWhat it does
Severity threshold4Any active condition at or above this severity marks the patient critical. 4 is the medical system's own "critical" level.
Critical weapons27 entriesThe 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.

FieldDefaultWhat it does
Laststand time360 sHow long a player stays downed and revivable before bleeding out. QBCore only — ESX has no laststand phase and goes straight to dead.
Respawn available after300 sHow long after full death before giving up becomes possible.
Respawn hold time5 sHow long the respawn key must be held.
Respawn control ID38 (E)The hold-to-respawn key.
Respawn fee0Charged 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 respawnKeep everythingWhat 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 health100%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.

ConditionPriceSuppliesTime
retained_bullet900medical_surgical_kit ×120000 ms
gunshot250medical_bandage ×18000 ms
laceration200medical_bandage ×16000 ms
cardiac_arrest1200none15000 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:

CategoryPriceSuppliesTime
fracture600none10000 ms
disease400none8000 ms
sickness150none5000 ms
wound250none6000 ms

Severity multiplier

Severity1234
Multiplier1.01.251.52.0

Applied to whichever price was resolved. A severity-4 fracture with no specific entry costs 600 × 2.0 = 1200.

Clinic

FieldDefaultWhat it does
Medic cut30%Share of each treatment invoice paid to the treating medic's bank. The rest is logged as department revenue.
Examine distance3.0 mHow 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.

FieldDefaultWhat it does
Position radius4.0 mHow 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 tableOnSurgical conditions can only be treated at a table. Off: they fall back to being treatable anywhere.
Surgical categoriesfracture ≥ 3Condition categories that require a table at or above the given severity.
Monitor height1.6 mHow far above the placed point the in-world monitor floats.
Monitor width / height (size)1.2 m / 0.7 mDefault monitor size. Admins resize each one with the arrow keys while placing it; these apply to monitors placed without a stored size.
Monitor refresh1000 msHow often nearby clients refresh a monitor.
Monitor range35.0 mHow close a player must be for their monitors to receive data.
Lying poseamb@world_human_sunbathe@male@back@base / baseThe pose a patient holds on the table, and the placement preview.
Surgeon animationmini@cpr@char_a@cpr_str / cpr_pumpchest, flags 49Played 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

FieldDefaultWhat it does
Min / max rounds3 / 6Rounds per operation.
Min / max keys per round2 / 5Prompts per round.
Key poolQ W E R A S D F GWhich keys the prompts draw from.
Approach time900 msHow long the ring takes to shrink onto a key — spawn to the perfect moment.
Min / max key gap450 / 1100 msRandom gap between consecutive prompts in a round.
Pause between rounds1400 ms
Intro lead-in1200 msBefore round 1.
Timing windowsperfect 80 ms, good 160 ms, ok 280 msHow far off the beat each grade allows. Outside ok — or never pressed — is a miss.
Scoresperfect 1.0, good 0.9, ok 0.55What each grade is worth.
Severity extra roundsOnSeverity 3 and 4 conditions bias the round count toward the maximum.
Abort counts as failOnAborting 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

FieldDefault
Full success at0.85
Partial success at0.50

At or above full: a clean cure. At or above partial: cured, with a complication. Below partial: failed.

Outcomes

FieldDefaultWhat it does
Partial success addssickness / post_op_complication, severity 1, expires in 1800 sGiven to the patient on a partial success.
Failure addswound / laceration, severity 2Given on a failure, at the body part you were operating on.
Destabilize patientOnA failed operation destabilizes a stabilized patient.
Bill on failOffInvoice the patient and pay the medic even when the operation fails.
Max inflicted conditions2Ceiling 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

FieldDefaultWhat it does
Camera distance1.5 mHow far in front of a standing patient the camera sits.
Top-down height2.2 mCamera height above a patient on the ground.
Table top-down height1.1 mCamera height above a patient on an operating table — tighter, so the patient fills the screen.
Marker refresh40 msHow often the on-body dots are re-projected onto the screen.
Body dots7 regionsThe clickable regions, each tracking a real ped bone.

The seven regions and the body parts that group onto them:

RegionBoneGroups
head31086HEAD, NECK
torso24817UPPER_BODY, SPINE
abdomen11816LOWER_BODY
left_arm61163LARM, LHAND, LFINGER
right_arm28252RARM, RHAND, RFINGER
left_leg58271LLEG, LFOOT
right_leg36864RLEG, RFOOT

Conditions with no body part — illnesses, sicknesses — group onto the torso.

X-ray

FieldDefaultWhat it does
Scan radius2.5 mHow 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 radius4.0 mHow close the medic and patient must both be to place a patient on the machine.
Scan time6000 ms
Screen height1.6 mHow far above the placed point the screen floats.
Screen width / height (size)1.6 m / 0.9 mDefault screen size. Admins resize each one with the arrow keys while placing it.
Lying poseamb@world_human_sunbathe@male@back@base / baseThe 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

FieldDefaultWhat it does
Alert debounce60 sHow 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 cooldown30 sHow long a player must wait between manual distress signals. Also governs /911e, clinic reception pages and understaffed bed-request alerts.
Extra alert jobsambulance, emsJobs 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

FieldDefaultWhat it does
Prop modelfernocotThe streamed stretcher prop.
Stretcher vehiclesambulance, firetruk, ambulance2Vehicle models that carry a stretcher in the rear.
Rear distance3.0 mHow close to the vehicle's rear taking out and stowing work.
Take-out offset0.0, -4.0, 0.0Where the stretcher appears relative to the vehicle.
Lie offset0.020, 0.000, 2.100The patient's position relative to the prop's centre.
Lie heading86°Heading offset when lying. 0 puts the feet toward the head end.
Lie poseamb@world_human_sunbathe@male@back@base / base
Drag offset-0.190, 1.520, -0.960Where the stretcher sits relative to the medic while being pushed.
Drag rotation0.0, 1.0, 96.0Its rotation while being pushed.
Patient max distance3.0 mHow 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 restartrestart oxide-ems is not enough.

Beds

FieldDefaultWhat it does
Heal time60000 msHow long a bed stay takes to heal to full.
Heal tick5000 msHow often the heal applies while occupied.
Self check-in fee500Charged 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-in2Self 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 modela_m_y_business_03The ghost patient shown while placing a bed.
Allow downed check-inOnDowned 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 key45 (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 radius5.0 mHow close a player must be to a bed or reception desk to check in.
Waive stabilization when short-staffedOnCritical 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 radius3.0 mHow 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 onlyOffOn: only on-duty medics see "Check In Nearby". Players can still check themselves in either way.
Clear injuries on bed reviveOffOn: 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

FieldDefaultWhat it does
Strip cash on bleedoutOffTake 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_societyOffRegisters the EMS society with esx_society, for servers running society add-ons alongside this resource.

Job table sync

FieldDefaultWhat it does
EnabledOffWrites 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 startOnSync when the resource starts.
Sync on changeOnSync whenever a department or grade changes.
Zero framework salaryOnWrites 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 typeemsWritten 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

FieldDefaultWhat it does
Mirror employmentOnMirrors 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.