Configuration
Complete configuration reference for nc-banking V2.
All settings live in config/config.lua inside the resource.
Locale & Currency
-- Language
a--@type 'en' | 'de' | 'fr' | 'es' | 'pt'
Config.Locale = 'en'
-- Currency display
Config.CurrencySymbol = '$'
Config.CurrencyPosition = 'before' -- 'before' → $1,000 | 'after' → 1,000$
Config.CurrencyLocale = 'en-US' -- JS locale for formatting (e.g. 'de-DE', 'fr-FR', 'ko-KR')
Config.CurrencyDecimals = 0 -- 0 = $1,000 | 2 = $1,000.00
Localecontrols all server messages, dialogs, and NUI text.- Currency options are display-only; they do not change stored values, only how
money appears in the UI.
Framework & Target
---@type 'qbcore' | 'qbox' | 'esx' | 'ox' | 'auto'
Config.Framework = 'auto'
-- OX Core: minimum group grade to be considered boss
Config.OxBossGrade = 3
---@type 'auto' | 'ox_target' | 'qb-target' | 'qtarget' | 'interact'
Config.TargetSystem = 'auto'
Framework = 'auto'detects QBCore / QBox / ESX / OX Core automatically.TargetSystem:'ox_target','qb-target','qtarget'→ use that target resource.'interact'→ E-key prompts only, no target resource.'auto'→ prefer ox_target > qb-target > qtarget > interact.
Inventory System
---@type 'auto' | string
Config.InventorySystem = 'auto' -- 'auto' or specific inventory resource name
Config.InventoryPresets = {
{
resource = 'ox_inventory',
hasItem = 'GetItemCount',
addItem = 'AddItem',
removeItem = 'RemoveItem',
getCount = 'GetItemCount',
metadataFormat = 'direct', -- AddItem(source, item, amount, metadata)
},
{
resource = 'qb-inventory',
hasItem = 'HasItem',
addItem = 'AddItem',
removeItem = 'RemoveItem',
getCount = 'GetItemCount',
metadataFormat = 'slot', -- AddItem(source, item, amount, nil, metadata)
},
-- qs-inventory, ps-inventory, codem-inventory, core_inventory...
}
InventorySystem = 'auto'→ first matching preset inInventoryPresetswins.- To support a custom inventory, just add a new entry to
InventoryPresets. metadataFormatcontrols how metadata is passed to the AddItem export.
E Key Interaction
Used when no target system is available (or when TargetSystem = 'interact').
Config.InteractKey = 38 -- E key
Config.InteractPrompt = '[E]'
Config.InteractDrawDistance = 10.0
Config.InteractFontScale = 0.35
Config.InteractDistance = 2.5
Database
Config.AutoInstallSQL = true
- When
true, nc-banking will:- Create all required tables on first start.
- Run upgrade queries when needed (e.g. add new columns).
- Set to
falseif you prefer to managesql/install.sqlmanually.
NPC Exclusivity
Config.NPCExclusive = true -- Only one player can use an NPC at a time
Config.NPCLockTimeout = 300 -- Seconds before lock auto-expires
Prevents two players from using the same teller NPC simultaneously.
Force Close Other NUI & External UI Toggle
Config.ForceCloseOtherNUI = false
Config.CloseResources = {
-- { resource = 'ox_inventory', export = 'closeInventory' },
-- { resource = 'qb-inventory', event = 'qb-inventory:client:closeinv' },
}
Config.ExternalUIToggle = {
-- { resource = 'nox-name', export = 'ToggleNameplate' },
-- { resource = 'nc-hud', export = 'ToggleHUD' },
-- { resource = 'nox-chat', showEvent = 'nox-chat:setVisibleBySetting', showArg = true,
-- hideEvent = 'nox-chat:setVisibleBySetting', hideArg = false },
}
ForceCloseOtherNUI = true→ fire close exports/events when banking NUI opens.ExternalUIToggle→ optional soft toggle (hide HUD/chat while banking UI is open,
show when closed).
PIN & Security
Config.RequirePin = true
Config.RequirePinOnATM = true
Config.RequirePinOnNPC = false
Config.DefaultPin = '0000'
Config.PinLength = 4
Config.MaxPinAttempts = 5
Config.PinLockoutTime = 30 -- seconds
Config.ForgotPinFee = 500 -- fee for PIN reset at NPC (0 = free)
- Use PIN on ATM only, NPC only, or both.
- Lockout and reset fee help prevent brute-force PIN attempts.
Transactions & ATM Fees
Config.MoneyCountVolume = 0.6
Config.MoneyCountEndVolume = 0.7
Config.TransactionLogLimit = 50
Config.TransferFee = 0.0 -- 0.0 = no fee, 0.05 = 5%
Config.ATMFees = {
withdraw = 50, -- Flat fee on ATM withdrawals (0 = no fee)
deposit = 50, -- Flat fee on ATM deposits (0 = no fee)
}
Config.MinTransferAmount = 1
Config.MaxTransferAmount = 1000000
ATMFeesapply only to ATM operations (not NPC teller operations).- Fees are logged and shown in ATM confirmations / history.
Transfer Security
Config.TransferCooldown = 5 -- seconds between transfers per player
Config.OfflineTransferMainAccount = false -- allow to offline main account (risky)
Config.OfflineTransferSubAccount = true -- allow to offline sub-accounts
Config.MaxAccountLookupFails = 5 -- failed account lookups before block
Config.AccountLookupBlockDuration = 60 -- seconds of block
Prevents brute-force account number guessing and spam transfers.
Account Number System & Business Auto-Create
Config.BankName = 'NC' -- account prefix, e.g. NC-000000000001
Config.AccountNumberLength = 12
Config.SelfTransferFee = false
Config.BusinessAutoCreate = true
Config.AutoBusinessJobs = {
{ name = 'mechanic', label = 'LS Customs' },
-- { name = 'police', label = 'Police Department' },
}
- If
BusinessAutoCreateis enabled, business accounts are created and updated
for configured jobs automatically. - Boss detection uses your framework or
Config.OxBossGrade(for OX Core).
Savings, Personal, Business & Shared Accounts
-- Savings
Config.SavingsEnabled = true
Config.SavingsInterestRate = 0.02 -- 2% per interval
Config.SavingsInterestInterval = 60 -- minutes
Config.MaxSavingsAccounts = 3
Config.MaxSavingsBalance = 500000
Config.MinSavingsDeposit = 100
Config.MinSavingsWithdraw = 100
Config.MaxSavingsGoals = 5
-- Personal
Config.PersonalAccountEnabled = true
Config.MaxPersonalAccounts = 3
Config.MaxPersonalBalance = 1000000
Config.MinPersonalDeposit = 1
Config.MinPersonalWithdraw = 1
-- Business
Config.BusinessAccountEnabled = true
Config.MaxBusinessBalance = 10000000
Config.MinBusinessDeposit = 1
Config.MinBusinessWithdraw = 1
Config.BusinessDepositAllMembers = true
-- Shared
Config.SharedAccountEnabled = true
Config.MaxSharedAccounts = 2
Config.MaxSharedMembers = 10
Config.MaxSharedBalance = 5000000
Config.MinSharedDeposit = 1
Config.MinSharedWithdraw = 1
Config.SharedWithdrawOwnerOnly = true
These limits help protect your economy (max balances, minimum operations, etc.).
Loans & Credit Score
-- Loans
Config.LoanEnabled = true
Config.MinLoanAmount = 1000
Config.MaxLoanAmount = 100000
Config.LoanInterestRate = 0.10 -- 10% flat interest
Config.MaxActiveLoans = 2
Config.LoanDurations = { 7, 14, 30 }
Config.LoanMinPayment = 500
-- Auto-pay
Config.LoanAutoPayEnabled = true
Config.LoanAutoPayInterval = 1440 -- minutes
Config.LoanAutoPayPercent = 0.10
Config.LoanAutoPayMinAmount = 500
-- Penalties
Config.LoanGracePeriodHours = 6
Config.LoanLatePenaltyEnabled = true
Config.LoanLatePenaltyType = 'flat' -- 'flat' or 'percent'
Config.LoanLatePenaltyAmount = 500
Config.LoanBalanceMultiplier = 3 -- Max loan = total balance × multiplier
-- Credit Score
Config.CreditScoreEnabled = true
Config.CreditScoreMinForLoan = 400
Config.CreditScoreRules = {
baseScore = 350,
maxScore = 850,
minScore = 300,
-- see config.lua for detailed rules
}
Config.CreditTiers = {
{ name = 'Poor', minScore = 300, maxLoan = 5000, interestMod = 0.05 },
{ name = 'Fair', minScore = 450, maxLoan = 25000, interestMod = 0.02 },
{ name = 'Good', minScore = 550, maxLoan = 50000, interestMod = 0.00 },
{ name = 'Very Good', minScore = 650, maxLoan = 75000, interestMod = -0.02 },
{ name = 'Excellent', minScore = 750, maxLoan = 100000, interestMod = -0.03 },
}
Invoices / Billing & Phone App
Config.BillingEnabled = true
Config.InvoiceExpireDays = 7
Config.MaxPendingInvoices = 20
Config.AllowDeclineInvoice = true
Config.AllowPayAllInvoices = true
Config.BillingAppEnabled = true
Config.BillingAppKeybind = 'F6'
Config.BillingAppCommand = 'billing'
Config.BillingAppCanSend = true
Config.BillingAppSendBossOnly = false
Config.BillingAppNotifyOnNew = true
---@type 'standalone' | 'okokPhone' | 'lb-phone' | 'auto'
Config.PhoneIntegration = 'lb-phone'
BillingAppEnabledcontrols the standalone billing NUI.PhoneIntegrationlets you tie billing notifications to your phone resource.
Notification System
---@type 'ox_lib' | 'qb' | 'esx' | 'custom'
Config.NotificationType = 'qb'
- Choose how notifications are displayed.
- Use
'custom'if you want to plug in your own notify wrapper.
NPC Locations & Dialog
Config.BankNPCs = {
{
id = 'bank_pacific_1',
name = 'Bank Teller',
displayName = 'Bank Teller',
model = 'u_f_m_casinocash_01',
coords = vector4(149.57, -1042.11, 29.37, 338.29),
dialogTitle = 'Bank Teller',
dialogSubtitle = 'Pacific Standard Branch',
greeting = 'Welcome to Pacific Standard Public Deposit Bank! How may I assist you today?',
blip = { enabled = true, sprite = 108, color = 2, scale = 0.9, label = 'Pacific Standard Bank' },
},
-- more NPCs ...
}
Each NPC config controls:
- Ped model, location, and heading.
- Dialog title/subtitle and greeting line.
- Map blip visibility, sprite, color, and scale.
NPC interaction menu options:
Config.BankDialogOptions = {
{
label = 'My Account',
type = 'category',
description = 'Balance, deposit, withdraw, PIN',
npcResponse = 'Of course! What would you like to do with your account?',
children = {
{ label = 'Check Balance', type = 'clientEvent', clientEvent = 'nc-banking:client:checkBalance' },
-- ...
},
},
-- Transfers, Loans & Credit, Billing, Card Services, Banking Dashboard, etc.
}
You can add/remove categories or items to customise what the NPC offers.
ATM System
Config.ATMEnabled = true
Config.ATMInteractDistance = 2.0
Camera Presets
Config.ATMCameraPresets = {
{
name = 'default',
distance = 0.8,
rightOffset = 0.0,
height = 1.4,
lookAtHeight = 0.8,
fov = 42.0,
transitionMs = 800,
dof = true,
dofNear = 0.3,
dofFar = 4.0,
dofStrength = 0.6,
models = { 'prop_atm_01' },
},
-- 'fleeca', 'fmshop', etc.
}
ATM Spawner & Calibration
Config.ATMSpawnEnabled = true
Config.ATMSpawnModel = 'prop_atm_01'
Config.ATMSpawnCommand = 'atmspawn'
Config.ATMDeleteCommand = 'atmdelete'
Config.ATMCalibration = {
enabled = true,
command = 'atmcalibrate',
permission = 'ACE', -- uses Config.AdminAcePermission
coordsFile = 'atm_coords.json',
debug = false,
}
ATM Overlay & Keypad
Config.ATMNUI = {
enabled = true,
debug = false,
screen = { left = 38, top = 20, width = 24, height = 55 },
buttonWidth = 3.5,
buttonHeight = 3.5,
buttonGap = 0.8,
leftButtons = {
{ label = 'Balance', event = 'checkBalance', top = 12 },
{ label = 'Deposit', event = 'deposit', top = 30 },
-- ...
},
rightButtons = {
{ label = 'PIN', event = 'pinChange', top = 12 },
-- ...
},
pinPad = {
enabled = true,
left = 35,
bottom = 0,
width = 8,
height = 20,
keyGap = 6,
},
}
You can tune the overlay for custom ATM models via ATMCameraPresets and ATMNUI.
ATM dialog (simple menu without 3D overlay):
Config.ATMDialogOptions = {
{ label = 'Check Balance', type = 'clientEvent', clientEvent = 'nc-banking:client:checkBalance' },
{ label = 'Deposit', type = 'clientEvent', clientEvent = 'nc-banking:client:deposit' },
-- ...
}
Bank Card System
Config.BankCard = {
enabled = true,
useInventory = true,
itemName = 'atm_card',
issueAtNPC = true,
requireForATM = true,
transferable = true,
maxCards = 10,
reissueFee = 250,
-- Card grades & daily limits
dailyLimitEnabled = true,
dailyLimitResetHour = 0,
defaultGrade = 'standard',
grades = {
standard = { label = 'Standard Card', dailyLimit = 5000, cost = 0, order = 1 },
premium = { label = 'Premium Card', dailyLimit = 25000, cost = 500, order = 2 },
gold = { label = 'Gold Card', dailyLimit = 100000, cost = 2000, order = 3 },
platinum = { label = 'Platinum Card', dailyLimit = 0, cost = 5000, order = 4 },
},
messages = {
issued = 'Bank card has been issued.',
noCard = 'You need a bank card to use the ATM.',
maxReached = 'You already have the maximum number of cards.',
alreadyExists = 'A card for this account already exists.',
removed = 'Your bank card has been removed.',
dailyLimitReached = 'Daily spending limit reached. Remaining: $%s / $%s',
upgraded = 'Card upgraded to %s.',
},
}
useInventory = true→ real item + DB entry, requires metadata-capable inventory.transferable = true→ cards can be given to other players and used at ATMs.dailyLimitEnabledandgradescontrol per-card daily spending caps.
Banking Job System (Branches, Vaults, Employees)
Config.BankingJob = {
enabled = true,
roles = {
owner = { label = 'Owner', level = 3 },
manager = { label = 'Manager', level = 2 },
teller = { label = 'Teller', level = 1 },
},
permissions = {
teller = 1,
cards = 1,
transfers = 1,
loans = 2,
vault = 2,
invoices = 2,
settings = 3,
business = 3,
hire = 2,
fire = 2,
},
purchase = {
moneyType = 'bank', -- 'bank' or 'cash'
},
vault = {
enabled = true,
maxBalance = 5000000,
startingBalance = 100000,
affectATMWithdrawals = false,
affectNPCWithdrawals = false,
},
loanReview = {
enabled = false,
maxInterestAdjust = 0.05,
autoApproveBelow = 5000,
},
tablet = {
enabled = true,
allowSelfCustomer = true,
},
disableNPCAtOwnedBranches = false,
atmPlacement = {
enabled = true,
maxRadius = 60.0,
},
purchaseNpc = 'ig_lifeinvad_01',
branches = {
{
id = 'pacific',
label = 'Pacific Standard',
npcPrefix = 'bank_pacific',
price = 750000,
purchaseCoords = vector4(146.8, -1043.7, 29.37, 164.46),
atmRadius = 60.0,
employeeSpots = {
vector4(149.20, -1045.20, 29.37, 340.0),
-- ...
},
},
-- more branches...
},
}
Key ideas:
enabled = trueturns on branch ownership + banking job.rolesandpermissionsdefine who can use which features.vaultcontrols branch vault balances and whether withdrawals affect vaults.atmPlacementandbranches[*].atmRadiusdefine where owners can place ATMs.
You can disable the entire job/branch system with:
Config.BankingJob.enabled = false
In that case, nc-banking behaves closer to V1 (no branches, no job), while still
using the new UI and ATM features.
Admin Permissions
Config.AdminAcePermission = 'nc-banking.admin'
Grant via server.cfg:
add_ace group.admin nc-banking.admin allow
Used for admin-only commands such as ATM spawn/calibration and certain
banking job management actions.
Discord Webhook Logs
Config.DiscordLogs = {
enabled = false,
botName = 'NC Banking',
serverName = 'My Server',
avatarUrl = '',
dateFormat = '%Y-%m-%d %H:%M:%S',
defaultWebhook = '',
webhooks = {
deposit = { enabled = true },
withdraw = { enabled = true },
transfer = { enabled = true },
savings = { enabled = true },
loan = { enabled = true },
invoice = { enabled = true },
card = { enabled = true },
account = { enabled = true },
admin = { enabled = true },
},
}
- Enable and point
defaultWebhook(or per-category URLs) to your Discord webhook. - Each category logs structured embeds (amounts, players, accounts, etc.).