Skip to content
Documentation
R_Atmrobbery

r_atmrobbery Configuration

r_atmrobbery config: framework and integrations, money and police, the ATMs, alarms, the crowbar, the hack, thermite, the rope and car, logs and security.

All settings live in shared/config.lua. Restart the resource after changing it.

General

R.Framework = 'auto'    -- 'auto' | 'esx' | 'qb' | 'qbox'
R.Inventory = 'auto'    -- 'auto' | 'ox_inventory' | 'qb-inventory' | 'quasar' | 'framework'
R.Target = 'none'       -- 'auto' | 'ox_target' | 'qb-target' | 'none' (key prompt) | 'custom' (edit BridgeCustomTarget in bridge/cl_target.lua)
R.Notify = 'auto'       -- 'auto' | 'ox_lib' | 'esx' | 'qb' | 'okok' | 'quasar' | 'codesign'
R.TextUI = 'gta'        -- 'gta' | 'ox_lib' | 'okok' | 'qb' | 'jg' | 'cd' | 'esx' | 'custom' (edit BridgeTextUI in bridge/cl_textui.lua)
R.Progress = 'rscripts' -- 'rscripts' | 'gta' | 'ox_lib_bar' | 'ox_lib_circle' | 'qb' | 'esx' | 'progressbars' | 'mythic' | 'custom' (edit BridgeProgress in bridge/cl_progress.lua)
R.Meters = 'rscripts'   -- 'rscripts' | 'gta' | 'custom' (edit BridgeMeters in bridge/cl_meters.lua), the hack clock / cash / thermite / yank bars
R.Dispatch = 'auto'     -- 'auto' | 'cd_dispatch' | 'ps-dispatch' | 'qs-dispatch' | 'rcore_dispatch' | 'core_dispatch' | 'tk_dispatch' | 'lb-tablet' | 'linden' | 'op' | 'custom' | 'none'
R.Locale = ''           -- '' = ox:locale convar, or 'en' / 'fi'
R.Debug = false

R.UI = {
    Accent = '#9a27ea',
}

Prompt, bars and custom target

R.Target = 'none' shows a key prompt at the ATM. R.TextUI picks how that prompt looks. For custom, edit BridgeTextUI in bridge/cl_textui.lua.

R.Progress is the bar while you tie the rope. R.Meters is the hack clock, the cash, the thermite burn and the yank bars. 'rscripts' shows pills at the bottom of the screen in your Accent colour, 'gta' shows GTA's timer bars. For 'custom', fill in BridgeMeters.Show(bars) and BridgeMeters.Hide() in bridge/cl_meters.lua. Each bar has label, value (0-1), warn and icon.

R.Target = 'custom' is for any other target script: fill in BridgeCustomTarget in bridge/cl_target.lua. The bridge/ folder is open, so you can edit it freely.

Money and police

R.Money = {
    dirty = false,          -- true = pay every cash reward as dirty money
    dirtyItem = 'auto',     -- 'auto' = ESX black_money, qb-inventory markedbills, ox/qs black_money item, or an item name
}

R.Police = {
    jobs = { 'police', 'sheriff' },
    onDutyOnly = true,
    canRob = false,         -- false = police (the jobs above) can't rob ATMs
}

jobs and onDutyOnly decide who counts as police, both for the police count each method needs and for canRob. With onDutyOnly = true, an off-duty officer counts as a civilian and can rob.

The ATMs

R.Robbery = {
    models = { 'prop_atm_01', 'prop_atm_02', 'prop_atm_03', 'prop_fleeca_atm' },
    cooldown = 30,          -- minutes before the same ATM can be robbed again
    failCooldown = 5,       -- minutes an ATM locks up after a failed hack
    playerCooldown = 5,     -- minutes a player waits between ATM robberies, 0 = off
    cashTime = 120,         -- seconds dropped cash stays on the ground
    pickup = 'walk',        -- 'walk' = walk over the cash, 'key' = press E next to each bundle, 'target' = target each bundle
}

Every ATM of these models on the map can be robbed, wherever it stands. Remove a model to leave those ATMs alone.

Alarms

R.Alarm = {
    delay = { 5, 20 },      -- seconds before the police get the call
    blip = { sprite = 108, colour = 1, scale = 1.2, time = 90 },
}

Each method has its own alarmChance (the robbery starts or succeeds) and failAlarm (it fails). The call goes to R.Dispatch after delay seconds.

Crowbar

R.Crowbar = {
    enabled = true,
    police = 0,             -- police needed to start
    weapon = 'WEAPON_CROWBAR',
    skillCheck = { 'easy', 'medium' },  -- one skill check before you start, fail and you can try again
    alarmChance = 60,       -- % the alarm goes off when you start breaking in
    failAlarm = 100,        -- % a failed skill check calls the police
    piles = { 3, 5 },       -- the hit knocks the cash out as this many bundles
    reward = {
        money = { 500, 2500 },
        items = {},         -- { name = 'item', amount = { 1, 2 }, chance = 50 }
    },
}

The skill check is lib.skillCheck. Swap it for your own in SkillCheck in client/cl_custom.lua.

Hack

R.Hack = {
    enabled = true,
    police = 0,
    item = 'hacking_device',
    game = 'dui',           -- 'dui' = firewall hack on the ATM's own screen, 'pin' = R*'s pin minigame
    firewall = { hits = 3, lives = 3 },  -- 'dui': codes to breach, misses allowed
    breakChance = 30,       -- % a failed hack burns out the device
    time = 60,              -- seconds on the clock
    alarmChance = 15,       -- % the bank notices a successful hack
    failAlarm = 100,        -- % a failed hack calls the police
    bursts = 3,             -- the ATM pays out in this many bursts
    burstTime = 4,          -- seconds between bursts, walk away and the rest lands on the ground
    reward = {
        money = { 1500, 4000 },
        items = {},         -- { name = 'item', amount = { 1, 2 }, chance = 50 }
    },
}

With game = 'dui', the hack plays on the ATM's own screen: press Enter when the code shown below the reel is between the lines. Players standing nearby see the screen too. To use your own minigame, edit HackMinigame in client/cl_custom.lua.

Thermite

R.Thermite = {
    enabled = true,
    police = 0,
    item = 'thermal_charge',
    burnTime = 12,          -- seconds the charge burns before the ATM opens
    piles = { 6, 9 },       -- the cash blows out as this many bundles, anyone can pick them up
    spread = 1.6,           -- metres the bundles scatter in front of the ATM
    alarmChance = 100,      -- % the charge trips the alarm
    cinematic = true,       -- close camera while planting the charge
    burnDistance = 1.2,     -- metres, standing closer than this while it burns hurts
    burnDamage = 8,         -- health lost per second that close, 0 = off
    reward = {
        money = { 4000, 8000 },
        items = {},         -- { name = 'item', amount = { 1, 2 }, chance = 50 }
    },
}

Rope and car

R.Rope = {
    enabled = true,
    police = 0,
    item = 'tow_rope',
    length = 6.0,           -- metres of rope between the ATM and the vehicle
    tieTime = 4,            -- seconds to tie the rope around the ATM
    hookTime = 180,         -- seconds to hook a vehicle and rip the ATM out before the rope comes loose
    tugs = 3,               -- yanks it takes to rip the ATM off the wall
    tugSpeed = 15,          -- km/h the vehicle needs when the rope goes tight to count as a yank
    alarmChance = 100,      -- % the first yank trips the alarm
    piles = { 6, 9 },
    spread = 2.0,
    reward = {
        money = { 4000, 8000 },
        items = {},         -- { name = 'item', amount = { 1, 2 }, chance = 50 }
    },
}

Tie the rope at the ATM, then walk to a car and hook the rope to its back. Drive away and floor it every time the rope goes tight. Back up between the yanks to give the rope some slack. Motorcycles, bicycles, boats, helicopters, planes and trains can't be used.

Admin, logs and security

R.Admin = {
    command = 'atmrobbery',
    group = { 'group.admin', 'group.god' },
}

R.Logs = {
    enabled = true,
    type = 'webhook',       -- 'webhook' (set it in server/sv_custom.lua) | 'ox_lib'
    showIp = false,
}

R.Security = {
    interactDistance = 2.5, -- metres of slack on server distance checks for lag
    requestCooldown = 500,  -- ms
}

The admin command is on the Exports page.