Scripts
Fleeca Heist
A multi-stage Fleeca robbery with three real ways into the vault. Hack it, drill it, or blow it.
- Requires
- ox_lib and oxmysql
- Frameworks
- ox, qb, qbx & esx, auto-detected
- Target & inventory
- ox or qb, auto-detected
- Dispatch
- ps, cd, tk, fd or custom
- Doorlock
- ox_doorlock or qb-doorlock
Works with any bank interior. The vanilla GTA V banks or any Fleeca MLO. It comes set up for the Helnius Fleeca Bank MLO, so with that interior it works straight away. With another interior, set the bank locations to match it. See Install the bank interior.
#Install
#Install dependencies
Install (or update)
ox_lib, and start it before this script in yourserver.cfg.github.com/CommunityOx/ox_lib/releases
Noteoxmysqlis not required. It's only used by the optional door importer (see Add the doors), and any MySQL resource works for that.#Install the drill prop
The vault drill uses the k4mb1 thermal drill prop (
k4mb1_prop_thermaldrill). It's free, but only available from k4mb1's Discord. Grab it there and start it before this script.Don't have it, or want a different drill? Change
drill_modelinshared/config.luato any prop you already have.The bomb, thermite, keypad and locker props are all base game or Cayo Perico assets, so there's nothing else to install.
#Check your inventory, target, notify, doorlock and dispatch
Everything besides
ox_libgoes through thebridgefolder, and the script picks the resource you run by itself.Each
bridge/<kind>/folder has one file per supported resource. Using something that isn't listed? Copy a file in that folder and wire up the same functions for your resource. Nothing else needs to change.Works out of the box with
ox_inventoryandqb-inventory.lua-- Server side return exports.ox_inventory:AddItem(src, item, amount, metadata) return exports.ox_inventory:RemoveItem(src, item, amount, metadata) and true or false return exports.ox_inventory:GetItemCount(src, item, metadata)Works out of the box with
ox_targetandqb-target.lua-- Client side return exports.ox_target:addBoxZone(parameters) exports.ox_target:removeZone(id) return exports.ox_target:addLocalEntity(entity, options) exports.ox_target:removeLocalEntity(entity) return exports.ox_target:addModel(model, options) exports.ox_target:removeModel(model, optionNames)Works out of the box with
ox_libandqb-core.lua-- Client side lib.notify({ title = data.title or '', description = data.description or '', type = data.type or 'info', position = data.position or 'bottom', duration = data.duration or 3000, }) -- Server side TriggerClientEvent('ox_lib:notify', data.source, data)Works out of the box with
ox_doorlockandqb-doorlock.lua-- Server side local door = exports.ox_doorlock:getDoorFromName(name) exports.ox_doorlock:setDoorState(door.id, locked and 1 or 0)Works out of the box with
ps-dispatch,cd_dispatch,fd-dispatchandtk_dispatch.To wire your own, set
dispatch_system = 'custom'inshared/config.luaand fill inbridge/dispatch/custom.lua.#Install the bank interior
Every bank location and the interior model names (
int_helnius_fleeca_...) are set up for the Helnius Fleeca Bank MLO. Install it before you start the heist and everything lines up.helnius.tebex.io/package/fleeca-banks
Included banks: Hawick, Legion Square, Vespucci, Del Perro, Great Ocean, Harmony and Pink Cage.
Using the vanilla banks or another MLO? Point the config at your interior:
- In each
shared/locations/<bank>.luafile, update the coordinates (doors, power box, vault panel, drill and bomb spots, note spawn, lockers and trolleys) to match your interior. - Swap any
int_helnius_fleeca_...model names for your interior's models.
To add a bank that isn't included, add a new file in
shared/locations/and list it inshared/locations/index.lua.- In each
#Add the doors
Each bank locks its front doors and inner cage through your doorlock resource. The door setup comes with the script, so there's no separate SQL file.
Set
auto_insert_doors = trueinshared/config.lua. On the next start, the script adds every door to theox_doorlocktable, skipping names that already exist.This needs a MySQL resource running (
oxmysql, or another one). Once the doors are in, setauto_insert_doorsback tofalse.The
qb-doorlockbridge controls the doors directly, so there's nothing to import. Leaveauto_insert_doors = false.#Add the items
Each stage of the heist needs an item. Every interaction sets its own
required_iteminshared/locations/<bank>.lua, so you can use items your server already has, or a different one per bank.The banks come set up with these:
Stage Item Hack the power box, door keypads and vault panel phone(phone_blackat Vespucci)Drill the vault door stationary_drillOr blow the vault door (used up) bombBurn through the inner cage door (used up) thermiteTipWant a proper hacking item instead of a phone? Add
hacking_devicebelow and changerequired_itemon eachpower_box,doors,vault_panelandkeypadentry to'hacking_device'.Add any of these your server doesn't have yet. Images for them are on items.rainmad.com/, or use your own.
Copy these into
ox_inventory/data/items.lua:lua['hacking_device'] = { label = 'Hacking Device', weight = 1000, stack = false, close = true, description = 'A handheld device for hacking electronics.', client = { image = 'hacking_device.png' }, }, ['stationary_drill'] = { label = 'Drill', weight = 4000, stack = false, close = true, description = 'A heavy-duty drill for cracking vaults.', client = { image = 'drill.png' }, }, ['bomb'] = { label = 'Bomb', weight = 3000, stack = false, close = true, description = 'Shaped charge for breaching a vault door.', client = { image = 'bomb.png' }, }, ['thermite'] = { label = 'Thermite', weight = 1500, stack = true, close = true, description = 'A thermal charge that burns through metal.', client = { image = 'thermite.png' }, },Copy these into
qb-core/shared/items.lua:lua['hacking_device'] = { ['name'] = 'hacking_device', ['label'] = 'Hacking Device', ['weight'] = 1000, ['type'] = 'item', ['image'] = 'hacking_device.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['description'] = 'A handheld device for hacking electronics.' }, ['stationary_drill'] = { ['name'] = 'stationary_drill', ['label'] = 'Drill', ['weight'] = 4000, ['type'] = 'item', ['image'] = 'drill.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['description'] = 'A heavy-duty drill for cracking vaults.' }, ['bomb'] = { ['name'] = 'bomb', ['label'] = 'Bomb', ['weight'] = 3000, ['type'] = 'item', ['image'] = 'bomb.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['description'] = 'Shaped charge for breaching a vault door.' }, ['thermite'] = { ['name'] = 'thermite', ['label'] = 'Thermite', ['weight'] = 1500, ['type'] = 'item', ['image'] = 'thermite.png', ['unique'] = false, ['useable'] = false, ['shouldClose'] = true, ['description'] = 'A thermal charge that burns through metal.' },The rewards in
shared/rewards.lua(black_moneyandgold_bar) should already exist on your server. Change the names in that file if yours are different.#Start the script
- Put the
l3th-fleecaheistfolder in your resources folder - Add
ensure l3th-fleecaheistto yourserver.cfg, after its dependencies - Restart the server
- Put the
#Configuration
shared/config.lua has the main settings: prop models, vault timers, blast damage, how far the drill and bomb can be heard, code attempts, and the lockdown and cooldown times.
The dispatch function in that file shapes the police alert. Change the jobs, title, code and blip to match your server.
Each bank is one file in shared/locations/, with its coordinates, doors, vault panel, drill and bomb spots, note spawn, and the lockers and trolleys to loot.
#Need help?
Most issues come from a missing dependency or the wrong start order in server.cfg, so run through the steps once more first. Still stuck? See Common problems or open a ticket on Discord.