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