Humanlabs Heist
Humanlabs Heist
Overview
The Humanlabs Heist script allows players to engage in a thrilling heist experience within the game, focusing on infiltrating a high-security lab. Players can utilize various items and tools, such as hacking devices and underwater bombs, to execute their plans. The script supports multiple heist scenarios, including loud and silent approaches, providing a dynamic gameplay experience for both individuals and teams.
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
Optional Dependencies
- ox_target or qb-target or qtarget or qb-core
Installation
1. Upload the resource
Place the resource folder inside your server's resources directory (rename it to drc_humanlabs if needed).
2. Install dependencies
Make sure all of the following are installed and started before this script:
ox_libes_extended
3. Import database
No SQL file was detected.
4. Add to server.cfg
ensure ox_lib
ensure es_extended
ensure drc_humanlabs
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 /hlabscreate.
Config
drc_humanlabs/shared/sh_config.lua
--[[
## ## ### #### ## ## ###### ####### ## ## ######## #### ######
### ### ## ## ## ### ## ## ## ## ## ### ## ## ## ## ##
#### #### ## ## ## #### ## ## ## ## #### ## ## ## ##
## ### ## ## ## ## ## ## ## ## ## ## ## ## ## ###### ## ## ####
## ## ######### ## ## #### ## ## ## ## #### ## ## ## ##
## ## ## ## ## ## ### ## ## ## ## ## ### ## ## ## ##
## ## ## ## #### ## ## ###### ####### ## ## ## #### ######
--]]
Config = {}
Config.Locale = 'en'
Config.Debug = true
Config.Framework = 'esx' -- 'qbcore' or 'esx' / auto-detect
Config.NewESX = true
Config.InteractionType = "textui" -- target or textui or 3dtext | which type of interaction you want
Config.FrameworkTarget = 'qtarget' --qtarget or qb-target or ox_target / auto-detect
Config.Job = 'trucker' -- Only works if require Job True
Config.FuelType = 'ox_fuel' -- legacy_fuel / ox_fuel / ps_fuel / cdn_fuel / rcore
Config.NotificationType = 'ox_lib'
Config.Menu = 'ox_lib' -- qbcore / ox_lib / esx
Config.Progress = 'ox_lib' -- qbcore / ox_lib /
Config.TextUI = "ox_lib" -- TextUIs | types: esx, ox_lib, luke
Config.Clothing = "auto-detect" -- Skin / Clothing | types: auto-detect, esx_skin, qb-clothing, fivem-appearance, ox_appearance, illenium-appearance
Config.RequireJob = false -- set this to false if you want the job to be visible to everyone
Config.KeySystem = 'none' -- qs, wasabi, fivecode, qbcore
Config.RewardCooldown = 120 -- for a 5-minute cooldown, for example
Config.Logs = { enabled = true, type = "webhook" } --Change webhook in use webhook or ox_lib (datadog) Can be changed in server > sv_utils.lua
Config.Dispatch = { enabled = false, script = "cd_dispatch" } -- cd_dispatch, linden_outlawalert, ps-dispatch
Config.PoliceJobs = { 'police', 'sheriff' }
Config.PoliceRequired = 3 -- Number of police required to start the heist
Config.MinRequiredPlayers = 2
Config.MaxPlayers = 4
Config.UIPositions = {
-- Supported presets: top_center, bottom_center, top_left, bottom_left, left_center, top_right, bottom_right, right_center, center
objective = "top_center",
elevator = "top_center",
alarm = "left_center",
}
Config.HeistLobbyUI = {
styleBonus = {
silent = 10,
loud = 0,
},
payoutBase = {
easy = { 90000, 120000 },
medium = { 120000, 160000 },
hard = { 160000, 220000 },
},
difficulty = {
easy = {
rewardBonus = 0,
npcStrength = "Low",
npcGear = "Basic",
policeResponse = "Low",
riskSilent = "LOW",
riskLoud = "MED",
},
medium = {
rewardBonus = 25,
npcStrength = "Medium",
npcGear = "Standard",
policeResponse = "Moderate",
riskSilent = "MED",
riskLoud = "HIGH",
},
hard = {
rewardBonus = 50,
npcStrength = "High",
npcGear = "Heavy",
policeResponse = "High",
riskSilent = "HIGH",
riskLoud = "HIGH",
},
},
}
Config.HeistSettings = {
AutoReset = {
minutes = 60,
},
}
-- ── Seller / Market ───────────────────────────────────────────────────────
Config.Seller = {
enabled = true,
coords = vector4(-50.2499, 1911.1591, 195.7051, 94.0437),
model = "g_m_m_chemwork_01",
scenario = "WORLD_HUMAN_CLIPBOARD",
blip = {
enabled = true,
sprite = 500,
color = 5,
scale = 0.85,
shortRange = true,
label = "Black Market",
},
target = {
label = "Open Market",
icon = "fas fa-store",
distance = 2.0,
},
Market = {
Title = "Black Market",
EnableBuy = true,
EnableSell = true,
DefaultMode = "buy", -- "buy" or "sell"
-- Items available for BUY mode (dealer sells these to the player)
BuyItems = {
{
name = "hl_bag",
label = "Scuba Gear",
price = 3500,
stock = 10,
},
{
name = "hl_bomb",
label = "Underwater Bomb",
price = 3500,
stock = 10,
},
{
name = "hl_hacking_device",
label = "Hacking Device",
price = 3500,
stock = 10,
},
},
-- Items available for SELL mode (player sells these to the dealer)
SellItems = {
{
name = "mechanical_device",
label = "Mechanical Device",
price = 2200,
stock = 25,
},
{
name = "laser_device",
label = "Laser Device",
price = 2400,
stock = 25,
},
{
name = "dna_sample",
label = "DNA Sample",
price = 2600,
stock = 30,
},
{
name = "lab_chip",
label = "Lab Chip",
price = 1900,
stock = 30,
},
{
name = "encrypted_drive",
label = "Encrypted Drive",
price = 3400,
stock = 20,
},
},
-- Legacy fallback (optional): if BuyItems/SellItems are missing, server will use Items for both modes.
-- Items = {},
},
}
-- ── Locations ─────────────────────────────────────────────────────────────
Config.Locations = {
StartHeistNpc = {
coords = vector4(1738.2512, 3029.0117, 63.1488, 5.8621),
model = "g_m_m_chemwork_01",
scenario = "WORLD_HUMAN_CLIPBOARD",
invincible = true,
freeze = true,
blockEvents = true,
target = {
label = "Open Heist Planning",
icon = "fas fa-user-secret",
distance = 2.0,
},
blip = {
enabled = true,
sprite = 428,
color = 5,
scale = 0.85,
shortRange = true,
label = "Heist Planner",
},
},
EndJob = {
targetCoords = vector4(1973.3784, 3815.5613, 33.4539, 299.5032),
target = {
zoneRadius = 1.4,
interactDistance = 1.8,
label = "Deliver chemical sample",
icon = "fas fa-vial",
},
route = {
enableAfterDistanceFromHeist = 140.0,
},
doors = {
enabled = true,
freeze = true,
list = {
{ model = `v_ilev_trevtraildr`, coords = vector3(1973.3784, 3815.5613, 33.4539), heading = 27.9594 },
},
},
scene = {
coords = vector4(1975.7886, 3819.1223, 33.5774, 121.6817),
animDict = "missfbi5ig_33",
deltaZ = -0.4,
actorAnim = "put_in_vial_player0",
camera = {
enabled = true,
fov = 48.0,
easeInMs = 250,
easeOutMs = 250,
offset = vector3(0.75, -1.60, 0.75),
lookAtOffset = vector3(0.00, 0.00, 0.20),
},
objects = {
{ model = "prop_cs_vial_01", anim = "put_in_vial_tube" },
{ model = "p_chem_vial_02b_s", anim = "put_in_vial_vial" },
},
},
prop = {
model = "p_chem_vial_02b_s",
coords = vector4(1975.7886, 3819.1223, 33.4374, 299.5032),
},
},
}
Config.SilentHeist = {
hackTerminal = {
model = "ch_prop_casino_keypad_02",
coords = vector3(3622.115, 3744.368, 28.980),
heading = 53.409,
animCoords = vector3(3622.162, 3744.431, 29.100),
animHeading = 53.409,
minigame = {
rounds = 5,
strikesAllowed = 2,
baseSpeed = 66,
speedPerRound = 0.38,
safeZoneMin = 0.055,
safeZoneMax = 0.13,
safeZoneShrink = 0.02,
},
},
Alarm = {
countdownMinutes = 10,
AlarmSound = {
enabled = true,
soundIdPrefix = "hlab_alarm_",
file = "lab_alarm.ogg",
volume = 0.45,
distance = 25.0,
loop = true,
locations = {
vector3(3617.1047, 3739.7776, 28.6874),
vector3(3565.9412, 3690.5125, 28.1215),
vector3(3529.4436, 3653.0667, 27.5215),
vector3(3538.9373, 3671.7583, 28.1211),
vector3(3556.7175, 3676.9080, 28.1219),
vector3(3596.5295, 3688.6555, 28.8207),
vector3(3595.8682, 3724.5623, 29.6894),
},
},
},
-- Guards spawn server-side and are synchronized for all team members.
-- Guard models are selected randomly from the `models` list.
-- vec4: x, y, z, heading
Guards = {
enabled = true, -- false = disable guard spawns
cleanup = true, -- delete guards when the heist ends
respawnOnDeath = false, -- true = respawn a guard once after death
Difficulty = {
easy = {
health = 160,
armor = 20,
combatAbility = 1,
combatRange = 1,
combatMovement = 1,
hearingRange = 18.0,
seeingRange = 30.0,
weaponTier = "basic",
accuracy = 25,
},
medium = {
health = 200,
armor = 50,
combatAbility = 2,
combatRange = 1,
combatMovement = 1,
hearingRange = 20.0,
seeingRange = 35.0,
weaponTier = "standard",
accuracy = 35,
},
hard = {
health = 260,
armor = 100,
combatAbility = 2,
combatRange = 2,
combatMovement = 2,
hearingRange = 26.0,
seeingRange = 45.0,
weaponTier = "heavy",
accuracy = 50,
},
weaponTiers = {
basic = { "WEAPON_PISTOL", "WEAPON_COMBATPISTOL" },
standard = { "WEAPON_COMBATPISTOL", "WEAPON_SMG", "WEAPON_CARBINERIFLE" },
heavy = { "WEAPON_SMG", "WEAPON_CARBINERIFLE", "WEAPON_ASSAULTRIFLE" },
},
},
models = { "S_M_Y_BlackOps_02", "S_M_Y_ArmyMech_01", "S_M_Y_Marine_03", "CSB_Ramp_marine", "S_M_M_Marine_01" },
spawnPoints = {
{ coords = vector4(3523.8164, 3683.4189, 20.9918, 350.7163), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3527.2842, 3693.0708, 20.9918, 39.2974), weapon = "WEAPON_COMBATPISTOL" },
{ coords = vector4(3531.5903, 3673.8975, 20.9918, 100.0452), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3528.3577, 3673.0605, 28.1211, 258.7129), weapon = "WEAPON_PISTOL" },
{ coords = vector4(3537.5764, 3664.2241, 28.1219, 74.1013), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3527.8738, 3649.0471, 27.5216, 338.4767), weapon = "WEAPON_COMBATPISTOL" },
{ coords = vector4(3542.4880, 3642.3955, 28.1219, 357.0245), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3550.1860, 3656.9744, 28.1219, 175.6332), weapon = "WEAPON_PISTOL" },
{ coords = vector4(3555.5356, 3673.2883, 28.1219, 158.4870), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3564.5596, 3690.7385, 28.1218, 218.6922), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3580.8230, 3692.3296, 27.1219, 93.7520), weapon = "WEAPON_PISTOL" },
{ coords = vector4(3591.4902, 3679.8000, 27.6215, 6.7879), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3589.0491, 3694.8826, 28.8214, 244.1363), weapon = "WEAPON_COMBATPISTOL" },
{ coords = vector4(3593.1667, 3714.7314, 29.6894, 169.2422), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3597.1855, 3703.2781, 29.6894, 339.0611), weapon = "WEAPON_PISTOL" },
{ coords = vector4(3613.3870, 3745.6279, 28.6663, 198.2155), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3604.9565, 3708.8503, 29.6894, 143.7028), weapon = "WEAPON_COMBATPISTOL" },
{ coords = vector4(3621.4646, 3735.6587, 28.6901, 155.7120), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3617.2583, 3730.1265, 28.6901, 142.6671), weapon = "WEAPON_PISTOL" },
},
},
-- Loot crates are spawned client-side; animations are synced via NetworkCreateSynchronisedScene.
-- type: 'BigCrate' or 'SmallCrate'
-- loot: { item = 'item_name', count = 1 }
-- blip: shown on each crate (visible to all players in the mission)
Crates = {
blipSprite = 478,
blipColor = 5, -- yellow
blipScale = 0.8,
randomBonus = {
enabled = true,
chance = 65, -- percent chance for one extra reward
small = {
{ item = 'bandage', count = { min = 1, max = 2 } },
{ item = 'water', count = 1 },
{ item = 'lockpick', count = 1 },
{ item = 'ammo-9', count = { min = 10, max = 25 } },
},
big = {
{ item = 'weapon_pistol', count = 1 },
{ item = 'lockpick', count = { min = 1, max = 2 } },
{ item = 'ammo-rifle', count = { min = 20, max = 45 } },
{ item = 'medikit', count = 1 },
},
},
list = {
{
type = 'SmallCrate',
coords = vector3(3595.6392, 3702.8669, 28.9894),
heading = 146.1648,
loot = { item = 'humanlabs_keycard', count = 1 },
},
{
type = 'SmallCrate',
coords = vector3(3593.5168, 3691.1274, 28.1214),
heading = 165.5000,
loot = { item = 'mechanical_device', count = 1 },
},
{
type = 'SmallCrate',
coords = vector3(3561.6047, 3665.2725, 27.4219),
heading = 262.2585,
loot = { item = 'laser_device', count = 1 },
},
{
type = 'SmallCrate',
coords = vector3(3531.5413, 3650.2207, 26.8216),
heading = 285.3983,
loot = { item = 'lab_chip', count = 1 },
},
{
type = 'SmallCrate',
coords = vector3(3539.7747, 3666.4080, 27.4219),
heading = 300.8604,
loot = { item = 'humanlabs_keycard', count = 1 },
},
-- STORAGE
{
type = 'SmallCrate',
coords = vector3(3608.7180, 3728.4827, 28.9894),
heading = 151.2838,
loot = { item = 'encrypted_drive', count = 1 },
},
{
type = 'BigCrate',
coords = vector3(3624.8403, 3737.4331, 27.6901),
heading = 45.0,
requiresCrowbar = false,
loot = { item = 'dna_sample', count = 2, itemModel = 'prop_cs_vial_01' },
},
{
type = 'BigCrate',
coords = vector3(3615.1091, 3735.1023, 27.6901),
heading = 140.1719,
requiresCrowbar = false,
loot = { item = 'encrypted_drive', count = 1, itemModel = 'hei_prop_hst_usb_drive' },
},
{
type = 'BigCrate',
coords = vector3(3609.0391, 3739.9744, 27.6901),
heading = 45.0,
requiresCrowbar = false,
loot = { item = 'humanlabs_sample', count = 2, itemModel = 'prop_cs_vial_01' },
},
{
type = 'BigCrate',
coords = vector3(3613.6001, 3749.4458, 27.6901),
heading = 45.0,
requiresCrowbar = false,
loot = { item = 'humanlabs_data', count = 1, itemModel = 'hei_prop_hst_usb_drive' },
},
},
},
Reactor = {
intact = {
model = "prop_chem_grill",
coords = vector3(3832.857, 3665.663, -23.000),
heading = -30.238,
rot = vector3(0.0, 0.0, -30.238),
},
broken = {
model = "prop_chem_grill_bit",
coords = vector3(3832.859, 3665.662, -22.999),
heading = -30.238,
rot = vector3(0.0, 0.0, -30.238),
},
target = {
zoneRadius = 2.5,
distance = 2.5,
zoneZOffset = 1.0,
},
cleanupRadius = 5.0,
},
Bomb = {
bagModel = "hei_p_m_bag_var22_arm_s",
model = "ch_prop_ch_ld_bomb_01a",
cleanupRadius = 8.0,
place = {
coords = vector3(3832.8721, 3665.7451, -22.9839),
heading = 150.0,
},
detonate = {
interactionRadius = 2.0,
countdownSeconds = 5,
},
},
Anim = {
dict = "anim@scripted@freemode@underwater_satchel_bomb@male@",
name = "action",
bagAnim = "action_bag",
bombAnim = "action_satchel_charge",
scene = {
standCoords = vector3(3832.8721, 3665.7451, -23.5339),
heading = 152.2141,
deltaZ = 0.56,
},
camera = {
enabled = true,
fov = 50.0,
easeInMs = 350,
easeOutMs = 250,
-- Local offsets relative to anim scene heading (x=right, y=forward, z=up)
offset = vector3(0.75, -1.25, 0.55),
lookAtOffset = vector3(0.0, 0.15, 0.25),
},
},
}
Config.LoudHeist = {
enabled = true,
-- If true: after stealing the chemical, players can use the silent elevator/water escape route
-- (requires blowing the inner bars from inside). If false: they must leave through the garage.
SilentEscape = true,
useSilentChemical = true,
garageDoors = {
model = -1081024910,
coords = {
vector3(3627.7131347656, 3746.7163085938, 27.69207572937),
vector3(3620.8408203125, 3751.5251464844, 27.69207572937),
}
},
hackTerminal = {
model = "ch_prop_casino_keypad_02",
coords = vector3(3624.574, 3749.315, 28.790),
heading = 143.939,
animCoords = vector3(3624.4665, 3749.2913, 28.9157),
animHeading = 150.2856,
-- Reuse silent minigame settings when omitted
},
innerBarsBomb = {
useSilentBombCoords = true,
coordsOffset = vector3(0.0, -0.2, 0.0), -- LOUD-only bomb prop/placement offset
animCoordsOffset = vector3(-0.2, -0.2, 0.0), -- LOUD-only planter animation offset
headingOffset = 180.0,
animHeadingOffset = 180.0,
},
Guards = {
enabled = true,
cleanup = true,
respawnOnDeath = false,
Difficulty = {
easy = {
health = 160,
armor = 20,
combatAbility = 1,
combatRange = 1,
combatMovement = 1,
hearingRange = 18.0,
seeingRange = 30.0,
weaponTier = "basic",
accuracy = 25,
},
medium = {
health = 200,
armor = 50,
combatAbility = 2,
combatRange = 1,
combatMovement = 1,
hearingRange = 20.0,
seeingRange = 35.0,
weaponTier = "standard",
accuracy = 35,
},
hard = {
health = 260,
armor = 100,
combatAbility = 2,
combatRange = 2,
combatMovement = 2,
hearingRange = 26.0,
seeingRange = 45.0,
weaponTier = "heavy",
accuracy = 50,
},
weaponTiers = {
basic = { "WEAPON_PISTOL", "WEAPON_COMBATPISTOL" },
standard = { "WEAPON_COMBATPISTOL", "WEAPON_SMG", "WEAPON_CARBINERIFLE" },
heavy = { "WEAPON_SMG", "WEAPON_CARBINERIFLE", "WEAPON_ASSAULTRIFLE" },
},
},
models = { "S_M_Y_BlackOps_02", "S_M_Y_ArmyMech_01", "S_M_Y_Marine_03", "CSB_Ramp_marine", "S_M_M_Marine_01" },
spawnPoints = {
{ coords = vector4(3523.8164, 3683.4189, 20.9918, 350.7163), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3527.2842, 3693.0708, 20.9918, 39.2974), weapon = "WEAPON_COMBATPISTOL" },
{ coords = vector4(3531.5903, 3673.8975, 20.9918, 100.0452), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3528.3577, 3673.0605, 28.1211, 258.7129), weapon = "WEAPON_PISTOL" },
{ coords = vector4(3537.5764, 3664.2241, 28.1219, 74.1013), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3527.8738, 3649.0471, 27.5216, 338.4767), weapon = "WEAPON_COMBATPISTOL" },
{ coords = vector4(3542.4880, 3642.3955, 28.1219, 357.0245), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3550.1860, 3656.9744, 28.1219, 175.6332), weapon = "WEAPON_PISTOL" },
{ coords = vector4(3555.5356, 3673.2883, 28.1219, 158.4870), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3564.5596, 3690.7385, 28.1218, 218.6922), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3580.8230, 3692.3296, 27.1219, 93.7520), weapon = "WEAPON_PISTOL" },
{ coords = vector4(3591.4902, 3679.8000, 27.6215, 6.7879), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3589.0491, 3694.8826, 28.8214, 244.1363), weapon = "WEAPON_COMBATPISTOL" },
{ coords = vector4(3593.1667, 3714.7314, 29.6894, 169.2422), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3597.1855, 3703.2781, 29.6894, 339.0611), weapon = "WEAPON_PISTOL" },
{ coords = vector4(3613.3870, 3745.6279, 28.6663, 198.2155), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3604.9565, 3708.8503, 29.6894, 143.7028), weapon = "WEAPON_COMBATPISTOL" },
{ coords = vector4(3621.4646, 3735.6587, 28.6901, 155.7120), weapon = "WEAPON_CARBINERIFLE" },
{ coords = vector4(3617.2583, 3730.1265, 28.6901, 142.6671), weapon = "WEAPON_PISTOL" },
},
},
Crates = {
blipSprite = 478,
blipColor = 5,
blipScale = 0.8,
randomBonus = {
enabled = true,
chance = 65,
small = {
{ item = 'bandage', count = { min = 1, max = 2 } },
{ item = 'water', count = 1 },
{ item = 'lockpick', count = 1 },
{ item = 'ammo-9', count = { min = 10, max = 25 } },
},
big = {
{ item = 'weapon_pistol', count = 1 },
{ item = 'lockpick', count = { min = 1, max = 2 } },
{ item = 'ammo-rifle', count = { min = 20, max = 45 } },
{ item = 'medikit', count = 1 },
},
},
list = {
{ type = 'SmallCrate', coords = vector3(3595.6392, 3702.8669, 28.9894), heading = 146.1648, loot = { item = 'humanlabs_keycard', count = 1 } },
{ type = 'SmallCrate', coords = vector3(3593.5168, 3691.1274, 28.1214), heading = 165.5000, loot = { item = 'mechanical_device', count = 1 } },
{ type = 'SmallCrate', coords = vector3(3561.6047, 3665.2725, 27.4219), heading = 262.2585, loot = { item = 'laser_device', count = 1 } },
{ type = 'SmallCrate', coords = vector3(3531.5413, 3650.2207, 26.8216), heading = 285.3983, loot = { item = 'lab_chip', count = 1 } },
{ type = 'SmallCrate', coords = vector3(3539.7747, 3666.4080, 27.4219), heading = 300.8604, loot = { item = 'humanlabs_keycard', count = 1 } },
{ type = 'SmallCrate', coords = vector3(3608.7180, 3728.4827, 28.9894), heading = 151.2838, loot = { item = 'encrypted_drive', count = 1 } },
{ type = 'BigCrate', coords = vector3(3624.8403, 3737.4331, 27.6901), heading = 45.0, requiresCrowbar = false, loot = { item = 'dna_sample', count = 2, itemModel = 'prop_cs_vial_01' } },
{ type = 'BigCrate', coords = vector3(3615.1091, 3735.1023, 27.6901), heading = 140.1719, requiresCrowbar = false, loot = { item = 'encrypted_drive', count = 1, itemModel = 'hei_prop_hst_usb_drive' } },
{ type = 'BigCrate', coords = vector3(3609.0391, 3739.9744, 27.6901), heading = 45.0, requiresCrowbar = false, loot = { item = 'humanlabs_sample', count = 2, itemModel = 'prop_cs_vial_01' } },
{ type = 'BigCrate', coords = vector3(3613.6001, 3749.4458, 27.6901), heading = 45.0, requiresCrowbar = false, loot = { item = 'humanlabs_data', count = 1, itemModel = 'hei_prop_hst_usb_drive' } },
},
},
exitGarage = {
useGarageDoorArea = true,
},
}
Config.ScubaGear = {
Item = "hl_bag", -- inventory item required to equip scuba gear
UnequipItem = "", -- item required to unequip scuba gear (leave "" to disable)
BagProp = "p_ld_heist_bag_s_1", -- bag prop placed in front of the player
-- Oxygen HUD while diving
Oxygen = {
Enabled = true, -- show oxygen HUD when scuba gear is equipped
MaxSeconds = 450, -- max oxygen in seconds (120 = 2 minutes)
RegenRate = 10, -- oxygen seconds restored per 1 second above water
},
-- Target settings (shown on the placed bag)
TargetDistance = 2.0, -- max distance for target interaction
Animation = {
-- Phase 1: place the bag down
pickupDict = "random@domestic",
pickupName = "pickup_low",
-- Phase 2: changing clothes (played during equip/unequip)
changeDict = "anim_heist@hs3f@ig12_change_clothes@",
changeName = "change_noose_male",
totalDuration = 4000, -- ms total duration of the outfit-change animation
componentDelay = 400, -- ms delay between component swaps (visual effect)
},
UnderOutfit = {
male = {
components = {
{ id = 8, drawable = 15, texture = 0 }, -- tshirt
{ id = 11, drawable = 15, texture = 0 }, -- torso
{ id = 3, drawable = 15, texture = 0 }, -- arms
{ id = 4, drawable = 21, texture = 0 }, -- pants
{ id = 6, drawable = 34, texture = 0 }, -- shoes
{ id = 7, drawable = 0, texture = 0 }, -- chain
},
props = {
{ id = 0, drawable = -1, texture = 0 }, -- remove helmet
},
},
female = {
components = {
{ id = 8, drawable = 15, texture = 0 },
{ id = 11, drawable = 15, texture = 0 },
{ id = 3, drawable = 15, texture = 0 },
{ id = 4, drawable = 21, texture = 0 },
{ id = 6, drawable = 34, texture = 0 }, -- shoes
{ id = 7, drawable = 0, texture = 0 },
},
props = {
{ id = 0, drawable = -1, texture = 0 },
},
},
},
-- Scuba outfit (equipped after switching to the base/under outfit)
Outfit = {
male = {
components = {
{ id = 8, drawable = 15, texture = 0 }, -- tshirt
{ id = 11, drawable = 243, texture = 0 }, -- torso
{ id = 3, drawable = 17, texture = 0 }, -- arms
{ id = 4, drawable = 45, texture = 0 }, -- pants
{ id = 6, drawable = 67, texture = 0 }, -- shoes
{ id = 1, drawable = 175, texture = 0 }, -- mask
{ id = 5, drawable = 45, texture = 0 }, -- bag
},
props = {
{ id = 0, drawable = -1, texture = 0 }, -- remove helmet (-1)
},
},
female = {
components = {
{ id = 8, drawable = 15, texture = 0 },
{ id = 11, drawable = 243, texture = 0 },
{ id = 3, drawable = 17, texture = 0 },
{ id = 4, drawable = 45, texture = 0 },
{ id = 6, drawable = 67, texture = 0 }, -- shoes
{ id = 1, drawable = 175, texture = 0 },
{ id = 5, drawable = 82, texture = 0 },
},
props = {
{ id = 0, drawable = -1, texture = 0 },
},
},
},
}