Configuration

Default configuration

This is the default configuration of the script. Take note that there is others configurations in the bridge files : Configuration for your notification resource, keys system, fuel system, and more...

Config = { publicGarages = {}, jobGarages = {}, gangGarages = {}, impounds = {} }

-- [string] → The locale you want to use. If the locale does not exist, the script will use the default locale.
Config.locale = GetConvar(GetCurrentResourceName() .. ":locale", "en")

-- [string] → The bridge you want to use. You can put a valid bridge or put "auto_detect" to let the script choose the best bridge for you.
Config.bridge = "auto_detect"

-- [boolean] → If you want the script to check for updates. If the script is not up to date, it will print a message in the console.
Config.checkForUpdates = true

-- [string] → The system you want to use to interact with the locations. You can put "marker" or "target"
Config.interactSystem = GetConvar("lyre_garage:interact", "marker")

-- [boolean] → If you want the background to be blurred when the menu is opened.
Config.backgroundBlur = false

-- [boolean] → If you want to apply a stylized filter to vehicle images for better visual rendering.
Config.useVehicleImageFilter = true

-- [string] → The online source to use as a fallback for vehicle images when local images are not found.
-- Set to false to disable online image loading.
Config.imageSecondLoaderOnlineSource = "https://raw.githubusercontent.com/lyrescripts/lyre_garage-images/refs/heads/main/images/"

-- [table] → The hud functions, use them if you want to show and hide your hud when the menu is opened.
Config.hud = {
	show = function() end,
	hide = function() end,
}

-- [string] → The method you want to use to spawn the vehicle.
-- Avalaible options are "serversetter" or "client"
-- It is recommended to use the "client" method if you want to ensure 100% that the vehicle always spawns correctly.
-- However, the "serversetter" method allows vehicles to spawn server-side, which gives you the ability to enable
-- lockdown on your server and provides an easy way to implement a highly effective anti-cheat system.
-- Note that using the "serversetter" method may, in some cases on very large servers (300-400 connected players),
-- cause synchronization issues. This is due to how FiveM works, and we have no control over it.
-- It is up to you to choose the method that best suits your needs.
Config.spawnVehicleMethod = "serversetter"

-- [boolean] → If you want vehicles to be locked when they spawn.
Config.lockVehicleOnSpawn = false

-- [table] → The maximum upgrades for the vehicles.
Config.vehiclesMaxUpgrades = {
	["modEngine"] = 3,
	["modBrakes"] = 2,
	["modTransmission"] = 2,
	["modTurbo"] = 1,
}

-- [boolean] → If you want to use the unique garage system. If set to true, vehicle cannot be take out from a different garage
-- than the one they are stored in.
Config.uniqueGarage = true

-- [boolean] → If you want to use the unique impound system. If set to true, vehicle cannot be take out from a different impound
-- than the one they are impounded in.
Config.uniqueImpounds = true

-- [boolean] → If you want the script to block NPC vehicles from spawning in garage zones. Big performance impact when enabled, prefer other way to block NPC spawns if possible.
Config.antiNPCSpawn = false

-- [boolean] → If you want to enable duty verification for job garages. If set to true, players must be on duty to access job garages.
Config.jobGaragesDutyVerification = false

-- [boolean] → If you want to enable duty verification for gang garages. If set to true, players must be on duty to access gang garages.
Config.gangGaragesDutyVerification = false

-- [number] → The price to transfer a vehicle between garages
Config.transferVehiclePrice = 500

-- [table] → Blacklist of vehicle models that cannot be transferred to another owner
-- Format: ["model_name"] = true
Config.vehicleSellBlacklist = {
	-- Example:
	-- ["adder"] = true,
	-- ["t20"] = true,
}

-- [boolean] → Does the garage blips use location names or not.
-- true : The blips will use the location names (ex: "Garage A")
-- false : The blips will use generic names (ex: "Public Garage")
Config.blipUseLocationName = false

-- [table] → Configuration for blips
Config.blips = {
	["public"] = {
		sprite = 357, -- [number] → The sprite ID for the blip
		scale = 1.0, -- [number] → The scale of the blip
		color = 3, -- [number] → The color ID for the blip
		isShortRange = true, -- [boolean] → Whether the blip is short-range
	},
	["public_boat"] = {
		sprite = 356, -- [number] → The sprite ID for the blip
		scale = 1.0, -- [number] → The scale of the blip
		color = 3, -- [number] → The color ID for the blip
		isShortRange = true, -- [boolean] → Whether the blip is short-range
	},
	["public_heli"] = {
		sprite = 360, -- [number] → The sprite ID for the blip
		scale = 1.0, -- [number] → The scale of the blip
		color = 3, -- [number] → The color ID for the blip
		isShortRange = true, -- [boolean] → Whether the blip is short-range
	},
	["public_plane"] = {
		sprite = 359, -- [number] → The sprite ID for the blip
		scale = 1.0, -- [number] → The scale of the blip
		color = 3, -- [number] → The color ID for the blip
		isShortRange = true, -- [boolean] → Whether the blip is short-range
	},
	["impound"] = {
		sprite = 68, -- [number] → The sprite ID for the blip (police impound icon)
		scale = 1.0, -- [number] → The scale of the blip
		color = 1, -- [number] → The color ID for the blip (red)
		isShortRange = true, -- [boolean] → Whether the blip is short-range
	},
	["impound_boat"] = {
		sprite = 455, -- [number] → The sprite ID for the blip (boat impound)
		scale = 1.0, -- [number] → The scale of the blip
		color = 1, -- [number] → The color ID for the blip (red)
		isShortRange = true, -- [boolean] → Whether the blip is short-range
	},
	["impound_heli"] = {
		sprite = 64, -- [number] → The sprite ID for the blip (helicopter impound)
		scale = 1.0, -- [number] → The scale of the blip
		color = 1, -- [number] → The color ID for the blip (red)
		isShortRange = true, -- [boolean] → Whether the blip is short-range
	},
	["impound_plane"] = {
		sprite = 307, -- [number] → The sprite ID for the blip (plane impound)
		scale = 1.0, -- [number] → The scale of the blip
		color = 1, -- [number] → The color ID for the blip (red)
		isShortRange = true, -- [boolean] → Whether the blip is short-range
	},
	["job"] = {
		sprite = 357, -- [number] → The sprite ID for the blip
		scale = 1.0, -- [number] → The scale of the blip
		color = 5, -- [number] → The color ID for the blip (yellow)
		isShortRange = true, -- [boolean] → Whether the blip is short-range
	},
	["gang"] = {
		sprite = 357, -- [number] → The sprite ID for the blip
		scale = 1.0, -- [number] → The scale of the blip
		color = 1, -- [number] → The color ID for the blip (red)
		isShortRange = true, -- [boolean] → Whether the blip is short-range
	},
}

-- [table] → Custom actions that appear as buttons in garage vehicle menus
-- These actions will be available in Public Garage, Property Garage, Job Owned Garage, and Gang Owned Garage menus
-- Each action will receive comprehensive vehicle data when triggered
Config.garageActions = {
	-- {
	-- 	id = "custom_action_1",
	-- 	label = "Custom Action #1",
	-- 	icon = "fa-solid fa-star",
	-- 	callback = function(vehicleData)
	-- 		print("=== Custom Action 1 Triggered ===")
	-- 		print("Vehicle Name: " .. (vehicleData.name or "N/A"))
	-- 		print("Vehicle Plate: " .. (vehicleData.plate or "N/A"))
	-- 		print("Vehicle Model: " .. (vehicleData.model or "N/A"))
	-- 		print("Vehicle Location: " .. (vehicleData.location or "N/A"))
	-- 		print("Vehicle Location Name: " .. (vehicleData.locationName or "N/A"))
	-- 		print("Vehicle Type: " .. (vehicleData.type or "N/A"))
	-- 		print("Vehicle Health: " .. (vehicleData.state and vehicleData.state.health or "N/A"))
	-- 		print("Vehicle Fuel: " .. (vehicleData.state and vehicleData.state.fuel or "N/A"))
	-- 		if vehicleData.garageType then
	-- 			print("Garage Type: " .. vehicleData.garageType)
	-- 		end
	-- 		if vehicleData.garageId then
	-- 			print("Garage ID: " .. vehicleData.garageId)
	-- 		end
	-- 		print("Player Source: " .. (vehicleData.source or "N/A"))
	-- 	end
	-- },
}

-- [table] → Configuration for ped advanced animations
Config.pedsAdvancedAnimationsConfiguration = {
	["all"] = { dict = "amb@world_human_seat_wall_tablet@female@base", anim = "base" }
}

-- [table] → Configuration for ped prop placement
Config.pedsAdvancedPropConfiguration = {
	["all"] = { model = "prop_cs_tablet", bone = 57005, pos = { x = 0.17, y = 0.07, z = -0.16 }, rot = { x = 20.0, y = 180.0, z = 180.0 } },
}

-- [table] → Configuration for take out marker style
Config.pedsAdvancedMarkerStyle = {
	["all"] = "takeout"
}

-- [table] → Configuration for park vehicle marker style
Config.parkAdvancedMarkerStyle = {
	["all"] = "park"
}

-- [table] → Configuration for the impound command
Config.impoundCommand = {
	-- [string] → The name of the slash command to impound vehicles
	commandName = "impound",
	-- [table] → List of jobs that can use the impound command
	authorizedJobs = {
		"police",
		"sheriff",
		"state",
	},
	-- [table] → List of admin ranks that can use the impound command (for admin permissions)
	authorizedAdminRanks = {
		"admin",
		"superadmin",
		"owner",
	},
	-- [number] → Maximum distance to detect a nearby vehicle for impounding
	maxVehicleDistance = 5.0,
	-- [table] → Animation played when impounding a vehicle
	animation = {
		dict = "amb@world_human_clipboard@male@idle_a",
		name = "idle_c",
		duration = 3000, -- milliseconds
		flag = 1,
	},
	-- [table] → Prop shown during impound animation (clipboard)
	prop = {
		model = "prop_notepad_02",
		bone = 18905, -- right hand
		pos = { x = 0.1, y = 0.02, z = 0.08 },
		rot = { x = -50.0, y = -50.0, z = -30.0 },
	},
}

-- [number] → The price to retrieve a vehicle from the impound
Config.impoundFee = 1000

-- [boolean] → Allow officers to set custom impound fees (if false, uses Config.impoundFee)
Config.allowSetCustomImpoundFees = true

-- [boolean] → Allow players to retrieve their own impounded vehicles (if false, only authorized jobs can release)
Config.allowRetrieveImpoundByMyself = true

-- [boolean] → Allow officers to set retrieval conditions (who can retrieve: owner only, anyone, job only)
Config.allowSetRetrieveCondition = true

-- [boolean] → Allow officers to set a minimum date before vehicle can be retrieved
Config.allowSetMinimumRetrieveDate = true

-- [boolean] → Allow officers to set an impound reason that will be visible to the player
Config.allowSetImpoundReason = true

-- [boolean] → Show who impounded the vehicle to the player (officer name)
Config.showImpoundExecutor = false

Config.giveCommand = {
	-- [string] → The name of the slash command to give vehicles
	commandName = "dbgivevehicle",

	-- [table] → List of admin ranks that can use the give vehicle command (for admin permissions)
	authorizedAdminRanks = {
		"admin",
		"superadmin",
		"owner",
	},
}

Config.deleteCommand = {
	-- [string] → The name of the slash command to delete vehicles
	commandName = "dbdeletevehicle",

	-- [table] → List of admin ranks that can use the delete vehicle command (for admin permissions)
	authorizedAdminRanks = {
		"admin",
		"superadmin",
		"owner",
	},
}

Config.changePlateCommand = {
	-- [string] → The name of the slash command to change vehicle plates
	commandName = "dbchangeplate",

	-- [table] → List of admin ranks that can use the change plate command (for admin permissions)
	authorizedAdminRanks = {
		"admin",
		"superadmin",
		"owner",
	},
}

Config.garagesCommand = {
	-- [string] → The name of the slash command to manage garages
	commandName = "garagemanagement",
	-- [table] → List of admin ranks that can use the garages management command
	authorizedAdminRanks = {
		"admin",
		"superadmin",
		"owner",
	},
}

Config.unlockImpoundCommand = {
	-- [string] → The name of the slash command to unlock impounded vehicles
	commandName = "unlockiv",
	-- [table] → List of jobs that can use the unlock impound command
	authorizedJobs = {
		"police",
		"sheriff",
		"state",
	},
	-- [table] → List of admin ranks that can use the unlock impound command (for admin permissions)
	authorizedAdminRanks = {
		"admin",
		"superadmin",
		"owner",
	},
}

-- [table] → Discord webhook configuration for logging system actions
-- Set the webhook URL for each event type you want to log (set to false to disable that log type)
Config.webhooks = {
	-- Garage management
	["create_garage"] = false,           -- When a garage is created via /garagemanagement
	["delete_garage"] = false,           -- When a garage is deleted via /garagemanagement
	["edit_garage"] = false,             -- When a garage configuration is edited

	-- Impound management
	["create_impound"] = false,          -- When an impound is created via /garagemanagement
	["delete_impound"] = false,          -- When an impound is deleted via /garagemanagement
	["edit_impound"] = false,            -- When an impound configuration is edited

	-- Vehicle storage/retrieval (public/job/gang owned garages)
	["store_vehicle"] = false,           -- When a player stores a vehicle in their garage
	["retrieve_vehicle"] = false,        -- When a player retrieves a vehicle from their garage
	["transfer_vehicle"] = false,        -- When a player transfers a vehicle between garages
	["rename_vehicle"] = false,          -- When a player renames their vehicle

	-- Job/Gang spawn garage vehicles
	["spawn_job_vehicle"] = false,       -- When a job vehicle is spawned from a spawn garage
	["spawn_gang_vehicle"] = false,      -- When a gang vehicle is spawned from a spawn garage
	["return_job_vehicle"] = false,      -- When a job vehicle is returned to a spawn garage
	["return_gang_vehicle"] = false,     -- When a gang vehicle is returned to a spawn garage

	-- Impound operations
	["impound_vehicle"] = false,         -- When a vehicle is impounded via /impound command
	["retrieve_impound"] = false,        -- When a vehicle is retrieved from impound
	["unlock_impound"] = false,          -- When an impounded vehicle is unlocked via /unlockiv

	-- Admin commands
	["give_vehicle"] = false,            -- When an admin gives a vehicle via /dbgivevehicle
	["delete_vehicle"] = false,          -- When an admin deletes a vehicle via /dbdeletevehicle
	["change_plate"] = false,            -- When an admin changes a vehicle plate via /dbchangeplate
}

-- [table] → This is the list of vehicles for each types. Any vehicle that is not in the list will be considered as "automobile"
Config.vehiclesTypes = {
	["boat"] = {
		"dinghy",
		"dinghy2",
		"dinghy3",
		"dinghy4",
		"jetmax",
		"marquis",
		"seashark",
		"seashark2",
		"seashark3",
		"speeder",
		"speeder2",
		"squalo",
		"submersible",
		"submersible2",
		"suntrap",
		"toro",
		"toro2",
		"tropic",
		"tropic2",
		"tug",
		"avisa",
		"dinghy5",
		"kosatka",
		"longfin",
		"patrolboat",
		"predator",
	},
	["plane"] = {
		"alphaz1",
		"avenger",
		"avenger2",
		"besra",
		"blimp",
		"blimp2",
		"blimp3",
		"bombushka",
		"cargoplane",
		"cargoplane2",
		"cuban800",
		"dodo",
		"duster",
		"howard",
		"hydra",
		"jet",
		"lazer",
		"luxor",
		"luxor2",
		"mammatus",
		"microlight",
		"miljet",
		"mogul",
		"molotok",
		"nimbus",
		"nokota",
		"pyro",
		"rogue",
		"seabreeze",
		"shamal",
		"starling",
		"strikeforce",
		"stunt",
		"titan",
		"tula",
		"velum",
		"velum2",
		"vestra",
		"volatol",
		"alkonost",
	},
	["heli"] = {
		"akula",
		"annihilator",
		"annihilator2",
		"buzzard",
		"buzzard2",
		"cargobob",
		"cargobob2",
		"cargobob3",
		"cargobob4",
		"conada",
		"frogger",
		"frogger2",
		"havok",
		"hunter",
		"maverick",
		"savage",
		"seasparrow",
		"seasparrow2",
		"seasparrow3",
		"skylift",
		"supervolito",
		"supervolito2",
		"swift",
		"swift2",
		"valkyrie",
		"valkyrie2",
		"volatus",
		"polmav",
	},
}

-- [table] → The styles for the markers, only used if Config.interactSystem is set to "marker"
Config.markerStyles = {
	["takeout"] = {
		["far"] = {
			{
				type = 6,
				size = vec3(1.0, 1.0, 1.0),
				rotation = vec3(270.0, 0.0, 0.0),
				offset = vec3(0.0, 0.0, 0.0),
				bobUpAndDown = false,
				faceCamera = false,
				rotate = false,
				color = { r = 100, g = 100, b = 200, a = 150 },
			},
		},
		["near"] = {
			{
				type = 6,
				size = vec3(1.0, 1.0, 1.0),
				rotation = vec3(270.0, 0.0, 0.0),
				offset = vec3(0.0, 0.0, 0.0),
				bobUpAndDown = false,
				faceCamera = false,
				rotate = false,
				color = { r = 150, g = 150, b = 200, a = 150 },
			},
		},
	},
	["park"] = {
		["far"] = {
			{
				type = 1,
				size = vec3(6.0, 6.0, 0.5),
				rotation = vec3(0.0, 0.0, 0.0),
				offset = vec3(0.0, 0.0, 0.0),
				bobUpAndDown = false,
				faceCamera = false,
				rotate = false,
				color = { r = 100, g = 100, b = 200, a = 150 },
			},
			{
				type = 2,
				size = vec3(0.5, 0.5, 0.5),
				rotation = vec3(180.0, 0.0, 0.0),
				offset = vec3(0.0, 0.0, 1.5),
				bobUpAndDown = false,
				faceCamera = false,
				rotate = true,
				color = { r = 100, g = 100, b = 200, a = 150 },
			},
		},
		["near"] = {
			{
				type = 1,
				size = vec3(6.0, 6.0, 0.5),
				rotation = vec3(0.0, 0.0, 0.0),
				offset = vec3(0.0, 0.0, 0.0),
				bobUpAndDown = false,
				faceCamera = false,
				rotate = false,
				color = { r = 150, g = 150, b = 200, a = 150 },
			},
		},
	},
}

Last updated