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.

v1.0.0Paid3 Pages
Agency-Garage

01 Configuration

Complete config.lua for Agency-Garage. All options documented via inline comments.

Download config.lua
--[[
    ╔══════════════════════════════════════════════════════════════════╗
    ║                        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 } },
}

Need help? Join our Discord community for support!

Join Discord