Configuration
Client (configs/main.lua)
Debug
- Type:
boolean - Default:
true - Description: Enables verbose debug output. Set to
falsebefore going live. Whentrue, also auto-assigns a KingPin in debug mode so the outpost can be tested without players.
Items
- Type:
table - Description: Item names used by the script.
| Key | Default | Description |
|---|---|---|
exchangeCard | "outposts_exchange_card" | Access card swiped at outpost doors |
taxiClue | "outposts_clue_taxi" | Clue item revealing a taxi-related outpost location |
deliveryClue | "outposts_clue_delivery" | Clue item revealing a delivery-related outpost location |
washingClue | "outposts_clue_washing" | Clue item revealing a washing-related outpost location |
Outposts (configs/outposts.lua)
Defines the three possible outpost locations. Two are randomly selected at server start - one assigned money type, one assigned drug type.
Each entry in the Outposts table contains:
| Field | Type | Description |
|---|---|---|
interior | vector3 | Centre coordinate of the outpost area; used to load the interior |
scene.money.input | table | Prop model and coords for the money laundering input table |
scene.drug.input | table | Prop model and coords for the drug selling input table |
corners | vector4[] | Array of dealer spawn positions with heading; must have at least MaxPedsPerOutpost entries |
doors | table[] | Array of door entries, each with a model hash and coords (vector3) for ox_doorlock |
Dealer Profiles (configs/ped_profiles.lua)
The PedProfiles table defines all hireable dealer NPCs. Each entry has:
| Field | Type | Description |
|---|---|---|
name | string | Display name shown in the Market UI |
model | hash | GTA ped model used when spawning this dealer |
image | string | Image key for the Market UI avatar |
personality | string | Flavour text shown on the dealer card |
price | number | Cash cost to hire this dealer |
stats.speed | number (1–100) | Higher = sells faster (shorter passive sell interval) |
stats.weight | number (1–100) | Higher = larger quantities per transaction |
stats.talking | number (1–100) | Negotiation skill affecting deal success |
stats.split | number (1–100) | Dealer's profit cut percentage |
Default Dealer Roster
| Name | Price | Speed | Weight | Talking | Split |
|---|---|---|---|---|---|
| Rico "The Connect" Martinez | $10,000 | 100 | 100 | 100 | 85 |
| Salvador "Sal" Mendoza | $8,500 | 95 | 100 | 90 | 60 |
| Maria "La Reina" Vasquez | $7,500 | 80 | 85 | 20 | 90 |
| Kim "The Dragon" Park | $7,000 | 100 | 15 | 80 | 65 |
| Miguel "El Diablo" Santos | $6,000 | 45 | 100 | 25 | 75 |
| Destiny "D-Money" Johnson | $6,000 | 30 | 35 | 95 | 85 |
| Vincent "Vinnie" Friedlander | $5,500 | 25 | 40 | 100 | 70 |
| DeShawn "D-Block" Brown | $5,000 | 25 | 20 | 85 | 95 |
| Candy "Sweet" Rodriguez | $4,800 | 20 | 25 | 100 | 78 |
| Marcus "M-Dog" Williams | $4,500 | 90 | 25 | 15 | 88 |
| Big Tony "The Enforcer" Romano | $4,000 | 15 | 95 | 10 | 95 |
| Spike "The Punk" Thompson | $3,500 | 100 | 10 | 5 | 92 |
Server (configs/server.lua)
MaxPedsPerOutpost
- Type:
number - Default:
4 - Description: Maximum number of dealer NPCs that can be active at one outpost simultaneously. Each outpost config must have at least this many
cornersentries.
PaymentItem
- Type:
string - Default:
"cash" - Description: The inventory item given to players as payment when collecting laundered money.
DealerStash
- Type:
table - Description: Inventory limits for each dealer's personal stash.
maxSlots- number of stash slots (default4)maxWeight- maximum stash weight (default100.0)
RotationInterval
- Type:
number(seconds) - Default:
1200(20 minutes) - Description: How often dealer NPCs shuffle to new corner positions within the outpost.
SellingInterval
- Type:
number(seconds) - Default:
60(20 minutes) - Description: How often dealer NPCs sells their goods on their corner position.
MoneyItems
- Type:
string[] - Default:
{ "cash", "money" } - Description: List of item names accepted as payment at money outposts.
MoneyWorth
- Type:
table - Description: Exchange rate for each money item.
["ruby"] = 137means 1 rub item = $137.
MoneyCounts
- Type:
table - Description: Min/max cash quantity range per laundering transaction. Example:
["ruby"] = { 1, 2 }gives between the minimum between item count, min and max, e.g. ruby would give 1 ruby per transaction if you were selling 2 or 3.
DrugItems
- Type:
table - Description: Array of drug item definitions supported by drug outposts. Each entry has:
name(string) - inventory item namedurability(table, optional) -{ min, max }durability range; used for items likemeththat have quality tiersmin(table) - randomised minimum quantity range{ lower, upper }max(table) - randomised maximum quantity range{ lower, upper }maxPerOffer(number) - maximum amount of this drug offered in a single deal
Supported Drugs (defaults)
| Item | Durability | Quantity Range |
|---|---|---|
weed_1a | - | 12–35 |
weed_2a | - | 10–45 |
weed_2b | - | 10–45 |
joint_1a | - | 35–53 |
joint_1b | - | 35–53 |
joint_2a | - | 50–59 |
joint_2b | - | 50–59 |
joint_2c | - | 50–59 |
meth | 1–25 | 24–33 |
meth | 26–50 | 43–53 |
meth | 51–75 | 69–79 |
meth | 76–99 | 100–115 |
meth | 100 | 135–152 |
cocaine | - | 260–300 |
Rep
- Type:
table - Description: Optional reputation reward given on each successful sale.
enabled(boolean) -falseby default; set totrueto enabletype(string) - reputation type passed toprp-bridge(e.g."crime")amount(number) - reputation points awarded per sale (default5)
DispatchAlert
- Type:
table - Description: Police dispatch alert configuration for drug sales.
jobs- police job names that receive the alert (default{ "police" })code- radio code (default"10-90")title/description- alert text (set via locales)blip.sprite,blip.scale,blip.colour- map blip appearanceblip.duration- blip duration in seconds (default150, ~2.5 minutes)
INFO
The dispatch alert fires with a 10% probability on each completed sale. It is not guaranteed every transaction.
Server Convars
| Convar | Default | Description |
|---|---|---|
sv_minPlayersForExchange | 0 | Minimum online player count required for any player to take KingPin control of an outpost |
Set this in server.cfg:
set sv_minPlayersForExchange 3Developer Integration
server/editable.lua
Contains the ToggleOutpostDoor(doorName, doorState) function that locks/unlocks outpost doors via ox_doorlock:
lua
function ToggleOutpostDoor(doorName, doorState)
exports.ox_doorlock:setDoorState(doorName, doorState)
endModify this function if you use a different door lock resource.