💻 ATM Hack ESX — Clean Cash Heist (ox_target + ox_lib + optional bl_ui)
Turn any ATM into a high-risk, high-reward mini-heist for ESX. Sleek ox_target interaction, ox_lib UI/minigame (with optional bl_ui:MineSweeper), clean cash only, strong server-side checks, per-ATM cooldowns, dispatch hook, and a cinematic cash-collection phase.
✨ Highlights
🎯 ox_target interaction on ATMs (
prop_atm_01,prop_atm_02,prop_fleeca_atm,prop_atm_03)🧩 Minigame:
ox_libskill check (fallback) or bl_ui:MineSweeper automatically if present💸 Clean money reward (no black_money): auto-uses
addMoney()/addAccountMoney('money')⏱️ Per-ATM cooldown (not global) — fully configurable & server-clamped
🎬 Collection phase after success: grab-cash animation + progress bar (bottom); payout only after completion
🚓 Dispatch hook: plug ps-dispatch / cd_dispatch / custom; alert includes the exact ATM location
🧰 Item requirement: use any ox_inventory item (and optionally consume it on attempt start)
🛡️ Anti-exploit: distance & model checks, rate-limit, 2-step success (begin → arm → collect), server-only payout
⚙️ Zero blocking loops; ESX Legacy & newer compatible; Lua 5.4
📦 What’s included
fxmanifest.luaconfig.lua(server toggles & safety clamps)client.lua(targeting, minigame flow, collection, notifications)client_editable.lua(buyer-friendly settings: item, ATM cooldown, collection time, dispatch)locales/en.lua(English texts)server.lua(validations, reward logic, cooldowns, anti-exploit)README.md(quick setup)
🧑🔧 Easy configuration (edit client_editable.lua)
🔑
ATMROB.RequiredItem— required item key (must exist in ox_inventory)🕒
ATMROB.MachineCooldownSeconds— per-ATM cooldown⏳
ATMROB.CollectDurationMs— cash collection time (progress bar)🚨
ATMROB.DispatchEnabled+ATMROB.DispatchMessage🧭 Dispatch hook:
-- ctx = { coords=vector3, street=string, amount=number, model=hash } function ATMROB_OnDispatchAlert(ctx) -- ps-dispatch example: -- exports['ps-dispatch']:CustomAlert({ -- coords = ctx.coords, message = ATMROB.DispatchMessage, -- dispatchCode = '10-90', radius = 0, sprite = 500, color = 1 -- }) -- cd_dispatch example: -- TriggerServerEvent('cd_dispatch:AddNotification', { -- job_table = {'police'}, coords = ctx.coords, title = 'ATM Robbery', -- message = ('%s (%s)'):format(ATMROB.DispatchMessage, ctx.street or ''), -- blip = { sprite=500, scale=1.0, colour=1, text='ATM Robbery' }, sound = 1 -- }) end
🔒 Server safety (in config.lua)
👤
EnablePlayerCooldown(default off) — turn on if you also want a global per-player cooldown🧮
AllowClientMachineCooldownOverride = true+ min/max clamp🪙
RequireItem = true+ConsumeItemOnAttempt = true(removes item at attempt start)🧷
AllowClientItemOverride = true+AllowAnyClientItem = true(trust any item key; server still verifies possession)
🧩 Requirements
es_extended(ESX)ox_libox_target(optional)
bl_ui(for Minesweeper)
Preview




