ktoxktox docs

Configuration Reference

All configuration options for ktx_garages in shared/config.lua.

Configuration Reference

All configuration lives in shared/config.lua under Config.GarageSystem.

General

Config.GarageSystem = {
    debugMode = false,              -- Print debug messages to F8 (client) and terminal (server)
    debugMenu = false,              -- Enable debug vehicle spawning and garage teleports
    setIntoGarageOnRestart = false, -- Store vehicles back into their last garage on resource restart
    language = "english",           -- "english" | "french" | "german" (or custom file name)
    persistVehicles = false,        -- Vehicles stay in world permanently after leaving garage
    framework = "esx",              -- "esx" | "qb-core" | "qbox" | "ox" | "custom"
    ESXMode = "legacy",             -- "legacy" | "old" (only used when framework = "esx")
    activityLogRetentionDays = 30,  -- Days to keep activity log entries (auto-cleanup on startup)
    screenBlur = true,              -- Apply screen blur when opening garage menus
}

Tip: For persistVehicles behavior per framework, see the Persistence Guide.

Database

Maps ktx_garages to your framework's database tables. Each field tells the resource which column to read/write.

database = {
    owned_vehicles = {
        table = "player_vehicles",      -- Table containing player vehicles
        identifier = "citizenid",       -- Column with the player identifier
        vehicle = "mods",               -- Column with serialized vehicle data (props/mods)
        garage = "garage",              -- Column storing which garage the vehicle is in
        plate = "plate",                -- Column with the license plate
        stored = "state"                -- Column tracking vehicle state (in garage or out)
    },
    users = {
        table = "players",              -- Players table
        identifier = "citizenid",       -- Player identifier column
        position = "position"           -- Column storing player position (JSON)
    },
    ktx_garages = "ktx_garages",
    garage_definitions = "ktx_garages_builder"
}

Note: QB-Core state values: 0 = vehicle is out in the world, 1 = garaged, 2 = impound.

Builder

builder = {
    enabled = true,                     -- Toggle the in-game garage builder
    ace = "ktx_garages.builder",        -- ACE permission required (set false to disable ACE check)
    allowedGroups = {                   -- Framework groups that can use the builder
        admin = true,
        superadmin = true
    },
    allowEveryone = false,              -- Allow all players to use the builder (overrides above)
    defaultPreviewModel = "adder",      -- Default ghost vehicle model in slot placement
    defaultSalePercentage = 0.2,        -- Fraction of price returned on sale (0.2 = 20%)
    defaultFriendlyFire = false         -- Allow player damage inside garages by default
},
builderCommand = "garages",             -- Chat command to open builder tools

Tip: Permission checks are layered. The builder grants access if ANY of these pass: ACE permission, framework group, or allowEveryone.

Co-Ownership

coOwnership = {
    maxCoOwners = 5,                        -- Maximum co-owners per garage
    allowEntryWhenOwnerOffline = true,       -- Co-owners can enter when the owner is offline
    allowCoOwnerInvites = false,             -- Co-owners can send guest invites
},

Logging

UseOxlibLogger = false,     -- Use ox_lib logger instead of Discord webhooks

discord = {
    enable = true,
    webhookURL = "",         -- Your Discord webhook URL (keep secret)
    username = "ktx_garages Logs",
    color = 15844367,        -- Embed color (decimal)
    title = "Player log"
},

Warning: The discord block and UseOxlibLogger are server-only. They are stripped from client memory at startup to prevent cheater extraction.

NPCs

Garage seller NPCs that players can interact with to browse available garages.

npcactive = true,       -- Enable NPC garage sellers

npcs = {
    {
        position = vector3(109.24, -636.58, 44.24),
        heading = 71.00,
        model = "csb_reporter",         -- Ped model name
        useDistance = 2.0,              -- Interaction distance
        blipColor = 69,                 -- Blip color ID
        blipSprite = 369,               -- Blip sprite ID
        blipText = "Garage Seller"      -- Blip label on map
    },
},

Add more entries to the npcs array for additional seller locations.

Vehicle Type Groups

Defines categories of vehicles based on GTA vehicle class IDs. Used by the type whitelist/blacklist system.

vehicleTypeGroups = {
    car = { label = "Cars", types = {0, 5, 6}, icon = "car" },
    bike = { label = "Motorcycles", types = {3, 7, 11}, icon = "motorcycle" },
    bicycle = { label = "Bicycles", types = {12}, icon = "bicycle" },
    plane = { label = "Planes", types = {1}, icon = "plane" },
    heli = { label = "Helicopters", types = {8, 9}, icon = "helicopter" },
    boat = { label = "Boats", types = {13, 15}, icon = "ship" },
    train = { label = "Trains", types = {14}, icon = "train" },
}

Each types array contains GTA vehicle class IDs. A vehicle's class determines which group it belongs to. You can add custom groups or rearrange class IDs.

Interiors

Available interiors for the garage builder. Add custom interiors to this array.

Config.GarageSystem.interiors = {
    {
        id = "imp_dt1_02_cargarage",
        name = "Import/Export Downtown Garage",
        shortName = "Downtown",
        category = "CEO Garages",
        position = vector3(-191.0133, -579.1428, 135.0)
    },
    -- ... more interiors
}

Built-in interiors:

CategoryInteriors
CEO GaragesDowntown, Del Perro, Davis Quartz, La Mesa
WarehousesImport/Export Warehouse
Apartments2 Car, 6 Car, 10 Car
AirportsSmuggler's Run Hangar
CasinoCasino Parking Garage, Casino Car Park

To add a custom interior, append an entry with a unique id, the interior's position in the game world, and descriptive labels.