Complete reference for all configuration options in oxide-weed.
Config File: shared/config.lua
General Settings
| Setting | Type | Default | Description |
|---|
Config.Debug | boolean | false | Enable debug output to server console with [oxide-weed] prefix |
Config.RequireOwnership | boolean | true | Only the player who placed an item can remove it (plants, lamps, equipment, heaters, drying buds) |
Config.SpawnDistance | number | 100.0 | Distance at which placed objects spawn for clients |
Config.Debug = false
Config.RequireOwnership = true
Config.SpawnDistance = 100.0
Dirty Money
Controls how money is handled for selling and scientist transactions. The germinator store always uses regular cash.
| Setting | Type | Default | Description |
|---|
Config.DirtyMoney.mode | string | 'account' | 'account' uses a framework account type, 'item' uses an inventory item |
Config.DirtyMoney.account | string | 'cash' | Account type when mode is 'account' (e.g. 'cash', 'black_money') |
Config.DirtyMoney.item | string | 'black_money' | Item name when mode is 'item' |
Config.DirtyMoney = {
mode = 'account',
account = 'cash',
item = 'black_money',
}
Affected transactions:
- Street selling — player receives dirty money
- Robbery during selling — dirty money is stolen from player
- Scientist lab reports — player pays with dirty money
- Scientist seed cloning — player pays with dirty money
Not affected:
- Germinator store — always uses regular cash (legal purchases)
Plant Settings
| Setting | Type | Default | Description |
|---|
Config.PlantSettings.waterDecayRate | number | 0.2 | Water decay per minute |
Config.PlantSettings.fertilizerDecayRate | number | 0.1 | Fertilizer decay per minute |
Config.PlantSettings.updateInterval | number | 60000 | Plant tick interval in milliseconds |
Config.PlantSettings.maxLampsPerPlant | number | 4 | Maximum grow lamps per plant |
Config.PlantSettings.removeLampsOnPlantDeath | boolean | false | Delete lamps when linked plant dies (false = unlink only) |
Water Sources
| Setting | Type | Default | Description |
|---|
water.sources[].item | string | — | Item name used for watering |
water.sources[].fillAmount | number | 25 | Water level added per use |
water.sources[].useMetadata | boolean | false | If true, uses metadata key instead of consuming the item |
water.sources[].metaKey | string | — | Metadata key for tracking usage (e.g., water_level) |
water.sources[].metaCost | number | — | Amount deducted from metadata per use |
water.sources[].amount | number | 1 | Items consumed per use (non-metadata sources) |
Fertilizer
| Setting | Type | Default | Description |
|---|
fertilizer.item | string | 'fertilizer' | Item consumed for fertilizing |
fertilizer.amount | number | 1 | Amount consumed per use |
fertilizer.fillAmount | number | 35 | Fertilizer level added per use |
Harvest
| Setting | Type | Default | Description |
|---|
harvest.returnPot | boolean | true | Return the plant pot to player on harvest |
harvest.potItem | string | 'plant_pot' | Item name of the returned pot |
Watering Can
| Setting | Type | Default | Description |
|---|
Config.WateringCan.capacity | number | 100 | Maximum water units the can holds |
Config.WateringCan.waterCost | number | 15 | Water consumed from can per plant watering |
Config.WateringCan.fillAmount | number | 20 | Water level added to plant per watering can use |
Processing
| Setting | Type | Default | Description |
|---|
Config.Processing.pruneYield.min | number | 2 | Minimum pruned buds per dried bud |
Config.Processing.pruneYield.max | number | 5 | Maximum pruned buds per dried bud |
Config.Processing.leafYield.min | number | 1 | Minimum cannabis leaves per prune |
Config.Processing.leafYield.max | number | 3 | Maximum cannabis leaves per prune |
Labels
| Setting | Type | Default | Description |
|---|
Config.Labels.maxDist | number | 2.0 | Maximum distance to display floating labels |
Config.Labels.scaleMin | number | 0.55 | Minimum text scale at far distance |
Config.Labels.scaleMax | number | 1.0 | Maximum text scale at near distance |
Config.Labels.scaleNearDist | number | 1.5 | Distance at which labels reach maximum scale |
Config.Labels.scaleFarDist | number | 3.0 | Distance at which labels reach minimum scale |
Config.Labels.plantHeightOffset | number | 1.2 | Label height above plant |
Config.Labels.tableHeightOffset | number | 1.0 | Label height above table |
Config.Labels.updateInterval | number | 16 | Label render tick interval in ms |
Animations
| Setting | Type | Default | Description |
|---|
Config.Anims.place.dict | string | see config | Animation dictionary for placing items |
Config.Anims.place.name | string | 'plant_floor' | Animation name for placing |
Config.Anims.place.duration | number | 1000 | Place animation duration in ms |
Config.Anims.remove.dict | string | see config | Animation dictionary for removing items |
Config.Anims.remove.name | string | 'plant_floor' | Animation name for removing |
Config.Anims.remove.duration | number | 1000 | Remove animation duration in ms |
Config File: shared/config/plants.lua
Defines plant types and their growth stages, yield, and models.
| Setting | Type | Default | Description |
|---|
cannabis_seed.item | string | 'cannabis_seed' | Seed item name |
cannabis_seed.neededItems | table | { plant_pot x1 } | Items required to plant (consumed) |
cannabis_seed.stages | table | 4 stages | Growth stages with model, time (seconds), and model offset |
cannabis_seed.yield | table | weed_bud 3-8 | Harvest yield items with min/max amounts and chance |
Config.Plants = {
cannabis_seed = {
item = 'cannabis_seed',
neededItems = {
{ name = 'plant_pot', amount = 1, remove = true },
},
stages = {
{ model = `bkr_prop_weed_01_small_01c`, time = 60 * 60, offset = vec3(0.0, 0.0, 1.0) },
{ model = `bkr_prop_weed_01_small_01a`, time = 60 * 60, offset = vec3(0.0, 0.0, 1.0) },
{ model = `bkr_prop_weed_med_01b`, time = 60 * 60, offset = vec3(0.0, 0.0, -1.5) },
{ model = `bkr_prop_weed_lrg_01b`, time = 60 * 500, offset = vec3(0.0, 0.0, -1.5) },
},
yield = {
{ item = 'weed_bud', amount = { min = 3, max = 8 }, chance = 100 },
},
},
}
Config File: shared/config/strains.lua
Defines base strains with their traits and level requirements.
| Setting | Type | Description |
|---|
[strain_id].label | string | Display name of the strain |
[strain_id].baseQuality | number | Base quality score (0-100) |
[strain_id].requiredLevel | number | Progression level required to plant |
[strain_id].traits | table | Table of 10 trait values (0-100) |
See Features > Base Strains for the full strain table.
Config File: shared/config/genetics.lua
| Setting | Type | Default | Description |
|---|
Config.Genetics.traitNames | table | 10 traits | Ordered list of trait names |
Config.Genetics.breedingUnlockLevel | number | 3 | Level required to crossbreed |
Config.Genetics.mutationRate | number | 0.10 | Chance of trait mutation per crossbreed (10%) |
Config.Genetics.mutationRange | number | 20 | Maximum trait variance from mutation |
Config.Genetics.maxGeneration | number | 0 | Max generation cap (0 = unlimited) |
Config.Genetics.maleBias | number | 0.4 | Male trait inheritance weight (female = 1 - maleBias) |
Config.Genetics.genderCheckStage | number | 2 | Earliest growth stage to check gender |
Config.Genetics.maleChance | number | 0.4 | Probability of a plant being male (40%) |
Config.Genetics.pollenGatherTime | number | 3000 | Pollen collection duration in ms |
Config.Genetics.pollenDestroysPlant | boolean | true | Remove plant after pollen collection |
Config.Genetics.seedFromHarvestChance | number | 0.25 | Chance to find seed when harvesting (25%) |
Quality Weights
| Trait | Weight |
|---|
| potency | 0.20 |
| thc | 0.18 |
| density | 0.13 |
| frost | 0.13 |
| flavor | 0.13 |
| aroma | 0.13 |
| cbd | 0.10 |
Config File: shared/config/drying.lua
| Setting | Type | Default | Description |
|---|
Config.Drying.dryingTime | number | 1800 | Base drying time in seconds (30 minutes) |
Config.Drying.updateInterval | number | 30000 | Drying tick interval in ms |
Config.Drying.maxSlots | number | 14 | Maximum bud slots per rack |
Config.Drying.items.input | string | 'weed_bud' | Fresh bud item name |
Config.Drying.items.output | string | 'dried_weed_bud' | Dried bud item name |
Heater Settings
| Setting | Type | Default | Description |
|---|
Config.Drying.heater.item | string | 'weed_heater' | Heater item name |
Config.Drying.heater.model | string | 'prop_patio_heater_01' | Heater prop model |
Config.Drying.heater.maxPerRack | number | 3 | Maximum heaters per drying rack |
Config.Drying.heater.dryingMultiplier | number | 1.5 | Speed multiplier per heater |
Config File: shared/config/equipment.lua
Defines placeable equipment types, their models, and associated features.
Weed Table
| Setting | Type | Default | Description |
|---|
weed_table.item | string | 'weed_table' | Item name to place the table |
weed_table.objects[].model | hash | bkr_prop_weed_table_01b | Prop model |
Bagging Recipes
| Setting | Type | Description |
|---|
bagging.recipes[].need | table | Items required per bag (name, amount) |
bagging.recipes[].get | table | Items produced per bag (name, amount) |
Default: 1 pruned_weed_bud + 1 baggy = 1 weed_1g
Packaging Recipes
| Setting | Type | Default | Description |
|---|
packaging.progressDuration | number | 4000 | Progress bar duration in ms |
packaging.recipes[].input | string | — | Input item name |
packaging.recipes[].inputAmount | number | — | Input quantity consumed |
packaging.recipes[].output | string | — | Output item name |
packaging.recipes[].outputAmount | number | — | Output quantity produced |
Default packaging chain: weed_1g (x3) -> weed_eighth (x2) -> weed_quarter (x2) -> weed_half (x2) -> weed_ounce
Storage Tote
| Setting | Type | Default | Description |
|---|
storage_tote.item | string | 'storage_tote' | Item name |
storage_tote.stash.slots | number | 15 | Stash inventory slots |
storage_tote.stash.maxWeight | number | 30.0 | Maximum stash weight |
Water Containers
| Setting | Type | Default | Description |
|---|
water_container_small.item | string | 'water_container_small' | Item name |
water_container_small.waterContainer.capacity | number | 500 | Maximum water units |
water_container_small.waterContainer.fillPerUse | number | 75 | Water added per fill action |
water_container_large.item | string | 'water_container_large' | Item name |
water_container_large.waterContainer.capacity | number | 1000 | Maximum water units |
water_container_large.waterContainer.fillPerUse | number | 75 | Water added per fill action |
Freeze Dryer (Equipment Entry)
| Setting | Type | Default | Description |
|---|
freeze_dryer.item | string | 'freeze_dryer' | Item name |
freeze_dryer.requiredLevel | number | 7 | Progression level required to place |
See shared/config/freezedryer.lua for freeze dryer gameplay settings.
The requiredLevel field can be added to any equipment entry in Config.Equipment to gate placement behind a progression level.
Config File: shared/config/lamps.lua
| Setting | Type | Default | Description |
|---|
Config.Lamps.default_lamp.item | string | 'grow_lamp' | Lamp item name |
Config.Lamps.default_lamp.model | hash | xm_prop_base_tripod_lampb | Lamp prop model |
Config.Lamps.default_lamp.growthMultiplier | number | 1.5 | Growth speed multiplier when lamp is linked to plant |
Config.Lamps.default_lamp.offset | vec3 | vec3(0, 0, 1) | Lamp position offset relative to plant |
Config File: shared/config/freezedryer.lua
| Setting | Type | Default | Description |
|---|
Config.FreezeDryer.dryingTime | number | 600 | Freeze dryer drying time in seconds (10 minutes) |
Config.FreezeDryer.requiredLevel | number | 7 | Progression level required to use |
Config.FreezeDryer.updateInterval | number | 30000 | Tick interval in ms |
Config.FreezeDryer.items.input | string | 'weed_bud' | Fresh bud item name |
Config.FreezeDryer.items.output | string | 'dried_weed_bud' | Dried bud item name |
Config.FreezeDryer.trays.budsPerTray | number | 8 | Buds per tray |
Config.FreezeDryer.trays.stackCount | number | 9 | Trays stacked per column |
Config.FreezeDryer.trays.baseColumns | table | 2 columns | Tray column positions |
Total capacity is calculated automatically: baseColumns * stackCount * budsPerTray = 2 * 9 * 8 = 144 slots.
Config File: shared/config/progression.lua
XP Rewards
| Setting | Type | Default | Description |
|---|
Config.Progression.xpRewards.plant | number | 10 | XP for planting a seed |
Config.Progression.xpRewards.water | number | 2 | XP for watering a plant |
Config.Progression.xpRewards.fertilize | number | 2 | XP for fertilizing |
Config.Progression.xpRewards.harvest | number | 25 | XP for harvesting |
Config.Progression.xpRewards.placeLamp | number | 3 | XP for placing a lamp |
Config.Progression.xpRewards.placeBud | number | 2 | XP per bud placed on rack |
Config.Progression.xpRewards.collectDried | number | 5 | XP per dried bud collected |
Config.Progression.xpRewards.prune | number | 5 | XP for pruning |
Config.Progression.xpRewards.bag | number | 5 | XP per bag created |
Config.Progression.xpRewards.checkGender | number | 5 | XP for checking gender |
Config.Progression.xpRewards.gatherPollen | number | 10 | XP for gathering pollen |
Config.Progression.xpRewards.crossbreed | number | 30 | XP for crossbreeding |
Config.Progression.xpRewards.package | number | 8 | XP per packaging conversion |
Config.Progression.xpRewards.sell | number | 15 | XP per unit sold |
Level Thresholds
| Setting | Type | Default | Description |
|---|
Config.Progression.levels | table | 10 levels | Array of { level, xpRequired } entries |
Config.Progression = {
levels = {
{ level = 1, xpRequired = 0 },
{ level = 2, xpRequired = 100 },
{ level = 3, xpRequired = 300 },
{ level = 4, xpRequired = 650 },
{ level = 5, xpRequired = 1200 },
{ level = 6, xpRequired = 2000 },
{ level = 7, xpRequired = 3200 },
{ level = 8, xpRequired = 5000 },
{ level = 9, xpRequired = 7500 },
{ level = 10, xpRequired = 11000 },
},
}
Config File: shared/config/selling.lua
General
| Setting | Type | Default | Description |
|---|
Config.Selling.enabled | boolean | true | Enable/disable the entire NPC selling system |
Config.Selling.cooldown | number | 5000 | Player cooldown between sales in ms |
Config.Selling.npcCooldown | number | 120000 | Per-NPC cooldown in ms |
Config.Selling.requiredLevel | number | 2 | Minimum progression level to sell |
Config.Selling.targetDistance | number | 5.0 | Max distance for target interaction |
Config.Selling.targetIcon | string | 'fas fa-hand-holding-dollar' | ox_target icon for sell option |
Config.Selling.targetLabel | string | 'sell_offer_drugs' | Locale key for ox_target label |
Config.Selling.panelTitle | string | 'Street Sale' | Header text shown in the sell NUI panel |
Police Requirements
| Setting | Type | Default | Description |
|---|
Config.Selling.policeJobs | table | { 'police', 'sheriff' } | Job names counted as police |
Config.Selling.minPoliceOnline | number | 0 | Minimum police required (0 = disabled) |
Sellable Items
| Setting | Type | Description |
|---|
Config.Selling.items[itemName].label | string | Display name in sell panel |
Config.Selling.items[itemName].basePrice | number | Base price per unit before multipliers |
Server owners can add custom drug items to this table.
Quality and Pricing
| Setting | Type | Default | Description |
|---|
Config.Selling.qualityMultipliers.Gas | number | 1.4 | Multiplier for Gas grade |
Config.Selling.qualityMultipliers.High | number | 1.15 | Multiplier for High grade |
Config.Selling.qualityMultipliers.Mid | number | 1.0 | Multiplier for Mid grade |
Config.Selling.qualityMultipliers.Poor | number | 0.75 | Multiplier for Poor grade |
Config.Selling.qualityMultipliers.Dirt | number | 0.5 | Multiplier for Dirt grade |
Config.Selling.qualityPricing.minMultiplier | number | 0.4 | Continuous quality curve minimum |
Config.Selling.qualityPricing.maxMultiplier | number | 1.5 | Continuous quality curve maximum |
Config.Selling.qualityPricing.curve | number | 1.2 | Curve exponent (>1 = diminishing returns) |
Trait Demand Bonuses
| Setting | Type | Default | Description |
|---|
Config.Selling.traitBonuses[trait].threshold | number | varies | Trait value that must be exceeded for the bonus to apply |
Config.Selling.traitBonuses[trait].bonus | number | varies | Percentage added to price multiplier when threshold is met |
Config.Selling.maxTraitBonus | number | 0.35 | Maximum combined trait bonus cap (35%) |
Default trait bonuses: thc (+10% at 75), potency (+8% at 70), flavor (+8% at 70), frost (+6% at 75), density (+5% at 70), aroma (+5% at 65), cbd (+4% at 70).
Negotiation
| Setting | Type | Default | Description |
|---|
Config.Selling.pricing.autoAcceptMax | number | 0.90 | Price ratio at or below which NPC auto-accepts |
Config.Selling.pricing.negotiateMax | number | 1.25 | Price ratio up to which NPC may counter; above this NPC rejects |
Config.Selling.pricing.counterOffer | number | 0.95 | Counter-offer as proportion of fair value |
Risk
| Setting | Type | Default | Description |
|---|
Config.Selling.risks.policeCallChance | number | 0.15 | Chance of police dispatch per sale (15%) |
Config.Selling.risks.rejectChance | number | 0.15 | Flat rejection chance before evaluation (15%) |
Config.Selling.risks.robberyChance | number | 0.15 | Robbery chance from gang NPCs (15%) |
Config.Selling.risks.robberyItemLoss | number | 3 | Max items lost in robbery |
Config.Selling.risks.robberyCashPercent | number | 0.25 | Percentage of cash stolen (25%) |
Dispatch
| Setting | Type | Default | Description |
|---|
Config.Selling.dispatch.code | string | '10-31' | Police dispatch code |
Config.Selling.dispatch.message | string | 'sell_dispatch_message' | Locale key for dispatch message |
Config.Selling.dispatch.blipData.sprite | number | 469 | Dispatch blip sprite |
Config.Selling.dispatch.blipData.color | number | 1 | Dispatch blip color |
Config.Selling.dispatch.blipData.scale | number | 0.8 | Dispatch blip size |
Config.Selling.dispatch.time | number | 60000 | Dispatch blip duration in ms |
NPC Model Lists
| Setting | Type | Description |
|---|
Config.Selling.blacklistedModels | table | Ped model hashes that will never show the sell target option (cops, EMS, military) |
Config.Selling.gangModels | table | Ped model hashes that can trigger the robbery mechanic |
Generation Bonus
| Setting | Type | Default | Description |
|---|
Config.Selling.generationBonus.enabled | boolean | true | Enable crossbreed generation premium |
Config.Selling.generationBonus.bonusPerGen | number | 0.05 | +5% per generation above startGen |
Config.Selling.generationBonus.startGen | number | 2 | First generation that receives bonus |
Config.Selling.generationBonus.maxBonus | number | 0.25 | Maximum generation bonus (25%) |
Selling Camera
| Setting | Type | Default | Description |
|---|
Config.Selling.camera.interpTime | number | 500 | Camera interpolation time in ms |
Config.Selling.camera.distance | number | 1.8 | Camera distance from NPC |
Config.Selling.camera.heightOffset | number | 0.3 | Camera height offset |
Config.Selling.camera.fov | number | 50.0 | Camera field of view |
Selling Animations
| Setting | Type | Description |
|---|
Config.Selling.anims.npcThinking | table | NPC thinking animation (dict, clip, duration) |
Config.Selling.anims.npcAccept | table | NPC accept animation |
Config.Selling.anims.npcReject | table | NPC reject animation |
Config.Selling.anims.robbery | table | Robbery animation |
Config.Selling.anims.transaction | table | Transaction handoff animation |
Config File: shared/config/smoking.lua
| Setting | Type | Default | Description |
|---|
Config.Smoking.cooldown | number | 60 | Seconds between smoking sessions |
Config.Smoking.baseDuration | number | 60 | Base effect duration in seconds |
Config.Smoking.bluntDurationMultiplier | number | 1.25 | Blunt duration multiplier vs joint |
Config.Smoking.bluntIntensityBonus | number | 0.1 | Extra intensity for blunts (+10%) |
Rolling Items
| Setting | Type | Description |
|---|
Config.Smoking.items[itemName].output | string | Produced item ('joint' or 'blunt') |
Config.Smoking.items[itemName].requires | table | Items the player must have to roll (e.g., { 'weed_1g', 'lighter' }) |
Default: rolling_papers produces joint, cigarillo_wraps produces blunt. Both require weed_1g and lighter.
Controls
| Setting | Type | Default | Description |
|---|
Config.Smoking.controls.smoke | number | 38 | Key to take a hit (E) |
Config.Smoking.controls.stop | number | 74 | Key to stop smoking (H) |
Effect Scaling
| Setting | Type | Default | Description |
|---|
Config.Smoking.effects.potencyScale | number | 1.0 | Potency to intensity multiplier |
Config.Smoking.effects.thcHungerScale | number | 10 | Max hunger cost from THC |
Config.Smoking.effects.thcSpeedScale | number | 0.08 | Max speed reduction from THC (8%) |
Config.Smoking.effects.cbdHealScale | number | 1.0 | CBD health regeneration scale |
Config.Smoking.effects.cbdStressScale | number | 25 | Max stress relief from CBD |
Config.Smoking.effects.densityDurationMin | number | 45 | Minimum effect duration in seconds |
Config.Smoking.effects.densityDurationMax | number | 90 | Maximum effect duration in seconds |
Config.Smoking.effects.qualityFloor | number | 0.4 | Minimum quality multiplier (dirt weed = 40%) |
Config.Smoking.effects.healTickInterval | number | 5 | Seconds between CBD heal ticks |
Screen Effects
| Setting | Type | Default | Description |
|---|
Config.Smoking.screenEffects.timecycle | string | 'spectator6' | Timecycle modifier name |
Config.Smoking.screenEffects.timecycleStrength | number | 0.66 | Timecycle modifier strength |
Config.Smoking.screenEffects.cameraShake | string | 'DRUNK_SHAKE' | Camera shake type |
Config.Smoking.screenEffects.cameraShakeAmplitude | number | 2.5 | Camera shake intensity |
Config.Smoking.screenEffects.drunkClipset | string | 'MOVE_M@DRUNK@SLIGHTLYDRUNK' | Walking animation set |
Config File: shared/config/store.lua
| Setting | Type | Default | Description |
|---|
Config.Store.enabled | boolean | true | Enable/disable the store |
Config.Store.coords | vec3 | vec3(-1275.97, -1139.92, 6.79) | Store NPC location |
Config.Store.heading | number | 114.07 | NPC facing direction |
Config.Store.model | string | 's_m_m_linecook' | NPC ped model |
Config.Store.scenario | string | 'WORLD_HUMAN_STAND_IMPATIENT' | NPC idle scenario |
Config.Store.interactDistance | number | 2.5 | Interaction distance |
Config.Store.targetRadius | number | 1.5 | ox_target radius |
Blip
| Setting | Type | Default | Description |
|---|
Config.Store.blip.enabled | boolean | true | Show map blip |
Config.Store.blip.sprite | number | 628 | Blip sprite ID |
Config.Store.blip.color | number | 2 | Blip color |
Config.Store.blip.scale | number | 0.5 | Blip size |
Config.Store.blip.label | string | 'store_blip' | Locale key for blip name |
Adding Custom Items
Config.Store.customItems = {
{ item = 'some_item', label = 'My Custom Item', price = 100, category = 'custom' },
}
Config File: shared/config/scientist.lua
| Setting | Type | Default | Description |
|---|
Config.Scientist.coords | vec3 | vec3(3610.36, 3653.20, 31.26) | NPC location |
Config.Scientist.heading | number | 338.80 | NPC facing direction |
Config.Scientist.model | string | 's_m_m_scientist_01' | NPC ped model |
Config.Scientist.scenario | string | 'WORLD_HUMAN_CLIPBOARD' | NPC idle scenario |
Config.Scientist.interactDistance | number | 2.5 | Interaction distance |
Config.Scientist.targetRadius | number | 1.5 | ox_target radius |
Lab Report
| Setting | Type | Default | Description |
|---|
Config.Scientist.labReport.price | number | 500 | Cost per lab report |
Config.Scientist.labReport.requiredLevel | number | 2 | Level required |
Cloning
| Setting | Type | Default | Description |
|---|
Config.Scientist.cloning.requiredLevel | number | 4 | Level required |
Config.Scientist.cloning.options | table | 3 tiers | Array of { quantity, price } |
Config.Scientist.cloning = {
requiredLevel = 4,
options = {
{ quantity = 5, price = 2500 },
{ quantity = 10, price = 4000 },
{ quantity = 25, price = 7500 },
},
}
Blip
| Setting | Type | Default | Description |
|---|
Config.Scientist.blip.enabled | boolean | false | Show map blip (disabled by default) |
Config.Scientist.blip.sprite | number | 499 | Blip sprite ID |
Config.Scientist.blip.color | number | 2 | Blip color |
Config.Scientist.blip.scale | number | 0.7 | Blip size |
Config.Scientist.blip.label | string | 'scientist_blip' | Locale key for blip name |
Config File: shared/config/wildplants.lua
| Setting | Type | Default | Description |
|---|
Config.WildPlants.enabled | boolean | true | Enable/disable wild plant system |
Config.WildPlants.spawnDistance | number | 100.0 | Client-side spawn distance |
Config.WildPlants.seedChance | number | 0.40 | Seed drop chance per harvest (40%) |
Config.WildPlants.seedAmount.min | number | 1 | Minimum seeds per drop |
Config.WildPlants.seedAmount.max | number | 2 | Maximum seeds per drop |
Config.WildPlants.respawnTime.min | number | 1800 | Minimum respawn time in seconds (30 min) |
Config.WildPlants.respawnTime.max | number | 3600 | Maximum respawn time in seconds (60 min) |
Config.WildPlants.harvestXP | number | 15 | XP awarded per wild harvest |
Yield
| Setting | Type | Default | Description |
|---|
Config.WildPlants.yield[].item | string | 'weed_bud' | Item given on harvest |
Config.WildPlants.yield[].amount.min | number | 1 | Minimum bud yield |
Config.WildPlants.yield[].amount.max | number | 4 | Maximum bud yield |
Config.WildPlants.yield[].chance | number | 100 | Chance percentage |
Zones
Each zone entry:
| Setting | Type | Description |
|---|
name | string | Unique zone identifier |
plants | number | Number of plants in this zone |
points | table | Polygon vertices as vec3 (minimum 3) |
thickness | number | Vertical extent of the zone |
Config.WildPlants.zones = {
{
name = 'my_zone',
plants = 10,
points = {
vec3(x1, y1, z1),
vec3(x2, y2, z2),
vec3(x3, y3, z3),
vec3(x4, y4, z4),
},
thickness = 10.0,
},
}
Next Steps