Features
Public Garages
BIT-Garage includes 18 pre-configured public garage locations across the map:
Car Garages (16 locations)
- Central - vector3(212.55, -797.68, 30.86)
- El Burro - vector3(1179.36, -1540.98, 39.38)
- Mirror Park - vector3(1038.87, -770.18, 58.00)
- Tataviam - vector3(2588.67, 420.30, 108.44)
- Los Santos Airport - vector3(-1038.13, -2667.13, 13.82)
- Vespucci Beach - vector3(-1186.91, -1505.10, 4.37)
- Center - vector3(-352.20, -690.10, 32.60)
- Alta - vector3(271.92, -342.50, 44.91)
- Vinewood West - vector3(-202.21, 306.72, 96.93)
- Rockford Hills - vector3(-938.62, -171.79, 41.86)
- Galileo - vector3(-415.2, 1199.61, 325.63)
- Grand Senora - vector3(1118.96, 2653.41, 37.99)
- Sandy Airport - vector3(1728.59, 3297.15, 41.22)
- Sandy - vector3(1714.35, 3767.18, 34.43)
- Grapeseed - vector3(2154.00, 4796.13, 41.17)
- Paleto - vector3(87.15, 6370.60, 31.23)
Boat Garage (1 location)
- La Puerta - vector3(-905.52, -1469.1, 1.63)
Plane Garage (1 location)
- Los Santos Airport - vector3(-1635.9, -3140.4, 13.99)
Each garage includes:
- Spawn coordinates with proper heading
- Camera position and rotation for preview
- Save car coordinates
- Garage type identification (car/boat/plane)
- No-delete radius (200 units)
Custom Functions
The script provides several customizable functions in the functions.lua file:
Client Side Functions
-- Hide UI elements when garage opens
function hideElements()
DisplayRadar(false)
end
-- Show UI elements when garage closes
function showElements()
DisplayRadar(true)
end
-- Spawn vehicle with model loading
function spawnVehicle(model, actualGarage)
-- Complete vehicle spawning logic with type checks
end
-- Teleport user to vehicle
function teportUser(playerPED, vehicle)
TaskEnterVehicle(playerPED, vehicle, 15000, -1, 2.0, 1, 0)
end
-- Give keys to player (customize for your key system)
function giveKeys(playerID, plate, vehicle)
-- Example for QB-Core:
TriggerEvent("vehiclekeys:client:SetOwner", QBCore.Functions.GetPlate(vehicle))
end
-- Pay taxes function
function payTaxes(source, typetax, amount)
TriggerServerEvent('bit-garage:payTax', source, typetax, amount)
end
-- Custom police notification for radars
function customPoliceNotification(speed, coords)
-- Add your police notification system here
end
-- Send bill to player
function sendBill(playerID, amount)
-- Add your billing system here
end
-- Radar image handling
function radarImage(image)
-- Custom radar image processing
end
-- Spawn impounded vehicle
function impounedVehicleSpawn(model, coord, heading)
-- Vehicle spawning for impound system
end
Server Side Functions
-- Remove money for impound
function removeMoneyImpound(xPlayer, price)
if Config.Framework == "esx" then
xPlayer.removeAccountMoney('bank', price)
elseif Config.Framework == "qb" then
xPlayer.Functions.RemoveMoney('bank', price, "impound-retrieved")
end
end
-- Make lockpick item usable
function lockPickItem()
-- ESX example:
ESX.RegisterUsableItem(Config.lockpickItem, function(source)
TriggerClientEvent('bit-garage:startlockpicking', source)
end)
-- QB example:
QBCore.Functions.CreateUseableItem(Config.lockpickItem, function(source)
TriggerClientEvent('bit-garage:startlockpicking', source)
end)
end
-- Make fake plate items usable
function fakePlateItems()
-- Register fake plate and original plate items
end
-- Get player gang (QB-Core only)
function GetPlayerGang(playerID)
if Config.Framework == "qb" then
if QBCore.Functions.GetPlayerData().gang ~= nil then
return QBCore.Functions.GetPlayerData().gang.name
end
end
end
Custom Alerts
-- Custom alerts for garage interactions
useCustomAlerts = false
function customAlert(alertType, status)
if alertType == "alert" then
if status then
-- Show "Press E to enter the garage" prompt
else
-- Hide prompt
end
elseif alertType == "alertsave" then
if status then
-- Show "Press E to save vehicle" prompt
else
-- Hide prompt
end
elseif alertType == "alertimpound" then
if status then
-- Show "Press E to access" prompt
else
-- Hide prompt
end
end
end
Open Functions
-- CLIENT SIDE
-- Function executed just after declaring the ESX or QBCore variable
function openClient()
-- Add your custom client-side initialization here
end
-- SERVER SIDE
-- Function executed just after declaring the ESX or QBCore variable
function openServer()
-- Add your custom server-side initialization here
end
Admin Commands
The script includes several administrator commands:
/creategarage
Create custom garages for jobs or users
- Usage:
/creategarage - Requires: Admin permissions
- Opens creation menu to set:
- Garage name
- Parking coordinates
- Spawn coordinates
- Save car coordinates
- Job assignment (optional)
- User assignment (optional)
/dvv [plate]
Delete vehicle and send to Central garage (alternative to /dv)
- Usage:
/dvvor/dvv PLATE123 - Requires: Admin permissions
- Without plate: deletes nearest vehicle
- With plate: deletes specific vehicle
/dvi
Delete nearest vehicle and impound it
- Usage:
/dvi - Requires: Admin permissions
- Sets impound price:
Config.adminDVIAmount - Vehicle can be retrieved from impound
/givecar [userid]
Deliver a vehicle to a user
- Usage:
/givecar 1 - Requires: Admin permissions
- Steps:
- Spawn the vehicle
- Get inside it
- Execute the command with target user ID
- Vehicle ownership is transferred
/deletecar [plate]
Delete a vehicle from user account
- Usage:
/deletecar ABC123 - Requires: Admin permissions
- Permanently removes vehicle from database
/crane
Manually trigger massive vehicle delete
- Usage:
/crane - Requires: Admin permissions
- Removes all unattended vehicles
- Can impound or store vehicles based on config
/garageInstall
Send all vehicles to Central garage and remove impounds
- Usage:
/garageInstall - Requires: Admin permissions
- Recommended for clean installation
- Resets all vehicle locations
Player Commands
/carkey
Open vehicle key menu
- Alternative: Press
Lkey (configurable) - Usage:
/carkey - Options:
- Lock/Unlock vehicle
- Give key to nearby player
- Remove key from player
/givekey [id]
Give vehicle key to another player
- Usage:
/givekey 2 - Must be owner of the vehicle
- Target player receives key access
/removekey
Remove key from another player
- Usage:
/removekey - Opens menu to select player
- Only owner can remove keys
Events & Triggers
Client Events
-- Open garage menu
TriggerEvent("bit-garage:open", garageName)
-- Start lockpicking mini-game
TriggerEvent('bit-garage:startlockpicking', source)
-- Apply new plate
TriggerEvent('bit-garage:newPlate', source)
-- Restore old plate
TriggerEvent('bit-garage:oldPlate', source)
-- Show error notification
TriggerEvent("bit-garage:errors", source, message)
Server Events
-- Police notification for radar
TriggerEvent("bit-garage:NotifyPolice", coords, speed)
-- Pay taxes
TriggerServerEvent('bit-garage:payTax', source, typetax, amount)
Impound System
Authorized Jobs
Only specific jobs can impound vehicles:
Config.authorizedJobs = {
["police"] = true,
["sheriff"] = true,
["mechanic"] = true,
}
Impound Locations
The script includes 2 pre-configured impound locations:
-
Police Impound - 409.18, -1624.44, 29.29
- Blip: 67 (impound icon)
- Color: 17 (orange)
- Ped: Female cop (s_f_y_cop_01)
-
City Impound - 490.67, -1318.1, 29.24
- Blip: 67 (impound icon)
- Color: 17 (orange)
- Ped: Garbage worker (s_m_y_garbage)
Impound Features
- Vehicle information display
- Owner details
- Impound timestamp
- Officer information
- Caution payment system
- Vehicle preview with camera
- Retrieval with payment
Radar System
Radar Management
Create and manage speed cameras in-game:
-
Place Radar
- Use admin menu to place radar prop
- Set speed limit
- Set fine amount
- Configure detection radius
- Set heading/rotation
-
Radar Triggers
- Automatic detection when speeding
- Screenshot capture
- Discord webhook notification
- Police notification (if enabled)
- Bill sending (if enabled)
-
Radar Data
- Vehicle model
- Driver name
- Speed (KMH/MPH)
- Location coordinates
- Timestamp
- Screenshot
Discord Webhooks
Configure webhooks for:
- Radar images:
Config.radarWebhook - Fake plate changes:
Config.fakePlateWebhook
Taxes System
Automatic vehicle tax collection:
- Scheduled execution (daily at configured time)
- Per-vehicle pricing
- Bank account deduction
- Notification to player
- Calculation:
total_vehicles Γ Config.taxesPrice
Example:
- Player has 5 vehicles
- Tax per vehicle: $1,500
- Total tax: $7,500
Massive Delete System
Automated cleanup of unattended vehicles:
Configuration
Config.massiveDeleteSchedule = {
{h = 10, m = 00}, -- 10:00 AM
{h = 12, m = 00}, -- 12:00 PM
{h = 14, m = 00}, -- 2:00 PM
{h = 16, m = 00}, -- 4:00 PM
{h = 18, m = 24}, -- 6:24 PM
{h = 20, m = 00}, -- 8:00 PM
{h = 22, m = 00}, -- 10:00 PM
}
Features
- Warning notification before deletion (2 minutes by default)
- Skips vehicles in garage areas
- Option to impound or store vehicles
- Manual trigger with
/cranecommand - Configurable impound price
Vehicle Health
The script preserves vehicle health and damage:
- Stored in database on save
- Restored on vehicle spawn
- Includes:
- Body damage
- Engine health
- Tank health
- Dirt level
- Deformation