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 settingsinstead, 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_settingstable and restart.
This reference documents what each setting does — the same descriptions appear in the in-game editor.
Config File Map
| File | Purpose |
|---|---|
shared/config.lua | General settings, dirty money, plant decay, labels, placement zones, item usage whitelist, police alerts, animations |
shared/config/plants.lua | Plant definitions, stages, harvest output |
shared/config/strains.lua | Base strain list and required levels |
shared/config/genetics.lua | Trait order, mutation, breeding, quality weights |
shared/config/drying.lua | Weed table drying and heater settings |
shared/config/equipment.lua | Placeable equipment, bagging, packaging, brick press, stash, water containers |
shared/config/lamps.lua | Grow lamp definitions and growth multiplier |
shared/config/freezedryer.lua | Freeze dryer timing, trays, and capacity |
shared/config/dryingrack.lua | Drying rack timing, trays, and capacity |
shared/config/progression.lua | XP rewards and level thresholds |
shared/config/smoking.lua | Rolling, smoking effects, controls, and toggles |
shared/config/store.lua | Store NPC, blip, stock list, categories, custom items |
shared/config/scientist.lua | Scientist NPC, lab report, cloning options |
shared/config/wildplants.lua | Wild plant zones, yields, respawn, and XP |
General Settings
File: shared/config.lua
| Setting | Type | Default | Description |
|---|---|---|---|
Config.Debug | boolean | false | Verbose debug logging (routed through oxide-logger if installed) |
Config.RequireOwnership | boolean | true | Restrict removal actions to the original owner |
Config.SpawnDistance | number | 100.0 | Client spawn range for placed world entities |
Dirty Money
Scientist services use Config.DirtyMoney.
| Setting | Type | Default | Description |
|---|---|---|---|
Config.DirtyMoney.mode | string | 'account' | 'account' or 'item' |
Config.DirtyMoney.account | string | 'cash' | Account name when using account mode |
Config.DirtyMoney.item | string | 'black_money' | Item name when using item mode |
Plant Settings
| Setting | Type | Default | Description |
|---|---|---|---|
Config.PlantSettings.waterDecayRate | number | 0.2 | Water loss per minute |
Config.PlantSettings.fertilizerDecayRate | number | 0.1 | Fertilizer loss per minute |
Config.PlantSettings.updateInterval | number | 60000 | Plant tick interval in ms |
Config.PlantSettings.maxLampsPerPlant | number | 4 | Max linked lamps per plant |
Config.PlantSettings.removeLampsOnPlantDeath | boolean | false | Delete lamps instead of unlinking on plant death |
Default water sources:
watering_can: metadata source,fillAmount = 25,metaKey = 'water_level',metaCost = 10water: 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
| Setting | Type | Default |
|---|---|---|
Config.WateringCan.capacity | number | 100 |
Config.WateringCan.waterCost | number | 15 |
Config.WateringCan.fillAmount | number | 20 |
Processing
| Setting | Type | Default |
|---|---|---|
Config.Processing.pruneYield.min | number | 2 |
Config.Processing.pruneYield.max | number | 5 |
Config.Processing.leafYield.min | number | 1 |
Config.Processing.leafYield.max | number | 3 |
Labels
| Setting | Type | Default |
|---|---|---|
Config.Labels.maxDist | number | 2.0 |
Config.Labels.scaleMin | number | 0.55 |
Config.Labels.scaleMax | number | 1.0 |
Config.Labels.scaleNearDist | number | 1.5 |
Config.Labels.scaleFarDist | number | 3.0 |
Config.Labels.plantHeightOffset | number | 1.2 |
Config.Labels.tableHeightOffset | number | 1.0 |
Config.Labels.updateInterval | number | 16 |
Placement Zones
Config.ZoneMode decides how map areas control where players may plant and place equipment:
| Mode | What 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 —
minRankanddutyOnlyare still checked. minRankis the numeric grade level;0means any rank.dutyOnlyapplies 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.
| Setting | Default | What it does |
|---|---|---|
| Alert chance | 0 | Chance of an alert each time a stage is started. 0 turns alerts off completely. 0.15 means roughly one in seven. |
| Per-stage chance | all -1 | Set a different chance for one stage. -1 means "use the alert chance above". |
| Site cooldown | 300 s | How 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 jobs | police | Which jobs receive the alert. Capitalisation doesn't matter. |
| Call code, Title, Message | 10-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. |
| Priority | 2 | 1 is highest. |
| Icon, Map blip | The 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:
genericog_kushpurple_hazesour_dieselblue_dreamnorthern_lightswhite_widowgirl_scoutgranddaddy_purpleamnesia_haze
Each strain defines:
labelbaseQualityrequiredLeveltraits
Genetics
File: shared/config/genetics.lua
Trait order:
potencyflavoryieldresiliencegrowth_speedthccbdaromadensityfrost
Key defaults:
| Setting | Default |
|---|---|
Config.Genetics.breedingUnlockLevel | 3 |
Config.Genetics.mutationRate | 0.10 |
Config.Genetics.mutationRange | 20 |
Config.Genetics.maxGeneration | 0 |
Config.Genetics.maleBias | 0.4 |
Config.Genetics.genderCheckStage | 2 |
Config.Genetics.maleChance | 0.4 |
Config.Genetics.pollenGatherTime | 3000 |
Config.Genetics.pollenDestroysPlant | true |
Config.Genetics.seedFromHarvestChance | 0.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:
| Setting | Default |
|---|---|
Config.Drying.dryingTime | 1800 |
Config.Drying.updateInterval | 30000 |
Config.Drying.maxSlots | 14 |
Config.Drying.items.input | 'weed_bud' |
Config.Drying.items.output | 'dried_weed_bud' |
Heater defaults:
| Setting | Default |
|---|---|
Config.Drying.heater.item | 'weed_heater' |
Config.Drying.heater.model | 'prop_patio_heater_01' |
Config.Drying.heater.maxPerRack | 3 |
Config.Drying.heater.dryingMultiplier | 1.5 |
Config.Drying.heater.snapOffsets | 3 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 x1baggy x1- output
weed_1g x1
Default packaging recipes:
weed_1g x3 -> weed_eighth x1weed_eighth x2 -> weed_quarter x1weed_quarter x2 -> weed_half x1weed_half x2 -> weed_ounce x1
Storage Tote
| Setting | Default |
|---|---|
storage_tote.stash.slots | 15 |
storage_tote.stash.maxWeight | 30.0 |
Water Containers
| Setting | Default |
|---|---|
water_container_small.waterContainer.capacity | 500 |
water_container_small.waterContainer.fillPerUse | 75 |
water_container_large.waterContainer.capacity | 1000 |
water_container_large.waterContainer.fillPerUse | 75 |
Progression-gated equipment
| Equipment | Required Level |
|---|---|
drying_rack | 3 |
freeze_dryer | 7 |
brick_press | 8 |
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
| Setting | Default |
|---|---|
Config.FreezeDryer.dryingTime | 600 |
Config.FreezeDryer.requiredLevel | 7 |
Config.FreezeDryer.updateInterval | 30000 |
Config.FreezeDryer.items.input | 'weed_bud' |
Config.FreezeDryer.items.output | 'dried_weed_bud' |
Config.FreezeDryer.trays.budsPerTray | 8 |
Config.FreezeDryer.trays.stackCount | 9 |
Config.FreezeDryer.trays.baseColumns | 2 columns |
Derived capacity:
- total trays:
18 - max slots:
144
Drying Rack
File: shared/config/dryingrack.lua
| Setting | Default |
|---|---|
Config.DryingRack.dryingTime | 1200 |
Config.DryingRack.updateInterval | 30000 |
Config.DryingRack.budsPerTray | 8 |
Config.DryingRack.trayCount | 4 |
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:
| Action | XP |
|---|---|
plant | 10 |
water | 2 |
fertilize | 2 |
harvest | 25 |
placeLamp | 3 |
placeBud | 2 |
collectDried | 5 |
prune | 5 |
bag | 5 |
checkGender | 5 |
gatherPollen | 10 |
crossbreed | 30 |
package | 8 |
brickPress | 20 |
rackLoad | 5 |
rackCollect | 8 |
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:
| Setting | Default |
|---|---|
Config.Smoking.cooldown | 60 |
Config.Smoking.bluntDurationMultiplier | 1.25 |
Config.Smoking.bluntIntensityBonus | 0.1 |
Rolling items:
rolling_papers -> jointcigarillo_wraps -> blunt
Both require:
weed_1glighter
Controls:
| Setting | Default |
|---|---|
Config.Smoking.controls.smoke | 38 |
Config.Smoking.controls.stop | 74 |
Needs-effect toggles:
| Setting | Default |
|---|---|
Config.Smoking.needsEffects.stressRelief | true |
Config.Smoking.needsEffects.hungerCost | true |
Config.Smoking.needsEffects.healing | true |
Effect scales:
| Setting | Default |
|---|---|
potencyScale | 1.0 |
thcHungerScale | 10 |
thcSpeedScale | 0.08 |
cbdHealScale | 1.0 |
cbdStressScale | 25 |
densityDurationMin | 300 |
densityDurationMax | 600 |
qualityFloor | 0.4 |
healTickInterval | 5 |
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:
| Setting | Default |
|---|---|
Config.Store.enabled | true |
Config.Store.coords | vec3(-1275.97, -1139.92, 6.79) |
Config.Store.heading | 114.07 |
Config.Store.model | 's_m_m_linecook' |
Config.Store.scenario | 'WORLD_HUMAN_STAND_IMPATIENT' |
Config.Store.interactDistance | 2.5 |
Config.Store.targetRadius | 1.5 |
Blip defaults:
- enabled:
true - sprite:
628 - color:
2 - scale:
0.5 - label:
store_blip
Default categories:
essentialsprocessingequipmentcustom
Config.Store.customItems is an extension hook for additional products.
Scientist
File: shared/config/scientist.lua
Core defaults:
| Setting | Default |
|---|---|
Config.Scientist.coords | vec3(3610.36, 3653.20, 31.26) |
Config.Scientist.heading | 338.80 |
Config.Scientist.model | 's_m_m_scientist_01' |
Config.Scientist.scenario | 'WORLD_HUMAN_CLIPBOARD' |
Config.Scientist.interactDistance | 2.5 |
Config.Scientist.targetRadius | 1.5 |
Lab report:
- price:
500 - required level:
2
Cloning:
- required level:
4 - options:
5for250010for400025for7500
Blip defaults:
- enabled:
false - sprite:
499 - color:
2 - scale:
0.7 - label:
scientist_blip
Wild Plants
File: shared/config/wildplants.lua
| Setting | Default |
|---|---|
Config.WildPlants.enabled | true |
Config.WildPlants.spawnDistance | 100.0 |
Config.WildPlants.seedChance | 0.40 |
Config.WildPlants.seedAmount.min | 1 |
Config.WildPlants.seedAmount.max | 2 |
Config.WildPlants.respawnTime.min | 1800 |
Config.WildPlants.respawnTime.max | 3600 |
Config.WildPlants.harvestXP | 15 |
Yield defaults:
weed_bud- amount:
1-4
Shipped default zones:
buen_vino_rd(10 plants)route_68(20 plants)
Each zone defines:
nameplantspointsminZ/maxZ(the zone's vertical band — older configs with athicknessvalue 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.