Docs /Banking/Configuration
v1.0.0

Configuration — foltone_banking

All configuration is done in config.lua at the root of the script.

Language

Config.Locale = "fr" -- "fr" or "en"

Translations are in the locales/ folder. You can add your own language by creating a new file (e.g., locales/de.lua) and setting Config.Locale = "de".

Framework

Config.Framework = "esx" -- "esx", "qbcore" or "qbx"
ValueFramework
"esx"ESX Legacy
"qbcore"QBCore
"qbx"QBX

Interaction Mode

Config.InteractionType = "drawtext" -- "marker", "ox_target", "qb-target", "qtarget", "drawtext"
ValueDescription
"marker"Ground marker at bank/ATM positions
"ox_target"ox_target eye interaction
"qb-target"qb-target eye interaction
"qtarget"qtarget eye interaction
"drawtext"Help text prompt (default)

IBAN & Account Settings

Config.IBANPrefix = "FB"
Config.DefaultPIN = "0000"
Config.StartingBalance = 0
ParameterTypeDescription
IBANPrefixstringPrefix for generated IBANs (e.g., "FB" produces FB123456789)
DefaultPINstringDefault PIN code assigned to new accounts
StartingBalancenumberStarting balance for newly created accounts

ATM Configuration

Config.ATMs = {
    models = {"prop_atm_01", "prop_atm_02", "prop_atm_03", "prop_fleeca_atm"},
    features = {"deposit", "withdraw", "balance", "transfer", "history"},
    distance = 1.5,
    blip = false,
}
ParameterTypeDescription
modelstableList of ATM prop model names to detect
featurestableEnabled features at ATMs
distancenumberInteraction distance (in game units)
blipboolean/tablefalse to disable, or a table with sprite, color, scale, label

Note: Joint accounts, savings, and crypto are not available at ATMs (bank only).

Bank Configuration

Config.Banks = {
    ped = { model = "s_m_m_bankman_01", scenario = "WORLD_HUMAN_CLIPBOARD" },
    features = {"deposit", "withdraw", "balance", "transfer", "history", "card", "pin"},
    distance = 2.0,
    blip = { sprite = 108, color = 2, scale = 0.8, label = "Banque" },
    positions = {
        { pos = vector3(149.0, -1040.0, 29.4), heading = 336.0 },
        { pos = vector3(314.2, -278.7, 54.2), heading = 336.0 },
        { pos = vector3(-351.5, -49.5, 49.0), heading = 336.0 },
        { pos = vector3(-1212.9, -330.1, 37.8), heading = 336.0 },
        { pos = vector3(-2962.5, 482.6, 15.7), heading = 336.0 },
        { pos = vector3(1175.0, 2706.8, 38.1), heading = 336.0 },
    },
}
ParameterTypeDescription
ped.modelstringPED model hash name for the bank clerk
ped.scenariostringPED animation scenario
featurestableEnabled features at banks (superset of ATM features)
distancenumberInteraction distance
bliptable/falseMap blip settings or false to disable
blip.spritenumberBlip sprite ID
blip.colornumberBlip color ID
blip.scalenumberBlip scale
blip.labelstringBlip label on the map
positionstableArray of bank locations with pos (vector3) and heading (number)

Card System

Config.CardSystem = {
    useItem = false,
    cardItem = "bank_card",
    reissuePrice = 500,
    pinChangePrice = 100,
}
ParameterTypeDescription
useItembooleantrue = card is a physical ox_inventory item, false = virtual card
cardItemstringox_inventory item name (only used if useItem = true)
reissuePricenumberCost to reissue a lost/blocked card
pinChangePricenumberCost to change the PIN code

Transfer Settings

Config.Transfer = {
    allowByServerId = true,
    allowByIBAN = true,
    offlineTransfer = true,
}
ParameterTypeDescription
allowByServerIdbooleanAllow transfers by entering the recipient’s server ID
allowByIBANbooleanAllow transfers by entering the recipient’s IBAN
offlineTransferbooleanAllow transfers to offline players (resolved by IBAN)

Transaction History

Config.History = {
    perPage = 50,
}
ParameterTypeDescription
perPagenumberNumber of transactions shown per page in the history view

Theme

Config.theme = {}

The default theme is the Blue Edition (Cyber Street Design System). The theme table is empty by default, which applies the built-in blue color scheme. You can override specific CSS variables by adding key-value pairs to this table.

Note: The design system uses electric blue accents, dark panel backgrounds, and three font families (Bebas Neue, Rajdhani, JetBrains Mono). Do not use gold, orange, purple, or cyan colors.

Notifications

Config.Notification = function(message)
    SetNotificationTextEntry("STRING")
    AddTextComponentString(message)
    DrawNotification(false, false)
end

Replace this function with your preferred notification system (e.g., okokNotify, ox_lib, etc.). This is a client-side function.

Display Text

Config.DisplayText = function(text)
    SetTextComponentFormat("STRING")
    AddTextComponentString(text)
    DisplayHelpTextFromStringLabel(0, 0, 1, -1)
end

Customize the help text display shown when the player is near an interaction point (used with "drawtext" interaction mode).

Society / Job Account Settings

Config.Society = {
    defaultGrades = {"boss", "manager"},
    jobs = {
        -- Per-job override:
        -- ["police"] = { grades = {"boss", "lieutenant"} },
    },
    features = {"balance", "deposit", "withdraw", "transfer", "payroll", "history"},
    positions = {
        -- { job = "police", pos = vector3(440.0, -981.0, 30.7), heading = 0.0 },
    },
    distance = 2.0,
    ped = { model = "s_m_m_accountant_01", scenario = "WORLD_HUMAN_CLIPBOARD" },
    blip = false,
}
ParameterTypeDescription
defaultGradestableList of grade names that have access to society banking by default
jobstablePer-job overrides for allowed grades (key = job name, value = table with grades)
featurestableEnabled society features
positionstablePED positions for society access points, each with job, pos, heading
distancenumberInteraction distance for society PED
ped.modelstringPED model for the society accountant
ped.scenariostringPED animation scenario
bliptable/falseMap blip settings or false to disable

Features

FeatureDescription
"balance"View society account balance
"deposit"Deposit personal cash into society account
"withdraw"Withdraw from society account to personal cash
"transfer"Transfer from society account to a personal account (by server ID or IBAN)
"payroll"Pay an employee from the society account
"history"View society transaction history

Per-Job Grade Override

Config.Society.jobs = {
    ["police"] = { grades = {"boss", "lieutenant"} },
    ["ambulance"] = { grades = {"boss"} },
}

If a job is not listed in jobs, the defaultGrades list is used.

Credit Score

Config.CreditScore = {
    default = 500,
    min = 0,
    max = 1000,
    rewards = {
        deposit = 2,
        withdraw = -1,
        transfer_out = 1,
        transfer_in = 1,
        upgrade = 5,
    },
}
ParameterTypeDescription
defaultnumberStarting credit score for new accounts
minnumberMinimum possible score
maxnumberMaximum possible score
rewardstableScore change per operation type (positive = increase, negative = decrease)

Reward Actions

ActionDefaultDescription
deposit+2Making a deposit
withdraw-1Making a withdrawal
transfer_out+1Sending a transfer
transfer_in+1Receiving a transfer
upgrade+5Upgrading account level

Account Levels

Config.AccountLevels = {
    standard = {
        label = "Standard",
        interestRate = 0.5,
        interestCap = 5000,
        transferMax = 50000,
        taxReduction = 0,
    },
    premium = {
        label = "Premium",
        interestRate = 1.5,
        interestCap = 20000,
        transferMax = 200000,
        taxReduction = 25,
        upgradePrice = 50000,
        minCreditScore = 700,
    },
}

Standard Level

ParameterTypeDescription
labelstringDisplay name
interestRatenumberInterest rate per cron cycle (%)
interestCapnumberMaximum interest earned per reset period
transferMaxnumberMaximum transfer amount
taxReductionnumberTax reduction percentage (0 = none)

Premium Level

ParameterTypeDescription
labelstringDisplay name
interestRatenumberInterest rate per cron cycle (%)
interestCapnumberMaximum interest earned per reset period
transferMaxnumberMaximum transfer amount
taxReductionnumberTax reduction percentage (25% = 25% less tax)
upgradePricenumberCost to upgrade from Standard to Premium
minCreditScorenumberMinimum credit score required to upgrade

Interest System

Config.Interest = {
    interval = 60,
    resetPeriod = 1440,
}
ParameterTypeDescription
intervalnumberMinutes between each interest cron cycle
resetPeriodnumberMinutes before the interest cap resets (1440 = 24 hours)

Interest is only calculated for online players. The actual rate is modulated by the player’s credit score and capped by their account level.

Progressive Taxation

Config.Tax = {
    deposit = {
        { from = 0, to = 10000, rate = 0 },
        { from = 10000, to = 50000, rate = 2 },
        { from = 50000, to = 0, rate = 5 },
    },
    withdraw = {
        { from = 0, to = 10000, rate = 0 },
        { from = 10000, to = 50000, rate = 1 },
        { from = 50000, to = 0, rate = 3 },
    },
    transfer = {
        { from = 0, to = 10000, rate = 0 },
        { from = 10000, to = 50000, rate = 1.5 },
        { from = 50000, to = 0, rate = 4 },
    },
}

Each operation type (deposit, withdraw, transfer) has its own set of tax brackets.

ParameterTypeDescription
fromnumberBracket start amount (inclusive)
tonumberBracket end amount (exclusive). 0 means unlimited (last bracket)
ratenumberTax rate in percent for this bracket

How Brackets Work

Tax is calculated progressively across brackets. For example, a $30,000 deposit with the default config:

  • $0 to $10,000: 0% tax = $0
  • $10,000 to $30,000: 2% tax = $400
  • Total tax: $400

Important: Brackets must be contiguous and ordered. Society operations, joint accounts, savings, and crypto are exempt from taxation. Premium accounts receive a 25% tax reduction.

Joint Account Settings

Config.JointAccount = {
    enabled = true,
    maxMembers = 4,
    maxAccountsPerPlayer = 2,
    transferMax = 50000,
    features = {"deposit", "withdraw", "transfer", "history"},
}
ParameterTypeDescription
enabledbooleanEnable or disable joint accounts
maxMembersnumberMaximum number of members per joint account
maxAccountsPerPlayernumberMaximum joint accounts a player can be part of
transferMaxnumberMaximum transfer amount from a joint account
featurestableEnabled features for joint accounts

Joint accounts are only accessible at banks (not ATMs). They are exempt from taxation, interest, and credit score changes.

Phone Notifications

Config.PhoneNotifications = {
    enabled = true,
    resource = "lb_phone",
    events = {
        transfer_received = true,
        society_payroll_received = true,
        interest_credited = true,
        joint_deposit = true,
        joint_withdraw = true,
        joint_transfer = true,
        joint_member_added = true,
        joint_member_left = true,
    },
    appTitle = "Fleeca Bank",
    appIcon = "bank",
}
ParameterTypeDescription
enabledbooleanEnable or disable phone notifications
resourcestringPhone resource name: "lb_phone", "qs-smartphone", or "gksphone"
eventstableToggle individual notification events on/off
appTitlestringApp name displayed in the phone notification
appIconstringIcon name displayed in the phone notification

Notification Events

EventDescription
transfer_receivedWhen the player receives a personal transfer
society_payroll_receivedWhen the player receives a payroll payment
interest_creditedWhen interest is credited to the account
joint_depositWhen a member deposits into a shared joint account
joint_withdrawWhen a member withdraws from a shared joint account
joint_transferWhen a member makes a transfer from a shared joint account
joint_member_addedWhen a new member is added to a joint account
joint_member_leftWhen a member leaves a joint account

Phone notifications are only sent to online players.

Discord Webhook

Config.Webhook = {
    enabled = true,
    url = "",
    botName = "Fleeca Bank",
    color = 3899126,
}
ParameterTypeDescription
enabledbooleanEnable or disable Discord webhook logging
urlstringDiscord webhook URL (leave empty to disable)
botNamestringBot name displayed in Discord embeds
colornumberEmbed color in decimal (3899126 = blue #3b82f6)

All banking operations (personal, society, joint, savings, crypto) are logged to the webhook. The webhook uses a fire-and-forget approach.

Savings Account

Config.Savings = {
    enabled = true,
    interestRate = 3.0,
    interestCap = 50000,
    maxWithdrawalsPerDay = 1,
    minLockAmount = 1000,
    locks = {
        { days = 3,  rate = 2.0,  label = "3 jours"  },
        { days = 7,  rate = 5.0,  label = "7 jours"  },
        { days = 14, rate = 12.0, label = "14 jours" },
        { days = 30, rate = 30.0, label = "30 jours" },
    },
}
ParameterTypeDescription
enabledbooleanEnable or disable savings accounts
interestRatenumberClassic savings interest rate (% per cron cycle)
interestCapnumberMaximum interest earned per reset period
maxWithdrawalsPerDaynumberMaximum number of withdrawals from savings per 24-hour period
minLockAmountnumberMinimum amount required to create a fixed-term deposit

Fixed-Term Lock Options

ParameterTypeDescription
daysnumberLock duration in days
ratenumberInterest rate applied at maturity (%)
labelstringDisplay label in the UI

Savings accounts have a separate interest cron from the main checking account. Interest is online-only with a configurable cap.

Crypto Trading

Config.Crypto = {
    enabled = true,
    apiSource = "binance",
    refreshInterval = 5,
    coins = {
        { id = "bitcoin",  symbol = "BTC", label = "Bitcoin"  },
        { id = "ethereum", symbol = "ETH", label = "Ethereum" },
        { id = "litecoin", symbol = "LTC", label = "Litecoin" },
    },
    currency = "usd",
    minTradeAmount = 100,
    historyPerPage = 50,
}
ParameterTypeDescription
enabledbooleanEnable or disable crypto trading
apiSourcestringPrice API source: "binance", "coincap", or "coinpaprika"
refreshIntervalnumberMinutes between price fetches from the API
coinstableList of tradeable cryptocurrencies
currencystringReference currency for prices (e.g., "usd")
minTradeAmountnumberMinimum trade amount in dollars
historyPerPagenumberNumber of trades shown per page in history

Coin Configuration

ParameterTypeDescription
idstringCoin identifier used by the API (e.g., "bitcoin")
symbolstringTicker symbol displayed in the UI (e.g., "BTC")
labelstringFull display name (e.g., "Bitcoin")

Prices are fetched server-side via sv_crypto_prices.lua and broadcast to all connected clients. The server maintains a cache to minimize API calls. Crypto operations are exempt from taxation.