Overview
A complete player-to-player marketplace for ESX servers — with auctions, trades, in-person meetups and courier vans that other players can rob.
Highlights
Section titled “Highlights”- 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.
Features
Section titled “Features”Selling
Section titled “Selling”| 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.
Buying and auctions
Section titled “Buying and auctions”- 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.
Delivery modes
Section titled “Delivery modes”| 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. |
Courier robberies
Section titled “Courier robberies”When a buyer chooses NPC courier, a delivery van spawns nearby and drives to them. Any other player who finds it can rob it:
- 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.
- Go to the cargo hold. A “press E” prompt appears on the back of the van.
- 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).
- Keep your nerve. The attempt is interrupted if you move away from the van, run, shoot or take damage.
- 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.OnDeliveryRobbedor theOnDeliveryRobbedhandler. - 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, offers and trades
Section titled “Chat, offers and trades”- 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.
Profiles and social
Section titled “Profiles and social”- 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).
Interface
Section titled “Interface”- 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.
Administration
Section titled “Administration”/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.adminpermission.
Also: per-action rate limiting, automatic cleanup of old data and optional Discord logs per event.
For developers
Section titled “For developers”- 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.Notifyto use your own notification system (ox_lib, okokNotify…)./markethandlersshows which hooks ran, their errors and slow calls.