Inicio › Documentación › Personalización · origen_vendings
La carpeta custom/ contiene la capa de bridge de origen_vendings. Estos ficheros están excluidos del escrow y son los únicos que debes editar para integrar el recurso con tu stack.
custom/
├── client.lua ← TextUI and notification bridges
└── server.lua ← Framework, permissions, economy, and inventory bridgesEdita solo los ficheros de custom/. El resto de ficheros del recurso están protegidos por escrow y no deben modificarse.
Define dos objetos bridge usados en todo el lado cliente: HelpText y Notify.
Controla el aviso TextUI que se muestra cuando el jugador está cerca de una máquina expendedora.
HelpText.GetResourceName() → stringDevuelve el nombre del recurso que proporciona el TextUI.
HelpText.GetResourceName = function()
return 'ox_lib'
endHelpText.ShowHelpText(message, position?)Muestra el TextUI en pantalla. Se llama automáticamente cuando el jugador entra en el radio de interacción de una máquina.
| Parámetro | Tipo | Descripción |
|---|---|---|
message |
string |
Texto a mostrar |
position |
string? |
Posición en pantalla. Por defecto 'left-center' |
-- Default implementation (ox_lib)
HelpText.ShowHelpText = function(message, position)
exports.ox_lib:showTextUI(message, {
position = position or 'left-center',
icon = 'shopping-cart',
})
endHelpText.HideHelpText()Oculta el TextUI activo. Se llama automáticamente cuando el jugador sale del radio de interacción.
-- Default implementation (ox_lib)
HelpText.HideHelpText = function()
exports.ox_lib:hideTextUI()
endControla las notificaciones emergentes del juego enviadas al jugador (compra correcta, errores, etc.).
Notify.GetResourceName() → stringDevuelve el nombre del recurso que proporciona las notificaciones.
Notify.GetResourceName = function()
return 'ox_lib'
endNotify.SendNotify(message, type?, time?)Notificación sencilla sin título.
| Parámetro | Tipo | Descripción |
|---|---|---|
message |
string |
Texto a mostrar |
type |
string? |
'success' | 'error' | 'info' | 'warning'. Por defecto 'info' |
time |
number? |
Duración en milisegundos. Por defecto 3000 |
-- Default implementation (ox_lib)
Notify.SendNotify = function(message, _type, time)
exports.ox_lib:notify({
description = message,
type = _type or 'info',
duration = time or 3000,
position = Config.NotificationPosition or 'top-right',
})
endNotify.SendNotification(title, message, type?, time?)Notificación con título.
| Parámetro | Tipo | Descripción |
|---|---|---|
title |
string |
Título de la notificación. Por defecto 'Vending' |
message |
string |
Cuerpo de la notificación |
type |
string? |
'success' | 'error' | 'info' | 'warning'. Por defecto 'info' |
time |
number? |
Duración en milisegundos. Por defecto 3000 |
-- Default implementation (ox_lib)
Notify.SendNotification = function(title, message, _type, time)
exports.ox_lib:notify({
title = title or 'Vending',
description = message,
type = _type or 'info',
duration = time or 3000,
position = Config.NotificationPosition or 'top-right',
})
endDefine el objeto bridge Custom usado en todo el lado servidor. Gestiona la integración con el framework, los permisos, la economía y el inventario.
El proveedor de inventario se guarda en caché la primera vez que se usa. Si cambias Config.Inventory en ejecución, reinicia el recurso para que lo vuelva a detectar.
Custom.getIdentifier(source) → string | nilDevuelve el identificador único del jugador (citizenid en QBCore/QBX, license en ESX).
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
Custom.getStaffLevel(source) → 'full' | falseComprueba si el jugador tiene acceso de administración al panel de máquinas expendedoras. Devuelve 'full' si lo tiene y false en caso contrario.
Comprueba (por orden):
qb-core / qbx_core)Config.GroupPermissionscommand| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
-- Usage example inside a callback
local level = Custom.getStaffLevel(source)
if not level then return end -- not an adminCustom.getMoney(source, account?) → number | nilDevuelve el saldo del jugador en la cuenta indicada.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
account |
string? |
'cash' (por defecto) o 'bank' |
Custom.removeMoney(source, amount, account?, reason?) → boolean, string?Descuenta dinero al jugador. Devuelve true si funciona, o false más una cadena de error si falla.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
amount |
number |
Cantidad a descontar (debe ser > 0) |
account |
string? |
'cash' (por defecto) o 'bank' |
reason |
string? |
Etiqueta de la transacción. Por defecto 'origen_vendings' |
Posibles cadenas de error:
| Error | Causa |
|---|---|
'invalid_amount' |
La cantidad es nil, 0 o negativa |
'player_not_found' |
El framework no pudo resolver al jugador |
'insufficient_funds' |
El saldo es inferior a la cantidad solicitada |
'framework_denied' |
El RemoveMoney del framework devolvió false |
'framework_not_supported' |
El framework activo no está soportado |
local ok, err = Custom.removeMoney(source, 50, 'cash')
if not ok then
print('Payment failed:', err)
endCustom.giveItem(source, itemName, amount, metadata?) → booleanEntrega un objeto al jugador usando el inventario activo. Comprueba la capacidad de carga cuando está soportado.
| Parámetro | Tipo | Descripción |
|---|---|---|
source |
number |
ID de servidor del jugador |
itemName |
string |
Nombre interno del objeto |
amount |
number |
Cantidad a entregar |
metadata |
table? |
Metadatos opcionales del objeto |
Custom.itemExists(itemName) → booleanDevuelve true si el objeto está registrado en el inventario activo.
| Parámetro | Tipo | Descripción |
|---|---|---|
itemName |
string |
Nombre interno del objeto |
Custom.getInventoryName() → stringDevuelve el nombre del recurso de inventario activo (por ejemplo 'ox_inventory', 'qb-inventory'). Útil para logs y depuración.
Custom.getAllInventoryItems() → table[]Devuelve todos los objetos registrados en el inventario activo, ordenados alfabéticamente por etiqueta. Lo usa el panel de administración para rellenar el selector de objetos.
Cada entrada de la tabla devuelta:
| Campo | Tipo | Descripción |
|---|---|---|
name |
string |
Nombre interno del objeto |
label |
string |
Nombre visible |
weight |
number |
Peso del objeto |
stack |
boolean |
Si el objeto es apilable |
image |
string |
URL de la imagen NUI resuelta, o '' si no se encuentra |