Documentación/General/LG Thunder Garage
LEIGONG DOCUMENTATION

LG Thunder Garage

Language ENUpdated 2026-07-29
This content is not available in Español yet. The English version is shown.

⚡ LG Thunder Garage Documentation

LG Thunder Garage is a complete vehicle garage system for ESX, QB-Core and QBox, featuring public garages, private garages, job fleets, impounds, persistent vehicle conditions, garage transfers and an advanced vehicle management interface.


📋 Requirements

Required

  • FiveM server using OneSync
  • ox_lib
  • oxmysql
  • One supported framework:
    • es_extended
    • qb-core
    • qbx_core

Optional

Depending on your configuration:

  • ox_target
  • qb-target
  • Fuel system
  • Vehicle key system
  • Banking system
  • Society account system
  • Notification system
  • Mileage system
  • Mechanic system
  • Dealership system
  • Discord webhook

📦 Installation

1. Download the Resource

Download LG Thunder Garage through your Cfx account after purchasing it from Tebex.

Keep the resource folder name as:

TEXT
LG-ThunderGarage

Place it inside your server resources directory:

TEXT
resources/[lg]/LG-ThunderGarage

2. Start Required Dependencies

Add the following resources to server.cfg in the correct order.

ESX

CFG
ensure oxmysql
ensure ox_lib
ensure es_extended
ensure ox_target
ensure LG-ThunderGarage

QB-Core

CFG
ensure oxmysql
ensure ox_lib
ensure qb-core
ensure ox_target
ensure LG-ThunderGarage

QBox

CFG
ensure oxmysql
ensure ox_lib
ensure qbx_core
ensure ox_target
ensure LG-ThunderGarage

Start your fuel, vehicle key, banking and notification resources before LG Thunder Garage.


🗄️ Database Installation

LG Thunder Garage can automatically create and repair the required database columns.

Open:

TEXT
config/advanced.lua

Default setting:

LUA
Config.AutoRunSQL = true

When enabled, the resource checks the database structure during startup and adds missing fields using non-destructive CREATE and ALTER operations.

Manual SQL Installation

Disable automatic SQL installation:

LUA
Config.AutoRunSQL = false

Then import the correct SQL file.

ESX

TEXT
sql/run-esx.sql

Default vehicle table:

TEXT
owned_vehicles

QB-Core / QBox

TEXT
sql/run-qb.sql

Default vehicle table:

TEXT
player_vehicles

A universal repair file is also included:

TEXT
sql/sql_fix_columns.sql

⚙️ Framework Configuration

Open:

TEXT
config/core.lua

Set your framework:

LUA
Config.Framework = "ESX"

Supported values:

LUA
Config.Framework = "auto"
Config.Framework = "ESX"
Config.Framework = "QBCore"
Config.Framework = "Qbox"

auto attempts to detect the currently running supported framework.

For production servers, selecting the framework explicitly is recommended.


🌍 Language Configuration

Open:

TEXT
config/core.lua

Set the language:

LUA
Config.Locale = "en"

Included locale codes:

TEXT
en  English
cn  Simplified Chinese
de  German
fr  French
es  Spanish
it  Italian
pt  Portuguese
nl  Dutch
sv  Swedish
da  Danish
fi  Finnish
cs  Czech
hu  Hungarian
ro  Romanian
lt  Lithuanian
bg  Bulgarian
vi  Vietnamese

Currency and number formatting can also be configured:

LUA
Config.NumberAndDateFormat = "en-US"
Config.Currency = "USD"

Example for Simplified Chinese:

LUA
Config.NumberAndDateFormat = "zh-CN"
Config.Currency = "CNY"

🎨 Interface Configuration

Interface settings are located in:

TEXT
config/core.lua
LUA
LGGarageConfig.Interface = {
  Theme = "thunder-vault",
  EnableAnimations = true,
  EnableVehicleImages = true,
  VehicleImageFormat = "png",
  VehicleImageFallback = "technical",
  Scale = 1.0,
  ShowBrandSignature = true
}

Disable Animations

LUA
Config.Interface.EnableAnimations = false

Interface Scale

LUA
Config.Interface.Scale = 1.0

Examples:

LUA
Config.Interface.Scale = 0.9
Config.Interface.Scale = 1.1

Use the default value unless the interface is too large or too small for your server's preferred resolution.


🖼️ Vehicle Images

Real vehicle side-view images are optional.

Enable Vehicle Images

LUA
Config.Interface.EnableVehicleImages = true

Disable Vehicle Images

LUA
Config.Interface.EnableVehicleImages = false

When disabled, the interface uses included technical SVG vehicle graphics.

Adding Vehicle Images

Place vehicle images inside:

TEXT
vehicle_images/

The file name must match the lowercase vehicle spawn name.

Example vehicle:

LUA
model = "sultanrs"

Required image name:

TEXT
vehicle_images/sultanrs.png

Additional examples:

TEXT
vehicle_images/police.png
vehicle_images/ambulance.png
vehicle_images/taxi.png
vehicle_images/towtruck.png

Recommended image specifications:

TEXT
Format: PNG
Background: Transparent
View: Side profile
Recommended size: 800 × 400 or larger
File name: Lowercase vehicle spawn code

When an image is missing, the interface automatically falls back to the appropriate technical SVG category.

Available fallback categories include:

  • Sedan
  • Utility vehicle
  • Emergency vehicle
  • Motorcycle
  • Boat
  • Aircraft

Change Image Format

LUA
Config.Interface.VehicleImageFormat = "webp"

When using WebP, all vehicle image files must use:

TEXT
vehicle_images/<model>.webp

🎯 Interaction Configuration

Open:

TEXT
config/core.lua

Target Interaction

LUA
Config.UseTarget = true
Config.Target = "ox_target"

Supported target providers:

LUA
Config.Target = "auto"
Config.Target = "ox_target"
Config.Target = "qb-target"

To disable target interaction:

LUA
Config.UseTarget = false

The resource will then use configurable key and TextUI interactions.

Interaction Ped

LUA
Config.TargetPed = "s_m_m_autoshop_02"

Keybinds

LUA
Config.OpenGarageKeyBind = 38
Config.OpenImpoundKeyBind = 38
Config.InsertVehicleKeyBind = 38
Config.ExitInteriorKeyBind = 38

Key 38 is the default FiveM E key.

Prompts

LUA
Config.OpenGaragePrompt = "[E] Open Garage"
Config.OpenImpoundPrompt = "[E] Open Impound"
Config.InsertVehiclePrompt = "[E] Store Vehicle"
Config.ExitInteriorPrompt = "[E] Exit Garage"

💬 TextUI Configuration

Supported TextUI providers:

LUA
Config.DrawText = "auto"
Config.DrawText = "ox_lib"
Config.DrawText = "okokTextUI"
Config.DrawText = "ps-ui"

Recommended:

LUA
Config.DrawText = "ox_lib"

🔔 Notification Configuration

Supported notification providers:

LUA
Config.Notifications = "auto"
Config.Notifications = "ox_lib"
Config.Notifications = "okokNotify"
Config.Notifications = "ps-ui"

Recommended:

LUA
Config.Notifications = "ox_lib"

⛽ Fuel Configuration

Set the fuel resource in:

TEXT
config/core.lua

Example:

LUA
Config.FuelSystem = "ox_fuel"

Included adapters support:

TEXT
ox_fuel
LegacyFuel
ps-fuel
lj-fuel
cdn-fuel
hyon_gas_station
okokGasStation
nd_fuel
myFuel
ti_fuel
Renewed-Fuel
rcore_fuel

Make sure the selected fuel resource is started before LG Thunder Garage.


🔑 Vehicle Key Configuration

Automatic key-system detection:

LUA
Config.VehicleKeys = "auto"

Disable key integration:

LUA
Config.VehicleKeys = "none"

Included adapters support:

TEXT
qb-vehiclekeys
MrNewbVehicleKeys
jaksam-vehicles-keys
qs-vehiclekeys
mk_vehiclekeys
wasabi_carlock
cd_garage
okokGarage
t1ger_keys
Renewed-Vehiclekeys
tgiann-hotwire

Example:

LUA
Config.VehicleKeys = "qb-vehiclekeys"

🏦 Banking Configuration

Example:

LUA
Config.Banking = "okokBanking"

Included banking adapters support:

TEXT
auto
Renewed-Banking
okokBanking
fd_banking
qb-banking
qb-management
esx_addonaccount

Use:

LUA
Config.Banking = "auto"

to let the resource select an available supported banking integration.


🏢 Public Garages

Public garages are configured in:

TEXT
config/public_garages.lua

Basic Car Garage Example

LUA
Config.GarageLocations["Example Garage"] = {
  coords = vector3(215.09, -805.17, 30.81),

  spawn = {
    vector4(216.84, -802.02, 30.78, 69.82),
    vector4(218.09, -799.42, 30.76, 66.17),
    vector4(219.29, -797.23, 30.75, 65.40)
  },

  distance = 18,
  type = "car",
  hideBlip = false,

  blip = {
    id = 357,
    color = 0,
    scale = 0.7
  },

  hideMarkers = true,

  markers = {
    id = 21,
    size = {
      x = 0.3,
      y = 0.3,
      z = 0.3
    },
    color = {
      r = 255,
      g = 255,
      b = 255,
      a = 120
    },
    bobUpAndDown = 0,
    faceCamera = 0,
    rotate = 1,
    drawOnEnts = 0
  }
}

Garage Types

LUA
type = "car"
type = "sea"
type = "air"

Vehicle types must match the garage type.

Important Rules

  • Every garage name must be unique.
  • Do not rename an existing garage after vehicles have been stored there unless you also update their garage_id database value.
  • Spawn points should be placed on clear and level surfaces.
  • Add multiple spawn points to reduce blocked vehicle spawns.
  • Do not place car spawn points inside buildings or props.

👮 Job Garages

Job garages are configured in:

TEXT
config/job_garages.lua

Job Garage Example

LUA
Config.JobGarageLocations["Police Garage"] = {
  coords = vector3(445.01, -1018.51, 28.63),

  spawn = {
    vector4(445.98, -1024.88, 27.23, 5.70),
    vector4(449.10, -1025.20, 27.23, 5.70)
  },

  distance = 18,
  job = {
    "police"
  },

  type = "car",
  hideBlip = false,

  blip = {
    id = 357,
    color = 3,
    scale = 0.7
  },

  hideMarkers = false,

  markers = {
    id = 21,
    size = {
      x = 0.3,
      y = 0.3,
      z = 0.3
    },
    color = {
      r = 255,
      g = 255,
      b = 255,
      a = 120
    },
    bobUpAndDown = 0,
    faceCamera = 0,
    rotate = 1,
    drawOnEnts = 0
  },

  vehiclesType = "spawner",
  showLiveriesExtrasMenu = true,

  vehicles = {
    {
      model = "police",
      plate = "PD",
      minJobGrade = 0,
      nickname = "Police Cruiser",
      livery = 1,
      extras = {
        1,
        2
      },
      maxMods = true
    },

    {
      model = "police2",
      plate = false,
      minJobGrade = 3,
      nickname = "Advanced Police Cruiser",
      livery = 2,
      extras = {},
      maxMods = true
    }
  }
}

Vehicle Types

LUA
vehiclesType = "spawner"

Vehicles are generated from the configured vehicle list.

LUA
vehiclesType = "owned"

Vehicles are stored as job-owned vehicles in the database.

LUA
vehiclesType = "personal"

The garage uses the player's personal vehicles while restricting garage access by job.

Vehicle Options

LUA
model = "police"

Vehicle spawn name.

LUA
plate = false

Generates a random plate.

LUA
plate = "PD"

Uses a configured plate prefix or value.

Do not use a fixed plate already assigned to another database vehicle.

LUA
minJobGrade = 0

Minimum required job grade.

LUA
nickname = "Police Cruiser"

Vehicle name displayed in the interface.

LUA
livery = 1

Default vehicle livery.

LUA
extras = { 1, 2 }

Enabled vehicle extras.

LUA
maxMods = true

Applies maximum vehicle modifications where supported.


🏴 Gang Garages

Gang garage settings are located in:

TEXT
config/gang_garages.lua

Gang garages are disabled by default for the ESX configuration.

LUA
Config.Gangs = false
Config.GangEnableCustomESXIntegration = false

QB-Core and QBox gang support can use framework gang data.

Supported external gang integration:

LUA
Config.Gangs = "rcore_gangs"

Custom ESX gang systems require manual bridge integration in:

TEXT
bridge/client/functions.lua
bridge/server/functions.lua

Do not enable gang garages until your gang resource is correctly connected.


🔐 Private Garages

Private garage settings are located in:

TEXT
config/private_garages.lua

Default creation command:

TEXT
/privategarages

Allowed jobs:

LUA
Config.PrivGarageCreateJobRestriction = {
  "realestate"
}

Multiple jobs can be added:

LUA
Config.PrivGarageCreateJobRestriction = {
  "realestate",
  "government"
}

Private garage interiors:

LUA
Config.PrivGarageEnableInteriors = false

Private garage blips:

LUA
Config.PrivGarageHideBlips = false

Blip settings:

LUA
Config.PrivGarageBlip = {
  id = 357,
  color = 0,
  scale = 0.7
}

Private garages are stored in:

TEXT
player_priv_garages

🚨 Vehicle Impounds

Impound settings are located in:

TEXT
config/impounds.lua

Default command:

TEXT
/iv

The server validates whether the player has access to the selected impound location.

Impound Location Example

LUA
Config.ImpoundLocations["Police Impound"] = {
  coords = vector3(404.99, -1626.91, 29.29),

  spawn = {
    vector4(409.87, -1647.58, 28.88, 228.80)
  },

  distance = 5,
  type = "car",

  job = {
    "police"
  },

  hideBlip = false,

  blip = {
    id = 68,
    color = 0,
    scale = 0.7
  },

  hideMarkers = true,

  markers = {
    id = 21,
    size = {
      x = 0.3,
      y = 0.3,
      z = 0.3
    },
    color = {
      r = 255,
      g = 255,
      b = 255,
      a = 120
    },
    bobUpAndDown = 0,
    faceCamera = 0,
    rotate = 1,
    drawOnEnts = 0
  }
}

Impound Time Options

LUA
Config.ImpoundTimeOptions = {
  0,
  1,
  4,
  12,
  24,
  72,
  168
}

Values are in hours.

Society Fund

Disable society income:

LUA
Config.ImpoundFeesSocietyFund = false

Send fees to the police society account:

LUA
Config.ImpoundFeesSocietyFund = "police"

The selected banking integration must support society accounts.


🔄 Vehicle Transfers

Transfer settings are located in:

TEXT
config/core.lua
LUA
Config.EnableTransfers = {
  betweenGarages = true,
  betweenPlayers = true
}

Garage Transfer Cost

LUA
Config.GarageVehicleTransferCost = 1500

Hide Player Names

LUA
Config.TransferHidePlayerNames = false

Restrict Unregistered Garages

LUA
Config.DisableTransfersToUnregisteredGarages = true

Vehicle Transfer Blacklist

Open:

TEXT
config/advanced.lua
LUA
Config.PlayerTransferBlacklist = {
  "police",
  "ambulance"
}

Use vehicle spawn names in lowercase.


🔧 Vehicle Storage Settings

LUA
Config.SaveVehicleDamage = true
Config.AdvancedVehicleDamage = true
Config.SaveVehiclePropsOnInsert = true
Config.CheckVehicleModel = true

Server-Side Spawning

LUA
Config.SpawnVehiclesWithServerSetter = false

Enable only when your server environment and OneSync configuration support the selected spawning method.

Spawn Outside Vehicle

LUA
Config.DoNotSpawnInsideVehicle = false

When false, the player is placed inside the retrieved vehicle.

Duplicate Spawn Protection

LUA
Config.AllowInfiniteVehicleSpawns = false
Config.JobGaragesAllowInfiniteVehicleSpawns = false
Config.GangGaragesAllowInfiniteVehicleSpawns = false

Keep these disabled to prevent the same database vehicle from being spawned repeatedly.


💰 Recovery and Return Fees

Vehicle recovery cost:

LUA
Config.GarageVehicleReturnCost = 1000

Transfer cost:

LUA
Config.GarageVehicleTransferCost = 1500

Send recovery fees to a society account:

LUA
Config.GarageVehicleReturnCostSocietyFund = "mechanic"

Disable society payment:

LUA
Config.GarageVehicleReturnCostSocietyFund = false

🛠️ Commands

Player and Job Commands

CommandDescription
/ivOpens the vehicle impound form for authorized jobs
/privategaragesOpens private garage management for permitted jobs

Administrator Commands

CommandDescription
/vplateChange a database vehicle plate
/dvdbDelete the current vehicle from the database
/vreturn [plate]Force a vehicle back into a garage
/setjobvehicle [job] [grade]Convert the current owned vehicle into a job vehicle
/removejobvehicle [playerId]Convert the current job vehicle into a personal vehicle owned by the selected player
/setgangvehicle [gang] [grade]Convert the current owned vehicle into a gang vehicle
/removegangvehicle [playerId]Convert the current gang vehicle into a personal vehicle owned by the selected player

Administrator permissions are checked through the selected framework bridge.

Debug Commands

Available only when:

LUA
Config.Debug = true

Commands:

TEXT
/testgaragemenu [garage name]
/testgarageinterior [garage name]

Keep debug mode disabled on production servers:

LUA
Config.Debug = false

🔌 Exports

Client Export

Get the current vehicle condition:

LUA
local stats = exports["LG-ThunderGarage"]:GetCurrentVehicleStats()

Example result:

LUA
{
  engine = 1000.0,
  body = 1000.0,
  fuel = 85.0,
  enginePercent = 100.0,
  bodyPercent = 100.0,
  fuelPercent = 85.0,
  engineDisplay = "100.0%",
  bodyDisplay = "100.0%",
  fuelDisplay = "85.0%"
}

Server Export: Get All Garages

LUA
local garages = exports["LG-ThunderGarage"]:getAllGarages()

Server Export: Impound Vehicle

LUA
exports["LG-ThunderGarage"]:impoundVehicle(
  source,
  plate,
  impoundId,
  reason,
  retrievable,
  retrievalDate,
  retrievalCost,
  vehicleProps,
  fuel,
  engine,
  body,
  damage,
  retrievalTimestamp
)

This is an advanced server-side export. Validate all supplied data before calling it from another resource.


🧩 Custom Hooks

Custom client hooks are located in:

TEXT
config/client.lua

Vehicle Stored

LUA
RegisterNetEvent("lg-thundergarage:client:InsertVehicle:config", function(vehicle, vehicleDbData, type)
  -- Custom code
end)

Vehicle Retrieved

LUA
RegisterNetEvent("lg-thundergarage:client:TakeOutVehicle:config", function(vehicle, vehicleDbData, type)
  -- Custom code
end)

Vehicle Impounded

LUA
RegisterNetEvent("lg-thundergarage:client:ImpoundVehicle:config", function(vehicle)
  -- Custom code
end)

Vehicle Transferred

LUA
RegisterNetEvent("lg-thundergarage:client:TransferVehicle:config", function(plate, newOwnerPlayerId)
  -- Custom code
end)

Custom Storage Verification

LUA
RegisterNetEvent("lg-thundergarage:client:insert-vehicle-verification", function(
  vehicle,
  plate,
  garageId,
  vehicleDbData,
  props,
  fuel,
  body,
  engine,
  damageModel,
  cb
)
  cb(true)
end)

Return false to block vehicle storage.

Custom Retrieval Verification

LUA
lib.callback.register("lg-thundergarage:client:takeout-vehicle-verification", function(
  plate,
  vehicleDbData,
  garageId
)
  return true
end)

Return false to block vehicle retrieval.


🔒 Asset Escrow

The core Lua modules may be protected by the official Cfx Asset Escrow system.

Editable files should include:

TEXT
config/
locales/
sql/
vehicle_images/

Do not modify protected files unless an unlocked version is explicitly provided.

The resource does not require:

  • External license tokens
  • IP locking
  • Remote code execution
  • Mandatory Discord verification
  • Additional account registration

Entitlement is handled through the official Cfx asset system.


❓ Troubleshooting

The Resource Does Not Start

Confirm the start order:

CFG
ensure oxmysql
ensure ox_lib
ensure your_framework
ensure your_target
ensure LG-ThunderGarage

Check the server console for missing dependencies or framework selection errors.


Framework Detection Error

Set the framework manually:

LUA
Config.Framework = "ESX"

or:

LUA
Config.Framework = "QBCore"

or:

LUA
Config.Framework = "Qbox"

Make sure the framework starts before LG Thunder Garage.


Garage Does Not Appear

Check:

LUA
Config.UseTarget = true
Config.Target = "ox_target"

Confirm that:

  • The target resource is running.
  • The garage coordinates are correct.
  • The player is within the configured distance.
  • The garage job restriction matches the player's job.
  • hideBlip only controls the map icon and does not remove the garage.
  • The garage name is unique.

Vehicle Does Not Spawn

Check:

  • Vehicle model exists and streams correctly.
  • Spawn points are not blocked.
  • Spawn coordinates are above the ground.
  • Garage type matches the vehicle type.
  • The vehicle is not already outside.
  • Duplicate spawn protection is not rejecting an existing vehicle.
  • Server-side vehicle spawning is disabled if unsupported.

Recommended setting:

LUA
Config.SpawnVehiclesWithServerSetter = false

Vehicle Images Are Missing

Check:

LUA
Config.Interface.EnableVehicleImages = true
Config.Interface.VehicleImageFormat = "png"

Confirm the file name matches the lowercase spawn model:

TEXT
vehicle_images/sultanrs.png

Do not use the display label:

TEXT
Karin Sultan RS.png

The correct file name uses the actual spawn code.


Vehicle Keys Are Not Given

Set the exact key resource:

LUA
Config.VehicleKeys = "qb-vehiclekeys"

Confirm the selected key resource starts before LG Thunder Garage.

Use:

LUA
Config.VehicleKeys = "auto"

only when one supported key system is running.


Fuel Is Not Saved Correctly

Set the exact fuel provider:

LUA
Config.FuelSystem = "ox_fuel"

Confirm that the selected fuel resource supports the expected exports and is started before the garage.


Database Column Error

Enable automatic SQL repair:

LUA
Config.AutoRunSQL = true

Restart the resource and review the server console.

Alternatively, import:

TEXT
sql/run-esx.sql

or:

TEXT
sql/run-qb.sql

UI Appears on Resource Start

The interface should remain hidden until a garage is opened.

Check for:

  • Modified web/index.html
  • Other resources forcing NUI focus
  • Cached old resource files
  • Duplicate copies of the garage resource

Clear the FiveM client cache and ensure only one copy of LG Thunder Garage is running.


Player Cannot Retrieve an Impounded Vehicle

Check:

  • impound_retrievable database value
  • Retrieval timestamp
  • Retrieval cost
  • Player bank balance
  • Selected impound location
  • Impound vehicle type
  • Job restrictions
  • Banking integration

Restricted impounds cannot be bypassed through the interface.


💬 Support

Before requesting support, prepare:

  • Framework and version
  • Server artifact version
  • Full server console error
  • Full client F8 error
  • Relevant configuration section
  • Database structure
  • Steps required to reproduce the problem
  • Video or screenshot where applicable

Support link:

TEXT
INSERT_YOUR_SUPPORT_LINK

Documentation website:

TEXT
INSERT_YOUR_DOCUMENTATION_LINK

Tebex store:

TEXT
INSERT_YOUR_TEBEX_LINK

🆕 Version 1.1.0

  • New premium LG Thunder Garage interface
  • Optional real vehicle side-view images
  • Technical SVG vehicle fallbacks
  • Vehicle grid and list views
  • ESX, QB-Core and QBox framework bridges
  • Public, private, job and impound garages
  • Vehicle transfer system
  • Persistent fuel, engine, body and damage data
  • Improved vehicle ownership validation
  • Improved garage transfer validation
  • Improved impound security
  • Retrieval-time validation
  • Payment refund protection
  • Correct NUI focus handling
  • Multiple included locale files

© LG Scripts — LG Thunder Garage

Centro de soporte

Include your framework, complete console error, configuration section, and reproduction steps.

Soporte