[PAID] AP5-Shops | Advanced Shops System Sleek UI/UX | [QBCore / ESX / QBOX]

:camera: Preview Photos



:gear: Features:

  • :water_pistol: Automatic License System – Built-in weapon license verification for Ammu-Nation purchases, ensuring players cannot buy weapons illegally without the proper authorization.
  • :credit_card: Flexible Payment Options – Fully configurable payment methods per shop, allowing cash, bank, or custom payment setups depending on your server’s economy.
  • :world_map: Easy Plug-and-Play Setup – Pre-configured shop locations across the map with customizable blips, NPC vendors, and target zones supporting both ox_target and qb-target.
  • :satellite_antenna: Webhook Purchase Logging – Detailed Discord webhook logs for every transaction, including player information, purchased items, quantities, and payment method used.
  • :gear: Fully Customizable Configuration – Simple and clean config file to add or modify shops, products, categories, prices, and locations with ease.

:camera: Preview :camera:

:camera: Preview Video

:money_with_wings: Purchase Links :money_with_wings:

:shopping_cart: Escrowed


:shopping_cart: Open Source


:gear: Installation

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

Preview config.lua
Config = {}

Config.Framework = 'qb' -- Options: 'qb', 'qbx', or 'esx'
Config.Target = 'ox'    -- Options: 'qb', 'ox'
Config.Inventory = 'ox' -- Options: 'qb', 'ox', 'qs', 'codm', 'tgiann', 'origen'

Config.Categories = {
    ['food']        = { label = 'Food', icon = 'fa-solid fa-burger' },
    ['drinks']      = { label = 'Drinks', icon = 'πŸ₯€' },
    ['alcohol']     = { label = 'Alcohol', icon = '🍷' },
    ['electronics'] = { label = 'Tech', icon = 'πŸ“±' },
    ['tools']       = { label = 'Tools', icon = 'πŸ”§' },
    ['medical']     = { label = 'Medical', icon = 'πŸ’Š' },
    ['ammo']        = { label = 'Ammo', icon = 'πŸ“¦' },
    ['pistols']     = { label = 'Pistols', icon = 'πŸ”«' },
    ['rifles']      = { label = 'Rifles', icon = 'πŸ’€' },
    ['illegal']     = { label = 'Illegal', icon = '😈' },
}

Config.Shops = {
    ["market_247"] = {
        label = "Market",
        themeLabel = "24/7",
        theme = "green",
        icon = "fa-solid fa-basket-shopping",
        iconColor = "green",
        ped = "mp_m_shopkeep_01",
        scenario = "WORLD_HUMAN_STAND_MOBILE",
        paymentMethods = {
            cash = true,
            bank = true
        },
        locations = {
            { coords = vector4(372.75, 327.15, 103.57, 255.25), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "24/7 Market" },
            { coords = vector4(549.2, 2670.54, 42.16, 99.65), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "24/7 Market" },
            { coords = vector4(1959.71, 3740.67, 32.34, 302.18), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "24/7 Market" },
            { coords = vector4(2677.34, 3279.82, 55.24, 332.05), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "24/7 Market" },
            { coords = vector4(1728.2, 6415.92, 35.04, 245.67), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "24/7 Market" },
            { coords = vector4(24.45, -1346.52, 29.5, 271.66), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "24/7 Market" },
            { coords = vector4(-3243.06, 1000.03, 12.83, 354.2), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "24/7 Market" },
            { coords = vector4(-3039.75, 584.32, 7.91, 18.97), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "24/7 Market" },
            { coords = vector4(2556.48, 380.88, 108.62, 359.25), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "24/7 Market" },
        },
        products = {
            { name = 'burger', label = 'Burger', weight = 500, price = 15, category = 'food' },
            { name = 'sandwich', label = 'Sandwich', weight = 350, price = 10, category = 'food' },
            { name = 'water_bottle', label = 'Water Bottle', weight = 500, price = 5, category = 'drinks' },
            { name = 'cola', label = 'Cola', weight = 500, price = 6, category = 'drinks' },
            { name = 'sprunk', label = 'Sprunk', weight = 500, price = 6, category = 'drinks' },
            { name = 'coffee', label = 'Coffee', weight = 400, price = 10, category = 'drinks' },
            { name = 'phone', label = 'Mobile Phone', weight = 700, price = 500, category = 'electronics' },
            { name = 'radio', label = 'Radio', weight = 600, price = 200, category = 'electronics' },
            { name = 'binoculars', label = 'Binoculars', weight = 800, price = 50, category = 'tools' },
            { name = 'bandage', label = 'Bandage', weight = 100, price = 50, category = 'medical' },
        }
    },
    ["market_ltd"] = {
        label = "Gasoline",
        themeLabel = "LTD",
        theme = "blue",
        icon = "fa-solid fa-gas-pump",
        iconColor = "blue",
        ped = "mp_m_shopkeep_01",
        scenario = "WORLD_HUMAN_STAND_MOBILE",
        paymentMethods = {
            cash = true,
            bank = false
        },
        locations = {
            { coords = vector4(1164.81, -323.56, 69.21, 103.82), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "LTD Gasoline" },
            { coords = vector4(-706.07, -914.54, 19.22, 85.86), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "LTD Gasoline" },
            { coords = vector4(-47.42, -1758.68, 29.42, 49.11), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "LTD Gasoline" },
            { coords = vector4(-1819.54, 793.52, 138.09, 128.84), enableBilp = true, sprite = 52, color = 2, scale = 0.8, label = "LTD Gasoline" },
        },
        products = {
            { name = 'water_bottle', label = 'Water Bottle', weight = 500, price = 5, category = 'drinks' },
            { name = 'coffee', label = 'Coffee', weight = 400, price = 10, category = 'drinks' },
            { name = 'sandwich', label = 'Sandwich', weight = 350, price = 12, category = 'food' },
            { name = 'burger', label = 'Burger', weight = 500, price = 15, category = 'food' },
            { name = 'repairkit', label = 'Repair Kit', weight = 2500, price = 300, category = 'tools' },
            { name = 'advancedrepairkit', label = 'Advanced Repair Kit', weight = 3500, price = 500, category = 'tools' },
            { name = 'cleaningkit', label = 'Cleaning Kit', weight = 1500, price = 50, category = 'tools' },
            { name = 'radio', label = 'Radio', weight = 600, price = 200, category = 'electronics' },
            { name = 'lighter', label = 'Lighter', weight = 50, price = 2, category = 'tools' },
        }
    },
    ["market_liquor"] = {
        label = "Liquor",
        themeLabel = "Rob's",
        theme = "orange",
        icon = "fa-solid fa-wine-bottle",
        iconColor = "orange",
        ped = "mp_m_shopkeep_01",
        scenario = "WORLD_HUMAN_STAND_MOBILE",
        paymentMethods = {
            cash = true,
            bank = false
        },
        locations = {
            { coords = vector4(-2966.47, 390.28, 15.04, 87.8), enableBilp = true, sprite = 93, color = 2, scale = 0.8, label = "Rob's Liquor" },
            { coords = vector4(-1222.65, -908.82, 12.33, 33.73), enableBilp = true, sprite = 93, color = 2, scale = 0.8, label = "Rob's Liquor" },
            { coords = vector4(-1485.69, -378.66, 40.16, 132.93), enableBilp = true, sprite = 93, color = 2, scale = 0.8, label = "Rob's Liquor" },
            { coords = vector4(1134.13, -981.71, 46.42, 277.64), enableBilp = true, sprite = 93, color = 2, scale = 0.8, label = "Rob's Liquor" },
            { coords = vector4(1166.64, 2710.8, 38.16, 182.51), enableBilp = true, sprite = 93, color = 2, scale = 0.8, label = "Rob's Liquor" },
            { coords = vector4(1391.94, 3606.09, 34.98, 198.16), enableBilp = true, sprite = 93, color = 2, scale = 0.8, label = "Rob's Liquor" },
        },
        products = {
            { name = 'beer', label = 'Beer', weight = 500, price = 10, category = 'alcohol' },
            { name = 'wine', label = 'Wine', weight = 750, price = 25, category = 'alcohol' },
            { name = 'vodka', label = 'Vodka', weight = 750, price = 50, category = 'alcohol' },
            { name = 'whiskey', label = 'Whiskey', weight = 750, price = 60, category = 'alcohol' },
            { name = 'chocolate', label = 'Chocolate Bar', weight = 250, price = 6, category = 'food' },
            { name = 'lighter', label = 'Lighter', weight = 50, price = 2, category = 'tools' },
            { name = 'water_bottle', label = 'Water Bottle', weight = 500, price = 5, category = 'drinks' },
        }
    },
    ["ammunation"] = {
        label = "ation",
        themeLabel = "Ammun",
        theme = "red",
        icon = "fa-solid fa-gun",
        iconColor = "red",
        ped = "s_m_y_ammucity_01",
        scenario = "WORLD_HUMAN_GUARD_STAND",
        paymentMethods = {
            cash = true,
            bank = false
        },
        locations = {
            { coords = vector4(23.11, -1105.65, 29.8, 160.22), enableBilp = true, sprite = 110, color = 1, scale = 0.8, label = "Ammu-Nation" },
            { coords = vector4(-661.6, -933.52, 21.83, 178.9), enableBilp = true, sprite = 110, color = 1, scale = 0.8, label = "Ammu-Nation" },
            { coords = vector4(809.5, -2159.04, 29.62, 359.85), enableBilp = true, sprite = 110, color = 1, scale = 0.8, label = "Ammu-Nation" },
            { coords = vector4(841.8, -1035.3, 28.19, 359.84), enableBilp = true, sprite = 110, color = 1, scale = 0.8, label = "Ammu-Nation" },
            { coords = vector4(253.7, -51.15, 69.94, 68.48), enableBilp = true, sprite = 110, color = 1, scale = 0.8, label = "Ammu-Nation" },
            { coords = vector4(-331.14, 6085.51, 31.45, 225.83), enableBilp = true, sprite = 110, color = 1, scale = 0.8, label = "Ammu-Nation" },
            { coords = vector4(-1304.25, -395.35, 36.7, 73.81), enableBilp = true, sprite = 110, color = 1, scale = 0.8, label = "Ammu-Nation" },
            { coords = vector4(-1118.46, 2700.21, 18.55, 224.06), enableBilp = true, sprite = 110, color = 1, scale = 0.8, label = "Ammu-Nation" },
            { coords = vector4(2567.29, 292.52, 108.73, 359.18), enableBilp = true, sprite = 110, color = 1, scale = 0.8, label = "Ammu-Nation" },
            { coords = vector4(-3173.27, 1088.96, 20.84, 248.57), enableBilp = true, sprite = 110, color = 1, scale = 0.8, label = "Ammu-Nation" },
            { coords = vector4(1692.65, 3761.44, 34.71, 226.62), enableBilp = true, sprite = 110, color = 1, scale = 0.8, label = "Ammu-Nation" },
        },
        products = {
            { name = 'weapon_pistol', label = 'Pistol', weight = 2000, price = 2500, category = 'pistols', requiresLicense = true },
            { name = 'weapon_combatpistol', label = 'Combat Pistol', weight = 2200, price = 3000, category = 'pistols', requiresLicense = true },
            { name = 'weapon_snspistol', label = 'SNS Pistol', weight = 1800, price = 2000, category = 'pistols', requiresLicense = true },
            { name = 'weapon_vintagepistol', label = 'Vintage Pistol', weight = 2300, price = 3500, category = 'pistols', requiresLicense = true },
            { name = 'pistol_ammo', label = 'Pistol Ammo', weight = 200, price = 50, category = 'ammo' },
            { name = 'shotgun_ammo', label = 'Shotgun Ammo', weight = 300, price = 60, category = 'ammo' },
            { name = 'armor', label = 'Body Armor', weight = 5000, price = 1000, category = 'tools' },
            { name = 'weapon_knife', label = 'Knife', weight = 800, price = 200, category = 'tools' },
            { name = 'weapon_bat', label = 'Baseball Bat', weight = 1200, price = 150, category = 'tools' },
            { name = 'weapon_flashlight', label = 'Flashlight', weight = 400, price = 100, category = 'tools' },
            { name = 'parachute', label = 'Parachute', weight = 8000, price = 500, category = 'tools' },
        }
    },
    ["blackmarket"] = {
        label = "Market",
        themeLabel = "Black",
        theme = "red",
        icon = "fa-solid fa-user-secret",
        iconColor = "red",
        ped = "g_m_m_chicold_01",
        scenario = "WORLD_HUMAN_DRUG_DEALER",
        paymentMethods = {
            cash = true,
            bank = false
        },
        locations = {
            { coords = vector4(2471.15, 1572.7, 32.72, 296.26), enableBilp = true, sprite = 500, color = 2, scale = 0.8, label = "Black Market" },
        },
        products = {
            { name = 'weapon_assaultsmg', label = 'Assault SMG', weight = 3500, price = 25000, category = 'rifles' },
            { name = 'weapon_compactrifle', label = 'Compact Rifle', weight = 4000, price = 35000, category = 'rifles' },
            { name = 'weapon_heavypistol', label = 'Heavy Pistol', weight = 2400, price = 5000, category = 'pistols' },
            { name = 'pistol_ammo', label = 'Pistol Ammo', weight = 200, price = 100, category = 'ammo' },
            { name = 'smg_ammo', label = 'SMG Ammo', weight = 250, price = 150, category = 'ammo' },
            { name = 'rifle_ammo', label = 'Rifle Ammo', weight = 300, price = 200, category = 'ammo' },
            { name = 'armor', label = 'Body Armor', weight = 5000, price = 2000, category = 'tools' },
            { name = 'lockpick', label = 'Lockpick', weight = 300, price = 500, category = 'illegal' },
            { name = 'advancedlockpick', label = 'Advanced Lockpick', weight = 500, price = 1000, category = 'illegal' },
            { name = 'phone', label = 'Mobile Phone', weight = 700, price = 200, category = 'electronics' },
        }
    }
}

Other Releases

Scoreboard

Advanced Multi Job

Notify

Custom Plates

Crafting

ATM Hacking

Street Sweeper

Dumpster Diving

Banking

: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 ~1500
Requirements None
Support Yes
3 Likes

could this be used with JG mechanic for the parts shop when getting the parts you need to repair a car? it currently uses just a text list to buy stuff from but it can be set up to work as a shop system like you see for most 24/7s. is it something that could get pre configured to be an option as you have with other stores already?

1 Like

Hey if you just mean adding another shop to buy items from you can add that easy by checking out the preview config.lua file in the post above

Thanks
AP5 Studios

1 Like

Nice looking script

1 Like

Thanks

Good work

1 Like

Thanks

amazing script i like this !

1 Like

Thanks

HAPPY NEW YEAR from AP5 Studios! Right now till 3rd of jan 40% OFF ALL SCRIPTS

1 Like

v1.0.1

Added

  • Added - new config option to enable true or false the shop keeper ped for each market

v1.0.2

Added

  • Added - new config option to check for a item instead of metadata for items that requirelicense = true

v1.0.3

Added

  • Added - new config option to check for a jobs with requiredJobs = {} for each shop also checking for each grade/rank as well

v1.0.4

Added

  • Added - new config options for shops societyAccount & societyPercent so after each sale a % of that can go into a society account like police for example
  • Added - new config option for products minGrade that is checking the requiredJobs to have the minGrade of 1 of those jobs

v1.0.5

Added

  • Added - New config option for items for unique items do unique = true

v1.0.6

ADDED

  • Added - Config.CheckifCanCarry to check if player can carry items before giving items