Immersive Weed System:seedling:
“Weed Growing System is a highly modular, framework-agnostic FiveM script for immersive cannabis production, processing, and usage. It features fully synced, persistent plants with realistic growth stages, dynamic interaction (target scripts or native 3D text), and a polished UI for every step from seed to smoke. With configurable support for ESX, QBCore, Qbox, ox_inventory, qb-inventory, qs-inventory, ox_target, qb-target, and more, this script integrates seamlessly into any modern server setup.It includes drying racks, joint crafting and smoking (with effects), boss/management support, and extensive config options for advanced RP.”
Watch the Full Showcase Here: Watch Now
Features:
Persistent Planting: Grow and manage plants indoors/outdoors with full tracking and stages.
Realistic Growth: Plants grow over time, require care, and can die if neglected.
Water & Fertilizer: Use items to water/fertilize. Stats tracked in real time.
Drying System: Hang buds on racks with visual props and configurable timers.
Processing Stations: Craft items via menus for processing, drying, and rolling.
Joint Crafting & Smoking: Smoke joints with effects, animations, and puff system.
Skill & Job Gating: Restrict features by job, grade, or skill level.
Highly Configurable: Control all data from configs, plants, times, jobs, effects.
Polished Visuals: 3D text, custom UI, menus, overlays, and progress bars.
Boss Support: Job-based access to management zones with target/3D text.
View Config 💻
-- CONFIGURATION FILE --
-- Weed Growing & Drying System --
--========================================================--
Config = {}
--========================================================================================--
-- BUGS / SUPPORT ► https://discord.gg/QJKtsYBpmW | Open a ticket for help & fixes --
--========================================================================================--
--========================================================--
-- SYSTEM INTEGRATIONS
--========================================================--
Config.Systems = {
Framework = 'auto', -- 'esx' | 'qbcore' | 'qbox' | 'auto'
Inventory = 'auto', -- 'ox' | 'qb' | 'esx' | 'auto'
Notify = 'auto', -- 'ox_lib' | 'qbx_core' | 'qb_core' | 'esx' | 'custom' | 'auto'
Interaction = 'auto', -- 'ox_target' | 'qb_target' | '3dtext' | 'auto'
Menu = 'auto', -- 'ox_lib' | 'qb_menu' | 'esx_menu' | 'auto'
}
-- If using 3dtext, here are the controls to open the UIS
Config.PromptOpenKey = 38 -- Default: E (use 47 for G, 29 for B, etc.)
-- https://docs.fivem.net/docs/game-references/controls/ << -- Can find the keys which are respresented by the numbers
--========================================================--
-- CORE SYSTEM SETTINGS
--========================================================--
Config.WaterRequiredPerStage = 10 -- Water units required for a plant to grow to the next stage
Config.WaterGainPerUse = 30 -- Water units added to a plant when watering once
Config.WaterLossPerTick = 1 -- Water lost from each plant every health tick (see HealthTickMinutes)
Config.HealthTickMinutes = 0.3 -- Interval (in minutes) between health/water decay checks on all plants
Config.HealthDecayPerTick = 5 -- Amount of health lost per tick if a plant runs out of water
Config.MinPlaceDistance = 1.2 -- Minimum distance (in meters) allowed between newly placed plants
Config.ActionDistance = 1.2 -- Distance (in meters) at which a player can interact with a plant
Config.FertilizerGrowthBuff = 20 -- How much faster in % the plant will grow upon being fertilized
Config.WateringCanItem = 'watering_can'
Config.FertilizerItem = 'weed_fertilizer'
Config.SoilItem = 'growing_soil'
Config.HarvestToolItem = 'growing_sickle'
Config.PotItem = 'growing_pot'
Config.ItemLabels = {
watering_can = "Watering Can",
weed_fertilizer = "Fertilizer",
growing_soil = "Soil",
growing_sickle = "Harvest Sickle",
growing_pot = "Plant Pot"
}
Config.WaitDurations = { -- Just the lenght of the animiations between different actions
placeBucket = 2000, -- Wouldnt really touch this one or it might look a bit stupid
plantSeed = 2000,
fillSoil = 3000,
waterPlant = 4000,
fertilizePlant = 2000,
harvestPlant = 4000,
}
--==========================================================================--
-- GROW ZONE CONFIGURATION: Blockbudz & Smokeys
--==========================================================================--
Config.GrowZones = {
--=========================--
-- Blockbudz Settings --
--=========================--
blockbudz = {
enabled = true, -- Set to false to disable this business
label = 'BlockBudz', -- Display label
job = 'blockbudz', -- Job name for permissions
plants = 20, -- Max number of plants
JobCheck = { Enabled = true, Name = 'blockbudz' }, -- Set Enabled=true to restrict access to job
-- Boss Management Menu (for job bosses)
BossMenu = {
coords = vec4(229.3387, -1955.1617, 23.4041, 229.2346),
size = vec3(1.0, 1.0, 2.0),
distance = 1.5,
minGrade = 4,
},
-- Shop Locations (Supplies & Prep)
Shops = {
{
id = 'weed_grow_supplies_blockbudz',
label = 'Weed Grow Supplies',
enabled = true, -- Toggle individual shop
coords = vec4(242.0649, -1966.9119, 22.1405, 140.0391),
items = {
{ name = 'watering_can', label = 'Watering Can', price = 260, stock = 25 },
{ name = 'weed_fertilizer', label = 'Plant Fertilizer', price = 170, stock = 50 },
{ name = 'growing_soil', label = 'Growing Soil', price = 110, stock = 50 },
{ name = 'growing_sickle', label = 'Sickle', price = 320, stock = 10 },
{ name = 'growing_pot', label = 'Growing Pot', price = 85, stock = 50 },
{ name = 'skunk_seed', label = 'Skunk Seed', price = 210, stock = 50 },
{ name = 'purplehaze_seed', label = 'Purple Haze Seed', price = 210, stock = 50 },
{ name = 'whitewidow_seed', label = 'White Widow Seed', price = 210, stock = 50 },
{ name = 'amnesia_seed', label = 'Amnesia Seed', price = 210, stock = 50 },
{ name = 'ak47_seed', label = 'AK47 Seed', price = 210, stock = 50 },
{ name = 'ogkush_seed', label = 'OGKush Seed', price = 210, stock = 50 },
}
},
{
id = 'weed_prep_supplies_blockbudz',
label = 'Weed Prep Supplies',
enabled = true,
coords = vec4(226.6735, -1959.0891, 22.5476, 139.8916),
items = {
{ name = 'weed_paper', label = 'Rolling Paper', price = 130, stock = 30 },
{ name = 'weed_grinder', label = 'Grinder', price = 130, stock = 30 },
}
},
},
-- Stash Locations (Storage)
Stashes = {
{
id = 'blockbudz_counter',
label = 'Counter',
coords = vec4(230.4959, -1953.8402, 22.9002, 46.7748),
size = vec3(1.0, 1.0, 2.0),
jobRestricted = false,
slots = 60,
weight = 300000,
},
{
id = 'blockbudz_counter2',
label = 'Counter',
coords = vec4(228.2035, -1956.4690, 22.9195, 49.4520),
size = vec3(1.0, 1.0, 2.0),
jobRestricted = false,
slots = 60,
weight = 100000,
},
{
id = 'blockbudz_stash',
label = 'Storage',
coords = vec4(225.0151, -1957.3369, 22.9895, 49.8013),
size = vec3(1.0, 1.0, 2.0),
jobRestricted = true,
slots = 100,
weight = 1000000,
},
},
-- Drying Racks (for drying weed)
Drying = {
Racks = {
{
id = 1,
name = "Blockbudz Rack",
target = vector3(241.4948, -1965.0256, 22.3449),
shelfBases = {
vector4(245.6450, -1963.2603, 24.3503, 139.4548),
vector4(244.9629, -1962.3115, 24.3503, 139.4548),
vector4(243.8193, -1962.0912, 24.3503, 139.4548),
vector4(243.0780, -1961.3075, 24.3503, 139.4548),
},
plantsPerShelf = 5, -- Would not touch this
maxPlants = 20,-- Would not touch this
},
},
PropSpacing = 1.1, -- Would not touch this
UI_RANGE = 2.0, -- Would not touch this
DriedProp = 'bkr_prop_weed_drying_01a',
},
-- Processing Stations (cleaning/rolling)
Processing = {
Stations = {
{
coords = vec4(243.5155, -1960.4667, 22.0653, 319.2770),
label = 'Process Buds',
categories = { 'Cleaning' },
anim = { dict = 'anim@amb@business@weed@weed_sorting_seated@', clip = 'sorter_right_sort_v3_sorter02' },
handProp = 'bkr_prop_weed_bud_02a',
tableProp = 'bkr_prop_weed_bud_02a',
},
{
coords = vec4(230.3163, -1952.3601, 23.3159, 319.9118),
label = 'Rolling Table',
categories = { 'Rolling' },
anim = { dict = 'anim@amb@business@weed@weed_sorting_seated@', clip = 'base_sorter_left_sorter01' },
handProp = 'p_cs_joint_01',
tableProp = 'p_cs_joint_02',
},
}
},
},
--=========================--
-- Smokeys Settings --
--=========================--
smokeys = {
enabled = true,
label = 'Smokeys',
job = 'smokeys',
plants = 20,
JobCheck = { Enabled = false, Name = 'smokeys' }, -- Restricts access to "smokeys" job
BossMenu = {
coords = vec4(1133.3590, -990.9971, 46.6357, 277.1366),
size = vec3(1.0, 1.0, 2.0),
distance = 2.5,
minGrade = 4,
},
Shops = {
{
id = 'weed_grow_supplies_smokeys',
label = 'Weed Grow Supplies',
enabled = true,
coords = vec4(1124.2236, -986.3421, 46.4918, 277.0585),
items = {
{ name = 'watering_can', label = 'Watering Can', price = 260, stock = 25 },
{ name = 'weed_fertilizer', label = 'Plant Fertilizer', price = 170, stock = 50 },
{ name = 'growing_soil', label = 'Growing Soil', price = 110, stock = 50 },
{ name = 'growing_sickle', label = 'Sickle', price = 320, stock = 10 },
{ name = 'growing_pot', label = 'Growing Pot', price = 85, stock = 50 },
{ name = 'skunk_seed', label = 'Skunk Seed', price = 210, stock = 50 },
{ name = 'purplehaze_seed', label = 'Purple Haze Seed', price = 210, stock = 50 },
{ name = 'whitewidow_seed', label = 'White Widow Seed', price = 210, stock = 50 },
{ name = 'amnesia_seed', label = 'Amnesia Seed', price = 210, stock = 50 },
{ name = 'ak47_seed', label = 'AK47 Seed', price = 210, stock = 50 },
{ name = 'ogkush_seed', label = 'OGKush Seed', price = 210, stock = 50 },
}
},
{
id = 'weed_prep_supplies_smokeys',
label = 'Weed Prep Supplies',
enabled = true,
coords = vec4(1131.1688, -987.2418, 45.4419, 17.7669),
items = {
{ name = 'weed_paper', label = 'Rolling Paper', price = 130, stock = 30 },
{ name = 'weed_grinder', label = 'Grinder', price = 130, stock = 30 },
}
},
},
Stashes = {
{
id = 'smokeys_stash',
label = 'Storage',
coords = vec4(1132.1068, -995.2280, 46.3391, 98.9760),
size = vec3(1.0, 1.0, 2.0),
jobRestricted = true,
slots = 100,
weight = 1000000,
},
{
id = 'smokeys_counter',
label = 'Counter',
coords = vec4(1133.5796, -992.7437, 46.3118, 7.4939),
size = vec3(1.0, 1.0, 2.0),
jobRestricted = false,
slots = 40,
weight = 120000,
},
{
id = 'smokeys_counter2',
label = 'Counter',
coords = vec4(1133.0480, -989.3034, 46.3118, 276.4157),
size = vec3(1.0, 1.0, 2.0),
jobRestricted = false,
slots = 40,
weight = 120000,
},
},
Drying = {
Racks = {
{
id = 1,
name = "Smokeys Main Rack",
target = vector3(1121.5403, -984.8937, 46.4541),
shelfBases = {
vector4(1123.7944, -986.0609, 48.4, 98.7038),
vector4(1124.2157, -984.4356, 48.4, 96.5777),
vector4(1123.8494, -983.1790, 48.4, 96.6172),
vector4(1123.6990, -981.7292, 48.4, 96.3025),
},
plantsPerShelf = 5,-- Would not touch this
maxPlants = 20,-- Would not touch this
},
},
PropSpacing = 0.5, -- Would not touch this
UI_RANGE = 1.0, -- Would not touch this
DriedProp = 'bkr_prop_weed_drying_01a',
},
Processing = {
Stations = {
{
coords = vec4(1124.0295, -983.6332, 46.2943, 277.7026),
label = 'Process Buds',
categories = { 'Cleaning' },
anim = { dict = 'anim@amb@business@weed@weed_sorting_seated@', clip = 'sorter_right_sort_v3_sorter02' },
handProp = 'bkr_prop_weed_bud_02a',
tableProp = 'bkr_prop_weed_bud_02a',
},
{
coords = vec4(1132.8855, -987.8391, 46.4602, 278.1383),
label = 'Rolling Table',
categories = { 'Rolling' },
anim = { dict = 'anim@amb@business@weed@weed_sorting_seated@', clip = 'base_sorter_left_sorter01' },
handProp = 'p_cs_joint_01',
tableProp = 'p_cs_joint_02',
},
}
},
},
}
--======================================================================
-- Processing Recipes (shared by all businesses)
--======================================================================
Config.Processing = {
Recipes = {
-- Cleaning
{ name = "amnesia_bud", label = "Clean Amnesia Buds", category = "Cleaning", duration = 5, ingredients = { amnesia_dried = 1 }, outputs = { amnesia_bud = 5 } },
{ name = "skunk_bud", label = "Clean Skunk Buds", category = "Cleaning", duration = 5, ingredients = { skunk_dried = 1 }, outputs = { skunk_bud = 5 } },
{ name = "purplehaze_bud", label = "Clean Purple Haze Buds", category = "Cleaning", duration = 5, ingredients = { purplehaze_dried = 1 }, outputs = { purplehaze_bud = 5 } },
{ name = "ogkush_bud", label = "Clean OGKush Buds", category = "Cleaning", duration = 5, ingredients = { ogkush_dried = 1 }, outputs = { ogkush_bud = 5 } },
{ name = "whitewidow_bud", label = "Clean White Widow Buds", category = "Cleaning", duration = 5, ingredients = { whitewidow_dried = 1 }, outputs = { whitewidow_bud = 5 } },
{ name = "ak47_bud", label = "Clean AK47 Buds", category = "Cleaning", duration = 5, ingredients = { ak47_dried = 1 }, outputs = { ak47_bud = 5 } },
-- Rolling
{ name = "skunk_joint", label = "Skunk Joint", category = "Rolling", duration = 10, ingredients = { skunk_bud = 2, weed_paper = 1, weed_grinder = { amount = 1, removeable = false } }, outputs = { skunk_joint = 1 } },
{ name = "amnesia_joint", label = "Amnesia Joint", category = "Rolling", duration = 10, ingredients = { amnesia_bud = 2, weed_paper = 1, weed_grinder = { amount = 1, removeable = false } }, outputs = { amnesia_joint = 1 } },
{ name = "purplehaze_joint", label = "Purple Haze Joint", category = "Rolling", duration = 10, ingredients = { purplehaze_bud = 2, weed_paper = 1, weed_grinder = { amount = 1, removeable = false } }, outputs = { purplehaze_joint = 1 } },
{ name = "ogkush_joint", label = "OGKush Joint", category = "Rolling", duration = 10, ingredients = { ogkush_bud = 2, weed_paper = 1, weed_grinder = { amount = 1, removeable = false } }, outputs = { ogkush_joint = 1 } },
{ name = "whitewidow_joint", label = "White Widow Joint", category = "Rolling", duration = 10, ingredients = { whitewidow_bud = 2, weed_paper = 1, weed_grinder = { amount = 1, removeable = false } }, outputs = { whitewidow_joint = 1 } },
{ name = "ak47_joint", label = "AK47 Joint", category = "Rolling", duration = 10, ingredients = { ak47_bud = 2, weed_paper = 1, weed_grinder = { amount = 1, removeable = false } }, outputs = { ak47_joint = 1 } },
}
}
--========================================================--
-- SEED TYPES & STATS
--========================================================--
-- growthTime is in MINUTES (e.g., 0.1 = 6 seconds, 1.0 = 1 minute, 2.5 = 2 minutes 30 seconds)
Config.Seeds = {
['skunk'] = {
label = 'Skunk Plant',
seedItem = 'skunk_seed',
standardharvestItem = 'skunk_plant',
harvestMin = 1,
harvestMax = 1,
growthTime = 1.5, -- 1.5 minutes per growth stage (total 7.5 min to fully grown)
waterLossPerStage = 5,
},
['purplehaze'] = {
label = 'Purple Haze Plant',
seedItem = 'purplehaze_seed',
standardharvestItem = 'purplehaze_plant',
harvestMin = 1,
harvestMax = 1,
growthTime = 2.0, -- 2.0 minutes per growth stage (total 10 min to fully grown)
waterLossPerStage = 5,
},
['whitewidow'] = {
label = 'White Widow Plant',
seedItem = 'whitewidow_seed',
standardharvestItem = 'whitewidow_plant',
harvestMin = 1,
harvestMax = 1,
growthTime = 2.5, -- 2.5 minutes per growth stage (total 12.5 min to fully grown)
waterLossPerStage = 10,
},
['amnesia'] = {
label = 'Amnesia Plant',
seedItem = 'amnesia_seed',
standardharvestItem = 'amnesia_plant',
harvestMin = 1,
harvestMax = 1,
growthTime = 3.0, -- 3.0 minutes per growth stage (total 15 min to fully grown)
waterLossPerStage = 10,
},
['ak47'] = {
label = 'AK47 Plant',
seedItem = 'ak47_seed',
standardharvestItem = 'ak47_plant',
harvestMin = 1,
harvestMax = 1,
growthTime = 3.0, -- 3.0 minutes per growth stage (total 15 min to fully grown)
waterLossPerStage = 10,
},
['ogkush'] = {
label = 'OGKush Plant',
seedItem = 'ogkush_seed',
standardharvestItem = 'ogkush_plant',
harvestMin = 1,
harvestMax = 1,
growthTime = 3.5, -- 3.5 minutes per growth stage (total 17.5 min to fully grown)
waterLossPerStage = 25,
},
['empty'] = { -- default fallback – do not edit
seedItem = nil,
standardharvestItem = nil,
harvestMin = 0,
harvestMax = 0,
growthTime = 999.0,
waterLossPerStage = 0,
},
}
--========================================================--
-- DRYING SYSTEM
--========================================================--
-- YOu can edit these if you want
Config.DryableItems = {
["skunk_plant"] = {
label = "Skunk",
outputItem = "skunk_dried",
amount = 1, -- How many dried plants are given back upon collection
dryTime = 120, -- 3 min 20 sec
},
["purplehaze_plant"] = {
label = "Purple Haze",
outputItem = "purplehaze_dried",
amount = 1,
dryTime = 250, -- 4 min 10 sec
},
["whitewidow_plant"] = {
label = "White Widow",
outputItem = "whitewidow_dried",
amount = 1,
dryTime = 300, -- 5 min 0 sec
},
["amnesia_plant"] = {
label = "Amnesia",
outputItem = "amnesia_dried",
amount = 1,
dryTime = 350, -- 5 min 50 sec
},
["ak47_plant"] = {
label = "AK47",
outputItem = "ak47_dried",
amount = 1,
dryTime = 400, -- 6 min 40 sec
},
["ogkush_plant"] = {
label = "OGKush",
outputItem = "ogkush_dried",
amount = 1,
dryTime = 450, -- 7 min 30 sec
},
}
Get it now: Purchase
Try before you buy! Join our Showcase Server
Join our Discord for support & updates!
MY OTHER PROJECTS
[Paid] Tuner Shop - La Mesa [MLO]
[Paid] Sandy Tavern [MLO]
[Paid] Pier 76 Car Club [MLO]
[Paid] Smokey’s Weed Shop [MLO]
[PAID] Harmony Dealership [MLO]
[PAID] Harmony Repair [MLO]
[PAID] The Town Bar & Grill [MLO]
[PAID] Jay’s Auto [MLO]
| Framework | Inventory | Target/Interaction |
|---|---|---|
| Code is accessible | No | ||
| Subscription-based | No | ||
| Lines (approximately) | 5000+ | ||
| Requirements & Dependencies | [Paid] Smokey’s Weed Shop [MLO] and or [Paid] Block Budz - Davis [MLO] | ||
| Support | Yes |












