Kartik Scripts

Configuration

Garages V2 offers granular control over every aspect of your garages, street parking, transfer agreements, impounds, job fleet, sub-owners, and walk-in interiors. All configuration files are located inside the shared/ directory.


⚙️ Main Configuration (shared/config.lua)

1. General & Money Settings

Config.debug = false
Config.MoneyAccount = "bank"              -- Account charged for fees ("bank" | "cash")
Config.AllowMoneyFallback = false         -- Charge secondary account if primary account is short

Config.Currency = {
    code   = "USD",
    locale = "en-US",
    symbol = "$"
}

2. Interaction & Keybinds

Config.Interaction = {
    mode = "radial",                      -- Interaction method ("radial" | "keys" | "target")

    keys = {
        garage      = 38,                 -- Key for garage (E)
        jobVehicles = 47,                 -- Key for job vehicles (G)
    },

    radial = {
        garage      = { icon = "warehouse",      label = "garage" },
        impound     = { icon = "car-burst",      label = "impound_lot" },
        park        = { icon = "square-parking", label = "park" },
    },
}

Config.Target = "auto"                    -- Target system ("auto" | "ox_target" | "qb-target")

Config.Keybind = {
    enabled = false,                      -- Global garage open command keybind
    command = "opengarage",
    defaultKey = "F5",
}

Text UI & Notifications

Config.TextUI = "nui"                     -- Text UI provider ("nui" | "ox_lib" | "jg-textui" | "okokTextUI" | "custom")
Config.TextUIPosition = "right"           -- Built-in prompt position ("bottom" | "top" | "left" | "right" | "center")

Config.Notifications = {
    provider = "nui",                     -- Notification provider ("nui" | "ox_lib" | "custom")
    title    = "Garages",
    duration = 5000,                      -- Notification duration in ms
    position = "top-right",
}

Config.Notifications.position sets where notifications appear on screen. It works with both the built-in nui notifications and ox_lib. Accepted values: top-right (default), top-left, top, bottom-right, bottom-left, bottom, center-right and center-left. Restart the script after changing it.

3. Spawning & Vehicle Behavior

Config.WrapInsideVehicleOnSpawn = false   -- Warp player into driver seat on spawn
Config.WalkToVehicleOnSpawn = false       -- Walk player towards spawned vehicle
Config.DisableParkAnimation = true        -- Skip park fade animation
Config.EnableVehiclePreview = true        -- Show 3D vehicle preview in UI
Config.ReturnVehiclesOnDisconnect = false -- Automatically return player vehicle on disconnect
Config.DefaultGarage = "publicgarage"     -- Default fallback garage for new vehicles

WrapInsideVehicleOnSpawn and WalkToVehicleOnSpawn only move the player who took the vehicle out (or the officer taking a vehicle out of a raid). Players standing nearby are never moved. Neither option applies when you change a plate or collect a street-parked vehicle.

4. Vehicle Transfer & DMV Settings

Config.EnableVehicleTransfer = true       -- Garage-to-garage transfer
Config.EnablePlayerTransfer  = true       -- Player-to-player vehicle transfer

Config.TransferRatePerMile = 100          -- Transfer cost per vehicle mile
Config.TransferBaseFee = 0                -- Base transfer fee
Config.TransferMaxFee = 0                 -- Max transfer fee cap (0 = uncapped)
Config.HouseTransferFee = 1000            -- Flat fee for house garage transfer

Config.RequireTransferConfirmation = true  -- Require target player confirmation
Config.TransferConfirmationTimeout = 60   -- Seconds before transfer request expires
Config.TransferAgreement = "paper"        -- Agreement UI ("paper" | "dialog")
Config.TransferSalePrice = true           -- Allow seller to set transfer price
Config.TransferSaleMaxPrice = 0           -- Max sale price (0 = uncapped)

5. Fees & Towing Options

Config.Fees = {
    freeForGarageOwner = true,            -- Free retrieval for garage owners

    retrieval = {
        enabled = true,
        default = 0,
        byGarageType = {
            public  = 250,                -- Fee per retrieval in public garage
            private = 0,
            job     = 0,
            gang    = 0,
        },
    },

    parking = {
        enabled = false,
        default = 0,
        byGarageType = {
            public  = 100,
            private = 0,
            job     = 0,
            gang    = 0,
        },
    },

    towing = {
        enabled = false,
        price = 500,                       -- Fee for /vreturn command
    },
}

6. Impound & Restart Settings

Config.PoliceJobs = { ["police"] = true, ["sheriff"] = true }
Config.ImpoundManageJobs = { ["police"] = true, ["mechanic"] = true }

Config.ImpoundPrice = 1000                -- Default fee for server-restart impounded cars
Config.MaxImpoundFine = 25000            -- Maximum fine cap (0 = uncapped)
Config.ImpoundDurations = { 1, 6, 12, 24, 72, 168, 0 } -- Impound duration options in hours (0 = indefinite)

Config.NonImpoundVehicle = {
    ["futo"] = true                       -- Vehicles exempt from impound
}

Config.RestartImpoundMode = "impound"     -- Restart impound mode ("impound" | "return" | "none")

7. Sub-Owners & Access Groups

Config.SubOwners = {
    enabled = true,                       -- Enable sub-owners feature
    price = 0,                            -- Fee to add sub-owner (0 = free)
    maxPerVehicle = 3,                    -- Max sub-owners per vehicle
}

Config.AccessGroups = {
    enabled = true,                       -- Enable reusable Access Groups system
    restrictJobVehicles = true,           -- A job vehicle in an access group is limited to that group's members
}

8. Odometer & Mileage Tracking

Config.Mileage = {
    enabled = true,                       -- Enable vehicle mileage tracking
    provider = "internal",                -- Provider ("internal" | "external" | "custom")
    unit = "miles",                       -- Display unit ("miles" | "kilometers")
    column = "mileage",                   -- Database column for internal provider
    sampleInterval = 1000,                -- Sampling interval in ms while driving
    saveInterval   = 30,                  -- DB save interval in seconds
}

9. Admin Permissions & Command Aliases

Config.Admin = {
    permission = "group.admin",           -- ACE permission required for admin command
    citizenIds = {},                      -- Specific Whitelisted Citizen IDs with admin rights

    commands = {
        adminMenu    = "garageadmin",     -- Command for Admin Dashboard
        impoundPanel = "impoundpanel",    -- Command for Impound Panel
        myGarages    = "mygarages",       -- Command for player garage list
        addCar       = "addcar",          -- Command to assign vehicle to player
        returnCar    = "vreturn",         -- Command to tow vehicle home
    },
}

🅿️ Street Parking Configuration (shared/parking_config.lua)

Config.StreetParking = {
    enabled = true,
    mode = "anywhere",                    -- "anywhere" | "locations" | "garage_spots" | "garage_zones"

    interaction = {
        park = "radial",                  -- "radial" | "command" | "both"
        list = "radial",
    },

    command = "park",
    keybind = { enabled = true, defaultKey = "L" },

    unparkKey = 38,                       -- Control key to unpark vehicle (E)
    unparkDistance = 3.0,

    requireEngineOff = true,              -- Require engine off to park
    ownedOnly = true,                     -- Only vehicle owners/drivers can park
    lockWhenParked = true,                -- Lock doors while parked

    -- Vehicle Distance Streaming
    stream = {
        spawnDistance   = 180.0,
        despawnDistance = 240.0,
        interval        = 2000,
        maxSpawned      = 60,
        driftDistance   = 12.0,
    },

    -- Countdown & Auto Return
    countdown = {
        enabled = false,
        duration = 48,                    -- Hours before auto-return
        action = "garage",                -- "garage" or "impound"
        warnAt = 2,                       -- Hours left when owner is warned
        showRemaining = true,             -- Show remaining time in UI
    },

    list = {
        enabled = true,
        command = "parked",
        viewAllJobs = {},                 -- Jobs that see all parked vehicles (e.g. police)
        allowBlipAll = false,
    },
}

💼 Job Fleet Configuration (shared/job_vehicles.lua)

Spawnable job vehicles, grade limits, category tabs, liveries, extras and the registered keeper are managed in-game from /garageadmin → Job Fleet, not in config. See Job Fleet & Category Management.

Config.JobOwnedVehicles = {
    enabled = true,                     -- Enable persistent job-owned vehicles
    column = "job",                     -- Database column for owning job name
    ownerPrefix = "job:",               -- Owner column prefix for job ownership
    restrictToJobGarages = true,        -- Restrict job vehicles to job garages only
    minGrade = {
        police = 2,                     -- Minimum grade required per job
    },
    requireOnDuty = false,              -- Require player to be on duty to pull vehicles out
    chargeFees = false,                 -- Charge parking and retrieval fees for job cars
    bossOnlyManage = true,              -- Require boss rank to add/remove job vehicles
}

🏢 Garage Interiors Configuration (shared/garage_interiors.lua)

Config.Interiors = {
    enabled = true,                       -- Enable walk-in 3D garage interiors
    mode = "button",                      -- Entry mode ("button" | "auto")
    default = "gtag_grand",               -- Default fallback shell/interior
    useCutscene = true,                   -- Play camera cutscene upon entering
    cutsceneDuration = 2500,
}

-- Built-in Interior Layouts Available:
-- gtag_airport    : Underground Garage - Airport (10 vehicle spots)
-- gtag_docks      : Underground Garage - Docks (15 vehicle spots)
-- gtag_vinewood_a : Underground Garage - Vinewood A (11 vehicle spots)
-- gtag_vinewood_b : Underground Garage - Vinewood B (10 vehicle spots)
-- gtag_grand      : Grand Garage Interior (Default)

🧩 Feature Configuration Files

Each of these features has its own file in shared/. The full options are on each feature's page:

FileFeature
shared/raid_config.luaPolice Garage Raids
shared/capacity_config.luaGarage Parking Capacity
shared/trailer_config.luaTrailer Storage
shared/garage_sales_config.luaGarage Sales
shared/interior_sessions_config.luaShared Visits & Invites
shared/customization_config.luaLivery & Extras Menu
shared/layout_config.lua, shared/cinematic_config.luaGarage Layouts & Favourites
shared/migration_config.luaMigrating from JG Garages

Discord Logs (shared/server_config.lua)

Paste a webhook URL next to each log you want. Leave it empty to turn that log off.

ServerConfig.Logs = {
    ["server_impound"] = "",    -- automatic impound on server restart
    ["impound_by_panel"] = "",
    ["impound_retrieved"] = "",
    ["park_vehicle"] = "",
    ["spawn_vehicle"] = "",
    ["vehicle_transfer"] = "",
    ["garage_sale"] = "",       -- garages bought and sold back
    ["garage_raid"] = ""        -- police raids, take-outs and seizures
}

🖼️ Vehicle Image Overrides (shared/vehicle_images.lua)

Config.VehicleImages = {
    overrides = {
        ["custom_gtr"] = "https://your-domain.com/images/gtr.png",
        ["addon_lambor"] = "web/images/lambor.png",
    }
}

On this page