Todo lo que hay en custom/ figura en escrow_ignore, así que sigue abierto cuando el recurso se cifra, y está separado del núcleo, por lo que las actualizaciones del teléfono no lo sobrescriben. Los ficheros de proveedor de bridge/ también son abiertos: puedes leerlos o copiar uno como punto de partida.
Todo hook Custom devuelve nil por defecto, lo que significa «haz lo normal». Devuelve cualquier otra cosa y tu código toma el control.
custom/client/notifications.lua
Custom.ShowNotification(data) → boolean|nil
Cómo se ve una notificación mientras el teléfono está guardado. Por defecto, el teléfono asoma desde la parte inferior de la pantalla. Con el teléfono abierto, las notificaciones siempre se muestran dentro de él.
El hook se ejecuta dentro de pcall. Si falla, se imprime el error y el teléfono muestra la notificación como de costumbre.
custom/server/money.lua
Todo cobro y pago que hace el teléfono pasa por aquí: anuncios, tarifas de taxi, facturas, transferencias, suscripciones de citas, recuperación de línea. Por defecto, el teléfono usa el puente de Banking.
Cuenta que eligió el jugador, si la app se lo permite
Retorno
Comportamiento
nil
Cobra mediante el puente de banca
true
Cobrado, continúa
false, 'reason'
Fallo; el texto se muestra al jugador
Cobrar en efectivo en lugar de banco (Qbox):
lua
functionCustom.Charge(source, amount, reason)local player = exports.qbx_core:GetPlayer(source)
ifnot player thenreturnfalse, 'Player not found'endif player.Functions.RemoveMoney('cash', amount, reason) thenreturntrueendreturnfalse, 'You do not have enough cash'end
Anuncios gratis para reporteros:
lua
functionCustom.Charge(source, amount, reason)local job = Framework.GetJob(source)
if reason:find('Ad') and job and job.name == 'reporter'thenreturntrueendreturnnilend
Paga a un jugador: ganancias de conductores y repartidores, ventas del marketplace y reembolsos. Mismas reglas de retorno que Custom.Charge.
Parámetro
Tipo
Descripción
source
number
ID de servidor del jugador
amount
number
Cantidad a pagar
reason
string
Ya traducido al idioma del jugador
custom/server/permissions.lua
Custom.CanUseApp(source, appId) → boolean|nil
Tu propio veto sobre una app, para condiciones que no encajan en una regla del panel. Se ejecuta después de las reglas del panel y solo puede quitar acceso, nunca concederlo.
Esto se ejecuta cada vez que se abre un teléfono, una vez por app (más de treinta veces seguidas). No consultes la base de datos aquí: guarda en memoria lo que necesites.
custom/bridge
Cada categoría tiene una plantilla con las funciones exactas que necesita. Rellénala y pon la categoría en 'custom' en config/bridge.lua:
lua
BridgeConfig.Banking = 'custom'
Cada plantilla se registra con Bridge.Register(category, 'custom', { ... }) y solo se usa cuando su categoría está en 'custom'.