T1GER Garage

Documentation, troubleshooting and support for T1GER Garage resource.

INSTALLATION

DEPENDENCIES

START

  1. Extractt1ger_garage.rar and place it into your resource folder.

  2. Install the SQL file into your database (⚠️see #SQL for instructions).

  3. Setupconfig.lua (⚠️see #CONFIGURATION for instructions).

  4. Addensure t1ger_garageto your server start config (place it anywhere below the dependency & framework resources).

  5. UpdateESX Vehicle Properties (⚠️see #ESX VEHICLE PROPERTIES for instructions).

  6. Update Fuel functions to correctly apply fuel on a vehicle or get fuel from a vehicle (⚠️see #FUEL SETUP for instructions).

  7. 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.

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

Inclient/utils.lua there is a file where you can edit some utility functions. In here you can customize notifications, draw texts and many other functions. Please do read it through and make changes to meet your server's preferences.

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
end

FUEL 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

If you are using other types than'car','aircraft' and'boat', make sure to add new normal public garages inConfig.Garage.Location withtype set to whatever type you have.

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.

IMPOUNDS

InConfig.Impound you can customize the impound settings of this resource.

If you are using other types than'car','aircraft' and'boat', make sure to add new impounds inConfig.Impound.Location withtype set to whatever type you have.

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.

Please note, to use the extra menu, vehicles are restricted by vehicle class, so put in the relevant classes in the config option to be able to use the extra menu.

MISCELLANEOUS

CHAT COMMANDS

Please note, all these command strings are configurable and can be disabled as well.

EXPORTS

These are available exports in the resource - use them as you please and find necessary.

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.

WATER INSIDE SHELL I spawn a garage shell and there is water in-side.

✔️ Temporary solution is to find a new and better spot for the garage position.

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.

🆘 IF YOU HAVE TRIED YOUR BEST AND NOTHING WORKS, THEN CONTACT US ON OUR OFFICIAL DISCORD: CLICK HERE.

Last updated