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: falseEnables verbose debug logging across server, client, and NUI consoles.
Config.Localestringdefault: 'en'Active locale. Shipped values: 'en', 'fi'.
Config.UseTargetbooleandefault: trueWhether 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: 300Seconds a loaded account stays in the in-memory cache before re-fetch.
Config.Cache.defaultPersonalSecondsnumberdefault: 300Cache TTL for a player's default personal account lookup.
Config.Cache.cleanupIntervalMsnumberdefault: 600000How often expired cache entries are swept, in milliseconds.
Accounts
Config.Accounts.autoCreateDefaultbooleandefault: trueWhen 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: trueIf true, mirror the framework's bank balance onto the linked personal account on login.
Config.Accounts.nameMinLengthnumberdefault: 3Config.Accounts.nameMaxLengthnumberdefault: 32Config.Accounts.nameAllowPatternstringLua pattern that account names must match. Shipped default allows alphanumerics, whitespace, dashes, underscores, and apostrophes.
Config.Accounts.metadataMaxBytesnumberdefault: 2048Max serialized metadata size per account.
Config.Accounts.allowOwnerClosebooleandefault: trueOwners can close their own accounts.
Config.Accounts.allowOwnerFreezebooleandefault: falseOwners 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: trueMaster toggle for multi-owner (shared) accounts.
Config.Accounts.Shared.allowPersonalbooleandefault: falseConfig.Accounts.Shared.allowBusinessbooleandefault: trueConfig.Accounts.Shared.allowSavingsbooleandefault: trueConfig.Accounts.Shared.allowLinkedPersonalbooleandefault: falseConfig.Accounts.Shared.cacheSecondsnumberdefault: 120Cache TTL for shared account membership lookups.
Config.Accounts.Shared.adminBypassbooleandefault: trueAdmins bypass shared-account role checks.
Config.Accounts.Shared.defaultRolestringdefault: 'viewer'Role assigned when inviting a new member without explicit role.
Config.Accounts.Shared.rolestableRole → 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: 120Inactivity timeout before the ATM session is killed.
Config.Session.maxDistancenumberdefault: 3.5Max distance (meters) from the ATM before the session is force-closed.
Config.Session.heartbeatIntervalnumberdefault: 15000Heartbeat interval in milliseconds from client to server.
Config.Session.pinAttemptsnumberdefault: 3Allowed wrong-PIN attempts before lockout.
Config.Session.lockoutDurationnumberdefault: 300Lockout duration in seconds after exceeding pinAttempts.
ATMs
Config.ATMPropstableArray 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.ATMLocationstableOptional 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: trueMaster toggle for 3D panels. If false, UI renders as a flat overlay.
Config.NUI3D.debugbooleandefault: falseRender debug spheres / wireframes for panel positioning.
Config.NUI3D.resourcestringdefault: 'nx-3d'Resource name that provides the 3D rendering.
Config.NUI3D.resWnumberdefault: 1024DUI texture width.
Config.NUI3D.resHnumberdefault: 1024DUI texture height.
Config.NUI3D.interactDistancenumberdefault: 2.5Distance within which finger-IK interaction activates.
Config.NUI3D.updateIntervalnumberdefault: 50Panel update interval in milliseconds.
Config.NUI3D.updateMaxDistancenumberdefault: 5.0Distance beyond which the panel stops updating entirely.
Config.NUI3D.fingerInteractiontableIK 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.panelstablePer-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: 100Fee charged when the user changes their PIN. First creation is free.
Config.Pincode.resetCostnumberdefault: 200Fee charged for a PIN reset (no old PIN required).
Config.Pincode.minLengthnumberdefault: 4Config.Pincode.maxLengthnumberdefault: 4Config.Pincode.allowSequentialbooleandefault: falseReject sequential PINs like 1234.
Config.Pincode.allowRepeatedbooleandefault: falseReject PINs with all identical digits like 1111.
Config.Pincode.maxAttemptsnumberdefault: 3Config.Pincode.lockoutDurationnumberdefault: 300Seconds 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.LimitstablePer-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.offsetstablePer-ATM-type player offset used to anchor the cinematic camera. Keys: wall, standalone, maze_bank.
Config.Camera.scriptedtableScripted 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.cardInserttableEnter / 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.atmIdletableDict/anim used for the ATM idle loop.
Config.Animations.takeCashtableAnimation played when dispensing cash.
Config.Animations.putCashtableAnimation played when depositing cash.
Sounds
Config.Sounds.volumenumberdefault: 0.2Master volume multiplier for all ATM sounds.
Config.Sounds.effectstablePer-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.BankLocationstableArray 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.SocietiestableMap 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: trueConfig.FreelanceBilling.commissionPercentnumberdefault: 5.0Commission taken from freelance invoices. See Config.Commission for separate society-invoice commission.
Config.FreelanceBilling.maxAmountnumberdefault: 10000Config.FreelanceBilling.minAmountnumberdefault: 10Config.FreelanceBilling.requireDescriptionbooleandefault: trueConfig.FreelanceBilling.cooldownSecondsnumberdefault: 60Anti-spam cooldown between invoices issued by the same player.
Config.FreelanceBilling.allowOfflinePlayersbooleandefault: falseWhether freelance invoices can be addressed to offline players.
Invoices
Config.Invoices.enablePersonalbooleandefault: trueConfig.Invoices.enableSocietybooleandefault: trueConfig.Invoices.allowSelfInvoicebooleandefault: trueConfig.Invoices.personalRequireAcceptancebooleandefault: truePersonal invoices require the receiver to accept before they can be paid.
Config.Invoices.acceptanceTimeoutCheckIntervalnumberdefault: 5Minutes between sweeps that expire un-accepted personal invoices.
Config.Invoices.onlyOnlineTargetsbooleandefault: trueConfig.Invoices.targetMenuEnabledbooleandefault: trueAdds an 'Invoice this player' option to the ox_target player menu.
VAT
Config.VAT.enabledbooleandefault: falseConfig.VAT.ratenumberdefault: 10.0VAT percentage.
Config.VAT.govAccountstringdefault: 'society_government'Society account that receives collected VAT.
Config.VAT.applyToSocietybooleandefault: trueConfig.VAT.applyToFreelancebooleandefault: trueConfig.VAT.showBreakdownbooleandefault: trueDisplay 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: falseConfig.Autopay.daysnumberdefault: 7Days before due date at which autopay attempts settlement.
Config.Autopay.checkIntervalnumberdefault: 60Minutes 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: trueMaster 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.billingtableBilling 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.scoretableCredit 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.atmCashAdvancetableATM cash-advance flow: enabled, autoFallbackOnInsufficient, requirePhysicalCard, merchant label, transactionType identifier.
Config.Credit.tierstableTier 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: 100000Config.InvoiceLimits.minAmountnumberdefault: 1Config.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.markertableMarker 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.0Config.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.