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.
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 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.
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'.
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.
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.
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:
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:
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'.