[PAID] Advanced Banking System [ ESX / QB / QBOX ]


A fully-featured and optimized Banking System for FiveM servers. Allows players to manage their finances with ease β€” including deposits, withdrawals, transfers, and account balances. Comes with a modern and user-friendly UI, secure server-side handling of all transactions. Perfect for enhancing immersion and realism in your RP server


Features:

  • Support ESX / QB / QBOX Framework [Open Source Files]
  • Support ox_target / qb-target [Open Source Files]
  • Support ox_inventory / qb-inventory / ps-inventory / jpr-inventory / qs-inventory / tgiann-inventory / codem-inventory [Open Source Files]
  • Invoices System: You can let workers issue a invoices for customers with our script
  • Loans System: Players can request a loan with required credit score
  • Bank Cards: You can force player to use bank cards for ATM
  • Card Hacking: Players are allowed to hack bank cards and stole some amount of money
  • Shared Accounts: You can create shared accounts with your friends and manage their permissions
  • Society Accounts: Script has society account of every job, as boss you can manage your business funds
  • Account Logs: Logs for every action on bank account, very useful to recognize some activity
  • Discord Logs: Script has also discord logs for every action, you can follow your players every step on server
Script Config
Config = {}
Config.Debug = false -- ENABLE DEBUG MODE? [SHOWS MORE INFO IN CONSOLE]
Config.Language = 'en' -- [en, de, pl, ru, es, fr, tr, ar]
Config.Logs = true -- ENABLE DISCORD LOGS? [SERVER/EDITABLE_FUNCTIONS.LUA]
Config.Bank = {
    IBANLength = 10, -- IBAN LENGTH [AUTO-GENERATED]
    societyAccounts = true, -- ENABLE SOCIETY ACCOUNTS? [FOR JOBS]
    sharedAccountsLimit = 3, -- MAXIMUM NUMBER OF SHARED ACCOUNTS
    accountLogs = true, -- ENABLE ACCOUNT LOGS?
    locations = {
        {coords = vec3(149.7, -1041.32, 29.7), radius = 0.65, blip = {name = "Fleeca Bank", sprite = 108, color = 2, scale = 0.8}}, -- FLEECA BANK [COORDS AND RADIUS OF TARGET]
        {coords = vec3(-1212.7, -330.5, 37.8), radius = 0.65, blip = {name = "Fleeca Bank", sprite = 108, color = 2, scale = 0.8}}, -- FLEECA BANK [COORDS AND RADIUS OF TARGET]
        {coords = vec3(-351.5, -49.5, 49.0), radius = 0.65, blip = {name = "Fleeca Bank", sprite = 108, color = 2, scale = 0.8}}, -- FLEECA BANK [COORDS AND RADIUS OF TARGET]
        {coords = vec3(-2962.5, 482.5, 15.7), radius = 0.65, blip = {name = "Fleeca Bank", sprite = 108, color = 2, scale = 0.8}}, -- FLEECA BANK [COORDS AND RADIUS OF TARGET]
        {coords = vec3(-112.5, 6469.5, 31.6), radius = 0.65, blip = {name = "Fleeca Bank", sprite = 108, color = 2, scale = 0.8}}, -- FLEECA BANK [COORDS AND RADIUS OF TARGET]
        {coords = vec3(1175.5, 2706.5, 38.0), radius = 0.65, blip = {name = "Fleeca Bank", sprite = 108, color = 2, scale = 0.8}}, -- FLEECA BANK [COORDS AND RADIUS OF TARGET]
    }
}

Config.ATM = {
    allowDeposit = true, -- ALLOW PLAYERS TO DEPOSIT MONEY IN ATM
    allowWithdraw = true, -- ALLOW PLAYERS TO WITHDRAW MONEY FROM ATM
    models = {'prop_fleeca_atm', 'prop_atm_02', 'prop_atm_03', 'prop_atm_01'}, -- MODELS OF ATMS [FOR TARGET]
    locations = {}, -- YOU CAN OPTIONALLY ADD ATM FOR COORDS [SAME LIKE BANK LOCATIONS :)]
    onOpen = function(atmEntity) -- THIS FUNCTION IS EXECUTED WHEN PLAYER OPENS ATM
        if atmEntity == 0 or not DoesEntityExist(atmEntity) then
            return
        end

        local plyCoords = GetEntityCoords(cache.ped)
        if #(plyCoords - GetEntityCoords(atmEntity)) > 2.5 then
            return
        end

        local offset = GetOffsetFromEntityInWorldCoords(atmEntity, 0.0, -0.55, 0.0)
        SetEntityCoordsNoOffset(cache.ped, offset.x, offset.y, plyCoords.z, true, true, true)
        SetEntityHeading(cache.ped, GetEntityHeading(atmEntity))
        TaskStartScenarioInPlace(cache.ped, 'PROP_HUMAN_ATM', 0, true)
        Citizen.Wait(2000) -- WAIT FOR ANIMATION
    end,
    onClose = function() -- THIS FUNCTION IS EXECUTED WHEN PLAYER CLOSES ATM
        ClearPedTasks(cache.ped)
    end
}

Config.Invoices = {
    menuCommand = 'createInvoice', -- COMMAND TO OPEN INVOICE MENU, set to false to disable
    allowDebt = true, -- ALLOW PLAYERS TO PAY INVOICES IF THEY DOESNT HAVE ENOUGH MONEY
}

Config.Loans = {
    isEnabled = true, -- ENABLE LOANS SYSTEM?
    maxLoans = 1, -- MAXIMUM NUMBER OF LOANS PLAYER CAN HAVE
    defaultCreditScore = 500, -- DEFAULT CREDIT SCORE FOR NEW PLAYERS [MAXIMUM 1000]
    availableLoans = {
        {
            name = 'Bronze Loan', 
            amount = 10000, 
            repayment = 1.2, -- 120% repayment
            requiredScore = 350, 
            duration = 30 -- 30 days
        }, 
        {
            name = 'Silver Loan', 
            amount = 25000, 
            repayment = 1.1, -- 110% repayment
            requiredScore = 550, 
            duration = 30 -- 30 days
        }, 
        {
            name = 'Gold Loan', 
            amount = 50000, 
            repayment = 1.05, -- 105% repayment
            requiredScore = 700, 
            duration = 30 -- 30 days
        }, 
        {
            name = 'Diamond Loan', 
            amount = 250000, 
            repayment = 1.1, -- 110% repayment
            requiredScore = 900, 
            duration = 30 -- 30 days
        },
    }
}

Config.BankCards = {
    isEnabled = true, -- ENABLE BANK CARDS SYSTEM? [PLAYER WILL NEED TO HAVE BANK CARD TO USE ATM]
    maxCardsPerAccount = 3, -- MAXIMUM NUMBER OF CARDS PER ACCOUNT
    cardHacking = true, -- ENABLE BANK CARD HACKING? [PLAYER CAN HACK BANK CARDS FROM OTHER PLAYERS]
    requiredHackItems = {
        -- ['atm_device'] = 1
    },
    stoleAmount = {min = 100, max = 5000}, -- AMOUNT OF MONEY PLAYER CAN STEAL FROM HACKED CARD
    cooldownType = 'global', -- global / account [global cooldown for all players or cooldown for hacked account]
    cooldownTime = 30 * 60, -- COOLDOWN TIME IN SECONDS [30 MINUTES]
    removeCardAfterHack = true, -- REMOVE BANK CARD AFTER HACKING? [PLAYER WILL NEED TO GET NEW CARD]
    cardHackGame = function()
        if lib.progressBar({
            duration = 10000,
            label = locale('preparing_device'),
            useWhileDead = false,
            canCancel = true,
            disable = {car = true, move = true, combat = true},
            anim = {dict = 'anim@scripted@player@mission@tunf_hack_keypad@heeled@', clip = 'hack_loop'},
        }) then
            if GetResourceState('p_minigames') == 'started' then
                return exports['p_minigames']:StartGame('MathGame', {
                    preset = 'easy', -- easy / medium / hard / impossible
                    questionsAmount = 20,
                    maxFails = 3,
                    fallTime = 5000
                })
            else
                return lib.skillCheck({'easy', 'easy', {areaSize = 60, speedMultiplier = 2}, 'hard'}, {'w', 'a', 's', 'd'})
            end
        else
            return false
        end
    end
}

Links:

JOIN DISCORD FOR SUPPORT :headphones:
VIDEO SHOWCASE :video_camera:
SCRIPT DOCUMENTATION :bookmark:
BUY HERE $19.99 :shopping_cart:

USE CODE β€œNEW” FOR -10% DISCOUNT ON FIRST-PURCHASE! :gift:


banking_gif_1
banking_gif_2

banking_gif_3
banking_gif_4

banking_gif_5
banking_gif_6

banking_gif_7
banking_gif_8


Tags

fivem, esx, qbcore, qbox, banking, bank, bank system, banking system
Code is accessible No (Bridge Files are Open Source)
Subscription-based No
Lines (approximately) 500+
Requirements ox_lib, oxmysql
Support Yes
1 Like