This is not a garage system, it is only to manage vehicles, you can use this code simply for the key system.
-
Fully compatible with ESX , standalone (requires database), OX Everything works, but the vehicles do not spawn when the server loads, pending.
-
Vehicle are persistent.
-
Ability to add metadata to vehicles.
-
Records total kilometers driven by vehicles.
-
Key system via item or database.
-
Engine ignition by Key item/db
-
Menu for sharing keys.
-
FakePlate only works with vehicles spawned by the Vehicles.CreateVehicle() and ox_inventory item
-
/givecar [source] -
- Set a player [source] a vehicle temporarily/indefinitely
-
/setcarowner [source] -
- Establish ownership of the vehicle in which the player is located. [source]
-
/saveAllcars true/false -
- If true, deletes all vehicles; if false, only save vehicles.
-
/spawnAllcars -
Forces spawning vehicles outside garages.
- Target for managing the trailer tr2.
- OneSync
- OXMYSQL
- ox_lib
- ox_inventory (only keys as item)
- ox_target (target Carkey and Trailer manager)
Recommended latest FiveM GameBuild
shared_scripts { '@mVehicle/import.lua' }- update SQL
- Server.cfg
- set mVehicle:Persistent true/false (Default false)
- start the code after the dependencies of ox and your framework
SQL
- Original owned_vehicles
-
- to use it 'standalone' use this same database
CREATE TABLE `owned_vehicles` (
`owner` varchar(60) DEFAULT NULL,
`plate` varchar(12) NOT NULL,
`vehicle` longtext DEFAULT NULL,
`type` varchar(20) NOT NULL DEFAULT 'car',
`job` varchar(20) DEFAULT NULL,
`stored` tinyint(4) NOT NULL DEFAULT 0,
`parking` VARCHAR(60) DEFAULT NULL,
`pound` VARCHAR(60) DEFAULT NULL
) ENGINE=InnoDB;- To inssert new
ALTER TABLE `owned_vehicles`
ADD COLUMN `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST,
ADD COLUMN `mileage` int(11) DEFAULT 0,
ADD COLUMN `coords` longtext,
ADD COLUMN `lastparking` varchar(100),
ADD COLUMN `keys` longtext DEFAULT '[]',
ADD COLUMN `metadata` longtext- Original table
CREATE TABLE
IF NOT EXISTS `vehicles` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`plate` CHAR(8) NOT NULL DEFAULT '',
`vin` CHAR(17) NOT NULL,
`owner` INT UNSIGNED NULL DEFAULT NULL,
`group` VARCHAR(50) NULL DEFAULT NULL,
`model` VARCHAR(20) NOT NULL,
`class` TINYINT UNSIGNED NULL DEFAULT NULL,
`data` LONGTEXT NOT NULL,
`trunk` LONGTEXT NULL DEFAULT NULL,
`glovebox` LONGTEXT NULL DEFAULT NULL,
`stored` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `plate` (`plate`) USING BTREE,
UNIQUE INDEX `vin` (`vin`) USING BTREE,
INDEX `FK_vehicles_characters` (`owner`) USING BTREE,
CONSTRAINT `FK_vehicles_characters` FOREIGN KEY (`owner`) REFERENCES `characters` (`charId`) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT `FK_vehicles_groups` FOREIGN KEY (`group`) REFERENCES `ox_groups` (`name`) ON UPDATE CASCADE ON DELETE CASCADE
);- To inssert new
ALTER TABLE `vehicles`
ADD COLUMN `mileage` int(11) DEFAULT 0,
ADD COLUMN `coords` longtext,
ADD COLUMN `lastparking` varchar(100),
ADD COLUMN `type` varchar(20) DEFAULT NULL,
ADD COLUMN `keys` longtext DEFAULT '[]',
ADD COLUMN `pound` VARCHAR(60) - READING IS NOT LAVA
Items
['carkey'] = {
label = 'Carkey',
},
['lockpick'] = {
label = 'Lockpick',
weight = 160,
decay = true,
server = {
export = 'mVehicle.lockpick'
}
},
['hotwire'] = {
label = 'Cutter',
weight = 160,
server = {
export = 'mVehicle.hotwire'
}
},
['fakeplate'] = {
label = 'Fake Plate',
consume = 0,
server = {
export = 'mVehicle.fakeplate'
}
},Vehicles.VehickeKeysMenu() Client
-- all player vehicles
Vehicles.VehickeKeysMenu()
-- Specific plate,
Vehicles.VehickeKeysMenu('MONO 420', function()
print('On Close menu or Set/remove key player')
end)Vehicles.ItemCarKeysClient() Client
- action = 'remove' or 'add' | string
- plate = vehicle plate | string GetVehicleNumberPlateText()
Vehicles.ItemCarKeysClient(action, plate)Vehicles.ItemCarKeys() Server
- source = player source | number
- action = 'remove' or 'add' | string
- plate = vehicle plate | string
Vehicles.ItemCarKeys(source, action, plate)
-- or ox_inventory export
-- add
exports.ox_inventory:AddItem(source, 'carkey', 1, { plate = plate, description = plate })
--remove
-- via ox_inventory export
exports.ox_inventory:RemoveItem(source, 'carkey', 1, { plate = plate, description = plate })Vehicles.CreateVehicle() Server
Vehicles.CreateVehicle(VehicleData, CallBack)
local CreateVehicleData = {
-- if vehicle temporary | date format 'YYYYMMDD HH:MM' example '20240422 03:00' - or false
temporary = ?,
-- string or false, nil ...
job = ?,
-- Set vehicle Owner? if Temporary date set true
setOwner = ?,
-- player identifier
owner = ?,
-- same to owner
identifier = ?,
coords = vector4(1.0, 1.0, 1.0, 1.0), -- Coords spawn table or vector 4
-- Vehicle props
vehicle = {
model = 'sulta',
plate = Vehicles.GeneratePlate(),
fuelLevel = 100,
color1 = [0,0,0],
color2 = [0,0,0],
},
Vehicles.CreateVehicle(CreateVehicleData, function(data, action)
print(json.encode(data, { indent = true} ))
end)
}Vehicles.GetVehicle() Server
local Vehicle = Vehicles.GetVehicle(entity)
Vehicle.SetMetadata(key, value)
-- Example
-- Vehicle.SetMetadata('stolen', { stolenBy = 'Mono Garage'})
Vehicle.DeleteMetadata(key)
-- Example
-- Vehicle.DeleteMetadata('stolen')
Vehicle.GetMetadata(key)
-- Example
-- by key Vehicle.GetMetadata('stolen') or Vehicles.GetMetadata() return all
-- local metadata = Vehicle.GetMetadata('stolen')
-- print(metadata.stolenBy)
--- or client/server State
-- local metadata = Entity(entity).state.metadata
-- print(metadata.stolenBy)
Vehicle.AddKey(source)
Vehicle.RemoveKey(source)
Vehicle.SaveProps(props)
-- To use in garage script
Vehicle.StoreVehicle(parking, props, license)
Vehicle.RetryVehicle(coords)
Vehicle.ImpoundVehicle(parking, price, note, date)
Vehicle.RetryImpound(ToGarage, coords)
-- Set Fake Plate to vehicle
Vehicle.SetFakePlate('FAKETAXI')
-- To remove
Vehicle.SetFakePlate(false)
-- Delete vehicle | fromDatabase
Vehicle.DeleteVehicle(fromDatabase)GetVehicleByPlate Server = Vehicles.GetVehicle()
local Vehicles.GetVehicleByPlate(plate)Vehicles.GetVehicleId Server
local vehicle = Vehicles.GetVehicleId(id) Delete All Vehicles Server
local AllVechiles = Vehicles.GetAllVehicles(source, VehicleTable, haveKeys)
Vehicles.GetAllVehicles() Server
- soruce = player source
- VehicleTable = boolean | true get vehicles from table Vehicles false get vehicles from DB
- haveKeys = boolean | Have player keys ?
local AllVechiles = Vehicles.GetAllVehicles(source, VehicleTable, haveKeys)
Set Vehicle Owner Server
Vehicles.SetVehicleOwner({
job = ?,
owner = ?,
parking = ?,
plate = ?,
type = ?,
vehicle = ?,
})SetCarOwner Server
Vehicles.SetCarOwner(src)Delete All Vehicles Server
Vehicles.DelAllVehicles() save all vehicles Server true/false to delete vehicles
Vehicles.SaveAllVehicles(delete)plate exists? Server return boolean
Vehicles.PlateExist(plate) Generate plate Server return plate string
Vehicles.GeneratePlate()

