Garage
Step by step installation guide, common issues & solutions, code snippets, error codes, config previews, locales previews, SQL previews, and changelogs; all in 1 easily accessible place.
Buy Here
YouTube Showcase Video - check out our NEW cinematic showcase video!
This resource can be purchased as part of a bundle for a discount here.

1. Unzip the cd_garage.zip folder and place this folder in your servers resource folder.
2. Add the resource to your server start config: ensure cd_garage (it must be placed anywhere below your framework resource eg., es_extended, not above). The name of the folder must not be changed or the resource will not function correctly.
3. WARNING do not edit the encrypted files in any way.

ALL EXISTING CUSTOMERS WHO WERE USING PREVIOUS VERSIONS ON ESX MUST FOLLOW THE 2 STEPS BELOW:
  • Use this chat command in your server console before any player join - cd_garage_jobvehicles.
  • Remove all vehicles from the impound in your database - Either manually set them all to 0 in the impound column OR execute this SQL query in your database UPDATE owned_vehicles SET impound = 0 WHERE impound > 0.
If you have recently purchased this resource for the first time you do NOT need to follow the steps above.

You MUST import the SQL file to your database. This SQL file is located inside theREAD_ME_AFTER_PURCHASING folder, the file is named SQL_main.sql. Watch this video if you are unsure how to do this HeidiSQL / PHPMyAdmin.

You may need to make some changes to the fxmanifest.lua, depending on your framework and dependencies. We have made this easier for you by commenting on the lines which you may need to change.

You MUST read all of the configurable options inside the config.lua and configure them to suit your server's needs. Please read the ”commented out help text” at the end of each line so you can understand what each config option does.
The most important sections are the options under the Framework and Important sections at the top of the config.lua. Everything else is optional.

Open the dependencies folder. The sub-folders inside will be the required dependencies. There will be a text file inside each sub-folder which includes a GitHub link. Download the dependencies from our GitHub using the links provided. Then add it to your resources folder.

If you use a vehicle fuel resource you will need to modify the GetFuel() and SetFuel() functions in the configs/client_customise_me.lua to work with your current vehicle fuel resource. You will see some pre-set examples which are hashed out.

What is vehicle plate formats?
PLEASE READ CAREFULLY!
You must complete this step correctly. You need to read the information below and confirm which plate format your server uses.
Please make sure to read all 3 options below carefully before confirming which one you use.
Please note that you NEED to use the plate format your server already uses, changing them just because you like the benefits can cause script breaking issues.
1. Trimmed
2. With Spaces
3. Mixed (qbcore+esx_vehicleshop)
What do you mean "trimmed" plate format?
By "trimmed" we mean your vehicle shop removes all spaces and whitespaces from the default 8 character plate.
Are your plates all 8 characters with no spaces?
If this is the case and you never want to have spaces in the middle of your plates then you can use this option and ignore the examples below. This option is much easier to install.

Example of how the modified "trimmed" plate will look in the DATABASE on short plates.
Example of how the modified "trimmed" plate will look IN-GAME on short plates.

Then you need to set the Config.PlateFormats in the config.lua to 'trimmed'.
What do you mean "with spaces" plate format?
By "with spaces" we mean your vehicle shop does not modify the plate at all, so all plates will be 8 characters long no matter how many letters or numbers are in the plate because it will include whitespaces to make the length 8.
Are your plates all 8 characters with no spaces?
If this is the case and you do want to have spaces in the middle of your plates then you can use this option and ignore the examples below. This option is much more difficult to install.

Example of how the modified "with spaces" plate will look in the DATABASE on short plates.
Example of how the modified "with spaces" plate will look IN-GAME on short plates.

Then you need to set the Config.PlateFormats in the config.lua to 'with_spaces'.
What do you mean "mixed" plate format?
By "mixed" we mean your vehicle shop will remove any whitespaces at the start and at the end of the plate, but it will not remove spaces in the centre of the plate. You should only be using this option if you use Qbcore or esx_vehicleshop.
QBCore: This option is recommended for QBCore servers as this is what QBCore also uses in its get plate function. Normally QBCore's plates are 8 characters long with no spaces at all so the examples below may not be relevant to you.
esx_vehicleshop: If your vehicles plates in the database are the same format as the examples below you should use this option; as some esx vehicle shops by default force the plate format to be 7 characters long with a space in the middle.

Example of how the modified "mixed" plate will look in the DATABASE on short plates.
Example of how the modified "mixed" plate will look IN-GAME on short plates.

Then you need to set the Config.PlateFormats in the config.lua to 'mixed'.

Use the "mixed" option.

Use the "mixed" option.

Use the "trimmed" option.

How does vehicle keys work?
From client to client
From server to client
Simply copy the code snippet below and paste it into any resource where you want the player to have the keys to a vehicle.
You need to make sure vehicle is defined.
TriggerEvent('cd_garage:AddKeys', exports['cd_garage']:GetPlate(vehicle))
If the "plate" is already defined; simply send the plate in the first argument, as seen in the code snippet below. If the plate is not defined, then you can not give keys to a player from the server side.
TriggerClientEvent('cd_garage:AddKeys', source, plate)

How does boat & air garages work?
Option 1 - SQL query
Option 2 - event
Ideally the garage_type should be set in the same SQL query that adds the vehicle to the database when the vehicle is purchase.
The garage_type can only be set to 3 values: 'car' 'boat' 'air' . These values must be a string.
For example; in order to make a boat show in the boat garage you need to edit the SQL query in your vehicle shop to insert 'boat' into the garage_type column in the owned_vehicles / player_vehicles database table for this vehicle. And same for air vehicles.

ESX example - this is an example for esx_boatshop.
You don't need to do this for cars/bikes as the default value In the database for this column is always ’car’.
You can also trigger this client-side event to automatically update the garage_type in the owned_vehicle/player_vehicles database table.

QBCore example - this is an example of where you should add the event for qb-vehicleshop.
client-side to client-side
TriggerEvent('cd_garage:UpdateGarageType')
server-side to client-side
TriggerClientEvent('cd_garage:UpdateGarageType', source)
This event will only work if the player is sat inside the vehicle when the event is triggered.

How does property garages work?
Compatible Housing Scripts In our Code Snippets you can find some code snippets to make cd_garage compatible with some housing scripts. If your housing script isn't listed then you will need to make the changes below by yourself.
Spawning a Vehicle
From client to client
From server to client
How do I choose the type of garage to open:
Choose either 'quick' or 'inside' in the 1st argument.
Choose the shell to enter if you use the inside garage:
Replace nil with '10cargarage_shell' or '40cargarage_shell' in the 2nd argument.
TriggerEvent('cd_garage:PropertyGarage', 'quick', nil)
How do I choose the type of garage to open:
Choose either 'quick' or 'inside' in the 2nd argument.
Choose the shell to enter if you use the inside garage:
Replace nil with '10cargarage_shell' or '40cargarage_shell' in the 3rd argument.
TriggerClientEvent('cd_garage:PropertyGarage', source, 'quick', nil)
Storing a Vehicle
From client to client
From server to client
The 1st and 2nd argument must always stay the same.
TriggerEvent('cd_garage:StoreVehicle_Main', 1, false, false)
The 2nd and 3rd argument must always stay the same.
TriggerClientEvent('cd_garage:StoreVehicle_Main', source, 1, false, false)

How do job garages work?
What are the 3 different types of job garages?
Regular
Option 1 - Config.JobVehicles.RegularMethod
Add the vehicles of your choice to the Config.JobVehicles.RegularMethod table in the config. Each job has their own choice of vehicles that can be only used by players with said job.
Personal Owned
Option 1 - SQL query
Option 2 - event
Ideally this should be set in the same SQL query that adds the vehicle to the database when the vehicle is purchased. This is how it should look in the database.
For example; when a player purchases a vehicle from the vehicle shop, the job_personalowned column in the owned_vehicles / player_vehicles database table needs to be set to the job name of the player.
You can also trigger this client-side event to set the vehicle a player is currently in into a personal owned job vehicle. But this event will only work if the player is sat inside the vehicle when the event is triggered.
client-side to client-side
TriggerEvent('cd_garage:SetJobOwnedVehicle', 'personal')
server-side to client-side
TriggerClientEvent('cd_garage:SetJobOwnedVehicle', source, 'personal')
Society Owned
Option 1 - SQL query
Option 2 - event
Ideally this should be set in the same SQL query that adds the vehicle to the database when the vehicle is purchased. This is how it should look in the database.
For example, when a player purchases a vehicle from the vehicle shop, the identifier column in the owned_vehicles / player_vehicles database table needs to be set to a job name.
You can also trigger this client-side event to set the vehicle a player is currently in into a society owned job vehicle. But this event will only work if the player is sat inside the vehicle when the event is triggered.
client-side to client-side
TriggerEvent('cd_garage:SetJobOwnedVehicle', 'society')
server-side to client-side
TriggerClientEvent('cd_garage:SetJobOwnedVehicle', source, 'society')

If you wish to change the names of the garages from eg., A to Legion you would need configure them in the Config.Locations in the config.lua, and also change the default value of the garage_id column in the owned_vehicles/player_vehicles database table to the new value you have chosen, so in our case, we would change it from A to Legion.
Before
After
But you MUST do this before any players join, otherwise you would have to manually change the garage_id from A to Legion for every player who's garage_id was set to A.

ESX
QBCore
Disabled
On ESX we will grab this data from the "vehicles" database table, as this is very common in esx servers. So we will use this to store information for us to display on the garage UI’s.
If Config.VehiclesData is enabled, the script will fetch the vehicle display name, vehicle class, vehicle price, and the garage tax amount (if Config.VehiclesData.garage_tax is enabled), from the "vehicles" database table. This is simply the easiest way you can fully configure everything to your server's specific needs.
Multiple "vehicles" database tables
We were made aware that some servers use multiple "vehicles" database tables for donator vehicles, emergency vehicles etc. So all you need to do is add the names of these database tables into the Config.VehiclesData.VehicleDatabase_TableNames in the config,lua.
On QBCore we will grab this data from the qb-core/shared.lua/QBShared.Vehicles, as this is very common in QBCore servers. So we will use this to store information for us to display on the garage UI’s.
If Config.VehiclesData is enabled, the script will fetch the vehicle display name, vehicle class, vehicle price, and the garage tax amount (if Config.VehiclesData.garage_tax is enabled), from the shared.lua. This is simply the easiest way you can fully configure everything to your server's specific needs.
Although this is not required, because if Config.VehiclesData is disabled, the script will alternatively get the vehicle display names from the vehicles handling files vehicles.meta. Example: <gameName>Adder</gameName>. But the vehicle classes/prices will not be displayed on the garage UIs and the Config.VehiclesData.garage_tax will be automatically disabled.

Credits to @Baby Amnesia for making this tutorial.

Property Garage
Phone
Not using default mechanic script? (error_code-013552)

Please Read Here for more information regarding key-mapping.
Key
Description
E
Open the outside quick garage.
H
Enter the inside garage.
G
Store your vehicle.
E
Hotwire a vehicle.
M
Toggle vehicle lock.

All of these chat commands can be renamed and disabled/enabled in the config/code.
If a command isn't working, make sure the config option for said feature is enabled in the config.lua.
Command
Description
/impound
Impound system to impound a vehicle.
/transfervehicle
Transfer system to transfer a vehicle to another player.
/checkmiles
Check the mileage of the vehicle you are in.
/garagespace
Players with defined jobs can sell garage slots to other players.
/garagespacecheck
Check how many garage spaces you have.
/vehicle-add
(Staff only) Add the vehicle you are currently sat inside to a player's garage.
/vehicle-delete
(Staff only) Delete the vehicle you are currently sat inside from the database.
/vehicle-plate
(Staff only) Change the plate of the vehicle you are currently sat inside.
/vehicle-keys
(Staff only) Give yourself keys to the vehicle you are currently sat inside.
/privategarage
Players with defined jobs can create and sell private garages to players.
/removefakeplate
Remove a fake plate from the closest vehicle.
/givekey
Give temporary keys (keys delete after server restart) to to the closest player to the closest vehicle.
/givekeysave
Give saved keys (keys save in database) to to the closest player to the closest vehicle.
/removekey
Open the keys UI to remove keys you have given out to other players.
/vehlock
Toggle vehicle lock.
/lockpick
Lockpick closest vehicle.

These events are completely optional, you can use them if needed. These are less important events, the more important events are documented in the other sections above.
client-side to client-side
server-side to client-side
server-side to server-side
Mileage
Check a vehicle's mileage.
TriggerEvent('cd_garage:checkmileage')
Impound vehicles
Opens the impound UI. You can send a vehicles id as the first argument, otherwise, it will choose the closest vehicle.
TriggerEvent('cd_garage:ImpoundVehicle')
Transfer Vehicle
Transfer the vehicle you are sat in. You must send the player's server-id in the first argument.
TriggerEvent('cd_garage:TransferVehicle', playerid)
Vehicle Lock
Toggle vehicle lock of the closest vehicle.
TriggerEvent('cd_garage:ToggleVehicleLock')
Update Garage Type
Update the database with the correct garage_type for the vehicle a player is sat in.
TriggerEvent('cd_garage:UpdateGarageType')
Mileage
Check a vehicle's mileage.
TriggerClientEvent('cd_garage:checkmileage', source)
Impound vehicles
Opens the impound UI. You can send a vehicles id as the first argument, otherwise, it will choose the closest vehicle.
TriggerClientEvent('cd_garage:ImpoundVehicle', source)
Transfer Vehicle
Transfer the vehicle you are sat in. You must send the player's server-id in the second argument.
TriggerClientEvent('cd_garage:TransferVehicle', source, target_source)
Vehicle Lock
Toggle vehicle lock of the closest vehicle.
TriggerClientEvent('cd_garage:ToggleVehicleLock', source)
Update Garage Type
Update the database with the correct garage_type for the vehicle a player is sat in.
TriggerClientEvent('cd_garage:UpdateGarageType', source)
Save Mileage Timer
Trigger this event around 1 minute before a server restart to force save the mileage of every owned vehicle.
TriggerClientEvent('cd_garage:SaveAllMiles', -1)
Save Vehicle Damage Timer
Trigger this event around 1 minute before a server restart to force save the vehicle damage of every owned vehicle. Requires Config.VehicleKeys.ENABLE to be enabled.
TriggerClientEvent('cd_garage:SaveAllVehicleDamage', -1)
Save Impound Timer
Trigger this event around 1 minute before a server restart to force save the impound timer time of all vehicles in the impound to the database.
TriggerEvent('cd_garage:SaveImpoundTimers')

These exports are completely optional, you can use them if needed.
client-side exports
server-side exports
Get Garage Type
Returns the type of vehicle the player is sat in (‘car’ / ‘boat’ / ‘air’) (string).
exports['cd_garage']:GetGarageType(vehicle)
Get Mileage Data
Returns the mileage table which includes; plate, mileage, maxhealth (table).
exports['cd_garage']:GetAdvStats(plate)
Get Keys Data
Returns a players full key table which includes; all vehicles they have keys to (table).
exports['cd_garage']:GetKeysData()
Does Player Have Keys
Returns if the player has keys to the defined vehicle (boolean).
exports['cd_garage']:DoesPlayerHaveKeys(plate)
Get Plate
Returns the vehicle plate from the vehicle the player is sat in (string).
exports['cd_garage']:GetPlate(vehicle)
Get Correct Plate Format
Returns the correct plate format decided by the Config.VehicleDatabasePlateType (string).
exports['cd_garage']:GetCorrectPlateFormat(plate)
Get Config
Returns the full garage config (table).
exports['cd_garage']:GetConfig()
Get Vehicles Data
Returns a large table from the cached vehicles data of all vehicles which includes; name, hash, price, category, model (table).
exports['cd_garage']:GetVehiclesData()
Get Garage Limit
Returns a player's garage limit amount (number).
exports['cd_garage']:GetGarageLimit(source)
Get Garage Count
Returns the number of vehicles a player owns (number).
exports['cd_garage']:GetGarageCount(source, garage_type)
Get Mileage Data
Returns the mileage table which includes; plate, mileage, maxhealth (table).
exports['cd_garage']:GetMaxHealth(plate)
Get Config
Returns the full garage config (table).
exports['cd_garage']:GetConfig()
Get Vehicles Data
Returns a large table from the cached vehicles data of all vehicles which includes; name, hash, price, category, model (table).
exports['cd_garage']:GetVehiclesData()

Please check out our Troubleshooting Guide before contacting our support.
🔔 Folder Name Make sure the name of the folder is cd_garage.
Screen Flickering? If your screen is flickering while using cd_easytime, this is due to you having multiple time/weather sync scripts running at the same time fighting each other eg., vSync or vMenu.
SQL Default Value? If you see an error similar to this example when inserting an SQL query into your database - “BLOB/TEXT column 'adv_stats' can't have a default value”
SQL Unknown Column? If you see an SQL error in the server console similar to this example - ER_BAD_FIELD_ERROR: Unknown colum 'job_personalspawn' in 'where clause'.

If you see an error code which isn't listed below please open a script support ticket in the Codesign Discord.
Server
Client
6458145 - #Step 1 has not been completed correctly, you have not added the adv_stats database column.
468454 - #Step 1 has not been completed correctly, you have not added the vehicles database table.
46584645 - #Step 1 has not been completed correctly, you have not added the impound and impound_data database column’s.
5454 - #Step 1 has not been completed correctly, you have not added the cd_garage_keys database table.
3122 - #Step 1 has not been completed correctly, you have not added the cd_garage_privategarage database table.
1975 - The vehicle in the print below this print has not been added to QBCore's shared vehicle table.
0985 - In your QBCore shared vehicle table, the hash of the specified vehicle has been formatted incorrectly. Currently it is in a string format, but you need to use backticks instead of apostrophes.
1654651 - The plate column in the owned_vehicles/player_vehicles database table for the one of this players vehicles is NULL or not a string.
87458434 / 3216584884 - The adv_stats column in the owned_vehicles/player_vehicles database table for one of this players vehicles is NULL or not a table.
77745646844 / 66546544658 - The vehicle/mods column in the owned_vehicles/player_vehicles database table for one of this players vehicles is NULL or not a table.
2472782 - The garage_id column in the owned_vehicles/player_vehicles database table for one of this players vehicles is NULL or not a string.
465146541 - The property column in the owned_vehicles/player_vehicles database table for the one of this players vehicles is NULL or not a number.
6584165 - The in_garage column in the owned_vehicles/player_vehicles database table for one of this players vehicles is NULL or not a boolean, (this column needs to be a TINYINT, 0 or 1).
63548 - The GetJob_grade() function in the client_customise_me.lua returned nil when it should have returned a number.
013552 - The vehicle/mods column in the owned_vehicles/player_vehicles database table for one of this players vehicles is an empty table, when it should include the vehicles props data. The easiest fix is to delete this vehicle from your database. But the cause on QBCore is explained here with a solution #QBCore.
3459 - One of the garage_id 's in the Config.GangGarages is the same as one of your Garage_ID 's in the Config.Locations. You can not have duplicates.

Files Changed: Not every update requires you to replace the whole folder. We do this because we understand it's a pain to redo the configs for every update.
  • All Files - This means you should delete your old cd_garage folder, download and add in the latest version, reconfigure the configs folder and restart your server.
  • Specific Files - This means you can simply copy and paste the SPECIFIC new files over the old ones and restart the server.
Update Type: On rare occasions, you are forced to update to the latest version. Mostly due to authentication updates where the old versions will no longer work.
  • Mandatory - This means you MUST update to this new version or the old versions will no longer work.
  • Optional - This means its completely your choice whether you wish to update to the latest version. But we do not offer support for old versions for obvious reasons; they are old.
v3.0.0 - v3.0.7
v4.0.0
v4.0.1 - v4.1.0
v4.2.0

v3.0.0 - v3.0.7
Files Changed:
  • All files
  • Specific Files
Update Type:
  • Mandatory
  • Optional
Changelog:
Add
  • Added search option to quick and impound menu
  • Vehicles can now be searched by name, location, plate or manufacturer
  • Added option to allow multiple jobs to use the JobRestricted garages
  • Added a staff command to change the plate of the vehicle you are in. This will allow custom plates to be used
  • Added logs for the vehicle management commands
  • Added a new function called SetFuel(), (just under the GetFuel() function) to the client_customise_me which will make adding compatibility with fuel scripts much easier. The read me has also been updated
  • Added a check for the /vehicle-plate command to make sure you can not change a plate to one that already exists
  • Added the vehicle labels to the transfer vehicle webhooks (ONLY when used from the chat command)
  • Added the ability to rename all esx events such as the setjob and playerloaded events
  • When using the regular job garage we had added the ability to restrict cars to certain job grades
  • Added the ability to have dedicated car/air/boat garages for job garages. This will work with all 3 types of job garages
  • Added an event that you can trigger after a player purchases a vehicle and it will update the garage_type in the database
  • Added an event that you can trigger after purchasing a job vehicle and it will set the vehicle as a job owned vehicle (you can choose if you want this vehicle to be personal owned or society owned)
  • Added full locales to the discord logs so you no longer need to redo them every time the file is updated
Edit
  • Updated quick menu design
  • Improved load time of quick menu
  • Major optimisation of the client side ms usage
  • Updated all of the styling of the logs
  • If you have added jobs to a JobRestricted garage, only people with said job(s) will be able to see this blip. It will also display which jobs this location is restricted to on the blip
  • Reworked the job cars garage to use the drawtextui instead of chat commands
  • Reworked the personal owned job vehicles. To make a vehicle a personal owned job vehicle you will need to set the new column in the database 'job_personalowned' to 1. Meaning you no longer need to add all of the personal owned job vehicles to a table in the config
  • Simplified the whole job garage system in the config so its easier to understand
  • Updated the codesign error handlers
  • Reworked the garage tax system to get the garage tax value from each car from the "vehicles" database table. (make sure to insert the new SQL)
  • Reworked the use of the "vehicles" database table. We now get the vehicle display name, vehicle price, vehicle class and the garage tax amount for each vehicle
  • Updated the impound UI to the new system of getting the vehicle labels from the database if possible so it always shows the vehicles labels instead of the spawn names
  • Moved the webhooks to a server only file so it can not be dumped from the config
  • When impounding a vehicle, you can now choose to send the ID of the vehicle you wish to impound (so you can impound vehicles which are still on the back of tow trucks)
  • Changed the /vehicle-add command so you can not add a vehicle to the database if it is already owned by a player
  • Changed the /vehicle-delete so it does not log to discord if the vehicle is not owned by a player
Fix
  • Fixed spawn bug with long vehicle loading times
  • Fixed a bug with the adv_stats on some vehicles in the database sometimes being set to false
  • The drawtextui now closes when the pause menu is open and reopens when you close it
  • Fixed a bug with the impound where it always showed the car being in the city impound even tho it could have been in other impounds
  • Fixed return vehicle not showing
  • Fixed unimpounding vehicle bug when Config.AnyoneCanImpound is enabled
  • Fixed /impound UI showing 'undefined'
  • Fixed a potential bug with pressing H (when you have no cars in garage) and then pressing E straight after
  • Fixed a issue with the cooldown on using the garage not working correctly
  • Fixed submarines not being recognised as boats
  • Fixed the job garages showing the ’Garage A’ on the UI as it should say ‘Job Garage’
  • Fixed a bug causing owned job garages to not function correctly
  • Fixed the regular job vehicles not displaying the vehicles label from the database
  • Fixed a issue with searching plates when using the impound UI
  • Fixed not being able to search for plates on the quick vehicle UI when caps lock is enabled
  • Temporary fix for the canary issue until the new Tebex FiveM license system is ready to launch, when this is released we will be fully switching over to the new system
Authentication
  • Authentication update

Files Changed:
  • All files
  • Specific Files
Update Type:
  • Mandatory
  • Optional
Changelog:
Authentication
  • We are now using the official Authentication System provided by FiveM. The old auth system will be taken offline 1 week from now (give or take a few days if needed).
Add
  • Added a config option to disable the garage exploit protection
  • Added a 3rd key press when using the garage to store trailers, (G by default) which will store either the vehicle you are in or the closest vehicle. This will enable the use of trailers as you can store them now.
  • Added a new config option which will make players to pay a configurable percentage fee of the vehicles price to return vehicles using the outside quick UI. (or you can still use a configurable set price)
  • Added a function in the client_customise_me that is triggered after spawning a vehicle, making it easier for people to understand where they can add extra trigger events.
  • Added a fake plate system. You can add a fake plate by using an item and it will open a UI where you can input text to choose your own plate. The fake plate can be reverted by using a chat command or by storing the vehicle.
  • Added a private garage system, which wil allow specified jobs to create private garages anywhere on the map and sell them to players. The private garage will be placed at the coords and heading where the player is who created it.
  • Reworked the impound, now when you impound a car you will have a new UI where can input the reason, officers name, and impound duration or set it so only a officer can un-impound the vehicle. With this new system officers can impound vehicles for a set amount of time, and when this time expires the owner of the vehicle can retrieve the vehicle themselves after paying the fee calculated by the vehicles price.
  • Added a new garage transfer option to the quick garage UI to transfer to another garage for a configurable fee.
  • Added drag-and-drop compatibility with the QBCore framework.
  • Added support for oxmysql.
  • Added support for our new 40 car garage shell. This includes the new option to choose a shell for each garage location or allow the script to choose a shell for a player depending on how many vehicles a player owns.
  • Added vehicle keys which allow players to give temporary and saved keys, along with a UI to remove keys you have given to players. Temporary keys get removed after a server restart and saved keys save in the database and give them back to the players when they login.
  • Added a new config option which will allow you to set the garage to work with vehicles with no spaces in the plate and with spaces in the plate. So with this simple config option you no longer need to edit external scripts to work with the garage regarding the plates.
  • Added a new action bar for use when hotwiring vehicles.
Edit
  • Added a check to prevent the transfer vehicle chat command from being used without sending the players id in the first argument.
  • Cleaned up some of the code in the functions.lua.
  • Edited the personal owned job vehicle system., so for example if you purchase a personal owned police car for your job, you can only access this police car when you have the police job. Meaning if you leave the police to be a mechanic you will no longer have access to spawn the police car from the mechanic job garage.
  • Reworked the "inside garage blacklist", so instead of text appearing where your blacklisted vehicle should have been, it will now just place the next vehicle in its place.
  • Removed the garage_tax database column in the users database table as it is no longer needed, we will now cache the data server side instead.
  • The vehicle plate has been added to the main quick garage UI in replacement for the vehicle's category.
  • The inside garage is more responsive, while being more optimised.
Fix
  • Fixed an typo in the provided vehicles SQL table
  • Fixed the impound so unowned vehicles do not actually get added the impound when using /impound.
  • Fixed the 2 different types of liveries both not saving in the esx/qbcore props
  • Fixed the bug where on random occasions you could spawn a car that's already out on the streets when using onesync.
  • Fixed some vehicle damages not saving and reapplying.
  • When you store a boat in the garage it will now teleport you out of the water and onto solid ground.
  • All known bugs fixed from previous versions and from beta testing.

v4.0.1 - v4.1.0 (9 versions)
Files Changed:
  • All files
  • Specific Files
Update Type:
  • Mandatory
  • Optional
Changelog:
Add
  • Added accurately translated locales - 'CZ' / 'ES' / 'FI' / 'FR' / 'NL' / 'SE' / 'SK'.
  • Added a new server side export to get the cached vehicles data.
  • Added compatibility with qb-phone see here.
  • Added config option to use the QBCore time/weather sync resource.
  • Added a new event to force save the damage of every owned vehicle to the database so players can't escape vehicle repair costs by leaving the vehicle on the street before a server restart. This will only work if Config.VehicleKeys.ENABLE is set to true.
  • Added compatibility for qb-houses with the property garages. (these property garages are not unique at this time, meaning vehicles stored in a property garage can be spawned from any property garage).
  • Added the players job label instead of the name to the job garage UI.
  • Added some more locales for the UI to the locales_ui.js.
Edit
  • Edited the vehicle management command permissions to be more user friendly with pre configured permissions for each framework.
  • Reworked the garage tax system. The garage_tax column from the database has been removed. Now vehicles either get taxed based on a % of a vehicle price or a set configurable fee.
  • Reworked the vehicle keys system so you can enable the vehicle lock system while disabling the vehicle hotwire system. They now both work independently.
  • Updated compatibility with the new oxmysql method.
  • Disabled some features by default to ensure easier installation for newer developers.
Fix
  • Fixed the data not being pulled correctly from the QBCore shared vehicles when Config.VehiclesData is enabled.
  • Fixed some bugs with the fakeplate.
  • Fixed some locales on the UI not being translatable.
  • Fixed a bug where the closest vehicle checks sometimes don't get the correct vehicle.
  • Fixed the errors with the server event to save all mileage.
  • Fixed a typo which caused the server side garage space file to not load.
  • Fixed the avisa submarine not being storable in boat garages.
  • Fixed the GetGarageCount and GetGarageLimitfunctions not functioning correctly on QBCore servers.
  • Fixed the vehicle management command and garage space command not functioning correctly on QBCore servers.
  • Fixed random client framework error caused by framework not being initialized fast enough.
  • Fixed typo in /vehicle-plate command that caused an error.
  • Fixed an issue with esx trimming plates even with Config.VehicleDatabasePlateType enabled.
  • Optimised the job checks.
  • Fixed the hotwire action bar randomly starting at different stages.
  • Fixed the wrong data being added to the database when using the /vehicle-add command on QBCore.
  • Added extra checks to fix vehicle props if certain values are missing/nil/NaN.
  • Fixed an issue with the closest vehicle checks returning the wrong vehicle.
  • Fixed the heading for private garages.
  • Fixed a typo in the provided SQL file.
  • Fixed an error when using the QBCore property garage that occurred when a property did not have the coords set.
  • Fixed the issue where players could spawn their vehicles from other players property garage.
  • Fixed QBCore perms.

Files Changed:
  • All files
  • Specific Files
Update Type:
  • Mandatory
  • Optional
Changelog:
Add
  • Added gang garages. This is drag and drop on QBCore but its very easy to add compatibility with any other gang resource.
  • Added a config option to disable the inside garage without needing to make any other changes.
  • Added on duty checks alongside the job checks.
  • Added a new config option to allow certain jobs to remove fake plates.
  • READDED the Config.PlateFormat config option to allow use of plates with spaces.
  • Added a vehicle lockpick system for unlocking locked owned vehicles.
  • Added a 3rd argument to the server customise me's check and remove money functions to allow you to add the money from impound fees to police society for example.
  • Added a config option to disable the return vehicle feature.
  • Added a new chat command to delete private garages.
  • Added checks to warn you if one of your vehicles in qbcores shared vehicle table has been formatted incorrectly.
Fix
  • Fixed a bug with blacklisting vehicles in the inside garage.
  • Fixed a issue with 1 locale for cd_drawtextui being encrypted causing issues using other draw text resources.
  • Fixed the cd_drawtextui from not updating instantly when spawning a vehicle from the job garage.
  • Fixed a typo in the SQL file.
  • Added extra checks to warn you when there is issues with your vehicle props data caused by other scripts adding incorrect data to it.
  • Fixed a typo in the vehicle lock system possibly causing issues.
  • When a car is unimpounded the in_garage state gets set back to 1 so the player dosnt have to pay a return vehicle fee.
  • Fixed a typo with the garage tax amount being $0 when using the default price calculator method.
Copy link
On this page
START HERE
INSTALLATION GUIDE
Step 0 - For existing customers
Step 1 - Install the SQL
Step 2 - Fxmanifest
Step 3 - Configure the resource
Step 4 - Install the dependencies
Step 5 - Vehicle fuel
Step 6 - Vehicle plate format
OPTIONAL MODIFICATIONS
Vehicle Keys
Boat & Air garages
Property Garages
Job Garages
Changing Garage Names
Vehicles Data
Custom vehicle logos
QBCore
INFORMATION
Default Key Binds
Chat commands
Events
Exports
COMMON ISSUES
ERROR CODES
CHANGELOG