Shared Configuration (sh_config.lua)
The config/sh_config.lua file is the central configuration file accessible by both the client and the server. It defines framework bridges, base locations, cleaning van attributes, the illegal contract unlock system, task payouts, and tool upgrades.
⚙️ Core Bridges & Settings
return {
debug = false, -- Enable verbose color-coded console logs for development
framework = 'qbx', -- Supported: 'qb', 'qbx', 'esx'
notify = 'ox_lib', -- Supported: 'ox_lib', 'bs-advnotifications'
interaction = 'ox_target', -- Supported: 'ox_target', 'qb-target', 'qbx-target'
phone = 'none', -- Supported: '17mov_phone', 'lb_phone', 'none'
dispatch = 'qb_dispatch', -- Supported: 'qb_dispatch', 'ps_dispatch', 'cd_dispatch', 'none'
clothingBridge = 'illenium-appearance', -- Supported: 'illenium-appearance', 'qb-clothing', 'esx_skin', 'none'
vehicleKeys = 'qbx_vehiclekeys', -- Supported: 'qb-vehiclekeys', 'qbx_vehiclekeys', 'qs-vehiclekeys'
jobName = false, -- false for open public job, or string like 'crimescenecleaner' to restrict to hired playersdebug: Whentrue, prints detailed logs with step indices and state changes ([CRIME-DEBUG]). Set tofalsein production.framework: Determines which framework bridge frombridge/framework/to load.interaction: Selects your target system (ox_target,qb-target, orqbx-target).phone: When set to'17mov_phone'or'lb_phone', sends an anonymous SMS from the fixer when the illegal route is unlocked. Set to'none'to use default popup notifications instead.dispatch: Integrates with police alert scripts for failed alarm hacking minigames.clothingBridge: Dictates how workwear and hazmat suits are applied and restored upon shift completion.vehicleKeys: Automatically distributes vehicle keys to all active lobby members when the cleaning van is spawned.jobName: Iffalse, any citizen can approach the boss NPC and start working. If set to a string (e.g.'crimescenecleaner'), only players with that job role can start routes.
⌨️ Commands & Keybinds
binds = {
dashboard = {
key = 'F7',
label = 'Open Job Dashboard',
},
toggleTasks = {
key = 'F6',
label = 'Toggle Crime Scene Tasks',
},
},
sceneManagerCommand = 'csctaskmanager', -- In-game scene & task creator tool (requires admin ACE)
bonusManagerCommand = 'cscbonusmanager', -- In-game multiplier event manager (requires admin ACE)binds.dashboard: Default key to toggle the comprehensive NUI job tablet/dashboard.binds.toggleTasks: Default key to toggle the active task checklist HUD during an active route.sceneManagerCommand: Administrative command to manage crime scenes and create 3D minigame tasks in real time (/csctaskmanager).bonusManagerCommand: Administrative command to trigger instant or scheduled payout multipliers (/cscbonusmanager).
📋 Route & Scene Behavior
job = {
spawnClearRadius = 5.0,
scenesPerJob = { min = 4, max = 6 },
tasksPerScene = { min = 4, max = 6 },
scene = {
taskLoadDistance = 150.0,
outlineRenderDistance = 20.0
}
},
lobby = {
inviteCooldown = 5, -- Seconds cooldown between player invites
},spawnClearRadius: Safe radius (in meters) checked by the server before spawning the cleaning van to avoid vehicle collisions.scenesPerJob: Number of crime scenes assigned per shift.tasksPerScene: Number of randomized minigames loaded at each crime scene location.scene.taskLoadDistance: Distance (in meters) at which props and task instances spawn into the client world.scene.outlineRenderDistance: Distance at which interactive task outline shaders become visible to players.
🏢 Base Headquarters & Work Vehicle
base = {
blip = {
sprite = 366,
color = 0x00BFFFFF,
scale = 0.8,
label = 'Crime Scene Cleaner Job',
},
ped = {
model = 's_m_y_dwservice_02',
coords = vec4(844.52, -2118.31, 29.52, 93.47),
},
vehicle = {
model = 'burritocsc',
spawnCoords = {
vec4(836.38, -2119.26, 28.35, 174.44),
vec4(836.62, -2119.59, 28.37, 179.09),
vec4(828.87, -2118.62, 28.16, 174.93),
},
color = {
primary = 111,
secondary = 111,
},
},
},base.ped: NPC coordinates and model for the legal cleanup dispatcher.base.vehicle: The bundledburritocscservice van. Spawns with equipment storage where players interact to don their Hazmat Suits.
🕵️ Shady / Illegal Job Route
illegalJob = {
requiredCourses = 20, -- Shifts required to unlock
payoutMultiplier = 2.0, -- 2x payout multiplier
ped = {
model = 'g_m_m_chigoon_01',
coords = vec4(752.06, -1201.81, 23.3, 3.11),
blip = {
sprite = 817,
color = 0x00BFFFFF,
scale = 0.8,
label = 'Shady Contact',
}
}
},requiredCourses: How many completed legal cleanup shifts a player must finish before unlocking the anonymous underworld route.payoutMultiplier: Extra reward multiplier applied to illegal mob cleanup payouts (default:2.0for 200% earnings).ped: Secluded alleyway location of the Shady Contact fixer NPC.
🛠️ Tasks & Rewards
Every individual minigame configuration defines base payouts, character XP, map blips, and UI tutorial steps:
tasks = {
['clean_blood'] = {
label = 'Clean Blood',
description = 'Clean all blood stains from the crime scene.',
exp = 50,
payment = 100,
-- blip and UI tutorial settings...
},
['collect_evidence'] = {
label = 'Collect Evidence',
description = 'Gather all evidence from the crime scene.',
exp = 50,
payment = 100,
-- ...
},
['hack_alarm'] = {
label = 'Hack Alarm',
description = 'Hack the alarm system at the crime scene.',
exp = 50,
payment = 100,
-- ...
},
['rearrange_furniture'] = {
label = 'Rearrange Furniture',
description = 'Put the furniture back in its original place.',
exp = 50,
payment = 100,
-- ...
},
['remove_cctv'] = {
label = 'Remove CCTV',
description = 'Remove the CCTV camera from the crime scene.',
exp = 50,
payment = 100,
-- ...
},
},📈 Tool Upgrades System
Players reinvest their hard-earned cash and EXP through the Dashboard Upgrades tab:
upgrades = {
{
id = "clean_blood",
name = "Detergent Kit",
description = "Reduces the time needed to clean blood stains.",
icon = "SprayBottle",
maxLevel = 3,
costs = {
[1] = { xp = 100, cash = 1000 },
[2] = { xp = 300, cash = 2500 },
[3] = { xp = 600, cash = 5000 },
},
multiplier = { [1] = 0.8, [2] = 0.6, [3] = 0.4 }
},
{
id = "remove_cctv",
name = "Advanced Screwdriver",
description = "Increases the speed of unscrewing bolts.",
icon = "Screwdriver",
maxLevel = 3,
-- ...
},
{
id = "hack_alarm",
name = "Decryptor Tool",
description = "Increases the time limit for the hacking minigame.",
icon = "Usb",
maxLevel = 3,
-- ...
},
{
id = "rearrange_furniture",
name = "Lifting Belt",
description = "Increases the snap tolerance for placing furniture.",
icon = "Belt",
maxLevel = 3,
-- ...
},
{
id = "collect_evidence",
name = "Magnetic Bag",
description = "Automatically collects evidence into the bag with a single click.",
icon = "CubeFocus",
maxLevel = 1,
-- ...
},
}