T1GER Garage
Documentation, troubleshooting and support for T1GER Garage resource.

INSTALLATION
DEPENDENCIES
Dependency
Download
Install
Description
START
Extract
t1ger_garage.rarand place it into your resource folder.Install the SQL file into your database (⚠️see #SQL for instructions).
Setup
config.lua(⚠️see #CONFIGURATION for instructions).Add
ensure t1ger_garageto your server start config (place it anywhere below the dependency & framework resources).Update
ESX Vehicle Properties(⚠️see #ESX VEHICLE PROPERTIES for instructions).Update Fuel functions to correctly apply fuel on a vehicle or get fuel from a vehicle (⚠️see #FUEL SETUP for instructions).
If you want to use private garages, install & ensure K4MB1 Garage Shells Pack (download link in README).
SQL
Please open thet1ger_garage.sql file. And follow the below instructions:
Copy the following query and execute it in your database inowned_vehicles table:
ALTER TABLE `owned_vehicles`
ADD IF NOT EXISTS `state` TINYINT(1) NOT NULL DEFAULT 1,
ADD IF NOT EXISTS `type` VARCHAR(20) NOT NULL DEFAULT 'car',
ADD IF NOT EXISTS `fuel` DECIMAL(11, 2) NOT NULL DEFAULT 50,
ADD IF NOT EXISTS `seized` TINYINT(1) NOT NULL DEFAULT 0,
ADD IF NOT EXISTS `garage` VARCHAR(50) NULL DEFAULT NULL;Select the appropriate tab below, depending on whether you already have t1ger_garage table in your database or not. If you are a new customer, then you obviously won't have it.
If you have t1ger_garage table in your database, then you need to update the column names and properties. Do so, by executing the following query in your database:
ALTER TABLE `t1ger_garage` CHANGE COLUMN `garageID` `id` INT(11);
ALTER TABLE `t1ger_garage` MODIFY `vehicles` LONGTEXT DEFAULT NULL;You also want to make sure all vehicles in private garages are updated to be stored in a default garage A. So execute this query afterwards:
ALTER TABLE `t1ger_garage` CHANGE COLUMN `garageID` `id` INT(11);
UPDATE `owned_vehicles` SET garage = NULL WHERE garage = 'private';This will ensure that players that had vehicles in their private garage, can now take them out from any public garage.
If you do not have t1ger_garage (is a new customer/never used private garages) then simply execute the following query in your database:
CREATE TABLE `t1ger_garage` (
`identifier` VARCHAR(100) NOT NULL,
`id` INT(11),
`vehicles` LONGTEXT DEFAULT NULL,
PRIMARY KEY (`id`)
);CONFIGURATION
Please go through all configurable options & settings in config.lua and configure them to your server's preferences.
Also please read the comments at the end of each line, for a brief information on what the option does.
UTILITIES
ESX VEHICLE PROPERTIES
If using ESX Legacy SKIP this process.
Click on the tabs to view the source code forESX.Game.GetVehicleProperties andESX.Game.SetVehicleProperties.
Go to es_extended/client/functions.lua, find the function calledESX.Game.GetVehicleProperties and replace that function with the provided function below:
ESX.Game.GetVehicleProperties = function(vehicle)
if DoesEntityExist(vehicle) then
local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
local extras = {}
for extraId=0, 12 do
if DoesExtraExist(vehicle, extraId) then
local state = IsVehicleExtraTurnedOn(vehicle, extraId) == 1
extras[tostring(extraId)] = state
end
end
local tyres = {}
for i = 0, 3 do
local index = i
if i == 2 then index = 4 end
if i == 3 then index = 5 end
tyres[i] = false
if IsVehicleTyreBurst(vehicle, index, false) or IsVehicleTyreBurst(vehicle, index, true) then tyres[i] = true end
end
local doors = {}
for i = 0, 5 do
doors[i] = false
if IsVehicleDoorDamaged(vehicle, i) then doors[i] = true end
end
local windows = {}
for i = 0, 3 do
windows[i] = false
if not IsVehicleWindowIntact(vehicle, i) then windows[i] = true end
end
return {
model = GetEntityModel(vehicle),
plate = ESX.Math.Trim(GetVehicleNumberPlateText(vehicle)),
plateIndex = GetVehicleNumberPlateTextIndex(vehicle),
bodyHealth = ESX.Math.Round(GetVehicleBodyHealth(vehicle), 1),
engineHealth = ESX.Math.Round(GetVehicleEngineHealth(vehicle), 1),
tankHealth = ESX.Math.Round(GetVehiclePetrolTankHealth(vehicle), 1),
fuelLevel = ESX.Math.Round(GetVehicleFuelLevel(vehicle), 1),
dirtLevel = ESX.Math.Round(GetVehicleDirtLevel(vehicle), 1),
color1 = colorPrimary,
color2 = colorSecondary,
pearlescentColor = pearlescentColor,
wheelColor = wheelColor,
wheels = GetVehicleWheelType(vehicle),
windowTint = GetVehicleWindowTint(vehicle),
xenonColor = GetVehicleXenonLightsColour(vehicle),
neonEnabled = {
IsVehicleNeonLightEnabled(vehicle, 0),
IsVehicleNeonLightEnabled(vehicle, 1),
IsVehicleNeonLightEnabled(vehicle, 2),
IsVehicleNeonLightEnabled(vehicle, 3)
},
neonColor = table.pack(GetVehicleNeonLightsColour(vehicle)),
extras = extras,
tyreSmokeColor = table.pack(GetVehicleTyreSmokeColor(vehicle)),
modSpoilers = GetVehicleMod(vehicle, 0),
modFrontBumper = GetVehicleMod(vehicle, 1),
modRearBumper = GetVehicleMod(vehicle, 2),
modSideSkirt = GetVehicleMod(vehicle, 3),
modExhaust = GetVehicleMod(vehicle, 4),
modFrame = GetVehicleMod(vehicle, 5),
modGrille = GetVehicleMod(vehicle, 6),
modHood = GetVehicleMod(vehicle, 7),
modFender = GetVehicleMod(vehicle, 8),
modRightFender = GetVehicleMod(vehicle, 9),
modRoof = GetVehicleMod(vehicle, 10),
modEngine = GetVehicleMod(vehicle, 11),
modBrakes = GetVehicleMod(vehicle, 12),
modTransmission = GetVehicleMod(vehicle, 13),
modHorns = GetVehicleMod(vehicle, 14),
modSuspension = GetVehicleMod(vehicle, 15),
modArmor = GetVehicleMod(vehicle, 16),
modTurbo = IsToggleModOn(vehicle, 18),
modSmokeEnabled = IsToggleModOn(vehicle, 20),
modXenon = IsToggleModOn(vehicle, 22),
modHeadlight = GetVehicleHeadlightsColour(vehicle),
modFrontWheels = GetVehicleMod(vehicle, 23),
modBackWheels = GetVehicleMod(vehicle, 24),
modPlateHolder = GetVehicleMod(vehicle, 25),
modVanityPlate = GetVehicleMod(vehicle, 26),
modTrimA = GetVehicleMod(vehicle, 27),
modOrnaments = GetVehicleMod(vehicle, 28),
modDashboard = GetVehicleMod(vehicle, 29),
modDial = GetVehicleMod(vehicle, 30),
modDoorSpeaker = GetVehicleMod(vehicle, 31),
modSeats = GetVehicleMod(vehicle, 32),
modSteeringWheel = GetVehicleMod(vehicle, 33),
modShifterLeavers = GetVehicleMod(vehicle, 34),
modAPlate = GetVehicleMod(vehicle, 35),
modSpeakers = GetVehicleMod(vehicle, 36),
modTrunk = GetVehicleMod(vehicle, 37),
modHydrolic = GetVehicleMod(vehicle, 38),
modEngineBlock = GetVehicleMod(vehicle, 39),
modAirFilter = GetVehicleMod(vehicle, 40),
modStruts = GetVehicleMod(vehicle, 41),
modArchCover = GetVehicleMod(vehicle, 42),
modAerials = GetVehicleMod(vehicle, 43),
modTrimB = GetVehicleMod(vehicle, 44),
modTank = GetVehicleMod(vehicle, 45),
modWindows = GetVehicleMod(vehicle, 46),
modLivery = GetVehicleLivery(vehicle),
tyres = tyres,
doors = doors,
windows = windows
}
else
return
end
endGo to es_extended/client/functions.lua, find the function calledESX.Game.SetVehicleProperties and replace that function with the provided function below:
ESX.Game.SetVehicleProperties = function(vehicle, props)
if DoesEntityExist(vehicle) then
local colorPrimary, colorSecondary = GetVehicleColours(vehicle)
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
SetVehicleModKit(vehicle, 0)
if props.plate then SetVehicleNumberPlateText(vehicle, props.plate) end
if props.plateIndex then SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex) end
if props.bodyHealth then SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0) end
if props.engineHealth then SetVehicleEngineHealth(vehicle, (props.engineHealth + 0.0)) end
if props.tankHealth then SetVehiclePetrolTankHealth(vehicle, props.tankHealth + 0.0) end
if props.fuelLevel then SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0) end
if props.dirtLevel then SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0) end
if props.color1 then SetVehicleColours(vehicle, props.color1, colorSecondary) end
if props.color2 then SetVehicleColours(vehicle, props.color1 or colorPrimary, props.color2) end
if props.pearlescentColor then SetVehicleExtraColours(vehicle, props.pearlescentColor, wheelColor) end
if props.wheelColor then SetVehicleExtraColours(vehicle, props.pearlescentColor or pearlescentColor, props.wheelColor) end
if props.wheels then SetVehicleWheelType(vehicle, props.wheels) end
if props.windowTint then SetVehicleWindowTint(vehicle, props.windowTint) end
if props.neonEnabled then
SetVehicleNeonLightEnabled(vehicle, 0, props.neonEnabled[1])
SetVehicleNeonLightEnabled(vehicle, 1, props.neonEnabled[2])
SetVehicleNeonLightEnabled(vehicle, 2, props.neonEnabled[3])
SetVehicleNeonLightEnabled(vehicle, 3, props.neonEnabled[4])
end
if props.extras then
for extraId,enabled in pairs(props.extras) do
if enabled then
SetVehicleExtra(vehicle, tonumber(extraId), 0)
else
SetVehicleExtra(vehicle, tonumber(extraId), 1)
end
end
end
if props.neonColor then SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3]) end
if props.xenonColor then SetVehicleXenonLightsColour(vehicle, props.xenonColor) end
if props.modSmokeEnabled then ToggleVehicleMod(vehicle, 20, true) end
if props.tyreSmokeColor then SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3]) end
if props.modSpoilers then SetVehicleMod(vehicle, 0, props.modSpoilers, false) end
if props.modFrontBumper then SetVehicleMod(vehicle, 1, props.modFrontBumper, false) end
if props.modRearBumper then SetVehicleMod(vehicle, 2, props.modRearBumper, false) end
if props.modSideSkirt then SetVehicleMod(vehicle, 3, props.modSideSkirt, false) end
if props.modExhaust then SetVehicleMod(vehicle, 4, props.modExhaust, false) end
if props.modFrame then SetVehicleMod(vehicle, 5, props.modFrame, false) end
if props.modGrille then SetVehicleMod(vehicle, 6, props.modGrille, false) end
if props.modHood then SetVehicleMod(vehicle, 7, props.modHood, false) end
if props.modFender then SetVehicleMod(vehicle, 8, props.modFender, false) end
if props.modRightFender then SetVehicleMod(vehicle, 9, props.modRightFender, false) end
if props.modRoof then SetVehicleMod(vehicle, 10, props.modRoof, false) end
if props.modEngine then SetVehicleMod(vehicle, 11, props.modEngine, false) end
if props.modBrakes then SetVehicleMod(vehicle, 12, props.modBrakes, false) end
if props.modTransmission then SetVehicleMod(vehicle, 13, props.modTransmission, false) end
if props.modHorns then SetVehicleMod(vehicle, 14, props.modHorns, false) end
if props.modSuspension then SetVehicleMod(vehicle, 15, props.modSuspension, false) end
if props.modArmor then SetVehicleMod(vehicle, 16, props.modArmor, false) end
if props.modTurbo then ToggleVehicleMod(vehicle, 18, props.modTurbo) end
if props.modXenon then ToggleVehicleMod(vehicle, 22, props.modXenon) end
if props.modHeadlight then SetVehicleHeadlightsColour(vehicle, props.modHeadlight) end
if props.modFrontWheels then SetVehicleMod(vehicle, 23, props.modFrontWheels, false) end
if props.modBackWheels then SetVehicleMod(vehicle, 24, props.modBackWheels, false) end
if props.modPlateHolder then SetVehicleMod(vehicle, 25, props.modPlateHolder, false) end
if props.modVanityPlate then SetVehicleMod(vehicle, 26, props.modVanityPlate, false) end
if props.modTrimA then SetVehicleMod(vehicle, 27, props.modTrimA, false) end
if props.modOrnaments then SetVehicleMod(vehicle, 28, props.modOrnaments, false) end
if props.modDashboard then SetVehicleMod(vehicle, 29, props.modDashboard, false) end
if props.modDial then SetVehicleMod(vehicle, 30, props.modDial, false) end
if props.modDoorSpeaker then SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false) end
if props.modSeats then SetVehicleMod(vehicle, 32, props.modSeats, false) end
if props.modSteeringWheel then SetVehicleMod(vehicle, 33, props.modSteeringWheel, false) end
if props.modShifterLeavers then SetVehicleMod(vehicle, 34, props.modShifterLeavers, false) end
if props.modAPlate then SetVehicleMod(vehicle, 35, props.modAPlate, false) end
if props.modSpeakers then SetVehicleMod(vehicle, 36, props.modSpeakers, false) end
if props.modTrunk then SetVehicleMod(vehicle, 37, props.modTrunk, false) end
if props.modHydrolic then SetVehicleMod(vehicle, 38, props.modHydrolic, false) end
if props.modEngineBlock then SetVehicleMod(vehicle, 39, props.modEngineBlock, false) end
if props.modAirFilter then SetVehicleMod(vehicle, 40, props.modAirFilter, false) end
if props.modStruts then SetVehicleMod(vehicle, 41, props.modStruts, false) end
if props.modArchCover then SetVehicleMod(vehicle, 42, props.modArchCover, false) end
if props.modAerials then SetVehicleMod(vehicle, 43, props.modAerials, false) end
if props.modTrimB then SetVehicleMod(vehicle, 44, props.modTrimB, false) end
if props.modTank then SetVehicleMod(vehicle, 45, props.modTank, false) end
if props.modWindows then SetVehicleMod(vehicle, 46, props.modWindows, false) end
if props.modLivery then
SetVehicleMod(vehicle, 48, props.modLivery, false)
SetVehicleLivery(vehicle, props.modLivery)
end
if props.tyres then
for k,v in pairs(props.tyres) do
local index = tonumber(k)
if tonumber(k) == 2 then index = 4 end
if tonumber(k) == 3 then index = 5 end
if props.tyres[k] == true then
SetVehicleTyreBurst(vehicle, index, true, 1000.0)
end
end
end
if props.doors then
for k,v in pairs(props.doors) do
if props.doors[k] == true then
SetVehicleDoorBroken(vehicle, tonumber(k), true)
end
end
end
if props.windows then
for k,v in pairs(props.windows) do
if props.windows[k] == true then
SmashVehicleWindow(vehicle, tonumber(k))
end
end
end
else
return
end
endFUEL SETUP
If you are using a custom fuel script, such asLegacyFuel, then you need to setConfig.HasFuelScript to true, otherwise resource will use FiveM's native for setting/getting fuel. You also need to add your fuel script's functions for getting fuel and setting fuel.
Setting Fuel:
Go tot1ger_garage/client/main.lua and find the function called:SetVehicleFuel. I useLegacyFuel, so you should see an export for that resource, simply replace this export with the respective function/export from your fuel script, given the case that you are not usingLegacyFuel.
Getting Fuel:
Go tot1ger_garage/client/main.lua and find the function called:GetVehicleFuel. I useLegacyFuel, so you should see an export for that resource, simply replace this export with the respective function/export from your fuel script, given the case that you are not usingLegacyFuel.
PUBLIC GARAGES
Players can also use the built-in command to view a list of their garages, by typing:/garages.
JOB GARAGES
InConfig.JobGarage you can add job garages around the map, where you have to specify the type of car (example: 'car' or 'aircraft'), options (example: 'spawner', 'society' or 'both'), jobs (example: '{'police','lspd'}), position to interaction, draw text, spawn pos of the vehicle (you can use the same as interact position), draw text to store, blip & markers settings. Read the end-line comments to understand each option!
The resource supports two types of job garages (click the tabs to see):
These are spawned vehicles and are not owned by anyone. They can be spawned unlimited. You can configure job-grade, model name, vehicle label and type for each spawn-able job vehicle.
To use this type of job-garage, you simply need to set the job-garage type as 'spawner'
Remember to add your job-vehicles, jobs and job-grades inConfig.JobVehicles.
These are vehicles from yourowned_vehicles table whereowner is ajob-name and not a player identifier. This allows players from a job to use vehicles registered for their job. They can only take the vehicle out if they have the said job and if the vehicle is not already taken out.
To use this type of job-garage, you simply need to set the job-garage type as 'society'
Please note, you have to manually set theowner column to a job name or make an implementation in your vehicle shop resource to set theowner column to a job name instead of an identifier. This part is not support by us.
IMPOUNDS
InConfig.Impound you can customize the impound settings of this resource.
SET VEHICLE IMPOUNDED
To send a vehicle to impound, you can use the built-in export function that works in client-sided environments, see the code block below or use the built-in (whitelisted) chat-command/impound.
exports[t1ger_garage]:SetVehicleImpounded(car, state)
-- car is the vehicle you want to impound
-- state is usually false, only set to true if it's being seized (player cannot take from impound, unless contacting police)!You can also leave the arguments empty and use:exports[t1ger_garage]:SetVehicleImpounded(). The resource will find the closest vehicle or the vehicle player is in, impound & delete it by itself.
SEIZE & RELEASE
You can use the above export function with state set to true, to seize the closest vehicle or the vehicle player is in. You can also use the built-in chat-command (whitelisted):/seize.
When a vehicle is seized by (whitelisted) police jobs, player can see the vehicle in the impound list but will not be able to take it out. Only the (whitelisted) police jobs can release the vehicle from the police impound register menu and then player will be able to take the vehicle from the impound lot.
PRIVATE GARAGES
Make sure you have K4MB1 Garage Shells Pack (link in README), downloaded and installed, before using these.
EXTRA/LIVERY
InConfig.Extras you can add as many extra positions you want around the map.
MISCELLANEOUS
CHAT COMMANDS
Command
Description
/garages
See a complete list of owned vehicles and respective garage, type and state.
/impound
Impound closest vehicle or the vehicle player is in.
/seize
Seize the closest vehicle or the vehicle player is in.
EXPORTS
Export Function
Description
exports['t1ger_keys']:SetVehicleImpounded(car, state)
Updates an owned vehicle to be either impounded/seize, read more here.
SCRIPT NOT WORKING / ERRORS
VEHICLE NAME NULL ❓ My vehicles show up as NULL and not by name.
✔️ Please read this post on CFX Forum on how to properly add custom vehicles to your server. If that didn't fix your issue, then find the respectivevehicles.meta file (typically located in your stream folder for the given vehicle). In here you want to set the<gameName> property to match the given vehicle mode in yourvehicles table in database. There is a youtube guide here, I don't understand the language but the video itself should give you an idea.
KEYS FOR JOB VEHICLES ❓ How do I lock/unlock my job-vehicles?
✔️ You have to use your locking resource to lock/unlock. By default, my resource supportst1ger-keys, you can get it from here: click here.
Last updated