Config

Config = {} -- You can place webhook link for logs in server/main_editable.lua

Config.Framework = 'esx' -- 'esx' | 'qb'
Config.NotificationType = 'esx' -- 'esx' | 'qb' | 'ox' | 'mythic'
Config.Locale = 'en' -- 'en' | 'fi'
Config.ImagePath = 'nui://ox_inventory/web/images' -- path for images used in UI (for QB: nui://qb-inventory/html/images) (for ox_inventory: nui://ox_inventory/web/images)
Config.DebugMode = false -- false | true

Config.Inventory = 'default' -- 'default' | 'ox' | 'qs'
Config.Target = 'none' -- 'none' | 'ox' | 'qb'
Config.Dispatch = 'default' -- 'default' | 'tk' | 'cd' | 'qs' | 'ps' | 'rcore' | 'lb'
Config.UseOxLib = false -- false | true, remember to add " shared_script '@ox_lib/init.lua' " to fxmanifest.lua if set to true

Config.Controls = {
    interact = 38, -- E
    secondaryInteract = 47, -- G
    toggleLock = 246, -- Y
}

Config.PoliceJobs = {
    police = 0, -- job name, minimum grade required
    sheriff = 0,
    leo = 0,
}

Config.Blip = { -- blip settings for police alerts (default dispatch only)
    union = {
        color = 1,
        scale = 1.0,
        sprite = 60,
        time = 60, -- seconds until blip fades
        playSound = true,
    },
    bankTruck = {
        color = 1,
        scale = 1.0,
        sprite = 67,
        time = 60,
        playSound = true,
    },
}

Config.BankTruck = {
    minCops = 3, -- minimum number of cops required to start the bank truck heist
    cooldown = 60 * 60, -- seconds between bank truck starts (1 hour)
    computerCoords = vec3(-631.02, -230.64, 37.99),
    startLocations = { -- coordinates where the bank truck can spawn
        vec4(-19.76, -672.63, 32.34, 190.58)
    },
    endLocations = { -- coordinates where the bank truck can end its route
        vec4(-1191.47, -338.35, 37.41, 26.33)
    },
    vehicles = {
        `stockade`,
    },
    guard = {
        models = {
            `s_m_m_security_01`,
        },
        amount = {
            min = 3,
            max = 4,
        },
        weapons = {
            `weapon_combatpistol`,
            `weapon_bullpuprifle`,
            `weapon_bullpupassault`,
        },
        armor = {
            min = 50,
            max = 100,
        },
        accuracy = {
            min = 50,
            max = 70,
        },
    },
    loot = { -- script will go over each item and roll chance for each item individually and give the item if the chance is met
        {item = 'money', min = 20000, max = 50000, chance = 50},
        {item = 'security_paper', min = 20, max = 50, chance = 55},
        {item = 'printer_ink', min = 10, max = 30, chance = 65},
        {item = 'counterfeit_chemical', min = 10, max = 20, chance = 70},
    },
    lootAnimDuration = 5000,
    blip = {
        sprite = 161,
        scale = 0.8,
        color = 1,
        shortRange = true,
        playSound = true,
    },
    removeAfterDetonationSeconds = 60 * 10, -- seconds before deleting the bank truck and guards after detonation (10 minutes)
    explosive = {
        item = 'c4',
        placeAnim = {
            dict = 'anim@heists@ornate_bank@thermal_charge_heels',
            name = 'thermal_charge',
            prop = {
                model = `ch_prop_ch_explosive_01a`,
            },
        },
        model = `ch_prop_ch_explosive_01a`,
        offset = {
            pos = vec3(-0.5, 0.0, 0.0),
            rot = vec3(90.0, 0.0, 0.0),
        },
        detonationDelay = 1000 * 10, -- how long to wait before the c4 detonates (10 seconds)
    },
}

Config.UnionDepository = {
    vaultDoor = {
        coords = vec3(-1.73, -686.54, 16.69),
        model = `v_ilev_fin_vaultdoor`,
        openDuration = 800,
        hack = {
            coords = vec3(-4.22, -686.30, 16.13),
            distance = 2.0,
            keycardItem = 'union_depository_keycard',
            anim = {
                dict = 'anim@heists@humane_labs@finale@keycards',
                introAnim = 'ped_b_intro_b',
                passAnim = 'ped_b_pass',
                keycardProp = `tr_prop_tr_acc_pass_01a`,
            },
        },
        c4 = {
            coords = { -- front and back
                vec3(-3.86, -686.57, 16.13),
                vec3(-2.65, -684.60, 16.13),
            },
            item = 'c4',
            model = `ch_prop_ch_explosive_01a`,
            smokeCoords = vec3(-4.42, -689.87, 16.13),
            placeAnim = {
                dict = 'anim@heists@ornate_bank@thermal_charge',
                name = 'thermal_charge',
                prop = {
                    model = `hei_p_m_bag_var22_arm_s`,
                },
            },
        },
    },
    wall = {
        coords = vec3(7.45, -657.36, 16.13),
        rayfireObjects = {
            {coords = vec3(7.25, -656.98, 17.14), name = 'des_finale_tunnel'},
            {coords = vec3(7.25, -656.98, 17.14), name = 'des_finale_vault'},
        },
        vehicleTargetCoords = vec4(8.65, -650.81, 15.64, 164.40),
        explosion = {
            coords = vec3(6.60, -658.55, 15.38),
            ptfx = 'scr_josh3',
            effect = 'scr_josh3_explosion',
        },
        c4 = {
            coords = vec3(6.50, -659.12, 16.13),
            item = 'c4',
            model = `ch_prop_ch_explosive_01a`,
            placeAnim = {
                dict = 'anim@heists@ornate_bank@thermal_charge',
                name = 'thermal_charge',
                prop = {
                    model = `hei_p_m_bag_var22_arm_s`,
                },
            },
        },
    },
    trolleys = {
        {
            coords = vec4(5.06, -680.50, 15.13, 80.0),
            type = 'money', -- 'money' | 'gold_bar'
            requiredAnyDoorIds = {'union_door_right_front', 'union_door_right_1'}, -- at least one of the doors in the list must be unlocked to be able to loot the trolley (to prevent cheating)
        },
        {
            coords = vec4(6.32, -674.99, 15.13, 120.0),
            type = 'money',
            requiredAnyDoorIds = {'union_door_right_2', 'union_door_right_back'},
        },
        {
            coords = vec4(-6.13, -676.20, 16.0, 100.0),
            type = 'gold_bar',
            requiredAnyDoorIds = {'union_door_left_1', 'union_door_left_front'},
        },
        {
            coords = vec4(-3.97, -671.06, 16.0, 60.0),
            type = 'gold_bar',
            requiredAnyDoorIds = {'union_door_left_2', 'union_door_left_back'},
        },
        {
            coords = vec4(-0.65, -660.61, 16.0, 50.0),
            type = 'gold_bar',
            requiredAnyDoorIds = {'union_door_back_left_1', 'union_door_back_left_2'},
        },
        {
            coords = vec4(2.10, -658.43, 15.13, 250.0),
            type = 'money',
            requiredAnyDoorIds = {'union_door_back_left_1', 'union_door_back_left_2'},
        }
    },
    valuables = {
        {
            coords = vec4(11.64, -662.30, 16.1, 340.0),
            type = 'diamond',
            item = 'cutter',
            requiredAnyDoorIds = {'union_door_back_right_1', 'union_door_back_right_2'},
        },
    },
    loot = {
        money = {
            {item = 'money', min = 15000, max = 30000, chance = 100},
        },
        gold_bar = {
            {item = 'gold_bar', min = 10, max = 10, chance = 100},
        },
        diamond = {
            {item = 'diamond', min = 1, max = 1, chance = 100},
        },
    },
    moneyPrinter = {
        coords = vec4(-8.19, -680.49, 15.13, 340.92),
        model = `bkr_prop_printmachine_4rollerp_st`,
        modelWithMoney = `bkr_prop_printmachine_4rollerpress`,
        printingAnimProps = {
            {model = `bkr_prop_printmachine_4puller`, anim = 'bkr_prop_printmachine_4puller'},
            {model = `bkr_prop_prtmachine_moneypage_anim`, anim = 'bkr_prop_prtmachine_moneypage_anim'},
        },
        recipe = { -- items needed for one batch
            {item = 'security_paper', amount = 2},
            {item = 'printer_ink', amount = 1},
            {item = 'counterfeit_chemical', amount = 1},
        },
        moneyPerBatch = 5000, -- how much money is generated per batch
        generationInterval = 10000, -- how long to wait before generating the next batch
        overheatBatchLoseChance = 100, -- chance 0-100 that the batch will be lost if the minigame is failed
        minigame = {
            heatRate = 8.0, -- how fast the heat increases
            coolDownRate = 0.8, -- how fast the heat decreases
            driftSpeed = 2, -- how fast the parameters drift randomly
            greenZoneMin = 45, -- minimum value of the green zone
            greenZoneMax = 55, -- maximum value of the green zone
            maxHeat = 100, -- maximum value of the heat
        },
    },
    elevator = {
        up = {
            coords = vec4(10.43, -672.78, 33.45, 0.0),
            targetCoords = vec4(-0.10, -705.90, 16.13, 339.58), -- coordinates where the elevator will teleport the player to
        },
        down = {
            coords = vec4(-0.10, -705.89, 16.12, 0.0),
            targetCoords = vec4(10.52, -670.85, 33.45, 3.62),
        },
        hackTextCoords = vec3(10.21, -668.58, 33.45),
        doorGroups = {
            {
                id = 'upper_elevator_doors',
                doors = {
                    {
                        id = 'union_elevator_door_1',
                        model = `v_ilev_finelevdoor01`,
                        coords = vec3(8.76, -668.70, 32.45),
                        heading = 4.44,
                        locked = true,
                    },
                    {
                        id = 'union_elevator_door_2',
                        model = `v_ilev_finelevdoor01`,
                        coords = vec3(11.66, -668.47, 32.45),
                        heading = 175.45,
                        locked = true,
                    },
                },
            },
        },
        hack = {
            item = 'encrypted_laptop',
            anim = {
                dict = 'anim@heists@ornate_bank@hack',
                name = 'hack_loop',
                flag = 1,
                prop = {
                    model = `hei_prop_hst_laptop`,
                    bone = 60309,
                    pos = vec3(0.18, 0.03, 0.03),
                    rot = vec3(-180.0, 0.0, -270.0),
                },
            },
        },
    },
    guards = { -- guards will spawn once you hack elevator or when you break the back wall
        models = {
            `s_m_m_security_01`,
        },
        weapons = {
            `weapon_combatpistol`,
            `weapon_bullpuprifle`,
        },
        armor = {
            min = 50,
            max = 100,
        },
        accuracy = {
            min = 50,
            max = 70,
        },
        spawnCoords = {
            vec4(-8.75, -693.31, 16.13, 239.14),
            vec4(-0.69, -690.06, 16.13, 181.30),
            vec4(-4.20, -689.24, 16.13, 190.31),
            vec4(-3.06, -693.00, 16.13, 197.36),
        },
        loot = { -- items that can be found in guard pockets when looted
            {item = 'money', min = 500, max = 2000, chance = 80},
            {item = 'union_depository_keycard', min = 1, max = 1, chance = 25},
        },
    },
    doors = {
        {
            id = 'union_door_right_1',
            model = `v_ilev_fingate`,
            coords = vec3(2.27, -678.55, 16.36),
            anim = vec3(1.07, -679.34, 16.13),
            heading = 250.0,
            locked = true,
        },
        {
            id = 'union_door_right_2',
            model = `v_ilev_fingate`,
            coords = vec3(4.28, -673.02, 16.36),
            anim = vec3(3.12, -673.76, 16.13),
            heading = 250.0,
            locked = true,
        },
        {
            id = 'union_door_right_front',
            model = `v_ilev_fingate`,
            coords = vec3(4.35, -682.93, 16.36),
            anim = vec3(2.63, -682.97, 16.13),
            heading = 340.0,
            locked = true,
        },
        {
            id = 'union_door_right_back',
            model = `v_ilev_fingate`,
            coords = vec3(8.17, -672.44, 16.36),
            anim = vec3(7.30, -671.73, 16.13),
            heading = 160.0,
            locked = true,
        },
        {
            id = 'union_door_left_1',
            model = `v_ilev_fingate`,
            coords = vec3(-2.99, -676.64, 16.36),
            anim = vec3(-2.78, -678.51, 16.13),
            heading = 70.0,
            locked = true,
        },
        {
            id = 'union_door_left_2',
            model = `v_ilev_fingate`,
            coords = vec3(-0.98, -671.11, 16.36),
            anim = vec3(-0.79, -672.92, 16.13),
            heading = 70.0,
            locked = true,
        },
        {
            id = 'union_door_left_front',
            model = `v_ilev_fingate`,
            coords = vec3(-7.40, -678.66, 16.36),
            anim = vec3(-6.60, -679.61, 16.13),
            heading = 340.0,
            locked = true,
        },
        {
            id = 'union_door_left_back',
            model = `v_ilev_fingate`,
            coords = vec3(-3.58, -668.16, 16.36),
            anim = vec3(-1.82, -668.24, 16.13),
            heading = 160.0,
            locked = true,
        },
        {
            id = 'union_door_back_left_1',
            model = `prop_gold_vault_gate_01`,
            coords = vec3(3.02, -660.13, 16.3),
            anim = vec3(3.02, -662.00, 16.13),
            heading = 70.0,
            locked = true,
            requireC4 = true,
        },
        {
            id = 'union_door_back_left_2',
            model = `v_ilev_fingate`,
            coords = vec3(-1.66, -662.13, 16.36),
            anim = vec3(-0.91, -663.23, 16.13),
            heading = 340.0,
            locked = true,
        },
        {
            id = 'union_door_back_right_1',
            model = `prop_gold_vault_gate_01`,
            coords = vec3(7.75, -663.47, 16.36),
            anim = vec3(7.72, -661.72, 16.13),
            heading = 250.0,
            locked = true,
            requireC4 = true,
        },
        {
            id = 'union_door_back_right_2',
            model = `v_ilev_fingate`,
            coords = vec3(10.57, -666.58, 16.36),
            anim = vec3(8.77, -666.77, 16.13),
            heading = 340.0,
            locked = true,
        },
    },
    doorBreaking = {
        welding = {
            item = 'welding_torch',
            prop = `prop_weld_torch`,
            anim = {
                dict = 'amb@world_human_welding@male@base',
                name = 'base',
                flag = 49,
                duration = 15000,
            },
        },
        thermite = {
            item = 'thermite',
            model = `hei_prop_heist_thermite`,
            placeAnim = {
                dict = 'anim@heists@ornate_bank@thermal_charge',
                name = 'thermal_charge',
                prop = {
                    model = `hei_p_m_bag_var22_arm_s`,
                },
            },
            burnDuration = 8000,
            ptfx = {
                asset = 'scr_ornate_heist',
                name = 'scr_heist_ornate_thermal_burn',
            },
        },
        c4 = {
            item = 'c4',
            model = `ch_prop_ch_explosive_01a`,
            placeAnim = {
                dict = 'anim@heists@ornate_bank@thermal_charge',
                name = 'thermal_charge',
                prop = {
                    model = `hei_p_m_bag_var22_arm_s`,
                },
            },
        },
    },
    cooldown = 60 * 60 * 12, -- 12 hours
    resetGrace = 1000 * 60 * 5, -- 5 minutes, how long to wait before resetting the heist if no players are near
    resetRadius = 50.0, -- radius in meters from the vault where the heist will reset if no players are near
    resetPollInterval = 1000 * 60 * 1, -- how often to check if the heist should reset (1 minute)
    minCops = 3, -- minimum number of cops required to start the union depository heist
    alertChance = {
        vaultOpen = 100, -- chance 0-100 when vault is opened
        wallBreach = 100, -- chance 0-100 when back wall is breached
    },
}

Config.Buyers = {
    {
        name = 'Buyer',
        coords = vec4(1103.49, -782.73, 58.26, 173.65),
        ped = 's_m_y_dealer_01',
        moneyType = 'money',
        items = {
            {name = 'gold_bar', price = 1000},
            {name = 'diamond', price = 30000},
        },
    },
}

Config.Shops = {
    {
        name = 'Dealer',
        coords = vec4(1110.82, -785.95, 58.26, 87.75),
        ped = 'ig_g',
        moneyType = 'money',
        items = {
            {name = 'c4', price = 15000, amount = 1},
            {name = 'welding_torch', price = 3500, amount = 1},
            {name = 'thermite', price = 4000, amount = 1},
            {name = 'cutter', price = 2000, amount = 1},
            {name = 'encrypted_laptop', price = 12000, amount = 1},
        },
    },
}

Last updated