Configuration
Beekeeping = {}
SD.Locale.LoadLocale('en') -- Load the locale language, if available. You can change 'en' to any other available language in the locales folder.
Beekeeping.DebugZones = false --- Enable debug for honey zones
Beekeeping.Max = { -- Max amount of houses/hives an individual player can have placed down at any time.
Hives = 5, -- Maximum
Houses = 5, -- Maximum
}
Beekeeping.Interaction = 'target' -- 'target' = qb-target/qtarget/ox_target or 'textui' = cd_drawtextui/qb-core/ox_lib textui
Beekeeping.InteractionDistance = 3.0 -- Interaction distance with hives and houses with target/textui.
-- This config does NOT retroactievely apply to houses/hives already placed down. It only applies to new ones placed down after the change.
Beekeeping.SpawnRange = 100 -- Spawn range for the hives/houses from the player. (Default: 100 meters)
Beekeeping.Saving = {
Method = 'txadmin', -- Options: 'txadmin', 'interval', 'resourceStop'
Interval = 30 -- in minutes, used if SaveMethod is 'interval'
}
-- It's recommended to keep this as false for performance reasons, but if you're testing or making changes to the config,
-- you can set it to true to reload the objects without needing to relog.
-- If true, requests objects from the server when the script starts or the client loads.
-- If false, it requests objects when the player is loaded. (e.g. via QBCore:Client:OnPlayerLoaded or esx:playerLoaded)
Beekeeping.LoadOnStart = false -- true/false
-- Beekeeping Expiration Settings
-- The expiration logic controls the durability of hives and houses over time. (Durability starts at a 100)
-- With the current configuration, the durability of a hive/house decreases by 'DecayRate' every 'DecayInterval' minutes.
-- For example, if 'DecayRate' is 1 and 'DecayInterval' is 60 (minutes), then the durability will decrease by 1 every hour.
-- Adjust these values based on your gameplay needs and server balance considerations.
Beekeeping.Expiry = {
EnableExpiration = true, -- Enables or disables the expiration logic for hives/houses.
DecaySettings = {
-- Settings for 'hive' type.
hive = {
DecayRate = 1, -- The amount by which durability decreases each time the decay interval elapses for hives.
DecayInterval = 60, -- Interval in minutes at which the durability decreases by the DecayRate for hives.
},
-- Settings for 'house' type.
house = {
DecayRate = 2, -- The amount by which durability decreases each time the decay interval elapses for houses.
DecayInterval = 120, -- Interval in minutes at which the durability decreases by the DecayRate for houses.
}
},
RepairCostPerOne = 100, -- The cost to restore one point of durability.
}
Beekeeping.LockAccess = true -- if enabled, lock access to the hive/house to the owner, and allow that owner to add 'collaborators' who will then also have access to the hive/house. If disabled, everyone can access it.
Beekeeping.RaycastingDistance = 10.0 -- Distance in meters that you are allowed to raycast when placing a hive/house.
-- This configuration limits the number of hives and houses a player can be added to as a collaborator.
-- It only applies to new additions and does NOT retroactively affect existing collaborations.
Beekeeping.LimitCollaborators = {
Enable = false, -- Set to `true` to enable the collaborator limit, or `false` to disable it.
Max = 5 -- The maximum number of hives/houses a player can collaborate on. Ignored if `Enable` is set to `false`.
}
Beekeeping.Infection = {
Enable = true, -- Whether to enable infection mechanics
CheckInterval = 10, -- How often (in minutes) to run the infection update
SeverityIncreaseInterval = 1, -- How often (in minutes) for the severity of the infection to increase
InfectionChance = 1, -- Chance (1 in X) that an uninfected hive becomes infected each check
WorkerDeathChance = 20, -- Percentage chance that workers will die each infection check if infected
WorkerDeathCountRange = {1, 3}, -- Minimum and maximum number of workers that can die when the event occurs
QueenDeathBaseChance = 0, -- Base percentage chance per severity level that the queen dies each check
TreatmentEnabled = true, -- Whether players can treat and cure infected hives
-- Severity levels fully define infection parameters
SeverityLevels = {
[1] = {
WorkerDeathChance = 20, -- Percentage chance workers die at severity 1
WorkerDeathCountRange = {1, 3}, -- Range of workers that may die at severity 1
QueenDeathChance = 0, -- Percentage chance the queen dies at severity 1
ProductionDelayMultiplier = 2.0, -- Production delay multiplier at severity 1
},
[2] = {
WorkerDeathChance = 30, -- Percentage chance workers die at severity 2
WorkerDeathCountRange = {2, 4}, -- Range of workers that may die at severity 2
QueenDeathChance = 5, -- Percentage chance the queen dies at severity 2
ProductionDelayMultiplier = 2.5, -- Production delay multiplier at severity 2
},
[3] = {
WorkerDeathChance = 50, -- Percentage chance workers die at severity 3
WorkerDeathCountRange = {3, 6}, -- Range of workers that may die at severity 3
QueenDeathChance = 10, -- Percentage chance the queen dies at severity 3
ProductionDelayMultiplier = 3.0, -- Production delay multiplier at severity 3
}
-- Add additional severity levels as needed
},
ShieldsEnabled = true, -- Whether players can purchase shields
-- Protection Tiers: Define different levels of shield protection
ProtectionTiers = {
[1] = {
localeKey = "hives.protection_tier_1",
cost = 500,
duration = 720 -- Duration in minutes (12 hours)
},
[2] = {
localeKey = "hives.protection_tier_2",
cost = 1000,
duration = 1440 -- Duration in minutes (24 hours)
},
[3] = {
localeKey = "hives.protection_tier_3",
cost = 2000,
duration = 2880 -- Duration in minutes (48 hours)
}
}
}
-- Aggression settings for hives and houses
Beekeeping.Aggression = {
Enable = true, -- Toggle the aggression system
DefaultLevel = 1, -- Starting aggression when created, this is more for testing purposes, you shouldn't modify this value.
Levels = { -- Aggression tiers: name + damage
[1] = { nameKey = "aggression.name_calm", damage = 0 },
[2] = { nameKey = "aggression.name_alert", damage = 5 },
[3] = { nameKey = "aggression.name_defensive", damage = 10 },
[4] = { nameKey = "aggression.name_aggressive", damage = 20 },
},
SmokerReduceBy = 'all', -- Levels reduced per use of the smoker.
-- You can also set this to a number so for ex. SmokerReduceBy = 1, which will reduce the aggression lvl by 1
SmokerRemoveChance = 25, -- % chance for the smoker to break when using it.
UpdateInterval = 120, -- Minutes between aggression rolls
Chance = { -- Overall % chance to bump +1 to aggression level each interval
Base = 5, -- Flat base % chance
PerWorker = 0.1, -- +0.2% per worker bee
PerSeverity = 2, -- +2% per infection severity level
FullHiveBonus = 5, -- +5% if full of honey but still producing
FullHouseBonus = 5, -- +% chance when a house is full of bees
Max = 90, -- Cap the chance at 90%
},
StingChance = {
[1] = 0, -- level 1 (calm) → 0% chance to sting
[2] = 20, -- level 2 (alert) → 20% chance to sting
[3] = 50, -- level 3 (defensive) → 50% chance to sting
[4] = 80, -- level 4 (aggressive) → 80% chance to sting
},
ProtectiveClothing = {
Enable = true, -- Master switch: enable/disable all protective checks
-- Matching logic:
-- "any" → pass if any single component or prop matches (Categories ignored)
-- "all" → require every listed component and every listed prop (Categories ignored)
-- "category_any" → require that you’re wearing something in at least one of the listed categories (Components/Props ignored)
-- "category_all" → require that you’re wearing something in every listed category (Components/Props ignored)
Mode = "any",
-- Category/ID List, this is what you can use for the "id" under props and components as well as the category section:
-- face, masks, hair, torso, legs, bags, shoes, accessories, undershirt, armor, decals, jackets, hats, glasses, ears, watches, bracelets
-- Exact body-component checks. (Used in "any" or "all" modes)
-- Add/remove entries here when Mode = "any" or "all"
Components = {
Common = { -- Shared between Male and Female
{ id = "hats", drawable = 5 },
-- You can add more or remove the above entry...
},
Male = {
{ id = "masks", drawable = 21 }, -- Torso (male-specific)
-- You can add more or remove the above entry...
},
Female = {
{ id = "masks", drawable = 15 }, -- Torso (female-specific)
-- You can add more or remove the above entry...
},
},
-- Exact prop checks (hats, glasses, etc.). (Used in "any" or "all" modes)
-- Add/remove entries here when Mode = "any" or "all"
Props = {
Common = { -- Shared between Male and Female
{ id = "hats", drawable = 14 }, -- Helmet
-- You can add more or remove the above entry...
},
Male = {
{ id = "masks", drawable = 5 }, -- Glasses (male)
-- You can add more or remove the above entry...
},
Female = {
{ id = "masks", drawable = 2 }, -- Glasses (female)
-- You can add more or remove the above entry...
},
},
-- Category requirements: if category_all must wear *something* in each named category, if category_any must wear at least have something in any of the listed category.
-- Used only when Mode = "category_any" or Mode = "category_all"
Categories = {
"masks", "masks", -- add others as needed
},
},
}
-- Beekeeping Ped Settings
Beekeeping.Beekeeper = {
Enable = true, -- If enabled, the beekeeper will spawn at the location below.
Location = {
{x = 426.05, y = 6478.9, z = 27.84, w = 234.9},
-- Add more locations as needed (Will Randomize from available locations each script start)
},
Model = "a_m_m_farmer_01",
Interaction = {
Icon = "fas fa-circle",
Distance = 3.0,
},
SpawnDistance = 50.0, -- Distance at which the ped spawns
Scenario = "WORLD_HUMAN_STAND_IMPATIENT" -- Full list of scenarios @ https://pastebin.com/6mrYTdQv
}
-- Blip Creation for Beekeeper if the Beekeeper is enabled
Beekeeping.Blip = {
Enable = true, -- Set to false to disable blip creation
Sprite = 106, -- Sprite/Icon for the blip
Display = 4, -- Display type
Scale = 0.7, -- Scale of the blip
Colour = 33, -- Colour of the blip
Name = "Beekeeper" -- Name of the blip
}
-- These are the blips that are created (when toggled by the user) for Hives and Houses. If false no blips will appear and the user will not have the ability to toggle them.
Beekeeping.FacilityBlip = {
Enable = true, -- true/false
["house"] = {
sprite = 40,
color = 10,
scale = 0.6,
label = "Bee House"
},
["hive"] = {
sprite = 40,
color = 5,
scale = 0.6,
label = "Bee Hive"
}
}
-- Beekeeping.ExclusionZones: Array of zones where hive/house placement is disabled.
-- Each zone is defined by a central point ('coords') and a 'radius'.
Beekeeping.ExclusionZones = {
{ coords = vector3(426.05, 6478.9, 27.84), radius = 100 }, -- Example Location (Default Beekeeper Location)
-- Add more zones as needed
}
-- Define the honey zones
-- Each zone will have a 'name' and 'honeyType'
Beekeeping.HoneyZones = {
Enable = true,
{ -- Mt Chiliad
name = 'Chiliad Meadow',
honeyType = 'chiliad',
thickness = 750,
points = {
vec3(-52.06, 7790.08, 0.00),
vec3(3248.96, 6337.81, 0.00),
vec3(3791.22, 4888.10, 0.00),
vec3(1315.75, 4216.83, 00.00),
vec3(-231.41, 4086.02, 00.00),
vec3(-2334.77, 5159.51, 00.00),
},
},
{ -- Green Hills
name = 'Green Hills',
honeyType = 'green_hills',
thickness = 750,
points = {
vec3(-2334.77, 5159.51, 0.00),
vec3(-3265.46, 3373.03, 0.00),
vec3(-2421.15, -392.66, 0.00),
vec3(-745.02, 936.11, 0.00),
vec3(3393.98, -149.63, 0.00),
vec3(3367.22, 2166.08, 0.00),
},
},
{ -- Alamo Grove
name = 'Alamo Grove',
honeyType = 'alamo',
thickness = 750,
points = {
vec3(3367.22, 2166.08, 0.00),
vec3(3791.22, 4888.10, 0.00),
vec3(1315.75, 4216.83, 0.00),
vec3(-231.41, 4086.02, 0.00),
},
},
-- Add more zones as needed
}
Beekeeping.HoneyTypes = {
['chiliad'] = { -- Mt Chiliad
displayName = 'Chiliad Honey',
item = 'chiliad-honey',
},
['green_hills'] = { -- Green Hills
displayName = 'Green Hills Honey',
item = 'green-hills-honey',
},
['alamo'] = { -- Alamo Grove (Sandy Shores)
displayName = 'Alamo Honey',
item = 'alamo-honey',
},
['basic'] = { -- Default Honey
displayName = 'Bee Honey',
item = 'bee-honey',
},
}
Beekeeping.Shop = {
UseItemImages = false, -- if true, display SD.GetItemImage(product); otherwise use iconName
ShowPricesOnTitles = true, -- if true, displays the price alongside the title. (labelKey)
BuyItems = {
{
product = "bee-house", -- internal identifier for the item (item name) (used in server events & SD.GetItemImage)
price = 1000, -- how much the player pays per unit
labelKey = "beekeeper.buy_bee_house", -- locale key OR a literal string (string example: labelKey = "Buy Bee House" )
descKey = "beekeeper.purchase_bee_house_desc", -- locale key OR a literal string (string example: descKey = "Buy Bee House for $1000" )
iconName = "home" -- fallback FA icon if UseItemImages = false
},
{
product = "bee-hive",
price = 1250,
labelKey = "beekeeper.buy_bee_hive",
descKey = "beekeeper.purchase_bee_hive_desc",
iconName = "fa-brands fa-hive"
},
{
product = "thymol",
price = 250,
labelKey = "beekeeper.buy_thymol",
descKey = "beekeeper.purchase_thymol_desc",
iconName = "fa-solid fa-leaf",
},
{
product = "bee-smoker",
price = 500,
labelKey = "beekeeper.buy_smoker",
descKey = "beekeeper.buy_smoker_desc",
iconName = "fa-solid fa-smog"
},
-- ←– To add a new buyable item, append:
-- {
-- product = "your-new-item-key",
-- price = 1234,
-- labelKey = "locale.or.direct.string.for.title",
-- descKey = "locale.or.direct.string.for.description",
-- iconName = "fa-icon-name"
-- },
},
SellItems = {
{
product = "bee-wax",
price = 750,
labelKey = "beekeeper.sell_wax",
descKey = "beekeeper.sell_wax_desc",
iconName = "fa-brands fa-hive"
},
{
product = "chiliad-honey",
price = 750,
labelKey = "beekeeper.sell_honey", -- locale expects {honey_name}
descKey = "beekeeper.sell_honey_desc", -- locale expects {honey_name}
iconName = "jar",
formatParams = { honey_name = Beekeeping.HoneyTypes["chiliad"].displayName } -- provides honey_name for locale
},
{
product = "green-hills-honey",
price = 675,
labelKey = "beekeeper.sell_honey",
descKey = "beekeeper.sell_honey_desc",
iconName = "jar",
formatParams = { honey_name = Beekeeping.HoneyTypes["green_hills"].displayName }
},
{
product = "alamo-honey",
price = 600,
labelKey = "beekeeper.sell_honey",
descKey = "beekeeper.sell_honey_desc",
iconName = "jar",
formatParams = { honey_name = Beekeeping.HoneyTypes["alamo"].displayName }
},
{
product = "bee-honey",
price = 500,
labelKey = "beekeeper.sell_honey",
descKey = "beekeeper.sell_honey_desc",
iconName = "jar",
formatParams = { honey_name = Beekeeping.HoneyTypes["basic"].displayName }
}
-- ←– To add another sellable item, append:
-- {
-- product = "item-key",
-- price = <sell price>,
-- labelKey = "locale.or.direct.string.for.title",
-- descKey = "locale.or.direct.string.for.description",
-- iconName = "fa-icon-name",
-- formatParams = { ... } -- only if your locale needs parameters
-- },
}
}
Beekeeping.WorkerThreshold = 10 -- Number of additional workers needed for each multiplier level (eg. if you have 30, it'll be 1.4x Honey Production and so on.)
Beekeeping.Multipliers = {
[1] = 1.2, -- 1st level: 1.2x production
[2] = 1.3, -- 2nd level: 1.3x production
[3] = 1.4, -- 3rd level: 1.4x production
[4] = 1.5, -- 3rd level: 1.5x production
[5] = 2.0, -- 3rd level: 2x production
-- Additional levels as needed
}
Beekeeping.House = {
CaptureTime = 300, -- Time in seconds to capture a new bee
QueenSpawnChance = 10, -- Chance in % to spawn a queen when capturing new bees
BeesPerCapture = {2, 3}, -- Min and max bees to capture per capture or fix amount
QueensPerCapture = 1, -- Min and max queens to capture per capture or fix amount
MaxQueens = 5, -- Max queens per house
MaxWorkers = 50, -- Max workers per house
UseItemImages = true, -- Boolean to dictate if the menu should display fontawesome icons or the item images. If true, then it uses item images.
}
Beekeeping.Hives = {
-- Honey
HoneyTime = 600, -- Time in seconds to produce honey & wax
HoneyPerTime = {1, 2}, -- Min and max honey to produce per time
MaxHoney = 100, -- Max honey per hive
-- Wax
ChanceOfWax = 10, -- In percentage what are the chances to get wax on HoneyTime?
WaxPerTime = {1, 2}, -- Min and max honey to produce per time
MaxWax = 20, -- Max wax per hive
-- Bees
NeededQueens = 1, -- Amount of queens needed for the hive to work.
NeededWorkers = 5, -- Amount of workers needed for the hive to work.
MaxWorkers = 50, -- Max workers per hive
UseItemImages = true, -- Boolean to dictate if the menu should display fontawesome icons or the item images. If true, then it uses item images.
}
Beekeeping.Items = {
QueenItem = 'bee-queen',
WorkerItem = 'bee-worker',
HoneyItem = 'bee-honey',
WaxItem = 'bee-wax',
HiveItem = 'bee-hive',
HouseItem = 'bee-house',
TreatmentItem = 'thymol',
SmokerItem = 'bee-smoker'
}
--[[
For bzzz's props (free): https://bzzz.tebex.io/package/5696199
For nopixel's props (paid): https://3dstore.nopixel.net/package/5622378
]]
-- 'native' are the props that come with the resource
Beekeeping.Type = 'native' -- 'native / 'bzzz' / 'nopixel' or 'custom'
if Beekeeping.Type == 'native' then
Beekeeping.Props = {
bee_house = 'hp3d_beehive1',
bee_hive = 'hp3d_beehive2',
}
elseif Beekeeping.Type == 'bzzz' then
Beekeeping.Props = {
bee_house = 'bzzz_props_beehive_box_002',
bee_hive = 'bzzz_props_beehive_box_001',
}
elseif Beekeeping.Type == 'nopixel' then
Beekeeping.Props = {
bee_house = 'np_beehive',
bee_hive = 'np_beehive02',
}
elseif Beekeeping.Type == 'custom' then
Beekeeping.Props = {
bee_house = '',
bee_hive = '',
}
end
Beekeeping.Grounds = { -- Acceptable materials for gound (grass, etc) [ DO NOT TOUCH IF YOU DON'T KNOW WHAT YOU ARE DOING. ]
-2041329971, -- Leaves
-461750719, -- GrassLong
1333033863, -- Grass
-1286696947, -- GrassShort
1144315879, -- ClayHard
-1942898710, -- MudHard
-1595148316, -- SandLoose
-1885547121, -- DirtTrack
-2041329971, -- Leaves
-840216541, -- Rock
-700658213, -- Soil
-913351839, -- Twigs
1109728704, -- MudDeep
1635937914, -- MudSoft
2128369009, -- GravelLarge
951832588, -- GravelSmall
581794674, -- Bushes
510490462, -- SandCompact
}
Last updated