Heist Configuration

Everything explained at one place. (WIP)

How it starts


CFG.Heists['unique_name'] = { -- insert unique name of heist
    -- parameters --
} 

Parameters


  • RequiredCops: number

    • Defines how many cops are required.

  • AllowPolice?: boolean

    • Allows defined jobs to interact with stuff inside the heist.

  • Cooldown: number

    • Timer for resetting heist to default state.

  • Alert?: table

    • Settings for police alert.

    • title: string

    • msg: string

    • flash: number

    • blip: table

      • sprite: number

      • scale: float

      • colour: number

      • flashes?: boolean

      • text: string

      • time?: number

      • sound?: number

  • Blips?: table

    • Parameters for creating blips on map.

    • index: table

      • label: string

        • coords: vector3

        • sprite: number

        • colour: number

        • alpha: number

        • scale: float

  • Briefing?: table

    • Allows you to create briefing spots or add briefing into menu.

    • coords?: vector4

    • distance?: float

    • label?: string

    • zone?: table

      • length: float

      • width: float

      • minZ: float

      • maxZ: float

    • text: table

      • title: string

      • description: string

      • task: string

      • items: string

      • image: string

  • PolyZones?: table

    • index: table

      • cooldown?: boolean

      • cops?: boolean

      • settings: table

        • vectors: table

        • thickness: number

        • debug: boolean

      • onEnter? or onExit?: table

        • Dialog?: table

          • title: string

          • msg: string

          • confirm?: string

          • decline?: string

        • Functions?: table

          • index: table

            • type: string

            • name: string

            • eventType?: string

            • params?: table

            • wait?: number

  • Doorlocks?: table

  • DoorSystem?: table

    • index: table

      • coords: vector3

      • heading: table

        • open: float

        • closed: float

      • open: boolean

  • Checkpoints? or Actions?: table

    • index: table

      • coords: vector4

        • Actual position of checkpoint/action.

      • label?: string

        • Displayed text.

      • disable_zone?: boolean

        • Disable target zone. (only qb and ox target)

        • Only for action spots.

      • zone?: table

        • Additional parameters to customise zone for qb and ox target.

        • length?: float

        • width?: float

        • minZ?: float

        • maxZ?: float

      • require?: table

        • item?: table

          • Check for required items.

            • name: string or table

            • remove?: boolean

        • armed?: table

          • Check for weapons.

          • weapon?: hash

          • type?: string ('rifle', 'handgun', 'melee', etc.. check main configuration)

        • bag?: boolean

          • Check for bag on player.

        • time?: table

          • Allow players to interact only at certain time.

          • min_hour: number

          • max_hour: number

        • custom?: function

          • You can write custom check for anything, return true/false.

      • state?: number

        • You can set default state for action spot, usable for action spots that you want to create but unlock later.

          • 0 = completed, 1 = incompleted

        • Only for action spots.

      • spawn: string or number

        • Callsign for action creation.

        • Only for action spots.

      • distance?: float

        • Parameter to set different distance check. Default 1.5

      • rewards?: table

        • Only for action spots.

        • index: number

          • item: string

          • chance: number

          • amount: table

            • from: number

            • to: number

          • trolley?: boolean

      • reward_limit?: number

        • Limits amount of rewards you can get.

      • object?: table

        • Only for action spots.

        • Creates an object at position.

        • name: hash or string

        • delete?: boolean

          • Should it stay or delete after finishing action? Default value is true.

      • vehicle?: table

        • Only for action spots.

        • Creates vehicles at position.

        • model: hash or string

        • locked?: boolean

          • Locks vehicle.

        • freeze?: boolean

          • Freezes vehicle at the location.

      • scene?: table

        • type: string

        • loot_obj?: hash or string

        • offset?: vector3

        • coords?: vector3

        • rot?: vector3

      • minigame?: table

        • type: string

      • progressbar?: table

        • label?: string

        • time: number

        • animDict: string

        • anim: string

        • flags: number

      • breakdoor?: number or string

        • Unlocks door by selected id from your doorlock system.

      • onStart? or onSuccess? or onFail?: table

        • Functions?: table

          • index: table

            • type: string

              • name: string

              • eventType?: string

              • params?: table

              • wait?: number

  • NPC?: table

    • FriendlyGuards: boolean

    • GLOBAL_SETTINGS?: table

    • NPCs?: table

      • index: table

        • spawn: string or number

        • health: number

        • armor: number

        • state: number

        • skin: hash or string

        • weapon: hash or string

        • animation?: table

          • dict: string

          • anim: string

          • flag: number

          • scenario: string

        • walkstyle?: string

        • freeze?: boolean

        • block_events?: boolean

        • bloody_clothes?: boolean

        • fire_pattern?: hash

        • fire_resistance?: boolean

        • walk_around?: boolean

        • highly_peceptive?: boolean

        • alertness?: table

          • from: number

          • to: number

        • movement?: table

          • from: number

          • to: number

        • combat_ability?: table

          • from: number

          • to: number

        • combat_range?: table

          • from: number

          • to: number

        • accuracy?: number

        • always_fight?: boolean

        • hearing_range?: float

        • seeing_range?: float

        • peripheral_range?: float

        • find_target?: boolean

        • disable_speaking?: boolean

        • disable_ragdoll?: boolean

        • disable_headshot?: boolean

        • disable_weap_switch?: boolean

        • onEliminate?: table

          • delete?: boolean

          • rewards?: table

            • item_name: table

              • from: number

              • to: number

          • action?: table

          • Functions?: table

  • Functions?: table

    • Main?: function

    • Start?: function

    • End?: function

Config Example

Example of completed mission for Humane Labs.

CFG.Heists["Humane Labs"] = {
    RequiredCops = 6, -- number of cops required to start
    Cooldown = 180, -- min -- global cooldown

    -- it will lock these doors when heist ends
    Doorlocks = {'humanelabs-first', 'humanelabs-second', 'humanelabs-third', 'humanelabs-fourth', 'humanelabs-fifth', 'humanelabs-sixth'}, -- all doorlock IDs

    Alert = {
        title = 'Humane Labs Heist in Progress',
        msg = 'A %s robbing at %s', -- A 'male/female' robbing at 'street'
        flash = 0,
        blip = {
            sprite = 431, scale = 1.2, colour = 49, flashes = true,
            text = '911 - Heist in Progress', time = (5*60*1000), sound = 1
        }
    },
    
    Blips = {
        { 
            label = 'Humane Labs', coords = vector3(3538.84, 3764.62, 29.92),
            sprite = 499, colour = 1, alpha = 250, scale = 1.0 
        }
    },

    Briefing = {
        text = {
            title = '**Humane Labs**',
            description = [[
                    Humane Labs and Research is a chemical research company. 
                    It's located on Chianski Passage, deep in the San Chianski Mountain Range, Blaine County.
                    It was formerly controlled by a pharmaceutical company owned by Maxim Rashkovsky and Dima Popov. 
                    A few years before the events of the game, the facility was leased to Merryweather Security, which was owned in part by Don Percival. 
                    They are known to have created biological weapons.
                    As seen during Chemical Extraction, The Humane Labs security of the area is provided by Merryweather.
                ]],
            task = 'Break in, steal everything you can and run away before the police arrive.',
            items = '4x thermite, torch, guns',
            image = '![Humane Labs](https://static.wikia.nocookie.net/gtawiki/images/5/52/HumaneLabsandResearch-GTAV.png)' -- name and url
        },
    },

    PolyZones = {
        [1] = {
            settings = {
                vectors = {
                    vec3(3396.0, 3760.3, 31.0), vec3(3404.0, 3641.0, 31.0),
                    vec3(3613.0, 3596.0, 31.0), vec3(3615.0, 3691.0, 31.0),
                    vec3(3652.0, 3731.0, 31.0), vec3(3647.0, 3777.0, 31.0),
                    vec3(3633.0, 3796.0, 31.0), vec3(3615.0, 3814.0, 31.0),
                    vec3(3600.0, 3818.0, 31.0), vec3(3501.0, 3822.0, 31.0),
                    vec3(3478.0, 3814.0, 31.0), vec3(3437.0, 3785.0, 31.0),
                }, thickness = 35, debug = false
            },

            onEnter = {
                cooldown = true, -- check for cooldown
                cops = true, -- check for cops

                Functions = {
                    [1] = { type = 'function', name = 'START' },
                    [2] = { type = 'function', name = 'CALL_ALERT' },
                    [3] = { 
                        type = 'function', 
                        name = 'SET_NPC_STATE', 
                        params = {
                            state = 5
                        } 
                    },
                    [4] = { 
                        type = 'function', 
                        name = 'NOTIFY', 
                        params = {
                            text = 'You started the heist.',
                            type = 'inform',
                            time = 3 -- seconds
                        } 
                    },
                    [5] = { 
                        type = 'function', 
                        name = 'START_GAS', 
                        params = {
                            unique_id = 1,
                            timer = 30, -- minutes
                            locations = {
                                vector3(3621.32, 3735.52, 28.69), 
                                vector3(3612.31, 3741.67, 28.69),
                                vector3(3613.02, 3723.69, 29.69), 
                                vector3(3604.36, 3708.67, 29.69),
                                vector3(3598.42, 3716.39, 29.69), 
                                vector3(3591.76, 3712.52, 29.69),
                                vector3(3586.39, 3697.49, 28.82), 
                                vector3(3597.98, 3689.26, 28.82),
                                vector3(3588.18, 3684.51, 27.62), 
                                vector3(3571.01, 3693.46, 27.53),
                                vector3(3562.82, 3688.18, 28.12), 
                                vector3(3558.02, 3681.86, 28.12),
                                vector3(3556.55, 3669.27, 28.12)
                            }
                        } 
                    },
                }
            },
        }
    },

    Checkpoints = {
        [1] = {
            coords = vector4(3600.73, 3718.28, 29.69, 322),
            label = 'Place Bomb',

            require = {
                item = { name = 'thermite', remove = true },
            },
            scene = { type = 'bomb', offset = vec3(0.0, 0.35, 0.0) }, 
            breakdoor = 'humanelabs-first', 

            onSuccess = {
                Functions = { 
                    [1] = { type = 'function', name = 'PHASE_2' },
                }
            }
        },
        [2] = {
            coords = vector4(3585.40, 3700.46, 28.82, 140), 
            label = 'Place Bomb',

            require = {
                item = { name = 'thermite', remove = true },
            },
            scene = { type = 'bomb', offset = vec3(0.0, 0.25, 0.0) }, 
            breakdoor = 'humanelabs-second', 

            onSuccess = {
                Functions = { 
                    [1] = {type = 'function', name = 'PHASE_3' },
                }
            }
        },
        [3] = {
            coords = vector4(3597.60, 3689.98, 28.82, 139), 
            label = 'Place Bomb',

            require = {
                item = { name = 'thermite', remove = true },
            },
            scene = { type = 'bomb', offset = vec3(0.0, 0.25, 0.0) }, 
            breakdoor = 'humanelabs-third', 

            onSuccess = {
                Functions = { 
                    [1] = { type = 'function', name = 'PHASE_4' },
                }
            }
        },
        [4] = {
            coords = vector4(3569.24, 3694.49, 28.12, 80), 
            label = 'Place Bomb',

            require = {
                item = { name = 'thermite', remove = true },
            },
            scene = { type = 'bomb', offset = vec3(0.0, 0.25, 0.0) }, 
            breakdoor = 'humanelabs-fourth', 

            onSuccess = {
                Functions = { 
                    [1] = { type = 'function', name = 'PHASE_5' }
                }
            }
        },
    },

    Actions = {

        -- MAIN GARAGE LOOT
        [1] = {
            coords = vector4(3607.6, 3734.24, 27.69, 143.16),
            label = 'Open Box',
            spawn = 'START', 
            distance = 1.5,

            scene = { type = 'empty_loot' },
            object = { name = `xm3_prop_xm3_crate_01a`, delete = false },
        },
        [2] = {
            coords = vector4(3609.85, 3732.43, 27.69, 143.16),
            label = 'Open Box',
            spawn = 'START', 
            distance = 1.5,

            scene = { type = 'loot_box', loot_obj = `w_ar_assaultrifle` },
            rewards = {
                { item = 'weapon_assaultrifle', chance = 100,  amount = { from = 1, to = 1 } },
            },
            object = { name = `xm3_prop_xm3_crate_01a`, delete = false },
        },

        -- LAB
        [3] = {
            coords = vector4(3560.77, 3669.41, 27.12, 260.0),
            label = 'Open Box',
            spawn = 'PHASE_5', 
            distance = 1.2,
            
            scene = { type = 'big_box2' },
            rewards = {
                { item = 'weapon_grenade', chance = 100,  amount = { from = 1, to = 1 } },
            },
            object = { name = `tr_prop_tr_adv_case_01a`, delete = false },
        },

        -- LAB DOOR
        [4] = {
            coords = vector4(3557.63, 3670.65, 28.28, 260.72),
            label = 'Open Door',
            spawn = 'PHASE_5', 
            distance = 1.3,
            zone = {minZ = 27.0, maxZ = 29.0, length = 0.7, width = 1.5},
            
            breakdoor = 'humanelabs-sixth',
            scene = { type = 'mobile_hack' },
            minigame = { type = 'fingerprint2' },
            object = { name = `ch_prop_fingerprint_scanner_01b`, delete = false },
        },
    },

    NPC = {
        FriendlyGuards = true, -- only with pre-defined jobs in main config file

        GLOBAL_SETTINGS = { -- if npcs doesn't have certain settings, it will set global settings to him
            spawn = 'START',
            
            health = 200,
            armor = 0,
            state = 5, -- -- 0 = Companion  1 = Respect  2 = Like  3 = Neutral  4 = Dislike  5 = Hate or false
            skin = `csb_mweather`, 
            weapon = `WEAPON_CARBINERIFLE`,
            animation = nil,
            walkstyle = false, -- 'MOVE_M@DRUNK@VERYDRUNK',
            freeze = false,
            block_events = false, -- they will not react to any events like shooting etc

            bloody_clothes = false,

            fire_pattern = `FIRING_PATTERN_FULL_AUTO`,
            fire_resistance = false,

            walk_around = false, -- patrol, guard, walk around
            
            highly_perceptive = false,
            alertness = {from = 1, to = 3 }, -- from 1 to 3 

            movement = {from = 1, to = 3}, -- randomised - 1 defensive, 2 agressive, 3 suicidal (flank)
            combat_ability = {from = 2, to = 2}, -- 0 poor, 1 average, 2 profesional
            combat_range = {from = 2, to = 2},  -- 0 near, 1 medium, 2 far
            accuracy = 38, -- from 0 to 100
            always_fight = true, -- true / false

            hearing_range = 250.0, -- units
            seeing_range = 250.0, -- units
            peripheral_range = 150.0, -- units

            disable_speaking = false,
            disable_ragdoll = false,
            disable_headshot = false,
            disable_weap_switch = true,
            
            find_target = true,
        },
        NPCs = { -- npcs to spawn

            -- OUTSIDE PHASE 
            [1] = { coords = vector4(3612.75, 3724.701, 28.6894, 330.7191) },
            [2] = { coords = vector4(3614.721, 3723.389, 28.6894, 333.8886) },
            [3] = { coords = vector4(3620.567, 3726.541, 27.69047, 18.80247) },
            [4] = { coords = vector4(3606.658, 3735.547, 27.6901, 298.2605) },
            [5] = { coords = vector4(3609.351, 3729.92, 28.68939, 160.7171) },
            [6] = { coords = vector4(3606.213, 3712.286, 28.71058, 154.6108) },
            [7] = { coords = vector4(3607.681, 3710.522, 28.68941, 317.5296) },
            [8] = { coords = vector4(3620.283, 3759.543, 27.51571, 53.44699) },
            [9] = { coords = vector4(3624.408, 3758.824, 27.51571, 58.37611) },
            [10] = { coords = vector4(3629.27, 3756.322, 27.51571, 13.88178) },
            [11] = { coords = vector4(3635.32, 3755.173, 27.51571, 39.69411) },
            [12] = { coords = vector4(3609.209, 3759.709, 42.36862, 47.75821) },
            [13] = { coords = vector4(3607.685, 3757.06, 42.36862, 76.63477) },
            [14] = { coords = vector4(3605.835, 3754.504, 42.36862, 59.09375) },
            [15] = { coords = vector4(3603.109, 3750.821, 42.36862, 55.33217) },
            [16] = { coords = vector4(3574.75, 3664.19, 33.9, 69.87) },
            [17] = { coords = vector4(3574.95, 3671.42, 33.89, 96.3) },
            [18] = { coords = vector4(3571.43, 3655.07, 33.9, 78.62) },
            [19] = { coords = vector4(3585.53, 3668.05, 33.89, 89.56) },
            [20] = { coords = vector4(3579.81, 3651.66, 33.89, 120.09) },

            -- Phase 2
            [21] = { spawn = 'PHASE_2', coords = vector4(3605.231, 3721.544, 28.68939, 134.4712) },
            [22] = { spawn = 'PHASE_2', coords = vector4(3598.779, 3721.717, 28.68939, 355.9252) },
            [23] = { spawn = 'PHASE_2', coords = vector4(3597.585, 3730.318, 28.68939, 198.1063) },
            [24] = { spawn = 'PHASE_2', coords = vector4(3596.1, 3724.67, 29.69, 160.82) },
            [25] = { spawn = 'PHASE_2', coords = vector4(3593.276, 3723.925, 28.68939, 207.5361) },
            [26] = { spawn = 'PHASE_2', coords = vector4(3595.703, 3721.168, 28.68939, 10.09607) },
            [27] = { spawn = 'PHASE_2', coords = vector4(3594.673, 3706.606, 28.6894, 85.91955) },
            [28] = { spawn = 'PHASE_2', coords = vector4(3593.872, 3705.237, 28.6894, 50.15606) }, 
            [29] = { spawn = 'PHASE_2', coords = vector4(3587.628, 3709.119, 28.6894, 242.7555) },
            [30] = { spawn = 'PHASE_2', coords = vector4(3587.808, 3703.306, 28.12482, 319.0247) },

            -- Phase 3
            [31] = { spawn = 'PHASE_3', coords = vector4(3593.733, 3696.407, 27.82138, 223.793) },
            [32] = { spawn = 'PHASE_3', coords = vector4(3594.647, 3693.146, 27.82138, 61.98658) },
            [33] = { spawn = 'PHASE_3', coords = vector4(3597.396, 3696.404, 27.82138, 143.4773) },

            -- Phase 4
            [34] = { spawn = 'PHASE_4', coords = vector4(3590.627, 3680.958, 26.62148, 324.4297) },
            [35] = { spawn = 'PHASE_4', coords = vector4(3592.794, 3680.314, 26.62144, 334.8682) },
            [36] = { spawn = 'PHASE_4', coords = vector4(3596.849, 3688.926, 27.82421, 323.6133) },
            [37] = { spawn = 'PHASE_4', coords = vector4(3584.714, 3692.401, 26.12185, 204.3712) },
            [38] = { spawn = 'PHASE_4', coords = vector4(3569.262, 3693.523, 27.12151, 269.6586) },

            -- Phase 5
            [39] = { spawn = 'PHASE_5', coords = vector4(3568.77, 3697.99, 28.12, 170.4) },
            [40] = { spawn = 'PHASE_5', coords = vector4(3559.673, 3696.451, 29.12165, 257.9576) },
            [41] = { spawn = 'PHASE_5', coords = vector4(3563.88, 3687.69, 28.12, 356.99) },
            [42] = { spawn = 'PHASE_5', coords = vector4(3569.06, 3691.46, 28.12, 95.71) },
            [43] = { spawn = 'PHASE_5', coords = vector4(3559.767, 3665.629, 27.12189, 67.24342) },
            [44] = { spawn = 'PHASE_5', coords = vector4(3553.977, 3667.492, 27.12189, 340.9748) },
            [45] = { spawn = 'PHASE_5', coords = vector4(3555.803, 3667.141, 27.12189, 353.7919) },

            -- MAIN
            [46] = {
                spawn = 'MAIN', state = 4,
                coords = vector4(3426.01, 3761.97, 30.83, 119),
                animation = {scenario = 'WORLD_HUMAN_GUARD_STAND'},
                find_target = false
            },
            [47] = {
                spawn = 'MAIN', state = 4,
                coords = vector4(3430.87, 3764.15, 30.83, 143),
                animation = {scenario = 'WORLD_HUMAN_GUARD_STAND'},
                find_target = false
            },
            [48] = {
                spawn = 'MAIN', state = 4,
                coords = vector4(3458.61, 3765.67, 43.37, 90),
                animation = {scenario = 'WORLD_HUMAN_GUARD_PATROL'},
                find_target = false
            },
            [49] = { 
                spawn = 'MAIN', state = 4,
                coords = vector4(3454.56, 3740.58, 36.64, 78.9),
                animation = {scenario = 'WORLD_HUMAN_GUARD_PATROL'},
                find_target = false
            },
            [50] = { 
                spawn = 'MAIN', state = 4,
                coords = vector4(3419.36, 3683.73, 41.34, 4.46),
                animation = {scenario = 'WORLD_HUMAN_GUARD_PATROL'},
                find_target = false
            },
            [51] = { 
                spawn = 'MAIN', state = 4,
                coords = vector4(3452.28, 3722.78, 36.64, 78.35),
                animation = {scenario = 'WORLD_HUMAN_GUARD_PATROL'},
                find_target = false,
            },
        },
    },
}

Last updated