
JC Banking
Every job, robbery, shop and boss menu on your server calls exports['qb-banking']:AddMoney(...) .
- Frameworks
- ESXQBQBOX
- Inventories
- ox_inventoryqb-inventoryqs-inventorycodem-inventoryorigen_inventory
- Targets
- ox_targetqb-targetqtarget
- Requires
- ox_liboxmysql
- Languages
- ENES
- Source
- Escrow
- Updated
- 15 days ago
The bank you can actually switch to
Every job, robbery, shop and boss menu on your server calls exports['qb-banking']:AddMoney(...). That is why nobody changes their banking script: the moment you remove qb-banking, half the server stops paying out.
JC Banking answers to that name. Install it, and your existing scripts keep working with nothing to edit on their side.
The compatibility layer
It answers to qb-banking, qb-management, esx_society and Renewed-Banking, under their names and under its own. A script calling any of those exports reaches JC Banking without knowing it changed.
Two things make that work and both are in the box: a provide declaration for scripts that check dependencies, and a registration of the export events themselves, because an export call is really the event built from the name the caller typed. It's the same trick ox_target uses to answer as qtarget.
The names are a config list, so you add one or remove one depending on what else your server actually runs. The README is explicit about when not to list a name: if another resource genuinely owns that money, both would answer the same event.
Society and boss accounts
Company money can live in two places and you pick which. Stored here, in which case JC Banking is the banking resource and everything else reaches the money through those compatibility exports. Or read from your existing resource, qb-banking then qb-management on QB and QBox, esx_addonaccount on ESX.
There's an automatic mode that picks the external one when it finds it running, and the console prints which provider it resolved on every start so you're never guessing.
Detection is done by checking the API, not the resource name, which is why the society tab works on servers running qb-management 2.x where the money exports no longer exist.
The society tab can be limited to the job boss, or opened to specific grades per job, with its own withdrawal limit and its own movement log.
Money that cannot duplicate
Money always leaves before it is delivered, and any failed step refunds the player. A framework call that breaks halfway cannot mint money, which is the failure every server owner has been burned by at least once.
The rest is validated server side, every time, because the client is never trusted:
- Opening the panel creates a session, and the server reads the player's coordinates itself to confirm they're really standing at a configured bank
- Every operation re-checks that session, how far the player has walked since it opened, a cooldown between operations and a hard cap of operations per minute
- ATM props are map objects and can't be proven server side, which is exactly why ATMs get their own lower limits instead of being trusted
Bank card and PIN
An optional card item, required at ATMs, at branches, or not at all. Players block and unblock their own card from the panel, and a blocked card is refused at ATMs while the branch still works. A replacement is bought at a branch and unblocks the card with it.
The PIN is created by the player on a keypad the first time it's asked for. It is hashed by the database, salted with the player identifier, and never sent to the client, so a database dump does not expose it. Wrong attempts are counted and the account locks for a configurable number of minutes.
Everything about the card and the PIN is optional and off or ATM-only by default, so you decide how much friction your server wants.
The panel
Five tabs: overview, transfer, history, society and card.
Each character gets an account number in a format you set. Transfers go by account number, with a concept line, recent contacts and an optional commission. The history is searchable, filterable by income or expenses, and paginated, and the overview shows the balance, the cash on hand and the income and expenses of the last 30 days.
ATMs run the same panel with their own limits: a lower withdrawal cap, and deposits and transfers you allow or block independently.
The NUI is Vue 3 with no build step. Currency symbol, position and thousands separator are config values, as are the quick amount buttons.
Where players use it
Eight bank locations ship configured, the six Fleeca branches plus Blaine County Savings and Pacific Standard, with map blips. ATMs are detected by prop model.
ox_target and qb-target are auto-detected and recommended. Without either, banks and ATMs fall back to a marker and [E], and the console prints which target it found on every start.
Mobile banking through a command or keybind is there and disabled by default, so the bank means going to the bank unless you decide otherwise.
Compatibility
- Frameworks: QBCore, QBox and ESX Legacy, detected automatically
- Inventories: ox_inventory, qb-inventory, qs-inventory, codem-inventory and origen_inventory, for the card item
- Targets: ox_target and qb-target, with a marker fallback when neither is installed
- Required: oxmysql and ox_lib
- Database: MySQL 5.5.5+ or MariaDB, for the hashed PIN
- Languages: English and Spanish included
Setup
- Drop the folder into your resources
ensure jc-bankingin your server.cfg, after your framework, oxmysql, ox_lib and your target- Start the server
The SQL tables install themselves on the first start, and an older install is migrated in place: missing columns are added and nothing is dropped. The .sql file is in the box if you'd rather run it by hand.
What stays open
The resource is escrow protected, with everything worth editing left open:
config/banking.lua, the whole configuration: limits, fees, ATM rules, card and PIN, locations, blips, society provider and compatibility names, security and the webhooklocales/, every string the script printsclient/framework/,client/target/,server/framework/andserver/inventory/, every bridge, so you can adapt it to a framework, target or inventory that isn't on the listserver/sv_society.lua, the society provider itself
Plus exports on both sides to read an account number, look one up, read a balance or write a transaction from your own scripts.
Support
Discord: https://discord.com/invite/qvHK4E6Pya
Showcase: https://youtu.be/0xq1firB79U
Not sure it fits your setup? Ask in the Discord before buying, I answer everything.
Terms
- Digital product. No refunds once the download has been delivered.
- One purchase covers one server.
- Redistributing, reselling or leaking the resource is not allowed.
- Support covers the script itself, not custom edits to your server.


