Installation Guide
This guide covers how to install and configure ARS Ambulance on your FiveM server.
Prerequisites
Section titled “Prerequisites”- FiveM server running latest recommended artifact
- ESX (1.1+) or QBCore framework installed
- ox_lib (version 3.0+ for radial menu features)
- MySQL database access
- Admin access to server.cfg
Installation Steps
Section titled “Installation Steps”1. Download and Place Resource
Section titled “1. Download and Place Resource”Download ARS Ambulance v2.6 and place it in your server resources folder:
server-data/resources/[ARS]/ars_ambulance/2. Configure Language
Section titled “2. Configure Language”CRITICAL: Add the following to your server.cfg:
setr ox:locale enReplace en with your preferred language code. Available languages:
en- Englishde- Germanes- Spanishfr- Frenchpt-br- Portuguese (Brazil)ru- Russianzh-cn- Chinese (Simplified)
3. Configure Framework
Section titled “3. Configure Framework”Open config.lua and set your framework:
Config.Framework = 'esx' -- Options: 'esx', 'qb' (default: 'esx')Config.AmbulanceJob = 'ambulance'4. Remove Old Ambulance Jobs
Section titled “4. Remove Old Ambulance Jobs”ARS Ambulance provides compatibility for esx_ambulancejob and qb-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-ambulancejobNote: ARS Ambulance replaces these resources entirely. Do not run them simultaneously.
5. Add to Server Config
Section titled “5. Add to Server Config”Add to your server.cfg after your framework and ox_lib:
ensure ox_libensure mysql-asyncensure qb-core # or es_extendedensure ars_ambulance6. Restart Server
Section titled “6. Restart Server”Restart your server to load ARS Ambulance.
Database Setup
Section titled “Database Setup”ARS Ambulance requires database modifications to track player death status and death counts.
ESX Database Setup
Section titled “ESX Database Setup”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.
QBCore Database Setup
Section titled “QBCore Database Setup”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 0This ensures the death count is tracked for each player.
Configure Discord Webhooks (Optional)
Section titled “Configure Discord Webhooks (Optional)”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 deathsConfig.ReviveLogs = true -- Log admin revivesConfig.LogIPaddresse = true -- Include IP addressesWarning: Logging IP addresses may have privacy implications. Ensure compliance with your server’s privacy policy.
Configure Inventory Items
Section titled “Configure Inventory Items”ARS Ambulance requires specific items to be registered in your inventory system. Add these items to your inventory’s items file.
Required Items
Section titled “Required Items”| 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 Example
Section titled “ox_inventory Example”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-inventory Example
Section titled “qb-inventory Example”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)'}QBCore Items Reference
Section titled “QBCore Items Reference”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.
Custom Item Names
Section titled “Custom Item Names”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'}Copy Item Images
Section titled “Copy Item Images”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.pngNote: Restart your inventory resource or server after copying images if they don’t appear immediately.
Optional Integrations
Section titled “Optional Integrations”Inventory System
Section titled “Inventory System”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 optionsTarget System
Section titled “Target System”The target system automatically detects and integrates with installed target systems:
Config.TargetSystem = true -- Enable target system integrationSupported:
- qtarget
- qb-target
- ox_target
When enabled, you can interact with players, medical bags, and stretchers using the target system’s UI.
Fuel System
Section titled “Fuel System”Config.FuelSystem = 'default' -- Options: 'legacy', 'ox', 'ps', 'default'Billing System
Section titled “Billing System”Config.BillingSystem = 'esx' -- Options: 'okok', 'qb', 'esx', 'pefcl', falseESX Off-Duty Job (Optional)
Section titled “ESX Off-Duty Job (Optional)”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.
Verification
Section titled “Verification”- Start your server
- Join as a player with ambulance job
- Test going on duty at the hospital
- Verify the EMS menu opens with F6
- Test spawning a vehicle from the garage
- Test target system interactions (if enabled)
- Verify injury system and treatment items work
- 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.