Elite NetworkElite SaaS · Docsv0.1
GitHubPainel

functions/garage.lua

Adapter de veículos. Default usa snt_characters_vehicles + mtg_garages.

Globals esperadas

  • getUserVehicles(userId)
  • getAvailableVehicles()
  • tryRemoveVehicle(userId, plate)
  • addVehicle(userId, model, plate, opts)
  • getTrunkChest(plate)
  • tryRemoveTrunkItem(plate, item, amount, slot)

Tabelas e exports

  • snt_characters_vehicles (plate, owner, index, ipva, status, ...). O campo index é o modelo.
  • mtg_containers — porta-malas em JSON, key "trunk_<model>:<plate>".
  • exports['mtg_garages']:getAllVehicles(), generateVehicle(), generateRentalVehicle(), deleteVehicle().
  • exports['mtg_inventory']:withdrawContainer() — pra remover item do trunk.

getUserVehicles(userId) — open-schema

Devolva quantas chaves o seu schema oferecer. plate e model são obrigatórios; o resto vira linha extra no painel.
functions/garage.lua·lua
function getUserVehicles(userId)
  local rows = exports.oxmysql:query_async(
    "SELECT plate, `index` AS model, ipva, status FROM snt_characters_vehicles WHERE owner = ?",
    { userId }
  )
  local out = {}
  for _, v in ipairs(rows or {}) do
    out[#out+1] = {
      plate    = v.plate,
      model    = v.model,
      ipva     = v.ipva,            -- chave extra: aparece como "Ipva: em-dia"
      status   = v.status,          -- chave extra: "Status: livre"
      image    = (Config.VehicleImageBaseUrl or "")..(v.model or "")..".png"
    }
  end
  return out
end

getAvailableVehicles()

lua
function getAvailableVehicles()
  local cat = exports['mtg_garages']:getAllVehicles()
  local out = {}
  for model, meta in pairs(cat or {}) do
    out[#out+1] = {
      model    = model,
      name     = meta.name or model,
      category = meta.category or "uncategorized",
      price    = tonumber(meta.price) or 0,
      image    = (Config.VehicleImageBaseUrl or "")..model..".png"
    }
  end
  table.sort(out, function(a, b) return a.name < b.name end)
  return out
end

addVehicle / tryRemoveVehicle

lua
function tryRemoveVehicle(userId, plate)
  return exports['mtg_garages']:deleteVehicle(plate, userId)
end

function addVehicle(userId, model, plate, opts)
  if opts and opts.permanent == false then
    -- Aluguer
    return exports['mtg_garages']:generateRentalVehicle(userId, model, plate, opts.days or 7)
  end
  return exports['mtg_garages']:generateVehicle(userId, model, plate)
end

Trunk

lua
function getTrunkChest(plate)
  local row = exports.oxmysql:query_async(
    "SELECT `key`, inventory FROM mtg_containers WHERE `key` LIKE ? LIMIT 1",
    { "trunk_%:"..plate }
  )
  if not row or #row == 0 then return { plate = plate, items = {} } end

  local ok, decoded = pcall(json.decode, row[1].inventory or "[]")
  local items = ok and decoded or {}

  local out = {}
  for slot, entry in pairs(items) do
    if entry and entry.item then
      out[#out+1] = {
        slot   = tonumber(slot) or 0,
        item   = entry.item,
        name   = vRP.getItemName(entry.item) or entry.item,
        amount = tonumber(entry.amount) or 0,
        image  = (Config.ItemImageBaseUrl or "")..entry.item..".png"
      }
    end
  end
  return { plate = plate, items = out }
end

function tryRemoveTrunkItem(plate, item, amount, slot)
  return exports['mtg_inventory']:withdrawContainer(
    "trunk_"..plate, item, amount or 1, slot
  )
end
Elite Network — Command Center