Skip to content

Installation Guide

This guide covers how to install and configure ARS Ambulance on your FiveM server.

  • FiveM server running latest recommended artifact (OneSync Infinity required for Qbox)
  • ESX (1.1+), QBCore, or Qbox framework installed
  • ox_lib (version 3.0+ for radial menu features)
  • MySQL database access
  • Admin access to server.cfg

Download ARS Ambulance and place it in your server resources folder:

server-data/resources/[ARS]/ars_ambulance/

Note: The NUI (death screen overlay) is pre-built and included in the html/ folder. No build tools are required — do not edit or rebuild the html/ folder.

CRITICAL: Add the following to your server.cfg:

setr ox:locale en

Replace en with your preferred language code. Available languages:

  • en - English
  • de - German
  • es - Spanish
  • fr - French
  • pt-br - Portuguese (Brazil)
  • ru - Russian
  • zh-cn - Chinese (Simplified)

Open config.lua and set your framework:

Config.Framework = 'esx' -- Options: 'esx', 'qb', 'qbox' (default: 'esx')
Config.AmbulanceJob = 'ambulance'

ARS Ambulance provides compatibility for esx_ambulancejob, qb-ambulancejob, and qbx_ambulancejob. Remove or disable these resources from your server.cfg to prevent conflicts:

# remove or comment out old ambulance jobs:
# ensure esx_ambulancejob
# ensure qb-ambulancejob
# ensure qbx_ambulancejob

Note: ARS Ambulance replaces these resources entirely. Do not run them simultaneously.

Add to your server.cfg after your framework and ox_lib:

ensure ox_lib
ensure oxmysql
ensure qb-core # or es_extended, or qbx_core for qbox
ensure ars_ambulance

For Qbox servers, make sure ox_inventory starts before ars_ambulance:

ensure ox_lib
ensure oxmysql
ensure qbx_core
ensure ox_inventory
ensure qbx_smallresources # recommended: metadata persistence for deaths
ensure qb-banking # required for society billing (qbx_management has no society funds)
ensure ars_ambulance

Restart your server to load ARS Ambulance.

  1. Replace the resource folder with the new version.
  2. Restart the resource in-game or restart your server.

Tip: The escrow system preserves your edits in the ignored files (config.lua, hospital/*.lua, data.lua, and the customize files), but always keep a backup of your configuration before updating.

ARS Ambulance requires database modifications to track player death status and death counts.

Import the SQL file located at _install_me/esx/sql/users.sql into your database:

ALTER TABLE `users` DROP COLUMN IF EXISTS `is_dead`;
ALTER TABLE `users` ADD COLUMN IF NOT EXISTS `is_dead` BOOLEAN NOT NULL DEFAULT 0 AFTER `status`;
ALTER TABLE `users` DROP COLUMN IF EXISTS `deaths`;
ALTER TABLE `users` ADD COLUMN IF NOT EXISTS `deaths` int(255) NOT NULL DEFAULT 0 AFTER `is_dead`;

You can also import the optional items SQL file at _install_me/esx/sql/items.sql to add medical items to your ESX database.

For QBCore, add the deaths field to the CheckPlayerData function in your QBCore core files.

In qb-core/server/player.lua, locate the CheckPlayerData function and add:

PlayerData.metadata['deaths'] = PlayerData.metadata['deaths'] or 0

This ensures the death count is tracked for each player.

Qbox tracks death/inlaststand/deaths in player metadata, so no manual SQL is required.

  • Deaths metadata: qbx_smallresources persists the deaths metadata (used by the anti combat-log / max death count feature). Ensure it is installed and enabled.
  • ox_inventory items: Add the medical items to ox_inventory/data/items.lua (see ox_inventory Example) - Qbox uses ox_inventory for all items.
  • EMS equipment storage: The per-player EMS stash is registered automatically with ox_inventory when players open it - no extra setup.
  • Society billing: For the qb/qbox billing option, install qb-banking so bills are credited to the ambulance job account. The framework adapter also auto-detects Renewed-Banking, ars_banking, bablo-banking, fd_banking, hate-bank, just-banks, kartik-banking, okokBanking/okokBankingV2, origen_banking, p_banking, pc-banking, prism_banking, qs-banking, RxBanking, snipe-banking, tgg-banking, tgiann-bank, and wasabi_banking. Without any detected banking resource, the patient is still billed but the society account is not credited (a warning is logged).

For death and revive logging, configure Discord webhooks in server/sv_customize.lua:

Webhooks = {
deathLogs = {
webhook = 'YOUR_DISCORD_WEBHOOK_URL',
color = 15548997 -- Red
},
reviveLogs = {
webhook = 'YOUR_DISCORD_WEBHOOK_URL',
color = 15548997 -- Red
}
}

Enable logging in config.lua:

Config.DeathLogs = true -- Log player deaths
Config.ReviveLogs = true -- Log admin revives
Config.LogIPaddresse = true -- Include IP addresses

Warning: Logging IP addresses may have privacy implications. Ensure compliance with your server’s privacy policy.

ARS Ambulance requires specific items to be registered in your inventory system. Add these items to your inventory’s items file.

Item Used For
defibrillator Reviving unconscious patients
medikit Healing injured players
sedative Sedating patients
medbag Deployable medical bag with supplies
crutch Mobility aid for injured players
wheelchair Mobility aid for injured players
tweezers Treating gunshot wounds
suturekit Treating stab wounds
icepack Treating blunt force injuries
burncream Treating burn injuries
stretcher Transporting patients
morphine10 Pain medication (10MG)
morphine30 Pain medication (30MG)
percocet5 Pain medication (5MG)
percocet10 Pain medication (10MG)
percocet30 Pain medication (30MG)
vicodin5 Pain medication (5MG)
vicodin10 Pain medication (10MG)

ox_inventory/data/items.lua:

['defibrillator'] = {
label = 'Defibrillator',
weight = 2500,
stack = false,
close = true,
description = 'Used to revive unconscious patients'
}
['medikit'] = {
label = 'Medikit',
weight = 1000,
stack = true,
close = true,
description = 'Used to heal injured players'
}
['sedative'] = {
label = 'Sedative',
weight = 100,
stack = true,
close = true,
description = 'Used to sedate patients'
}
['medbag'] = {
label = 'Medical Bag',
weight = 2000,
stack = false,
close = true,
description = 'Contains medical supplies'
}
['crutch'] = {
label = 'Crutch',
weight = 500,
stack = true,
close = true,
description = 'Mobility aid for injured players'
}
['wheelchair'] = {
label = 'Wheelchair',
weight = 5000,
stack = false,
close = true,
description = 'Mobility aid for injured players'
}
['tweezers'] = {
label = 'Tweezers',
weight = 100,
stack = true,
close = true,
description = 'Used to treat gunshot wounds'
}
['suturekit'] = {
label = 'Suture Kit',
weight = 200,
stack = true,
close = true,
description = 'Used to treat stab wounds'
}
['icepack'] = {
label = 'Ice Pack',
weight = 200,
stack = true,
close = true,
description = 'Used to treat blunt force injuries'
}
['burncream'] = {
label = 'Burn Cream',
weight = 150,
stack = true,
close = true,
description = 'Used to treat burn injuries'
}
['stretcher'] = {
label = 'Stretcher',
weight = 1000,
stack = true,
close = true,
description = 'Used for transporting patients'
}
['morphine10'] = {
label = 'Morphine 10MG',
weight = 2,
stack = true,
close = true,
description = 'Pain medication (10MG)'
}
['morphine30'] = {
label = 'Morphine 30MG',
weight = 2,
stack = true,
close = true,
description = 'Pain medication (30MG)'
}
['percocet5'] = {
label = 'Percocet 5MG',
weight = 2,
stack = true,
close = true,
description = 'Pain medication (5MG)'
}
['percocet10'] = {
label = 'Percocet 10MG',
weight = 2,
stack = true,
close = true,
description = 'Pain medication (10MG)'
}
['percocet30'] = {
label = 'Percocet 30MG',
weight = 2,
stack = true,
close = true,
description = 'Pain medication (30MG)'
}
['vicodin5'] = {
label = 'Vicodin 5MG',
weight = 2,
stack = true,
close = true,
description = 'Pain medication (5MG)'
}
['vicodin10'] = {
label = 'Vicodin 10MG',
weight = 2,
stack = true,
close = true,
description = 'Pain medication (10MG)'
}

qb-core/shared/items.lua:

['defibrillator'] = {
name = 'defibrillator',
label = 'Defibrillator',
weight = 2500,
type = 'item',
image = 'defibrillator.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Used to revive unconscious patients'
}
['medikit'] = {
name = 'medikit',
label = 'Medikit',
weight = 1000,
type = 'item',
image = 'medikit.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Used to heal injured players'
}
['sedative'] = {
name = 'sedative',
label = 'Sedative',
weight = 100,
type = 'item',
image = 'sedative.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Used to sedate patients'
}
['medbag'] = {
name = 'medbag',
label = 'Medical Bag',
weight = 2000,
type = 'item',
image = 'medbag.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Contains medical supplies'
}
['crutch'] = {
name = 'crutch',
label = 'Crutch',
weight = 500,
type = 'item',
image = 'crutch.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Mobility aid for injured players'
}
['wheelchair'] = {
name = 'wheelchair',
label = 'Wheelchair',
weight = 5000,
type = 'item',
image = 'wheelchair.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Mobility aid for injured players'
}
['tweezers'] = {
name = 'tweezers',
label = 'Tweezers',
weight = 100,
type = 'item',
image = 'tweezers.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Used to treat gunshot wounds'
}
['suturekit'] = {
name = 'suturekit',
label = 'Suture Kit',
weight = 200,
type = 'item',
image = 'suturekit.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Used to treat stab wounds'
}
['icepack'] = {
name = 'icepack',
label = 'Ice Pack',
weight = 200,
type = 'item',
image = 'icepack.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Used to treat blunt force injuries'
}
['burncream'] = {
name = 'burncream',
label = 'Burn Cream',
weight = 150,
type = 'item',
image = 'burncream.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Used to treat burn injuries'
}
['stretcher'] = {
name = 'stretcher',
label = 'Stretcher',
weight = 1000,
type = 'item',
image = 'stretcher.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Used for transporting patients'
}
['morphine10'] = {
name = 'morphine10',
label = 'Morphine 10MG',
weight = 2,
type = 'item',
image = 'morphine10.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Pain medication (10MG)'
}
['morphine30'] = {
name = 'morphine30',
label = 'Morphine 30MG',
weight = 2,
type = 'item',
image = 'morphine30.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Pain medication (30MG)'
}
['percocet5'] = {
name = 'percocet5',
label = 'Percocet 5MG',
weight = 2,
type = 'item',
image = 'percocet5.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Pain medication (5MG)'
}
['percocet10'] = {
name = 'percocet10',
label = 'Percocet 10MG',
weight = 2,
type = 'item',
image = 'percocet10.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Pain medication (10MG)'
}
['percocet30'] = {
name = 'percocet30',
label = 'Percocet 30MG',
weight = 2,
type = 'item',
image = 'percocet30.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Pain medication (30MG)'
}
['vicodin5'] = {
name = 'vicodin5',
label = 'Vicodin 5MG',
weight = 2,
type = 'item',
image = 'vicodin5.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Pain medication (5MG)'
}
['vicodin10'] = {
name = 'vicodin10',
label = 'Vicodin 10MG',
weight = 2,
type = 'item',
image = 'vicodin10.png',
unique = false,
useable = true,
shouldClose = true,
description = 'Pain medication (10MG)'
}

For QBCore servers, ready-to-use item definitions are available in _install_me/qb/items.txt.

This file contains both old and new QBCore formats. Choose the format that matches your QBCore version.

If you use different item names, update config.lua:

Config.EMSItems = {
sedate = { item = 'your_sedative_name' },
heal = { item = 'your_medikit_name' },
revive = { item = 'your_defibrillator_name' },
medbag = 'your_medbag_name'
}
Config.CrutchAndWheelchair = {
crutch = { item = 'your_crutch_name' },
wheelchair = { item = 'your_wheelchair_name' }
}
Config.ItemsNeededForTreatment = {
shot = 'your_tweezers_name',
stabbed = 'your_suturekit_name',
beat = 'your_icepack_name',
burned = 'your_burncream_name'
}

ARS Ambulance includes 18 item images in _install_me/item_images/. Copy these to your inventory’s image folder so items display correctly in-game.

Common destination paths:

  • ox_inventory: ox_inventory/web/images/
  • qb-inventory: qb-inventory/html/images/
  • qs-inventory: qs-inventory/html/images/
  • ps-inventory: ps-inventory/html/images/
  • esx_inventory: esx_inventory/html/images/

Included images:

burncream.png, crutch.png, defibrillator.png, icepack.png, medbag.png,
medikit.png, morphine10.png, morphine30.png, percocet5.png, percocet10.png,
percocet30.png, sedative.png, stretcher.png, suturekit.png, tweezers.png,
vicodin5.png, vicodin10.png, wheelchair.png

Note: Restart your inventory resource or server after copying images if they don’t appear immediately.

Configure your inventory system in config.lua:

Config.Inventory = 'ox' -- Options: 'ox', 'qb', 'qs', 'mf', 'esx', 'ak47', 'custom'
-- Note: 'ps' (ps-inventory) and 'lj' (lj-inventory) are qb-based options
-- Qbox servers must use 'ox' (ox_inventory is required on qbox)

The target system automatically detects and integrates with installed target systems:

Config.TargetSystem = true -- Enable target system integration

Supported:

  • qtarget
  • qb-target
  • ox_target

When enabled, you can interact with players, medical bags, and stretchers using the target system’s UI.

Config.FuelSystem = 'default' -- Options: 'legacy', 'ox', 'ps', 'default'
Config.BillingSystem = 'esx' -- Options: 'okok', 'qb', 'esx', 'pefcl', 'custom', false
Framework Recommended Society account credited by
ESX esx esx_billing (on payment, into society_ambulance)
QBCore qb qb-banking
Qbox qb or qbox qb-banking (required - qbx_management has no funds)

For ESX servers, you can add an off-duty ambulance job to allow EMS personnel to go off-duty while keeping the ambulance job.

Import _install_me/esx/sql/OffDutyESXJobSQL.sql into your database:

INSERT INTO `jobs` (`name`, `label`, `whitelisted`) VALUES
('offambulance', 'Ambulance', 1);
INSERT INTO `job_grades` (`job_name`, `grade`, `name`, `label`, `salary`, `skin_male`, `skin_female`) VALUES
('offambulance', 0, 'offambulance', 'Off Duty', 100, '{}', '{}'),
('offambulance', 1, 'offambulance', 'Off Duty', 100, '{}', '{}'),
('offambulance', 2, 'offambulance', 'Off Duty', 100, '{}', '{}'),
('offambulance', 3, 'offambulance', 'Off Duty', 100, '{}', '{}');

This creates an offambulance job that players can switch to when going off-duty.

  1. Start your server
  2. Join as a player with ambulance job
  3. Test going on duty at the hospital
  4. Verify the EMS menu opens with F6
  5. Test spawning a vehicle from the garage
  6. Test target system interactions (if enabled)
  7. Verify injury system and treatment items work
  8. Check death/revive logging (if webhooks configured)

Note: This guide is written by a third party. If you find any incorrect or outdated information, please contact us on Discord so we can update it for you.