Documentación de Banco, cajeros y tarjeta
Otra Vida Banco (ov_banco)
Que hace
ov_banco es un sistema bancario completo para servidores FiveM con qb-core. Cada jugador tiene una cuenta con numero propio (por ejemplo OV12345678), una tarjeta bancaria con PIN, y puede operar en sucursales y en cajeros automaticos. Ademas maneja las cuentas comunes ("sociedades") de trabajos y bandas, y trae un panel de administracion para el staff.
Lo mas importante:
- Sucursales con empleado (ped) y marca en el mapa, con pestanas de Inicio, Depositar, Retirar, Transferir, Historial, Sociedad y Seguridad.
- Cajeros automaticos detectados por modelo de prop (
prop_atm_01,prop_atm_02,prop_atm_03,prop_fleeca_atm), que piden la tarjeta (item) y el PIN. - Tarjeta y PIN: PIN de 4 digitos, bloqueo temporal tras fallos, reposicion de tarjeta con costo configurable.
- Transferencias entre jugadores por numero de cuenta, con nota, limite por operacion, limite diario y comision opcional.
- Cuentas de sociedad para trabajos y bandas, con rango minimo configurable.
- Historial de movimientos con filtros y paginacion, guardado en base de datos.
- Panel de administracion para buscar jugadores, ajustar saldo con motivo, congelar cuentas, reiniciar PIN y ajustar sociedades. Todo queda en un registro.
- Compatibilidad: responde a los nombres de exports de otros bancos (
Renewed-Banking,okokBanking) para que otros scripts de trabajos cobren y paguen a las sociedades sin cambios.
Requisitos
| Requisito | Detalle |
|---|---|
| Framework | qb-core |
| Dependencias declaradas en el fxmanifest | ox_lib, oxmysql, ox_inventory, qb-core |
| Lua | 5.4 (lua54 'yes') |
| Base de datos | MySQL o MariaDB, mediante oxmysql |
| Inventario | ox_inventory (la tarjeta es un item) |
El recurso declara provide 'Renewed-Banking' y provide 'okokBanking'. Por eso no debe estar activo a la vez otro recurso que ocupe esos nombres.
Instalacion
- Descarga el recurso desde el Portal de Cfx.re (seccion de assets comprados) con la cuenta Cfx.re con la que hiciste la compra. El recurso viene protegido con Asset Escrow de Cfx.re: solo funciona en servidores cuya clave de licencia pertenece a tu cuenta.
- Copia la carpeta
ov_bancodentro deresourcesde tu servidor. - Declara el item de la tarjeta en
ox_inventory(archivo de items). El nombre debe coincidir conConfig.ItemTarjeta(por defectobank_card) y debe usar el export del recurso al usarse:
['bank_card'] = {
label = 'Tarjeta bancaria',
weight = 10,
stack = false,
client = { export = 'ov_banco.UsarTarjeta' },
},
Ajusta peso, etiqueta e imagen a tu inventario.
- Agrega en
server.cfg, despues deox_lib,oxmysql,qb-coreyox_inventory:
ensure ov_banco
- Da el permiso de administracion al grupo que corresponda:
add_ace group.admin command.bancoadmin allow
- Inicia el servidor. No hay archivo .sql: al arrancar, el recurso crea solo las tablas
ov_banco_perfiles,ov_banco_cuentas,ov_banco_movimientosyov_banco_log(CREATE TABLE IF NOT EXISTS). En consola veras[ov_banco] listo: ....
El codigo no lee convars de server.cfg (no usa GetConvar).
Archivos editables: en el fxmanifest.lua el bloque escrow_ignore deja sin cifrar shared/config.lua y toda la carpeta html/ (interfaz web). Puedes editar la configuracion y personalizar la interfaz. El resto del codigo (client/ y server/) va cifrado por Asset Escrow.
Configuracion
Todo esta en shared/config.lua. Opciones principales:
| Clave | Valor por defecto | Para que sirve |
|---|---|---|
Config.AdminAce | 'command.bancoadmin' | Permiso ACE que abre el panel de administracion |
Config.AdminComando | 'bancoadmin' | Nombre del comando del panel |
Config.NombreBanco | 'Otra Vida Banco' | Nombre que se muestra en la interfaz y avisos |
Config.MaxDeposito | 5000000 | Maximo por deposito |
Config.MaxRetiro | 5000000 | Maximo por retiro en sucursal |
Config.MaxTransferencia | 2000000 | Maximo por transferencia |
Config.LimiteDiarioTransferencias | 5000000 | Suma maxima enviada por transferencia en 24 h (0 = sin limite) |
Config.MaxRetiroATM | 50000 | Maximo por retiro en cajero |
Config.LimiteDiarioATM | 250000 | Retiros en cajero en 24 h (0 = sin limite) |
Config.ComisionTransferencia | 0 | Porcentaje que se cobra a quien envia (0 = gratis) |
Config.AlertaMonto | 1000000 | Movimientos de este valor o mas se avisan al webhook |
Config.Webhook | '' | URL de Discord para alertas y ajustes del admin (opcional) |
Config.PinDigitos | 4 | Digitos del PIN |
Config.PinIntentos | 3 | Fallos permitidos antes del bloqueo |
Config.PinBloqueoSegundos | 300 | Duracion del bloqueo |
Config.SesionSegundos | 300 | Una sesion de cajero o sucursal caduca a los 5 minutos |
Config.DistanciaSucursal | 6.0 | Metros maximos al mostrador mientras se opera |
Config.DistanciaCajero | 4.0 | Metros maximos al cajero mientras se opera |
Config.ExigirTarjeta | true | El cajero pide tarjeta y PIN |
Config.ItemTarjeta | 'bank_card' | Nombre del item de la tarjeta |
Config.CostoTarjetaNueva | 500 | Costo de reponer la tarjeta (la primera es gratis) |
Config.CostoCambioPin | 0 | Costo de cambiar el PIN |
Config.RangoSociedadPorDefecto | 4 | Grado minimo para operar la cuenta de un trabajo si el grado no es "jefe" |
Config.RangoSociedad | {} | Grado minimo por trabajo, por ejemplo police = 4 |
Config.SociedadesInicial | {} | Cuentas de sociedad que se crean al arrancar, con su saldo inicial |
Config.Distancia | 2.0 | Metros para ver el aviso [E] |
Config.TeclaInteractuar | 38 | Tecla de interaccion (E) |
Config.Blips | activo = true, sprite = 108, color = 69, escala = 0.7 | Marcas de sucursales en el mapa |
Config.PedModelo | 'U_M_M_BankMan' | Modelo del empleado de sucursal |
Config.ModelosCajero | 4 modelos de ATM | Props que se tratan como cajero |
Config.Bancos | 8 sucursales | Lista de sucursales: nombre, ped (vec4) y punto (vec3) |
Para agregar una sucursal, anade una linea a Config.Bancos con el nombre, la posicion del empleado y el punto de interaccion.
Comandos y permisos
| Elemento | Detalle |
|---|---|
/bancoadmin | Abre el panel de administracion (el nombre sale de Config.AdminComando). Solo en juego; exige el permiso ACE |
| Permiso ACE | command.bancoadmin (clave Config.AdminAce) |
Tecla E (control 38) | Abre el banco en sucursal o cajero cuando aparece el aviso |
Item bank_card | Al usarlo desde el inventario abre el cajero cercano; si no hay uno cerca, avisa que te acerques a un cajero |
Exports del servidor (para otros scripts, cuentas de sociedad identificadas por su clave, por ejemplo el nombre del trabajo):
| Export | Uso |
|---|---|
GetAccountBalance(clave), GetAccount(clave), GetSocietyBalance(clave), getAccountMoney(clave) | Devuelven el saldo de la sociedad |
AddMoney(clave, cantidad, motivo), AddSocietyMoney, addAccountMoney | Suman dinero a la sociedad |
RemoveMoney(clave, cantidad, motivo), RemoveSocietyMoney, removeAccountMoney | Restan dinero de la sociedad |
CreateJobAccount(clave, saldo), CreateGangAccount(clave, saldo), createAccount(clave) | Crean la cuenta si no existe |
handleTransaction(cuenta, titulo, cantidad, mensaje, emisor, receptor, tipo) | Compatible con Renewed-Banking; con tipo = 'withdraw' resta, en otro caso suma |
Ejemplo:
local saldo = exports.ov_banco:GetAccountBalance('police')
exports.ov_banco:AddMoney('police', 5000, 'multa')
Export del cliente: UsarTarjeta (lo usa el item de la tarjeta).
Como se usa
Primera vez
- Ve a una sucursal y acercate al empleado. Aparece el aviso
[E]. - Pulsa
E. La cuenta se abre sola. - En la pestana Seguridad, crea tu PIN (4 digitos por defecto). Recibes la tarjeta en el inventario; la primera es gratis.
En la sucursal puedes depositar, retirar, transferir, ver el historial y manejar la cuenta de tu trabajo o banda si tu grado lo permite. Si te alejas del mostrador o pasa el tiempo de sesion, la ventana se cierra.
En un cajero
- Colocate frente al cajero y pulsa
E(o usa la tarjeta desde el inventario). Hace falta tener la tarjeta. - Escribe el PIN. Tras los fallos permitidos, la tarjeta queda bloqueada temporalmente.
- Opera dentro de los limites del cajero.
Transferencias: escribe el numero de cuenta destino, la cantidad y una nota opcional. No se puede enviar a una cuenta propia, inexistente o congelada.
Sociedades: quien tenga el grado necesario (o sea jefe) puede depositar, retirar y enviar desde la cuenta del trabajo o la banda.
Para administradores
- Escribe
/bancoadminen el juego (con el permiso ACE asignado). - Busca a un jugador por texto y abre su cuenta.
- Acciones disponibles, todas con registro en
ov_banco_log(y en el webhook si lo configuraste): - Ajustar saldo (sumar o restar). El motivo es obligatorio, minimo 3 caracteres.
- Congelar o descongelar la cuenta.
- Reiniciar PIN: anula PIN y tarjeta; la persona debe crear un PIN nuevo en una sucursal.
- Ajustar una cuenta de sociedad, tambien con motivo.
- Para alertas en Discord, pon la URL en
Config.Webhooky ajustaConfig.AlertaMonto. - Para que un trabajo o banda tenga cuenta desde el inicio, usa
Config.SociedadesInicial. Tambien se crean cuando otro script las pide con los exports.
Preguntas frecuentes
Puedo cambiar los limites de retiro o transferencia? Si. Edita los valores Config.Max... y Config.Limite... en shared/config.lua y reinicia el recurso.
Hay que importar un archivo SQL? No. Las tablas se crean solas al iniciar, siempre que oxmysql este conectado.
Un script de trabajos usa qb-banking, Renewed-Banking u okokBanking. Funciona? El recurso responde a los exports de sociedad listados arriba y declara provide para Renewed-Banking y okokBanking. Los scripts que llamen a esos nombres de export quedan atendidos por ov_banco. Consulta la documentacion del script concreto para confirmar que export usa.
El jugador perdio la tarjeta, que hago? Puede pedir una nueva en la sucursal con su PIN (costo Config.CostoTarjetaNueva). Si olvido el PIN, un admin lo reinicia desde /bancoadmin.
El cajero no se abre. Verifica que el prop sea uno de Config.ModelosCajero, que el jugador tenga el item de la tarjeta en el inventario, que ox_inventory este iniciado antes y que el item este declarado con el mismo nombre que Config.ItemTarjeta.
Donde veo los errores? En la consola del servidor (mensajes [ov_banco]) y en la consola F8 del cliente. Puedes activar Config.Debug = true para mas informacion.
Actualizaciones y soporte
Las versiones nuevas aparecen en el Portal de Cfx.re (en tus recursos comprados) y en la tienda. Descargalas con la misma cuenta Cfx.re de la compra y reemplaza la carpeta, conservando tus cambios en shared/config.lua. Para soporte, abre un ticket en el Discord de la tienda: [enlace de soporte]. Indica la version del recurso, el error de consola y los pasos para reproducirlo.
