How Integrations Work#
Nothing inside Banking Creator knows which framework or inventory you run. Every money movement goes through a few functions — GetMoney, AddMoney, RemoveMoney, AddItem and friends — defined by a small adapter for whatever is installed. Only the matching adapter loads.
Layer | Supported | Without it |
|---|---|---|
Framework |
| Required. |
Inventory |
| No physical cards; set |
Target |
|
|
Housing |
| No Mortgage tab, property desk or house collateral. |
Phone |
| Only on-screen notifications. |
Notifications / help text |
| ox_lib notifications and a drawn 3D label. |
Quests |
| No banking quests. |
Every optional integration degrades silently. A missing resource makes its feature disappear from the interface instead of throwing errors.
Frameworks#
Config.Framework is filled in by looking for es_extended, then qb-core, then qbx_core. Two adapters ship, in server/custom/framework/ and client/custom/framework/: esx.lua and qb.lua.
Framework | Players table | Identifier | Boss |
|---|---|---|---|
ESX |
|
| Grade name |
QBCore / Qbox |
|
|
|
Inventories and the Card Item#
Config.Inventory is the first of these that is running: origen_inventory, qs-inventory, ox_inventory, qb-inventory, core_inventory, ps-inventory, codem-inventory, tgiann-inventory — otherwise standalone. Cards are given through the framework's own item functions, so any inventory that hooks into ESX or QBCore works; origen_inventory has its own adapter in server/custom/inventory/origen.lua.
The card item is creditcard and is registered as usable: using it within reach of an ATM opens the PIN pad. Its metadata holds id, owner, cardNumber, ownerName, valid and cardType; the PIN and the frozen state are always re-read from the database, so editing an item's metadata does not get anyone in.
With ox_inventory you can also use the card from the client side, which checks for a nearby ATM before asking the server:
['creditcard'] = {
label = 'Credit Card',
weight = 10,
stack = false,
close = true,
client = { export = 'qs-banking.CreateCard' },
},Targeting#
Targeting is not detected — set it in config.lua:
Config.UseTarget = 'ox_target' -- 'ox_target', 'qb-target' or 'none'With a target, each branch point and each extra teller becomes a box zone that opens the bank, the boss laptop gets a Boss Menu option, every placed ATM gets a zone, and the models in Config.ATMModels get an ATM option everywhere. Zones are rebuilt whenever a branch changes. Config.Debug = true draws them so you can check their size. Door locks always use E, target or not.
Notifications and Help Text#
On-screen messages use qs-interface when it is started and ox_lib's lib.notify otherwise. The [E] prompts use qs-textui when it is started, and a native 3D label otherwise.
To use another system, edit SendTextMessage(msg, type) and DrawText3D(x, y, z, text, id, key) in client/custom/framework/esx.lua or qb.lua. type is 'inform', 'error' or 'success'.
qs-housing#
The largest optional integration. Everything below is off unless Config.RealEstate.enable is on and the resource in Config.RealEstate.resource (default qs-housing) is running. It is checked live, so stopping qs-housing simply hides the Mortgage tab and the property desk.
qs-housing object | Used for |
|---|---|
| House names, prices, entrance (for waypoints), and photos and descriptions when those columns exist. |
| Who owns what, rented houses, and the housing credit paid down in the Loans tab. |
| Refuses a sale to a player already at their house limit. |
| Moves the deed and the keys when a branch buys, sells, seizes or releases a house. |
Residents offer a house to a branch from your housing script with one server event — the bank checks that it is theirs, not rented and not on credit:
-- client side, from the house menu
local buyers = lib.callback.await('qs-banking:getHouseBuyers', false)
-- { { id, label, ownerName, treasury }, ... } branches with the Real Estate licence
TriggerServerEvent('qs-banking:server:offerHouseToBank', houseName, buyers[1].id, askingPrice)qs-smartphone#
Notifications go through exports['qs-smartphone']:sendPhoneNotification, filed under appId and appName. Point Config.PhoneNotifications.resource at a renamed copy of the phone if needed. Which events are sent is covered in Usage.
Config.PhoneNotifications = {
enable = true,
resource = 'qs-smartphone',
appId = 'bank',
appName = 'Bank',
-- onDeposit, onWithdraw, onTransferIn, onTransferOut,
-- onCredit, onInstalment, onStandingOrder, lowBalance
}Discord Logs#
Paste a webhook URL per channel in server/custom/misc/webhooks.lua. Each post is an embed with the player, their server id, the account, the amount and whether it happened at a counter or an ATM.
Webhooks = {
['deposit'] = 'https://discord.com/api/webhooks/...',
['withdraw'] = 'https://discord.com/api/webhooks/...',
['transfer'] = 'https://discord.com/api/webhooks/...',
['create_card'] = 'https://discord.com/api/webhooks/...', -- new cards and branch purchases
}An empty URL turns that channel off, and the start-up warning lists which ones are empty.
Hooks for Your Own Logic#
File | What it is for |
|---|---|
|
|
| With qs-inventory running, gives each player three banking quests — |
| The zones built for each targeting resource: sizes, icons, labels and distances. |
Overriding Detection#
Each layer is picked when the resource starts. Pin one by replacing the detection line in config.lua:
-- Auto, the default
Config.Framework = esxHas and 'esx' or qbHas and 'qb' or qbxHas and 'qbx' or 'esx'
Config.Inventory = detectInventory()
-- Pinned
Config.Framework = 'qb'
Config.Inventory = 'ox_inventory'Worth doing when two candidates run at once, when a resource has been renamed, or on Qbox.
Adding a Framework#
Copy the closest adapter in server/custom/framework/ and client/custom/framework/, change its first line to your Config.Framework value, and implement the same globals:
Side | Must define |
|---|---|
Server |
|
Client |
|
The money account names are 'money' (cash) and 'bank'; map them to your framework's names inside the adapter, as the QBCore one does with cash.
Languages#
41 complete translations ship in locales/: ar, bg, bn, ca, cs, da, de, el, en, es, et, fa, fi, fr, he, hi, hr, hu, id, it, ja, ko, lt, lv, ms, nl, no, pl, pt, ro, ru, sk, sl, sv, sw, th, tr, uk, ur, vi, zh. One language serves the whole server, interface included:
# server.cfg — applies to every Quasar resource that reads it
setr qs:locale "es"or set Config.Language directly. Each file is grouped by where the text appears:
Group | Covers |
|---|---|
| The whole interface — tabs, buttons, panels, the creator, licence names ( |
| On-screen messages. |
| Lines written into a player's history. |
| Phone notifications. |
| The |
Missing or deleted keys fall back to English, so a customised file keeps working after an update. To add a language, drop a new <code>.json next to the others and point the language at it. Money is formatted with Config.Intl — for example locales = 'es-ES' and currency = 'EUR'.



