Files
2026-03-29 21:41:17 +03:00

149 lines
6.0 KiB
Lua

if Framework.name == "esx" then
ESXMODELLIST = {} -- A table of all registered vehicles modes <hash, name>
MySQL.ready(function()
local models = MySQL.query.await("SELECT model, name FROM vehicles")
for _, model in pairs(models) do
ESXMODELLIST[joaat(model.model)] = { model = model.model, label = model.name }
end
end)
end
---@class GarageUtils
local garage = {}
--- Returns a table, with model and plate, of all owned vehicles for a character
---@param charId number
---@return {model: string, plate: string}[]
function garage.getOwnedVehicles(charId)
if Framework.name == "esx" then
local result = MySQL.query.await("SELECT plate, vehicle FROM owned_vehicles WHERE owner = ?", { charId })
for _, veh in pairs(result) do
veh.model = json.decode(veh.vehicle)?.model or "unknown"
local info = ESXMODELLIST[veh.model]
if info then
veh.name = info.model
veh.label = info.label
end
end
return result
elseif Framework.name == "qb" or Framework.name == "qbx" then
local result = MySQL.query.await(
"SELECT vehicle as model, vehicle as name, vehicle as label, plate FROM player_vehicles WHERE citizenid = ?",
{ charId })
return result
elseif Framework.name == "ox" then
local result = MySQL.query.await("SELECT model, plate, FROM vehicles WHERE owner = ?", { charId })
return result
else
return {}
end
end
--- Updates the plate of a vehicle
---@param originalPlate string
---@param newPlate string
function garage.updateVehiclePlate(originalPlate, newPlate)
if Framework.name == "esx" then
return MySQL.update.await("UPDATE owned_vehicles SET plate = ? WHERE plate = ?", { newPlate, originalPlate }) ==
1
elseif Framework.name == "qb" or Framework.name == "qbx" then
return MySQL.update.await("UPDATE player_vehicles SET plate = ? WHERE plate = ?", { newPlate, originalPlate }) ==
1
elseif Framework.name == "ox" then
return false
end
end
--- Gives a vehicle to a character
---@param license string
---@param charId string
---@param plate string
---@param model string
---@param mods table
---@param vehicleType string ("automobile", "bike", "boat", "heli", "plane", ...)
function garage.giveVehicle(license, charId, plate, model, mods, vehicleType)
if Framework.name == "esx" then
if GetResourceState("jg-advancedgarages") == "started" then
return MySQL.insert.await(
'INSERT INTO owned_vehicles (owner, plate, vehicle, stored, in_garage) VALUES (?,?,?,1,1)',
{ charId, plate, json.encode(mods) }
)
end
return MySQL.insert.await(
'INSERT INTO owned_vehicles (owner, plate, vehicle, stored) VALUES (?,?,?,1)',
{ charId, plate, json.encode(mods) }
)
elseif Framework.name == "qb" or Framework.name == "qbx" then
if GetResourceState("jg-advancedgarages") == "started" then
return MySQL.insert.await(
'INSERT INTO player_vehicles (license, citizenid, plate, vehicle, hash, mods, state, in_garage) VALUES (?,?,?,?,?,?,1,1)',
{ license, charId, plate, model, joaat(model), json.encode(mods) }
)
end
return MySQL.insert.await(
'INSERT INTO player_vehicles (license, citizenid, plate, vehicle, hash, mods, state) VALUES (?,?,?,?,?,?,1)',
{ license, charId, plate, model, joaat(model), json.encode(mods) }
)
elseif Framework.name == "ox" then
end
end
--- Deletes a vehicle from the database
---@param plate string
function garage.deleteVehicle(plate)
if Framework.name == "esx" then
return MySQL.update.await("DELETE FROM owned_vehicles WHERE plate = ?", { plate }) == 1
elseif Framework.name == "qb" or Framework.name == "qbx" then
return MySQL.update.await("DELETE FROM player_vehicles WHERE plate = ?", { plate }) == 1
elseif Framework.name == "ox" then
return MySQL.update.await("DELETE FROM vehicles WHERE plate = ?", { plate }) == 1
end
end
function garage.setVehicleStored(plate)
if Framework.name == "esx" then
if GetResourceState("jg-advancedgarages") == "started" then
exports["jg-advancedgarages"]:deleteOutsideVehicle(plate)
return MySQL.update.await("UPDATE owned_vehicles SET in_garage = ?, stored = ? WHERE plate = ?",
{ 1, 1, plate }) == 1
end
return MySQL.update.await("UPDATE owned_vehicles SET stored = ? WHERE plate = ?", { 1, plate }) == 1
elseif Framework.name == "qb" or Framework.name == "qbx" then
if GetResourceState("jg-advancedgarages") == "started" then
exports["jg-advancedgarages"]:deleteOutsideVehicle(plate)
return MySQL.update.await("UPDATE player_vehicles SET in_garage = ?, state = ? WHERE plate = ?",
{ 1, 1, plate }) == 1
end
return MySQL.update.await("UPDATE player_vehicles SET state = ? WHERE plate = ?", { 1, plate }) == 1
elseif Framework.name == "ox" then
end
end
--- Changes the owner of a vehicle
---@param plate string
---@param charId number
function garage.changeVehicleOwner(plate, charId)
if Framework.name == "esx" then
return MySQL.update.await("UPDATE owned_vehicles SET owner = ? WHERE plate = ?", { charId, plate }) == 1
elseif Framework.name == "qb" or Framework.name == "qbx" then
return MySQL.update.await("UPDATE player_vehicles SET citizenid = ? WHERE plate = ?", { charId, plate }) == 1
elseif Framework.name == "ox" then
return MySQL.update.await("UPDATE vehicles SET owner = ? WHERE plate = ?", { charId, plate }) == 1
end
end
function garage.cloneVehicle(plate)
if Framework.name == "esx" then
local result = MySQL.query.await("SELECT * FROM owned_vehicles WHERE plate = ?", { plate })
elseif Framework.name == "qb" or Framework.name == "qbx" then
end
end
return garage