QBCore Installation
Install oxide-ems on QBCore — items, disabling qb-ambulancejob, and what the QBCore compatibility shim keeps working.
QBCore-specific steps for oxide-ems. Follow Installation first — this page only covers what differs on QBCore.
Disable qb-ambulancejob
oxide-ems replaces it entirely. Running both will fight over the death state.
If you start resources one by one in server.cfg, remove or comment out the line:
# ensure qb-ambulancejobIf you start a whole folder (ensure [qb]), the resource starts because it is inside that folder, so removing a line is not enough. Move the folder out:
resources/[qb]/qb-ambulancejob -> resources/[disabled]/qb-ambulancejobDo not add ensure [disabled] to your config. Anything in there stays off.
oxide-ems declares provide 'qb-ambulancejob', so scripts that check whether that resource exists keep working after it is gone.
Do not delete qb-core. QBCore itself has no death handling of its own — only two metadata fields, isdead and inlaststand, that qb-ambulancejob used to maintain. oxide-ems maintains them now, so qb-inventory, qb-phone, qb-hud and qb-radialmenu keep behaving correctly around death.
What oxide-ems takes over on QBCore
QBCore is the framework where oxide-ems inherits the most, because qb-ambulancejob owned the whole death loop and nothing in qb-core replaces it.
oxide-ems runs:
- the downed (laststand) phase and its bleedout timer
- the dead phase and the hold-E respawn
- the downed screen overlay
- the hospital respawn teleport
- the
isdead/inlaststandmetadata
Timings for all of that live under Field Care → Downed in /ems settings.
Downed players can be finished off. A player in laststand is resurrected at 150 health and is not invincible, which matches how stock qb-ambulancejob behaved. Further damage kills them properly.
Register the items
Open qb-core/shared/items.lua and paste these into the item list. These are the exact names oxide-ems looks for — do not rename them:
-- Oxide EMS
['medical_bag'] = { name = 'medical_bag', label = 'Medical Bag', weight = 3000, type = 'item', image = 'medical_bag.png', unique = true, useable = true, shouldClose = true, description = 'A packed EMS bag. Use it to unpack the supplies inside.' },
['medical_bandage'] = { name = 'medical_bandage', label = 'Medical Bandage', weight = 100, type = 'item', image = 'medical_bandage.png', unique = false, useable = true, shouldClose = true, description = 'A sterile bandage used to stop bleeding.' },
['medical_splint'] = { name = 'medical_splint', label = 'Splint', weight = 300, type = 'item', image = 'medical_splint.png', unique = false, useable = true, shouldClose = true, description = 'A rigid splint used to set fractures.' },
['medical_surgical_kit'] = { name = 'medical_surgical_kit', label = 'Surgical Kit', weight = 1500, type = 'item', image = 'medical_surgical_kit.png', unique = false, useable = false, shouldClose = true, description = 'A sterile kit required for surgical procedures.' },oxide-medical needs three cure items as well. If you are installing both (and you should be), add these too:
-- Oxide Medical
['antacid'] = { name = 'antacid', label = 'Antacid', weight = 100, type = 'item', image = 'antacid.png', unique = false, useable = true, shouldClose = true, description = 'Relieves nausea and stomach sickness.' },
['antibiotics'] = { name = 'antibiotics', label = 'Antibiotics', weight = 100, type = 'item', image = 'antibiotics.png', unique = false, useable = true, shouldClose = true, description = 'Treats bacterial infections.' },
['antiviral'] = { name = 'antiviral', label = 'Antiviral', weight = 100, type = 'item', image = 'antiviral.png', unique = false, useable = true, shouldClose = true, description = 'Treats viral infections.' },Weights, labels and descriptions are sensible defaults — change them to taste. The item names must stay as written.
Items you already have
QBCore ships firstaid, bandage, ifaks and painkillers, and oxide-ems re-registers all four as usable items. Nothing to add.
ifaks and bandage heal the same small amount stock QBCore did, and ifaks still relieves stress through qb-hud. painkillers keeps its consumable role but no longer suppresses damage effects — that behaviour belonged to qb-ambulancejob's own wound and bleed system, which left with the resource, so there is no wound state left for it to act on. Injuries on a QBCore server running oxide-ems are tracked by oxide-medical and treated by medics.
firstaid is also the default item medics need to revive and stabilize. Change it under Field Care in /ems settings, or enter none there to require no item at all.
Nothing else is missing
Every item in the medical bag's default contents is either registered in the step above or already stock on QBCore. The bag also hands over one firstaid — it works out your framework's first-aid item automatically, so there is no extra item to register.
Copy the images
Copy every .png from oxide-ems/itemimages/ into:
qb-inventory/html/images/That covers medical_bag, medical_bandage, medical_splint, medical_surgical_kit, antacid, antibiotics and antiviral. Stock QBCore items such as firstaid, bandage and painkillers already have their own images.
What the QBCore shim keeps working
You should not have to change any other resource. These surfaces are re-provided:
| Surface | Who uses it |
|---|---|
hospital:server:emergencyAlert | qb-radialmenu's dead-radial EMS button |
hospital:server:ambulanceAlert | Police resources relaying "officer down" |
hospital:client:CheckStatus / TreatWounds / RevivePlayer | qb-radialmenu EMS options |
hospital:client:Revive / KillPlayer / adminHeal | qb-adminmenu, txAdmin |
hospital:client:SetLaststand | o-link's DownPlayer — stock QBCore never registered this, so this is new |
hospital:server:SetDeathStatus / SetLaststandStatus | Anything reading the death metadata |
hospital:server:resetHungerThirst | The admin heal path |
hospital:GetDoctors callback | Robbery scripts and anything gating on medic count |
exports['oxide-ems']:GetDoctorCount() | The replacement for qb-ambulancejob's export |
txAdmin:events:healedPlayer | The txAdmin heal button |
Usable items ifaks, bandage, painkillers, firstaid | Players |
/revive, /aheal, /kill, /status, /heal, /revivep | Admins and medics |
One deliberate improvement over stock: medical items are consumed only when the action finishes, not the moment they are used. Cancelling a bandage no longer eats the bandage.
Set up the EMS job
The department's internal name in /ems admin must match a job in qb-core/shared/jobs.lua. Stock QBCore ships an ambulance job, so naming the department ambulance needs no change.
If you name the department something else, add a matching job to qb-core/shared/jobs.lua first, so other QBCore resources recognise it.
Grades in /ems admin should line up with the grades on that QBCore job.
Restart the whole server
Not restart oxide-ems. The stretcher prop is streamed and needs a full server start to register. See Installation — Restart the whole server.
Verification on QBCore
qb./ems admin opens; create a department named ambulance with grades and a facility.G sends a distress signal.qb-inventory behaves correctly while you are dead — the metadata is being kept truthful.qb-radialmenu while downed and confirm the EMS alert button still works./revive and confirm you are healed and standing.medical_bag and confirm the supplies arrive.