Vigi Laundering : Premium Money Laundering
Not a menu with a progress bar. A deposit slip you sign at a counter, a launderer who takes the briefcase from your hands, and an attention level that follows you even when you log off.
v1.0.0 : ESX, QBCore, Qbox and ox_core out of the box. Framework, inventory, target, notifications and phone all auto-detected.
SHOWCASE VIDEO | DOCUMENTATION
THE SLIP
The whole interface is one document, read top to bottom and signed at the bottom.
- Live Recalculation: commission, hazard, delay and return, on the server's own formulas. What they read before signing is what they get
- A Real Cachet: stamped with the file's own reference, and its arced text fits in any language
- Nothing To Install: the panel is drawn in the browser and the typefaces ship with the resource
- Archives Leaf: every closed operation, what it cost, what came back
- In-Game Glossary: every term the slip uses, opened from the label you clicked
Five States, One Sheet
- Blank, then filled: the seal stays inert until a sum is entered
- Over the ceiling: the sum line turns to clay, the seal refuses
- In process: stamped, the countdown takes over, the rest fades like a filed record
- For collection: stamped again, the seal turns green
THE HANDOVER
Your players hand the money over, in person, to someone who is standing there.
- A Named Launderer: a persistent NPC at a configurable spot, streamed by distance
- Briefcase Ceremony: he takes the case, holds it, gives it back. Configurable, or off
- Reconnect-Safe: log back in mid-operation and he is still holding your case
- Several Players: one NPC serves everyone, and nobody fights over the prop
- Target Optional: ox_target, qb-target, qtarget, or a marker and an
Eprompt
THE BOOK OF CONNECTIONS
A roster of people the house introduces you to, each pulling exactly one lever.
- Nine Contacts: courier, bookkeeper, front man, engraver, notary, concierge, lawyer, auditor, fixer
- A Web of Vouching: four names only open once their sponsor is secured
- Deliberately Unaffordable: the roster costs 31 points, a player caps at 24. No two books alike
- One Lever Each: delay, commission, ceiling, hazard, salvage floor, attention gained and lost
- 24 Ranks: XP per dollar laundered, on a curve you can replace outright
- Fully Editable: costs, effects, values and prerequisites all live in
config.lua
ATTENTION DRAWN
Every operation draws an eye, and the slip shows the figure, so a player can weigh it before signing.
- Rises With Volume: a file at the ceiling adds full attention, half the sum half as much
- Decays In Real Time: at a rate you set, including while the player is offline
- Weighs On Two Things: the commission taken and the chance the file goes bad
- Drives The Loss: cold you get by with a scrape, hot you lose the lot
- Open To Your Scripts: a raid raises it, a bribed informant lowers it, through exports and an event
- Optional: turn it off for a flat rate and a flat hazard, line removed from the slip
SERVER AUTHORITY
Everything that decides an outcome is decided on the server.
- Sealed At Signature: rolled when the slip is signed. Closing the panel or dying rerolls nothing
- Never Leaves The Server: the outcome is not in the panel's payload, so game memory shows nothing
- Ceiling And Amount Checked: recomputed from the player's real book, and malformed amounts refused
- Atomic Collection: the file is consumed before any money is paid, so spamming pays once
- Full Inventory Handled: if the payout cannot fit, the file returns with its sealed outcome
- Webhook Kept Server-Side: the Discord URL never sits in the config players download
- Updates Are Drop-In: a later version adds whatever columns and indexes a live database is missing, so upgrading is dropping in the folder and restarting
API
Nine exports and three events, for wiring the script into dispatch, a gang system, a phone app or your own scripts.
-- Server
exports['vigi_laundering']:GetHeat(source)
exports['vigi_laundering']:AddHeat(source, amount)
exports['vigi_laundering']:HasActiveWash(source)
exports['vigi_laundering']:GetActiveWash(source)
exports['vigi_laundering']:GetStats(source)
exports['vigi_laundering']:GetArchive(source)
-- Client
exports['vigi_laundering']:IsPanelOpen()
exports['vigi_laundering']:OpenPanel()
exports['vigi_laundering']:GetNpcCoords()
-- Events
vigi_laundering:onWashStarted
vigi_laundering:onWashClaimed
vigi_laundering:onHeatChangedThe sealed outcome is deliberately not exposed by GetActiveWash. Handing it to another resource would be handing it to whatever that resource prints.
Full signatures and payloads are in the documentation. Everything else lives in one config.lua, outside the escrow along with both bridge files, the server config and the locales.
COMPATIBILITY
Frameworks
- ESX Legacy & Extended | QBCore | Qbox | ox_core, all fully supported
- Detected Twice: a resource still booting reports itself as starting, so detection runs again once the boot settles. No restart to find your phone
- Custom Framework: open bridge files on both sides, outside the escrow
Inventory Systems
- ox_inventory | qs-inventory | qb-inventory | codem-inventory | chezza-inventory | ESX default
- ox_core has no inventory of its own, pair it with ox_inventory
Phones & Notifications
- lb-phone | gksphone (v2) | qs-smartphone (Quasar) | qb-phone, or none at all
- okokNotify | ox_lib | your framework's own | a custom hook
Languages
- English and French included, key for key, with an English fallback
- Panel, notifications, texts, Discord logs, contact names and glossary, all translated
REQUIREMENTS
- oxmysql: the only hard dependency, and no SQL file to import
- A supported framework, and an inventory holding your dirty-money item
- Everything else is optional and detected at runtime