Builder Job
Builder Job
Overview
The Builder Job script allows players to engage in construction-themed missions within the game. Players can utilize various commands to manage building tasks, including starting and stopping missions, and interacting with cranes and other construction equipment. The script supports multiple frameworks and offers optional integrations for enhanced functionality, making it adaptable to different server setups.
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
None detected — needs manual review.
Optional Dependencies
- ox_lib
- ox_target or qb-target or qtarget
- es_extended
- qb-core
Installation
1. Upload the resource
Place the resource folder inside your server's resources directory (rename it to drc_builderjob-pack if needed).
2. Install dependencies
No required dependencies were detected. If this script needs one, this needs manual review.
3. Import database
No SQL file was detected. If this script uses a database, this needs manual review.
4. Add to server.cfg
ensure drc_builderjob-pack
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 /showbuild.
Config
drc_builderjob-pack/drc_builderjob/shared/sh_config.lua
Config = Config or {}
Config.Locale = 'en'
Config.Debug = false
Config.Framework = 'auto-detect' -- auto-detect | esx | qbcore | standalone
Config.NewESX = true
Config.InteractionType = 'target' -- target | textui
Config.FrameworkTarget = 'auto-detect' -- auto-detect | ox_target | qtarget | qb-target | none
Config.NotificationType = 'ox_lib' -- ox_lib | esx | qbcore | custom
Config.TextUI = 'ox_lib' -- ox_lib | esx | luke | custom
Config.Menu = 'ox_lib' -- ox_lib | qbcore | custom
Config.Progress = 'ox_lib' -- ox_lib | qbcore | progressBars | custom
Config.FuelType = 'ox_fuel' -- ox_fuel | legacy_fuel | ps_fuel | cdn_fuel | rcore | none
Config.KeySystem = 'auto-detect' -- auto-detect | qs | wasabi | fivecode | qbcore | none
Config.Job = 'builder'
-- Config.WebHook and Config.Security are server-only in server/sv_utils.lua.
-- -------------------------------------------------------------------------
-- COMPANY CLOTHING
-- Locations configured in the creator are combined with these fallback points.
-- -------------------------------------------------------------------------
Config.Clothing = {
Enabled = true,
RequireClothing = true,
ClothingType = 'illenium-appearance', -- auto-detect | rcore_clothing | esx_skin
-- qb-clothing | fivem-appearance | ox_appearance
-- illenium-appearance | native
ChangeAutomatically = false,
RestoreOnMissionEnd = true,
InteractionDistance = 2.0,
Locations = {
{ coords = vector3(890.3005, -1037.7020, 35.2516), radius = 1.25 },
{ coords = vector3(888.0442, -1042.4937, 35.2516), radius = 1.25 },
{ coords = vector3(893.3835, -1038.7745, 35.2516), radius = 1.25 },
},
Outfits = {
male = {
components = {
{ id = 3, drawable = 0, texture = 0 },
{ id = 4, drawable = 36, texture = 0 },
{ id = 6, drawable = 25, texture = 0 },
{ id = 8, drawable = 59, texture = 1 },
{ id = 11, drawable = 56, texture = 0 },
},
props = {
{ id = 0, drawable = 0, texture = 0 },
},
},
female = {
components = {
{ id = 3, drawable = 14, texture = 0 },
{ id = 4, drawable = 35, texture = 0 },
{ id = 6, drawable = 25, texture = 0 },
{ id = 8, drawable = 36, texture = 0 },
{ id = 11, drawable = 49, texture = 0 },
},
props = {
{ id = 0, drawable = 0, texture = 0 },
},
},
},
}
-- -------------------------------------------------------------------------
-- CREATOR ACCESS & GAMEPLAY
-- -------------------------------------------------------------------------
Config.BuildCreator = {
command = 'createbuildmission',
useAcePermission = false,
acePermission = 'drc_builderjob.creator',
adminGroups = { admin = true, superadmin = true },
cementPourDuration = 25, -- seconds
}
Config.Painting = {
interactionDistance = 3.0,
renderDistance = 45.0,
brushWidth = 0.18,
cursorSpeed = 0.038,
completionThreshold = 0.98,
paintOpacity = 165,
brushModel = 'prop_paint_brush03',
blip = {
enabled = true,
sprite = 1,
colour = 17,
scale = 0.72,
shortRange = false,
},
defaultColour = { r = 230, g = 176, b = 62 },
}
Config.GraffitiCleaning = {
interactionDistance = 3.0,
renderDistance = 45.0,
spongeWidth = 0.26,
cleaningStrength = 0.28,
completionThreshold = 0.90,
cursorSpeed = 0.038,
graffitiOpacity = 225,
spongeModel = 'prop_sponge_01',
spongeFallbackModel = 'prop_rag_01',
blip = {
enabled = true,
sprite = 1,
colour = 47,
scale = 0.72,
shortRange = false,
},
presets = { 'neon_tag', 'street_crown', 'red_warning', 'bubble_crew' },
}
-- -------------------------------------------------------------------------
-- HUD
-- -------------------------------------------------------------------------
Config.Hud = {
toggleKey = 'H',
layoutCommand = 'buildhud',
guideCommand = 'buildhelp',
showToggleHint = true,
showBuildHint = true,
defaultPosition = nil,
colours = {
accent = '#ffb340',
accentHot = '#ff9524',
accentSoft = '#ffd08a',
text = '#f4f7fb',
dim = '#cfd9e5',
muted = '#9dadc0',
info = '#63cbff',
success = '#57e08f',
danger = '#ff8b8b',
shade = 'rgba(3, 6, 11, .66)',
},
}
-- -------------------------------------------------------------------------
-- SUPPLY ORDERS
-- Pickup destinations, NPC positions and vehicle spawns are set in the creator.
-- Cargo slot and attachment calibrations are internal and shared by all missions.
-- -------------------------------------------------------------------------
Config.SupplyOrders = {
interactionDistance = 2.5,
loadingDuration = 4500,
returnRadius = 5.0,
vehicleFuel = 100.0,
vehicleColour = { r = 205, g = 92, b = 28 },
platePrefix = 'SUPPLY',
preset = {
npcModel = 's_m_m_dockwork_01',
npcScenario = 'WORLD_HUMAN_CLIPBOARD',
vehicleModel = 'flatbed',
forkliftModel = 'forklift',
forkliftReturnRadius = 5.0,
materials = {
woodbeam = {
labelKey = 'materials.wooden_beams',
label = 'Wooden beams',
price = 1,
maxPerRun = 2,
model = 'drc_build_woodbeam_packaged',
unpackModel = 'drc_build_woodbeam',
},
brick = {
labelKey = 'materials.bricks',
label = 'Bricks',
price = 1,
maxPerRun = 3,
model = 'drc_build_brick_package',
unpackModel = 'drc_build_brick',
palletModel = 'prop_pallet_01a',
},
plank = {
labelKey = 'materials.planks',
label = 'Planks',
price = 1,
maxPerRun = 2,
model = 'drc_build_plank_package',
unpackModel = 'drc_build_plank',
},
},
},
}
-- -------------------------------------------------------------------------
-- CREW, RECONNECT & PAYOUT
-- -------------------------------------------------------------------------
Config.Crew = {
command = 'buildmenu',
maxMembers = 6,
inviteRadius = 30.0,
inviteTimeout = 30,
requireJobToStart = false,
minShare = 5,
}
Config.Reconnect = {
enabled = true,
graceSeconds = 60 * 60,
}
Config.Payout = {
base = 2500,
perDestination = 150,
perInstallProp = 200,
perCementPhase = 400,
crewMultiplier = { 1.0, 1.05, 1.1, 1.15, 1.2, 1.25 },
roundTo = 10,
}
-- -------------------------------------------------------------------------
-- FOREMAN & MISSION VEHICLES
-- -------------------------------------------------------------------------
Config.JobStart = {
vehicleColour = { r = 205, g = 92, b = 28 },
npc = {
model = `s_m_y_construct_01`,
coords = vector4(901.8422241210938, -1043.3958740234376, 34.72628021240234, 2.22300291061401),
scenario = 'PROP_HUMAN_SEAT_COMPUTER',
streamDistance = 120.0,
despawnDistance = 150.0,
interactionDistance = 2.5,
groundSnap = false,
groundOffset = 0.05,
maxGroundCorrection = 3.0,
},
blip = {
enabled = true,
sprite = 801,
colour = 5,
scale = 0.8,
labelKey = 'blips.builder_job',
shortRange = true,
},
vehicles = {
{
model = 'caracara2',
labelKey = 'vehicles.builder_pickup',
coords = vector4(900.3353, -1067.5786, 32.8278, 358.9997),
},
{
model = 'mixer2',
role = 'cementMixer',
labelKey = 'vehicles.concrete_mixer',
coords = vector4(906.5311, -1065.6398, 32.8286, 354.8499),
returnRadius = 5.0,
},
},
vehicleSpawnDistance = 180.0,
siteArrivalRadius = 95.0,
cementMixerModel = 'mixer2',
}
-- -------------------------------------------------------------------------
-- TOWER CRANE
-- Mission-specific cranes and their positions are created in the mission editor.
-- -------------------------------------------------------------------------
Config.Crane = {
model = `drc_towercrane_crane`,
originalMapModel = `prop_towercrane_02d`,
TowerAssembly = {
baseModel = `prop_towercrane_02a`,
sectionModel = `prop_towercrane_02b`,
minSections = 2,
maxSections = 20,
defaultSections = 2,
Access = { enabled = true },
},
coords = vector3(128.08977, -347.89783, 97.476456),
spawnMainEntity = true,
hideOriginal = true,
hideRadius = 20.0,
MainRotation = { x = 0.0, y = 0.0, z = 280.20 },
operator = vector4(127.0847, -346.1940, 99.0789, 99.3772),
targetRadius = 1.25,
Blip = {
enabled = true,
sprite = 767,
colour = 5,
scale = 0.85,
labelKey = 'blips.operational_tower_crane',
shortRange = false,
},
trolleyModel = `drc_towercrane_trolley`,
hookModel = `drc_towercrane_hook`,
ropeEnabled = true,
ropeMode = 'line', -- line | physics
rotationSpeed = 5.0,
trolleySpeed = 1.5,
hookSpeed = 1.5,
hookRotationSpeed = 35.0,
fastSpeedMultiplier = 3.0,
trolleyMin = -35.0,
trolleyMax = 6.298,
hookMin = 5.0,
hookMax = 100.0,
}
-- -------------------------------------------------------------------------
-- TABLE SAW
-- Cutting transforms, animations, recipes and sawdust are internally calibrated.
-- -------------------------------------------------------------------------
Config.TableSaw = {
model = `prop_custom_tablesaw_anim_a`,
targetDistance = 2.0,
pushSpeed = 0.22,
}