El banco se configura en dos sitios: los archivos del recurso, que guardan los valores de partida, y la pestaña Config de /bankadmin, que edita la mayoría en vivo.
Dónde viven los ajustes
shared/config.lua construye la configuración. Lee la mayoría de los valores de los archivos de data/ y guarda unos pocos propios.
En el primer arranque, el banco copia once secciones a la base de datos: general, cuentas, tarjetas, préstamos, ahorros, cheques, recompensas, puntuación de crédito, cajeros, admin y logs. Desde ese momento, la copia de la base de datos es la que se usa.
Tras el primer arranque, cambia esas secciones en /bankadmin → Config. Para volver a cargar los valores de un archivo, edítalo, reinicia el recurso y pulsa el botón de restablecer de esa sección en el panel.
| Qué quieres cambiar | Dónde |
|---|---|
| Cualquier cosa de las once secciones, antes del primer arranque | data/*.lua y shared/config.lua |
| Cualquier cosa de las once secciones, después | /bankadmin → Config |
debug, ui, commands, world, wealth, limits | shared/config.lua, y reiniciar el recurso |
admin.permission y logs.convar | Solo en shared/config.lua; el panel los muestra como solo lectura |
| Sucursales y puntos de cajero | /bankadmin → Puntos |
La pestaña Config puede exportar las secciones cambiadas a un texto e importarlas en otro servidor.
General · data/general.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
Currency | string | 'USD' | Código de moneda que se muestra en la interfaz y en los logs. |
UseCashAsItem | boolean | true | true maneja el efectivo como ítem de inventario (general.cashItem). false usa la cuenta de efectivo de tu framework. |
LogExternalBankChanges | boolean | true | true anota en el historial cada cambio que otro recurso hace en el dinero de banco de un jugador. false registra solo las operaciones del propio banco. Requiere QBox o QBCore. |
AdminMaxAdjust | number | 100000000 | Importe máximo que el staff puede añadir o quitar en un ajuste de saldo. |
Estas opciones de la misma sección están en shared/config.lua, dentro de general:
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
cashItem | string | 'money' | Nombre del ítem de efectivo. Solo se usa con UseCashAsItem = true. |
bankDistance | number | 5.0 | Metros a una sucursal dentro de los cuales el servidor acepta operaciones de banco. |
atmDistance | number | 3.0 | Metros a un cajero dentro de los cuales el servidor acepta operaciones de cajero. |
moneyItems | string[] | { 'money', 'black_money' } | Ítems que cuentan como dinero, por su valor nominal, en el informe de riqueza del panel de staff. |
valuedItems | table | {} | Ítems que cuentan en el informe de riqueza con un precio por unidad: { gold_bar = 5000 }. |
Cuentas · data/accounts.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
PINChangeCost | number | 200 | Comisión por cambiar el PIN de una cuenta. |
PrintReceiptPrice | number | 100 | Comisión por imprimir un recibo. |
NewAccountCost | number | 500 | Comisión que se muestra en la ventana de crear una cuenta compartida. Mantenla igual que CustomAccounts.CreationFee, que es el importe que se cobra. |
MaxTransactionsPerPlayer | number | nil (50) | Movimientos del historial que se muestran al jugador. |
ReceiptItem | string | 'printerdocument' | Ítem que se entrega como recibo impreso. |
MaxTransferContactsFavorites | number | 3 | Contactos que un jugador puede marcar como favoritos. |
CustomAccounts.Enabled | boolean | true | false quita las cuentas compartidas. |
CustomAccounts.MaxAccountsPerPlayer | number | 3 | Cuentas compartidas de las que un personaje puede ser titular. |
CustomAccounts.CreationFee | number | 500 | Comisión que se cobra al crear una cuenta compartida. |
En shared/config.lua, dentro de accounts:
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
transactionRetentionDays | number | 0 | Días que se conserva un movimiento antes de que la limpieza diaria lo borre. 0 lo conserva todo. |
pin.maxAttempts | number | 5 | PIN de cuenta erróneos permitidos antes del bloqueo. |
pin.lockSeconds | number | 30 | Segundos que el PIN de la cuenta queda bloqueado. |
Tarjetas · data/cards.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
EnableCards | boolean | true | false desactiva las tarjetas. |
RenewCardTime | number | 8 | Años hasta la fecha de caducidad impresa en una tarjeta nueva. |
MaxTotalCreditCards | number | 10 | Tarjetas que un personaje puede tener en total, en cualquier estado. |
MaxActiveCreditCards | number | 3 | Tarjetas activas que un personaje puede tener. |
PlayerCanChangeDailyLimit | boolean | false | true deja al titular cambiar el límite diario de una tarjeta. |
MaxDailyLimit | number | 100000 | Límite diario más alto que puede tener una tarjeta. |
CreditCards | table[] | tres niveles | Niveles de tarjeta. Cada uno tiene label, dailyLimit, price e item. |
Cada nivel es un ítem de inventario propio. item debe ser el nombre de un ítem registrado en tu inventario, con su imagen.
CreditCards = {
{ label = 'Standard Card', dailyLimit = 2500, price = 100, item = 'card_standard' },
{ label = 'Premium Card', dailyLimit = 5000, price = 200, item = 'card_premium' },
{ label = 'Gold Card', dailyLimit = 10000, price = 300, item = 'card_elite' },
},En shared/config.lua, dentro de cards:
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
posMaxCharge | number | 10000000 | Importe máximo que otro recurso puede cobrar o devolver en una tarjeta en una sola llamada. |
pin.maxAttempts | number | 5 | PIN de tarjeta erróneos permitidos antes de que se bloquee. |
pin.lockMinutes | number | 15 | Minutos que una tarjeta queda bloqueada. |
pin.cooldownMs | number | 3000 | Milisegundos entre dos intentos de PIN. |
pin.sessionSeconds | number | 300 | Segundos que una sesión de cajero sigue siendo válida tras el PIN. |
Préstamos · data/loans.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
EnableLoans | boolean | true | false desactiva los préstamos. |
AccountsWithLoans | table | todas true | Tipos de cuenta que pueden pedir préstamos: personal, business, custom. |
TimeScale.gameMonthRealSeconds | number | 86400 | Segundos reales de un mes de juego. Vence una cuota cada mes de juego. |
LoanPlans | table | cinco planes | Planes de préstamo. Ver más abajo. |
MaxActiveLoans | number | 4 | Préstamos que una cuenta puede tener abiertos a la vez. |
LoanSchedulerInterval | number | 1800 | Segundos entre dos pasadas del proceso de cobro. Mínimo 60. |
En shared/config.lua, dentro de loans: minRate (0.5), el interés más bajo con el que puede quedar un préstamo tras aplicar la puntuación de crédito y los descuentos de recompensas.
Planes · LoanPlans
Un plan de plazo fijo tiene label, maxAmount, interestRate, months y enabled. Un plan con options deja al jugador elegir el plazo, cada uno con su interés.
LoanPlans = {
starter = { label = 'Starter Loan', maxAmount = 5000, interestRate = 5.5, months = 12, enabled = true },
custom = {
label = 'Custom Loan',
maxAmount = 500000,
options = {
{ months = 12, interestRate = 8.5 },
{ months = 24, interestRate = 9.0 },
},
enabled = true,
},
},Pagos · Payments
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
graceHours | number | 6 | Horas tras el vencimiento antes de que una cuota cuente como atrasada. |
defaultHours | number | 72 | Horas de retraso tras las cuales el préstamo entra en mora. |
blockNewLoansWhenLate | boolean | true | true rechaza préstamos nuevos mientras haya uno atrasado. |
penalty.pct | number | 2.0 | Penalización por intervalo, como porcentaje de lo que queda por pagar. |
penalty.scoreLoss | number | 5 | Puntos de crédito que se pierden con cada penalización. |
penalty.mode | string | 'flat' | 'flat' suma el mismo porcentaje en cada intervalo. 'compounding' lo aplica sobre los anteriores. |
penalty.intervalHours | number | 24 | Horas entre dos penalizaciones. |
penalty.capPct | number | 30.0 | Tope de las penalizaciones acumuladas, como porcentaje del total del préstamo. |
Capacidad de endeudamiento · Capacity
Lo máximo que puede pedir un jugador es el menor de dos límites, nunca por debajo de cero: uno por el saldo de la cuenta y otro por los ingresos.
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
equityMultiplier | number | 3.0 | Límite por saldo: (saldo de la cuenta − deuda pendiente) × este valor. |
income.enabled | boolean | true | true añade el límite por ingresos en las cuentas personales. Las de empresa y las compartidas solo usan el límite por saldo. |
income.recentPaychecks | number | 5 | Nóminas cobradas que se promedian para calcular los ingresos. |
income.factor | number | 8.0 | Límite por ingresos: ingreso medio × este valor × multiplicador de puntuación − deuda pendiente. |
scoreMultipliers | table[] | seis tramos | Multiplicador del límite por ingresos según la puntuación de crédito. Cada entrada tiene min y mult. |
Embargo · Garnishment
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | false impide que el banco retenga ingresos. |
pct | number | 25.0 | Porcentaje retenido de cada nómina mientras un préstamo está atrasado o en mora. |
statuses | table | los dos true | Estados del préstamo que lo activan: [1] atrasado, [2] en mora. |
sources | table | { paycheck = true } | Ingresos a los que se aplica la retención. |
Puntuación de crédito · data/creditscore.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
Enable | boolean | true | false desactiva la puntuación de crédito. |
default | number | 500 | Puntuación de una cuenta nueva. |
min / max | number | 300 / 850 | Límites de la puntuación. |
bands | table[] | seis tramos | Cada tramo tiene min, label y modifier: puntos que se suman al interés de un préstamo. En negativo lo rebaja. |
deltas | table | onTime = 5, late = -10, defaulted = -60 | Puntos que se ganan o se pierden con cada evento. |
En shared/config.lua, dentro de creditScore: onTimeCooldownHours (0), las horas que deben pasar para que otro pago a tiempo vuelva a sumar puntos. 0 significa que cuenta cada pago.
Ahorros · data/savings.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
EnableSavings | boolean | true | false desactiva los ahorros. |
SavingsWeekEquivalent | number | 8 | Horas reales de una semana de ahorro. El interés se paga una vez por semana de ahorro. |
SavingsInterestRate | number | 2.5 | Porcentaje de interés de las metas personales. |
MaxActiveGoals | number | 4 | Metas que puede tener una cuenta personal. |
BusinessSavingsInterestRate | number | 3.0 | Porcentaje de interés de las metas de empresa. |
BusinessMaxActiveGoals | number | 5 | Metas que puede tener una cuenta de empresa. |
CustomSavingsInterestRate | number | 2.5 | Porcentaje de interés de las metas de cuentas compartidas. |
CustomMaxActiveGoals | number | 5 | Metas que puede tener una cuenta compartida. |
AccountsWithSavings | table | todas true | Tipos de cuenta que pueden ahorrar: personal, business, custom. |
Cheques · data/cheques.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
Item | string | 'bank_cheque' | Ítem que se entrega como cheque. |
BookItem | string | 'bank_chequebook' | Ítem con el que los jefes emiten cheques de empresa. |
BookSeconds | number | 30 | Segundos que la opción de emitir un cheque permanece sobre los jugadores cercanos tras usar el talonario. |
En shared/config.lua, dentro de cheques: maxAmount (100000000), el importe máximo de un cheque.
Los cambios en los ítems de cheque necesitan reiniciar el recurso, también cuando se hacen desde el panel.
Recompensas · data/rewards.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
Enabled | boolean | true | false desactiva las recompensas. |
EarnRates | table | cinco acciones | Puntos por acción: base puntos fijos más 1 punto por cada per del importe. per = 0 da solo la base. Acciones: deposit, withdraw, transfer, atm_use, loan_payment. |
ActionLabels | table | cinco etiquetas | Nombre de cada acción en el historial de puntos. |
AntiFarm.Enabled | boolean | true | false desactiva las tres protecciones. |
AntiFarm.ActionCooldown | table | de 0 a 60 | Segundos entre dos concesiones de la misma acción, por jugador. 0 = sin espera. |
AntiFarm.DailyPointsCap | number | 500 | Puntos que un jugador puede ganar al día. 0 = sin tope. |
AntiFarm.RoundTrip.windowSeconds | number | 300 | Ventana en la que la acción contraria anula los puntos. |
AntiFarm.RoundTrip.amountTolerance | number | 0.25 | Cuánto deben parecerse los dos importes para contar como el mismo dinero: 0.25 = ±25 %. |
AntiFarm.RoundTrip.pairs | table | depósito ↔ retiro | Qué acción es la contraria de cuál. |
Categories | table[] | cinco | Pestañas del catálogo: key y label. |
Catalog | table[] | diez recompensas | Recompensas disponibles. Ver más abajo. |
Cada recompensa tiene id (único), name, description, cost en puntos, icon, category y type:
type | Qué recibe el jugador | Campos |
|---|---|---|
'cash' | value ingresado en el banco al momento. | value |
'fee_waiver' | La próxima comisión bancaria es gratis. | uses, durationDays |
'interest_boost' | value % más de interés en los ahorros personales. | value, durationDays |
'loan_discount' | value % menos en el interés del próximo préstamo. | value, uses, durationDays |
Cajeros · data/atms.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
ATMDistance | number | 1.5 | Distancia de target de un cajero, en metros. |
ATM | table[] | cuatro modelos | Modelos de prop que funcionan como cajero. Cada entrada es { model = hash }, con el hash en número. |
Sucursales · data/banks.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
ShowBankBlips | boolean | true | false oculta todos los blips del banco. Forma parte de la sección general: tras el primer arranque, cámbialo en el panel. |
DebugTargetZones | boolean | false | true dibuja las zonas de target de las sucursales. |
BankLocations | table[] | lista de ejemplo | Sucursales que se crean en el primer arranque. |
BankLocations se lee una sola vez, cuando la tabla de puntos está vacía. Después, gestiona las sucursales y los puntos de cajero desde /bankadmin → Puntos. La lista del archivo es un ejemplo para el mapa por defecto: sustitúyela antes del primer arranque si tus bancos están en otro sitio.
Interfaz · data/interface.lua y ui
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
AccentColor (data/interface.lua) | string (hex) | '#e53935' | Color de acento de la interfaz del banco y del cajero. |
ui.accent (shared/config.lua) | string (hex) | configurable | Color de acento del panel de staff. |
Logs en Discord · data/webhook.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
BotName | string | 'CuxialBank' | Nombre con el que se publican los mensajes. |
ServerName | string | 'My Server' | Nombre que aparece como autor de cada mensaje. |
IconURL | string | '' | Icono junto al autor. |
DateFormat | string | '%d/%m/%Y [%X]' | Formato de fecha del pie. |
Webhook | table | una entrada por tipo de log | Para cada tipo de log: enabled y color (decimal). |
En shared/config.lua, dentro de logs:
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
enabled | boolean | true | false no envía ningún log. |
convar | string | 'cuxial_banking_webhook' | Nombre de la convar que guarda la URL del webhook. Una convar llamada <convar>_<tipo de log> la sustituye para ese tipo. |
auditDays | number | 90 | Días que se conserva el registro de auditoría del panel de staff. 0 lo conserva todo. |
La URL nunca se escribe en un archivo. Consulta Instalación.
El resto de shared/config.lua
| Opción | Tipo | Por defecto | Qué hace |
|---|---|---|---|
debug | boolean | false | Imprime trazas en la consola. También se activa poniendo la convar cuxial_banking_debug a 1. |
commands.admin.name | string | 'bankadmin' | Comando que abre el panel de staff. Una cadena vacía quita el comando. |
commands.admin.restricted | string | false | false | Grupo ACE que exige el comando, por ejemplo 'group.admin'. false deja solo la comprobación de admin.permission. |
admin.permission | string | 'admin' | Permiso de tu framework que convierte a un jugador en staff del banco. |
world.targetDistance | number | 1.5 | Distancia de target de una sucursal, en metros. |
world.chequeTargetDistance | number | 2.0 | Distancia a la que un jefe puede apuntar a un jugador para emitirle un cheque de empresa. |
world.nearbyRadius | number | 12.0 | Radio en el que se ofrecen los jugadores cercanos como destinatarios de una transferencia. |
world.interactions | string | 'cuxial_interactions' | Nombre del recurso que muestra las sucursales como NPC. |
wealth.cacheSeconds | number | 15 | Segundos que se reutiliza un informe de riqueza antes de volver a calcularlo. |
wealth.providerTimeoutMs | number | 2000 | Milisegundos que tiene cada fuente del informe de riqueza para responder. |
wealth.containerDepth | number | 3 | Niveles de contenedores dentro de contenedores que abre el informe de riqueza. |
limits.reasonLength | number | 100 | Caracteres del concepto de una transferencia. |
limits.accountNameLength | number | 100 | Caracteres del nombre de una cuenta compartida. |
limits.goalNameLength | number | 100 | Caracteres del nombre de una meta de ahorro. |
limits.chequePayToLength | number | 100 | Caracteres del beneficiario de un cheque. |
limits.chequeMemoLength | number | 120 | Caracteres del concepto de un cheque. |
limits.contactNameLength | number | 48 | Caracteres del nombre de un contacto. |
limits.maxContacts | number | 50 | Contactos por jugador. |
limits.maxMultiTransfer | number | 20 | Destinatarios de una transferencia a varios contactos. |
limits.savingsMaxTarget | number | 4294967295 | Objetivo más alto de una meta de ahorro. |
limits.lockWaitMs | number | 5000 | Milisegundos que una operación espera a que termine otra sobre la misma cuenta. |
Cambios habituales
Pasar el banco a otro ítem de efectivo
En /bankadmin → Config → General, pon como ítem de efectivo el que use tu inventario, o desactiva el efectivo como ítem para usar la cuenta de efectivo de tu framework.
Hacer los préstamos más rápidos o más lentos
TimeScale.gameMonthRealSeconds marca el ritmo. Con 43200, vence una cuota cada 12 horas reales.
Añadir un nivel de tarjeta
Registra un ítem nuevo en tu inventario. Antes del primer arranque, añade una línea a CreditCards; después, añade el nivel en /bankadmin → Config, en la sección de tarjetas.
{ label = 'Tarjeta Black', dailyLimit = 50000, price = 1000, item = 'card_black' },Traducir los textos
Todos los textos están en locales/en.json y locales/es.json. Los nombres de los planes de préstamo, los niveles de tarjeta, los tramos de puntuación de crédito y las recompensas están en los archivos de datos.
