Docs

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 builder

Installation

  1. Put the x3d_banking folder in resources/. Do not rename the folder.
  2. Run install.sql to create the x3d_banking_history table (safe to re-run).
  3. 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.ATMs still 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
View product page