πŸ…ΏοΈ [PAID] [Standalone][ESX][QBCore] Garage system | Boat garage | Aircraft garage | Advanced garages | UI | Burevestnik

garageSystem

I welcome you CFX community!

Today I present to you the garage system! This system provides accessibility for all frameworks (ESX, QBCore, Standalone), huge editing capabilities using a configuration file, unique design. I’m sure you and your players will love it!

This system includes a nice user interface, a convenient configuration file, the ability to configure the entire resource and clear functionality.

Demonstration of the system:

:movie_camera: Preview Video

Screenshots

Example of a configuration file:

Configuration files
--/* 
-- β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ•—β–‘β–‘β–‘β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—β–‘β–‘β–‘β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ•—β–‘β–‘β–ˆβ–ˆβ•—β–ˆβ–ˆβ•—β–ˆβ–ˆβ•—β–‘β–‘β–ˆβ–ˆβ•—
-- β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•”β•β•β•β•β•β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–‘β–ˆβ–ˆβ•”β•
-- β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•¦β•β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–‘β•šβ–ˆβ–ˆβ•—β–‘β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•”β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•β•β–‘
-- β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ•”β•β•β•β–‘β–‘β–‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–‘β–ˆβ–ˆβ•”β•β•β•β–‘β–‘β–‘β•šβ•β•β•β–ˆβ–ˆβ•—β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•—β–‘
-- β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•¦β•β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘β–‘β–‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–‘β–‘β•šβ–ˆβ–ˆβ•”β•β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β–‘β–‘β–ˆβ–ˆβ•‘β–‘β•šβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–‘β•šβ–ˆβ–ˆβ•—
-- β•šβ•β•β•β•β•β•β–‘β–‘β•šβ•β•β•β•β•β•β–‘β•šβ•β•β–‘β–‘β•šβ•β•β•šβ•β•β•β•β•β•β•β–‘β–‘β–‘β•šβ•β•β–‘β–‘β–‘β•šβ•β•β•β•β•β•β•β•šβ•β•β•β•β•β•β–‘β–‘β–‘β–‘β•šβ•β•β–‘β–‘β–‘β•šβ•β•β–‘β–‘β•šβ•β•β•β•šβ•β•β•šβ•β•β–‘β–‘β•šβ•β•*/

Config = {}

--If ESX = false and QBCore = false, then Standalone will turn on
--Are you using ESX?
Config.UseESX = true

--Enable this if ESX throws an error: Used the getSharedObject Event, this event no longer exists!
Config.UseESX_lib = false

--Are you using QBCore?
Config.UseQBCore = false

--Are you using Standalone?
Config.UseStandalone = false

--Your own export to get the player's job
Config.StandaloneJobCheckExport = nil

--Disappearing of the player in the vehicle during viewing
Config.disappearingDuringInteraction = false

--The ability to embed your own exports to hide the hud
Config.useHudOffOnEvents = true
function hudOnEvent()
    DisplayRadar(true)
    --exports.Burevestnik_hud:Burevestnik_hud_on() -- Uncomment if you use Burevestnik_HUD system (https://burevestnik.tebex.io/package/5371893)
end
function hudOffEvent()
   DisplayRadar(false)
   --exports.Burevestnik_hud:Burevestnik_hud_off() -- Uncomment if you use Burevestnik_HUD system (https://burevestnik.tebex.io/package/5371893)
end

--Calculation of the vehicle properties parameter
Config.MeasurementSpeed = 3.6 --MPH = 2.236936

--Global heading value for the vehicle
Config.globalHeading = 90.0

--Interaction Button
Config.GarageOpenButton = 38

--This parameter outputs the player's session number to the server console. Config.SeparateSession must be true !
Config.SeparateSessionDebug = false
--Do you want to send the player to a separate session at the time of opening the dealer and test drive ? (Disabling this parameter can lead to errors)
Config.SeparateSession = true

function giveKeysToPlayerPick(vehicle, plate, model)Β·Β·Β·
end

function notificationInteraction(str)
    SetTextComponentFormat("STRING")
    AddTextComponentString(str)
    DisplayHelpTextFromStringLabel(0, 0, false, -1)
end

-- If true, the custom interaction menus are activated. Pay attention to the customInteractionButtonOpen and customInteractionButtonClose functions.
Config.UseCustomInteractionButton = false
Config.BurevestnikInteractionButton = "E"
Config.BurevestnikInteractionButtonText = "Press to interact"
-- The function of opening a custom interaction menu.
function customInteractionButtonOpen()
    --exports.Burevestnik_interaction_button:bur_nui_InteractionButton_open(Config.BurevestnikInteractionButton, Config.BurevestnikInteractionButtonText)  -- Uncomment if you use Burevestnik Interaction Button (https://forum.cfx.re/t/free-standalone-interaction-button/4860169)
end
-- The function of closing the custom interaction menu.
function customInteractionButtonClose()
    --exports.Burevestnik_interaction_button:bur_nui_InteractionButton_close() -- Uncomment if you use Burevestnik Interaction Button (https://forum.cfx.re/t/free-standalone-interaction-button/4860169)
end

function getVehicleProperties(vehiclePed) --returns a vehicle with information about it in the form of a json array
	if Config.UseESX thenΒ·Β·Β·
	end

	if Config.UseQBCore thenΒ·Β·Β·
	end

	if Config.UseStandalone thenΒ·Β·Β·
	end
end

getVehicle = function(plate) --Set up your framework here.
	if Config.UseESX thenΒ·Β·Β·
	end

    if Config.UseQBCore thenΒ·Β·Β·
	end

	if Config.UseStandalone thenΒ·Β·Β·
	end
end

storeVehicle = function(selectVehicleModel, plate, garageUniqueID, parkVehicle) --Saves vehicle data during parking
	if Config.UseESX thenΒ·Β·Β·
	end

	if Config.UseQBCore thenΒ·Β·Β·
	end

	if Config.UseStandalone thenΒ·Β·Β·
	end
end

deleteVehicle = function(plate) --Delete a vehicle from the database
	if Config.UseESX thenΒ·Β·Β·
	end

	if Config.UseQBCore thenΒ·Β·Β·
	end

	if Config.UseStandalone thenΒ·Β·Β·
	end
end

retrieveData = function(currentGarageID) --Retrieves the necessary information from the database
	if Config.UseESX thenΒ·Β·Β·
	end

    if Config.UseQB thenΒ·Β·Β·
    end

	if Config.UseStandalone thenΒ·Β·Β·
	end
end

onResourceStop = function() --This function returns all vehicles to the garage from which the vehicle.Β·Β·Β·
end

Config.Garage = {
	{
		garageUniqueID = "Garage1", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(460.7636, -1162.3346, 29.2918), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{
		garageUniqueID = "Garage2", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(459.9036, -1155.2394, 29.2918), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},


	{
		garageUniqueID = "Garage3", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(272.5008, -337.4057, 44.9198), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{
		garageUniqueID = "Garage4", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(-1810.7857, -337.1359, 43.5520), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{
		garageUniqueID = "Garage5", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(1886.67, 3716.10, 32.82), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{
		garageUniqueID = "Garage6", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(-76.74, 6346.73, 31.07), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{
		garageUniqueID = "Garage7", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(850.4742, -1054.4, 28.0727), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{
		garageUniqueID = "Garage8", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(1109.02, 47.09, 80.76), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{
		garageUniqueID = "Garage9", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(1022.06, -763.88, 57.95), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{
		garageUniqueID = "Garage10", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(53.47192, -883.3654, 30.29851), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{
		garageUniqueID = "Garage11", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(-71.00, 900.06, 235.59), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{
		garageUniqueID = "Garage12", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 2.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 28, --Blip color.
		blipText = "Garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(-3163.21, 1130.80, 20.99), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{Β·Β·Β·
	},
	{Β·Β·Β·
	},
	{Β·Β·Β·
	},
	{Β·Β·Β·
	},
	{Β·Β·Β·
	},
	{Β·Β·Β·
	},
	{Β·Β·Β·
	},
	{Β·Β·Β·
	},
	{
		garageUniqueID = "GarageBoat1", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 5.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 12, --Blip color.
		blipText = "Boat garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(-721.32, -1348.54, 0.97), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
	{
		garageUniqueID = "GarageAircraft1", --The unique name of the garage, which in no case should be repeated.
		garageName = "burevestnik.tebex.io | Garage system", --Garage name.
		interactionDistance = 5.0, --Distance for interaction with the garage.
		useBlip = true, --The ability to use blip on the map for this ped.
		blipID = 357, --Blip ID.
		blipScale = 0.7, --Blip scale.
		blipColor = 34, --Blip color.
		blipText = "Aircraft garage", --Blip text.
		UseMarkers = false, --Do you want to use a marker ?
		MarkerType = 1, --Marker type
		MarkerSizeX = 0.5, --Marker size X
		MarkerSizeY = 0.5, --Marker size Y
		MarkerSizeZ = 0.5, --Marker size Z
		MarkerColourR = 122, --Marker colour R
		MarkerColourG = 195, --Marker colour G
		MarkerColourB = 254, --Marker colour B
		MarkerColourA = 20, --Marker colour A
		allowedJobsInteraction = {"all"}, --Jobs that can interact with the garage. If "all", then everyone can interact with the garage.
		location = vector3(-1275.56, -3388.01, 14.24), --Garage location
		vehicles = {}, --List of vehicles from database. Leave this array empty!
	},
}

--Translation config
Config.Translation = {
    ['menu'] = 'Press ~INPUT_CONTEXT~ to ~g~interact',
	['menu2'] = 'Press ~INPUT_CONTEXT~ to ~g~park the vehicle',
    ['access'] = '~g~You have successfully taken your vehicle!',
	['parked'] = '~g~You have successfully parked your vehicle!',
	['noaccess'] = '~r~This is not your vehicle!',
	['translationText1'] = 'ESC',
	['translationText2'] = 'Exit showroom',
	['translationText3'] = '',
	['translationText4'] = 'Delete a vehicle',
	['translationText5'] = 'Get a vehicle',
	['translationText6'] = "Garage showroom",
	['translationText7'] = 'Extra color',
	['translationText8'] = 'Primary colour',
	['translationText9'] = 'BACKSPACE',
	['translationText10'] = 'Go back',
	['translationText11'] = 'Remove your vehicle?',
	['translationText12'] = 'Yes',
	['translationText13'] = 'No',
	['translationText14'] = 'Error returning the vehicles to the garage!',
	['translationText15'] = 'We are preparing your vehicle for delivery.',
	['translationText16'] = 'RMB',
	['translationText17'] = 'Hold key to look around',
	['translationText18'] = 'Speed',
	['translationText19'] = 'Acceleration',
	['translationText20'] = 'Control',
	['translationText21'] = 'Brakes',
	['translationText22'] = 'Capacity',
	['translationText23'] = 'The vehicles was successfully returned to the garage!',
	['translationText24'] = 'BEFORE BUCKET SET: ',
	['translationText25'] = 'AFTER BUCKET SET: ',
	['translationText26'] = 'BEFORE BUCKET RETURN: ',
	['translationText27'] = 'AFTER BUCKET RETURN: ',
}

Optimization (The script consumes):

0.01 ms in a quiet state.

0.03 ms in an active state.

What does this system include:

  • This system works on all versions of ESX, QBCore, as well as STANDALONE!
  • Beautiful user interface!
  • The ability to enable blips on the map!
  • The ability to enable markers!
  • Incredibly customizable configuration file!
  • Garages display the custom names!
  • The ability to set garage names!
  • Preservation of the state of the main components of the vehicle
  • More than 20 pre-installed garages all over the map!
  • Support for our :nazar_amulet:free Interaction Button resource!
  • Support of our :red_car: Vehicle shop system!
  • The possibility of endless garage settings!
  • Each garage is unique (This means if you park the vehicle in garage A, you will not be able to pick up the vehicle from garage B)!
  • The vehicle goes to the last known garage after the restart!
  • The ability to use the garage only for certain jobs!
  • You can completely change the user interface at will!
  • The ability to customize database queries for your own systems!
  • Of course support, I’m ready to help you!

:shopping_cart: [OPEN SOURCE] You can get that resource in my Tebex.

:shopping_cart: [ESCROW] You can get that resource in my Tebex.

TOP SALES

qs3 hudsystem-min bpLogo

You may also be interested in my other resources:

My other resources

mg mg mg

mg mg crate

Anomaly zones img animsystem bpLogo

hudsystem-min OrangeSystem barsystem

storev2 qs3 dialSystem

speedcam_img lockpick train

LicensePlate pop 6q6g5y

as mg ars

fuelsystem mwpLG8T - Imgur e5f6ad277b5836eb5fa4db2b8207c3e46beb8362

imgonline-com-ua-Resize-czg8px7HwUHn My project (1) My project (5)

My project kaws My project (6)

a bgk bg

bg st11

Code accessible Open source: Yes \ Escrow: No - Available only: config, ui
Subscription based No
Lines (approximately) ~2000
Requirements Standalone/ESX/QBCore
Support Yes
4 Likes

So could this be set to use Ace Perms for standalone for garages that we want to restrict to certain β€œjobs”? Since we don’t have server defined jobs like with ESX or QB, it would be nice if we could specific an Ace Perm like garage.leo and then when someone attempts to access a garage at a police station, it makes sure they have that ace?

1 Like

If Ace Perms have an export that returns the current permission of the player, then you can insert it into the Config.StandaloneJobCheckExport parameter to implement verification of the necessary permissions.

They are a native function so if the garage is triggered via client side, I would just need to call a server event to check IsPlayerAceAllowed against the required perm and then if they have it, it can trigger back to a client event and if not, trigger a notification telling them they can’t do it. This is one of those things were it comes down to I’m not a developer by any means, but with the help of google, forums, and some luck, I can muddle my way through a fair amount so command based functions I can pretty easily add Ace checks into but other things, it’s a little harder for me until I get my skills built up. I would probably need to buy the open source version to be able to properly do it which I’m not opposed to, I just am not super fond of the idea of spending that much on something that I’m not sure if my skills are high enough to modify to do what I need yet so I’ll have to give this some thought first.

Another thought I had would be, would it be possible in an update to have some garages linked? it’s described above that all garages are independent so a vehicle parked in garage 1 can only be pulled from garage 1 but it would be nice (and yea, I know it’s not realistic) to be able to have say, LEO garages linked so if you park an LEO vehicle in the Sandy PD garage, you can get it from any other PD garage. Basically like a config option when adding individual garages for garageIsFleet = false meaning it’s independent or garageIsFleet = "LEO" would make it shared with any others labeled as LEO? (LEO being arbitrary with whatever the server sets so there could be multiple fleets so LEO, FD, EMS, etc… could be their own fleets)

1 Like

You can do this by setting the same garage IDs. In that case, you will be able to make some linked garages.
But as you correctly noted, this is not entirely realistic. :smile:

1 Like

Yea, the realism side of this doesn’t bother me so much due to the fact I look at it from the perspective of many police departments utilize a fleet system meaning cars would be available at all the stations and using the garage like this would just allow the officers to already have them configured the way they want (light extras, livery, license plate). Def not something I’d do for public/civilian vehicles but for emergency services it makes sense. That’s awesome that you have already thought of that though and it’s functional!!

1 Like

Wonderful :dizzy:

1 Like

Thanks! :green_heart:

1 Like

A warm-hearted and kind author, able to solve problems that arise anytime, anywhere, the UI of the plugin is a novelty, and it is a good merchant worth choosing!

1 Like

Thank you very much for your review :heart:

Update 1.0.1 of all versions

  • Fixed a bug that in some cases caused interaction to fail on the QBCore version.

:mega: Contact me if you have any questions.

Update 1.1.0 of all versions

  • The setVehicleProperties function has been added to the configuration file.

:mega: Contact me if you have any questions.