ktoxktox docs
ktx_garages

Settings

Every setting in shared/config.lua.

Every setting in shared/config.lua, taken from the file itself. The comments in the file and this page always say the same thing.

Config.Framework

Your framework: "esx", "qb-core", "qbox", "ox" or "custom". With "custom" the resource loads public/framework.lua instead.

SettingDefaultWhat it does
name"esx"
esxMode"legacy"Only when name is "esx": "legacy" or "old".
esxSharedObjectEvent"esx:getSharedObject"Only when name is "esx": the event the shared object is fetched with. Older forks renamed it.

Config.UI

Notifications: "ox_lib" or "custom" (loads public/ui.lua).

SettingDefaultWhat it does
name"ox_lib"

Config.Language

Any file in languages/, without the extension.

Config.Language = "english"

Config.Debug

Prints what the resource is doing to the console.

Config.Debug = false

Config.PersistVehicles

Vehicles taken out of a garage stay in the world and survive a restart.

ox_core always does this itself and ignores the setting. QBox goes by its own convars instead: nothing is kept while qbx:enableVehiclePersistence is false, which is the default, and a vehicle only comes back after a restart when qbx:vehiclePersistenceType is "full".

Config.PersistVehicles = true

Config.Impound

Where a vehicle ends up when it cannot be anywhere else: destroyed, left outside over a restart, or coming home to a full garage.

SettingDefaultWhat it does
enabledtrueOff, this resource leaves a wrecked vehicle exactly as it is: out, in no garage. That is what another impound script reads it as.
fee500What it costs to release one vehicle. 0 is free.
locationsa tablelabel is the blip name on the map and the place the release message names. What stands in front of the ped comes from the language file. spawns are the bays a released vehicle appears in. A free one wins, so give a lot more than one.
peda table
tryGarageFirstfalseAfter a restart, try the last garage first and impound only what does not fit. Off, everything that was out goes straight to the impound. Only reached when nothing else brings the vehicles back, so not while Config.PersistVehicles is on and never on ox_core. On QBox the sweep runs unless both persistence convars are set.

Config.ScreenBlur

Blur the screen behind the garage menus.

Config.ScreenBlur = true

Config.DefaultVehicleModel

Stands in wherever no particular car is meant yet.

Config.DefaultVehicleModel = "adder"

Config.Sellers

The NPCs who sell garages.

SettingDefaultWhat it does
enabledtrue
npcsa table

Config.Builder

The in-game garage builder.

A garage priced at 0 belongs to every player from the start. Nobody buys it from a seller and nobody can sell it back.

SettingDefaultWhat it does
enabledtrue
command"garages"
allow{ "ktx_garages.builder", "admin", "superadmin" }Aces and groups both work, one match is enough. Empty means everybody.
defaultSalePercentage0.2What comes back when a garage is sold again, as a fraction of its price.
defaultFriendlyFirefalse

Config.CoOwnership

Up to five more owners per garage, next to the one who bought it.

SettingDefaultWhat it does
maxCoOwners5
requireOwnerPresentfalseCo-owners may only use the garage while the owner is there. On, they cannot enter without the owner online, and they leave with the owner. Off, a co-owner uses the garage like their own.
allowCoOwnerInvitesfalseCo-owners may invite others as well, not only the owner.

Config.DebugMenu

Spawning vehicles and teleporting into garages, for testing.

SettingDefaultWhat it does
enabledfalse

Config.VehicleTypeGroups

The groups the builder offers when a garage is limited to certain kinds of vehicle. The numbers are GTA's own vehicle types.

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

Config.Logging

The webhook comes from a convar because this file is unencrypted and also loaded on the client. A URL written here reaches every player.

set ktx_garages_webhook "https://discord.com/api/webhooks/..."
SettingDefaultWhat it does
enabletrueTurns the webhook and the ox_lib logger off together. The activity log in the garage menu is a database table and is not affected.
useOxLibLoggerfalse
discorda table

Config.Database

Only what your server does differently. Every stock install of the four supported frameworks already works, the names come from the preset for Config.Framework.name.

One renamed column is one line, the rest of the block stays untouched:

ownedVehicles = { vehicle = "vehicle_props" },
SettingDefaultWhat it does
garages"ktx_garages"Tables the resource creates and owns. Renaming one is allowed and nothing else has to change.
definitions"ktx_garages_builder"
coowners"ktx_garages_coowners"
impound"ktx_garages_impound"
logs"ktx_garages_logs"
ownedVehiclesa tableThe two your framework owns. Empty because every name comes from the preset for Config.Framework.name. Write in only what your server renamed, one column at a time.
usersa table
logRetentionDays14How long the activity log keeps a row. Swept once a day. The log is the only table here that grows on its own.

Config.Interiors

The interiors the builder offers. Add your own with id, name, shortName, category and position.