[ZaT-SCRIPTS] [QBCore / ESX / QBOX] — FiveM Advanced Fleeca Bank Heist AI and DUI

:fire: [ZaT-SCRIPTS] [QBCore / ESX / QBOX] — Advanced Fleeca Bank Heist for FiveM

Take your server to the next level with one of the most immersive and dynamic bank robbery systems in the FiveM scene.
This isn’t just a heist — it’s an experience. With AI-driven voice prompts, synchronized team-based minigames, and fully integrated DUI interfaces, this script brings cinematic depth to your gameplay.

:brain: Multi-Stage Progression: From electrical bypasses and security terminals to vault AI interactions and custom memory games — every step is built for immersion.

:studio_microphone: AI Voice System: Real-time AI voice questions from the vault’s control panel, promoting team communication and coordination.

:joystick: Fully Synced Minigames: Memory challenges and security systems synced for all nearby players — everyone can see and help.

:repeat: Customizable:

  • Swap out minigames (except PC terminal) to your favorites.
  • Configure questions, answers, and AI voice lines.
  • Choose your targeting system: qb-target, ox_target, or interact.

:world_map: Map Compatibility: Out-of-the-box support for 3 MLOs:

  • Default GTA V Fleeca
  • FM Fleeca V2
  • K4MB Fleeca
    Add your own maps easily using the flexible config system.

Code is accessible 80%
Subscription-based No
Lines (approximately) 10k+
Requirements qb-core/ es-extended and Xsound
Support Yes
  • Config.lua :
Config = {}

Config.Framework        = "qb" -- "qb"
Config.Inventory        = "ox" -- "ps", "qb", "ox", "qs", "tgiann"
Config.FrameworkPseudo  = 'qb-core'
Config.Target           = "interact" -- 'qb' or 'ox' for qb-target and ox-target
Config.Doorlock         = 'qb' -- ox
Config.Timeout          = 45 -- 45 minutes timeout for fleecas
Config.MinimumPolice    = 0


Config.Alarm = {
    started             = false,
    dispatch            = 'qb-core', -- 'cd_dispatch' 'ps-dispatch' (client/framework.lua you can add any alert you want to..)
}

Config.Games = { -- PC Minigames settings
    memory = 3, -- total rounds of memory minigame
    shapes = 2, -- total rounds of shape minigame
}

Config.Rewards = {
    Lockers = {
        { name = 'rollcash', min = 5, max = 15, info = {}, chance = 70 },
        { name = 'goldbar',  min = 1, max = 3, info = {}, chance = 30 },
    },
    Trolleys = {
        { name = 'rollcash', min = 5, max = 15, info = {}, chance = 100 },
    }
}

Config.Fleeca           = {
    {
        id = 1,
        name = "Fleeca Bank",
        isOpened = false,
        electric = {
            coords  = vector4(153.69, -1043.13, 28.3, 73.2),
            item    = 'screwdriverset', --  nil : in case you don't want to use items
            chance  = 25, -- 25% chance for the item to get removed on fail
            available = true,
            id      = nil, -- no door to open (gta 5 map) (put the door id to open on elecric box hack door here check fm_config as example)
        },
        door     = {
            coords  = vector3(145.42, -1041.81, 29.64),
            c_head  = 249.65,
            o_head  = -180.0,
            prop    = "v_ilev_gb_teldr",
        }, 
        pcs       = {
            prop    = "prop_monitor_01b",
            coords = vector4(150.33, -1041.78, 29.58, 331.14), -- new pc model coords
            available = true,
        },
        vault    = {
            coords  = vector3(147.23, -1046.10, 29.49),
            code    = nil,
            prop    = 'v_ilev_gb_vauldr',
            closed  = 250.0,
            open    = 160.0,
            item    = 'rfid_cloner',
            available = true,
            isOpened = false,
            id      = nil, -- this one for the vault door if it uses doorlock (for default GTA fleeca no need for doolock we just move the prop)
            ped     = vector4(146.77, -1045.85, 29.37, 254.2)
        },
        vdoor    = {
            coords   = vector4(149.44, -1047.27, 30.05, 167.64), -- /vector4  + 0.7 z
            delay    = 19000, -- keep it 19 to match with the bomb.ogg
            id       = 'fleeca-1',  -- door name in your qb-doorlock or ox_doorlock
            isOpened = false,
            item     = 'c4'
        },
        lockers     = {
            {
                coords      = vector3(149.47, -1044.47, 29.62),
                isBusy      = false,
                isOpened    = false,
                item        = 'drill',
            },
            {
                coords      = vector3(150.85, -1049.16, 29.66),
                isBusy      = false,
                isOpened    = false,
                item        = 'drill',
            },
            {
                coords      = vector3(150.27, -1050.74, 29.62),
                isBusy      = false,
                isOpened    = false,
                item        = 'drill',
            },
            {
                coords      = vector3(147.98, -1050.998, 29.60),
                isBusy      = false,
                isOpened    = false,
                item        = 'drill',
            },
            {
                coords      = vector3(146.79, -1050.56, 29.60),
                isBusy      = false,
                isOpened    = false,
                item        = 'drill',
            },
            {
                coords      = vector3(146.25, -1049.23, 29.60),
                isBusy      = false,
                isOpened    = false,
                item        = 'drill',
            }
        },
        trolleys    = {
            {
                coords = vector4(150.91, -1046.90, 28.35, 250.81),
                isBusy = false,
                prop   = 'prop_gold_trolly',
                cash   = 'h4_prop_h4_cash_stack_01a',
                isOpened = false
            },
            {
                coords = vector4(150.59, -1045.26, 28.35, 340.81),
                isBusy = false,
                prop   = 'prop_gold_trolly',
                cash   = 'h4_prop_h4_cash_stack_01a',
                isOpened = false
            },
            {
                coords = vector4(149.41, -1051.15, 28.35, 160.43),
                isBusy = false,
                prop   = 'prop_gold_trolly',
                cash   = 'h4_prop_h4_cash_stack_01a',
                isOpened = false
            },
            {
                coords = vector4(147.3, -1047.86, 28.35, 70.96),
                isBusy = false,
                prop   = 'prop_gold_trolly',
                cash   = 'h4_prop_h4_cash_stack_01a',
                isOpened = false
            },
            {
                coords = vector4(148.62, -1049.18, 28.35, 160.43),
                isBusy = false,
                prop   = nil,
                cash   = 'h4_prop_h4_cash_stack_01a',
                isOpened = false
            }
           
        },
    },
} -- and other fleecas

Config.Trash        = { -- props to delete
    {
        coords = vector3(150.33, -1041.78, 29.58),
        prop   = "prop_monitor_01a",
    },
    {
        coords = vector3(314.66, -280.15, 54.38),
        prop   = "prop_monitor_01a",
    },
    {
        coords = vector3(-350.47, -50.95, 49.25),
        prop   = "prop_monitor_01a",
    },
    {
        coords = vector3(-1211.58, -331.11, 38.0),
        prop   = "prop_monitor_01a",
    },
    {
        coords = vector3(-2961.7, 483.68, 15.91),
        prop   = "prop_monitor_01a",
    },
    {
        coords = vector3(1174.27, 2707.64, 38.3),
        prop   = "prop_monitor_01a",
    },
}

Showcase : https://youtu.be/kNdS7lrD-RQ
QBCore :
:shopping_cart: Tebex: https://zatv.tebex.io/category/qbcore
:open_book: Documentation: Fleeca | ZaT Scripts

ESX:
:shopping_cart: Tebex: https://zatv.tebex.io/category/esx
:open_book: Documentation: Fleeca | ZaT Scripts