Configuration

$50 $25 Early Access | Purchase on Tebex

Complete configuration reference for nc-banking. All settings are in config/config.lua.

Framework & Target

Config.Framework = 'auto'       -- 'qbcore' | 'qbox' | 'esx' | 'ox' | 'auto'
Config.TargetSystem = 'auto'    -- 'ox_target' | 'qb-target' | 'qtarget' | 'interact' | 'auto'
Config.OxBossGrade = 3          -- OX Core: minimum grade to be considered boss
  • 'auto' detects the first available resource
  • 'interact' = E key proximity interaction (no target resource needed)

Locale

Config.Locale = 'en'  -- 'en' | 'de' | 'es' | 'fr' | 'pt'

Sets the language for all server notifications, NUI text, and dialog messages. Locale files are in locales/. See Features > Multi-Language for details on adding languages.

Inventory System

Config.InventorySystem = 'auto'  -- 'auto' or specific resource name

Presets

Pre-configured mappings for popular inventory resources. Each preset defines export names and metadata format:

Config.InventoryPresets = {
    {
        resource = 'ox_inventory',
        hasItem  = 'GetItemCount',
        addItem  = 'AddItem',
        removeItem = 'RemoveItem',
        getCount = 'GetItemCount',
        metadataFormat = 'direct',   -- (source, item, amount, metadata)
    },
    {
        resource = 'qb-inventory',
        hasItem  = 'HasItem',
        addItem  = 'AddItem',
        removeItem = 'RemoveItem',
        getCount = 'GetItemCount',
        metadataFormat = 'slot',     -- (source, item, amount, nil, metadata)
    },
    -- qs-inventory, ps-inventory, codem-inventory, core_inventory...
}

metadataFormat

Value AddItem Signature Use for
'direct' AddItem(source, item, amount, metadata) ox_inventory, codem, core_inventory
'slot' AddItem(source, item, amount, nil, metadata) qb-inventory, qs, ps-inventory
'none' AddItem(source, item, amount) No metadata support

To add a custom inventory, append a new entry to Config.InventoryPresets.

E Key Interaction

When no target system is available:

Config.InteractKey = 38           -- E key
Config.InteractPrompt = '[E]'
Config.InteractDrawDistance = 10.0
Config.InteractFontScale = 0.35

Database

Config.AutoInstallSQL = true  -- Auto-create tables on first start

NPC Exclusivity

Config.NPCExclusive = true    -- One player per NPC at a time
Config.NPCLockTimeout = 300   -- Lock expires after 5 minutes (safety)

External UI Toggle

Automatically hide/show other resource UIs when banking opens:

Config.ExternalUIToggle = {
    -- Export mode:
    { resource = 'nox-name', export = 'ToggleNameplate' },
    { resource = 'nc-hud',   export = 'ToggleHUD' },
    
    -- Event mode:
    { resource = 'nox-chat', 
      showEvent = 'nox-chat:setVisibleBySetting', showArg = true,
      hideEvent = 'nox-chat:setVisibleBySetting', hideArg = false },
}

PIN

Config.RequirePin = true
Config.RequirePinOnATM = true
Config.RequirePinOnNPC = false
Config.DefaultPin = '0000'
Config.PinLength = 4
Config.MaxPinAttempts = 5
Config.PinLockoutTime = 30    -- Seconds

Transactions

Config.TransactionLogLimit = 50
Config.TransferFee = 0.0       -- 0.05 = 5% fee
Config.MinTransferAmount = 1
Config.MaxTransferAmount = 1000000
Config.MoneyCountVolume = 0.3       -- Money counting sound volume (0.0~1.0)
Config.MoneyCountEndVolume = 0.4    -- Money count end sound volume

Transfer Security

Config.TransferCooldown = 5              -- Seconds between transfers per player
Config.OfflineTransferMainAccount = false -- Allow transfers TO offline player's main account
Config.OfflineTransferSubAccount = true   -- Allow transfers TO offline player's sub-accounts
Config.MaxAccountLookupFails = 5          -- Failed lookups before temporary block
Config.AccountLookupBlockDuration = 60    -- Block duration in seconds

Account Number System

Config.BankName = 'NC'              -- Prefix for account numbers
Config.AccountNumberLength = 12     -- Digit count (NC-000000000001)
Config.SelfTransferFee = false      -- false = no fee for self-transfers
Config.BusinessAutoCreate = true    -- Auto-create business accounts on login

Auto Business Jobs

Automatically create business accounts for specific jobs on server start:

Config.AutoBusinessJobs = {
    -- { job = 'police',    label = 'Police Department' },
    -- { job = 'ambulance',  label = 'EMS Department' },
    -- { job = 'mechanic',   label = 'Mechanic Shop' },
}

When an isBoss grade player logs in, the account owner is automatically updated to that player.

  • Account numbers and transfers auto-prefix: entering digits-only (e.g. on ATM keypad) automatically prepends {BankName}-
  • On server start, existing accounts without numbers are auto-backfilled

Savings Accounts

Config.SavingsEnabled = true
Config.SavingsInterestRate = 0.02    -- 2% per interval
Config.SavingsInterestInterval = 60  -- Minutes between payouts
Config.MaxSavingsAccounts = 3
Config.MaxSavingsBalance = 500000
Config.MinSavingsDeposit = 100
Config.MinSavingsWithdraw = 100
Config.MaxSavingsGoals = 5

Personal Accounts

Config.PersonalAccountEnabled = true
Config.MaxPersonalAccounts = 3
Config.MaxPersonalBalance = 1000000
Config.MinPersonalDeposit = 1
Config.MinPersonalWithdraw = 1

Business Accounts

Config.BusinessAccountEnabled = true
Config.MaxBusinessBalance = 10000000
Config.BusinessDepositAllMembers = true  -- All job members can deposit
Config.MinBusinessDeposit = 1
Config.MinBusinessWithdraw = 1

Shared Accounts

Config.SharedAccountEnabled = true
Config.MaxSharedAccounts = 2        -- Max accounts you can OWN
Config.MaxSharedMembers = 10
Config.MaxSharedBalance = 5000000
Config.SharedWithdrawOwnerOnly = true
Config.MinSharedDeposit = 1
Config.MinSharedWithdraw = 1

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 } -- Days
Config.LoanMinPayment = 500

-- Auto-pay
Config.LoanAutoPayEnabled = true
Config.LoanAutoPayInterval = 1440    -- Minutes (1440 = 24h)
Config.LoanAutoPayPercent = 0.10     -- 10% of remaining
Config.LoanAutoPayMinAmount = 500

-- Penalties
Config.LoanGracePeriodHours = 6
Config.LoanLatePenaltyEnabled = true
Config.LoanLatePenaltyType = 'flat'  -- 'flat' or 'percent'
Config.LoanLatePenaltyAmount = 500
Config.LoanBalanceMultiplier = 3     -- Max loan = balance × multiplier

Credit Score

Config.CreditScoreEnabled = true
Config.CreditScoreMinForLoan = 400

Config.CreditScoreRules = {
    baseScore = 350,
    maxScore = 850,
    minScore = 300,
    -- Positive: perDeposit, perLoanPaid, perSavingsAccount, etc.
    -- Negative: perLoanDefaulted, perActiveOverdueLoan, noTransactionsRecent
}

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

Config.BillingEnabled = true
Config.InvoiceExpireDays = 7
Config.MaxPendingInvoices = 20
Config.AllowDeclineInvoice = true
Config.AllowPayAllInvoices = true

Billing Phone App

Config.BillingAppEnabled = true
Config.BillingAppKeybind = 'F6'
Config.BillingAppCommand = 'billing'
Config.BillingAppCanSend = true
Config.BillingAppSendBossOnly = false
Config.BillingAppNotifyOnNew = true
Config.PhoneIntegration = 'standalone'  -- 'standalone' (okokPhone / lb-phone planned)

Notification

Config.NotificationType = 'auto'  -- 'ox_lib' | 'qb' | 'esx' | 'custom' | 'auto'

When set to 'auto', the notification system matches your detected framework. Use 'custom' to define your own notification function.

Force Close Other NUI

Automatically close other resource UIs when banking opens:

Config.ForceCloseOtherNUI = true
Config.CloseResources = {
    -- Export mode:
    { resource = 'nox-name', export = 'ToggleNameplate', hideArg = false, showArg = true },
    { resource = 'nc-hud',   export = 'ToggleHUD',       hideArg = false, showArg = true },
    -- Event mode:
    { resource = 'nox-chat',
      showEvent = 'nox-chat:setVisibleBySetting', showArg = true,
      hideEvent = 'nox-chat:setVisibleBySetting', hideArg = false },
}

NPC Locations

8 bank locations with 17 NPC tellers. Each location can have multiple tellers — only the first teller per location has blip.enabled = true.

Config.BankNPCs = {
    -- Pacific Standard (2 tellers)
    { id = 'bank_pacific_1',   coords = vector4(149.57, -1042.11, 29.37, 338.29), blip = { enabled = true,  ... } },
    { id = 'bank_pacific_1_1', coords = vector4(148.06, -1041.57, 29.37, 340.96), blip = { enabled = false, ... } },

    -- Fleeca Bank — Vespucci (2 tellers)
    { id = 'bank_fleeca_1',    coords = vector4(-1211.98, -331.95, 37.78, 25.48), blip = { enabled = true,  ... } },
    { id = 'bank_fleeca_1_1',  coords = vector4(-1213.28, -332.69, 37.78, 26.72), blip = { enabled = false, ... } },

    -- Fleeca Bank — Great Ocean (2 tellers)
    { id = 'bank_fleeca_2_1',  coords = vector4(-2961.1, 482.93, 15.7, 83.28),    blip = { enabled = true,  ... } },
    { id = 'bank_fleeca_2_2',  coords = vector4(-2961.23, 481.42, 15.7, 89.71),   blip = { enabled = false, ... } },

    -- Fleeca Bank — Paleto Bay (1 teller)
    { id = 'bank_fleeca_paleto', coords = vector4(-112.24, 6471.03, 31.63, 134.87), blip = { enabled = true, ... } },

    -- Maze Bank (2 tellers)
    { id = 'bank_maze_1',      coords = vector4(313.76, -280.43, 54.16, 337.58),  blip = { enabled = true,  ... } },
    { id = 'bank_maze_2',      coords = vector4(312.4, -279.93, 54.16, 341.52),   blip = { enabled = false, ... } },

    -- Bank of Liberty (2 tellers)
    { id = 'bank_liberty_1',   coords = vector4(-351.33, -51.38, 49.04, 344.05),  blip = { enabled = true,  ... } },
    { id = 'bank_liberty_2',   coords = vector4(-352.83, -50.79, 49.04, 344.87),  blip = { enabled = false, ... } },

    -- Maze Bank Tower HQ (4 tellers)
    { id = 'bank_maze_tower_1', coords = vector4(248.87, 224.34, 106.29, 160.95), blip = { enabled = true,  color = 3, scale = 1.2, ... } },
    { id = 'bank_maze_tower_2', coords = vector4(247.05, 224.99, 106.29, 160.67), blip = { enabled = false, ... } },
    { id = 'bank_maze_tower_3', coords = vector4(243.65, 226.24, 106.29, 159.68), blip = { enabled = false, ... } },
    { id = 'bank_maze_tower_4', coords = vector4(252.21, 223.12, 106.29, 158.9),  blip = { enabled = false, ... } },

    -- Fleeca Bank — Route 68 (2 tellers)
    { id = 'bank_fleeca_3_1',  coords = vector4(1174.99, 2708.23, 38.09, 179.89), blip = { enabled = true,  ... } },
    { id = 'bank_fleeca_3_2',  coords = vector4(1176.47, 2708.23, 38.09, 180.66), blip = { enabled = false, ... } },
}

NPC Properties

Property Type Description
id string Unique identifier
model string Ped model (default: u_f_m_casinocash_01)
coords vector4 x, y, z, heading
dialogTitle string Dialog header
dialogSubtitle string Branch name shown in dialog
greeting string NPC's first message
blip.enabled boolean Show map blip
blip.sprite number Blip icon (108 = bank)
blip.color number Blip color
blip.scale number Blip size

ATM

Config.ATMEnabled = true

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' },
    },
    {
        name = 'fleeca',
        distance = 0.6, height = 1.6, lookAtHeight = 1.1, fov = 45.0,
        models = { 'prop_fleeca_atm', 'prop_atm_02', 'prop_atm_03', 'amb_prop_pine_atm' },
    },
}

ATM Spawner (Admin)

Config.ATMSpawnEnabled = true
Config.ATMSpawnModel = 'prop_atm_01'
Config.ATMSpawnCommand = 'atmspawn'
Config.ATMDeleteCommand = 'atmdelete'

ATM Calibration

Config.ATMCalibration = {
    enabled = true,
    command = 'atmcalibrate',
    coordsFile = 'atm_coords.json',
    debug = false,
}

Bank Card System

Config.BankCard = {
    enabled = true,
    useInventory = true,         -- true: item + DB, false: DB only
    itemName = 'atm_card',       -- Only used when useInventory = true
    issueAtNPC = true,
    requireForATM = true,
    maxCards = 10,
    reissueFee = 250,            -- Fee for reissuing a card ($0 = free)

    -- Daily spending limits (ATM withdrawals + transfers only)
    dailyLimitEnabled = true,
    dailyLimitResetHour = 0,     -- 0 = midnight server time
    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 }, -- 0 = unlimited
    },
}

Card Services (NPC Menu)

Players can access three card operations at the NPC:

  • Issue New Card — Issue a card linked to a specific account
  • Cancel Card — Remove an existing card from inventory and database
  • Reissue Card — Replace a card for the same account (preserves grade, charges reissueFee)

useInventory

Value Behavior
true Card = inventory item with metadata + DB record. Requires inventory with metadata support.
false Card = DB record only. No inventory item created. Card list shown from database.

Admin Permissions

Config.AdminAcePermission = 'nc-banking.admin'

Grant via server.cfg:

add_ace group.admin nc-banking.admin allow
Last updated 1 month ago