Configuration
House Robbery System - Configuration Guide
This document explains all configuration options available in config.lua
and how they are used throughout the House Robbery System. Use this as a reference for customizing the script to your server's needs.
General Settings
Config.Cooldown = 900000 -- Global cooldown in ms (15 minutes)
Config.MissionCooldown = 30000 -- Mission start cooldown in ms (30 seconds)
Config.EnableProgress = true -- Enable progress bars for actions
Config.EnableSounds = true -- Enable/disable mission soundtracks
Config.SoundVolume = 0.02 -- Volume level (0.0 to 1.0)
Cooldown (
number
): Global cooldown between house robberies (in milliseconds).MissionCooldown (
number
): Cooldown between starting new missions (in milliseconds).EnableProgress (
boolean
): Enable/disable progress bars for robbery actions.EnableSounds (
boolean
): Enable/disable mission soundtracks during robberies.SoundVolume (
number
): Volume level for mission soundtracks (0.0 to 1.0).
Mission System
Mission Timer Configuration
Config.MissionTimer = {
enabled = true, -- Enable/disable mission timer system
duration = 60000, -- Mission duration in ms (60 seconds)
warningTime = 30000, -- Warning notification time before mission ends
autoEndMission = true, -- Automatically end mission when timer expires
clearInteractions = true, -- Clear all interactions except exit when mission ends
teleportPlayers = true, -- Teleport all players outside when mission ends
resetBucket = true -- Reset bucket to 0 when mission ends
}
enabled (
boolean
): Enable/disable the mission timer system.duration (
number
): Mission duration in milliseconds.warningTime (
number
): Time before mission ends to show warning notification.autoEndMission (
boolean
): Automatically end mission when timer expires.clearInteractions (
boolean
): Clear all interactions except exit when mission ends.teleportPlayers (
boolean
): Teleport all players outside when mission ends.resetBucket (
boolean
): Reset routing bucket to 0 when mission ends.
Mission Definitions
Config.Missions = {
{
id = "appartement_001",
name = "APPARTEMENT_TIER_1",
type = "COMMON",
difficulty = "LOW_RISK",
reward = 5000,
players = 2,
description = "SECURE_LOCATION // BASIC_SETUP",
category = "APPARTEMENT",
status = "AVAILABLE",
requiredItems = {
{name = "lockpick", amount = 2, label = "Basic Lockpick"}
},
requirements = {
level = 5,
skills = {"LOCKPICKING"}
}
}
-- Add more missions here...
}
Mission Properties:
id (
string
): Unique mission identifier.name (
string
): Display name for the mission.type (
string
): Mission rarity (COMMON, RARE, LEGENDARY).difficulty (
string
): Risk level (LOW_RISK, MEDIUM_RISK, HIGH_RISK, EXTREME_RISK, MAXIMUM_RISK).reward (
number
): Cash reward amount.players (
number
): Required number of players.description (
string
): Mission description.category (
string
): Mission category.status (
string
): Mission availability status.requiredItems (
table
): Items needed to start the mission.requirements (
table
): Level and skill requirements.
Customization Example:
Config.Missions['luxury_mansion'] = {
id = "luxury_mansion_001",
name = "LUXURY_MANSION_RAID",
type = "LEGENDARY",
difficulty = "MAXIMUM_RISK",
reward = 75000,
players = 5,
description = "HIGH_SECURITY_MANSION // ELITE_SETUP",
category = "MANSION",
status = "AVAILABLE",
requiredItems = {
{name = "hacking_laptop", amount = 1, label = "Hacking Laptop"},
{name = "advanced_lockpick", amount = 2, label = "Advanced Lockpick"}
},
requirements = {
level = 30,
skills = {"ADVANCED_HACKING", "ELITE_LOCKPICKING"}
}
}
House Entry System
Entry Method Configuration
Config.HouseEntrySystem = {
-- Which houses use hacking minigame instead of lockpick
UseHackingFor = {
["penthouse"] = true, -- Penthouse uses hacking
["facility"] = true, -- Facility uses hacking
["tier_1"] = false, -- Tier 1 houses use lockpick
["tier_2"] = false, -- Tier 2 houses use lockpick
["tier_3"] = false -- Tier 3 houses use lockpick
},
-- Required items for each system
RequiredItems = {
hacking = "hacking_laptop", -- Item needed for hacking
lockpick = "lockpick" -- Item needed for lockpicking
}
}
UseHackingFor (
table
): Define which house tiers require hacking instead of lockpicking.RequiredItems (
table
): Required items for each entry method.
Lockpick System Configuration
Config.EnableLockpick = true -- Enable/disable lockpick requirement
Config.LockpickSystem = "t3_lockpick" -- Lockpick system to use
-- T3 Lockpick Settings
Config.T3Lockpick = {
strength = "lockpick", -- "lockpick" or "advanced-lockpick" or custom number (0.1-1.0)
difficulty = 2, -- 1-7 (higher = harder)
pins = 4 -- 1-9 (number of pins to pick)
}
-- Custom Lockpick Event
Config.CustomLockpickEvent = "your-custom-lockpick:start"
Available Lockpick Systems:
"t3_lockpick"
: T3 Lockpick resource"qb-lock"
: QB-Lock resource"qb-keyminigame"
: QB Key Minigame"custom"
: Custom lockpick event"none"
: No lockpick required
Black Market System
Black Market Configuration
Config.BlackMarket = {
enabled = true, -- Enable/disable black market functionality
-- Black market sellable items
items = {
{
name = "luxury_watch", -- Item name that matches QBCore inventory
displayName = "STOLEN_LUXERY_WATCH",
description = "LUXURY_TIMEPIECE // HIGH_BLACK_MARKET_VALUE",
sellPrice = 250,
category = "contraband",
rarity = "rare"
}
-- Add more items here...
},
-- Category definitions for UI
categories = {
{
id = "all",
label = "ALL_ITEMS",
icon = "â—‰"
},
{
id = "contraband",
label = "CONTRABAND",
icon = "âš¡"
}
-- Add more categories...
}
}
Item Properties:
name (
string
): Item identifier in inventory system.displayName (
string
): Display name in black market UI.description (
string
): Item description.sellPrice (
number
): Selling price (can be percentage for cash items).category (
string
): Item category for UI organization.rarity (
string
): Item rarity (common, rare, legendary).
Customization Example:
Config.BlackMarket.items['stolen_artwork'] = {
name = "stolen_artwork",
displayName = "STOLEN_MASTERPIECE",
description = "PRICELESS_ARTWORK // MUSEUM_QUALITY",
sellPrice = 5000,
category = "artwork",
rarity = "legendary"
}
Police System
Police Configuration
Config.Police = {
BlipRemovalTime = 300000, -- Time in ms after which police blip auto-removes (5 minutes)
EnableBlipTimeout = true, -- Enable/disable auto-removal
-- Police Breach System Settings
BreachEnabled = true, -- Enable/disable police breach system
BreachDetectionRadius = 5.0, -- Distance for police to see breach option
BreachRequireAlert = true, -- Only allow breach on alerted robberies
BreachShowDistance = true, -- Show distance to robbery in breach text
BreachNotificationTime = 3000 -- How long breach notification shows (in ms)
}
BlipRemovalTime (
number
): Time in milliseconds after which police blip auto-removes.EnableBlipTimeout (
boolean
): Enable/disable automatic blip removal.BreachEnabled (
boolean
): Enable/disable police breach system.BreachDetectionRadius (
number
): Distance for police to see breach option.BreachRequireAlert (
boolean
): Only allow breach on alerted robberies.BreachShowDistance (
boolean
): Show distance to robbery in breach text.BreachNotificationTime (
number
): How long breach notification shows.
Police Alert Function
Config.PoliceAlert = function(coords)
TriggerServerEvent('police:server:policeAlert', 'House robbery in progress', coords)
end
Custom function for police alerts - replace with your police system.
House Configuration
House Structure
Config.IPLHouses = {
["tier_1"] = {
IPL = "tier_1", -- Interior IPL name
ExitCoords = vector3(266.2, -1007.61, -101.01), -- Exit coordinates
Objects = {
["Shell"] = {
Coords = vector3(262.1, -996.38, -99.01),
Text = "Search shell",
Items = {
[1] = {
name = "sandwich",
price = 0,
amount = 1,
info = {},
type = "item",
slot = 1
}
}
}
},
Props = {
["TV"] = {
Coords = vector3(-40.38, -571.7, 88.71),
Text = "Rob TV",
PropModel = "prop_tv_flat_01",
SearchRadius = 3.0,
Item = {
name = "tv",
amount = 1,
info = {},
type = "item"
},
RequireProgressBar = true,
ProgressTime = 6000,
Animation = {
dict = "mini@repair",
anim = "fixing_a_player",
flags = 16
},
Carry = true,
CarryProp = "prop_tv_flat_01",
CarryAnimation = {
dict = "anim@heists@box_carry@",
anim = "idle",
flags = 49
}
}
},
Safe = {
enabled = true,
model = "h4_prop_h4_safe_01a",
coords = vector3(-39.56, -582.74, 82.91),
rotation = {
["x"] = 0.0,
["y"] = 0.0,
["z"] = 70.0
},
interactionCoords = vector3(-38.66, -583.03, 83.92),
requireDrill = false,
items = {
[1] = {
name = "cash",
price = 0,
amount = math.random(2000, 5000),
info = {},
type = "item",
slot = 1
}
}
},
DisplayCases = {
[1] = {
model = "h4_prop_h4_glass_disp_01a",
coords = {
x = 362.43,
y = 4825.29,
z = -60.0,
h = 180.0
},
interactionCoords = vector3(0,0,0),
diamondCoords = {
x = 362.43,
y = 4825.29,
z = -58.95,
h = 45.0
},
playerPosition = {
x = 363.56,
y = 4825.2,
z = -59.0,
h = 94.88
},
requiredItem = '',
removeAfterUse = false,
items = {
{ name = 'pink_diamond', count = 1, model = "h4_prop_h4_diamond_01a" }
},
cutTime = 8000,
animation = {
dict = "anim@scripted@heist@ig16_glass_cut@male@",
anim = "cutting_loop",
flags = 1
}
}
},
Paintings = {
[1] = {
id = 1,
model = "ch_prop_vault_painting_01e",
scenePos = vector3(967.46, 39.45, 115.07),
sceneRot = vector3(0.0, 0.0, 151.11),
objectPos = vector3(967.21, 39.04, 116.21),
intPos = vector3(967.53, 39.45, 116.16),
objHeading = 147.23,
name = "artwork",
Robbed = false
}
},
Entrances = {
[1] = {
name = "Grove Street House 1",
coords = vector3(269.2, -1985.08, 20.8)
}
-- Add more entrances...
}
}
}
House Components
Objects
Searchable objects that give random items:
Coords (
vector3
): Object position.Text (
string
): Interaction text.Items (
table
): Array of possible items to find.
Props
Robable props that can be carried:
Coords (
vector3
): Prop position.Text (
string
): Interaction text.PropModel (
string
): GTA V prop model name.SearchRadius (
number
): Search radius for the prop.Item (
table
): Item received when robbed.RequireProgressBar (
boolean
): Whether to show progress bar.ProgressTime (
number
): Progress bar duration in ms.Animation (
table
): Animation to play during robbery.Carry (
boolean
): Whether the prop needs to be carried.CarryProp (
string
): Prop model to carry.CarryAnimation (
table
): Animation while carrying.
Safe
Safes that can be cracked:
enabled (
boolean
): Whether safe is enabled.model (
string
): Safe prop model.coords (
vector3
): Safe position.rotation (
table
): Safe rotation.interactionCoords (
vector3
): Where player stands to interact.requireDrill (
boolean
): Whether drill is required.items (
table
): Items found in safe.
Display Cases
Glass cases with diamonds:
model (
string
): Case prop model.coords (
table
): Case position.diamondCoords (
table
): Diamond position.playerPosition (
table
): Where player stands to cut.requiredItem (
string
): Item needed to cut glass.removeAfterUse (
boolean
): Whether to remove required item after use.items (
table
): Items in the case.cutTime (
number
): Time to cut glass in ms.animation (
table
): Cutting animation.
Paintings
Robable paintings:
id (
number
): Painting ID.model (
string
): Painting prop model.scenePos (
vector3
): Scene position.sceneRot (
vector3
): Scene rotation.objectPos (
vector3
): Object position.intPos (
vector3
): Interaction position.objHeading (
number
): Object heading.name (
string
): Item name when robbed.Robbed (
boolean
): Whether already robbed.
Entrances
Multiple entrance points for the same interior:
name (
string
): Entrance name.coords (
vector3
): Entrance coordinates.
Tools Shop
Tools Shop Configuration
Config.ToolsShopItems = {
{
id = "001",
name = "lockpick",
label = "Basic Lockpick",
price = 200,
description = "SECURITY_BYPASS_TOOL // ACCESS_LVL_1",
category = "tools",
status = "available",
quantity = 1,
image = "data:image/svg+xml;base64,..."
}
-- Add more items...
}
Item Properties:
id (
string
): Unique item ID.name (
string
): Item name in inventory.label (
string
): Display name.price (
number
): Item price.description (
string
): Item description.category (
string
): Item category.status (
string
): Item availability status.quantity (
number
): Default quantity.image (
string
): Base64 encoded image.
Advanced Features
Tablet Commands
Config.TabletOpenBlackMarketCommand = 'market' -- Command to open black market
Config.TabletOpenMissionCommand = 'mission' -- Command to open mission UI
TabletOpenBlackMarketCommand (
string
): Command to open black market from tablet.TabletOpenMissionCommand (
string
): Command to open mission UI from tablet.
Global Paintings Configuration
Config.Paintings = {
enabled = true,
rewards = {
{ name = "artwork", amount = 1 }
}
}
enabled (
boolean
): Enable/disable painting system.rewards (
table
): Rewards for cutting paintings.
Crew System
Crew Management
The House Robbery System includes a comprehensive crew system that allows players to:
Create and manage crews
Invite players to crews
Start missions as crew leaders
Share GPS coordinates with crew members
Synchronize robbery progress across crew members
Crew Commands
-- Available crew commands
/crewui -- Open crew management UI
/acceptcrew [crewId] -- Accept crew invite
/rejectcrew [crewId] -- Reject crew invite
/leavecrew -- Leave current crew
Commands
Available Commands
-- Player Commands
/crewui -- Open crew management interface
/acceptcrew [crewId] -- Accept crew invitation
/rejectcrew [crewId] -- Reject crew invitation
/leavecrew -- Leave current crew
/blackmarket -- Open black market interface
/mission -- Open mission interface
-- Police Commands
/clearrobberies -- Clear all active robberies (police only)
-- Debug Commands
/missiontimer -- Check mission timer status
/lockpickstatus [houseId] -- Check lockpick status
/giveswitchblade -- Give switchblade for testing paintings
Customization Examples
Add a New House
Config.IPLHouses["luxury_mansion"] = {
IPL = "luxury_mansion_interior",
ExitCoords = vector3(1000.0, 1000.0, 100.0),
Objects = {
["MasterBedroom"] = {
Coords = vector3(1005.0, 1005.0, 100.0),
Text = "Search Master Bedroom",
Items = {
[1] = {
name = "luxury_watch",
price = 0,
amount = 1,
info = {},
type = "item",
slot = 1
}
}
}
},
Props = {
["AntiqueVase"] = {
Coords = vector3(1010.0, 1010.0, 100.0),
Text = "Steal Antique Vase",
PropModel = "prop_vase_01",
SearchRadius = 2.0,
Item = {
name = "antique_vase",
amount = 1,
info = {},
type = "item"
},
RequireProgressBar = true,
ProgressTime = 8000,
Animation = {
dict = "mini@repair",
anim = "fixing_a_player",
flags = 16
},
Carry = true,
CarryProp = "prop_vase_01",
CarryAnimation = {
dict = "anim@heists@box_carry@",
anim = "idle",
flags = 49
}
}
},
Safe = {
enabled = true,
model = "h4_prop_h4_safe_01a",
coords = vector3(1015.0, 1015.0, 100.0),
rotation = {
["x"] = 0.0,
["y"] = 0.0,
["z"] = 0.0
},
interactionCoords = vector3(1014.0, 1014.0, 100.0),
requireDrill = true,
items = {
[1] = {
name = "cash",
price = 0,
amount = math.random(10000, 25000),
info = {},
type = "item",
slot = 1
}
}
},
Entrances = {
[1] = {
name = "Luxury Mansion Front Door",
coords = vector3(1020.0, 1020.0, 100.0)
}
}
}
Add a New Mission
Config.Missions[#Config.Missions + 1] = {
id = "luxury_mansion_001",
name = "LUXURY_MANSION_RAID",
type = "LEGENDARY",
difficulty = "MAXIMUM_RISK",
reward = 75000,
players = 5,
description = "HIGH_SECURITY_MANSION // ELITE_SETUP",
category = "MANSION",
status = "AVAILABLE",
requiredItems = {
{name = "hacking_laptop", amount = 1, label = "Hacking Laptop"},
{name = "advanced_lockpick", amount = 2, label = "Advanced Lockpick"}
},
requirements = {
level = 30,
skills = {"ADVANCED_HACKING", "ELITE_LOCKPICKING"}
}
}
Add New Black Market Item
Config.BlackMarket.items['stolen_artwork'] = {
name = "stolen_artwork",
displayName = "STOLEN_MASTERPIECE",
description = "PRICELESS_ARTWORK // MUSEUM_QUALITY",
sellPrice = 5000,
category = "artwork",
rarity = "legendary"
}
Change Police Requirement
Config.MinPolice = 2 -- Require 2 police officers online
Adjust Mission Timer
Config.MissionTimer.duration = 1800000 -- 30 minutes mission duration
Last updated