Oxide Drugselling

Street, corner and trap phone drug selling for FiveM — NPC clients who text orders, hand-offs and dead drops, heat and witnesses, and police tools for seized phones and stings.

oxide-drugselling gives players three ways to sell drugs: offer to any pedestrian on the street, work a corner while buyers walk or drive up, or run a TrapFone burner phone full of NPC clients who text orders, haggle, and meet at a booked time or collect from a dead drop. Every price, refusal, robbery and police alert is decided on the server.

Heat, witnesses and the in-game time of day shape how risky each deal is. Police can read seized phones, trace burner numbers, send phone reports to an MDT case, and post undercover buyers with a sting phone.

The shipped package prices weed, meth, cocaine and pills, but the system is not limited to them. New drug types are added through Config.Drugs by listing the sellable items, how their metadata is grouped, optional progression exports, and an ordered pricing modifier pipeline.

Key Features

  • Street selling — A global ped interaction through o-link.target brings an ambient pedestrian over and opens a cinematic sell panel.
  • Corners — Players start a corner wherever they stand with /corner or the radial menu. Buyers ask for a drug from a configurable demand list, mostly one the player carries, and pay a per-drug multiplier for what they asked for.
  • Trap phone — Each phone item carries its own number, PIN, battery and client book. NPC clients with personas, hours and trust text orders; players accept, counter or cut the quantity, then book a hand-off or a dead drop.
  • Meets and dead drops — Hand-offs check position, timing and travel speed. Dead drop bags and cash sit in the world, where anyone can take them.
  • Reputation and bulk buyers — Client trust builds a phone's reputation tier, which raises order rates, book size and price tolerance, and unlocks bulk buyers with bodyguards.
  • Heat and witnesses — Area, corner, dealer and phone-number heat decays over time and raises refusal, alert and robbery odds. Nearby NPCs can crowd a buyer off or call it in.
  • Police tools — Evidence view on seized phones, number traces, MDT bridges in server/integrations/evidence/, a sting phone and a delayed heat map.
  • Burner life — SIM swaps, destroying a phone, battery and charging, no-signal areas, burner-to-burner texting and passing a meet to a crew member.
  • Metadata-aware inventory grouping — Sellable items are grouped by a configurable metadata key so different strains, variants, batches or quality tiers never mix in one sale.
  • Pricing pipeline engine — Fair price is calculated from base price, multiplier modifiers and bonus modifiers in the order defined per drug type, including prices set by the drug's own resource.
  • Dirty money abstraction — Payouts and robbery deductions use the framework's own dirty money, an o-link money account or an inventory item.
  • Live in-game configuration — Almost every setting is edited with /drugselling settings, stored in the database and applied without a restart. Drop spots and no-signal areas are placed in the world.
  • Optional source-resource progression — Drug types can call exports on their source resources for level gating, XP awards, sold tracking and trait lookups. Missing resources degrade gracefully instead of blocking selling.

Requirements

Required

ResourcePurpose
o-link (1.9.1 or newer)Framework and system abstraction layer used by the resource
ox_libLocale and utility helpers
oxmysqlStores phones, clients, messages, orders, dead drops, heat and live settings
A targeting resourceThe Offer Drugs option on pedestrians

Optional

ResourcePurpose
oxide-weedWeed level checks, XP/sold tracking, and strain trait pricing bonuses
oxide-methMeth XP/sold tracking
oxide-cocaineCocaine/crack XP/sold tracking
oxide-pillsPill pricing by buyer, batch, packing and brand, plus XP/sold tracking
oxide-gangsTerritory price and buyer-density modifiers, and sale influence reporting
oxide-policeSeized-phone reports attached to MDT cases
oxide-weatherServer-side in-game clock
  • callback
  • framework
  • character
  • job
  • money
  • inventory
  • dispatch
  • notify
  • target
  • radial
  • helptext
  • progressbar
  • placement
  • gang
  • weather
  • logger (opt-in audit logging through oxide-logger)
  • framework lifecycle events

Database

Seven tables, created automatically on first start (sql/install.sql holds the same statements for a manual install): oxide_settings (live configuration), drugselling_heat, drugselling_phones, drugselling_clients, drugselling_messages, drugselling_orders and drugselling_drops.

Frontend

The packaged UI is Vue 3 + Vite and powers:

  • the sell panel for street offers, corner buyers, meet hand-offs and dead drops
  • the TrapFone trap phone, evidence view and sting phone
  • dead drop markers
  • the admin settings editor

Supported Frameworks

FrameworkSupport
QBCoreFull
QBX (qbx_core)Full
ESXFull, with a supported inventory
OthersAny framework o-link supports

Trap phones need an inventory that keeps item metadata. See Installation → Which inventory you need.

Quick Start

Place oxide-drugselling in your resources folder and start it after o-link:

server.cfg
ensure ox_lib
ensure oxmysql
# your framework, inventory and targeting resources

ensure o-link
ensure oxide-drugselling

Add the four items (trap_phone, trap_sim, trap_charger, sting_phone) to your inventory and copy their images. See Installation → Adding the items.

Restart the server. The resource creates its own database tables on the first start.

As an admin, run /drugselling settings and check Police jobs, Sale money, and the evidence and sting jobs. Settings live in the database from the first start; the menu is where you change them.

Run /drugselling kit for a trap phone, SIM, battery pack and sting phone, then try a street sale, /corner and the phone. See Installation → Verification.

Documentation