Configuration
wasabi_banking is configured through shared, client, and server config files.
tip
After editing bank locations, blips, or ATM models, restart the resource and test in-game. Interaction zones and markers are easiest to validate on a live client.
config/shared/config.luaβ
Shared settings used by both client and server.
Config = {}
-- Debug mode: verbose lib.print.debug output + /openbank dev command
Config.Debug = false
-- Currency
Config.Currency = '$'
Config.CurrencyOnRight = false
-- IBAN
Config.AccountIbanPrefix = 'WSB-'
-- Cards
Config.MaxCards = 3
Config.MaxPinAttempts = 3
Config.CardPrice = 1000
Config.PinChangePrice = 100
Config.IBANChangePrice = 250
Config.ResetCardDailyLimit = 24
Config.CardItem = 'bankcard'
Config.CardExpireMonths = 2
-- When true, using another person's bankcard *item* near an ATM opens the PIN
-- screen for that card. ATM target ("Use ATM") always only lists your own cards.
Config.AllowStolenCards = true
Config.EnableCardAnimations = true
Config.CardsAnimationType = 'vertical'
Config.CardsTypeAndLimit = {
['default'] = { limit = 5000, label = 'Default Card' },
['gold'] = { limit = 10000, label = 'Gold Card' },
['express'] = { limit = 50000, label = 'Express Card' },
}
-- Savings / shared
Config.MaxMoneyOnSavingsAccount = 100000
Config.MaxSharedAccounts = 3
-- Default blip appearance. Each Config.Banks entry can override these.
Config.BlipSprite = 431
Config.BlipColor = 2
Config.BlipScale = 0.8
Config.ATMModels = { `prop_fleeca_atm`, `prop_atm_01`, `prop_atm_02`, `prop_atm_03` }
Config.PedModels = { `ig_bankman`, `u_m_m_bankman` }
-- Quick-amount presets on the ATM withdraw/deposit screen.
Config.ATMQuickAmounts = { 20, 50, 100, 200, 500, 1000 }
Shared optionsβ
| Option | Type | Description |
|---|---|---|
Config.Debug | boolean | Enables verbose debug logging and the /openbank client command. |
Config.Currency | string | Currency symbol shown in the UI. |
Config.CurrencyOnRight | boolean | Places the currency symbol after the amount when true. |
Config.AccountIbanPrefix | string | Prefix applied to new personal account IBANs. |
Config.MaxCards | number | Maximum cards per account. |
Config.MaxPinAttempts | number | Failed PIN attempts before a card is blocked. |
Config.CardPrice | number | Cost to create a card. |
Config.PinChangePrice | number | Cost to change a card PIN. |
Config.IBANChangePrice | number | Cost to change an account IBAN. |
Config.ResetCardDailyLimit | number | Hours between daily card spend resets. |
Config.CardItem | string | Inventory item name for physical bank cards. |
Config.CardExpireMonths | number | Card lifetime in months. |
Config.AllowStolenCards | boolean | Allow using another player's bankcard item at an ATM. |
Config.EnableCardAnimations | boolean | Enables card-insert and card-flip animations. |
Config.CardsAnimationType | string | 'vertical' or 'horizontal' insert animation. |
Config.CardsTypeAndLimit | table | Card tiers with ATM daily limit and display label. |
Config.MaxMoneyOnSavingsAccount | number | Maximum savings balance. |
Config.MaxSharedAccounts | number | Maximum shared accounts a player can own. |
Config.ATMModels | table | Prop hashes treated as ATMs. |
Config.PedModels | table | Banker ped models for interaction. |
Config.ATMQuickAmounts | table | Preset ATM withdraw/deposit amounts. |
Bank locationsβ
Config.Banks is keyed by bank name. Each location supports:
| Field | Description |
|---|---|
blip.enabled | Create a map blip when true/omitted; skip when false. |
blip.id | Blip sprite. Overrides Config.BlipSprite. |
blip.color | Blip color. Overrides Config.BlipColor. |
blip.scale | Blip scale. Overrides Config.BlipScale. |
blip.label | Optional blip name. Defaults to the bank name key. |
coords | Bank location as vector4. |
interactionCoords | One or more teller/interaction points as vector4. |
Example:
Config.Banks = {
['Pacific Bank'] = {
{
blip = {
enabled = true,
id = 431,
color = 2,
scale = 0.8,
},
coords = vector4(247.32, 222.77, 106.29, 340.95),
interactionCoords = {
vector4(247.97, 224.72, 106.29, 162.74),
},
},
},
}
config/client/config.luaβ
Client-facing interact, progress, and notification settings.
-- Interaction backend.
-- 'auto' | 'ox_target' | 'qb-target' | 'sleepless_interact' | 'drawtext'
Config.Interact = 'auto'
Config.InteractDistance = 2.0
Config.DrawText = {
maxDistance = 8.0,
sprite = {
dict = 'shared',
texture = 'emptydot_32',
color = { 41, 177, 129, 255 },
},
}
-- Progress bar style for the progress bridge: 'bar' | 'circle'
Config.ProgressStyle = 'bar'
-- 'auto' | 'wasabi_notify' | 'wasabi_uikit' | 'lation_ui' | 'ox_lib'
Config.NotificationSystem = 'auto'
Client optionsβ
| Option | Type | Description |
|---|---|---|
Config.Interact | string | Interact backend. 'auto' prefers ox_target β qb-target β sleepless_interact, then drawtext. |
Config.InteractDistance | number | Default interact distance / zone radius in meters. |
Config.DrawText | table | Drawtext fallback tuning (max distance and sprite). |
Config.ProgressStyle | string | 'bar' or 'circle' progress UI. |
Config.NotificationSystem | string | Force a notify backend, or 'auto' to detect one. |
config/server/config.luaβ
Server-side logging, society, inventory, loans, admin, and migration settings.
Config.Logger = {
enabled = true,
type = 'discord', -- 'discord' | 'ox'
webhooks = {
['transactions'] = '',
['cards'] = '',
['savings'] = '',
['loans'] = '',
['shared'] = '',
['admin'] = '',
['default'] = '',
},
}
Config.AutomaticAddDatabaseTables = true
Config.LegacyImport = false
Config.ImportFromFrameworkBanking = false
Config.MaxSavedTransactions = 50
-- 'auto' | 'wasabi' | 'qb-management' | 'qbx_management' |
-- 'qb-banking' | 'esx_addonaccount' | 'bank_accounts_new' | 'manual'
Config.SocietyBackend = 'auto'
Config.SocietyTable = 'addon_account_data' -- only when SocietyBackend = 'manual'
Config.JobNameColumn = 'account_name'
Config.AmountColumn = 'money'
Config.CompatExports = {
['qb-management'] = true,
['Renewed-Banking'] = true,
['okokBanking'] = true,
}
-- 'auto' | 'ox_inventory' | 'qb-inventory' | 'ps-inventory'
-- | 'codem-inventory' | 'jaksam_inventory' | 'tgiann-inventory'
Config.InventorySystem = 'auto'
Config.BankWorkingHours = {
disableBankAtNight = true,
openHour = 6,
closeHour = 22,
}
Config.InterestRate = 2 -- percent
Config.InterestRatePeriod = 24 -- hours
Loggerβ
| Field | Description |
|---|---|
enabled | Turns audit logging on or off. |
type | 'discord' posts webhook embeds; 'ox' forwards to lib.logger. |
webhooks | Per-bucket Discord webhook URLs: transactions, cards, savings, loans, shared, admin, and default. |
Society and compatibilityβ
| Option | Description |
|---|---|
Config.SocietyBackend | Where society/job money lives. 'auto' uses esx_addonaccount on ESX and owned wasabi balances on QB/QBX. |
Config.SocietyTable / JobNameColumn / AmountColumn | Manual table mapping when SocietyBackend = 'manual'. |
Config.CompatExports | Answers export calls for replaced resources. See Migration. |
Config.InventorySystem | Inventory backend for card/receipt items. 'auto' detects a supported inventory. |
Config.LegacyImport | Import Wasabi Banking v1 tables. |
Config.ImportFromFrameworkBanking | Import qb-banking / Renewed-Banking / okokBanking tables. |
Loansβ
Config.Loans = {
maxCreditScore = 1000,
paymentInterval = 1, -- hours
paymentOnlyWhenOffline = false,
creditScoreIncrease = 1,
creditScoreDecrease = 5,
creditScoreDecreaseAfterCancelLoan = 100,
maxFailedPayments = 5,
creditScoreIncreaseAfterFinishingLoan = 50,
creditScoreIncreaseAfterFinishingLoanEarly = 75,
creditScores = {
[0] = { value = 0, label = 'Very Poor' },
[1] = { value = 150, label = 'Poor' },
[3] = { value = 250, label = 'Normal' },
[4] = { value = 500, label = 'Good' },
[5] = { value = 750, label = 'Excellent' },
[6] = { value = 1000, label = 'Perfect' },
},
loans = {
[1] = { totalamount = 5000, days = 30, interest = 5, minimumcreditscore = 0, label = 'Standard Loan' },
[2] = { totalamount = 10000, days = 45, interest = 10, minimumcreditscore = 400, label = 'Premium Loan' },
[3] = { totalamount = 20000, days = 60, interest = 15, minimumcreditscore = 600, label = 'Diamond Loan' },
[4] = { totalamount = 50000, days = 80, interest = 20, minimumcreditscore = 750, label = 'Platinum Loan' },
},
}
| Field | Description |
|---|---|
maxCreditScore | Upper bound for credit score. |
paymentInterval | Hours between scheduled loan payments. |
paymentOnlyWhenOffline | When true, only offline borrowers are auto-debited. |
maxFailedPayments | Consecutive failed payments before a loan is marked defaulted. 0 disables defaulting. |
creditScores | Score brackets with threshold value and display label. |
loans | Loan products with amount, term, interest, minimum credit score, and label. |
Admin panelβ
Config.BankManager = {
commandBankMenu = 'bankmenu',
jobnames = {
['police'] = { grades = { 3, 4 } },
['banker'] = { grades = { 3, 4 } },
},
allowFreeze = true,
allowViewTransactions = true,
freezeableTypes = {
bank = true,
savings = true,
shared = true,
society = true,
},
}
| Field | Description |
|---|---|
commandBankMenu | Chat command that opens the admin banking panel. |
jobnames | Job name β allowed grades for admin access. |
allowFreeze | Enables freeze/unfreeze actions. |
allowViewTransactions | Enables filtered transaction lookup. |
freezeableTypes | Which account types may be frozen. |
Society access gradesβ
Config.AllowedSocietiesAndRanks = {
['police'] = { grades = { 3, 4 } },
['ambulance'] = { grades = { 3, 4 } },
['mechanic'] = { grades = { 3, 4 } },
['taxi'] = { grades = { 3, 4 } },
['banker'] = { grades = { 3, 4 } },
}
Only listed jobs/grades can open society banking for that job account.
Localesβ
Locale files live in:
locales/*.json
The resource currently ships en.json. UI and notification strings are loaded from these files.