Standalone
Agency-Garage
The ultimate garage system for FiveM. Store, retrieve & manage all your vehicles across multiple garage locations with a stunning glassmorphism UI. Vehicle categories (cars, boats, aircraft), live damage & fuel status, impound lot, shared & gang garages, vehicle search and favorites. 13 languages, MySQL persistence & ACE permissions. Auto-detects QBCore, ESX & Standalone.

01 Configuration
Complete config.lua for Agency-Garage. All options documented via inline comments.
--[[
╔══════════════════════════════════════════════════════════════════╗
║ AGENCY GARAGE ║
║ Premium Vehicle Garage System ║
║ (c) Agency Scripts ║
╠══════════════════════════════════════════════════════════════════╣
║ Plug & Play · QBCore / ESX / Standalone · Multi-Phone ready ║
╚══════════════════════════════════════════════════════════════════╝
This file is the ONLY thing you need to touch as a server owner.
Everything is commented. No coding knowledge required.
Framework options (Config.Framework):
'auto' -> Auto-detect QBCore or ESX (recommended)
'qb' -> Force QBCore
'esx' -> Force ESX
'standalone' -> No framework. Vehicles are managed by this script.
]]
Config = {}
-- =====================================================================
-- FRAMEWORK & AUTO-DETECTION
-- =====================================================================
-- Leave this on 'auto'. The script finds your framework, your database,
-- your fuel system, your notify and your text-ui resource by itself.
Config.Framework = 'auto' -- 'auto' | 'qb' | 'esx' | 'standalone'
-- If your qb-core / es_extended is named differently, set it here.
Config.QBCoreResource = 'qb-core'
Config.ESXResource = 'es_extended'
Config.Debug = false -- true = verbose console logs for testing
-- Creates/adds the required database columns on start automatically
-- (standalone table, missing ESX columns ...). Never deletes any data.
Config.AutoSetupDatabase = true
-- =====================================================================
-- LANGUAGE
-- =====================================================================
Config.Locale = 'en' -- See locales/ folder for all 24 supported languages
-- =====================================================================
-- BRIDGES (auto-detected — only force if needed)
-- =====================================================================
-- NOTIFICATIONS: Agency-Notify is the default. Falls back automatically to
-- ox_lib -> framework -> GTA native if Agency-Notify is not installed.
Config.Notify = 'agency' -- 'agency' (default) | 'auto' | 'ox' | 'qb' | 'esx' | 'native'
-- TEXT-UI (the "[E] Open Garage" hint at the marker)
Config.TextUI = 'auto' -- 'auto' | 'ox' | 'jg' | 'qb' | 'native'
-- FUEL: 'auto' detects ox_fuel -> LegacyFuel -> ps-fuel -> cdn-fuel -> native
Config.Fuel = 'auto' -- 'auto' | 'ox_fuel' | 'LegacyFuel' | 'ps-fuel' | 'cdn-fuel' | 'native' | 'none'
-- VEHICLE KEYS: gives the player the keys automatically when taking a vehicle out
Config.VehicleKeys = 'auto' -- 'auto' | 'agency' | 'qb' | 'qs' | 'wasabi' | 'mk' | 'none'
-- =====================================================================
-- MULTI-PHONE INTEGRATION ⭐
-- =====================================================================
-- Agency-Garage writes the vehicle status into the standard 'state' field
-- (0 = out, 1 = stored, 2 = impounded) and 'garage' of player_vehicles /
-- owned_vehicles. Every common phone garage app reads this automatically:
-- qb-phone, lb-phone, gksphone, qs-smartphone, roadphone, yseries and more.
-- Nothing else to do. Set to false to disable.
Config.PhoneSync = true
Config.PhoneSyncEvent = 'garage:vehicleStateChanged' -- extra live event some phones can catch
-- =====================================================================
-- DATABASE COMPATIBILITY (works with any standard vehicleshop)
-- =====================================================================
-- The script reads the standard tables (player_vehicles for QB,
-- owned_vehicles for ESX). Any vehicleshop that writes there is supported.
-- Show ALL of the player's vehicles in every garage (with live status),
-- not only the ones stored in this exact garage.
Config.ShowAllVehicles = true
-- =====================================================================
-- CAYO PERICO GARAGES
-- =====================================================================
-- The garage positions on the Cayo Perico island (imported from the old
-- script) are turned OFF by default. Flip this to true to enable them.
Config.EnableCayoGarages = false
-- =====================================================================
-- VEHICLE PREVIEW
-- =====================================================================
-- Show a real 3D preview of the selected vehicle with an orbit camera
-- before taking it out — not just a small list entry.
Config.Preview = {
enabled = true,
autoRotate = false, -- false = drag with the mouse to rotate (recommended) · true = spins by itself
mouseSensitivity = 0.35, -- how fast the mouse rotates the camera
rotateSpeed = 18.0, -- spin speed when autoRotate is on (degrees per second)
heightOffset = 25.0, -- fallback only, used if a garage has no spawn point
hotspots = true, -- show interactive dots on the vehicle (doors, hood, trunk, windows, interior)
}
-- =====================================================================
-- GENERAL BEHAVIOUR
-- =====================================================================
Config.InteractKey = 38 -- [E] key to open the garage
Config.UseTarget = false -- true = ox_target / qb-target instead of marker+key
Config.DrawDistance = 25.0 -- distance at which markers & text are drawn
Config.InteractDistance = 2.5 -- how close you must be to interact
-- MARKER (the animated icon on the ground where you open the garage)
Config.Marker = {
type = 36, -- marker type (36 = car-ish disc). See fivem marker docs.
size = 0.55,
color = { 0, 212, 255, 180 }, -- cyan {r,g,b,a}
bob = false, -- float up and down
rotate = true, -- spin around
pulse = true, -- subtle size pulse (breathing)
zOffset = 0.25,
}
-- OPEN HINT ("Press E to open the garage")
-- 'notify' = shown via your notify system (Agency-Notify by default) when you walk up
-- 'textui' = persistent text-ui while you stand on the marker
-- 'both' = both
Config.OpenHint = {
mode = 'notify', -- 'notify' | 'textui' | 'both'
}
-- =====================================================================
-- PARK / STORE POINT (separate point to park a vehicle, like the old garage)
-- =====================================================================
-- Each garage has its own 'store' point (imported from the old script).
-- Drive your car onto it and press [E] to park it.
Config.StorePoint = {
enabled = true, -- false = park only via the "Store" button in the list
exitFirst = true, -- true = you step out of the car first, THEN it disappears
marker = {
type = 36,
size = 0.6,
color = { 255, 70, 70, 190 }, -- red {r,g,b,a}
bob = false,
rotate = true,
pulse = true,
zOffset = 0.25,
},
}
Config.SpawnInVehicle = true -- player is placed in the driver seat on take-out
Config.WarpDelay = 250 -- ms before warping in (clean sync)
Config.StoreAnywhere = true -- true = store a vehicle at any garage, no matter where taken
Config.StoreOwnedOnly = true -- true = only own vehicles can be stored
Config.AllowSharedKeys = true -- passengers with a key may store the car
Config.FadeOutOnStore = true -- vehicle fades out smoothly when stored
-- Blacklisted models: these can NEVER be stored (service/job vehicles etc.)
Config.BlacklistedModels = {
'police', 'ambulance', 'firetruk', 'pbus', 'trash',
}
-- =====================================================================
-- IMPOUND / DEPOT
-- =====================================================================
Config.Impound = {
enabled = true,
fee = 500, -- default release fee
feeAccount = 'bank', -- 'bank' | 'cash'
payHigher = true, -- if a higher 'depotprice' is stored, that one applies
}
-- AUTO-IMPOUND ON LOGOUT
-- When a player disconnects, their vehicles that are currently OUT get
-- despawned and moved to the impound. They have to pay to get them back.
Config.ImpoundOnLogout = {
enabled = true, -- master switch (set false to turn the whole thing off)
depot = 'depotlsimpound', -- which depot id the vehicle goes to (see Config.Garages)
fee = 250, -- release fee added on logout-impound (0 = use Config.Impound.fee)
deleteEntity = true, -- also remove the car from the world on logout
}
-- =====================================================================
-- ANTI-CHEAT / SECURITY
-- =====================================================================
Config.SaveCondition = true -- fuel, engine & body damage are saved
Config.SaveMods = true -- tuning/mods are saved and restored
Config.AntiSpamMs = 800 -- minimum delay between two actions per player (ms)
-- =====================================================================
-- CAMERA / SHOWROOM (when taking a vehicle out)
-- =====================================================================
Config.Camera = {
enabled = false, -- optional showroom camera that orbits the garage while the list is open (the vehicle preview is the main feature)
height = 1.2,
distance = 5.5,
rotateSpeed = 12.0, -- degrees per second
}
-- =====================================================================
-- VEHICLE IMAGES FOR THE UI
-- =====================================================================
-- 'spawn' -> uses html/img/vehicles/<spawnname>.png (e.g. adder.png)
-- 'class' -> one image per category (car.png, air.png, sea.png)
-- 'single' -> always html/img/vehicles/default.png
-- If an image is missing, a clean placeholder icon is shown automatically.
Config.VehicleImages = 'class'
-- =====================================================================
-- BLIPS
-- =====================================================================
Config.Blips = {
enabled = true,
showByCommand = true, -- /garages briefly highlights all garage blips
command = 'garages',
uniformNames = true, -- true = all garages are just called "Garage" on the map, false = uses the label (e.g. "LSPD")
defaultName = 'Garage', -- the default name if uniformNames is true
}
-- =====================================================================
-- CATEGORIES
-- =====================================================================
-- Every garage has a 'category'. Vehicles are matched by their GTA class,
-- so e.g. a heli can only be taken out at an air garage.
Config.Categories = {
car = { label = 'Vehicles', classes = { 0,1,2,3,4,5,6,7,9,10,11,12,17,18,19,20,22 } },
air = { label = 'Aircraft', classes = { 15,16 } },
sea = { label = 'Boats', classes = { 14 } },
}
-- =====================================================================
-- BRANDING (subtle — paid script, no ad spam)
-- =====================================================================
Config.Branding = {
showFooter = true, -- small "Agency Garage" tag at the bottom of the UI
label = 'Agency Garage',
}
-- =====================================================================
-- COMMANDS
-- =====================================================================
Config.Commands = {
addVehicle = 'addvehicle', -- /addvehicle [id] [model] [plate] (mainly standalone)
addVehicleAce = 'command.addvehicle', -- required ACE permission
}
-- =====================================================================
-- TEXT / TRANSLATIONS
-- =====================================================================
-- Translations are now in separate files under locales/.
-- Set your language above with Config.Locale.
-- Supported: en, de, fr, es, esm, pt, it, nl, pl, cs, ro, ru, tr, sv,
-- da, no, fi, hu, sk, hr, bg, uk, el, ja
-- To add your own language, copy locales/en.lua to locales/xx.lua and translate.
-- =====================================================================
-- GARAGE DEFINITIONS (positions imported from the old garage script)
-- =====================================================================
-- type: 'public' (everyone) | 'job' | 'gang' | 'depot' (impound)
-- category: 'car' | 'air' | 'sea'
-- job/gang: only needed for type 'job'/'gang' (string or { 'police', 'ambulance' })
-- access: vector3 — marker position to open the garage
-- spawns: list of vector4 — the script picks the first free spawn point
-- blip: sprite/color/scale — remove to hide the blip
Config.Garages = {
['legion'] = { label = 'Legion Square', type = 'public', category = 'car',
access = vector3(213.6, -809.31, 31.01),
store = vector3(214.32, -793.27, 30.8),
spawns = { vector4(222.16, -804.25, 30.58, 250.0), vector4(223.46, -799.04, 30.58, 250.0), vector4(226.3, -791.58, 30.58, 250.0), vector4(215.43, -775.99, 30.43, 248.98), vector4(232.69, -773.72, 30.32, 249.76) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['alta'] = { label = 'Alta', type = 'public', category = 'car',
access = vector3(278.19, -345.95, 44.92),
store = vector3(294.05, -340.45, 44.92),
spawns = { vector4(266.84, -328.77, 44.5, 249.42), vector4(269.29, -322.26, 44.5, 249.45), vector4(287.66, -329.12, 44.5, 249.52), vector4(283.91, -338.77, 44.5, 249.58), vector4(294.68, -346.56, 44.5, 69.93) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['textilecity'] = { label = 'Textile City', type = 'public', category = 'car',
access = vector3(412.74, -634.35, 28.5),
store = vector3(402.15, -643.13, 28.5),
spawns = { vector4(408.8, -638.68, 28.08, 270.0), vector4(393.08, -638.73, 28.08, 270.81), vector4(393.21, -649.69, 28.08, 270.43), vector4(392.48, -657.72, 28.08, 270.83), vector4(415.9, -649.35, 28.08, 270.51) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['pillboxhill'] = { label = 'Pillbox Hill', type = 'public', category = 'car',
access = vector3(-332.01, -781.39, 33.96),
store = vector3(-331.93, -768.52, 33.97),
spawns = { vector4(-320.15, -752.3, 33.54, 159.86), vector4(-331.77, -750.56, 33.54, 181.7), vector4(-341.29, -756.81, 33.54, 91.4), vector4(-357.49, -764.41, 33.54, 269.31), vector4(-307.79, -756.62, 33.54, 161.04) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['westvinewood'] = { label = 'West Vinewood', type = 'public', category = 'car',
access = vector3(-515.93, 53.0, 52.58),
store = vector3(-529.11, 48.59, 52.58),
spawns = { vector4(-537.01, 40.77, 52.16, 265.99), vector4(-509.52, 65.48, 52.16, 85.36), vector4(-510.96, 55.17, 52.16, 84.34), vector4(-519.69, 66.28, 52.16, 84.99), vector4(-504.47, 54.48, 56.07, 265.69) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['westvinewood2'] = { label = 'West Vinewood 2', type = 'public', category = 'car',
access = vector3(-570.24, 311.83, 84.49),
store = vector3(-561.5, 328.39, 84.41),
spawns = { vector4(-580.68, 314.45, 84.37, 354.67), vector4(-588.58, 335.45, 84.67, 175.84), vector4(-601.55, 345.46, 84.69, 175.98) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['vinewoodhills'] = { label = 'Vinewood Hills', type = 'public', category = 'car',
access = vector3(886.2, -1.13, 78.76),
store = vector3(878.34, -10.78, 78.76),
spawns = { vector4(858.37, -28.97, 78.34, 237.92), vector4(865.02, -45.35, 78.34, 57.82), vector4(890.62, -45.15, 78.34, 57.29) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['vinewoodhills2'] = { label = 'Vinewood Hills 2', type = 'public', category = 'car',
access = vector3(664.45, 630.94, 128.91),
store = vector3(655.81, 631.84, 128.91),
spawns = { vector4(638.47, 606.27, 128.49, 250.49), vector4(654.98, 606.79, 128.49, 71.33), vector4(636.39, 625.62, 128.49, 70.06) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['vinewoodhills3'] = { label = 'Vinewood Hills 3', type = 'public', category = 'car',
access = vector3(-77.07, 907.36, 235.81),
store = vector3(-75.47, 895.6, 235.5),
spawns = { vector4(-66.23, 892.11, 235.13, 115.63), vector4(-71.02, 903.26, 235.19, 114.49) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['harmony'] = { label = 'Harmony', type = 'public', category = 'car',
access = vector3(599.73, 2726.74, 41.91),
store = vector3(593.19, 2730.84, 42.02),
spawns = { vector4(624.26, 2724.0, 41.4, 5.26), vector4(583.25, 2736.76, 41.58, 184.15), vector4(581.21, 2720.36, 41.64, 4.71) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['banhamcanyon'] = { label = 'Banham Canyon', type = 'public', category = 'car',
access = vector3(-3048.89, 611.0, 7.18),
store = vector3(-3041.26, 607.11, 7.5),
spawns = { vector4(-3056.03, 608.34, 6.79, 291.97), vector4(-3053.88, 602.67, 6.87, 289.86), vector4(-3051.78, 596.95, 7.02, 289.15) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['downtownvinewood'] = { label = 'Downtown Vinewood', type = 'public', category = 'car',
access = vector3(364.39, 297.84, 103.49),
store = vector3(372.99, 289.74, 103.27),
spawns = { vector4(386.95, 291.72, 102.63, 165.04), vector4(392.69, 280.48, 102.56, 71.03), vector4(371.48, 266.74, 102.6, 340.53) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['grandsenora'] = { label = 'Grand Senora', type = 'public', category = 'car',
access = vector3(1984.54, 3065.77, 47.01),
store = vector3(1990.1, 3070.05, 47.0),
spawns = { vector4(2012.04, 3055.3, 46.62, 58.94), vector4(2016.86, 3062.81, 46.62, 60.09), vector4(1999.63, 3081.81, 46.65, 148.07) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['sandyshoresmc'] = { label = 'Sandy Shores MC', type = 'public', category = 'car',
access = vector3(1836.58, 3668.21, 33.68),
store = vector3(1844.66, 3663.68, 34.15),
spawns = { vector4(1853.67, 3676.2, 33.33, 210.23), vector4(1831.35, 3663.51, 33.44, 210.09), vector4(1825.11, 3659.53, 33.58, 209.13) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['sanchianski'] = { label = 'San Chianski', type = 'public', category = 'car',
access = vector3(2761.43, 3452.49, 55.84),
store = vector3(2750.55, 3445.04, 56.1),
spawns = { vector4(2775.86, 3436.56, 55.39, 67.43), vector4(2791.24, 3474.5, 54.85, 68.56), vector4(2769.44, 3473.51, 55.08, 67.23) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['mirrorpark'] = { label = 'Mirror Park', type = 'public', category = 'car',
access = vector3(1034.69, -766.03, 58.0),
store = vector3(1025.51, -759.96, 57.99),
spawns = { vector4(1017.16, -760.3, 57.55, 222.93), vector4(1027.52, -785.35, 57.45, 310.28), vector4(1047.0, -785.62, 57.57, 91.26) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['lapuerta'] = { label = 'La Puerta', type = 'public', category = 'car',
access = vector3(-1082.51, -1261.67, 5.61),
store = vector3(-1065.57, -1261.42, 6.01),
spawns = { vector4(-1075.61, -1267.34, 5.48, 299.93), vector4(-1080.98, -1258.0, 5.13, 300.38), vector4(-1074.83, -1240.87, 4.85, 120.24) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['paletobay'] = { label = 'Paleto Bay', type = 'public', category = 'car',
access = vector3(137.66, 6612.97, 31.83),
store = vector3(147.58, 6622.93, 31.77),
spawns = { vector4(151.05, 6607.28, 31.45, 358.41), vector4(145.84, 6613.57, 31.39, 359.11), vector4(155.75, 6592.76, 31.42, 179.37) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['paletobay2'] = { label = 'Paleto Bay 2', type = 'public', category = 'car',
access = vector3(-274.94, 6126.03, 31.48),
store = vector3(-280.27, 6120.74, 31.51),
spawns = { vector4(-282.03, 6142.62, 31.08, 135.25), vector4(-276.61, 6137.28, 31.08, 135.7), vector4(-303.97, 6129.09, 31.08, 225.36) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['rancho'] = { label = 'Rancho', type = 'public', category = 'car',
access = vector3(384.21, -1612.76, 29.29),
store = vector3(397.2, -1613.16, 29.29),
spawns = { vector4(395.51, -1626.53, 28.87, 49.3), vector4(388.55, -1612.64, 28.87, 230.57) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['rancho2'] = { label = 'Rancho 2', type = 'public', category = 'car',
access = vector3(443.0, -1969.08, 24.4),
store = vector3(457.17, -1977.47, 22.96),
spawns = { vector4(453.99, -1965.92, 22.55, 180.38), vector4(449.5, -1960.62, 22.55, 182.45) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['delperro'] = { label = 'Del Perro', type = 'public', category = 'car',
access = vector3(-1523.96, -451.46, 35.6),
store = vector3(-1519.72, -445.65, 35.44),
spawns = { vector4(-1522.3, -418.57, 35.02, 230.52), vector4(-1526.95, -423.81, 35.02, 230.73) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['davis'] = { label = 'Davis', type = 'public', category = 'car',
access = vector3(-71.77, -1821.7, 26.94),
store = vector3(-50.89, -1831.68, 26.57),
spawns = { vector4(-60.26, -1843.13, 26.16, 319.89), vector4(-52.36, -1849.82, 25.85, 320.93) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['grapeseed'] = { label = 'Grapeseed', type = 'public', category = 'car',
access = vector3(1698.05, 4792.72, 41.92),
store = vector3(1691.35, 4794.65, 41.92),
spawns = { vector4(1691.42, 4788.03, 41.5, 89.22), vector4(1691.61, 4774.13, 41.5, 91.71) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['mountchiliad'] = { label = 'Mount Chiliad', type = 'public', category = 'car',
access = vector3(1721.4, 6410.46, 34.01),
store = vector3(1722.91, 6394.3, 34.24),
spawns = { vector4(1729.74, 6405.79, 34.04, 152.75), vector4(1717.45, 6416.34, 33.02, 243.98) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['zancudoriver'] = { label = 'Zancudo River', type = 'public', category = 'car',
access = vector3(-1130.62, 2675.25, 18.18),
store = vector3(-1136.76, 2669.33, 18.1),
spawns = { vector4(-1159.62, 2673.95, 17.67, 222.74), vector4(-1154.93, 2678.09, 17.67, 220.94) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['tataviammountains'] = { label = 'Tataviam Mountains', type = 'public', category = 'car',
access = vector3(2588.15, 426.63, 108.55),
store = vector3(2570.9, 416.1, 108.46),
spawns = { vector4(2576.07, 428.77, 108.03, 180.28), vector4(2583.07, 428.63, 108.03, 179.74) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['lsairport'] = { label = 'LS Airport', type = 'public', category = 'car',
access = vector3(-949.49, -2582.63, 13.83),
store = vector3(-948.02, -2589.07, 13.83),
spawns = { vector4(-957.98, -2604.35, 13.42, 60.79), vector4(-957.04, -2583.48, 13.41, 240.27) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['cayobeginn'] = { label = 'Cayo Beginning', type = 'public', category = 'car', cayo = true,
access = vector3(4503.198, -4531.859, 4.168),
store = vector3(4513.65, -4509.417, 4.128),
spawns = { vector4(4501.372, -4548.034, 4.028, 20.806), vector4(4521.961, -4528.845, 4.132, 47.578) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['cayomid'] = { label = 'Cayo Mid', type = 'public', category = 'car', cayo = true,
access = vector3(5178.179, -5128.128, 3.073),
store = vector3(5157.778, -5129.067, 2.34),
spawns = { vector4(5186.646, -5133.239, 3.34, 80.143), vector4(5164.675, -5129.388, 2.493, 177.75) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['boat'] = { label = 'Boat', type = 'public', category = 'sea',
access = vector3(-726.15, -1333.12, 1.6),
store = vector3(-747.33, -1356.48, 1.1),
spawns = { vector4(-704.71, -1341.66, -0.09, 134.81), vector4(-711.88, -1329.8, 0.43, 142.34) },
blip = { sprite = 410, color = 3, scale = 0.8 } },
['boatcayo'] = { label = 'Boat Cayo', type = 'public', category = 'sea', cayo = true,
access = vector3(5107.975, -5205.645, 2.063),
store = vector3(5098.216, -5193.487, 1.367),
spawns = { vector4(5099.662, -5166.661, 1.699, 357.534), vector4(5100.634, -5140.325, 1.716, 358.361) },
blip = { sprite = 410, color = 3, scale = 0.8 } },
['air'] = { label = 'Air', type = 'public', category = 'air',
access = vector3(-943.03, -2962.05, 13.95),
store = vector3(-1007.54, -2979.84, 13.95),
spawns = { vector4(-1007.13, -3015.86, 13.95, 55.89), vector4(-979.32, -2997.89, 13.95, 59.19), vector4(-960.99, -2964.56, 13.95, 57.96) },
blip = { sprite = 360, color = 3, scale = 0.8 } },
['aircayo'] = { label = 'Air cayo', type = 'public', category = 'air', cayo = true,
access = vector3(4430.855, -4460.986, 4.328),
store = vector3(4451.652, -4493.408, 4.204),
spawns = { vector4(4440.407, -4514.454, 4.184, 108.825), vector4(4410.822, -4524.619, 4.184, 108.57), vector4(4376.036, -4537.133, 4.185, 109.878) },
blip = { sprite = 360, color = 3, scale = 0.8 } },
['police1'] = { label = 'LSPD', type = 'job', job = 'police', category = 'car',
access = vector3(456.05, -1020.52, 28.28),
store = vector3(455.75, -1014.55, 28.43),
spawns = { vector4(446.43, -1025.51, 28.64, 360.0), vector4(442.97, -1026.19, 28.71, 360.0), vector4(438.99, -1026.51, 28.78, 360.0), vector4(435.43, -1027.24, 28.84, 360.0), vector4(431.69, -1027.66, 28.91, 360.0), vector4(427.49, -1028.11, 28.99, 360.0) },
blip = { sprite = 357, color = 2, scale = 0.8 },
jobPlate = 'LSPD', -- Prefix for spawned job vehicle plates (e.g., LSPD123)
markerColor = { 0, 255, 0, 180 },
vehicles = {
{ model = 'police', label = 'Police Cruiser' },
{ model = 'police2', label = 'Police Interceptor' },
{ model = 'police3', label = 'Police SUV' },
{ model = 'police4', label = 'Unmarked Cruiser' },
{ model = 'policeb', label = 'Police Bike' },
{ model = 'policet', label = 'Police Transporter' }
}
},
['ambulance'] = { label = 'MD', type = 'job', job = 'ambulance', category = 'car',
access = vector3(-1850.35, -319.12, 49.14),
store = vector3(-1858.83, -306.88, 49.14),
spawns = { vector4(-1865.56, -299.85, 49.14, 45.32) },
blip = { sprite = 357, color = 2, scale = 0.8 },
jobPlate = 'MD',
markerColor = { 0, 255, 0, 180 },
vehicles = {
{ model = 'ambulance', label = 'Ambulance' },
{ model = 'lguard', label = 'Lifeguard SUV' }
}
},
['adac'] = { label = 'ADAC', type = 'public', category = 'car',
access = vector3(855.267, -2095.442, 30.541),
store = vector3(860.126, -2097.099, 30.543),
spawns = { vector4(850.267, -2098.295, 30.541, 82.285), vector4(849.888, -2101.755, 30.537, 89.063), vector4(849.482, -2105.554, 30.541, 83.984) },
blip = { sprite = 357, color = 3, scale = 0.8 } },
['depotlsimpound'] = { label = 'LS Impound', type = 'depot', category = 'car',
access = vector3(409.57, -1623.24, 29.29),
coords = vector4(408.83, -1623.00, 29.29, 230.13),
spawns = { vector4(404.91, -1630.93, 29.29, 230.13), vector4(400.91, -1635.93, 29.29, 230.13), vector4(396.0, -1644.6, 29.29, 140.0), vector4(398.4, -1646.6, 29.29, 140.0), vector4(400.8, -1648.6, 29.29, 140.0), vector4(403.2, -1650.6, 29.29, 140.0), vector4(405.6, -1652.6, 29.29, 140.0), vector4(408.0, -1654.6, 29.29, 140.0), vector4(410.4, -1656.6, 29.29, 140.0), vector4(417.1, -1627.8, 29.29, 320.0) },
blip = { sprite = 68, color = 1, scale = 0.8 } },
['depotbootimpound'] = { label = 'Boot Impound', type = 'depot', category = 'sea',
access = vector3(-731.368, -1340.667, 1.595),
spawns = { vector4(-730.662, -1359.294, -0.475, 143.039) },
blip = { sprite = 68, color = 1, scale = 0.8 } },
['depotcayoimpound'] = { label = 'Cayo Impound', type = 'depot', category = 'car', cayo = true,
access = vector3(4517.639, -4460.173, 4.194),
spawns = { vector4(4527.138, -4470.861, 4.204, 108.897), vector4(4525.721, -4466.391, 4.192, 108.208), vector4(4499.328, -4468.401, 4.208, 28.546), vector4(4495.887, -4469.777, 4.212, 13.178), vector4(4486.038, -4474.158, 4.219, 28.42), vector4(4482.586, -4475.351, 4.221, 20.635), vector4(4478.775, -4476.793, 4.22, 32.55) },
blip = { sprite = 68, color = 1, scale = 0.8 } },
['depotairimpound'] = { label = 'Air Impound', type = 'depot', category = 'air',
access = vector3(-1004.5, -2960.3, 13.95),
spawns = { vector4(-1043.783, -2952.541, 13.951, 62.894) },
blip = { sprite = 68, color = 1, scale = 0.8 } },
['depotpbimpound'] = { label = 'PB Impound', type = 'depot', category = 'car',
access = vector3(-270.15, 6130.77, 31.51),
spawns = { vector4(-282.03, 6142.62, 31.08, 135.25), vector4(-276.61, 6137.28, 31.08, 135.7), vector4(-303.97, 6129.09, 31.08, 225.36) },
blip = { sprite = 68, color = 1, scale = 0.8 } },
}