# [Release] **BlackMarket** — black market tablet

[Release] BlackMarket — black market tablet

Standalone NUIox_inventory (stash + images) • ox_target / qtarget / ox_lib (E)Canvas UIPublic crates


:link: Links

:shopping_cart: STORE (Tebex): https://luamaster-scripts.tebex.io/

:clapper: VIDEO (YouTube):

https://youtu.be/RVqfr-PDbJw

VIDEO


:sparkles: What is it?

BlackMarket is a lightweight, canvas (<canvas>) NUI for FiveM that delivers a clean “black market” purchase → pickup loop:

  • :basket: Cart → Checkout
  • :person_standing: Pay at an NPC (dynamic positions)
  • :package: World crate with a code
  • :globe_with_meridians: Auto-public after a set time — anyone can claim the crate
  • :compass: Blips, waypoints, interactions via ox_target, qtarget, or simple E (ox_lib)

One canvas = fewer DOM elements, smooth animations, and consistent visuals.


:white_check_mark: Features

  • Full flow: cart → order → payment → pickup → auto “public.”
  • Ownership & code: before it goes public, only the owner (or anyone with the code) can open the crate.
  • Public tab: a dedicated Public tab on the tablet to browse public orders.
  • Interaction adapter: ox_target, qtarget, or minimalist E (ox_lib) — auto-detected or forced via Config.Interaction.
  • OX integration: separate stash per crate (e.g. bm_crate_<id>), item icons from ox_inventory web.
  • Persistence: orders saved to orders.json and restored on restart.
  • Localization: Config.Locale + Config.UIStrings.
  • Single UI file: everything rendered in one <canvas> (crimepad.standalone.js).

:package: Requirements

Code is accessible Yes/No
Subscription-based No
Lines (approximately) ABOUT 2000
Requirements ox_inventory ox_lib
Support Yes

Works standalone (framework-agnostic). Compatible with ESX/QBCore via ox_inventory.


:wrench: Configuration (snippet)

config.lua

-- Language and locales
Config.Language = 'en'

-- How the UI opens (item / command)
Config.UIOpen = { Item = 'blackpad', Command = 'blackmarket' }

-- Time until public (seconds)
Config.PickupAccess = { PublicAfterSeconds = 600 }

-- Interaction method: 'ox_target' | 'q_target' | 'ox_lib'
Config.Interaction = 'ox_target'
Config.InteractionDistance = 2.0

-- Currency and UI buttons (via UIStrings)
Config.UIStrings = { ['en'] = { currency = '€', buttons = { pay = 'PAY', claim = 'CLAIM' } } }

-- NPC / Pickup spawns
Config.NpcSpawns = { vec4(1546.20, 1711.10, 109.79, 130.39) }
Config.PickupSpawns = { vec4(1542.26, 1707.79, 109.88, 161.57) }

-- Items (categories: items, weapons, other, ammo)
Config.Items = {
  items = {
    { item = 'fakeid',     name = 'Fake ID',      price = 4200, illegal = true, emoji = '🪪' },
    { item = 'lockpick',   name = 'Lockpick PRO', price = 1800, illegal = true, emoji = '🗝️' },
  },
  other = {
    { item = 'rope', name = 'Rope', price = 400, illegal = false },
  }
}

:keyboard: Commands / Opening

  • By item: give the player blackpad (or your custom item) – opens the UI.
  • By command: /blackmarket (if enabled via Config.UIOpen.Command).

:toolbox: Interaction adapter

Unified API in client/interactions.lua:

  • If ox_target is present → exports.ox_target:addLocalEntity.
  • If qtarget is present → exports.qtarget:AddTargetEntity.
  • Otherwise — E TextUI via ox_lib with canInteract and distance checks.

The prompt label reflects the active mode: ox_target / q_target / E.


:shopping_cart: Item icon paths

The UI reads nui://ox_inventory/web/images/<item>.png|.webp when present. You can also specify a custom icon per item for the grid.


:test_tube: Tips

  • Need fast testing of the “public” state? Set Config.PickupAccess.PublicAfterSeconds = 30.
  • Using only E interactions? Set Config.Interaction = 'ox_lib'.
  • Want variety? Add multiple vec4 positions for NPCs and pickups.

:question: FAQ / Troubleshooting

Q: I don’t have ox_target, but I want interactions.
A: Use qtarget or simple E (ox_lib). The adapter auto-picks if Config.Interaction doesn’t match what’s available.

Q: The crate won’t open.
A: Ensure the order is paid and hasn’t gone public yet. The owner doesn’t need the code.

Q: Icons don’t show.
A: Make sure ox_inventory has web/images/<item>.(png|webp) or set an icon manually.

:camera_flash: Screenshots







More Scripts

:speech_balloon: Feedback / suggestions

Drop your ideas or issues below. Enjoy! :dart:

1 Like

20% OFF all our scripts — use SAVE20 at checkout.
Optimize your costs and upgrade your server for less. The code applies storewide.

How to redeem

Go to our store: https://luamaster-scripts.tebex.io/,
Add any scripts to cart,
Enter SAVE20 at checkout to get 20% OFF,

Why now?

Storewide discount (no minimum spend),
Easy setup & active support,
Perfect time to refresh your server,

Get the deal: https://luamaster-scripts.tebex.io/
Limited-time offer.

1 Like