Skip to content

Overview

A complete player-to-player marketplace for ESX servers — with auctions, trades, in-person meetups and courier vans that other players can rob.

  • 7 ways to sell: fixed price, auction, blind auction, Dutch auction, reverse auction, barter and bundles.
  • 4 ways to deliver: instant, pickup point, NPC courier and in-person meetup.
  • Robbable deliveries: the courier van drives through the city and any player can hold up the driver and force the cargo hold with a timing minigame.
  • Real negotiation: chat per listing, price offers, item-for-item trades and counteroffers.
  • Seller identity: storefronts, ratings, reputation, a verified badge, followers and price alerts.
  • Full admin panel and a server-side security model: every action is validated on the server.
  • Fully bilingual: English and Spanish per player — interface and every in-game message — and you can add your own language.
  • Modern interface: 5 colour themes, no external CDN needed to load it.
  • Built to be customised: open config.lua, 38 server hooks and 21 client events to connect your own scripts.
Sale type How it works
Fixed price Classic listing. Buyers purchase it instantly.
Auction Bids go up. Automatic anti-snipe extends the auction when someone bids in the last seconds. Optional Buy Now price.
Blind auction Bids stay hidden until the end; the highest wins.
Dutch auction The price starts high and drops every few minutes until someone buys or it reaches the floor.
Reverse auction The buyer posts what they want and a maximum budget (locked in escrow); sellers compete with offers.
Barter Trade items for items, optionally with money on top.
Bundle Pack 2–8 items into a single listing.

Also included:

  • Photos taken in game with a free camera (up to 4 per listing), hosted on Imgbb. Without photos, the item icon is used.
  • Vehicles and weapons: sell owned vehicles with all their tuning, and weapons with their ammo and components.
  • Flash sales (temporary 10–70 % discount), featured listings (paid, pinned to the top) and bump (move an expired listing back up).
  • Price history of each item when you publish, so sellers can price fairly.
  • Categories and rarities detected automatically from your item catalogue, with a minimum price per rarity.
  • Proxy bidding: set a maximum and the script bids for you up to that amount.
  • Delivery chosen by the buyer: sellers mark their preferred modes; if the buyer picks another one, they pay a small extra that goes to the seller.
  • Mailbox: everything a player receives (items, money, refunds) waits there until they collect it.
  • Ratings (1–5 ★) after each purchase, which build the seller’s reputation.
  • Refunds: the buyer can request one within a time window; the seller accepts or rejects it, and it is approved automatically if the seller does not answer.
Mode What happens
Instant The item goes straight to the buyer’s inventory (or their mailbox if it is full).
Pickup point The buyer collects it from an NPC at one of the pickup points on the map (configurable).
NPC courier A van with a driver drives the order to the buyer — and it can be robbed on the way.
In person Buyer and seller agree on a place in the chat and meet in the world to swap.

When a buyer chooses NPC courier, a delivery van spawns nearby and drives to them. Any other player who finds it can rob it:

  1. Stop the driver. Aim a weapon at the driver from close range and they give up (engine off, hands up). Killing the driver also works.
  2. Go to the cargo hold. A “press E” prompt appears on the back of the van.
  3. Beat the minigame. A ring turns and a coloured band sits somewhere on it: press the key shown while the needle crosses the band. There are 3 phases, each faster, narrower and on a different key (E, Q, R or F, shuffled every time).
  4. Keep your nerve. The attempt is interrupted if you move away from the van, run, shoot or take damage.
  5. 3 attempts per player and van. Missing a phase costs an attempt; being shot or the van driving off does not. With all three used, that lock is broken for you — someone else can still try.

Outcome:

Who What happens
Thief Gets the package in their inventory.
Buyer Loses the order and is notified who took it. If the buyer robs their own van, it counts as an early delivery.
Seller Is only paid if the buyer bought delivery insurance at checkout (by default the seller receives 80 % of the price).

For the server owner:

  • Turn robberies off entirely with Interceptable = false, or set a minimum order value.
  • By default there is no blip: thieves have to find the van. You can alert a job (e.g. 'robber') with a blip when an interceptable delivery starts (NotifyJob).
  • Connect a police alert in Config.OnDeliveryRobbed or the OnDeliveryRobbed handler.
  • The minigame (speed, width of the band, keys, sounds) is fully tunable in Config.SkillCheck.
  • If the van is destroyed or does not arrive in time, the buyer is refunded automatically.
  • Everything is validated on the server: distance, models, timings and attempts cannot be faked from the client.
  • Chat per listing with an inbox, read status and system messages.
  • Price offers and reverse-auction offers inside the chat.
  • Barter proposals with items + money, counteroffers, acceptance and cancellation. Offered items are held in escrow so nobody can scam.
  • In-person meetups: propose your current position, a point on the map or a preset location; the other player accepts or declines; a blip, a route and a time window appear only after both agree.
  • Share your location or your phone contact from the chat.
  • Shop profile: unique shop name, bio, avatar colour and preferred language.
  • Storefront: banner, long description, up to 3 pinned listings, and tabs for active listings, sales, ratings and “about”.
  • Verified badge, awarded automatically (by default: 50 sales, 4.5 ★ average and 10 ratings).
  • Follow sellers and get notified of their new listings (notifications can be muted per seller).
  • Price alerts: get notified when an item is listed below the price you set.
  • Favourites, and reports with configurable reasons (listings are hidden automatically after several reports).
  • 5 themes: Cash (default), Indigo, Gold, Vice and Mono. Saved separately for each character on the current device.
  • English and Spanish, chosen per player: the interface, notifications, prompts in the world and mailbox notes all follow it. Add any language by copying a file in locales/.
  • Command palette (Ctrl+K) to jump anywhere, filters, sorting and pagination.
  • Notifications grouped like a phone, with sounds on key events.
  • World markers and “press E” prompts drawn by the script and anchored to the courier, the meeting point or the van — they follow the player’s theme.
  • Vue 3, icons and fonts are bundled with the resource: the interface loads without any CDN.

/marketadmin opens a panel with:

  • Overview with live indicators.
  • Listings (search, preview, cancel), reports (review, dismiss), users (ban, unban), refunds (force).
  • History and operations (deliveries and trades), read-only.
  • Every action asks for confirmation and is checked on the server against the marketplace.admin permission.

Also: per-action rate limiting, automatic cleanup of old data and optional Discord logs per event.

  • 38 server hooks in server/handlers.lua: 8 guards that can block an action (CanCreateListing, CanBuyListing, CanPlaceBid…) and 30 notifications (OnSaleCompleted, OnDeliveryRobbed…). An error in your code is caught and logged; it never breaks the sale.
  • 21 client events in client/handlers.lua (sl-marketplace:onPurchaseCompleted, onOutbid, onSkillCheckFinished…), for sounds, HUD or phone notifications.
  • Config.Notify to use your own notification system (ox_lib, okokNotify…).
  • /markethandlers shows which hooks ran, their errors and slow calls.