Configuration Reference

Current configuration map and defaults for oxide-weed.

Reference for the current oxide-weed config layout. All config files live in shared/ and can be edited freely — they are never encrypted.

Settings Live In The Database

The config files below are factory defaults. The first time the resource starts, every setting is copied into your database (an oxide_settings table, created automatically). From then on, the database is the source of truth: admins change settings in game with /weed settings (see Admin), changes apply immediately without a restart, and they survive restarts.

What that means in practice:

  • Editing a config file after the first start does nothing for settings already in the database — change them in /weed settings instead, or use the menu's "reset to default" button to pull a file value back in.
  • New settings added by a resource update are picked up from the files automatically on the next start.
  • To start completely fresh from the files, delete this resource's rows from the oxide_settings table and restart.

This reference documents what each setting does — the same descriptions appear in the in-game editor.

Config File Map

FilePurpose
shared/config.luaGeneral settings, dirty money, plant decay, labels, placement zones, item usage whitelist, police alerts, animations
shared/config/plants.luaPlant definitions, stages, harvest output
shared/config/strains.luaBase strain list and required levels
shared/config/genetics.luaTrait order, mutation, breeding, quality weights
shared/config/drying.luaWeed table drying and heater settings
shared/config/equipment.luaPlaceable equipment, bagging, packaging, brick press, stash, water containers
shared/config/lamps.luaGrow lamp definitions and growth multiplier
shared/config/freezedryer.luaFreeze dryer timing, trays, and capacity
shared/config/dryingrack.luaDrying rack timing, trays, and capacity
shared/config/progression.luaXP rewards and level thresholds
shared/config/smoking.luaRolling, smoking effects, controls, and toggles
shared/config/store.luaStore NPC, blip, stock list, categories, custom items
shared/config/scientist.luaScientist NPC, lab report, cloning options
shared/config/wildplants.luaWild plant zones, yields, respawn, and XP

General Settings

File: shared/config.lua

SettingTypeDefaultDescription
Config.DebugbooleanfalseVerbose debug logging (routed through oxide-logger if installed)
Config.RequireOwnershipbooleantrueRestrict removal actions to the original owner
Config.SpawnDistancenumber100.0Client spawn range for placed world entities

Dirty Money

Scientist services use Config.DirtyMoney.

SettingTypeDefaultDescription
Config.DirtyMoney.modestring'account''account' or 'item'
Config.DirtyMoney.accountstring'cash'Account name when using account mode
Config.DirtyMoney.itemstring'black_money'Item name when using item mode

Plant Settings

SettingTypeDefaultDescription
Config.PlantSettings.waterDecayRatenumber0.2Water loss per minute
Config.PlantSettings.fertilizerDecayRatenumber0.1Fertilizer loss per minute
Config.PlantSettings.updateIntervalnumber60000Plant tick interval in ms
Config.PlantSettings.maxLampsPerPlantnumber4Max linked lamps per plant
Config.PlantSettings.removeLampsOnPlantDeathbooleanfalseDelete lamps instead of unlinking on plant death

Default water sources:

  • watering_can: metadata source, fillAmount = 25, metaKey = 'water_level', metaCost = 10
  • water: item source, amount = 1, fillAmount = 25

Fertilizer defaults:

  • item: fertilizer
  • amount: 1
  • fill amount: 35

Harvest defaults:

  • return pot: true
  • pot item: plant_pot

Watering Can

SettingTypeDefault
Config.WateringCan.capacitynumber100
Config.WateringCan.waterCostnumber15
Config.WateringCan.fillAmountnumber20

Processing

SettingTypeDefault
Config.Processing.pruneYield.minnumber2
Config.Processing.pruneYield.maxnumber5
Config.Processing.leafYield.minnumber1
Config.Processing.leafYield.maxnumber3

Labels

SettingTypeDefault
Config.Labels.maxDistnumber2.0
Config.Labels.scaleMinnumber0.55
Config.Labels.scaleMaxnumber1.0
Config.Labels.scaleNearDistnumber1.5
Config.Labels.scaleFarDistnumber3.0
Config.Labels.plantHeightOffsetnumber1.2
Config.Labels.tableHeightOffsetnumber1.0
Config.Labels.updateIntervalnumber16

Placement Zones

Config.ZoneMode decides how map areas control where players may plant and place equipment:

ModeWhat it does
'off'Players can plant and place anywhere. Both zone lists are ignored, but neither is erased.
'blacklist' (default)Blocked inside the areas in Config.SafeZones. An empty list allows everywhere.
'whitelist'Blocked outside the areas in Config.AllowedZones — so those areas become the only legal spots.

Config.SafeZones and Config.AllowedZones are separate lists and both are kept no matter which mode is active, so you can set up both and switch between them without redrawing anything. Each zone has a name, a list of points outlining the area, and a minZ/maxZ height band. A Legion Square example ships in SafeZones — replace or remove it as you like.

Switching to 'whitelist' with no allowed areas drawn blocks planting and placement everywhere. The settings editor flags this while you're editing.

Item Usage Whitelist

Config.UsageWhitelist restricts who may use individual items. It ships empty, which means every item is usable by anyone. Each rule looks like this:

{ item = 'weed_table', jobs = { 'police' }, gangs = { 'ballas' }, minRank = 2, dutyOnly = false }
  • Items with no rule stay usable by everyone.
  • A rule passes if the job list matches or the gang list matches.
  • Leaving both lists empty allows any job or gang — minRank and dutyOnly are still checked.
  • minRank is the numeric grade level; 0 means any rank.
  • dutyOnly applies to jobs only. Gangs have no duty state, so it's ignored on the gang side.
  • Job and gang names are matched ignoring capitalisation.

Rules key on the literal item name, so if you rename an item elsewhere in the config its rule stops applying.

Police Alerts

Config.Dispatch makes growing carry a risk of being reported to police. It ships off (alert chance 0), so nothing changes until you turn it on.

When a player starts a stage the server rolls once. On a hit, a dispatch call goes out at the plant's or table's location — not the player's, so a suspect can't fake or move it.

SettingDefaultWhat it does
Alert chance0Chance of an alert each time a stage is started. 0 turns alerts off completely. 0.15 means roughly one in seven.
Per-stage chanceall -1Set a different chance for one stage. -1 means "use the alert chance above".
Site cooldown300 sHow long before that same plant or table can raise another alert. Other sites are unaffected, so a player can't be alerted on repeatedly at one grow.
Alert jobspoliceWhich jobs receive the alert. Capitalisation doesn't matter.
Call code, Title, Message10-15, "Suspected Grow Operation", …The text responders see. The default message deliberately doesn't say what's being grown — police get a location and a reason to look, not a confession.
Priority21 is highest.
Icon, Map blipThe Font Awesome icon and the blip drawn on the map. Search radius is the size of the circle around the site, so responders get an area to search rather than an exact door.

The four stages you can tune separately are Plant, Harvest, Dry and Brick press. Planting catches a grow as it's being set up; harvesting catches the payoff. A common setup is a low master chance with planting turned off, so only an established grow gets reported.

Wild plant harvesting never alerts — it's a public, outdoor activity and the plants aren't anybody's operation.

What "chance" means in practice. It's rolled per stage started, not per harvest finished. A player who starts, cancels, and restarts rolls twice — but the site cooldown means only the first can actually alert. A rejected placement (blocked by a placement zone) never rolls at all.

What you need installed

Alerts go through whatever dispatch resource you run. Most are supported, including ps-dispatch, qs_dispatch, cd_dispatch, lb-tablet and the common MDTs. You don't strictly need one — with no dispatch resource installed, players with the alert job get a notification and a map blip instead.

If nobody with the alert job is online, the alert is discarded. That's intentional: there is no queue of stale calls waiting for the first officer to log in.

On ESX, every player with the job receives the alert whether or not they're clocked on — ESX has no on-duty concept for this.

Animations

Default placement and removal animation:

  • dict: weapons@first_person@aim_rng@generic@projectile@sticky_bomb@
  • name: plant_floor
  • duration: 1000ms

Config.SceneAnims sets the looping working animation other players see while someone is inside a private scene (brick press, drying rack, freeze dryer, crossbreeding) — without it the ped would stand frozen. Set a scene's entry to false to disable that animation.

Plants

File: shared/config/plants.lua

Current default plant type:

  • cannabis_seed

Key defaults:

  • item: cannabis_seed
  • required extra item: plant_pot
  • bud model: bkr_prop_weed_bud_01b
  • yield: weed_bud, 3-8

Stage times:

  • stage 1: 60 * 60
  • stage 2: 60 * 60
  • stage 3: 60 * 60
  • stage 4: 60 * 500

Strains

File: shared/config/strains.lua

Base strains currently shipped:

  • generic
  • og_kush
  • purple_haze
  • sour_diesel
  • blue_dream
  • northern_lights
  • white_widow
  • girl_scout
  • granddaddy_purple
  • amnesia_haze

Each strain defines:

  • label
  • baseQuality
  • requiredLevel
  • traits

Genetics

File: shared/config/genetics.lua

Trait order:

  • potency
  • flavor
  • yield
  • resilience
  • growth_speed
  • thc
  • cbd
  • aroma
  • density
  • frost

Key defaults:

SettingDefault
Config.Genetics.breedingUnlockLevel3
Config.Genetics.mutationRate0.10
Config.Genetics.mutationRange20
Config.Genetics.maxGeneration0
Config.Genetics.maleBias0.4
Config.Genetics.genderCheckStage2
Config.Genetics.maleChance0.4
Config.Genetics.pollenGatherTime3000
Config.Genetics.pollenDestroysPlanttrue
Config.Genetics.seedFromHarvestChance0.25

Quality weights:

  • potency: 0.20
  • thc: 0.18
  • density: 0.13
  • frost: 0.13
  • flavor: 0.13
  • aroma: 0.13
  • cbd: 0.10

Drying

File: shared/config/drying.lua

Weed table drying defaults:

SettingDefault
Config.Drying.dryingTime1800
Config.Drying.updateInterval30000
Config.Drying.maxSlots14
Config.Drying.items.input'weed_bud'
Config.Drying.items.output'dried_weed_bud'

Heater defaults:

SettingDefault
Config.Drying.heater.item'weed_heater'
Config.Drying.heater.model'prop_patio_heater_01'
Config.Drying.heater.maxPerRack3
Config.Drying.heater.dryingMultiplier1.5
Config.Drying.heater.snapOffsets3 snap points around the rack

Heater Snap Points

Config.Drying.heater.snapOffsets defines where heaters snap onto a drying rack. Each entry can take either form:

-- Offset only (heater inherits the rack's rotation)
vec3(1.408, 0.0, -0.001),

-- Offset + rotation delta (added on top of the rack's rotation)
{ offset = vec3(1.408, 0.0, -0.001), rotation = vec3(0.0, 0.0, 90.0) },

The rotation field is a delta in degrees added to the rack's rotation, so heaters stay correctly oriented regardless of how the rack itself is placed. Use this when a custom drying rack model needs heaters to face a specific direction at each snap point. While the heater is locked to a snap point, scroll-wheel rotation has no effect — move off the snap to rotate manually.

Equipment

File: shared/config/equipment.lua

Weed Table

  • item: weed_table
  • equipment type: weed_table
  • includes bagging and packaging recipes

Default bagging recipe:

  • pruned_weed_bud x1
  • baggy x1
  • output weed_1g x1

Default packaging recipes:

  • weed_1g x3 -> weed_eighth x1
  • weed_eighth x2 -> weed_quarter x1
  • weed_quarter x2 -> weed_half x1
  • weed_half x2 -> weed_ounce x1

Storage Tote

SettingDefault
storage_tote.stash.slots15
storage_tote.stash.maxWeight30.0

Water Containers

SettingDefault
water_container_small.waterContainer.capacity500
water_container_small.waterContainer.fillPerUse75
water_container_large.waterContainer.capacity1000
water_container_large.waterContainer.fillPerUse75

Progression-gated equipment

EquipmentRequired Level
drying_rack3
freeze_dryer7
brick_press8

Brick Press

Default press settings:

  • input item: dried_weed_bud
  • input amount: 10
  • output item: weed_brick
  • XP reward: 20
  • animation duration: 9000ms

Lamps

File: shared/config/lamps.lua

Default lamp:

  • item: grow_lamp
  • model: xm_prop_base_tripod_lampb
  • growth multiplier: 1.5

Freeze Dryer

File: shared/config/freezedryer.lua

SettingDefault
Config.FreezeDryer.dryingTime600
Config.FreezeDryer.requiredLevel7
Config.FreezeDryer.updateInterval30000
Config.FreezeDryer.items.input'weed_bud'
Config.FreezeDryer.items.output'dried_weed_bud'
Config.FreezeDryer.trays.budsPerTray8
Config.FreezeDryer.trays.stackCount9
Config.FreezeDryer.trays.baseColumns2 columns

Derived capacity:

  • total trays: 18
  • max slots: 144

Drying Rack

File: shared/config/dryingrack.lua

SettingDefault
Config.DryingRack.dryingTime1200
Config.DryingRack.updateInterval30000
Config.DryingRack.budsPerTray8
Config.DryingRack.trayCount4
Config.DryingRack.items.input'weed_bud'
Config.DryingRack.items.output'dried_weed_bud'

Derived capacity:

  • total capacity: 32

Progression

File: shared/config/progression.lua

XP reward defaults:

ActionXP
plant10
water2
fertilize2
harvest25
placeLamp3
placeBud2
collectDried5
prune5
bag5
checkGender5
gatherPollen10
crossbreed30
package8
brickPress20
rackLoad5
rackCollect8

Rolling (3 XP) and smoking (5 XP) are built in. Selling XP is configured in oxide-drugselling, not here.

Level thresholds:

  • 1: 0
  • 2: 100
  • 3: 300
  • 4: 650
  • 5: 1200
  • 6: 2000
  • 7: 3200
  • 8: 5000
  • 9: 7500
  • 10: 11000

Smoking

File: shared/config/smoking.lua

Core defaults:

SettingDefault
Config.Smoking.cooldown60
Config.Smoking.bluntDurationMultiplier1.25
Config.Smoking.bluntIntensityBonus0.1

Rolling items:

  • rolling_papers -> joint
  • cigarillo_wraps -> blunt

Both require:

  • weed_1g
  • lighter

Controls:

SettingDefault
Config.Smoking.controls.smoke38
Config.Smoking.controls.stop74

Needs-effect toggles:

SettingDefault
Config.Smoking.needsEffects.stressRelieftrue
Config.Smoking.needsEffects.hungerCosttrue
Config.Smoking.needsEffects.healingtrue

Effect scales:

SettingDefault
potencyScale1.0
thcHungerScale10
thcSpeedScale0.08
cbdHealScale1.0
cbdStressScale25
densityDurationMin300
densityDurationMax600
qualityFloor0.4
healTickInterval5

Screen effects:

  • timecycle: spectator6
  • timecycle strength: 0.66
  • camera shake: DRUNK_SHAKE
  • amplitude: 2.5
  • drunk clipset: MOVE_M@DRUNK@SLIGHTLYDRUNK

Store

File: shared/config/store.lua

Core defaults:

SettingDefault
Config.Store.enabledtrue
Config.Store.coordsvec3(-1275.97, -1139.92, 6.79)
Config.Store.heading114.07
Config.Store.model's_m_m_linecook'
Config.Store.scenario'WORLD_HUMAN_STAND_IMPATIENT'
Config.Store.interactDistance2.5
Config.Store.targetRadius1.5

Blip defaults:

  • enabled: true
  • sprite: 628
  • color: 2
  • scale: 0.5
  • label: store_blip

Default categories:

  • essentials
  • processing
  • equipment
  • custom

Config.Store.customItems is an extension hook for additional products.

Scientist

File: shared/config/scientist.lua

Core defaults:

SettingDefault
Config.Scientist.coordsvec3(3610.36, 3653.20, 31.26)
Config.Scientist.heading338.80
Config.Scientist.model's_m_m_scientist_01'
Config.Scientist.scenario'WORLD_HUMAN_CLIPBOARD'
Config.Scientist.interactDistance2.5
Config.Scientist.targetRadius1.5

Lab report:

  • price: 500
  • required level: 2

Cloning:

  • required level: 4
  • options:
    • 5 for 2500
    • 10 for 4000
    • 25 for 7500

Blip defaults:

  • enabled: false
  • sprite: 499
  • color: 2
  • scale: 0.7
  • label: scientist_blip

Wild Plants

File: shared/config/wildplants.lua

SettingDefault
Config.WildPlants.enabledtrue
Config.WildPlants.spawnDistance100.0
Config.WildPlants.seedChance0.40
Config.WildPlants.seedAmount.min1
Config.WildPlants.seedAmount.max2
Config.WildPlants.respawnTime.min1800
Config.WildPlants.respawnTime.max3600
Config.WildPlants.harvestXP15

Yield defaults:

  • weed_bud
  • amount: 1-4

Shipped default zones:

  • buen_vino_rd (10 plants)
  • route_68 (20 plants)

Each zone defines:

  • name
  • plants
  • points
  • minZ / maxZ (the zone's vertical band — older configs with a thickness value are converted automatically)

To add a zone, open the Wild Plants section of /weed settings, add a spawn zone entry, give it a name and a plant count, and press the shape button to draw the outline directly in the world — a fly-around editor lets you place, nudge, and preview the points. Plants pick random spots inside the outline. Placement zones (blocked areas and allowed areas) are drawn the same way from their own section.

Next Steps