Docs
All settings:
Fitting your server:
View product page
X3D Banking
Free ESX bank and ATM: deposit, withdraw, transfer by player ID, transaction history, every ATM on the map, every action checked on the server.
Buy / Get freeConfig builderInstallation
- Put the
x3d_bankingfolder inresources/. Do not rename the folder. - Run
install.sqlto create thex3d_banking_historytable (safe to re-run). - Add to
server.cfg:
ensure oxmysql
ensure es_extended # optional -- runs standalone without it (see Config.Framework)
ensure x3d_banking
Run one bank script only: stop esx_atm, esx_banking or any other ATM script, or players get two prompts at every ATM.
Requirements
| Resource | Required | Used for |
|---|---|---|
es_extended |
no | ESX Legacy, the money and bank accounts -- without it the script runs standalone, but the bank account needs wiring yourself (see Config.Framework) |
oxmysql |
yes | transaction history |
All settings: config/config.lua
General
| Setting | Default | Meaning |
|---|---|---|
Config.Framework |
'auto' |
'auto' (ESX if present, else standalone) | 'esx' | 'standalone' -- standalone has no bank account of its own; wire Framework.GetMoney/AddMoney/RemoveMoney('bank', ...) yourself (addons/framework/server.lua) or deposit/withdraw/transfer will not actually work |
Config.Locale |
'th' |
'th' or 'en' |
Config.Debug |
false |
true = adds the /atm and /bank test commands |
Config.DrawDistance |
15.0 |
Marker distance |
Config.InteractRadius |
1.5 |
[E] distance |
Config.ServerRadius |
5.0 |
How far from an ATM or bank the server still accepts an action |
Config.Blur |
true |
Blur the game behind the panel |
Config.UseMarkers / MarkerType / MarkerSize / MarkerColor |
on, 27 |
Ground marker |
Blips
| Setting | Default | Meaning |
|---|---|---|
Config.ShowBlips |
true |
Blips for banks and ATMs |
Config.BlipRadius |
100.0 |
ATM blips appear within this distance; bank blips always show |
Config.ATMBlip / Config.BankBlip |
sprite 108 |
sprite, color, scale, name = { th, en } |
Limits
| Setting | Default | Meaning |
|---|---|---|
Config.MinTransaction |
1 |
Smallest amount |
Config.MaxWithdraw / MaxDeposit |
100000000 |
Largest withdrawal / deposit |
Config.MaxTransfer |
10000000 |
Largest transfer |
Config.QuickWithdrawAmounts |
500 … 500,000 | Quick withdraw buttons |
Config.HistoryLimit |
20 |
Rows shown in history |
Transfers
| Setting | Default | Meaning |
|---|---|---|
Config.TransferByPhone |
false |
Transfer by phone number -- off by default; addons/phone/server.lua is an empty hook, wire it to your own phone resource |
Config.TransferByServerId |
true |
Transfer by server ID; can be on together with TransferByPhone (the box takes either, phone checked first); both off = no Transfer tab |
Config.TransferShowName |
true |
false = no names anywhere (recipient line, confirm box, history, recipient notification); players see only the typed ID or number. The database still stores real names for admins |
Config.TransferAtATM |
true |
false = transfers only at a bank |
A phone number is checked first, then a server ID. The recipient must be online, and the confirm window shows their name.
Locations and admins
| Setting | Meaning |
|---|---|
Config.AtmModels |
ATM prop models; every one on the map opens the ATM |
Config.ATMs |
ATM coordinates for blips and the server distance check |
Config.Banks |
Bank branches: coords, name = { th, en } |
Config.AdminGroups |
Groups allowed to use /atmscan |
Config.AtmScanCommand |
atmscan: stand near ATMs and type it to add the ones missing from Config.ATMs (saved in the resource's KVP) |
An ATM prop that is not in
Config.ATMsstill opens the panel, but the server rejects the action until an admin adds it with/atmscan. The default list covers the common ATMs.
Fitting your server: addons/
| File | Functions | Default |
|---|---|---|
addons/framework/server.lua / client.lua |
The framework bridge (Framework.*) -- identical across every X3D product |
ESX if present, else standalone |
addons/phone/server.lua |
Phone.FindIdentifier(number), Phone.GetNumber(identifier), Phone.NotifyTransfer(target, data) |
empty hooks (return nil/no-op) -- wire your own phone |
addons/notify/client.lua |
Notify(message, kind) |
esx_notify, then ox_lib, then the native GTA feed |
addons/prompt/client.lua |
Prompt.Draw3D, Prompt.SetBlipName, Prompt.IsInteractPressed |
3D text, [E] |
addons/locale/shared.lua |
T(th, en) |
follows Config.Locale |
addons/text3d/client.lua |
Text3D.* floating 3D labels |
the standard X3D labels (replace the functions to use your own label system) |
For other scripts
-- client
exports['x3d_banking']:OpenBank('atm') -- or ('bank', 'Branch name'), e.g. from ox_target
exports['x3d_banking']:CloseBank()
exports['x3d_banking']:IsOpen() --> boolean
AddEventHandler('x3d_banking:uiState', function(open) end) -- hide your HUD while the panel is open
The server still checks the player's distance to an ATM or bank, so OpenBank cannot be used to bank from anywhere.
Troubleshooting
| Symptom | Cause / fix |
|---|---|
| "You must be at an ATM or a bank" at an ATM | That ATM is not in Config.ATMs; an admin stands next to it and types /atmscan |
| History stays empty | install.sql was not run (the server console says so on start) |
Turned on Config.TransferByPhone but transfers still fail |
addons/phone/server.lua is an empty hook by design; wire its 3 functions to your actual phone resource first |
| Standalone: deposit/withdraw/transfer don't really work | Standalone has no bank account built in; wire Framework.GetMoney/AddMoney/RemoveMoney('bank', ...) in addons/framework/server.lua yourself |
| Thai shows as boxes | Another resource must stream the font4thai font; switch to English or add the font |