Jixryo Bank

Accounts and statements, bank counters, ATMs with cards and PINs, shared, business and gang accounts with rights by grade, the Bank app on lb-phone and the tablet, a staff desk, a card terminal for other scripts, and the banking exports other scripts expect.

Version 2.1.0 Updated See it on its script page

On this page

Jixryo Bank is the suite's bank: accounts and statements, bank counters, ATMs with cards and PINs, shared accounts, business and gang accounts with rights by grade and phone access, the Bank app on lb-phone and the Jixryo Tablet, and the staff desk. It also answers the banking exports other scripts call (fd_banking, Renewed-Banking, qb-banking, qb-management), so police fines, EMS bills, dealership sales and society paychecks land in the right account. This is phase 2: bills and invoices (phase 3) and loans and debt (phase 4) are built into the pages already but stay hidden until they are switched on.

What players get

  • Checking. Every character has one, opened by itself. Its money is their qbx bank money, so everything that pays or charges the bank (shops, garages, paychecks, fines) shows on its statement too, and qbx's paychecks show as paychecks.
  • More accounts, opened at a counter: Savings (one, 0.5% a week on up to $250,000), personal accounts and shared accounts (up to 6 people). The owner sets each person's rights (see, deposit, take cash, send, pay bills, carry a card, manage people, use it on the phone) and a daily limit; people are invited by State ID and join from their phone or a counter. Four accounts besides Checking, closed once they are empty.
  • Business and gang accounts, one per qbx job and gang. The boss grade has every right; the boss sets every other grade's rights and daily limit, and gives or takes single rights from one person. "Use it on the phone" decides whether the business shows in their Bank app, and starts off below the boss.
  • Counters at every branch (third eye on the counter): deposit and withdraw cash, send money to a person or an account number, statements to Mail, open and close accounts, cards, people and rights.
  • ATMs (every ATM prop): any card in your pockets plus its PIN; cash out in $10 notes up to the card's daily limit ($5,000), or cash in. Nothing about the account shows before the PIN. Three wrong PINs block the card and tell its holder.
  • Cards are items, made at a counter with a 4-digit PIN you pick (the first one is free, then $50; 1234, 0000 and the like are refused). Freeze one from the phone the moment it goes missing; report it lost for good and get a new one at a branch, and the old one stops working.
  • The Bank app on lb-phone and on the Jixryo Tablet: balances and statements, send money, ask someone for money (they pay or decline from their phone), invites, cards (freeze, lost), a business's money and who may see it on their phone. No cash moves on the phone.
  • The card terminal. Another script, a restaurant's register or kiosk, charges your card: the bank's terminal comes up on your own screen with the street still in view. You pick a card from your pockets and type its PIN there; the script never sees either. A refused card (short, over its limit, frozen) goes back to the cards so another can be used. You have 60 seconds and must stay where the payment started.
  • Phone alerts: money in, a card of yours used (ATM cash or a card payment), wrong PINs. Each can be turned off on the Cards tab.
  • Checking's daily limit for cash out and sends is $25,000; moving money between your own accounts never counts.

What staff get

  • The staff desk (/bankdesk, ACE jixryo.bank, group.admin or group.god): search any account by owner, State ID, number or job; see its statement; freeze or unfreeze it; add or take money. Every move needs a reason of four characters or more and goes to the bank's own staff log and the suite's audit log through Jixryo Core, with its Discord webhook when one is set. Alerts flag large cash in ($100,000 by one person within two hours), blocked cards and people pushing past their daily limits.
  • A frozen checking refuses money out from every script, not just the bank, through qbx_core's money hooks. Staff moves bypass the freeze.
  • Business and gang accounts make themselves for every qbx job and gang at start, and for a job or gang added while the server runs. The treasury is the account of the government job, shown as "City of Los Santos".
  • The old banks' names answer from here. Scripts written for fd_banking, Renewed-Banking, qb-banking or qb-management find this bank under those names and their money lands in the right job or gang account, titled by the resource that moved it (a qbx_police charge shows as "Police fine").
  • Moving over from fd_banking with one console command that shows its plan first.

Install

  1. What it replaces. fd_banking, fd_banking_app, Renewed-Banking, qb-banking and qb-management. Stop and delete any of them that are there: this resource answers under all four names, and two at once fight over every export.

  2. Order. Start it after its dependencies (ox_lib, oxmysql, qbx_core, ox_inventory, ox_target, Jixryo Core). lb-phone and Jixryo Tablet are optional: no app on a device that is not running.

    server.cfg
    ensure ox_lib
    ensure oxmysql
    ensure qbx_core
    ensure ox_inventory
    ensure ox_target
    ensure lb-phone
    ensure jixryo_core
    ensure jixryo_tablet
    ensure jixryo_bank
  3. Items. The card is ox_inventory's own Fleeca Card (mastercard, already in ox_inventory/data/items.lua). To use another item, set Config.cards.item.

  4. Staff. add_ace group.admin jixryo.bank allow, or give jixryo.bank to a bank staff group.

  5. Database. The tables (jixryo_bank_accounts, _members, _grades, _overrides, _tx, _cards, _pending, _requests, _alerts, _staff_log, _prefs, _meta) are made on the first start, as one Jixryo Core migration step, with an account for every qbx job and gang.

  6. Branches. Config.branches holds the vanilla teller spots. Check each against your bank MLOs in game and move it onto the counter.

  7. Coming from fd_banking. With fd_banking stopped, type bankimport in the server console: it shows what it would move (business and gang money into the matching job and gang accounts, shared accounts with their people and rights) and what it cannot place. bankimport run does it, once; personal money needs no import, since it is the qbx bank money.

  8. After updating this resource, restart the server, not just the resource: other scripts keep the exports they found when they started.

How other scripts' calls behave

  • It answers under five names. Its own exports live under jixryo_bank, and the manifest provides fd_banking, Renewed-Banking, qb-banking and qb-management, so those scripts' export calls and GetResourceState checks find this bank. Its version is 2.x on purpose: jg scripts read qb-banking's version and need 2 or later.
  • Renewed-Banking: getAccountMoney, addAccountMoney, removeAccountMoney, handleTransaction, getAccountTransactions, GetJobAccount, CreateJobAccount; addAccountMember, removeAccountMember and changeAccountName answer false.
  • qb-banking (v2): GetAccount, GetAccountBalance, AddMoney, RemoveMoney, CreateJobAccount, CreateGangAccount.
  • qb-management: GetAccount, GetGangAccount, AddMoney, AddGangMoney, RemoveMoney, RemoveGangMoney.
  • fd_banking: GetAccount, GetGangAccount, AddMoney, AddGangMoney, RemoveMoney, RemoveGangMoney, getBusinessAccount, getPersonalAccount; issueInvoice, payInvoice and doTransfer answer false until phase 3.
  • All of them work on the same business and gang accounts by job or gang name, without waiting. Taking money answers false when the account is frozen or short. A name that is no qbx job or gang prints a warning once instead of losing the money quietly, and an account is made for a job or gang added while the server runs. Config.sources names the statement line by the resource that moved the money.
  • qbx_core. Checking mirrors the character's qbx bank money through QBCore:Server:OnMoneyChange, paychecks are named through qbx_core:server:onPaycheck, new jobs and gangs get accounts on qbx_core:server:onJobUpdate and onGangUpdate, and a frozen checking refuses money out through qbx_core's removeMoney and setMoney hooks.
  • Devices. The Bank app is added to lb-phone (AddCustomApp) and to the tablet (AddApp), and told to refresh when something changes. Phone notifications and mailed statements go through Jixryo Core's phone module.
  • Jixryo Computers reads this bank's statement tables for the Account app and runs payroll through GetGroupBalance and RemoveGroupMoney. Jixryo Restaurants charges cards through the terminal.

Its own API

Server exports:

ExportWhat it does
GetGroupBalance(name)A job's or gang's balance.
AddGroupMoney(name, amount, reason)Pays into a job's or gang's account; true or false.
RemoveGroupMoney(name, amount, reason)Takes from it; false when frozen or short.
Charge(src, { to, amount, title, sub?, at?, range? })Puts the card terminal on a player's screen and waits for them; call it from a thread. to is the job or gang paid, amount whole dollars, title and sub what shows on the terminal and the statements, at and range where they must stay. Answers { ok = true, last4, account }, or { ok = false, error } when they decline, run out of time, walk away or leave the city.
HasCardTerminal()true while the bank is open for it.

Events:

EventDirectionWhat it carries
jixryo_bank:server:readyserverthe bank has loaded
jixryo_bank:client:changedto one playersomething changed on an account they see; open pages fetch the picture again
jixryo_bank:client:terminalOpened, jixryo_bank:client:terminalClosedlocal, on the payer's gamethe card terminal came on or went, so a script can step aside and come back

The pages' own calls (the counter, the ATM, the desk, the app and the terminal) go through their own server callbacks; they are not an API, and the server checks every one.

Commands and keybinds

CommandWhoWhat it does
/bankdeskstaff with the ACEOpens the staff desk
bankimport, bankimport run, bankimport run forcethe server consoleShows the fd_banking import plan, runs it once, or runs it again (adding the money again)
Third eye on a branch countereveryoneOpens the counter
Third eye on an ATMeveryoneOpens the ATM

There are no keybinds.

Configuration

config.lua:

KeyDefaultWhat it does
featuresbills, loans, invoices, menu, charge off; requests onWhat this bank does yet
counterRange, atmRange3.0, 2.5How close a player must stand, checked on the server for every action
branches8: six Fleeca (Legion Square, Hawick, Burton, Del Perro, Banham Canyon, Route 68), Pacific Standard (Vinewood), Blaine County Savings (Paleto Bay)Each counter's spot, brand and place
blipson, sprite 108, colour 2, scale 0.7Map blips for the branches
atm4 ATM models, brand Fleeca, dailyLimit 5000Which props are ATMs, the brand on their screen, a card's daily ATM cash
cardsitem mastercard, firstFree true, fee 50, pinTries 3The card item, the first card free, the fee, wrong PINs before a block
terminaltimeout 60, range 5.0The card terminal: seconds the payer has, how far they may move
limitsmaxMove 1,000,000, checkingPerDay 25,000, lookups 0.25The most one action moves, checking's daily cash out and sends, seconds between lookups
accountsmaxOwned 4; savings rate 0.5, cap 250,000, everyDays 7Accounts one character may own, savings interest
sharedmax 6, rights see and deposit, limit 200People per shared account, what an invited person starts with
businessskip unemployed and none; bankAuthRights see, deposit, withdraw, send, bills, invoice, menu; otherRights deposit, invoice; defaultLimit 5000Jobs and gangs without an account, the rights grades start with
treasuryjob government, name City of Los SantosThe job whose account is the city's
staffACEs jixryo.bank, group.admin, group.god; command bankdeskThe staff desk
alertscashIn 100,000, window 2 hours, keepDays 7When the desk flags cash in, and how long alerts are kept
statementlines 60, days 30Lines shown per account, days in a mailed statement
phoneidentifier jixryo_bank, name Bank, installed for everyone, on lb-phone and on the tabletThe Bank app
sourcesqbx_core Payroll, qbx_police Police fine, tk_ambulancejob Medical bill, jg-dealerships Dealership, jg-mechanic Mechanic shop, jg-advancedgarages Garage, rcore_casino Casino, lb-phone Phone, lb-tablet TabletHow other scripts' money shows on statements

Security

  • Every call is checked on the server, from source: who is asking, their rights on that account right now, the amount (whole dollars, at most limits.maxMove), the balance, daily limits and, at a counter or an ATM, that they are still standing there. Each place allows its own list of actions and refuses anything else; walking off ends the session.
  • One money action per player at a time, with cooldowns. Balances change in memory in one step before the database writes, which are relative and go in one transaction, so nothing is spent twice.
  • A frozen checking refuses money out from every script, through qbx_core's money hooks, not just the bank.
  • PINs are kept only as salted hashes. A card at an ATM or a card terminal acts as its holder, with the holder's rights and limits, and the holder is told when it is used. The ATM and the terminal share one PIN check: wrong ones are counted and told to the holder, the last one blocks the card and flags the desk.
  • The card terminal. The PIN is typed on the bank's own page, and the script charging never sees it. One payment per player at a time, under the same lock as the counter and the ATM. The business sees the card's last four digits, never whose card it is.
  • The phone only sees and uses accounts with "use it on the phone", and never moves cash.
  • Rights are asked again on every action, never remembered from when a page opened. Nobody changes their own rights.
  • Money sent to someone not in the city waits in a pending table and lands when they next load in, paid once whatever else runs.
  • Known limit. The server cannot know where every ATM prop stands, so it checks the player is next to the spot their game reports. A cheater could open an ATM anywhere; they would still need a card and its PIN, and it only moves money between that account and their own pockets.

Tests

dev-tools/luarun/tests/jixryo_bank.lua runs the server on a real database with Jixryo Core's real validate and db modules. Run on 2026-10-31: 7 passed, 0 failed.

They cover the card terminal: a card paying a business on the payer's own screen with a line on both statements; wrong PINs counted as at an ATM, the holder told, the last one blocking the card, another card still paying; every refusal before it opens (no card, no such business, a bad amount, already paying); a card refused after its PIN going back to the cards (short, over the daily limit, frozen, its account frozen); every way it ends unpaid (declined, timed out, walked away, left the city) with nothing moved; someone else's card working only with its PIN and as its holder; and the ATM's PIN check, unchanged by the shared check.

bash
cd dev-tools/luarun
node run.mjs ../../jixryo_scripts/jixryo_bank tests/jixryo_bank.lua

Check it in game

  1. Walk up to a branch counter (third eye): the page opens on the bank's dark backdrop with your Checking and its statement. Deposit cash, then withdraw it: both lines show.
  2. Open a Savings account and a shared account; invite someone by State ID. They accept from their phone and show on the People tab; set their rights and daily limit.
  3. Make a card with a PIN. At any ATM, put the card in, type the PIN, take $50 out in $10 notes. Type three wrong PINs on another try: the card is blocked and your phone says so.
  4. In the Bank app: send money to a State ID, ask someone for money (they pay or decline from their phone), freeze a card.
  5. As a business boss: the business account shows the grades and staff; give a grade "use it on the phone" and the business shows in that employee's app.
  6. At a restaurant register (Jixryo Restaurants): pay by card. The terminal comes up on your own screen, the PIN goes in there, and both statements get their line.
  7. As staff: /bankdesk, find an account, freeze it with a reason. Shops refuse that character's bank money until it is unfrozen. The staff log and the audit log have the line.
Next step

Ready to look around?

Browse the suite, or paste your server.cfg and see what each script does to your server.