F5 StudioF5 Studio
Skip to main content

Features

F5 Shadow Market is a complete dark-web player marketplace: anonymous sellers list real inventory items as auctions or buy-now, buyers bid, bargain or buy outright, money is held in escrow, the item changes hands through a physical package delivery, and buyers leave reviews. An encrypted in-app chat ties buyers and sellers together.

Anonymous Identities

Every seller and bidder appears under a stable anonymous handle like Shadow#1234 (prefix from F5Cfg.Market.anonymousPrefix). The mapping from citizen id to handle is stored in f5_shadowmarket_identities, so a player keeps the same handle across sessions. Real names are never shown to other players in the market — only admins see identities (in the admin panel).

Listings

A player opens the market, picks an item from their inventory, and creates a listing. Listing options:

FieldNotes
TypeBuy-now or Auction
Item & amountAny item that passes the item filter
Title / descriptionFree text
Start priceClamped to minPricemaxPrice
Buyout priceClamped to minBuyoutmaxBuyout (auctions: optional instant-win price)
DurationOne of F5Cfg.Market.durations (1h / 6h / 12h / 24h / unlimited)

Limits and fees:

  • A seller can have at most maxActiveListings (default 10) active listings.
  • A listing fee applies — percent or flat (feeMode), charged either upfront (on_create) or deducted from the payout (on_sale). See Configuration → Fees & Cuts.
  • The item is taken from the seller's inventory when the listing is created and held until the sale completes or the listing is cancelled/expires (then it's returned).
  • Unlimited duration is buy-now only; auctions clamp an unlimited choice to the longest timed duration.

Favorites

Buyers can favorite listings to track them. Favorites of closed listings are purged after favoriteRetentionDays (default 2). If a seller discounts a favorited listing, the buyer can be notified.

Auctions

  • Bidders place bids; each new bid must beat the current one by at least max(minBidIncrement %, minBidIncrementFlat). The first bid must be ≥ the start price.
  • The bid amount is escrowed from the bidder immediately. When someone outbids them, the previous bidder is refunded automatically.
  • If a bid meets or exceeds the optional buyout price, it triggers an instant win (treated as a buyout purchase).
  • When the auction's timer expires with at least one bid, it concludes: the highest bidder wins, an order is created, the winning bid is marked accepted and all other bids declined, and both parties are notified.
  • Closed auctions remain visible in the bidder's "My bids" view for bidHistoryRetentionDays (default 2).

Buy-Now

  • A buyer purchases instantly at the buyout (or start) price. The amount is escrowed and an order is created.
  • Any leading auction bid or pending bargain on the listing is refunded when a buy-now completes.

Bargaining

On buy-now listings, buyers can negotiate (when F5Cfg.Bargain.enabled):

  1. The buyer sends a counter-offer at a lower price. The offer amount is escrowed.
  2. The offer must be at least ceil(buyout * (1 - maxDiscount)) (default ≥ 70% of buyout, rounded up) and below the buyout.
  3. The seller can accept, decline, counter (a higher price), or cancel.
    • Accept → the sale completes at the agreed price (escrow already held).
    • Decline → the buyer's escrow is refunded, and the seller's decline counter increments.
    • Counter → the negotiation continues at a new price; escrow is adjusted.
  4. After the seller declines maxOffers times (default 5), the buyer is locked out of offering on that listing.

allowOnDiscounted controls whether buyers can still bargain on listings the seller already marked down.

Seller Discounts

Sellers can mark down their own buy-now listings (when F5Cfg.Discount.enabled):

  • Each cut must lower the price by at least minStepPercent (default 5%).
  • Cuts are rate-limited by cooldownMinutes (default 10) per listing.
  • The original price is recorded so the UI can show a "was / now" markdown.
  • When notifyFavorites is on, buyers who favorited the listing are notified of the drop.
  • Any pending bargain offer at or above the new price is voided (and refunded).

Escrow & Payout

Money is held in escrow from the moment of purchase / winning bid until the buyer collects the package:

  • On pickup the seller is paid price − platformCut − (listingFee if charged on_sale).
  • If an order expires (the seller never drops off, or the buyer never collects), the buyer is refunded in full and the item is returned to the seller. If the seller's inventory is full at return time, the item is flagged for the seller to claim later.

Package Delivery

The item doesn't teleport between inventories — it's physically handed over.

  1. After a sale, the seller opens their Orders and starts a dropoff. A placement mode opens to position the package prop.
  2. The seller must place the package within maxDropoffDist (default 24 m) of themselves and confirm. The order becomes ready.
  3. The buyer receives a notification, a map blip and can set a GPS waypoint to the dropoff.
  4. The buyer walks up and collects the package via your target system (or from the Orders panel when no target is configured). The item is added to the buyer's inventory and the seller is paid.

Timeouts: the seller has dropoffTimeoutHours (default 24) to drop, and the buyer has pickupTimeoutHours (default 24) after dropoff to collect. Missing either window expires the order and refunds the buyer.

Visibility: with visibility = 'parties' only the buyer and seller see the package; 'everyone' makes it visible to anyone nearby. Props spawn within renderDistance and sync on the syncInterval.

Placement Mode

When the seller drops a package, a ghost-preview placement mode opens:

ActionDefault control
Aim / positionMouse
RotateScroll wheel
Zoom (push/pull)ALT + scroll
PlaceMouse Left
CancelMouse Right

The ghost turns red when the spot is invalid (too far from the seller, or blocked) and white when valid. Tuning lives in F5Cfg.Placer and F5Cfg.Controls.

Reviews & Ratings

After an order concludes, the buyer can rate the seller within reviewWindowHours (default 24):

  • 1–5 stars (half-stars supported) plus an optional comment.
  • Reviews build the seller's public profile — average rating, total reviews and total sales.
  • One review per order. Admins can hide, unhide or delete reviews from the admin panel.

In-App Chat

Buyers and sellers get an encrypted-style chat thread per listing:

  • Text messages, plus inline bargain offers and dropoff notices appear in the thread.
  • Unread counts surface in the UI; threads for concluded listings are purged automatically by the cleanup sweep.

Notifications

An in-app inbox (f5_shadowmarket_notifications) collects events relevant to the player — outbid, sold, ready for pickup, price drops on favorites, reviews, and more. Old notifications are purged after notificationRetentionDays (default 7); notifications about concluded entities are purged sooner (after notificationStaleGraceMinutes). sale_completed and review notifications are protected from auto-purge.

Sounds

The NUI has a sound layer (F5Cfg.Sounds) — UI interactions play styled sounds, with a master toggle and a default volume that players can override in the UI.

See Also