[ZaT-SCRIPTS][QBCore/ESX] FIVEM ART ASYLUM GALLERY HEIST

As a player, you will enjoy a seamless and user-friendly UI.

  • You can start the mission with your group.
  • You can make it work with any other MLOs, all the data and coords are in the config.lua
  • As a dev you can configure the following settings :
    • The Framework.
    • The Target/Dialog useage.
    • The Target/Interact useage.
    • The minimum cops required.
    • The minigame settings.
    • The Camera locations.
    • The Noise sensors and sensitivity.
    • The alarm sounds.
    • The dispatch.
    • The rewards and their chances.
    • The Rare rewards.
    • ++ More.

Code is accessible 80%
Subscription-based No
Lines (approximately) 5k+
Requirements qb-core/es_extended
Support Yes
  • Config.lua :
Config = {}

Config.Framework        = "qb" -- "esx"
Config.Inventory        = "qb" -- "qb", "ox", "qs"
Config.QBInventory      = "old" -- new
Config.Target           = "qb" -- ox !!!!!!!!! IMPORTANT
Config.FrameworkPseudo  = 'qb-core'
Config.UseInteract      = true
Config.Doorlock         = 'qb'


--::::::::::::::::::::::::: NPC DIALOG ::::::::::::::::::::::::::::::
Config.UseNPCDialog = true                                     
-- Only if NPCDialog is set to false                           
Config.NPC = {
    model  = "u_m_m_jesus_01",
    anim   = "CODE_HUMAN_MEDIC_TIME_OF_DEATH",
    coords = vector4(996.66, -1486.69, 30.43, 265.94)
}                          
--:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Config.MiniumCops       = 0
Config.SensorTime       = 30  -- sensor get auto reactivated after '30' seconds
Config.Timeout          = 180 -- 3 hours timeout between each robbery

Config.Alarm = {
    started             = false,
    dispatch            = 'qb-core',
    closeAllDoors       = true, -- On fail all the doors will close automatically
    url                 = 'https://www.youtube.com/watch?v=EnRK43JkxJk', -- alarm URL
    time                = 3, -- 3 minutes and the alarm sound will stop
}

Config.Item = {
    name = 'rfid_cloner',
    uses = 5, -- max usage of 1 item
}

Config.Talk = {
    coords = vector3(133.13, -149.2, 66.25), -- coords center where the player talking will be detected as noise (when robberry started)
    radius = 30.0   -- radius to detect player talking or not
}

Config.Doors = {
    {   -- Main Door Entrance                                                       --1
        coords = vector3(111.06, -139.24, 55.04),
        ped    = vector4(111.15, -139.37, 55.17, 254.75),
        item   = 'rfid_cloner',
        id     = 'gallery-1', -- door name from doorlock.
    },
    {   -- Left Door After Entrance                                                 --2
        coords = vector3(116.41, -142.25, 55.24),
        ped    = vector4(116.42, -142.30, 55.26, 247.94),
        item   = 'rfid_cloner',
        id     = 'gallery-2', -- door name from doorlock.
    },
    {   -- right Door After Entrance                                                --3
        coords = vector3(115.94, -143.52, 55.23),
        ped    = vector4(115.95, -143.57, 55.26, 247.94),
        item   = 'rfid_cloner',
        id     = 'gallery-3', -- door name from doorlock.
    },
    {   -- cameras door                                                             --4
        coords = vector3(120.18, -140.98, 55.07),
        ped    = vector4(120.30, -140.90, 55.19, 348.16),
        item   = 'rfid_cloner',
        id     = 'gallery-4', -- door name from doorlock.
    },
    {   -- Underground First door                                                   --5
        coords = vector3(733.96, 144.45, 80.91),
        ped    = vector4(734.10, 144.45, 81.10, 335.5),
        item   = nil,
        id     = 'gallery-7', -- door name from doorlock. 
    },
    {   -- Underground tunnel First door                                            --6
        coords = vector3(166.64, -140.65, 44.87),
        ped    = vector4(166.6, -140.32, 42.72, 168.64),
        item   = nil,
        id     = 'gallery-8', -- door name from doorlock. 
    },
    {   -- Underground tunnel second door                                           --7
        coords = vector3(131.93, -142.45, 44.66),
        ped    = vector4(132.88, -142.36, 43.39, 103.1),
        item   = nil,
        id     = 'gallery-9', -- door name from doorlock. 
    },
    {   -- Underground Second door                                                   --8
        coords = vector3(128.30, -145.67, 45.51),
        ped    = vector4(128.20, -145.80, 46.3, 160.68),
        item   = nil,
        id     = 'gallery-10', -- door name from doorlock. 
    },
    {   -- Underground Third door                                                   --9
        coords = vector3(116.16, -146.35, 49.62),
        ped    = vector4(116.16, -146.35, 49.62, 164.76),
        item   = nil,
        id     = 'gallery-11', -- door name from doorlock. 
    },
    {   -- Office First door                                                        --10
        coords = vector3(126.08, -132.57, 60.86),
        ped    = vector4(126.08, -132.50, 60.86, 74.76),
        item   = nil,
        id     = 'gallery-15', -- door name from doorlock. 
    },
    {   -- Elevator First door                                                        --11
        coords = vector3(148.37, -143.46, 50.68),
        ped    = vector4(148.39, -143.49, 50.68, 250.14),
        item   = 'rfid_cloner',
        id     = 'gallery-17', -- door name from doorlock. 
    },
    {   -- upper exit door                                                             --12
        coords = vector3(131.17, -124.39, 60.63),
        ped    = vector4(131.27, -124.30, 60.78, 347.84),
        item   = 'rfid_cloner',
        id     = 'gallery-19', -- door name from doorlock. 
    },
}

Config.Camera = {
    coords = vector3(119.98, -137.58, 54.73),
    cams   = {
        {
            name   = 'Gallery 2F 1',
            coords = vector3(141.51, -161.28, 63.75),
            rot    = vector3(-20.0, 0.0, 25.0),
        },
        {
            name = 'Alleyways',
            coords = vector3(142.81, -166.99, 63.60),
            rot    = vector3(-30.0, 0.0, 50.0),
        },
        {
            name = 'Lobby',
            coords = vector3(115.38, -146.36, 57.60),
            rot    = vector3(-30.0, 0.0, 180.0),
        },
        {
            name = 'Garage',
            coords = vector3(135.02, -138.82, 58.33),
            rot    = vector3(0.0, 0.0, -70.0),
        },
        {
            name = '2F Stairs',
            coords = vector3(127.71, -129.59, 63.85),
            rot    = vector3(-30.0, 0.0, -50.0),
        },
        {
            name = 'Main Stairs',
            coords = vector3(127.72, -129.60, 58.45),
            rot    = vector3(-30.0, 0.0, -50.0),
        },
        {
            name = 'Lower Stairs',
            coords = vector3(127.66, -129.61, 52.85),
            rot    = vector3(-30.0, 0.0, -50.0),
        },
        {
            name = 'Auction',
            coords = vector3(139.53, -126.37, 52.69),
            rot    = vector3(-30.0, 0.0, -150.0),
        },
        {
            name = 'Vault',
            coords = vector3(148.60, -143.87, 52.06),
            rot    = vector3(-30.0, 0.0, -90.0),
        },
        {
            name = 'Gallery 0F 1',
            coords = vector3(127.67, -130.10, 52.74),
            rot    = vector3(-20.0, 0.0, 200.0),
        },
        {
            name = 'Gallery 0F 2',
            coords = vector3(142.55, -158.18, 52.77),
            rot    = vector3(-30.0, 0.0, 10.0),
        },
        {
            name = '2F Elevator',
            coords = vector3(148.57, -143.86, 62.28),
            rot    = vector3(-30.0, 0.0, -90.0),
        },
        {
            name = 'Offices',
            coords = vector3(124.09, -137.10, 62.24),
            rot    = vector3(-30.0, 0.0, 20.0),
        },
    }
}

Config.Sensors = {
    {
        index   = 1, 
        rot     = vector3(-6.0, 0.0, 23.59),
        type    = 'noise',
        enabled = true,
        coords  = vector3(130.43, -135.86, 61.27),
    },
    {
        index   = 10, 
        rot     = vector3(-6.69, 0.0, 173.40),
        type    = 'noise',
        enabled = true,
        coords  = vector3(124.70, -152.35, 49.59),
    },
    {
        index   = 11, 
        rot     = vector3(-22.99, 0.0, 3.0),
        type    = 'noise',
        enabled = true,
        coords  = vector3(141.87, -149.93, 49.26),
    },
    {
        index   = 13, 
        rot     = vector3(-13.2, 0.0, 12.29),
        type    = 'noise',
        enabled = true,
        coords  = vector3(122.64, -129.05, 61.17),
    },
}

Config.SensorsAlert = {
    5, -- noise level >= 15     , the alert will increase by 5% evey second
    7, -- noise level >= 25     , the alert will increase by 7% evey second
    9, -- noise level >= 50     , the alert will increase by 9% evey second
    11, -- noise level >= 75    , the alert will increase by 11% evey second
    14, -- noise level >= 90    , the alert will increase by 14% evey second
    17, -- noise level >= 100   , the alert will increase by 17% evey second
}

Config.Safe = {
    coords  = vector3(118.00, -125.36, 60.70), 
    open_h  = 180.0,  -- open heading.
    close_h = 70.0,  -- closed heading.
    model   = -1992154984,
    open    = false,
    slots   = 10, -- you can incerease it
    rewards = { -- all of them will be there -- you can change it under server/inventories.lua
        [1] = { name = 'rollcash', info = { worth = 2650 }, amount = 5},
        [2] = { name = 'markedbills', info = { worth = 5620 }, amount = 2},
        [3] = { name = 'goldbar', info = { }, amount = 3},
    },
    rare    = {
        chance = 3,
        rewards = { -- one of them will be there -- you can change it under server/inventories.lua
            [1] = { name = 'blueprint', info = { type = "thermite" }, amount = 1},
        }
    }
}

Config.Vault = { -- 4 hacks shall be done at the same time to success the sequence
    id = 'gallery-16',
    time = 60, -- 60 s for the sequence to be done
    sequence = {
        {   -- First One that will launch the sequence, if this one is not done, the sequence will not even start.
            coords = vector3(120.62, -124.47, 60.40),
            hacked = false,
            label  = 'Activate Decryption', -- target label
        },
        {
            coords = vector3(124.60, -134.63, 60.29),
            hacked = false,
            label  = 'Decrypt Data', -- target label
        },
        {
            coords = vector3(119.38, -132.44, 60.38),
            hacked = false,
            label  = 'Decrypt Data', -- target label
        },
        {
            coords = vector3(154.67, -142.63, 50.67),
            hacked = false,
            label  = 'Hack', -- target label
        },

    },
}

Config.Arts = {
    {
        coords      = vector4(158.64, -140.90, 50.4, 340.0),
        ped         = vector4(158.56, -141.39, 49.2, 345.07),
        prop        = 'ch_prop_vault_painting_01e',
        available   = true, 
        reward      = { name = 'painting1', info = { worth = 12520 }, amount = 1},  -- only 1 type of reward per painting
    },
    {
        coords      = vector4(155.20, -142.49, 50.4, 73.92),
        ped         = vector4(155.67, -142.51, 49.2, 73.88),
        prop        = 'ch_prop_vault_painting_01i',
        available   = true, 
        reward      = { name = 'painting2', info = { worth = 12350 }, amount = 1}, -- only 1 type of reward per painting
    },
}

Config.Trollys = {
    {
        coords      = vector4(157.89, -144.62, 49.2, 70.0),
        available   = true,
        prop        = 'hei_prop_hei_cash_trolly_01',
        reward      = { name = 'rollcash', info = { worth = 2650 }, amount = 25}, -- only 1 type of reward per trolly
    },
    {
        coords      = vector4(156.46, -146.06, 49.2, 341.0),
        available   = true,
        prop        = 'hei_prop_hei_cash_trolly_01',
        reward      = { name = 'rollcash', info = { worth = 2650 }, amount = 25}, -- only 1 type of reward per trolly
    },
    {
        coords      = vector4(155.40, -145.73, 49.2, 341.0),
        available   = true,
        prop        = 'hei_prop_hei_cash_trolly_01',
        reward      = { name = 'rollcash', info = { worth = 2650 }, amount = 25}, -- only 1 type of reward per trolly
    },
    {
        coords      = vector4(158.50, -145.8, 49.2, 70.0),
        available   = true,
        prop        = 'hei_prop_hei_cash_trolly_01',
        reward      = { name = 'rollcash', info = { worth = 2650 }, amount = 25}, -- only 1 type of reward per trolly
    },
    {
        coords      = vector4(158.30, -143.23, 49.2, 70.0),
        available   = true,
        prop        = 'hei_prop_hei_cash_trolly_01',
        reward      = { name = 'rollcash', info = { worth = 2650 }, amount = 25}, -- only 1 type of reward per trolly
    },
    
}
--rogara : vector3(183.71, -158.27, 56.32)