Features

$50 $25 Early Access | Purchase on Tebex

Detailed explanation of all nc-banking features.

NPC Banking

Dialog System

Players interact with bank teller NPCs through an immersive dialog interface:

  • Camera animation focuses on the NPC
  • Typewriter text effect for NPC responses
  • Hierarchical menu tree (categories → sub-options)
  • Configurable greeting and dialog options per location

8 Bank Locations (17 NPCs)

Location NPCs Blip
Pacific Standard Bank 2 tellers sprite 108, color 2
Fleeca Bank — Vespucci 2 tellers sprite 108, color 2
Fleeca Bank — Great Ocean 2 tellers sprite 108, color 2
Fleeca Bank — Paleto Bay 1 teller sprite 108, color 2
Fleeca Bank — Route 68 2 tellers sprite 108, color 2
Maze Bank 2 tellers sprite 108, color 2
Bank of Liberty 2 tellers sprite 108, color 2
Maze Bank Tower HQ 4 tellers sprite 108, color 3, scale 1.2

Each NPC has configurable model, position, blip settings, and dialog text. Multiple tellers per branch share the same blip (only the first has blip.enabled = true).

NPC Locking

When Config.NPCExclusive = true, only one player can use each NPC at a time. Locks auto-expire after Config.NPCLockTimeout seconds.

ATM System

3D NUI Overlay

ATM buttons are rendered as NUI elements positioned over the in-game ATM screen:

  • Left buttons: Balance, Deposit, Withdraw, Transfer
  • Right buttons: PIN, History, Cancel
  • PIN pad with model-specific layouts

Camera Presets

Each ATM model has calibrated camera settings:

  • Distance, height, offset, FOV
  • Depth of field (blur background)
  • Smooth transition animation

ATM Calibration

Admin command /atmcalibrate allows fine-tuning NUI element positions per ATM model. Calibration data is saved to atm_coords.json.

Admin ATM Spawner

  • /atmspawn [model] — Enter keyboard-based placement mode
  • /atmdelete — Delete nearest spawned ATM
  • ATMs saved to database, persist across restarts
  • Requires nc-banking.admin ACE permission

Keyboard Controls

Key Action
Q Move Up (+Z)
E Move Down (-Z)
Z Move Left (camera-relative)
C Move Right (camera-relative)
F Move Forward (camera direction)
G Move Backward
Scroll Rotate heading
Shift Hold for 5x speed
Left Click Snap to nearest wall
Enter Confirm placement
Backspace Cancel

Wall Snap

Left-click casts 16-directional rays at 3 heights (48 total) to find the nearest wall within 3m. When a wall is found:

  • ATM position snaps flush against the wall surface
  • Heading auto-rotates to face outward (perpendicular to wall)
  • Preview turns brighter green to indicate snap state
  • Any movement/rotation key releases the snap for manual adjustment

Account Types

Account Number System

Every account (main, personal, savings, business, shared) is assigned a unique account number on creation.

  • Format: {BankName}-{12 digit number} → e.g. NC-000000000001
  • Configurable via Config.BankName (prefix) and Config.AccountNumberLength (digit count)
  • Existing accounts without numbers are auto-backfilled on server start via database migration
  • Account numbers are displayed in the "View Account Numbers" menu (NPC) and "Account Info" (ATM)

Account-Number Based Transfers

Transfers use the recipient's account number instead of server ID:

  1. Enter the target account number (e.g. NC-000000000001)
  2. Enter the amount
  3. The system finds the account across all 5 types automatically
  4. Self-transfer detection with optional fee waiver (Config.SelfTransferFee)
  5. Offline player support — transfers to offline players are credited directly via database

Dual Transfer Mode

All transfer UIs (ATM, NPC, Billing App) support two transfer modes:

Mode Input How It Works
Account Number NC-000000000001 Directly resolves the target account across all 5 types
Server ID 1, 5, 42 Resolves the player's citizenid → main account number, then transfers

Users toggle between modes via tab buttons in the UI. Server ID mode requires the target player to be online and have a bank account.

Auto-Prefix

On ATM keypads (digits only), the bank prefix is automatically prepended. Entering 000000000001 on the ATM is equivalent to entering NC-000000000001. The server also auto-adds the prefix if the input contains no - character.

Transfer Security

Feature Config Default Description
Cooldown Config.TransferCooldown 5s Minimum seconds between transfers
Brute-force Protection Config.MaxAccountLookupFails 5 Failed lookups before temporary block
Block Duration Config.AccountLookupBlockDuration 60s How long the block lasts
Offline → Main Config.OfflineTransferMainAccount false Allow transfers to offline player's main account
Offline → Sub Config.OfflineTransferSubAccount true Allow transfers to offline player's sub-accounts

Business Account Auto-Create

When Config.BusinessAutoCreate = true, business accounts are automatically created for employed players on login (job must not be 'unemployed').

Auto Business Jobs (Server Start)

Configure Config.AutoBusinessJobs to automatically create business accounts for specific jobs when the server starts — no player login required:

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

When an isBoss player logs in, the account's owner_citizenid is automatically updated to that player.

Main Account

The framework's default bank account. Deposit, withdraw, transfer, view balance and history.

Personal Accounts

General-purpose sub-accounts without interest:

  • Create up to maxPersonalAccounts (default: 3)
  • Custom labels
  • Independent balance from main account

Savings Accounts

Interest-bearing accounts:

  • Automatic interest payouts at configurable intervals
  • Savings goals with target amounts
  • Interest history tracking
  • Min deposit/withdraw amounts

Business Accounts

Job-linked accounts managed by bosses:

  • One account per job
  • Boss can create, withdraw, close
  • All members can deposit (configurable)
  • Linked to framework job system

Shared Accounts

Multi-user joint accounts:

  • Owner creates and manages members
  • Add/remove members by player ID
  • Owner-only withdraw (configurable)
  • Up to maxSharedMembers per account

Loan System

Application

  • Credit score determines eligibility and terms
  • Config.LoanBalanceMultiplier limits max loan relative to total balance
  • Choose duration from predefined options (7, 14, 30 days)

Repayment

  • Manual payments with minimum amount
  • Auto-pay option (percentage-based recurring payments)

Grace Period & Penalties

  • Grace period after due date before defaulting
  • Late penalties: flat amount or percentage
  • Defaulted loans severely impact credit score

Loan Calculator

Preview total cost, interest, and monthly payments before applying.

Credit Score System

Score range: 300 (worst) → 850 (best)

Positive Factors

  • Deposits, withdrawals (account activity)
  • Fully repaid loans
  • Active savings accounts
  • High savings balance
  • Paid invoices
  • Account age

Negative Factors

  • Defaulted loans (-80 points each)
  • Overdue active loans (-30 points)
  • No recent transactions (-20 points)

Tiers

Tier Score Max Loan Interest Modifier
Poor 300–449 $5,000 +5%
Fair 450–549 $25,000 +2%
Good 550–649 $50,000 base
Very Good 650–749 $75,000 -2%
Excellent 750–850 $100,000 -3%

Invoice / Billing System

Invoices

  • Send invoices to players (boss/job or any player)
  • Pay from any account type (main, personal, savings, etc.)
  • Decline invoices (configurable)
  • Bulk pay all pending invoices
  • Auto-expire after InvoiceExpireDays

Job Billing → Business Account

When an invoice has a job field (e.g. sent by police or EMS), the payment is automatically deposited into that job's business account instead of the sender's personal bank account. If no business account exists for the job, payment falls back to the sender's personal account.

This enables realistic billing flows:

  • Police fines → Police Department business account
  • EMS bills → EMS Department business account
  • Custom job bills → Respective business accounts

SendBill Export

For external scripts (police, EMS, mechanic, etc.), use the SendBill export which accepts server IDs instead of citizenids:

-- From any server script:
exports['nc-banking']:SendBill(fromSource, toSource, amount, reason, jobName)

-- Example: Police issuing a fine
exports['nc-banking']:SendBill(source, targetSource, 5000, 'Speeding ticket', 'police')

The jobName parameter ensures the payment goes to the correct business account.

Billing Phone App

Standalone NUI app for managing invoices and transfers:

  • Open with F6 keybind or /billing command
  • View pending, paid, sent invoices
  • Send new invoices (by Server ID)
  • Transfer money (dual mode: Server ID or Account Number)
  • Account carousel for selecting source account
  • Phone integration support (coming soon)

Bank Card System

Overview

Cards link to specific accounts and can optionally exist as inventory items.

Issuance Flow

  1. Player talks to NPC → "Card Services" → "Issue New Card"
  2. Server fetches player's account list (main, personal, savings, business, shared)
  3. Player selects an account
  4. Card is issued (item + DB or DB-only based on useInventory)

Dual Tracking

  • Inventory mode (useInventory = true): Card exists as item with metadata (account_type, account_id, label, description)
  • DB mode (useInventory = false): Card tracked only in nc_banking_cards table

ATM Card Check

When requireForATM = true, players must have at least one card to use ATMs.

Per-Account Uniqueness

Only one card can be issued per account. Duplicate cards for the same account are blocked.

PIN Security

  • PINs stored as SHA-256 hashes (auto-migrated from plain text)
  • Configurable attempt limit with timed lockout
  • Separate toggle for ATM and NPC PIN requirements
  • Default PIN auto-detection prompts change

Auto Systems (Server Timers)

System Interval Description
Savings Interest Configurable (default: 60min) Auto-credit interest to all savings accounts
Loan Auto-Pay 5 minutes Process automatic loan payments
Loan Enforcement 10 minutes Check grace periods, apply penalties, default expired loans
Invoice Expiry 10 minutes Mark expired invoices

External UI Toggle

Automatically hide other resource UIs when banking NUI opens:

  • Export-based: call an export with show/hide arguments
  • Event-based: trigger client events with arguments
  • Configurable per-resource in Config.ExternalUIToggle

Multi-Language (i18n)

nc-banking includes a full internationalization system covering both server-side messages and NUI text.

Supported Languages

Code Language File
en English locales/en.lua
de German locales/de.lua
es Spanish locales/es.lua
fr French locales/fr.lua
pt Portuguese locales/pt.lua

How It Works

  • Server-side: shared/locale.lua loads the selected locale file and provides L() function for translated strings
  • NUI-side: web/src/utils/locale.js receives locale data from the server and provides t() function in Vue components
  • All notification messages, error texts, dialog labels, and UI strings are translatable
  • Set language via Config.Locale = 'en' in config/config.lua

Adding a New Language

  1. Copy locales/en.lua to locales/xx.lua (your language code)
  2. Translate all string values
  3. Set Config.Locale = 'xx' in config
  4. Add the file to fxmanifest.lua files list (already uses locales/*.lua glob)

Modern NUI (Vue 3 + Vite)

The entire banking UI is built with Vue 3 Single File Components and bundled with Vite.

4 Modular Apps

App File Purpose
DialogApp web/src/apps/DialogApp.vue NPC bank teller dialog with typewriter effect
AtmApp web/src/apps/AtmApp.vue 3D ATM overlay with PIN pad and model presets
BankApp web/src/apps/BankApp.vue Full banking interface (accounts, transfers, loans, etc.)
BillingApp web/src/apps/BillingApp.vue Invoice management and transfer UI

Architecture

  • web/src/main.js — Vue app entry point, mounts all 4 apps
  • web/src/utils/bridge.js — Lua ↔ NUI message router (handles postMessage events)
  • web/src/utils/locale.js — NUI-side i18n with t() helper
  • web/src/styles/global.css — Shared CSS variables and base styles
  • Built output goes to html/assets/ via Vite

Development

cd web
npm install
npm run build    # Production build → ../html/assets/
npm run dev      # Dev server with HMR (for local development)

Multi-Framework Support

nc-banking auto-detects your framework at startup and loads the appropriate bridge:

Framework Detection Bridge
QBCore qb-core resource bridge/frameworks/qbcore.lua
QBox qbx_core resource bridge/frameworks/qbox.lua
ESX es_extended resource bridge/frameworks/esx.lua
OX Core ox_core resource bridge/frameworks/ox.lua

Each bridge provides a unified Bridge API used by the server and client code, so all features work identically regardless of framework.

Escrow-Free Bridge

All bridge files are included in escrow_ignore — you can freely edit them to customize framework integration:

escrow_ignore {
    'config/config.lua',
    'bridge/**/*',
    'locales/**/*',
}
Last updated 1 month ago