Inicio › Documentación › Personalización · origen_dealerships
La carpeta custom/ contiene todos los puntos de integración entre origen_dealerships y el resto de tu servidor. Estos ficheros no están protegidos con escrow y debes adaptarlos a tu configuración.
custom/
├── client/
│ ├── framework.lua — player identifier, vehicle props, NPC interaction
│ ├── keys.lua — vehicle key assignment on purchase
│ └── notify.lua — notifications and text UI
└── server/
├── framework.lua — admin check, payments, vehicle DB insertion
├── financing.lua — financing eligibility hook
└── plate.lua — plate generation and uniqueness checkCustom.GetPlayerIdentifier() → stringDevuelve el identificador único del jugador local (citizenid o identifier según el framework).
Custom.GetPlayerIdentifier = function()
local identifier = nil
if Config.Framework == 'qb-core' then
identifier = Framework.Functions.GetPlayerData().citizenid
elseif Config.Framework == 'esx' then
identifier = Framework.GetPlayerData().identifier
end
return identifier
endCustom.HandleInteraction(interactionData) → booleanHook que se llama cuando un jugador intenta interactuar con el NPC de un concesionario. Devuelve true para sustituir el flujo de interacción por defecto, o false para que lo gestione el recurso con normalidad.
| Parámetro | Tipo | Descripción |
|---|---|---|
interactionData.type |
string |
Tipo de interacción. Por ahora: 'npc' |
interactionData.onInteract |
function |
Llámala para lanzar la interacción por defecto desde dentro del hook |
Custom.HandleInteraction = function(interactionData)
if interactionData.type == 'npc' then
-- interactionData.onInteract() -- uncomment to delegate back
return true -- return true to fully take over
end
return false
endLa sustitución de la interacción con el NPC está desactivada por defecto (return false). Actívala si quieres usar un menú contextual de ox_lib propio o un recurso de interacción de terceros.
Custom.GetVehicleProps(vehicle) → tableDevuelve las propiedades de la entidad de vehículo indicada. Usa lib.getVehicleProperties cuando Config.VehiclePurchase.useOxLibProps es true.
| Parámetro | Tipo | Descripción |
|---|---|---|
vehicle |
entity |
Handle de la entidad del vehículo |
Custom.GetVehicleProps = function(vehicle)
if Config.VehiclePurchase.useOxLibProps and lib and lib.getVehicleProperties then
return lib.getVehicleProperties(vehicle)
end
-- fallback: returns basic props table
endCustom.SetVehicleProps(vehicle, props) → booleanAplica una tabla de propiedades a una entidad de vehículo. Usa lib.setVehicleProperties cuando está disponible.
| Parámetro | Tipo | Descripción |
|---|---|---|
vehicle |
entity |
Handle de la entidad del vehículo |
props |
table |
Tabla de propiedades (mismo formato que GetVehicleProps) |
Custom.GiveKeys(vehicle, plate) → booleanConcede al jugador local las llaves de propietario del vehículo indicado. Se llama automáticamente tras la compra cuando Config.VehiclePurchase.giveKeysOnPurchase es true.
| Parámetro | Tipo | Descripción |
|---|---|---|
vehicle |
entity | nil |
Entidad del vehículo. Si es nil, se usa plate |
plate |
string | nil |
Matrícula. Se usa como alternativa si la entidad no está disponible |
Custom.GiveKeys = function(vehicle, plate)
local plateToUse = plate or (DoesEntityExist(vehicle) and GetVehicleNumberPlateText(vehicle) or nil)
TriggerEvent("vehiclekeys:client:SetOwner", plateToUse)
return true
endLa implementación por defecto lanza el evento vehiclekeys:client:SetOwner (compatible con qb-vehiclekeys). Sustituye esta función si tu servidor usa otro sistema de llaves, como qs-vehiclekeys o vehicles_keys.
Custom.Notify(text, type, length)Muestra una notificación al jugador local usando lib.notify.
| Parámetro | Tipo | Descripción |
|---|---|---|
text |
string |
Mensaje ya traducido |
type |
string |
Tipo de notificación: 'success', 'error', 'warning', 'info' |
length |
number |
Duración en milisegundos |
Custom.Notify = function(text, type, length)
lib.notify({
title = 'Origen Dealerships',
description = text,
type = type,
duration = length
})
endCustom.DrawText(text, key)Muestra el text UI de ox_lib con una indicación de tecla.
| Parámetro | Tipo | Descripción |
|---|---|---|
text |
string |
Texto de la etiqueta |
key |
string |
Etiqueta de la tecla que se muestra entre corchetes |
Custom.HideText()Oculta el text UI de ox_lib que esté activo.
Custom.isAdmin(source) → booleanComprueba si el jugador indicado tiene permisos de administrador según Config.AdminGroups.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID del jugador en el servidor |
Custom.getPlayerIdentifier(source) → string | nilDevuelve el identificador único del jugador (citizenid en QB/QBX, identifier en ESX).
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID del jugador en el servidor |
Custom.doPayment(source, paymentData) → booleanProcesa un pago desde la cuenta de un jugador. Admite los métodos cash, bank y xp.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID del jugador en el servidor |
paymentData.method |
string |
Método de pago: 'cash', 'bank', 'xp' |
paymentData.amount |
number |
Importe a descontar |
Custom.doPayment = function(source, paymentData)
-- Handles cash/bank via framework, XP via exports['origen_xp']
endEl método de pago 'xp' requiere que origen_xp esté en ejecución. Llama a exports['origen_xp']:RemoveXPFromLicense(license, amount).
Custom.removeFinanceMoney(source, amount) → booleanDescuenta de la cuenta bancaria del jugador el pago de una cuota de financiación.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID del jugador en el servidor |
amount |
number |
Importe a descontar del banco |
Custom.addVehicleToDatabase(source, vehicleModel, plate, props, callback)Inserta un vehículo comprado en la tabla de vehículos correspondiente al framework activo.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID del jugador en el servidor |
vehicleModel |
string |
Nombre del modelo del vehículo (nombre de spawn) |
plate |
string |
Cadena de la matrícula |
props |
table | nil |
Propiedades del vehículo. Si es nil, se usan las de por defecto |
callback |
function(success, message) |
Se llama cuando termina la inserción en la base de datos |
Tablas de destino:
| Framework | Tabla |
|---|---|
| QBCore / QBX | player_vehicles |
| ESX | owned_vehicles |
Custom.GetPlayerSourceByIdentifier(identifier) → number | nilBusca el ID de servidor (source) de un jugador conectado a partir de su identificador único. Se usa para las notificaciones de pagos de financiación.
| Parámetro | Tipo | Descripción |
|---|---|---|
identifier |
string |
citizenid (QB/QBX) o identifier (ESX) |
Custom.canBuyCategory(source, categoryKey, vehicleModel) → { cant: boolean, msg: string }Hook para añadir restricciones personalizadas a la compra de categorías de vehículos. Devuelve cant = false con un mensaje para bloquear la compra.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID del jugador en el servidor |
categoryKey |
string |
Identificador de la categoría del concesionario |
vehicleModel |
string |
Modelo de vehículo que se está comprando |
Custom.canBuyCategory = function(source, categoryKey, vehicleModel)
-- Example: block category for players without a license
return { cant = true, msg = "" }
endCustom.canFinanceVehicle(source, model, price, period) → { success: boolean, message: string }Hook que se llama antes de crear un contrato de financiación. Devuelve success = false con un mensaje para bloquear la operación.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID del jugador en el servidor |
model |
string |
Modelo del vehículo |
price |
number |
Precio total del vehículo |
period |
number |
Número de periodos de pago solicitado |
Custom.canFinanceVehicle = function(source, model, price, period)
return { success = true, message = '' }
endCustom.GeneratePlate() → string | nilGenera una matrícula única de 8 caracteres (4 letras + 4 dígitos). Reintenta hasta 100 veces para evitar colisiones. Devuelve nil si no encuentra una matrícula única tras el máximo de intentos.
Custom.PlateExists(plate) → booleanComprueba si una matrícula ya está registrada en la tabla de vehículos.
| Parámetro | Tipo | Descripción |
|---|---|---|
plate |
string |
Matrícula a comprobar |
Consulta player_vehicles en QBCore/QBX y owned_vehicles en ESX.