In Game Photos
Features:
Advanced Skill Tree System – RPG-style progression where players earn XP to unlock upgrades for Speed (Efficiency), Tax Reduction (Connections), Capacity (Storage), and Luck (Risk Reduction).
Persistent Laundering – Active washes are saved to the database, ensuring players never lose their money during server restarts or crashes.
Modern Themed UI – A sleek, responsive interface built with Tailwind CSS
Risk & Dispatch Integration – Configurable failure chances based on load capacity. Failed washes can trigger police alerts via ps-dispatch, cd-dispatch, or core-dispatch.
Phone & Notification Support – Automatically notifies players when their wash is complete via phone mail (supports QB, GKS, OKOK, LB Phone) or standard notifications.
Multi-Framework & Inventory – Ready for ESX, QBCore, and Qbox, with built-in compatibility for Ox, QB, Tgiann, Origen, and Codem inventories.
Dynamic Time Calculations – Washing time can be static or dynamic based on the amount of money being cleaned, configurable in the settings.
Smart Location System – Choose between static ped locations or randomized spawns that change every restart to keep players searching.
Comprehensive Logging – Supports Discord Webhooks, Fivemanage, and Fivemerr to track washes, failures, potential exploits, and skill unlocks.
Flexible Payment Logic – Supports both item-based (black_money) and metadata-based dirty money, with options for tax-free thresholds on small amounts.
Preview 
Preview Video
Purchase Links 
Escrowed
Open Source
Supports:
• Framework: qb-core, qbx_core and es_extended
• Target: qb-target and ox_target
• Inventory: qb-inventory, ox_inventory, codem-inventory, origen_inventory and tgiann-inventory
• Database: oxmysql
• Logging: discord, fivemanage and fivemerr
Installation
- Download from Keymaster/Portal
- Ensure the folder is named AP5-MoneyWash.
- Put the folder in your resources folder.
- Restart your server.
Preview config.lua
Config = {}
-- Framework Configuration
-- Options: 'qb', 'qbox', 'esx'
Config.Framework = 'qb'
-- Inventory System Configuration
-- Options: 'ox', 'qb', 'tgiann', 'origen', 'codem'
Config.Inventory = 'ox'
-- Target System Configuration
-- Options: 'ox_target', 'qb-target'
Config.TargetSystem = 'ox_target'
-- Notification Method: 'ox_lib' or 'phone' (simulates SMS)
Config.NotificationMethod = 'ox_lib'
-- Alert Method for "Money Ready"
-- Options: 'notify', 'qb-phone', 'gks-phone', 'okok-phone', 'lb-phone'
Config.AlertMethod = 'qb-phone'
-- Persistent Washing
-- If true, washes continue through server restarts/crashes.
Config.PersistentWashing = true
Config.Dispatch = {
-- Enable or Disable Dispatch calls entirely
Enabled = true,
-- Options: 'ps-dispatch', 'cd_dispatch','core_dispatch'
Provider = 'ps-dispatch',
-- Chance (0.0 to 1.0) to alert police when wash fails
CallChance = 1.0,
-- Label used in dispatch UI
Label = "Money Laundering Suspicion"
}
-- Dirty Money Configuration
Config.DirtyMoney = {
Type = 'item', -- 'item' or 'metadata'
Item = 'black_money',
MetadataKey = 'worth'
}
-- PED SPAWN SETTINGS
-- 'all' = Spawns a ped at every location listed below.
-- 'random' = Picks ONE random location from the list below to spawn the ped at (changes on server restart).
Config.PedSpawnMode = 'all'
-- Location Configuration
-- specific model, coords (vec4), icon, and label for each spot
Config.Locations = {
{
coords = vec4(1142.6, -986.72, 45.9, 276.56),
model = 'a_m_m_business_01',
icon = 'fa-solid fa-sack-dollar',
label = 'Speak To Cleaner'
},
-- Example of a second location:
-- {
-- coords = vec4(-100.0, -200.0, 30.0, 90.0),
-- model = 'g_m_m_chemwork_01',
-- icon = 'fa-solid fa-soap',
-- label = 'Start Laundering'
-- },
}
-- Gameplay Settings
Config.XPPer100Dollars = 10 -- How much XP per $100 washed
Config.PointsPerLevel = 1 -- Points given per 100 XP (1 level)
Config.RiskPerFullLoad = 0.25 -- 25% chance to fail if washing at 100% capacity
-- Base Stats (Tax & Load)
Config.BaseTax = 0.15
Config.BaseMaxLoad = 10000
-- Max Price Before Fee
-- If the amount being washed is less than or equal to this value, NO fee/tax is applied.
Config.MaxPriceBeforeFee = 100
-- Time Configuration
Config.TimeSettings = {
-- 'fixed': Always takes the same amount of time (Config.TimeSettings.FixedDuration).
-- 'dynamic': Time increases based on amount washed (BaseSetup + (Amount * PerDollar)).
CalculationMode = 'dynamic',
-- Used ONLY if CalculationMode is 'fixed'
FixedDuration = 7000,
-- Dynamic Calculation Settings
-- Formula: BaseSetupTime + (Amount_Washed * TimePerDollar)
-- Example: 3000ms setup + ($10,000 * 2ms) = 3s + 20s = 23 seconds total.
BaseSetupTime = 3000, -- (ms) Warming up the machine (added to every wash)
TimePerDollar = 2.0, -- (ms) Time added per $1 washed. (2.0 = 2 seconds per $1,000)
-- Limits (Important for dynamic mode)
MinDuration = 5000, -- (ms) Minimum time a wash can take (prevents instant washes)
MaxDuration = 120000, -- (ms) Maximum time a wash can take (caps the timer)
}
-- Skill Tree Configuration
Config.Skills = {
enableSpeed = true,
enableTax = true,
enableCapacity = true,
enableLuck = true,
speed = {
{ id = 1, label = 'Efficiency I', description = '+10% Speed', cost = 1, val = 0.10 },
{ id = 2, label = 'Efficiency II', description = '+20% Speed', cost = 2, val = 0.20 },
{ id = 3, label = 'Turbo Wash', description = 'Max Speed', cost = 3, val = 0.40 }
},
tax = {
{ id = 1, label = 'Connections I', description = '-1% Tax', cost = 1, val = 0.01 },
{ id = 2, label = 'Connections II', description = '-2% Tax', cost = 2, val = 0.02 },
{ id = 3, label = 'Offshore Account', description = '-3% Tax', cost = 3, val = 0.03 }
},
capacity = {
{ id = 1, label = 'Storage I', description = '+5k Max', cost = 1, val = 5000 },
{ id = 2, label = 'Storage II', description = '+10k Max', cost = 2, val = 10000 },
{ id = 3, label = 'Vault', description = '+25k Max', cost = 3, val = 25000 }
},
luck = {
{ id = 1, label = 'Reliability I', description = '-10% Fail Chance', cost = 1, val = 0.10 },
{ id = 2, label = 'Reliability II', description = '-25% Fail Chance', cost = 2, val = 0.25 },
{ id = 3, label = 'Iron Clad', description = '-50% Fail Chance', cost = 3, val = 0.50 }
}
}
Other Releases
Support & Community
Need help, updates, or want to suggest features?
Join the AP5 Studios Community on Discord
Click here to join: AP5 Studios
Additional Info
| Code Access | No |
| Subscription-based | No |
| Lines of Code | ~2000 |
| Requirements | None |
| Support | Yes |














