I spent several days looking for a simple/straightforward Extras and Livery menu for emergency vehicles. Mostly, what I found was either
- too complex
- UI was too conspicuous
- cost too much $$
- Didn’t have all the features to modify modern vehicles
I decided to build a simple, lightweight, EmergencyVehicleMenu that anyone could use and edit easily. I like the simplicity of using OX_lib. It always looks clean and you can make server-wide menu and notification changes easily.
Overview
Zero-Configuration Emergency Vehicle Modification System
A next-generation FiveM script that automatically configures everything for emergency vehicle modifications across all
major frameworks. No manual setup required - just install and it works!
Requirements
- Standalone Mode - No framework dependencies required
- ox_lib - For UI components
- OxMysql - For database operations
- Framework (Optional) - Auto-detects QBCore, QBox, ESX
Key Features
Core Functionality
- Multi-Framework Auto-Detection: Works with QBCore, QBox (qbx_core), ESX, or Standalone
- Job-Based Access Control: Restrict by job AND grade (configurable per zone)
- Location-Based Zones: Modify vehicles at designated PD, Fire, and EMS locations
- Custom Vehicle Detection: Manual vehicle list for add-on cars that bypass Class 18
- Vehicle Liveries: Apply standard and custom YFT liveries to vehicles
- Custom Livery Management: Add, remove, and organize custom liveries directly in-game
- Performance Upgrades: Engine, brakes, transmission, suspension, armor, and turbo
- Appearance Customization: Colors, wheels, window tints, neon lights, and more
- Vehicle Extras: Toggle up to 20 vehicle extras (lightbars, pushbars, etc.)
- Door Controls: Individual control for doors, hood, and trunk
- Field Repair System: Emergency repairs outside stations (requires item)
What’s New in v2.2.0
Accessibility Improvements
Lowered Grade Requirements - All zones now use minGrade = 0 (Cadets/Officers can access)
Better Custom Vehicle Support - Manual vehicle list with easy-to-add examples
Gabz MLO Templates - Commented zone examples for custom buildings
Expanded Job Mappings - Includes statepolice, trooper, saspr, and more
Economy & Balance
Balanced Repair Costs - $350 field / $500 full repair
Job Discounts - 25% off for police, ambulance, fire
Free for Mechanics - Configurable job exemptions
New Features
Undercover Neon Support - Whitelist specific vehicles for neon access
Input Validation - Security for preset/livery names
Named Constants - Easy maintenance for damage thresholds, cooldowns
Technical Improvements
Config Reorganization - 9 clearly labeled sections
Job Caching - Prevents SQL spam (5-minute cache)
QBox Detection Fix - Verified qbx_core checked before qb-core
Removed Duplicate Code - Cleaned up config sections
User Experience
- Intuitive UI: Clean menu system with status indicators
- Visual Zone Indicators: Map blips and ground markers show available modification locations
- Interactive Access: Press E to open the menu when in a garage with an emergency vehicle
- Search Functionality: Find specific liveries quickly with built-in search
- Configuration Saving: Save your favorite vehicle setups
- Auto-apply: Automatically apply saved configurations when entering vehicles
- Preset System: Save and share configurations across your department
Administration
- Easy Configuration: Organized config with clear section headers
- Zone Types: Different visual indicators for police, fire, and medical
- Customizable Features: Enable or disable specific modification types
- Database Integration: Save and load configurations across server restarts
- Debug Mode: Verbose logging for troubleshooting
Commands and Controls
- Press E when in a modification zone to open the menu
Access Control
Access to the vehicle modification menu is restricted to:
- Job-Based: Must have the correct job (police, fire, ambulance, etc.)
- Grade-Based: Configurable minimum grade per zone (default: 0 = all ranks)
- Location-Based: Must be within designated modification zones
- Vehicle-Based: Only emergency vehicles can be modified (configurable)
This approach provides layered security while remaining accessible to all department members.
Configuration
The config.lua file is organized into 9 clear sections:
– [[ 1. CORE SETTINGS ]]
Config.Debug = true – Set FALSE for production
Config.AutoConfigure = true – Auto-detect framework and zones
– [[ 2. FRAMEWORK & PERFORMANCE ]]
Config.AutoDetectFramework = true – Auto-detects QBCore/QBox/ESX
Config.CacheJobInfo = true – Prevents SQL spam (5 min cache)
– [[ 3. JOB ACCESS CONTROL ]]
Config.EnableJobRestrictions = true – Enable job-based restrictions
Config.EnableGradeRestrictions = true – Enable grade requirements
Config.DisableZoneRestrictions = false – Set TRUE for admin testing
– Job name mappings (add your custom job names)
Config.JobMappings = {
police = {‘police’, ‘lspd’, ‘bcso’, ‘sheriff’, ‘sahp’, ‘statepolice’, ‘trooper’},
fire = {‘fire’, ‘lsfd’, ‘firefighter’},
ambulance = {‘ambulance’, ‘ems’, ‘medical’},
}
– [[ 4. ZONE CONFIGURATION ]]
Config.ManualZones = true
Config.ManualModificationZones = {
{
name = “Mission Row PD - Garage”,
coords = vector3(454.6, -1017.4, 28.4),
radius = 30.0,
type = “police”,
requiredJob = “police”,
minGrade = 0, – Grade 0 = ALL ranks can access
jobLabel = “Police Officer”
},
– 11+ pre-configured locations included (PD, Fire, EMS)
– Gabz MLO templates included as comments
}
– [[ 5. VEHICLE DETECTION ]]
Config.ManualVehicleDetection = true – Use manual list for custom cars
Config.ManualEmergencyVehicles = {
– GTA V Defaults included
“police”, “police2”, “police3”, “police4”, “sheriff”, “sheriff2”,
“fbi”, “fbi2”, “firetruk”, “ambulance”, “riot”,
– Add your custom vehicles:
– “nypd_explorer”,
– “bcso_charger”,
– “2020tahoe”,
}
– [[ 6. FEATURE TOGGLES ]]
Config.EnabledModifications = {
Liveries = true,
Extras = true,
Performance = true,
Appearance = true,
Doors = true,
Neon = false, – Enable for unmarked units
Repair = true
}
– Selective neon for undercover vehicles
Config.UndercoverNeon = {
enabled = false,
allowedVehicles = {
– “unmarked_charger”,
– “slicktop_explorer”,
}
}
– [[ 7. ECONOMY ]]
Config.RepairCosts = {
enabled = true,
fullRepairCost = 500,
fieldRepairCost = 350,
freeForJobs = {‘mechanic’},
discountJobs = {
{job = ‘police’, discount = 0.25}, – 25% off
{job = ‘ambulance’, discount = 0.25},
{job = ‘fire’, discount = 0.25}
}
}
Handling Custom Liveries
This script applies custom liveries by referencing .yft files that you have streamed using a separate resource.
- Stream Your Liveries: Ensure your custom vehicle .yft files (and their corresponding .ytd texture dictionaries) are
correctly added to a streaming resource in your server. - Configure Paths: Add entries to Config.CustomLiveries in config.lua or use the in-game ‘Add New Livery’ menu.
- Folder Structure:
[vehiclename]
├── fxmanifest.lua
└── stream
├── vehicle_livery1.yft
├── vehicle_livery2.yft
├── vehicle.yft
└── vehicle_lightbar_standard.yft
Database Tables
CREATE TABLE IF NOT EXISTS vehicle_mods (
id INT NOT NULL AUTO_INCREMENT,
vehicle_model VARCHAR(255) NOT NULL,
extras TEXT DEFAULT NULL,
player_id VARCHAR(255) DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY vehicle_model_unique (vehicle_model)
);
The extras column holds a JSON object containing all saved modifications.
Coming Soon
- Vehicle-specific configuration profiles
- Image preview for liveries
- Comprehensive livery management panel
- Phone integration for remote vehicle prep
Migration from v2.1.x
- Backup your current config.lua
- Install new version
- Add custom zones to Config.ManualModificationZones if needed
- Add custom vehicles to Config.ManualEmergencyVehicles
- Test with Config.Debug = true
Latest Release: Release v2.2.0-DSRP - Accessibility & Configuration Overhaul · DeamonScripts/dps-EmergencyVehicleMenu · GitHub
Support provided only via GitHub issues
| Code is accessible | Yes | Lines (approximately) | 1,200+ | |—|—|—|—|
| Requirements | ox_lib, oxmysql | Support | GitHub Issues | | Assets accessible | Yes | Framework | Optional (auto-detect) |
Or single column style:
| Code is accessible | Yes |
| Lines (approximately) | 1,200+ |
| Requirements | ox_lib, oxmysql |
| Support | GitHub Issues |
| Assets accessible | Yes |
Or just a simple list if tables are rendering weird:
Code is accessible: Yes | Lines: 1,200+ | Requirements: ox_lib, oxmysql | Support: GitHub Issues |
Assets: Yes