NX CreativeNX CreativeDocs
ScriptsRealbanking

Configuration

Every entry in shared/config.lua. Defaults, types, and purpose.

All settings live in shared/config.lua. The file is in escrow_ignore so it remains editable after install. Locale strings live in shared/locales/<lang>.lua, and server-only secrets (Discord webhooks) live in server-config.lua, which is not covered here.

General

Config.Debugbooleandefault: false

Enables verbose debug logging across server, client, and NUI consoles.

Config.Localestringdefault: 'en'

Active locale. Shipped values: 'en', 'fi'.

Config.UseTargetbooleandefault: true

Whether to use a targeting system (ox_target / qb-target) for ATM and bank-ped interactions. If false, falls back to proximity prompts.

Config.TargetSystemstringdefault: 'ox_target'

Target resource name. One of 'ox_target', 'qb-target', 'qtarget'.

Cache

Config.Cache.accountSecondsnumberdefault: 300

Seconds a loaded account stays in the in-memory cache before re-fetch.

Config.Cache.defaultPersonalSecondsnumberdefault: 300

Cache TTL for a player's default personal account lookup.

Config.Cache.cleanupIntervalMsnumberdefault: 600000

How often expired cache entries are swept, in milliseconds.

Accounts

Config.Accounts.autoCreateDefaultbooleandefault: true

When a player without a default account logs in, create one automatically.

Config.Accounts.autoCreateAccountTypestringdefault: 'personal'

Type assigned to the auto-created default account.

Config.Accounts.autoCreateAccountNamestringdefault: 'Personal Account'

Display name assigned to the auto-created default account.

Config.Accounts.autoCreateLinkBankBalancebooleandefault: true

If true, mirror the framework's bank balance onto the linked personal account on login.

Config.Accounts.nameMinLengthnumberdefault: 3
Config.Accounts.nameMaxLengthnumberdefault: 32
Config.Accounts.nameAllowPatternstring

Lua pattern that account names must match. Shipped default allows alphanumerics, whitespace, dashes, underscores, and apostrophes.

Config.Accounts.metadataMaxBytesnumberdefault: 2048

Max serialized metadata size per account.

Config.Accounts.allowOwnerClosebooleandefault: true

Owners can close their own accounts.

Config.Accounts.allowOwnerFreezebooleandefault: false

Owners can freeze their own accounts.

Config.Accounts.adminGroupsstring[]default: { 'admin', 'superadmin', 'mod' }

Framework group names treated as admin for banking actions.

Config.Accounts.adminPermissionsstring[]default: { 'admin', 'god' }

Additional permission names recognized as admin.

Config.Accounts.adminAcePermissionstringdefault: 'command.nx_realbanking_admin'

ACE permission checked for admin actions.

Shared accounts

Config.Accounts.Shared.enabledbooleandefault: true

Master toggle for multi-owner (shared) accounts.

Config.Accounts.Shared.allowPersonalbooleandefault: false
Config.Accounts.Shared.allowBusinessbooleandefault: true
Config.Accounts.Shared.allowSavingsbooleandefault: true
Config.Accounts.Shared.allowLinkedPersonalbooleandefault: false
Config.Accounts.Shared.cacheSecondsnumberdefault: 120

Cache TTL for shared account membership lookups.

Config.Accounts.Shared.adminBypassbooleandefault: true

Admins bypass shared-account role checks.

Config.Accounts.Shared.defaultRolestringdefault: 'viewer'

Role assigned when inviting a new member without explicit role.

Config.Accounts.Shared.rolestable

Role → permission map. Shipped with owner, manager, teller, viewer. Each role sets boolean flags: view, withdraw, deposit, transfer, manage_members, edit_limits, freeze, close.

Session

Config.Session.timeoutSecondsnumberdefault: 120

Inactivity timeout before the ATM session is killed.

Config.Session.maxDistancenumberdefault: 3.5

Max distance (meters) from the ATM before the session is force-closed.

Config.Session.heartbeatIntervalnumberdefault: 15000

Heartbeat interval in milliseconds from client to server.

Config.Session.pinAttemptsnumberdefault: 3

Allowed wrong-PIN attempts before lockout.

Config.Session.lockoutDurationnumberdefault: 300

Lockout duration in seconds after exceeding pinAttempts.

ATMs

Config.ATMPropstable

Array of ATM prop definitions. Each entry: { model = `hash`, type = 'standalone' | 'wall' | 'maze_bank', brand? = 'maze' }. These determine which camera offset and 3D panel calibration apply.

Config.ATMLocationstable

Optional ATM marker / blip definitions at fixed coordinates. Each entry: { coords = vector3, name = string, blip = boolean }.

3D NUI panels

Configures the per-ATM-model 3D rendering of the NUI via nx-3d. Only customize if you add new ATM models. The shipped models (prop_fleeca_atm, prop_atm_01, prop_atm_02) are already calibrated.

Config.NUI3D.enabledbooleandefault: true

Master toggle for 3D panels. If false, UI renders as a flat overlay.

Config.NUI3D.debugbooleandefault: false

Render debug spheres / wireframes for panel positioning.

Config.NUI3D.resourcestringdefault: 'nx-3d'

Resource name that provides the 3D rendering.

Config.NUI3D.resWnumberdefault: 1024

DUI texture width.

Config.NUI3D.resHnumberdefault: 1024

DUI texture height.

Config.NUI3D.interactDistancenumberdefault: 2.5

Distance within which finger-IK interaction activates.

Config.NUI3D.updateIntervalnumberdefault: 50

Panel update interval in milliseconds.

Config.NUI3D.updateMaxDistancenumberdefault: 5.0

Distance beyond which the panel stops updating entirely.

Config.NUI3D.fingerInteractiontable

IK finger-press configuration: enable flag, cursor hide, PED IK part / blend timings, per-axis screen-press response, per-ped height normalization (so taller peds / high heels don't misalign the hand). Values are tuned for mp_m_freemode_01.

Config.NUI3D.panelstable

Per-model panel calibration keyed by prop hash. Each entry defines screen / keypad dimensions, tilt, IK offsets, and the card-prop attachment pose. Shipped entries: prop_fleeca_atm, prop_atm_01, prop_atm_02. Recalibrate in-world using Config.NUI3D.debug = true.

PIN code

Config.Pincode.changeCostnumberdefault: 100

Fee charged when the user changes their PIN. First creation is free.

Config.Pincode.resetCostnumberdefault: 200

Fee charged for a PIN reset (no old PIN required).

Config.Pincode.minLengthnumberdefault: 4
Config.Pincode.maxLengthnumberdefault: 4
Config.Pincode.allowSequentialbooleandefault: false

Reject sequential PINs like 1234.

Config.Pincode.allowRepeatedbooleandefault: false

Reject PINs with all identical digits like 1111.

Config.Pincode.maxAttemptsnumberdefault: 3
Config.Pincode.lockoutDurationnumberdefault: 300

Seconds to lock out after exceeding maxAttempts.

Fees

Each fee block shares a shape: { enabled, type = 'percentage' | 'flat', value, minFee?, maxFee? }.

Config.Fees.withdrawaltabledefault: { enabled=true, type='percentage', value=1.5, minFee=1, maxFee=50 }

Charged on ATM withdrawals.

Config.Fees.transfertabledefault: { enabled=true, type='flat', value=2.50, sameBankFree=true }

Charged on transfers. sameBankFree waives the fee for intra-bank movement.

Config.Fees.deposittabledefault: { enabled=false, type='flat', value=0 }

Transaction limits

Config.Limitstable

Per-account-tier limits: default, premium, business, savings. Each entry: { dailyWithdrawal, dailyDeposit, dailyTransfer, transactionMax, transactionMin }. Shipped defaults use 10,000,000 as a permissive ceiling. Tighten these for your economy.

Camera

Config.Camera.offsetstable

Per-ATM-type player offset used to anchor the cinematic camera. Keys: wall, standalone, maze_bank.

Config.Camera.scriptedtable

Scripted camera parameters: camera name, rotation order, ease timings, clipping, motion blur, sensitivity, pitch clamp. Tuned for the stock ATM camera feel; edit only if you're replacing the camera behavior.

Animations

Config.Animations.cardInserttable

Enter / idle animation dicts, card prop (bone, pos, rot, duration), and frozen offset used when the card is stuck in the slot.

Config.Animations.cardRemovetabledefault: { enabled=true, startTime=1.0, cardGrabTime=0.45, endTime=0.0, duration=1500, blendInSpeed=8.0 }
Config.Animations.atmIdletable

Dict/anim used for the ATM idle loop.

Config.Animations.takeCashtable

Animation played when dispensing cash.

Config.Animations.putCashtable

Animation played when depositing cash.

Sounds

Config.Sounds.volumenumberdefault: 0.2

Master volume multiplier for all ATM sounds.

Config.Sounds.effectstable

Per-effect { file, volume, loop? } map. Shipped effects: atmAmbient, cardInsert, buttonPress, transactionSuccess, transactionFail, cashDispense, screenTransition, error, sessionTimeout.

Security

Config.Security.logLevelstringdefault: 'none'

One of 'none', 'basic', 'verbose', 'paranoid'. Controls how much detail is written to the security audit log.

Config.Security.anticheattabledefault: { distanceChecks=true, teleportDetection=false, speedHackDetection=false, injectionDetection=false }

Anti-exploit toggles. Distance checks are cheap and recommended; the others add overhead.

Config.Security.thresholdstabledefault: { rapidTransactions=10, largeTransfer=50000, dailyLimitPercent=90 }

Flag thresholds for security events (not hard blocks).

Blips

Config.Blipstabledefault: { enabled=false, sprite=207, color=2, scale=0.8, label='ATM', shortRange=true }

Global toggle for ATM blips. Per-location visibility is still controlled by Config.ATMLocations[i].blip.

Bank locations

Config.BankLocationstable

Array of in-world bank-access points. Each entry: { coords = vector3, heading, type = 'fleeca' | 'pacific' | 'blaine' | 'maze', label, blip, ped }. Peds spawn with the given model and scenario. Opening the bank triggers nx_realbanking:server:openBank.

Societies (job invoicing)

Config.Societiestable

Map of job name → { label, account, canFine, canBill, canInspect, finePresets, requireReason }. Shipped jobs: police, sheriff, ambulance, mechanic, taxi, realestate, cardealer. Each finePresets is an array of { label, amount } quick-fill options surfaced in the invoice UI.

Freelance billing

Config.FreelanceBilling.enabledbooleandefault: true
Config.FreelanceBilling.commissionPercentnumberdefault: 5.0

Commission taken from freelance invoices. See Config.Commission for separate society-invoice commission.

Config.FreelanceBilling.maxAmountnumberdefault: 10000
Config.FreelanceBilling.minAmountnumberdefault: 10
Config.FreelanceBilling.requireDescriptionbooleandefault: true
Config.FreelanceBilling.cooldownSecondsnumberdefault: 60

Anti-spam cooldown between invoices issued by the same player.

Config.FreelanceBilling.allowOfflinePlayersbooleandefault: false

Whether freelance invoices can be addressed to offline players.

Invoices

Config.Invoices.enablePersonalbooleandefault: true
Config.Invoices.enableSocietybooleandefault: true
Config.Invoices.allowSelfInvoicebooleandefault: true
Config.Invoices.personalRequireAcceptancebooleandefault: true

Personal invoices require the receiver to accept before they can be paid.

Config.Invoices.acceptanceTimeoutCheckIntervalnumberdefault: 5

Minutes between sweeps that expire un-accepted personal invoices.

Config.Invoices.onlyOnlineTargetsbooleandefault: true
Config.Invoices.targetMenuEnabledbooleandefault: true

Adds an 'Invoice this player' option to the ox_target player menu.

VAT

Config.VAT.enabledbooleandefault: false
Config.VAT.ratenumberdefault: 10.0

VAT percentage.

Config.VAT.govAccountstringdefault: 'society_government'

Society account that receives collected VAT.

Config.VAT.applyToSocietybooleandefault: true
Config.VAT.applyToFreelancebooleandefault: true
Config.VAT.showBreakdownbooleandefault: true

Display VAT as a separate line in invoice UI.

Commission

Config.Commission.societyInvoicestabledefault: { enabled=true, percent=5.0, minAmount=10, maxAmount=500 }

Commission clamped between minAmount and maxAmount.

Config.Commission.freelanceInvoicestabledefault: { enabled=false, percent=0, minAmount=0, maxAmount=0 }

Autopay

Config.Autopay.enabledbooleandefault: false
Config.Autopay.daysnumberdefault: 7

Days before due date at which autopay attempts settlement.

Config.Autopay.checkIntervalnumberdefault: 60

Minutes between autopay sweeps.

Config.Autopay.debtAccountstringdefault: 'society_debt'

Society account that accumulates unpaid debt.

Config.Autopay.notifyBeforetabledefault: { enabled=true, daysBefore=1 }
Config.Autopay.onFailuretabledefault: { applyInterest=true, interestRate=5.0, sendToDebtCollection=false, notifyPlayer=true }

Credit cards

Config.Credit.enabledbooleandefault: true

Master toggle. If false, all credit-card exports return CREDIT_DISABLED.

Config.Credit.itemstabledefault: { givePhysicalCard=true, creditCardItem='credit_card' }

ox_inventory item name that represents a credit card, and whether to give the physical item on approval.

Config.Credit.billingtable

Billing cycle knobs: inGameDayMinutes, cycleDays, dueDays, checkIntervalSeconds, interestIntervalDays, minimumPaymentPercent, minimumPaymentFlat. In-game days let you compress real-world billing windows into a gameplay-friendly pace.

Config.Credit.scoretable

Credit score model: min/max bounds, base score, stable-job bonus, bank-balance thresholds, account-age bonus, payment bonuses and penalties, usage bonus. Edit carefully. Tier eligibility is driven by these numbers.

Config.Credit.penaltiestabledefault: { lateFeeFlat=250, lateFeePercent=2.5, collectionsThreshold=50000, autoSeizeEnabled=true }

Late fees and collections behavior. autoSeizeEnabled will seize funds from linked accounts when debt exceeds collectionsThreshold.

Config.Credit.limitstabledefault: { maxActiveCards=2, maxSingleCharge=25000 }
Config.Credit.atmCashAdvancetable

ATM cash-advance flow: enabled, autoFallbackOnInsufficient, requirePhysicalCard, merchant label, transactionType identifier.

Config.Credit.tierstable

Tier definitions keyed by tier id. Shipped: standard, gold, black. Each: label, creditLimit, interestRate, graceInterestRate, graceDays, minimumScore, requiresStableJob, whitelistedJobs. The black tier whitelists specific jobs.

Config.Credit.tierPrioritystring[]default: { 'black', 'gold', 'standard' }

Order used when auto-assigning a tier from score. Highest eligible tier wins.

Invoice limits

Config.InvoiceLimits.maxPendingtabledefault: { received=20, sent=10 }

Hard cap on simultaneously pending invoices per player, split by direction.

Config.InvoiceLimits.maxAmountnumberdefault: 100000
Config.InvoiceLimits.minAmountnumberdefault: 1
Config.InvoiceLimits.dailyLimittabledefault: { enabled=true, maxCreated=50, maxAmount=500000 }

Per-player daily cap on invoice count and total amount issued.

Config.InvoiceLimits.expirationtabledefault: { enabled=true, days=30 }

When enabled, invoices become overdue after `days`.

Bank interactions

Config.BankInteractions.targetOptionstabledefault: { label='Access Bank', icon='fa-solid fa-building-columns', distance=2.5 }

Options surfaced when a player targets a bank ped or counter.

Config.BankInteractions.markertable

Marker placed at bank locations. Fields: enabled, type, color {r,g,b,a}, size, bobUpAndDown, faceCamera, rotate. Disabled by default in favor of target-based interaction.

Config.BankInteractions.drawDistancenumberdefault: 15.0
Config.BankInteractions.text3dtabledefault: { enabled=false, scale=0.35, color={r=255,g=255,b=255,a=255} }

Optional 3D text prompt above bank peds.

Config.BankInteractions.keybindtabledefault: { enabled=false, key=38, label='E' }

Fallback keybind prompt if the targeting system is not in use.