Configuration Guide

Complete reference for all configuration options in oxide-weed.

Config File: shared/config.lua

General Settings

SettingTypeDefaultDescription
Config.DebugbooleanfalseEnable debug output to server console with [oxide-weed] prefix
Config.RequireOwnershipbooleantrueOnly the player who placed an item can remove it (plants, lamps, equipment, heaters, drying buds)
Config.SpawnDistancenumber100.0Distance at which placed objects spawn for clients
Config.Debug = false
Config.RequireOwnership = true
Config.SpawnDistance = 100.0

Dirty Money

Controls how money is handled for selling and scientist transactions. The germinator store always uses regular cash.

SettingTypeDefaultDescription
Config.DirtyMoney.modestring'account''account' uses a framework account type, 'item' uses an inventory item
Config.DirtyMoney.accountstring'cash'Account type when mode is 'account' (e.g. 'cash', 'black_money')
Config.DirtyMoney.itemstring'black_money'Item name when mode is 'item'
Config.DirtyMoney = {
    mode = 'account',
    account = 'cash',
    item = 'black_money',
}

Affected transactions:

  • Street selling — player receives dirty money
  • Robbery during selling — dirty money is stolen from player
  • Scientist lab reports — player pays with dirty money
  • Scientist seed cloning — player pays with dirty money

Not affected:

  • Germinator store — always uses regular cash (legal purchases)

Plant Settings

SettingTypeDefaultDescription
Config.PlantSettings.waterDecayRatenumber0.2Water decay per minute
Config.PlantSettings.fertilizerDecayRatenumber0.1Fertilizer decay per minute
Config.PlantSettings.updateIntervalnumber60000Plant tick interval in milliseconds
Config.PlantSettings.maxLampsPerPlantnumber4Maximum grow lamps per plant
Config.PlantSettings.removeLampsOnPlantDeathbooleanfalseDelete lamps when linked plant dies (false = unlink only)

Water Sources

SettingTypeDefaultDescription
water.sources[].itemstringItem name used for watering
water.sources[].fillAmountnumber25Water level added per use
water.sources[].useMetadatabooleanfalseIf true, uses metadata key instead of consuming the item
water.sources[].metaKeystringMetadata key for tracking usage (e.g., water_level)
water.sources[].metaCostnumberAmount deducted from metadata per use
water.sources[].amountnumber1Items consumed per use (non-metadata sources)

Fertilizer

SettingTypeDefaultDescription
fertilizer.itemstring'fertilizer'Item consumed for fertilizing
fertilizer.amountnumber1Amount consumed per use
fertilizer.fillAmountnumber35Fertilizer level added per use

Harvest

SettingTypeDefaultDescription
harvest.returnPotbooleantrueReturn the plant pot to player on harvest
harvest.potItemstring'plant_pot'Item name of the returned pot

Watering Can

SettingTypeDefaultDescription
Config.WateringCan.capacitynumber100Maximum water units the can holds
Config.WateringCan.waterCostnumber15Water consumed from can per plant watering
Config.WateringCan.fillAmountnumber20Water level added to plant per watering can use

Processing

SettingTypeDefaultDescription
Config.Processing.pruneYield.minnumber2Minimum pruned buds per dried bud
Config.Processing.pruneYield.maxnumber5Maximum pruned buds per dried bud
Config.Processing.leafYield.minnumber1Minimum cannabis leaves per prune
Config.Processing.leafYield.maxnumber3Maximum cannabis leaves per prune

Labels

SettingTypeDefaultDescription
Config.Labels.maxDistnumber2.0Maximum distance to display floating labels
Config.Labels.scaleMinnumber0.55Minimum text scale at far distance
Config.Labels.scaleMaxnumber1.0Maximum text scale at near distance
Config.Labels.scaleNearDistnumber1.5Distance at which labels reach maximum scale
Config.Labels.scaleFarDistnumber3.0Distance at which labels reach minimum scale
Config.Labels.plantHeightOffsetnumber1.2Label height above plant
Config.Labels.tableHeightOffsetnumber1.0Label height above table
Config.Labels.updateIntervalnumber16Label render tick interval in ms

Animations

SettingTypeDefaultDescription
Config.Anims.place.dictstringsee configAnimation dictionary for placing items
Config.Anims.place.namestring'plant_floor'Animation name for placing
Config.Anims.place.durationnumber1000Place animation duration in ms
Config.Anims.remove.dictstringsee configAnimation dictionary for removing items
Config.Anims.remove.namestring'plant_floor'Animation name for removing
Config.Anims.remove.durationnumber1000Remove animation duration in ms

Config File: shared/config/plants.lua

Defines plant types and their growth stages, yield, and models.

SettingTypeDefaultDescription
cannabis_seed.itemstring'cannabis_seed'Seed item name
cannabis_seed.neededItemstable{ plant_pot x1 }Items required to plant (consumed)
cannabis_seed.stagestable4 stagesGrowth stages with model, time (seconds), and model offset
cannabis_seed.yieldtableweed_bud 3-8Harvest yield items with min/max amounts and chance
Config.Plants = {
    cannabis_seed = {
        item = 'cannabis_seed',
        neededItems = {
            { name = 'plant_pot', amount = 1, remove = true },
        },
        stages = {
            { model = `bkr_prop_weed_01_small_01c`, time = 60 * 60, offset = vec3(0.0, 0.0, 1.0) },
            { model = `bkr_prop_weed_01_small_01a`, time = 60 * 60, offset = vec3(0.0, 0.0, 1.0) },
            { model = `bkr_prop_weed_med_01b`, time = 60 * 60, offset = vec3(0.0, 0.0, -1.5) },
            { model = `bkr_prop_weed_lrg_01b`, time = 60 * 500, offset = vec3(0.0, 0.0, -1.5) },
        },
        yield = {
            { item = 'weed_bud', amount = { min = 3, max = 8 }, chance = 100 },
        },
    },
}

Config File: shared/config/strains.lua

Defines base strains with their traits and level requirements.

SettingTypeDescription
[strain_id].labelstringDisplay name of the strain
[strain_id].baseQualitynumberBase quality score (0-100)
[strain_id].requiredLevelnumberProgression level required to plant
[strain_id].traitstableTable of 10 trait values (0-100)

See Features > Base Strains for the full strain table.


Config File: shared/config/genetics.lua

SettingTypeDefaultDescription
Config.Genetics.traitNamestable10 traitsOrdered list of trait names
Config.Genetics.breedingUnlockLevelnumber3Level required to crossbreed
Config.Genetics.mutationRatenumber0.10Chance of trait mutation per crossbreed (10%)
Config.Genetics.mutationRangenumber20Maximum trait variance from mutation
Config.Genetics.maxGenerationnumber0Max generation cap (0 = unlimited)
Config.Genetics.maleBiasnumber0.4Male trait inheritance weight (female = 1 - maleBias)
Config.Genetics.genderCheckStagenumber2Earliest growth stage to check gender
Config.Genetics.maleChancenumber0.4Probability of a plant being male (40%)
Config.Genetics.pollenGatherTimenumber3000Pollen collection duration in ms
Config.Genetics.pollenDestroysPlantbooleantrueRemove plant after pollen collection
Config.Genetics.seedFromHarvestChancenumber0.25Chance to find seed when harvesting (25%)

Quality Weights

TraitWeight
potency0.20
thc0.18
density0.13
frost0.13
flavor0.13
aroma0.13
cbd0.10

Config File: shared/config/drying.lua

SettingTypeDefaultDescription
Config.Drying.dryingTimenumber1800Base drying time in seconds (30 minutes)
Config.Drying.updateIntervalnumber30000Drying tick interval in ms
Config.Drying.maxSlotsnumber14Maximum bud slots per rack
Config.Drying.items.inputstring'weed_bud'Fresh bud item name
Config.Drying.items.outputstring'dried_weed_bud'Dried bud item name

Heater Settings

SettingTypeDefaultDescription
Config.Drying.heater.itemstring'weed_heater'Heater item name
Config.Drying.heater.modelstring'prop_patio_heater_01'Heater prop model
Config.Drying.heater.maxPerRacknumber3Maximum heaters per drying rack
Config.Drying.heater.dryingMultipliernumber1.5Speed multiplier per heater

Config File: shared/config/equipment.lua

Defines placeable equipment types, their models, and associated features.

Weed Table

SettingTypeDefaultDescription
weed_table.itemstring'weed_table'Item name to place the table
weed_table.objects[].modelhashbkr_prop_weed_table_01bProp model

Bagging Recipes

SettingTypeDescription
bagging.recipes[].needtableItems required per bag (name, amount)
bagging.recipes[].gettableItems produced per bag (name, amount)

Default: 1 pruned_weed_bud + 1 baggy = 1 weed_1g

Packaging Recipes

SettingTypeDefaultDescription
packaging.progressDurationnumber4000Progress bar duration in ms
packaging.recipes[].inputstringInput item name
packaging.recipes[].inputAmountnumberInput quantity consumed
packaging.recipes[].outputstringOutput item name
packaging.recipes[].outputAmountnumberOutput quantity produced

Default packaging chain: weed_1g (x3) -> weed_eighth (x2) -> weed_quarter (x2) -> weed_half (x2) -> weed_ounce

Storage Tote

SettingTypeDefaultDescription
storage_tote.itemstring'storage_tote'Item name
storage_tote.stash.slotsnumber15Stash inventory slots
storage_tote.stash.maxWeightnumber30.0Maximum stash weight

Water Containers

SettingTypeDefaultDescription
water_container_small.itemstring'water_container_small'Item name
water_container_small.waterContainer.capacitynumber500Maximum water units
water_container_small.waterContainer.fillPerUsenumber75Water added per fill action
water_container_large.itemstring'water_container_large'Item name
water_container_large.waterContainer.capacitynumber1000Maximum water units
water_container_large.waterContainer.fillPerUsenumber75Water added per fill action

Freeze Dryer (Equipment Entry)

SettingTypeDefaultDescription
freeze_dryer.itemstring'freeze_dryer'Item name
freeze_dryer.requiredLevelnumber7Progression level required to place

See shared/config/freezedryer.lua for freeze dryer gameplay settings.

The requiredLevel field can be added to any equipment entry in Config.Equipment to gate placement behind a progression level.


Config File: shared/config/lamps.lua

SettingTypeDefaultDescription
Config.Lamps.default_lamp.itemstring'grow_lamp'Lamp item name
Config.Lamps.default_lamp.modelhashxm_prop_base_tripod_lampbLamp prop model
Config.Lamps.default_lamp.growthMultipliernumber1.5Growth speed multiplier when lamp is linked to plant
Config.Lamps.default_lamp.offsetvec3vec3(0, 0, 1)Lamp position offset relative to plant

Config File: shared/config/freezedryer.lua

SettingTypeDefaultDescription
Config.FreezeDryer.dryingTimenumber600Freeze dryer drying time in seconds (10 minutes)
Config.FreezeDryer.requiredLevelnumber7Progression level required to use
Config.FreezeDryer.updateIntervalnumber30000Tick interval in ms
Config.FreezeDryer.items.inputstring'weed_bud'Fresh bud item name
Config.FreezeDryer.items.outputstring'dried_weed_bud'Dried bud item name
Config.FreezeDryer.trays.budsPerTraynumber8Buds per tray
Config.FreezeDryer.trays.stackCountnumber9Trays stacked per column
Config.FreezeDryer.trays.baseColumnstable2 columnsTray column positions

Total capacity is calculated automatically: baseColumns * stackCount * budsPerTray = 2 * 9 * 8 = 144 slots.


Config File: shared/config/progression.lua

XP Rewards

SettingTypeDefaultDescription
Config.Progression.xpRewards.plantnumber10XP for planting a seed
Config.Progression.xpRewards.waternumber2XP for watering a plant
Config.Progression.xpRewards.fertilizenumber2XP for fertilizing
Config.Progression.xpRewards.harvestnumber25XP for harvesting
Config.Progression.xpRewards.placeLampnumber3XP for placing a lamp
Config.Progression.xpRewards.placeBudnumber2XP per bud placed on rack
Config.Progression.xpRewards.collectDriednumber5XP per dried bud collected
Config.Progression.xpRewards.prunenumber5XP for pruning
Config.Progression.xpRewards.bagnumber5XP per bag created
Config.Progression.xpRewards.checkGendernumber5XP for checking gender
Config.Progression.xpRewards.gatherPollennumber10XP for gathering pollen
Config.Progression.xpRewards.crossbreednumber30XP for crossbreeding
Config.Progression.xpRewards.packagenumber8XP per packaging conversion
Config.Progression.xpRewards.sellnumber15XP per unit sold

Level Thresholds

SettingTypeDefaultDescription
Config.Progression.levelstable10 levelsArray of { level, xpRequired } entries
Config.Progression = {
    levels = {
        { level = 1, xpRequired = 0 },
        { level = 2, xpRequired = 100 },
        { level = 3, xpRequired = 300 },
        { level = 4, xpRequired = 650 },
        { level = 5, xpRequired = 1200 },
        { level = 6, xpRequired = 2000 },
        { level = 7, xpRequired = 3200 },
        { level = 8, xpRequired = 5000 },
        { level = 9, xpRequired = 7500 },
        { level = 10, xpRequired = 11000 },
    },
}

Config File: shared/config/selling.lua

General

SettingTypeDefaultDescription
Config.Selling.enabledbooleantrueEnable/disable the entire NPC selling system
Config.Selling.cooldownnumber5000Player cooldown between sales in ms
Config.Selling.npcCooldownnumber120000Per-NPC cooldown in ms
Config.Selling.requiredLevelnumber2Minimum progression level to sell
Config.Selling.targetDistancenumber5.0Max distance for target interaction
Config.Selling.targetIconstring'fas fa-hand-holding-dollar'ox_target icon for sell option
Config.Selling.targetLabelstring'sell_offer_drugs'Locale key for ox_target label
Config.Selling.panelTitlestring'Street Sale'Header text shown in the sell NUI panel

Police Requirements

SettingTypeDefaultDescription
Config.Selling.policeJobstable{ 'police', 'sheriff' }Job names counted as police
Config.Selling.minPoliceOnlinenumber0Minimum police required (0 = disabled)

Sellable Items

SettingTypeDescription
Config.Selling.items[itemName].labelstringDisplay name in sell panel
Config.Selling.items[itemName].basePricenumberBase price per unit before multipliers

Server owners can add custom drug items to this table.

Quality and Pricing

SettingTypeDefaultDescription
Config.Selling.qualityMultipliers.Gasnumber1.4Multiplier for Gas grade
Config.Selling.qualityMultipliers.Highnumber1.15Multiplier for High grade
Config.Selling.qualityMultipliers.Midnumber1.0Multiplier for Mid grade
Config.Selling.qualityMultipliers.Poornumber0.75Multiplier for Poor grade
Config.Selling.qualityMultipliers.Dirtnumber0.5Multiplier for Dirt grade
Config.Selling.qualityPricing.minMultipliernumber0.4Continuous quality curve minimum
Config.Selling.qualityPricing.maxMultipliernumber1.5Continuous quality curve maximum
Config.Selling.qualityPricing.curvenumber1.2Curve exponent (>1 = diminishing returns)

Trait Demand Bonuses

SettingTypeDefaultDescription
Config.Selling.traitBonuses[trait].thresholdnumbervariesTrait value that must be exceeded for the bonus to apply
Config.Selling.traitBonuses[trait].bonusnumbervariesPercentage added to price multiplier when threshold is met
Config.Selling.maxTraitBonusnumber0.35Maximum combined trait bonus cap (35%)

Default trait bonuses: thc (+10% at 75), potency (+8% at 70), flavor (+8% at 70), frost (+6% at 75), density (+5% at 70), aroma (+5% at 65), cbd (+4% at 70).

Negotiation

SettingTypeDefaultDescription
Config.Selling.pricing.autoAcceptMaxnumber0.90Price ratio at or below which NPC auto-accepts
Config.Selling.pricing.negotiateMaxnumber1.25Price ratio up to which NPC may counter; above this NPC rejects
Config.Selling.pricing.counterOffernumber0.95Counter-offer as proportion of fair value

Risk

SettingTypeDefaultDescription
Config.Selling.risks.policeCallChancenumber0.15Chance of police dispatch per sale (15%)
Config.Selling.risks.rejectChancenumber0.15Flat rejection chance before evaluation (15%)
Config.Selling.risks.robberyChancenumber0.15Robbery chance from gang NPCs (15%)
Config.Selling.risks.robberyItemLossnumber3Max items lost in robbery
Config.Selling.risks.robberyCashPercentnumber0.25Percentage of cash stolen (25%)

Dispatch

SettingTypeDefaultDescription
Config.Selling.dispatch.codestring'10-31'Police dispatch code
Config.Selling.dispatch.messagestring'sell_dispatch_message'Locale key for dispatch message
Config.Selling.dispatch.blipData.spritenumber469Dispatch blip sprite
Config.Selling.dispatch.blipData.colornumber1Dispatch blip color
Config.Selling.dispatch.blipData.scalenumber0.8Dispatch blip size
Config.Selling.dispatch.timenumber60000Dispatch blip duration in ms

NPC Model Lists

SettingTypeDescription
Config.Selling.blacklistedModelstablePed model hashes that will never show the sell target option (cops, EMS, military)
Config.Selling.gangModelstablePed model hashes that can trigger the robbery mechanic

Generation Bonus

SettingTypeDefaultDescription
Config.Selling.generationBonus.enabledbooleantrueEnable crossbreed generation premium
Config.Selling.generationBonus.bonusPerGennumber0.05+5% per generation above startGen
Config.Selling.generationBonus.startGennumber2First generation that receives bonus
Config.Selling.generationBonus.maxBonusnumber0.25Maximum generation bonus (25%)

Selling Camera

SettingTypeDefaultDescription
Config.Selling.camera.interpTimenumber500Camera interpolation time in ms
Config.Selling.camera.distancenumber1.8Camera distance from NPC
Config.Selling.camera.heightOffsetnumber0.3Camera height offset
Config.Selling.camera.fovnumber50.0Camera field of view

Selling Animations

SettingTypeDescription
Config.Selling.anims.npcThinkingtableNPC thinking animation (dict, clip, duration)
Config.Selling.anims.npcAccepttableNPC accept animation
Config.Selling.anims.npcRejecttableNPC reject animation
Config.Selling.anims.robberytableRobbery animation
Config.Selling.anims.transactiontableTransaction handoff animation

Config File: shared/config/smoking.lua

SettingTypeDefaultDescription
Config.Smoking.cooldownnumber60Seconds between smoking sessions
Config.Smoking.baseDurationnumber60Base effect duration in seconds
Config.Smoking.bluntDurationMultipliernumber1.25Blunt duration multiplier vs joint
Config.Smoking.bluntIntensityBonusnumber0.1Extra intensity for blunts (+10%)

Rolling Items

SettingTypeDescription
Config.Smoking.items[itemName].outputstringProduced item ('joint' or 'blunt')
Config.Smoking.items[itemName].requirestableItems the player must have to roll (e.g., { 'weed_1g', 'lighter' })

Default: rolling_papers produces joint, cigarillo_wraps produces blunt. Both require weed_1g and lighter.

Controls

SettingTypeDefaultDescription
Config.Smoking.controls.smokenumber38Key to take a hit (E)
Config.Smoking.controls.stopnumber74Key to stop smoking (H)

Effect Scaling

SettingTypeDefaultDescription
Config.Smoking.effects.potencyScalenumber1.0Potency to intensity multiplier
Config.Smoking.effects.thcHungerScalenumber10Max hunger cost from THC
Config.Smoking.effects.thcSpeedScalenumber0.08Max speed reduction from THC (8%)
Config.Smoking.effects.cbdHealScalenumber1.0CBD health regeneration scale
Config.Smoking.effects.cbdStressScalenumber25Max stress relief from CBD
Config.Smoking.effects.densityDurationMinnumber45Minimum effect duration in seconds
Config.Smoking.effects.densityDurationMaxnumber90Maximum effect duration in seconds
Config.Smoking.effects.qualityFloornumber0.4Minimum quality multiplier (dirt weed = 40%)
Config.Smoking.effects.healTickIntervalnumber5Seconds between CBD heal ticks

Screen Effects

SettingTypeDefaultDescription
Config.Smoking.screenEffects.timecyclestring'spectator6'Timecycle modifier name
Config.Smoking.screenEffects.timecycleStrengthnumber0.66Timecycle modifier strength
Config.Smoking.screenEffects.cameraShakestring'DRUNK_SHAKE'Camera shake type
Config.Smoking.screenEffects.cameraShakeAmplitudenumber2.5Camera shake intensity
Config.Smoking.screenEffects.drunkClipsetstring'MOVE_M@DRUNK@SLIGHTLYDRUNK'Walking animation set

Config File: shared/config/store.lua

SettingTypeDefaultDescription
Config.Store.enabledbooleantrueEnable/disable the store
Config.Store.coordsvec3vec3(-1275.97, -1139.92, 6.79)Store NPC location
Config.Store.headingnumber114.07NPC facing direction
Config.Store.modelstring's_m_m_linecook'NPC ped model
Config.Store.scenariostring'WORLD_HUMAN_STAND_IMPATIENT'NPC idle scenario
Config.Store.interactDistancenumber2.5Interaction distance
Config.Store.targetRadiusnumber1.5ox_target radius

Blip

SettingTypeDefaultDescription
Config.Store.blip.enabledbooleantrueShow map blip
Config.Store.blip.spritenumber628Blip sprite ID
Config.Store.blip.colornumber2Blip color
Config.Store.blip.scalenumber0.5Blip size
Config.Store.blip.labelstring'store_blip'Locale key for blip name

Adding Custom Items

Config.Store.customItems = {
    { item = 'some_item', label = 'My Custom Item', price = 100, category = 'custom' },
}

Config File: shared/config/scientist.lua

SettingTypeDefaultDescription
Config.Scientist.coordsvec3vec3(3610.36, 3653.20, 31.26)NPC location
Config.Scientist.headingnumber338.80NPC facing direction
Config.Scientist.modelstring's_m_m_scientist_01'NPC ped model
Config.Scientist.scenariostring'WORLD_HUMAN_CLIPBOARD'NPC idle scenario
Config.Scientist.interactDistancenumber2.5Interaction distance
Config.Scientist.targetRadiusnumber1.5ox_target radius

Lab Report

SettingTypeDefaultDescription
Config.Scientist.labReport.pricenumber500Cost per lab report
Config.Scientist.labReport.requiredLevelnumber2Level required

Cloning

SettingTypeDefaultDescription
Config.Scientist.cloning.requiredLevelnumber4Level required
Config.Scientist.cloning.optionstable3 tiersArray of { quantity, price }
Config.Scientist.cloning = {
    requiredLevel = 4,
    options = {
        { quantity = 5,  price = 2500  },
        { quantity = 10, price = 4000  },
        { quantity = 25, price = 7500  },
    },
}

Blip

SettingTypeDefaultDescription
Config.Scientist.blip.enabledbooleanfalseShow map blip (disabled by default)
Config.Scientist.blip.spritenumber499Blip sprite ID
Config.Scientist.blip.colornumber2Blip color
Config.Scientist.blip.scalenumber0.7Blip size
Config.Scientist.blip.labelstring'scientist_blip'Locale key for blip name

Config File: shared/config/wildplants.lua

SettingTypeDefaultDescription
Config.WildPlants.enabledbooleantrueEnable/disable wild plant system
Config.WildPlants.spawnDistancenumber100.0Client-side spawn distance
Config.WildPlants.seedChancenumber0.40Seed drop chance per harvest (40%)
Config.WildPlants.seedAmount.minnumber1Minimum seeds per drop
Config.WildPlants.seedAmount.maxnumber2Maximum seeds per drop
Config.WildPlants.respawnTime.minnumber1800Minimum respawn time in seconds (30 min)
Config.WildPlants.respawnTime.maxnumber3600Maximum respawn time in seconds (60 min)
Config.WildPlants.harvestXPnumber15XP awarded per wild harvest

Yield

SettingTypeDefaultDescription
Config.WildPlants.yield[].itemstring'weed_bud'Item given on harvest
Config.WildPlants.yield[].amount.minnumber1Minimum bud yield
Config.WildPlants.yield[].amount.maxnumber4Maximum bud yield
Config.WildPlants.yield[].chancenumber100Chance percentage

Zones

Each zone entry:

SettingTypeDescription
namestringUnique zone identifier
plantsnumberNumber of plants in this zone
pointstablePolygon vertices as vec3 (minimum 3)
thicknessnumberVertical extent of the zone
Config.WildPlants.zones = {
    {
        name = 'my_zone',
        plants = 10,
        points = {
            vec3(x1, y1, z1),
            vec3(x2, y2, z2),
            vec3(x3, y3, z3),
            vec3(x4, y4, z4),
        },
        thickness = 10.0,
    },
}

Next Steps