[PAID] AP5-BlackMarket | Black Market System Script Red Theme | [QBCore / ESX / QBOX]

:camera: In Game Photos




2026-02-2017-52-26-ezgif.com-video-to-gif-converter
2026-02-2017-52-45-ezgif.com-video-to-gif-converter
Timeline1-ezgif.com-optimize

:gear: Features:

  • :dark_sunglasses: Dynamic Dealer Modes – Configure markets as Static guards, Roaming wanderers, or PolyZone walkers to keep locations unpredictable and engaging.
  • :chart_with_upwards_trend: Reputation & Leveling System – Players earn XP with every transaction, leveling up to unlock restricted items and exclusive high-tier contraband.
  • :earth_africa: Global Stock Economy – Create real scarcity with finite stock that refills dynamically, randomly, or based on player sales (supports Global or Personal stock).
  • :dollar: Multi-Currency Support – Fully configurable to accept Cash or Dirty Money (supports Accounts, Items, or Metadata).
  • :art: Modern React-Based UI – A sleek, responsive interface.
  • :electric_plug: Multi-Framework Compatibility – Fully optimized for QBCore, Qbox, and ESX.
  • :shield: Optimized & Secure Logging – Built for performance with extensive webhook support (Discord, Fivemerr, Fivemanage) to securely track transactions and prevent abuse.

Elevate your illegal economy with the ultimate Black Market solution!


:camera: Preview :camera:

:camera: Preview Video

:money_with_wings: Purchase Links :money_with_wings:

:shopping_cart: Escrowed


:shopping_cart: 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


:gear: Installation

  1. Download from Keymaster/Portal
  2. Ensure the folder is named AP5-BlackMarket.
  3. Put the folder in your resources folder.
  4. Restart your server.

Preview config.lua
Config = {}
Config = {}

Config.Debug = false
-- Framework Options: 'qb', 'qbx', 'esx'
Config.Framework = 'qb'
-- Inventory System (Options: 'qb', 'ox', 'codm', 'tgiann', 'origen')
Config.Inventory = 'ox'
-- Interaction System (Options: 'ox_target', 'qb-target', 'drawtext')
Config.Target = 'ox_target'

-- NPC Interaction Behavior
Config.StopPedOnInteract = true -- If true, moving NPCs will stop and face the player when opening the menu.

----- STOCK SYSTEM -----
Config.EnableStockSystem = true -- true: Enable stock system | false: Infinite stock
Config.Stock = {
    -- Options: 'random_restart' (Random stock generated every server restart)
    --          'dynamic_daily' (Persistent stock, refills daily based on chance, requires SQL)
    --          'static' (Fixed stock, no random generation)
    System = 'dynamic_daily',
    Global = true,            -- true: Shared stock for all players | false: Unique stock per player
    RefillType = 'random', -- Options: 'random' or 'maxstock'
    SellRestocksBuy = false, -- Add this line (true = selling refills buy stock, false = it doesn't)
}

----- REPUTATION / LEVELING SYSTEM -----
Config.EnableReputationSystem = true -- true: Enable reputation system | false: Disable it
Config.Reputation = {
    -- System Type: 'internal' (SQL Database) or 'metadata' (QBCore/QBox Player Metadata)
    System = 'internal', 

    -- Metadata Key (Only used if System = 'metadata')
    -- Example: 'craftingrep' or 'blackmarket_xp'
    MetadataName = 'blackmarket_xp',

    -- Toggle Reputation Requirements
    EnableBuy = true,  -- If true, players need specific levels to BUY items
    EnableSell = false, -- If true, players need specific levels to SELL items (requires adding minLevel to sellItems)
}

Config.Money = {
    Cash = {
        Enabled = true, -- Enable or Disable Cash transactions
    },
    Dirty = {
        Enabled = true, -- Enable or Disable Dirty Money transactions
        Type = 'item', -- 'item', 'metadata', or 'account' (ESX)
        Item = 'black_money', -- Item name or Account name
        MetadataKey = 'worth' -- Only for metadata type
    }
}

Config.Markets = {
    ['blackmarket1'] = {
        useMasterOptions = true,
        masterOptions = {
            model = "g_m_m_armboss_01",
            scenario = "WORLD_HUMAN_GUARD_STAND_CLUBHOUSE",
            icon = "fas fa-mask",
            label = "Access Black Market",
            distance = 2.0, 
            requiredItem = nil,   -- Item required to access menu (or nil)
            requiredGroup = nil,  -- Job/Gang required e.g., 'police', 'ballas' or table {'police', 'ambulance'} (or nil)
        },

        Static = {
            enabled = true, -- Enable this mode
            
            -- Ped/Interaction Options for this mode (Ignored if useMasterOptions = true)
            options = {
                model = "g_m_m_armboss_01",
                scenario = "WORLD_HUMAN_GUARD_STAND_CLUBHOUSE",
                icon = "fas fa-mask",
                label = "Access Black Market",
                distance = 2.0, 
                requiredItem = "vpn", 
                requiredGroup = nil,   
            },

            spawnSelection = "all", -- 'random' (picks 1) or 'all' (spawns at all locations)
            locations = {
                { coords = vector4(-900.79, 142.61, 64.02, 141.07), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "Static Market 1" },
                { coords = vector4(754.76, -1865.65, 29.29, 356.63),   enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "Static Market 2" },
            }
        },

        Roaming = {
            enabled = true,
            
            -- Ped/Interaction Options for this mode (Ignored if useMasterOptions = true)
            options = {
                model = "g_m_m_armboss_01",
                icon = "fas fa-mask",
                label = "Talk to Dealer",
                distance = 2.0,
                requiredItem = nil,
                requiredGroup = nil,
            },

            spawnSelection = "random", -- 'random' or 'all'
            locations = {
                { coords = vector4(-165.71, -57.73, 53.08, 26.71), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "Roaming Market Start" },
            }
        },

        PolyZone = {
            enabled = true,

            -- Ped/Interaction Options for this mode (Ignored if useMasterOptions = true)
            options = {
                model = "g_m_m_armboss_01",
                icon = "fas fa-question",
                label = "Approach Stranger",
                distance = 2.0,
                requiredItem = nil,
                requiredGroup = nil,
            },

            spawnSelection = "random", -- 'random' or 'all'
            speed = 1.1, -- Walk speed
            waitTime = 0, -- Time to wait in seconds
            stuckTime = 10, -- Seconds before resetting task if stuck
            locations = {
                { 
                    debug = false,
                    points = {
                        vector3(116.84, -997.03, 29.41),
                        vector3(224.18, -1031.22, 29.38),
                        vector3(277.57, -866.53, 29.35),
                        vector3(182.16, -837.53, 31.09)
                    },
                    minZ = 28.0,
                    maxZ = 31.0,
                    enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "PolyZone Market 1" 
                },
            }
        },
        
        buyItems = {
            { name = 'weapon_pistol', label = 'Heavy Pistol', description = 'Standard issue sidearm.', priceCash = 5000, priceDirty = 7000, minLevel = 1, maxStock = 20, refillChance = 80, xp = 20 },
            { name = 'lockpick', label = 'Lockpick Set', priceCash = 500, priceDirty = nil, description = 'Professional tension wrenches.', minLevel = 1, maxStock = 100, refillChance = 100, xp = 5 },
            { name = 'weapon_assaultrifle', label = 'Assault Rifle', priceCash = nil, priceDirty = 55000, description = 'Military grade rifle.', minLevel = 5, maxStock = 3, refillChance = 30, xp = 150 },
            { name = 'weapon_dbshotgun', label = 'Double Barrel', priceCash = 15000, priceDirty = 20000, description = 'Old school stopping power.', minLevel = 2, maxStock = 10, refillChance = 60, xp = 50 },
            { name = 'security_card_01', label = 'Security Card A', priceCash = nil, priceDirty = 25000, description = 'Cloned access card for secure areas.', minLevel = 4, maxStock = 5, refillChance = 20, xp = 100 },
            { name = 'ammo-9', label = '9mm Ammo Box', priceCash = 200, priceDirty = 250, description = 'Standard 9mm rounds.', minLevel = 1, maxStock = 500, refillChance = 100, xp = 2 },
            { name = 'armour', label = 'Heavy Armor', priceCash = 5000, priceDirty = 6000, description = 'Level III ballistic protection.', minLevel = 2, maxStock = 30, refillChance = 90, xp = 25 },
            { name = 'weapon_switchblade', label = 'Switchblade', priceCash = 300, priceDirty = 450, description = 'Compact blade, quick deployment.', minLevel = 1, maxStock = 50, refillChance = 90, xp = 5 },
            { name = 'advancedlockpick', label = 'Advanced Lockpick', priceCash = 1000, priceDirty = 1200, description = 'Reinforced picks for tougher locks.', minLevel = 2, maxStock = 40, refillChance = 80, xp = 10 },
            { name = 'drill', label = 'Power Drill', priceCash = nil, priceDirty = 8500, description = nil, minLevel = 2, maxStock = 15, refillChance = 70, xp = 30 },
            { name = 'thermite', label = 'Thermite Charge', priceCash = nil, priceDirty = 12000, description = 'Industrial incendiary for heavy doors.', minLevel = 3, maxStock = 10, refillChance = 50, xp = 40 },
            { name = 'weapon_snspistol', label = 'SNS Pistol', priceCash = 3500, priceDirty = 4500, description = 'Saturday Night Special. Easily concealable.', minLevel = 1, maxStock = 25, refillChance = 80, xp = 15 },
        },

        sellItems = {
             { name = 'weapon_pistol', label = 'Heavy Pistol', description = 'Standard issue sidearm.', sellPrice = 2500, xp = 10 },
             { name = 'lockpick', label = 'Lockpick Set', description = 'Professional tension wrenches.', sellPrice = 100, xp = 2 },
             { name = 'weapon_assaultrifle', label = 'Assault Rifle', description = 'Military grade rifle.', sellPrice = 20000, xp = 75 },
             { name = 'weapon_dbshotgun', label = 'Double Barrel', description = 'Old school stopping power.', sellPrice = 6000, xp = 25 },
             { name = 'ammo-9', label = '9mm Ammo Box', description = 'Standard 9mm rounds.', sellPrice = 50, xp = 1 },
             { name = 'armour', label = 'Heavy Armor', description = 'Level III ballistic protection.', sellPrice = 1500, xp = 12 },
             { name = 'thermite', label = 'Thermite Charge', description = 'Industrial incendiary.', sellPrice = 4000, xp = 20 },
             { name = 'weapon_switchblade', label = 'Switchblade', description = 'Compact blade.', sellPrice = 100, xp = 2 },
             { name = 'advancedlockpick', label = 'Advanced Lockpick', description = 'Reinforced picks.', sellPrice = 400, xp = 5 },
             { name = 'drill', label = 'Power Drill', description = nil, sellPrice = 2500, xp = 15 },
             { name = 'weapon_snspistol', label = 'SNS Pistol', description = 'Saturday Night Special.', sellPrice = 1500, xp = 7 },
             { name = 'security_card_01', label = 'Security Card A', description = 'Cloned access card.', sellPrice = 5000, xp = 50 },
        }
    },
}

Config.InternalLevelSystem = {
    maxLevel = 10,
    levels = {
        ["1"] = { xpRequired = 0 },
        ["2"] = { xpRequired = 100 },
        ["3"] = { xpRequired = 250 },
        ["4"] = { xpRequired = 475 },
        ["5"] = { xpRequired = 813 },
        ["6"] = { xpRequired = 1319 },
        ["7"] = { xpRequired = 2078 },
        ["8"] = { xpRequired = 3217 },
        ["9"] = { xpRequired = 4925 },
        ["10"] = { xpRequired = 7487 },
    }
}

Other Releases

Scoreboard

Advanced Multi Job

Notify

Custom Plates

Crafting

ATM Hacking

Advanced Shops System

Street Sweeper

Dumpster Diving

Banking

Red Money Wash

Red Money Wash

:handshake: Support & Community

Need help, updates, or want to suggest features?
Join the AP5 Studios Community on Discord
:point_right: Click here to join: AP5 Studios

Additional Info

Code Access No
Subscription-based No
Lines of Code ~2000
Requirements None
Support Yes