Configuration

Reference for the current oxide-blackmarket config layout and tunable gameplay systems.

Reference for the current oxide-blackmarket config layout.

Config File Map

FilePurpose
shared/config.luaRuntime settings, rep, pager, police, loot, hit squad, locations
shared/items.luaSellable items, shop tiers, and rep-tier helper

General Settings

File: shared/config.lua

SettingTypeDefaultDescription
Config.DebugbooleantrueEnables [oxide-blackmarket] debug logging
Config.EnableTiersbooleantrueEnables rep gain/loss, tier notifications, and tier-gated inventory
Config.RelocationIntervalnumber2700000Dealer relocation interval in ms
Config.DealerWeaponstring'WEAPON_PISTOL'Dealer weapon used on spawn and breakout
Config.DealerModelstring's_m_y_dealer_01'Dealer ped model

Dirty Money

File: shared/config.lua

SettingTypeDefaultDescription
Config.DirtyMoney.modestring'account''account' uses olink.money, 'item' uses an inventory item
Config.DirtyMoney.accountstring'cash'Money account name when using account mode
Config.DirtyMoney.itemstring'black_money'Item name when using item mode

Account mode example:

Config.DirtyMoney = {
    mode = 'account',
    account = 'cash',
    item = 'black_money',
}

Item mode example:

Config.DirtyMoney = {
    mode = 'item',
    account = 'cash',
    item = 'black_money',
}

Blips and Discovery

File: shared/config.lua

SettingTypeDefaultDescription
Config.BlipDetectionRangenumber200.0Range to trigger flash blips
Config.BlipCooldownnumber120000Cooldown between flashes in ms
Config.BlipSpritenumber140Dealer blip sprite
Config.BlipColornumber1Dealer blip color

Config.BlipDuration defines flash length by tier:

Config.BlipDuration = {
    [0] = 3000,
    [1] = 4000,
    [2] = 5000,
    [3] = 6000,
    [4] = 10000,
}

Reputation

File: shared/config.lua

SettingTypeDefaultDescription
Config.KillPenaltynumber500Rep removed when the dealer is killed

Tier definitions:

Config.Tiers = {
    [0] = { name = 'tier.unknown', minRep = 0 },
    [1] = { name = 'tier.street', minRep = 100 },
    [2] = { name = 'tier.connected', minRep = 300 },
    [3] = { name = 'tier.trusted', minRep = 600 },
    [4] = { name = 'tier.inner_circle', minRep = 1000 },
}

Pager

File: shared/config.lua

SettingTypeDefaultDescription
Config.PagerCooldownnumber300000Cooldown in ms

Success chance by tier:

Config.PagerSuccessChance = {
    [2] = 0.40,
    [3] = 0.70,
    [4] = 1.00,
}

Police and Arrest

File: shared/config.lua

SettingTypeDefaultDescription
Config.ArrestRewardnumber5000Cash paid to the arresting officer
Config.DepartmentCutnumber2500Police account deposit amount
Config.ArrestRespawnDelaynumber900000Respawn delay after arrest
Config.DeathRespawnDelaynumber600000Respawn delay after death
Config.SubduedDeathPayoutnumber500Department payout if a surrendered dealer is killed
Config.ArrestDistancenumber3.0Client-side prompt distance for arrest
Config.PoliceJobstablesee fileJob names treated as police

Default police jobs:

Config.PoliceJobs = { 'police', 'sheriff', 'bcso', 'sast', 'sasp' }

Dispatch Alerts

File: shared/config.lua

Config.DispatchAlerts contains transaction and proximity alert configs.

Common fields:

FieldTypeDescription
enabledbooleanTurns the alert on or off
chancenumberTrigger probability from 0.0 to 1.0
messagestringLocale key or message passed to dispatch
codestringDispatch code
iconstringFont Awesome icon
timenumberBlip lifetime in ms
bliptableBlip appearance

proximity also includes range.

Death and Loot

File: shared/config.lua

SettingTypeDefaultDescription
Config.BodyFadeDelaynumber45000Body fade delay in ms
Config.DeathNotifyRadiusnumber500.0Radius for death notifications
Config.DeathNotifyMinTiernumber1Minimum tier to receive death notifications
Config.LootDropEnabledbooleantrueEnables loot bags on death
Config.LootCashMinnumber500Minimum loot cash
Config.LootCashMaxnumber2500Maximum loot cash
Config.LootStockPercentnumber0.3Portion of remaining stock used for loot counts
Config.LootMaxItemsnumber5Max distinct item types in one loot bag
Config.LootBagModelstring'prop_cs_heist_bag_01'Loot bag prop model
Config.LootBagDespawnTimenumber300000Loot despawn time in ms

Target Settings

File: shared/config.lua

SettingTypeDefaultDescription
Config.TargetDistancenumber2.5Dealer target distance
Config.TargetIconstring'fas fa-handshake'Dealer target icon
Config.TargetLabelstring'target.trade_dealer'Locale key for the target label

Hit Squad

File: shared/config.lua

SettingTypeDefaultDescription
Config.HitSquadEnabledbooleantrueEnables hit squad retaliation
Config.HitSquadEscapeDistancenumber500.0Distance needed to lose the squad
Config.HitSquadCheckIntervalnumber1000General AI state check interval
Config.HitSquadFootEngageDistancenumber50.0Distance where they switch to foot combat
Config.HitSquadDriveSpeednumber80.0Chase speed
Config.HitSquadSpawnDistMinnumber350.0Minimum spawn distance from the death location
Config.HitSquadSpawnDistMaxnumber450.0Maximum spawn distance from the death location
Config.HitSquadTaskRefreshIntervalnumber5000Task refresh interval
Config.HitSquadDifficultystring'medium'Difficulty preset
Config.HitSquadCombatMovementnumber2Combat movement style
Config.HitSquadCombatRangenumber2Combat range

Vehicles:

Config.HitSquadVehicles = {
    'sultan',
    'sultan2',
    'oracle',
    'oracle2',
    'schafter2',
    'tailgater',
}

Ped models:

Config.HitSquadPedModels = {
    'a_m_m_business_01',
    'a_m_y_business_01',
    'a_m_y_business_02',
    'a_m_m_soucent_01',
    'g_m_m_mexboss_01',
}

Weapons:

Config.HitSquadWeapons = {
    easy = {
        'WEAPON_PISTOL',
        'WEAPON_PISTOL',
        'WEAPON_PISTOL',
        'WEAPON_PISTOL',
    },
    medium = {
        'WEAPON_PISTOL50',
        'WEAPON_SMG',
        'WEAPON_SMG',
        'WEAPON_PUMPSHOTGUN',
    },
    hard = {
        'WEAPON_COMBATPISTOL',
        'WEAPON_ASSAULTRIFLE',
        'WEAPON_ASSAULTRIFLE',
        'WEAPON_CARBINERIFLE',
    },
}

Combat ability:

Config.HitSquadCombatAbility = {
    easy = 50,
    medium = 75,
    hard = 100,
}

Surrender and Flee

File: shared/config.lua

SettingTypeDefaultDescription
Config.FleeDistanceThresholdnumber8.0Distance that can trigger flee checks
Config.FleeChancenumber0.35Chance to flee per check
Config.FleeCheckIntervalnumber1000Flee check interval
Config.SurrenderCooldownTimenumber1000Delay before another surrender can happen
Config.AimSurrenderDistancenumber10.0Police aim range for surrender
Config.IdleWanderCheckDistancenumber50.0Range for idle wander logic

Dealer Locations

File: shared/config.lua

The default dealer spawn list:

Config.Locations = {
    vector4(889.39, -2185.3, 30.52, 357.26),
    vector4(33.57, -1906.16, 21.76, 137.9),
    vector4(-690.83, -724.43, 28.72, 84.58),
    vector4(1065.79, -720.8, 56.77, 143.09),
    vector4(-3062.4, 599.71, 7.46, 113.42),
    vector4(1867.5, 3744.72, 33.0, 211.69),
    vector4(2259.36, 4759.79, 39.22, 343.04),
    vector4(346.51, 2578.13, 43.52, 29.79),
}

Sellable Items

File: shared/items.lua

These items can be sold to the dealer:

Config.SellableItems = {
    ['weed_1g'] = { price = 30, rep = 1 },
    ['weed_eighth'] = { price = 100, rep = 3 },
    ['weed_quarter'] = { price = 190, rep = 5 },
    ['weed_half'] = { price = 360, rep = 8 },
    ['weed_ounce'] = { price = 700, rep = 15 },
    ['weed_brick'] = { price = 500, rep = 15 },
    ['joint'] = { price = 30, rep = 1 },
    ['blunt'] = { price = 40, rep = 1 },
    ['meth_baggy'] = { price = 250, rep = 10 },
    ['meth_baggy_glass'] = { price = 325, rep = 13 },
    ['meth_baggy_blue_sky'] = { price = 400, rep = 18 },
    ['meth_baggy_purple_haze'] = { price = 375, rep = 16 },
    ['meth_baggy_lean_crystal'] = { price = 300, rep = 11 },
    ['meth_baggy_green_rush'] = { price = 285, rep = 10 },
    ['meth_baggy_dirty_sprite'] = { price = 360, rep = 15 },
    ['meth_baggy_street_mix'] = { price = 175, rep = 6 },
    ['meth_baggy_rocket_fuel'] = { price = 340, rep = 14 },
    ['meth_baggy_club_special'] = { price = 385, rep = 17 },
    ['meth_baggy_ice'] = { price = 375, rep = 16 },
    ['phone'] = { price = 100, rep = 2 },
}

Shop Inventory

File: shared/items.lua

Format:

{ item = 'item_name', label = 'Display Name', price = 1000, stock = 10 }
{ item = 'weapon_name', label = 'Name', price = 5000, stock = 2, info = { serie = '' } }

Tier 0

Config.ShopInventory[0] = {
    { item = 'lockpick', label = 'Lockpick', price = 300, stock = 10 },
    { item = 'joint', label = 'Joint', price = 50, stock = 20 },
    { item = 'rolling_papers', label = 'Rolling Papers', price = 10, stock = 50 },
    { item = 'lighter', label = 'Lighter', price = 15, stock = 20 },
    { item = 'weapon_switchblade', label = 'Switchblade', price = 200, stock = 5 },
}

Tier 1

Config.ShopInventory[1] = {
    { item = 'ammo_pistol', label = '9mm Ammo', price = 15, stock = 100 },
    { item = 'radio', label = 'Radio', price = 500, stock = 5 },
    { item = 'bandage', label = 'Bandage', price = 100, stock = 15 },
    { item = 'growing_manual', label = "Grower's Manual", price = 800, stock = 3 },
    { item = 'weapon_knife', label = 'Knife', price = 350, stock = 5 },
    { item = 'hydrogen_peroxide', label = 'Hydrogen Peroxide', price = 80, stock = 20 },
    { item = 'ammonia', label = 'Ammonia', price = 80, stock = 20 },
    { item = 'hydrochloric_acid', label = 'Hydrochloric Acid', price = 80, stock = 20 },
    { item = 'sodium_benzoate', label = 'Sodium Benzoate', price = 80, stock = 20 },
    { item = 'baggy', label = 'Empty Baggy', price = 10, stock = 50 },
}

Tier 2

Config.ShopInventory[2] = {
    { item = 'blackmarket_pager', label = 'Burner Pager', price = 2500, stock = 2 },
    { item = 'weapon_pistol', label = 'Pistol (No Serial)', price = 5000, stock = 2, info = { serie = '' } },
    { item = 'weapon_snspistol', label = 'SNS Pistol', price = 3500, stock = 3, info = { serie = '' } },
    { item = 'weapon_sawnoffshotgun', label = 'Sawed-Off Shotgun', price = 4500, stock = 2, info = { serie = '' } },
    { item = 'ammo_smg', label = 'SMG Ammo', price = 25, stock = 100 },
    { item = 'weapon_molotov', label = 'Molotov', price = 500, stock = 5 },
    { item = 'meth_table', label = 'Meth Table', price = 3000, stock = 2 },
    { item = 'meth_crystallizer', label = 'Meth Crystallizer', price = 4500, stock = 2 },
    { item = 'meth_manual', label = "The Cook's Notebook", price = 1500, stock = 3 },
    { item = 'gas_mask', label = 'Gas Mask', price = 500, stock = 5 },
    { item = 'cough_syrup', label = 'Cough Syrup', price = 60, stock = 15 },
    { item = 'pain_killer', label = 'Pain Killer', price = 40, stock = 15 },
    { item = 'cannabis_leaf', label = 'Cannabis Leaf', price = 50, stock = 15 },
    { item = 'lax_to_the_max', label = 'Lax to the Max', price = 45, stock = 15 },
}

Tier 3

Config.ShopInventory[3] = {
    { item = 'weapon_microsmg', label = 'Micro SMG', price = 12000, stock = 2, info = { serie = '' } },
    { item = 'weapon_pumpshotgun', label = 'Pump Shotgun', price = 15000, stock = 1, info = { serie = '' } },
    { item = 'ammo_rifle', label = 'Rifle Ammo', price = 50, stock = 100 },
    { item = 'ammo_shotgun', label = 'Shotgun Ammo', price = 40, stock = 50 },
    { item = 'med_armor', label = 'Body Armor', price = 5000, stock = 5 },
    { item = 'printer_usb', label = 'SNS Pistol USB', price = 2500, stock = 3, info = { blueprint = 'sns_pistol' } },
    { item = 'printer_usb', label = 'Pistol USB', price = 3000, stock = 3, info = { blueprint = 'pistol' } },
    { item = 'printer_usb', label = 'Micro SMG USB', price = 4000, stock = 2, info = { blueprint = 'micro_smg' } },
    { item = 'printer_usb', label = 'Pump Shotgun USB', price = 4000, stock = 2, info = { blueprint = 'pump_shotgun' } },
    { item = 'magnesium_oxide', label = 'Magnesium Oxide', price = 120, stock = 10 },
    { item = 'hazardous_waste', label = 'Hazardous Waste', price = 150, stock = 10 },
    { item = 'vanilla_unicorn_pills', label = 'V.U. Pills', price = 200, stock = 10 },
    { item = 'acetone', label = 'Acetone', price = 250, stock = 10 },
    { item = 'adrenaline', label = 'Adrenaline', price = 300, stock = 10 },
}

Tier 4

Config.ShopInventory[4] = {
    { item = 'weapon_assaultrifle', label = 'Assault Rifle', price = 35000, stock = 1, info = { serie = '' } },
    { item = 'weapon_carbinerifle', label = 'Carbine Rifle', price = 40000, stock = 1, info = { serie = '' } },
    { item = 'weapon_smg', label = 'SMG', price = 20000, stock = 2, info = { serie = '' } },
    { item = 'heavy_armor', label = 'Heavy Armor', price = 10000, stock = 3 },
    { item = 'ammo_sniper', label = 'Sniper Ammo', price = 100, stock = 50 },
    { item = 'printer_usb', label = 'Assault Rifle USB', price = 8000, stock = 1, info = { blueprint = 'assault_rifle' } },
    { item = 'printer_usb', label = 'Carbine Rifle USB', price = 8500, stock = 1, info = { blueprint = 'carbine_rifle' } },
    { item = 'printer_usb', label = 'Combat Pistol USB', price = 5000, stock = 2, info = { blueprint = 'combat_pistol' } },
    { item = 'toluene', label = 'Toluene', price = 400, stock = 8 },
}

Next Steps