Farmer
Farmer
Overview
The Farmer script provides players with a dedicated farming job in the GTA V roleplay environment. Players can engage in various farming activities, such as feeding animals, milking, and harvesting fruits, enhancing their roleplay experience. The script features an experience system to track progress and includes vehicles and props tailored for farming tasks.
Compatibility
Framework: ESX, QBCore, QBox, Standalone
Target: ox_target, qb-target, or qtarget (optional) — falls back to 3D text / TextUI if none are installed
Dependencies
Required Dependencies
- ox_lib
- es_extended
- drc_farmprops
Optional Dependencies
- mysql-async
- ox_target or qb-target or qtarget
- qb-core
Installation
1. Upload the resource
Place the resource folder inside your server's resources directory (rename it to drc_farmerjob if needed).
2. Install dependencies
Make sure all of the following are installed and started before this script:
ox_libes_extended
3. Import database
This script uses a database. Run the following SQL on your server's database:
CREATE TABLE IF NOT EXISTS `drc_farmerjob` (
`identifier` varchar(255) NOT NULL,
`experience` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
INSERT INTO `addon_account` (name, label, shared) VALUES
('society_farmer', 'farmer', 1)
;
INSERT INTO `addon_inventory` (name, label, shared) VALUES
('society_farmer', 'farmer', 1)
;
INSERT INTO `datastore` (name, label, shared) VALUES
('society_farmer', 'farmer', 1)
;
INSERT INTO `jobs` (name, label) VALUES
('farmer', 'farmer')
;
INSERT INTO `job_grades` (job_name, grade, name, label, salary, skin_male, skin_female) VALUES
('farmer',0,'worker','Worker',120,'{}','{}')
;
4. Add to server.cfg
ensure ox_lib
ensure es_extended
ensure drc_farmerjob
5. Configure the script
Open the config file and adjust the settings for your server. See the Config section below.
6. Restart and test
Restart your server (or start the resource) and test it in-game, e.g. with /startFeed.
Config
drc_farmerjob/shared/sh_config.lua
--[[
## ## ### #### ## ## ###### ####### ## ## ######## #### ######
### ### ## ## ## ### ## ## ## ## ## ### ## ## ## ## ##
#### #### ## ## ## #### ## ## ## ## #### ## ## ## ##
## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ## ## ####
## ## ######### ## ## #### ## ## ## ## #### ## ## ## ##
## ## ## ## ## ## ### ## ## ## ## ## ### ## ## ## ##
## ## ## ## #### ## ## ###### ####### ## ## ## #### ######
--]]
Config = {}
Config.Debug = false -- Enable debug prints
-- Framework settings
Config.Framework = 'ESX' -- 'ESX' | 'qbcore' | 'auto-detect'
Config.NewESX = true -- Use ESX export GetSharedObject()
-- Interaction / targeting
Config.InteractionType = 'target' -- 'target' | 'textui' | '3dtext'
Config.FrameworkTarget = 'ox_target' -- 'qtarget' | 'qb-target' | 'ox_target' | 'auto-detect'
-- Job requirements
Config.RequireJob = false -- Only allow specific job
Config.Job = 'farmer' -- Job name if RequireJob = true
-- Clothing / outfits
Config.RequireClothing = false -- Force outfit change on mission
Config.Clothing = 'auto-detect' -- 'auto-detect' | 'esx_skin' | 'qb-clothing' | 'fivem-appearance' | 'ox_appearance' | 'illenium-appearance'
-- UI settings
Config.Menu = 'ox_lib' -- 'ox_lib' | 'qbcore' | 'esx'
Config.TextUI = 'ox_lib' -- 'esx' | 'ox_lib' | 'luke' | 'custom'
Config.NotificationType = 'ox_lib' -- 'ESX' | 'ox_lib' | 'qbcore' | 'custom'
Config.Progress = 'ox_lib' -- 'ox_lib' | 'qbcore' | 'progressBars'
-- Vehicle settings
Config.FuelType = 'ox_fuel' -- 'legacy_fuel' | 'ox_fuel' | 'ps_fuel' | 'cdn_fuel' | 'rcore'
Config.KeySystem = 'none' -- 'none' | 'qs' | 'wasabi' | 'fivecode' | 'qbcore'
Config.VehicleOutline = true
Config.StartJobLocation = {
StartJob = {
coords = vec4(2416.5605, 4993.9712, 45.2213, 143.6591),
Blip = {
Text = 'Farmer Job',
Sprite = 141,
Colour = 52,
Scale = 1.0
}
},
spawnVehiclesLocation = {
vec4(2414.3809, 4979.4395, 46.2472, 43.9129),
vec4(2412.1831, 4977.1128, 46.1717, 44.7625),
vec4(2409.7847, 4975.1050, 45.9911, 38.8098),
vec4(2407.1826, 4972.2617, 45.9697, 55.1142),
},
ReturnVehicleLocation = {
Location = vec3(2407.6123, 4984.1621, 46.1076),
Blip = {
Text = 'Return Vehicle',
Sprite = 473,
Colour = 46,
Scale = 1.0
}
}
}
Config.FruitPicking = {
Missions = {
['Apple Field'] = {
Type = "Apple",
prop = 'sf_prop_sf_apple_01a',
Zone = {Position = vec3(2340.5784, 5005.4126, 42.5452), Radius = 20.0},
Blip = {
id = 237,
name = "Apple Field",
color = 1,
scale = 0.8
},
PickingTrees = {
vec3(2344.0325, 5007.7383, 42.7133),
vec3(2331.4678, 5007.5996, 42.3644),
}
},
['Orange Field'] = {
Type = "Orange",
prop = 'ng_proc_food_ornge1a',
Zone = {Position = vec3(349.2288, 6518.9023, 28.6709), Radius = 20.0},
Blip = {
id = 237,
name = "Orange Field",
color = 47,
scale = 0.8
},
PickingTrees = {
vec3(348.0869, 6517.8062, 28.7493),
vec3(354.8360, 6517.3452, 28.2274),
}
},
['Pear Field'] = {
Type = "Pear",
prop = 'drc_farmer_pear',
Zone = {Position = vec3(230.1762, 6511.5195, 31.2718), Radius = 20.0},
Blip = {
id = 237,
name = "Pear Field",
color = 2,
scale = 0.8
},
PickingTrees = {
vec3(226.3866, 6511.8877, 31.3265),
vec3(218.5062, 6510.0034, 31.3961),
}
},
['Peach Field'] = {
Type = "Peach",
prop = 'drc_farmer_peach',
Zone = {Position = vec3(2093.9062, 4845.6152, 41.7385), Radius = 20.0},
Blip = {
id = 237,
name = "Peach Field",
color = 51,
scale = 0.8
},
PickingTrees = {
vec3(2097.8879, 4841.5264, 41.6700),
vec3(2083.7319, 4853.0708, 41.9111),
}
},
},
Buyers = {
['AppleBuyer'] = {
FruitType = "Apple",
position = vec4(1696.0621, 4785.4048, 41.0199, 101.0933), -- Buyer position for Apple
Sale = {
Sale = 250,
minSale = 10 -- kinda empty box
},
Blip = {
id = 280,
name = "Apple Buyer",
color = 1,
scale = 0.8
}
},
['PeachBuyer'] = {
FruitType = "Peach",
position = vec4(910.9911, 3644.7515, 31.6774, 177.0744), -- Buyer position for Peach
Sale = {
Sale = 250,
minSale = 10 -- kinda empty box
},
Blip = {
id = 280,
name = "Peach Buyer",
color = 51,
scale = 0.8
}
},
['OrangeBuyer'] = {
FruitType = "Orange",
position = vec4(579.0546, 2677.6631, 40.8523, 11.0439), -- Buyer position for Peach
Sale = {
Sale = 250,
minSale = 10 -- kinda empty box
},
Blip = {
id = 280,
name = "Orange Buyer",
color = 47,
scale = 0.8
}
},
['PearBuyer'] = {
FruitType = "Pear",
position = vec4(-54.5910, 1956.2148, 189.1859, 95.3338), -- Buyer position for Pear
Sale = {
Sale = 250,
minSale = 10 -- kinda empty box
},
Blip = {
id = 280,
name = "Pear Buyer",
color = 2,
scale = 0.8
}
},
['MixedBuyer'] = {
FruitType = "Mixed",
position = vec4(1371.2705, 1139.4020, 112.7591, 80.9118), -- Buyer position for Pear
Sale = {
Sale = 150,
minSale = 10 -- kinda empty box
},
Blip = {
id = 280,
name = "Mixed Buyer",
color = 67,
scale = 0.8
}
}
}
}
Config.AnimalFeeding = {
Blips = {
NPCBlip = {
Sprite = 480,
Scale = 0.7,
Colour = 3
},
JobBlip = {
Sprite = 237,
Scale = 1.0,
Colour = 69
},
FeederBlip = {
Sprite = 677,
Scale = 0.7,
Colour =3
},
},
Missions = {
['Cow Feeding 1'] = {
Main = {
Salary = 1400,
Experience = 10,
},
NPCSpawn = vec4(2483.5923, 4738.5752, 33.3038, 115.4000),
zone = {
center = vec3(2482.4426, 4721.7886, 34.3008),
radius = 20.0
},
Feeders = {
feeder1 = {
playerPos = vec4(2482.3782, 4723.5703, 34.3018, 173.4305),
indicator = vec3(2482.4426, 4721.7886, 34.9008),
pile = vec3(2482.4426, 4721.7886, 33.3008)
},
feeder2 = {
playerPos = vec4(2471.9673, 4732.0952, 34.3038, 3.1836),
indicator = vec3(2471.2976, 4733.3833, 34.9038),
pile = vec3(2471.2976, 4733.3833, 33.3038)
},
}
},
['Cow Feeding 2'] = {
Main = {
Salary = 1400,
Experience = 10,
},
NPCSpawn = vec4(2464.6470, 4762.0801, 33.3066, 115.8320),
zone = {
center = vec3(2455.7676, 4753.0410, 34.3038),
radius = 20.0
},
Feeders = {
feeder1 = {
playerPos = vec4(2450.8188, 4765.1826, 34.3153, 94.3997),
indicator = vec3(2449.1855, 4765.3525, 34.9073),
pile = vec3(2449.4487, 4765.3608, 33.3081)
},
feeder2 = {
playerPos = vec4(2462.1985, 4744.4644, 34.3038, 224.3210),
indicator = vec3(2462.8530, 4743.2002, 34.9038),
pile = vec3(2462.8530, 4743.2002, 33.3038)
},
}
},
['Cow Feeding 3'] = {
Main = {
Salary = 1400,
Experience = 10,
},
NPCSpawn = vec4(2436.5935, 4790.0093, 33.6498, 139.1809),
zone = {
center = vec3(2430.8140, 4780.5220, 34.5071),
radius = 20.0
},
Feeders = {
feeder1 = {
playerPos = vec4(2428.5906, 4787.2812, 34.6622, 44.0003),
indicator = vec3(2427.6848, 4788.3623, 34.9934),
pile = vec3(2427.6848, 4788.3623, 33.5934)
},
feeder2 = {
playerPos = vec4(2432.9819, 4775.7212, 34.4215, 248.7417),
indicator = vec3(2434.0984, 4775.2095, 34.9094),
pile = vec3(2434.0984, 4775.2095, 33.3094)
},
}
},
['Cow Feeding 4'] = {
Main = {
Salary = 1400,
Experience = 10,
},
NPCSpawn = vec4(2404.5278, 4794.8052, 34.4001, 240.6204),
zone = {
center = vec3(2413.2429, 4795.9067, 35.1589),
radius = 20.0
},
Feeders = {
feeder1 = {
playerPos = vec4(2407.8616, 4796.4150, 35.2646, 71.3180),
indicator = vec3(2406.7117, 4796.9575, 35.9572),
pile = vec3(2406.7117, 4796.9575, 34.3572)
},
feeder2 = {
playerPos = vec4(2418.1833, 4797.0366, 35.1514, 255.3849),
indicator = vec3(2419.3838, 4796.4199, 35.9069),
pile = vec3(2419.3838, 4796.4199, 34.0069)
},
}
}
}
}
Config.MilkingCows = {
Blips = {
MainJobBlip = {
Sprite = 280,
Scale = 1.0,
Colour = 3
},
CowBlips = {
Sprite = 141,
Scale = 0.4,
Colour = 2
},
SellerBlips = {
Sprite = 237,
Scale = 1.0,
Colour = 69
},
},
Missions = {
['Cow Milking 1'] = {
Main = {
BucketSell = {min = 100, max = 1000},
Experience = 10,
},
NPCs = {
Seller = {
Position = vec4(2465.9241, 4761.3691, 33.3061, 227.9916),
},
},
zone = {
center = vec3(2455.9475, 4758.0029, 34.3041),
radius = 20.0
},
Cows = {
Cow1 = {
cowLocation = vec4(2475.4041, 4760.0659, 33.3038, 128.6745),
bucketLocatin = vec3(2475.4041, 4760.0659, 33.3038),
stoolLocation = vec4(2475.9741, 4759.2368, 33.3038, 48.2793),
indicator = vec4(2475.0156, 4760.0649, 35.3038, 49.4290)
},
Cow2 = {
cowLocation = vec4(2473.1738, 4762.6255, 33.3040, 128.6745),
bucketLocatin = vec3(2473.1738, 4762.6255, 33.3040),
stoolLocation = vec4(2473.6946, 4762.0776, 33.3038, 42.7641),
indicator = vec4(2473.1738, 4762.6255, 34.3040, 43.6306)
},
}
},
['Cow Milking 2'] = {
Main = {
BucketSell = {min = 100, max = 1000},
Experience = 10,
},
NPCs = {
Seller = {
Position = vec4(2458.3511, 4770.0347, 33.3878, 222.7530),
},
},
zone = {
center = vec3(2456.9358, 4764.9551, 34.3351),
radius = 20.0
},
Cows = {
Cow1 = {
cowLocation = vec4(2462.2939, 4771.2969, 33.3038, 134.4537),
bucketLocatin = vec3(2462.2939, 4771.2969, 33.3038),
stoolLocation = vec4(2462.9731, 4770.8506, 33.3038, 56.5440),
indicator = vec4(2462.9731, 4770.8506, 34.3856, 56.5440)
},
Cow2 = {
cowLocation = vec4(2465.9780, 4768.3945, 33.3038, 134.7910),
bucketLocatin = vec3(2465.9780, 4768.3945, 33.3038),
stoolLocation = vec4(2465.3689, 4768.8477, 33.3038, 228.1566),
indicator = vec4(2465.3689, 4768.8477, 34.3520, 228.1566)
},
}
},
['Cow Milking 3'] = {
Main = {
BucketSell = {min = 100, max = 1000},
Experience = 10,
},
NPCs = {
Seller = {
Position = vec4(2444.3911, 4740.4731, 33.3039, 312.7593),
},
},
zone = {
center = vec3(2445.4956, 4742.9795, 34.3039),
radius = 20.0
},
Cows = {
Cow1 = {
cowLocation = vec4(2439.5747, 4738.6592, 33.3028, 314.6006),
bucketLocatin = vec3(2439.5747, 4738.6592, 33.3028),
stoolLocation = vec4(2440.1433, 4738.1460, 33.3017, 48.8463),
indicator = vec4(2440.1433, 4738.1460, 34.3017, 48.8463)
},
Cow2 = {
cowLocation = vec4(2443.5374, 4734.7139, 33.3016, 320.5094),
bucketLocatin = vec3(2443.5374, 4734.7139, 33.3016),
stoolLocation = vec4(2442.6526, 4735.3696, 33.3007, 237.0351),
indicator = vec4(2442.6526, 4735.3696, 34.3007, 237.0351)
},
}
},
['Cow Milking 4'] = {
Main = {
BucketSell = {min = 100, max = 1000},
Experience = 10,
},
NPCs = {
Seller = {
Position = vec4(2439.5483, 4745.3955, 33.3040, 47.2119),
},
},
zone = {
center = vec3(2445.4956, 4742.9795, 34.3039),
radius = 20.0
},
Cows = {
Cow1 = {
cowLocation = vec4(2434.4946, 4743.3916, 33.3039, 314.5811),
bucketLocatin = vec3(2434.4946, 4743.3916, 33.3039),
stoolLocation = vec4(2433.6367, 4744.1387, 33.3038, 231.5154),
indicator = vec4(2433.6367, 4744.1387, 34.3038, 231.5154)
},
Cow2 = {
cowLocation = vec4(2430.9734, 4746.7627, 33.3039, 313.3702),
bucketLocatin = vec3(2430.9734, 4746.7627, 33.3039),
stoolLocation = vec4(2431.8569, 4745.9331, 33.3039, 42.7126),
indicator = vec4(2431.8569, 4745.9331, 34.3039, 42.7126)
},
}
},
}
}
Config.Ploughing = {
Blips = {
SellerBlip = {
Sprite = 108,
Scale = 1.0,
Colour = 46
},
FieldBlip = {
Sprite = 237,
Scale = 1.0,
Colour = 69
},
},
Missions = {
['Ploughing 1'] = {
Main = {
Salary = {min = 100, max = 1000},
Experience = 10,
},
NPCs = {
Seller = {
Position = vec4(2333.4187, 5086.8101, 45.9663, 327.4686),
Blip = { Sprite = 108, Scale = 1.0, Colour = 46 }
},
},
Field1 = {
propToPlow = 'prop_weeddry_nxg04',
plowSpawn = vec4(2291.6326, 5096.9380, 48.4863, 313.2681),
center = vec3(2309.7593, 5125.5845, 49.7549),
radius = 10.0,
propCount = 10
},
Field2 = {
propToPlow = 'prop_weeddry_nxg04',
plowSpawn = vec4(2346.1968, 5107.2593, 47.9899, 61.2356),
center = vec3(2338.1531, 5111.6709, 47.8033),
radius = 10.0,
propCount = 10
}
},
['Ploughing 2'] = {
Main = {
Salary = {min = 100, max = 1000},
Experience = 10,
},
NPCs = {
Seller = {
Position = vec4(2080.0000, 5181.6489, 53.0280, 315.7101),
Blip = { Sprite = 108, Scale = 1.0, Colour = 46 }
},
},
Field1 = {
propToPlow = 'prop_weeddry_nxg04',
plowSpawn = vec4(2078.5742, 5192.5322, 54.5586, 232.4064),
center = vec3(2113.5842, 5165.7285, 52.5152),
radius = 15.0,
propCount = 20
},
Field2 = {
propToPlow = 'prop_weeddry_nxg04',
plowSpawn = vec4(2078.5742, 5192.5322, 54.5586, 232.4064),
center = vec3(2134.6125, 5182.8550, 55.8406),
radius = 15.0,
propCount = 20
}
}
}
}
Config.BaleDeliver = {
Blips = {
GetTrailerBlip = {
Sprite = 479,
Scale = 0.8,
Colour = 46
},
DeliverTrailerBlip = {
Sprite = 237,
Scale = 0.8,
Colour = 69
},
NPCBlip = {
Sprite = 280,
Scale = 0.5,
Colour = 5
},
},
Mission = {
['Bale 1'] = {
Main = {
Salary = {min = 100, max = 1000},
Experience = 10,
},
RecieveTrailer = {
Zone = {pos = vec3(1943.3298, 4635.4282, 40.5092), radius = 15},
Trailer = 'baletrailer',
TrailerSpawn = vec4(1944.3938, 4625.9424, 40.4677, 13.6606)
},
DeliverTrailer = {
Zone = {pos = vec3(1572.6270, 3692.3601, 34.6299), radius = 15},
TrailerDeliverPos = vec4(1571.2570, 3698.2844, 34.2458, 115.3868),
NPC = vec4(1572.6270, 3692.3601, 33.6299, 343.4632)
}
}
},
}
Config.Outfits = {
["Cow Milking"] = {
male = {
tshirt_1 = 11, tshirt_2 = 1,
arms = 12,
torso_1 = 45, torso_2 = 0,
pants_1 = 25, pants_2 = 0,
shoes_1 = 34, shoes_2 = 0,
chain_1 = 0, chain_2 = 0,
glasses_1 = 5, glasses_2 = 0,
ears_1 = 0, ears_2 = 0,
},
female = {
tshirt_1 = 9, tshirt_2 = 1,
arms = 10,
torso_1 = 49, torso_2 = 0,
pants_1 = 28, pants_2 = 0,
shoes_1 = 36, shoes_2 = 0,
chain_1 = 0, chain_2 = 0,
glasses_1 = 2, glasses_2 = 0,
ears_1 = 0, ears_2 = 0,
}
},
["Fruit Picking"] = {
male = {
tshirt_1 = 11, tshirt_2 = 1,
arms = 12,
torso_1 = 45, torso_2 = 0,
pants_1 = 25, pants_2 = 0,
shoes_1 = 34, shoes_2 = 0,
chain_1 = 0, chain_2 = 0,
glasses_1 = 5, glasses_2 = 0,
ears_1 = 0, ears_2 = 0,
},
female = {
tshirt_1 = 9, tshirt_2 = 1,
arms = 10,
torso_1 = 49, torso_2 = 0,
pants_1 = 28, pants_2 = 0,
shoes_1 = 36, shoes_2 = 0,
chain_1 = 0, chain_2 = 0,
glasses_1 = 2, glasses_2 = 0,
ears_1 = 0, ears_2 = 0,
}
},
["Animal Feeding"] = {
male = {
tshirt_1 = 11, tshirt_2 = 1,
arms = 12,
torso_1 = 45, torso_2 = 0,
pants_1 = 25, pants_2 = 0,
shoes_1 = 34, shoes_2 = 0,
chain_1 = 0, chain_2 = 0,
glasses_1 = 5, glasses_2 = 0,
ears_1 = 0, ears_2 = 0,
},
female = {
tshirt_1 = 9, tshirt_2 = 1,
arms = 10,
torso_1 = 49, torso_2 = 0,
pants_1 = 28, pants_2 = 0,
shoes_1 = 36, shoes_2 = 0,
chain_1 = 0, chain_2 = 0,
glasses_1 = 2, glasses_2 = 0,
ears_1 = 0, ears_2 = 0,
}
},
["Bale Delivery"] = {
male = {
tshirt_1 = 11, tshirt_2 = 1,
arms = 12,
torso_1 = 45, torso_2 = 0,
pants_1 = 25, pants_2 = 0,
shoes_1 = 34, shoes_2 = 0,
chain_1 = 0, chain_2 = 0,
glasses_1 = 5, glasses_2 = 0,
ears_1 = 0, ears_2 = 0,
},
female = {
tshirt_1 = 9, tshirt_2 = 1,
arms = 10,
torso_1 = 49, torso_2 = 0,
pants_1 = 28, pants_2 = 0,
shoes_1 = 36, shoes_2 = 0,
chain_1 = 0, chain_2 = 0,
glasses_1 = 2, glasses_2 = 0,
ears_1 = 0, ears_2 = 0,
}
},
["Ploughing"] = {
male = {
tshirt_1 = 11, tshirt_2 = 1,
arms = 12,
torso_1 = 45, torso_2 = 0,
pants_1 = 25, pants_2 = 0,
shoes_1 = 34, shoes_2 = 0,
chain_1 = 0, chain_2 = 0,
glasses_1 = 5, glasses_2 = 0,
ears_1 = 0, ears_2 = 0,
},
female = {
tshirt_1 = 9, tshirt_2 = 1,
arms = 10,
torso_1 = 49, torso_2 = 0,
pants_1 = 28, pants_2 = 0,
shoes_1 = 36, shoes_2 = 0,
chain_1 = 0, chain_2 = 0,
glasses_1 = 2, glasses_2 = 0,
ears_1 = 0, ears_2 = 0,
}
},
}