Configuration Reference
Every oxide-weed setting, file by file, with defaults — and how the database-backed settings editor works.
Every setting in oxide-weed, file by file. 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. - Two exceptions:
Config.UseHudAccentandConfig.SceneAnimsare never copied into the database, so they are always read fromshared/config.lua.
This reference documents what each setting does — the same descriptions appear in the in-game editor.
Times are in seconds unless a setting name ends in ms or the description says otherwise.
Which File Does What
| File | Covers |
|---|---|
shared/config.lua | General settings, dirty money, plant care, floating labels, placement zones, item usage whitelist, animations |
shared/config/plants.lua | Growth stages, timing, harvest yield |
shared/config/strains.lua | The base strain list and their stats, and the seed packs the store sells |
shared/config/genetics.lua | Traits, breeding, mutation, quality scoring |
shared/config/drying.lua | Weed table drying and heaters |
shared/config/dryingrack.lua | The standalone drying rack |
shared/config/freezedryer.lua | The freeze dryer |
shared/config/equipment.lua | Placeable equipment, bagging, packaging, brick press |
shared/config/waterhose.lua | The water hose: length, spray patterns, and where each water tank's tap and hook are |
shared/config/growtents.lua | Grow tents: sizes, slots, light, carbon filter, smell and police seizure |
shared/config/models.lua | Model replacements for older game builds |
shared/config/lamps.lua | Grow lamps |
shared/config/progression.lua | XP rewards, level thresholds, level-up feedback, first-time XP, grower perks, strain mastery, daily and weekly goals, master ranks, signature strains, gang influence, and the Grower app |
shared/config/smoking.lua | Rolling, smoking effects, and controls |
shared/config/store.lua | The Germinator store NPC and its stock |
shared/config/scientist.lua | The scientist NPC, lab reports, cloning prices |
shared/config/wildplants.lua | Wild plant zones, yields, and respawn timing |
General Settings
File: shared/config.lua
| Setting | Default | What it does |
|---|---|---|
Config.Debug | false | Verbose debug logging (routed through oxide-logger if installed) |
Config.RequireOwnership | true | Only the player who placed something (plant, lamp, equipment, drying buds) can take it back |
Config.SpawnDistance | 100.0 | How close a player must be before placed objects appear on their screen |
Config.UseHudAccent | true | The stage HUD (the panels drawn over the game while you plant, harvest, dry, press and so on, the key prompts, the level-up banner and the XP pop-ups) uses your server's accent colour from Oxide HUD, set in Oxide HUD's Config.Theme. false keeps oxide-weed's own green. Without Oxide HUD, or with no accent set there, nothing changes. Config file only: it is not in /weed settings, so change it in the file and restart |
Config.SceneAnims | base-game clips | The working animation other players see on you at the brick press, drying rack, freeze dryer and crossbreeding station. Your view of those scenes is private, so without it you would stand frozen to everyone else. Set an entry (press, dryingrack, freezedryer, crossbreed) to false to turn that one off. Config file only: it is not in /weed settings, so change it in the file and restart |
Dirty Money
Controls how the scientist charges players (the store always uses regular cash).
| Setting | Default | What it does |
|---|---|---|
Config.DirtyMoney.mode | 'account' | 'account' charges a money account; 'item' takes a money item instead |
Config.DirtyMoney.account | 'cash' | Which account to charge in account mode (e.g. 'cash', 'black_money') |
Config.DirtyMoney.item | 'black_money' | Which item to take in item mode |
Plant Care
| Setting | Default | What it does |
|---|---|---|
Config.PlantSettings.waterDecayRate | 0.2 | Water % a plant loses per minute |
Config.PlantSettings.fertilizerDecayRate | 0.1 | Fertilizer % a plant loses per minute |
Config.PlantSettings.updateInterval | 60000 | How often (in ms) the server updates all plants |
Config.PlantSettings.maxLampsPerPlant | 4 | Most grow lamps that can help one plant |
Config.PlantSettings.removeLampsOnPlantDeath | false | true deletes a dead plant's lamps; false leaves them standing |
A plant dies if its water or fertilizer reaches zero. Hardy strains (high resilience) drain slower.
Ways to water a plant (Config.PlantSettings.water.sources), tried in order:
- a
watering_can— adds 25 water (fillAmount), uses 10 of the can's stored water (metaCost) - a
wateritem — consumed, adds 25 water
The watering_can row is the can's only rule. Watering from the plant's menu and using the can item next to a plant both pour by it, so they cost and give the same. A can holding less than metaCost can't pour.
The prop tilted over the pot in the watering scene is Config.PlantSettings.water.model, a watering can (oxide_weed_watering_can, streamed with the resource). fxOffset is where its water leaves (the can's rose, in the prop's own space), rotateOffset is how far one scroll tilts it, pourAngle (default 40) is how far it must tilt before it pours, and headingOffset (default -90) turns it side-on to the camera with the spout to the right.
Fertilizing (Config.PlantSettings.fertilizer): consumes 1 fertilizer, adds 35.
Harvesting (Config.PlantSettings.harvest): returns the plant_pot by default.
Watering Can
| Setting | Default | What it does |
|---|---|---|
Config.WateringCan.capacity | 100 | How much water the can holds. Refilling from a tank fills it up to this |
What a pour costs and gives is set on the watering_can row of the water sources above. The older WateringCan.waterCost and WateringCan.fillAmount settings are no longer used; saved values for them are ignored.
Pruning Yields
| Setting | Default |
|---|---|
Config.Processing.pruneYield | 2–5 pruned buds per dried bud |
Config.Processing.leafYield | 1–3 cannabis leaves per prune |
Floating Labels
Config.Labels controls the small info text that floats above plants and tables (view distance, text size, height offsets). The defaults look right for the shipped models — you only need these if you swap in custom models.
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.
Careful: 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.
- A seed's rule and its strain's level are checked again when the plant goes in, loose pot or grow tent, so a player can't get around them by skipping the seed use.
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 one of them 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
Config.Anims sets the kneel-down animation played when placing and removing things (1 second by default).
Plants
File: shared/config/plants.lua
One plant type ships: cannabis_seed. It defines:
- planting requires a
plant_pot(consumed) - the plant models used at each growth stage
- stage timing — stages 1, 2, and 3 each last
60 * 60(1 hour) by default, so plants are harvest-ready after about 3 hours - harvest yield — 3–8
weed_bud
To slow down or speed up growing on your server, change the time value on stages 1–3.
| Setting | Default | What it does |
|---|---|---|
Config.MaxPlantsPerPlayer | 40 | The most plants one character can have at once, loose pots and grow tent slots together. 0 is no limit. Lowering it never removes plants already growing |
The default leaves room for two full Large Grow Tents (16 plants, at the default of two tents per player) and 24 loose pots beside them. It's checked when a seed is used and again by the server when the plant goes in, so a player at the limit is told before the planting starts.
Loose pots by level
Config.LoosePlantCap is an optional second limit on loose pots only, which grows with the player's level. It ships off.
| Setting | Default | What it does |
|---|---|---|
enabled | false | Turns the cap on |
byLevel | 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 | Loose pots a character can have growing at each level, in order from level 1. Levels past the end of the list use the last entry. 0 is no cap at that level |
Grow tent slots don't count toward it (tents have their own limit), and MaxPlantsPerPlayer still caps everything. Like the plant limit it's checked when a seed is used and again when the plant goes in, and lowering it never removes plants already growing. While it's on, the Grower Profile shows the player's loose pots against their cap, and each level that raises it appears in the unlock list. It's under Loose Pots in the Progression category of /weed settings.
Strains
File: shared/config/strains.lua
Thirteen base strains ship, from generic (the starter strain) up to durban_poison. Each defines:
label— the display namebaseQuality— starting quality scorerequiredLevel— player level needed to plant it. Changing it in/weed settingsmoves the planting gate at once, also for seeds already in circulationtraits— the 10 stat values
The default ladder: level 1 → Generic. Level 2 → OG Kush, Purple Haze. Level 3 → Sour Diesel, Blue Dream. Level 4 → Northern Lights, White Widow. Level 5 → Girl Scout Cookies, Granddaddy Purple, Amnesia Haze. Level 7 → Gelato. Level 8 → Wedding Cake. Level 9 → Durban Poison.
The three premium strains each lead the catalogue on one trait: Gelato on flavor, Wedding Cake on density, Durban Poison on THC. They top out around Gas grade, so a well-bred cross can still beat them. They're marked noWild, so they never grow as wild plants; their seeds come from the store's seed packs, breeding and cloning. Tick Never grows wild on any strain in /weed settings to do the same.
Seed packs
Config.SeedPackets lists sealed packs of one strain's seeds. Using a pack opens it into that many ordinary seeds of the strain, which plant, crossbreed and clone like any other seed.
| Pack item | Strain | Seeds | Store price |
|---|---|---|---|
gelato_seed_pack | gelato | 3 | $2,500 |
wedding_cake_seed_pack | wedding_cake | 3 | $3,500 |
durban_poison_seed_pack | durban_poison | 3 | $5,000 |
The store sells a pack from its strain's level, under a Seeds tab. A pack whose strain has been removed from the catalogue won't open. To sell a pack of another strain, add a row here and the item to the store list (and to your inventory).
Hybrid strains created through crossbreeding are generated and saved automatically — you don't define those here.
Genetics
File: shared/config/genetics.lua
| Setting | Default | What it does |
|---|---|---|
breedingUnlockLevel | 3 | Level needed to crossbreed |
mutationRate | 0.10 | Scales the random shift applied to every trait; it is not a mutation probability |
mutationRange | 20 | Multiplied by mutationRate: up to ±2 points by default, before rounding to the nearest 5 and clamping to 0–100 |
maxGeneration | 0 | Breeding generation cap — 0 means unlimited |
maleBias | 0.4 | Share of each trait inherited from the male parent (40% male, 60% female) |
maleChance | 0.4 | Chance a plant grows male (40%) |
genderCheckStage | 2 | Growth stage where gender can be checked |
maleChance | 0.4 | Chance any planted seed grows male (40%) |
pollenGatherTime | 3000 | Pollen gathering time in ms |
pollenDestroysPlant | true | Gathering pollen destroys the male plant |
seedFromHarvestChance | 0.25 | Chance a harvest also gives a seed (25%) |
namePool is the word list used to auto-name hybrid strains (40 prefixes × 40 suffixes — 1,600 possible names like "Crystal Diesel" or "Nuclear Gelato").
qualityWeights decides which traits matter for the quality score: potency 20%, THC 18%, density / frost / flavor / aroma 13% each, CBD 10%. Yield, resilience, and growth speed don't affect quality — they affect growing instead.
Weed Table Drying
File: shared/config/drying.lua
| Setting | Default | What it does |
|---|---|---|
Config.Drying.dryingTime | 1800 | 30 minutes per bud |
Config.Drying.updateInterval | 30000 | How often (ms) the server checks drying progress |
Config.Drying.maxSlots | 14 | Buds one table can dry at once |
Config.Drying.items.input | 'weed_bud' | What goes on the table |
Config.Drying.items.output | 'dried_weed_bud' | What comes off |
Heaters
| Setting | Default | What it does |
|---|---|---|
heater.item | 'weed_heater' | The heater inventory item |
heater.model | 'oxide_weed_heater' | The world model (a heater on a stand, streamed with the resource) |
heater.maxPerRack | 3 | Heaters per table |
heater.dryingMultiplier | 1.5 | Each heater adds 50% drying speed (3 heaters = 2.5x) |
heater.snapOffsets | 3 positions | Where heaters snap onto the table, each turned to face it |
Each snapOffsets entry can be written two ways:
-- Position only (heater faces the same way as the table)
vec3(1.408, 0.0, -0.001),
-- Position + rotation (degrees added on top of the table's rotation)
{ offset = vec3(1.408, 0.0, -0.001), rotation = vec3(0.0, 0.0, 90.0) },The default snap points use the rotation form so each heater faces the table. A heater placed next to a table always turns to face it once it is set down. While a heater is locked to a snap point, scroll-wheel rotation does nothing — move it off the snap to rotate freely.
Drying Rack
File: shared/config/dryingrack.lua
| Setting | Default | What it does |
|---|---|---|
Config.DryingRack.dryingTime | 1200 | 20 minutes per bar |
Config.DryingRack.updateInterval | 30000 | Progress check interval (ms) |
Config.DryingRack.budsPerBar | 8 | Buds hanging from each bar, spread evenly along it |
Config.DryingRack.barCount | 4 | Bars per rack (32 buds total) |
Config.DryingRack.items | weed_bud → dried_weed_bud | Input and output items |
The rest of the file is the camera angle, the bowl and its buds on the rack's shelf, and the bar positions for the rack's 3D interface — only relevant if you change models. Buds hang from the bars by their stem end, worked out from the bud model's size, so a different bud model still hangs correctly.
Freeze Dryer
File: shared/config/freezedryer.lua
| Setting | Default | What it does |
|---|---|---|
Config.FreezeDryer.dryingTime | 600 | 10 minutes per tray |
Config.FreezeDryer.updateInterval | 30000 | Progress check interval (ms) |
Config.FreezeDryer.items | weed_bud → dried_weed_bud | Input and output items |
Config.FreezeDryer.trays.budsPerTray | 8 | Buds per tray |
Config.FreezeDryer.trays.stackCount | 9 | Trays stacked per column (2 columns) |
The level needed to place and use a freeze dryer is its row under Equipment (requiredLevel, 7 by default).
With the defaults that works out to 18 trays and 144 buds total. The tray positions are computed automatically from the column layout at the bottom of the file.
The rest of the file is the look of the freezer's 3D interface — only relevant if you change models: the overview and tray cameras, how far a tray slides out, the two door models with their hinge points, how far and how fast the doors open, the lights inside, where each bud sits on a tray, and the bowl the player holds while loading. Buds rest on the tray by their own lowest point, worked out from the bud model's size, so a different bud model still sits correctly.
The stock tray's floor is at local z 0.00537109375 (measured from its GTA mesh), below its 0.028791 rim. budOffsets[].z uses that floor; the client adds the rotated bud model's rest lift. Saved spots still at the old default 0.029 move to the corrected height once. Spots owners fitted themselves and different models stay as saved.
Equipment
File: shared/config/equipment.lua
Each entry defines a placeable: its inventory item, world model(s), and any level requirement.
| Equipment | Level required |
|---|---|
| Weed table, storage tote, water containers | none |
drying_rack | 3 |
freeze_dryer | 7 |
brick_press | 8 |
Weed table recipes
The weed table entry also holds the bagging and packaging recipes:
- Bagging: 1
pruned_weed_bud+ 1baggy→ 1weed_1g - Packaging (4 seconds each,
progressDuration):- 3
weed_1g→ 1weed_eighth - 2
weed_eighth→ 1weed_quarter - 2
weed_quarter→ 1weed_half - 2
weed_half→ 1weed_ounce
- 3
Storage tote
15 slots, max weight 50000 grams (50 kg). Legacy saved capacities in kilograms convert to grams once on startup.
Water containers
| Model | Capacity | Water added per water item | |
|---|---|---|---|
| Small | oxide_weed_tank_small | 500 | 75 |
| Large | oxide_weed_tank_large | 1000 | 75 |
Both are water tanks streamed with the resource, with a tap on the front for the water hose and a sight gauge that shows the water level. The tap faces the player when the tank is placed.
A tank that is picked up keeps its water in the item's metadata (water_level, like the watering can) and gets it back when it's placed again. The server also records that water in weed_carried_tanks and hands it out once, so a copied item (a split stack, a duplicate) places empty. This needs an inventory that stores item metadata, such as ox_inventory or qb-inventory. On qb-inventory, set unique = true on the two tank items so a watered tank never shares a slot with another tank (see INSTALLATION). When the inventory can't keep the water, the tank is still picked up, the player is told how much water was poured out, and the server logs it.
Brick press
| Setting | Default |
|---|---|
| Input | 10x dried_weed_bud (same strain and quality) |
| Output | 1x weed_brick |
| XP per brick | 60 |
| Pressing animation | 9 seconds |
The rest of the press entry is camera and prop positioning for the pressing scene.
Water Hose
File: shared/config/waterhose.lua — in /weed settings under Growing → Water Hose
| Setting | Default | What it does |
|---|---|---|
enabled | true | Turns the hose options on or off. Hoses already connected stay on their tanks |
item | water_hose | The item that connects to a tank |
requiredLevel | 0 | Weed level needed to connect a hose |
length | 12.0 | Metres of hose. Pulled further, it reels back onto the tank |
warnAt | 0.85 | Share of the length at which the HUD warns the hose is nearly out |
plantWaterPerUnit | 2.5 | Water a plant gains per tank unit sprayed onto it. 2.5 matches the watering can |
xpPerWater | 25 | A plant earns the watering XP each time it has received this much water from the hose |
maxTargets | 4 | Most plants one spray waters at the same time |
patterns | jet, shower | The spray patterns scroll switches between (see below) |
pressure.minRangeScale | 0.7 | Range left when the tank is nearly empty |
pressure.sputterBelow | 0.05 | Fill level below which the stream sputters |
pitch.min / pitch.max | -35 / 20 | How far down and up the stream can aim, in degrees |
pitch.offset | 5 | Added to the camera's angle, so a level camera sprays slightly up |
splash | core / ent_sht_water | The splash effect where the water lands |
rope.type | 4 | The game's rope style used for the hose body. 4 is thin and dark like a garden hose |
rope.slack | 0.3 | Metres of hose beyond the straight line between the tank and the nozzle. 0 is pulled tight |
models | oxide_weed_hose_* | The nozzle, the coupling on the tap, the coiled hose and the gauge water |
hand | bone 28422 | Where the nozzle sits in the hand |
anim | coffee-hold clip | The animation played while holding the hose |
keys | 24, 241, 242, 194 | Controls: spray (LMB, held), next and previous pattern (scroll), put back (BACKSPACE) |
renderDistance / fxDistance | 60 / 30 | How far away other players' hoses and their water are drawn, in metres |
maxRopes | 6 | Most hoses one player's game draws at once |
tickMs | 1000 | How often the server drains the tank while spraying |
containers | small, large | Where the tap, hook, gauge, kneeling spot and camera are on each water container |
Spray patterns:
| Pattern | Flow (tank units a second) | Reach | Splash radius |
|---|---|---|---|
jet | 5 | 7 m | 0.6 m |
shower | 3 | 3.5 m | 1.2 m |
Note: A water container with no entry under
containerstakes no hose. If you add your own container to the Equipment list, add its fittings under Tank fittings too. Offsets there are measured in metres from the container's floor centre, with -Y toward the player.
Grow Tents
File: shared/config/growtents.lua — in /weed settings under Growing → Grow Tents
| Setting | Default | What it does |
|---|---|---|
enabled | true | Off stops tents being placed or tended. Tents already placed stay |
access | 'anyone' | Who can open and tend a tent: 'anyone' or 'owner'. With 'owner', other players don't see the tend, open, close and fit-filter options |
maxPerPlayer | 2 | Tents per character, every size together. 0 is no limit |
reach | 3.0 | How far from the spot in front of the door a player can work a tent |
footprintMargin | 0.25 | Clear space kept around a tent: other tents, loose pots and lamps stay this far away |
maxGroundDelta | 0.12 | How much the ground under a tent may rise or fall, in metres |
doorOpenTime / doorOpenAngle | 700 / 100 | How long hinged doors (the grow box) take to open (ms) and how far they swing (degrees) |
flap | five models, 1100 ms | The tents' roll-up flaps: the shut and rolled-up models, the parts shown while a flap rolls, the roll's size and how long it takes |
sceneAnim | work loop | What other players see while someone works in a tent |
stageModels | stages 3 and 4 | The compact, trained models plants use in a tent for the stages that wouldn't fit a slot |
budSpawn | z 0.92–1.20 | Where harvest buds appear on a tent plant |
light | pink, 2.2 m | The built-in light's colour, reach, brightness and spread, drawn while a door is open |
filter | carbon_filter, level 5, 0.35 | The carbon filter's item, model, level and what it does to the police alert chance |
smell | on, 6 m, police 12 m, from stage 3, 300 s | When players notice the smell of a tent with no filter |
seize | on, police, on duty, 10000 ms | Who can seize a grow and how long it takes. A seizure also costs each signature strain growing in the tent some reputation (see Reputation) |
tiers | three sizes | Each size: its item, level, model, door style (hinge or roll), doors, size, plant slots, light, filter mount, door spot, cameras and what it does for the plants. A hinged door has a model, a hinge and a swing direction; a roll-up door has only its position, the centre of the opening at the floor |
Each size's numbers:
| Size | Level | Slots | Growth | Care bonus | Yield | Water and fertilizer use | Police alert chance | Harvest XP bonus |
|---|---|---|---|---|---|---|---|---|
grow_box | 2 | 2 | 1.5 | 0.03 | 1.05 | 0.90 | 0.5 | 3 |
grow_tent | 4 | 4 | 1.6 | 0.05 | 1.10 | 0.85 | 0.7 | 5 |
grow_tent_large | 6 | 8 | 1.7 | 0.08 | 1.15 | 0.80 | 0.8 | 8 |
Note: Offsets in a size (slots, doors, light, filter mount, door spot, cameras) are measured in metres from the tent's floor centre, with -Y toward the door. The
frontandbackcameras are measured from the slot they look at. A size that still has tents placed can't be removed, and a size can't drop a slot that a placed tent has a plant in.
The tents and the carbon filter are in the store's default stock. A server updating from an older version gets the four store rows added once, on the first start after the update.
Model Replacements
File: shared/config/models.lua — in /weed settings under Core → Compatibility
If a model this resource uses is missing on your game build, the resource skips it and warns once in the server console and to online admins, naming the model. Add a row with the model to replace (from) and one your game build has (to). Empty by default: the shipped models are used as they are.
Grow Lamps
File: shared/config/lamps.lua
The default lamp uses the grow_lamp item and makes nearby plants grow 1.5x faster (growthMultiplier). You can add more lamp types by copying the entry.
The default model, oxide_weed_lamp, is an LED grow light on a floor stand and is streamed with the resource. When you place one next to a plant it snaps to one of the plant's four sides and its light panel faces the plant. A lamp placed next to a plant always turns to face it.
Progression
File: shared/config/progression.lua
Everything here is in the Progression category of /weed settings, except gang influence (see Gang influence).
XP awarded per action (Config.Progression.xpRewards):
| Action | XP | Action | XP | |
|---|---|---|---|---|
| Plant a seed | 10 | Gather pollen | 20 | |
| Water a plant | 2 | Crossbreed | 75 | |
| Fertilize | 2 | Package | 8 | |
| Harvest | 30, by grade | Press a brick | 60 | |
| Place a lamp | 0 | Hang buds on the rack (per bud) | 0 | |
| Place bud to dry (per bud) | 0 | Collect from the rack (per bud) | 13 | |
| Collect dried (per bud) | 7 | Check gender | 5 | |
| Prune | 5 | Bag | 5 |
- Watering and fertilizing pay only when the plant needed it: below
careXpBelow(90%) before the pour. The pour always works; a full plant just pays no XP. The water hose pays per water delivered instead (see Water Hose). - Harvest XP follows the grade: the harvest reward times
harvestQualityfor the harvest's grade (Dirt ×0.5, Poor ×0.75, Mid ×1, High ×1.25, Gas ×1.5). A harvest in a grow tent then adds the tent's harvest XP bonus (see Grow Tents). - Drying pays when the dried buds are collected, not when they're put down: buds can be taken back off, so XP for placing them (or for placing a lamp, which can be picked up) could be earned over and over. Keep those at 0.
- Gathering pollen pays once per male plant.
- Selling XP is set in
oxide-drugselling, not here. It pays by weight: its weedxpPerUnit(10) for each gram, counted through each item'sxpUnitsin itsshared/config/drugs.lua(a gram 1, an eighth 3, a quarter 6, a half 12, an ounce 24, a brick 35). So a gram pays 10 XP and an ounce 240, whatever size the weed is sold in. It's the biggest lever on how fast players level.
XP needed for each level (Config.Progression.levels):
| Level | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|
| XP | 100 | 300 | 650 | 1,200 | 2,000 | 3,200 | 5,000 | 7,500 | 11,000 |
The curve must start at level 1 with 0 XP, and each level after must have a higher number and need more XP; the editor refuses a save that doesn't. A player moves onto an edited curve at their next XP. XP keeps counting past the last level, toward master ranks (see Master ranks).
Grower XP
Config.GrowerXp holds the player feedback and the XP that isn't a per-action reward:
| Setting | Default | What it does |
|---|---|---|
levelUpNotify | true | On level-up, a message and a banner listing what the level unlocked. On a new master rank, a message and a banner with the rank's title |
showXpGains | true | "+XP" pop-ups near the bottom of the screen as XP is earned |
sellingLevel | 2 | Where the Grower Profile lists street selling. Match oxide-drugselling's weed level. The row only shows while oxide-drugselling runs |
careXpBelow | 90 | Watering and fertilizing pay XP only below this (%) |
harvestQuality | Dirt 0.5 … Gas 1.5 | Harvest XP multiplier per grade |
smoke / roll | 5 / 3 | XP for smoking and for rolling a joint or blunt |
firsts | 365 in all | One-time XP the first time a character does each action (below) |
bestQualityXp | 25 | A harvest at least bestQualityStep above the player's best quality so far. Their first harvest sets the mark |
bestQualityStep | 5 | How far above the best a harvest must be to count |
bestGenerationXp | 50 | A harvest of a higher generation than the player has harvested before (from generation 2) |
skillsMirror | '' | A skill name in your server's skill system (pickle_xp, ot_skills, evolent_skills, or o-link's own skills). Every grower XP grant is also added to that skill, through o-link. Empty is off |
First-time XP, paid once per character on top of the usual XP:
| Plant | Water | Fertilize | Harvest | Harvest from a tent | Harvest a wild plant | Collect dried buds | Trim | Bag | Crossbreed | Press a brick |
|---|---|---|---|---|---|---|---|---|---|---|
| 50 | 20 | 20 | 50 | 25 | 25 | 25 | 25 | 25 | 50 | 50 |
Planting, watering and fertilizing a first plant reaches level 2 in the first session. Watering and fertilizing count only when they pay. Set an entry to 0 to turn it off. Players who grew before the update get each first-time bonus the next time they do that action.
Grower perks
Config.GrowerPerks gives the top levels something to change about the work. Every row at or below a player's level applies:
| Level | Perk | Type | Value | Effect |
|---|---|---|---|---|
| 6 | Green Thumb | careDecay | 0.9 | Plants the player plants lose water and fertilizer 10% slower |
| 7 | Clean Trim | pruneMin | 1 | A trim gives at least one more bud (2–5 becomes 3–5) |
| 8 | Seed Saver | seedChance | 0.1 | +10% chance of a seed at harvest |
| 9 | Gentle Collection | keepMale | 1 | Gathering pollen keeps the male plant; it has pollen again after Genetics.pollenRegrowTime (1 hour) |
| 9 | Expansion | extraTents | 1 | One more grow tent (nothing when the tent limit is 0, no limit) |
| 10 | Master Grower | careBonus | 0.03 | A little more care on plants the player plants (quality still tops out at 100) |
| 10 | Master Grower | cloneDiscount | 0.2 | Seed cloning 20% cheaper |
Four more perk types ship unused here. They're what the master rank perks use (see Master ranks), and you can give any of them to a level too:
| Type | Name | Effect | Example |
|---|---|---|---|
dryTime | Quick Cure | Buds the player puts on a weed table, drying rack or freeze dryer dry in this share of the time. They count as put down earlier by the time saved, so they show part dried at once and finish sooner | 0.85 = 15% faster |
harvestBuds | Heavy Harvest | Whole buds added to every plant the player harvests, in a pot or a tent (not wild plants) | 1 = one more bud |
mutationRange | Wild Genes | The player's crossbreeds mutate over this times the Genetics mutation range | 3.0 = threefold range |
labDiscount | Lab Access | Off the scientist's lab report price | 1 = free |
Rows can be moved, removed or repeated. Rows of one type combine: careDecay, dryTime and mutationRange multiply, keepMale switches on, the rest add, and each type stops at its limit (careDecay 0.1–2, careBonus 0–0.3, pruneMin 0–10, seedChance 0–1, extraTents 0–10, cloneDiscount 0–0.9, dryTime 0.1–2, harvestBuds 0–10, mutationRange 0.5–3, labDiscount 0–1). pruneMin, extraTents and harvestBuds take whole numbers. The editor refuses a value outside its type's limits. A row's optional label replaces the perk's name on the Grower Profile and the level-up banner.
careDecay and careBonus belong to the player who plants: they're copied onto the plant when it goes in, so they hold while the planter is away, a helper's level never changes someone else's plant, and later edits don't change plants already in the ground. The other perks belong to whoever does the action.
Strain mastery
Config.StrainMastery counts each character's harvests of each strain, catalogue strains and their own crossbreeds alike, and rewards them by tier. It's under Strain Mastery in /weed settings.
| Setting | Default | What it does |
|---|---|---|
enabled | true | Off stops harvests and sales counting, and the tier rewards. What players counted so far is kept |
countCrossbreeds | true | Crossbred strains count as well as the catalogue strains |
firstHarvestXp | 50 | XP only for the first-ever harvest of each strain, never again on a later day |
firstHarvestPerDay | 3 | How many first harvests pay that XP in one day. 0 = no limit |
tiers | Familiar, Skilled, Master | The tiers, below |
| Tier | harvests | yieldBonus | careBonus | xp | revealTraits | badge |
|---|---|---|---|---|---|---|
| Familiar | 5 | 0 | 0 | 0 | on | off |
| Skilled | 15 | 0.05 | 0 | 0 | off | off |
| Master | 40 | 0 | 0.03 | 250 | off | on |
harvests: a tier is reached at this many harvests of one strain. No two tiers can share a number.yieldBonus: more buds when this player harvests the strain (0.05 = 5%). The part of a bud left over is a chance of one more, so small harvests still gain on average.careBonus: added to the care of the strain's plants this player plants, 0 to 0.3. Like the Master Grower perk, it's copied onto the plant when it goes in, and the two together stop at 0.3.xp: paid once, when the tier is reached.revealTraits: the strain's traits show on the profile, with no lab report.badge: the profile shows a<strain> <tier>badge.label(optional) replaces the tier's name. Without one, the first three are Familiar, Skilled and Master, and any after are "Tier 4" and so on.
Every tier reached keeps its rewards, and they add up. Tier XP is paid once per strain: moving a tier after a player was paid never pays it again, and a tier moved below a player's harvests pays its XP at their next harvest of the strain.
While oxide-drugselling runs, its street sales add to each strain's units sold on the profile (an ounce or a gram is one unit, as drugselling counts them). This is for show only. Nothing needs oxide-drugselling.
Registering a signature strain needs one of these tiers on a crossbreed (Master, by default), so it needs Enabled and Count crossbreeds on here. See Signature strains.
Grower goals
Config.GrowerGoals gives each character a few daily and weekly goals, drawn from a pool for their level. Goals pay XP only. It's under Grower Goals in /weed settings.
| Setting | Default | What it does |
|---|---|---|
enabled | true | Off stops goals counting and hides the Goals tab. Goals already drawn are kept |
notify | true | A message when a goal is done. The "+XP" pop-up shows it either way while XP pop-ups is on |
dailyCount | 3 | Goals drawn each day (0 to 6) |
weeklyCount | 2 | Goals drawn each week (0 to 6) |
resetHour | 0 | The hour (0 to 23) when daily goals reset, on the server's clock |
resetDay | monday | The day weekly goals reset, at resetHour |
rerolls | 1 | How many unfinished daily goals a player can swap for another each day. A swap loses the goal's progress. Weekly goals can't be swapped |
levelScale | 0.1 | Targets and XP grow by this much for each level above 1, so a level 10 player's goals are 1.9 times as big and pay 1.9 times the XP. Master ranks count as extra levels here (goalLevels under Master ranks) |
pool | 23 rows | The goals that can be drawn, below |
Each pool row:
| Field | What it does |
|---|---|
id | A short unique name. Players' goals are saved by it |
period | daily or weekly |
type | What counts (below) |
target, xp | How many, and the XP paid once when it's done, both at level 1 |
weight | How often the row is drawn against the others. 0 = never |
minLevel | The lowest level it's drawn for. A strain's own level also applies |
minGrade | Harvest goals only: the lowest grade that counts |
minGeneration | Harvest and crossbreed goals only: the lowest generation that counts |
strain | Harvest and sale goals only: one strain id from Strains, such as blue_dream. Empty means any strain |
type | Counts |
|---|---|
plant | Seeds planted |
water / fertilize | Waterings and feedings that paid XP, so only plants that needed it. Each 25 water from the hose counts as one watering |
harvest | Plants harvested |
wildHarvest | Wild plants harvested |
dry | Dried buds collected from a weed table, a drying rack or a freeze dryer |
dryRack | Dried buds collected from a drying rack |
prune | Buds trimmed |
bag | Grams bagged |
package | Packages made |
brick | Bricks pressed |
crossbreed | Seeds crossbred |
pollen | Pollen gathered |
sell | Units sold on the street through oxide-drugselling (a gram or an ounce is one unit, as drugselling counts them) |
How goals are drawn and counted:
- Drawn when first needed each day and week: the first time a player's action could count, or when they open their profile. Targets and XP are set then, from the player's level at that moment.
- Only rows that fit: a row is left out while its action pays no XP (its reward is 0 under Progression), for players below its level or its strain's level, and, for
crossbreedandpollen, below the crossbreeding level. Sale rows are drawn only whileoxide-drugsellingruns, and a sale goal is hidden while it isn't. A draw picks goals of different kinds first. - Only actions that paid XP count, so watering a full plant or putting buds down to dry counts for nothing. Sales are the exception:
oxide-drugsellingpays their XP itself. - Fewer goals are drawn when fewer rows fit the player.
- Edits apply to goals drawn after them. A goal already drawn keeps its target, XP and filters until it resets. Moving
resetHourorresetDayearlier can start a new day or week at once; moving them later keeps the current goals until the day or week after, so nobody gets the same day twice.
The shipped pool:
| Period | Goal | Target | XP | From level |
|---|---|---|---|---|
| Daily | Plant seeds | 4 | 40 | 1 |
| Daily | Water thirsty plants | 8 | 30 | 1 |
| Daily | Feed hungry plants | 4 | 30 | 1 |
| Daily | Harvest plants | 3 | 75 | 1 |
| Daily | Harvest plants of High grade or better | 2 | 100 | 3 |
| Daily | Dry buds | 10 | 50 | 1 |
| Daily | Trim buds | 8 | 50 | 1 |
| Daily | Bag grams | 20 | 50 | 1 |
| Daily | Harvest wild plants | 2 | 40 | 1 |
| Daily | Gather pollen | 1 | 40 | 3 |
| Daily | Sell units on the street | 15 | 60 | 2 |
| Weekly | Plant seeds | 15 | 250 | 1 |
| Weekly | Harvest plants | 15 | 300 | 1 |
| Weekly | Trim buds | 40 | 250 | 1 |
| Weekly | Bag grams | 100 | 250 | 1 |
| Weekly | Harvest plants of Gas grade | 5 | 400 | 5 |
| Weekly | Harvest Blue Dream | 4 | 300 | 3 |
| Weekly | Crossbreed seeds | 3 | 300 | 3 |
| Weekly | Crossbreed a seed of generation 3 or later | 1 | 350 | 4 |
| Weekly | Dry buds on a rack | 40 | 300 | 3 |
| Weekly | Make packages | 5 | 250 | 2 |
| Weekly | Press bricks | 2 | 350 | 8 |
| Weekly | Sell units on the street | 100 | 400 | 2 |
At level 1 with the defaults, three daily goals pay about 140 XP, a little less than growing and processing one plant (about 175), and the two weekly goals about 500.
Master ranks
Config.MasterRanks gives growers something to work toward after the last level. XP keeps counting: every xpPerRank past the XP of the last level on the level curve is a rank, up to maxRanks. Nothing resets. The rank is worked out from the player's XP, so it follows any change to their XP. It's under Master Ranks in /weed settings.
| Setting | Default | What it does |
|---|---|---|
enabled | true | Off hides the Ranks tab and turns rank perks off. Picks are kept |
xpPerRank | 4000 | XP from one rank to the next, counted from the last level's XP |
maxRanks | 5 | How many ranks there are. 0 turns ranks off. Lowering it keeps picks for the ranks above, but they give nothing |
respecPrice | 25000 | Dirty money the scientist charges to clear every pick so they can be chosen again. 0 = free |
goalLevels | 1 | Each rank counts as this many levels when daily and weekly goals are scaled. 0 = ranks don't change goals |
titles | empty | Optional, one title per rank, in order. Empty uses "Master Grower I", "Master Grower II" and so on |
perks | 5 rows | The perks players pick from (below) |
With the default level curve (level 10 at 11,000 XP):
| Rank | Title | XP |
|---|---|---|
| 1 | Master Grower I | 15,000 |
| 2 | Master Grower II | 19,000 |
| 3 | Master Grower III | 23,000 |
| 4 | Master Grower IV | 27,000 |
| 5 | Master Grower V | 31,000 |
The shipped perk pool:
id | Name | type | value | Effect |
|---|---|---|---|---|
expansion | Annex | extraTents | 1 | +1 to the player's grow tent limit |
quick_dry | Quick Cure | dryTime | 0.85 | Buds they dry finish 15% sooner |
heavy_harvest | Heavy Harvest | harvestBuds | 1 | +1 bud at every harvest |
wild_genes | Wild Genes | mutationRange | 3.0 | Triples the range: ±6 points at default Genetics, before rounding to visible five-point steps |
lab_access | Lab Access | labDiscount | 1.0 | Free lab reports |
Each pool row:
| Field | What it does |
|---|---|
id | A short unique name. Players' picks are saved by it, so changing a row's id counts as removing that perk. The editor refuses two rows with the same id |
type | Any Grower perks type, including the four above (see Grower perks) |
value | As in Grower perks, within the same limits |
label | Optional. Replaces the perk's name |
How ranks and picks work:
- One pick per rank. Players pick in the Ranks tab of
/weed stats. Each perk can be picked once, so with the defaults a player at rank 5 ends up with all five. - Picks add to the level perks the same way two Grower perks rows of one type combine. Annex and the level 9 Expansion perk together give two more tents.
- Picks are kept. The scientist's Reset Master Perks clears every pick for
respecPrice, and the player picks again. The reset is refused while the player has more grow tents than their level allows without picks (an extra tent from a pick), until they pack the extra tents up. - A pick above the player's rank gives nothing. That happens when their XP is lowered, or
xpPerRankgoes up, ormaxRanksgoes down. The pick is kept and works again once they reach that rank. - Removing a perk from the pool turns it off for everyone who picked it, and that rank can be picked again.
- Rows that would change nothing are left out of the pool: a value that changes nothing,
extraTentswhile grow tents are off or have no limit (Tents per player0), andkeepMalewhile gathering pollen doesn't destroy the plant. - Rank-ups show a message and a banner with the rank's title while Level-up message (Grower XP) is on. The banner says when a pick is waiting.
- Goals: with
goalLevelsat1and the defaultlevelScale, a level 10 player at rank 5 gets goals scaled as for level 15, 2.4 times the level 1 targets and XP. Ranks don't change which goals can be drawn.
Picks are saved per character in the weed_grower_ranks table.
The saved Wild Genes row moves from the old factory value 1.25 to 3.0 on update. Other values, labels and perk rows stay as saved. Tune it under Master Ranks → Perks in /weed settings.
Signature strains
Config.SignatureStrains lets a top grower register a crossbreed they've mastered under a name of their own. The name goes on the strain itself, server-wide, and the strain builds a reputation from street sales. It's under Signature Strains in /weed settings.
| Setting | Default | What it does |
|---|---|---|
enabled | true | Off stops new registrations, reputation and the price bonus, and hides the scientist's option. Names already registered stay |
requiredLevel | 10 | The grower level needed to register a strain |
requiredTier | 3 | The Strain Mastery tier needed on the crossbreed, counted from 1. 3 is Master (40 harvests) by default. A number past the last tier means the last tier |
registerPrice | 50000 | Configurable $50,000 default, a late-game sink above the $25,000 master-perk respec. 0 = free |
maxPerPlayer | 2 | How many signature strains one character can hold. 0 = no limit |
nameMin / nameMax | 3 / 24 | The shortest and longest name, in characters. The editor refuses a shortest that's longer than the longest |
blocklist | 23 words | Words no name may contain (below) |
allowlist | scunthorpe, ashkenazi, shitake, snigger | Exact innocent words exempt from the blocklist; other words in the name are still checked |
reputation | How reputation builds and what it pays (below) |
Who can register. A character at requiredLevel who holds fewer than maxPerPlayer signature strains and has reached requiredTier of Strain Mastery on a crossbred strain. Catalogue strains (the ones under Strains) can't be registered, and each crossbreed can be registered once, by one player. Strain Mastery must be Enabled with Count crossbreeds on, or no crossbreed ever reaches a tier.
Name rules.
Allowed words in /weed settings exempts exact words before checking the blocklist, using the same case and look-alike handling. It permits “Scunthorpe”, “Ashkenazi Kush”, “Shitake” and “Snigger”. It does not exempt a whole name: “Shitake Fuck” and “Shitakefuck” are still refused. An empty saved allowlist stays empty.
-
Between
nameMinandnameMaxcharacters: letters, digits, spaces, hyphens and apostrophes, starting and ending with a letter or a digit. Letters are plain A to Z; accented letters are refused. Extra spaces are trimmed. -
Unique in any capitalisation, against every strain name: the catalogue strains, every strain crossbred on your server so far, and every name crossbreeding could give a strain from the Genetics name pool (such as "Crystal Diesel").
-
No word from
blocklist. Names and words are compared in any capitalisation, with digits and the letter l read as the letters they look like (0 as o, 1 and l as i, 2 as z, 3 as e, 4 as a, 5 as s, 6 and 9 as g, 7 as t, 8 as b), and with hyphens and apostrophes ignored. A run of one-letter words counts as one word ("G A T O R" reads as "gator").- Every word on the list is refused as a whole word of a name, or as the whole name. With
rapeon the list, "Rape", "R-ape" and "R-ape Kush" are refused but "Grape Ape" isn't. Use a plain word for words that are also part of ordinary words. - A word starting with
*is also refused inside any one word of a name. With*gatoron the list, "Gatorade" and "Swamp Gat0rs" are refused too, but "Hog Atoro" isn't: a word is never pieced together across a space. A*entry of several words (*white power) is refused anywhere in the name with its spaces taken out. - Entries hold only what a name can: letters, digits, spaces, hyphens and apostrophes, after an optional
*.
The shipped list uses both kinds. Take a name that got through away with
/weed unregister(see Admin). - Every word on the list is refused as a whole word of a name, or as the whole name. With
What carries the name. From the registration on, the strain's harvests, its seeds (from harvests and the scientist's cloning) and the plants planted from then on carry the name. A seed made before the registration grows into a plant with the name. Items made from other items keep the name they were made with, so dried, trimmed, bagged, packaged and pressed weed from buds harvested earlier keeps the old name, as do buds already harvested. Reputation and the price bonus follow the strain, not the name printed on an item, so weed of the strain made before the registration builds and earns the same.
Registrations are saved on the strain's row in the drug_strains table.
Reputation
| Setting | Default | What it does |
|---|---|---|
perUnit | 0.5 | Reputation for each unit a street sale counts for XP, which for weed is each gram |
byGrade | Dirt 0.25, Poor 0.5, Mid 0.75, High 1.0, Gas 1.25 | Multiplies a sale's reputation by the weed's grade |
seizurePenalty | 25 | Lost by each signature strain growing in a grow tent the police seize (not when the officer owns the tent) |
max | 1000 | The most reputation a strain can have |
maxPriceBonus | 0.15 | How much more a strain at max reputation sells for (0.15 = 15%). Paid only once you add the price row to oxide-drugselling (below) |
tiers | 5 tiers | The reputation each tier starts at (below). No two tiers can start at the same number |
| Tier | Reputation from |
|---|---|
| Unknown | 0 |
| Known | 50 |
| Respected | 200 |
| Renowned | 450 |
| Legendary | 800 |
A tier's optional label replaces its name. Without one, tiers after the fifth are called "Tier 6" and so on.
How reputation moves:
- Street sales build it. Every street sale of a signature strain through
oxide-drugsellingaddsperUnitfor each gram sold, timesbyGradefor its grade, whoever sells it. With the defaults, an ounce of High grade (24 grams) adds 12 and an ounce of Gas adds 15. Withoutoxide-drugselling, nothing builds reputation. - Police seizures cost it. When the police seize a grow tent, each signature strain growing in it loses
seizurePenaltyonce, however many of its plants were there. An officer seizing their own tent costs nothing. - It never decays, and stays between 0 and
max.
The price bonus grows evenly with reputation, from nothing at 0 to maxPriceBonus at max: with the defaults, 7.5% at 500 and 15% at 1,000. It multiplies the street price oxide-drugselling works out for the weed.
Paying the price bonus
oxide-drugselling pays the bonus only after you add one pricing row to its weed settings. Until then, reputation shows on the Grower Profile but doesn't change any price.
-
Open
oxide-drugselling/shared/config/drugs.luain a text editor. -
Find the weed section, which starts with
Config.Drugs.weed = {, and inside it themodifiers = {list. -
Add this line as the last entry of that list, just before the list's closing
},. Copy it exactly; the names are case-sensitive:{ type = 'export_multiplier', category = 'multiplier', exportResource = 'oxide-weed', exportName = 'PriceFor' },With the shipped file, the end of the weed
modifierslist then looks like this:{ type = 'metadata_bonus', category = 'bonus', field = 'generation', startValue = 2, bonusPerStep = 0.05, maxBonus = 0.25, display = { label = 'Crossbred', color = 'text-cyan-400' }, }, { type = 'export_multiplier', category = 'multiplier', exportResource = 'oxide-weed', exportName = 'PriceFor' }, }, } -
Save the file and restart the server. oxide-drugselling reads
drugs.luaonly when it starts; it isn't in its settings menu.
Once the row is in, a signature strain's bonus shows on the sell panel as a Signature line with its reputation tier, and in the strain's card on the Grower Profile. The profile shows it only after oxide-drugselling has priced some weed since the server started, for example when a player offers weed to a buyer. Strains that aren't registered sell at their usual price.
Gang influence
Config.GangActivity lets growing weed count toward gang influence, through o-link's gang system. It ships off. It's under Gang Activity in the Core category of /weed settings, on the Advanced tab.
| Setting | Default | What it does |
|---|---|---|
enabled | false | Turns the reports on |
harvest | 2.0 | Influence each plant harvest reports (pots and tents; wild plants don't count) |
brick | 5.0 | Influence each brick press reports |
Each report is made where the harvest or pressing happens, for the gang of the player who does it. oxide-gangs takes these reports and applies its own hourly cap; players in no gang add nothing. With another gang system, or none, nothing is reported and nothing breaks.
Grower app
Config.GrowerApp puts the Grower Profile on oxide-phone and oxide-tablet as an app called Grower, with two home-screen widgets (see Features). It's under Grower App in the Progression category of /weed settings. Changes apply at once.
| Setting | Default | What it does |
|---|---|---|
enabled | true | Off removes the app and its widgets from every device |
phone | true | Offers the app on oxide-phone |
tablet | true | Offers the app on oxide-tablet |
widget | true | Adds the Grower level and Grower goals widgets to each device's widget gallery |
The app shows up only where the device runs; nothing needs to be installed for oxide-weed to work without it. Players install it from the device's app store. To put it on every device instead, add the app id grower to the device's preinstalled apps: Config.Store.preinstalled in oxide-phone (Home & Apps → Store in /phone settings) or in oxide-tablet. The widgets' ids are grower_level and grower_goals.
The app is only offered on oxide-phone, not on other phones o-link supports; on those, players use /weed stats.
Smoking
File: shared/config/smoking.lua
| Setting | Default | What it does |
|---|---|---|
cooldown | 60 | Seconds between smoking sessions |
bluntDurationMultiplier | 1.25 | Blunts last 25% longer than joints |
bluntIntensityBonus | 0.1 | Blunts hit a little harder |
Rolling recipes (items): rolling_papers → joint, cigarillo_wraps → blunt. Both also need a weed_1g and a lighter (the lighter isn't consumed).
Controls: E (38) to take a hit, H (74) to stop early.
Effect toggles
Turn individual effects on or off under needsEffects:
| Toggle | Default | What it does |
|---|---|---|
stressRelief | true | CBD reduces stress |
hungerCost | true | THC makes the player hungrier (the munchies) |
healing | true | CBD slowly restores health during the effect |
Effect strength
The effects block tunes how hard each trait hits — potencyScale, thcHungerScale, cbdStressScale, cbdHealScale, and so on. Two you're most likely to touch:
densityDurationMin/densityDurationMax(300/600) — effect duration range in seconds; the strain's density decides where in the range it landsqualityFloor(0.4) — even Dirt-grade product delivers at least 40% effect
screenEffects sets the visual high — screen filter, camera sway, and the wobbly walk. The defaults are tuned; change them only if you want a different feel.
Store
File: shared/config/store.lua
The Germinator supply store. Set enabled = false to remove the NPC, blip, and store entirely.
| Setting | Default |
|---|---|
coords / heading | Near the Vespucci canals (-1275.97, -1139.92, 6.79) |
model | s_m_m_linecook |
blip.enabled | true (sprite 628, green) |
The blip and NPC names come from your locale file (store_blip — "The Germinator" in English).
Each stock entry is one line: the item, its display label, the cash price, and which section of the shop list it appears under. Edit prices freely.
The store won't sell an item to a player below the level the item needs to be placed or used (the freeze dryer needs level 7, for example; a seed pack needs its strain's level). The row shows the level it needs, and the purchase is refused. Give a row its own requiredLevel to ask for a higher level than that; it can't lower it.
Add your own products under customItems — they appear alongside the defaults. This is also where to add the drying rack, brick press, growing manual, or rolling supplies if you want them purchasable (they are not stocked by default).
Scientist
File: shared/config/scientist.lua
| Setting | Default |
|---|---|
coords / heading | Near the Grapeseed area (3610.36, 3653.20, 31.26) |
model | s_m_m_scientist_01 |
blip.enabled | false (hidden — players find it through play) |
Services:
- Lab report —
price = 500,requiredLevel = 2. AlabDiscountperk takes its share off, and the Lab Access master rank perk makes it free. The scientist shows each player their own price - Cloning —
requiredLevel = 4; quantity/price pairs: 5 for $2,500, 10 for $4,000, 25 for $7,500. The Master Grower perk takes its discount off these prices - Register a Signature Strain — shown while Signature Strains is enabled. Its price and rules are under Signature strains
- Reset Master Perks — shown while Master Ranks is enabled. Its price is
respecPriceunder Master ranks
The scientist charges using the Config.DirtyMoney rules in shared/config.lua.
Wild Plants
File: shared/config/wildplants.lua
Set enabled = false to turn the whole system off.
| Setting | Default | What it does |
|---|---|---|
seedChance | 0.40 | Chance a wild harvest includes seeds (40%) |
seedAmount | 1–2 | Seeds found when the chance hits |
yield | 1–4 weed_bud | Buds per wild plant |
respawnTime | 1800–3600 | Plants regrow 30–60 minutes after harvest |
harvestXP | 15 | XP per wild harvest |
spawnDistance | 100.0 | How close players must be before wild plants appear |
Two example zones ship: buen_vino_rd (10 plants) and route_68 (20 plants), both in the hills west of Route 68.
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. Each zone stores a minZ/maxZ height band (older configs with a thickness value are converted automatically). Placement zones (blocked areas and allowed areas) are drawn the same way from their own section.