Page cover

Accessible files

Here you can find all the files which can be edite to make the asset compatible with your server.​

config.lua
Config = {
    Core = 'automatic',  -- All core settings are in the 'core' folder.
    TextUI = 'brutal_textui', -- false / 'brutal_textui' / 'ox_lib' / 'okokTextUI' / 'ESXTextUI' / 'QBDrawText' // Custom can be add in the cl_utils.lua!!!
    Target = 'oxtarget', -- 'oxtarget' / 'qb-target' | set it to false if you use TextUI.
    BrutalNotify = true, -- Buy here: (4€+VAT) https://store.brutalscripts.com | Or set up your own notify >> cl_utils.lua   
    BrutalGangs = true, -- Buy here: (35€+VAT) https://store.brutalscripts.com | Or set up your own if you're using a different gang script >> sv_utils.lua

    SteamName = true, -- true = Steam name | false = character name

    CopJobs = {'police', 'sheriff', 'fbi'}, -- Cop jobs
    RequiredCopsCount = 0, -- This is how many cops are needed to be in the server to start a robbery

    Cooldown = {global = false, time = 45}, -- The time between robberies | "global": global cooldown (if false, each bank has its own separate cooldown) | "time": in minutes
    MinRobbersCount = 1, -- Minimum number of robbers required to start a robbery (cannot be higher than MaxRobbersCount)
    MaxRobbersCount = 12, -- Maximum number of robbers allowed to participate in a robbery (maximum limit is 12)
    MaxCurrentRobbery = 3, -- Max robberies at same time
    
    RobberyEndCoolDown = 35, -- in minutes | This is the total time a robbery can last from start to automatic reset.
    OverTime = 1, -- in minutes | The "final countdown" duration that robbers see on the UI. | This should always be less than RobberyEndCoolDown.

    Blips = {
        big_alert = {label = 'Bank Robbery', size = 1.0, sprite = 161, color = 1},
        small_alert = {label = 'Bank Robbery', size = 0.5, sprite = 108, color = 1},
        sell_ped = {use = true, label = 'Trader', size = 1.0, sprite = 272, color = 2},
    },

    Marker = {use = true, marker = 20, rgba = {233, 88, 69, 255}, bobUpAndDown = false, rotate = false},

    OutlineSettings = {use = true, rgba = {255, 0, 0, 255}}, -- only usable with target option

    Detonation = {label = "DETONATE", time = 10}, -- only used during loud robbery | "time": in second

    DefaultMiniGames = {
        HotWire = {    
            remainingTime = 30, -- Time limit (in seconds) to complete the minigame.

            controls = {
                Horizontal = {label = "Change horizontal", keys = {174, 175}},
                Vertical = {label = "Change vertical", keys = {172, 173}},
                Exit = {label = "Exit", key = 194},
            },
        },
        FingerPrint = {     
            remainingTime = 200, -- Time limit (in seconds) to complete the minigame.
            remainingHearths = 3,

            controls = {
                Horizontal = {label = "Change horizontal", keys = {174, 175}},
                Vertical = {label = "Change vertical", keys = {172, 173}},
                Confirm = {label = "Confirm", key = 191},
                Exit = {label = "Exit", key = 194},
            },
        },
        SafeCrack = {
            defaultLocks = 3,  -- default number of locks to solve in the safecrack minigame

            controls = {
                Rotate = {label = "Rotate", keys = {189, 190}},
                Check = {label = "Check", key = 191},
                Exit = {label = "Exit", key = 202},
            },
        },
    },

    InvitationKeys = {
        -- controls list:  https://docs.fivem.net/docs/game-references/controls/
        accept = {
            control = 246, -- Y or Z
            label = 'Y'
        },
        decline = {
            control = 249, -- N
            label = 'N'
        }
    },

    LockerChanceforReward = 50, -- in percentages 

    RobberyRequirements = {
        bigbomb = {required = true, remove = true, item = 'bank_bigbomb'},
        thermalbomb = {required = true, remove = true, item = 'bank_thermalbomb'},
        hackingdevice = {required = true, remove = false, item = 'bank_hackingdevice'},
        drill = {required = true, remove = false, item = 'bank_drill'},
        bag = {required = false, item = 'bank_bag'},
    },

    RewardItems = {
        gold = {item = 'bank_gold', count = {10, 20}, sellPrice = 150},
        diamond = {item = 'bank_diamond', count = {10, 20}, sellPrice = 500},
        cash = {count = {1000, 2000}, item = {use = false, name = 'money'}, blackmoney = {use = false, name = 'black_money'}},
    },

    SellItem = {
        Use = true,
        AvailableLimit = 10, -- in minutes
        Locations = {
            {model = 'a_m_m_socenlat_01', coords = vector4(1123.3041, -978.0587, 46.5031, 12.8621)},
            {model = 'csb_grove_str_dlr', coords = vector4(1010.4541, -2289.2986, 30.5095, 180.3007)},
            {model = 'a_m_y_soucent_02', coords = vector4(67.3545, -2569.6697, 6.0046, 93.3623)},
            {model = 'a_m_y_stbla_02', coords = vector4(473.9825, -1775.2993, 28.6939, 269.0656)},
            {model = 's_m_y_dealer_01', coords = vector4(-1004.8494, -1003.2255, 2.1503, 38.1959)},
            {model = 'u_m_m_aldinapoli', coords = vector4(-570.2860, 311.1976, 84.4889, 359.8380)},
            {model = 'a_m_y_soucent_02', coords = vector4(331.2457, 362.3709, 106.6578, 351.1996)},
            {model = 's_m_y_dealer_01', coords = vector4(713.9666, -716.9224, 26.1299, 186.5579)},
            {model = 'a_m_m_socenlat_01', coords = vector4(854.5257, -2112.8164, 31.5756, 185.1275)},
            {model = 'u_m_m_aldinapoli', coords = vector4(-683.3369, -876.2120, 24.4991, 186.2827)},
            {model = 'a_m_y_stbla_02', coords = vector4(-3169.2219, 1093.5312, 20.8580, 76.0917)},
            {model = 's_m_y_dealer_01', coords = vector4(-1102.1595, 2721.7717, 18.8004, 314.5838)},
            {model = 'a_m_y_soucent_02', coords = vector4(1436.1757, 3639.2427, 34.9466, 25.9137)},
        },
    },

    PoliceDoorOpen = {
        use = true,           
        opentime = 1, -- in minutes
        command = 'bank_door', 
        control = '',  -- Controls list:  https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
        suggestion = 'Opens the bank door if you are a cop'         
    },

    Banks = {
        [1] = {
            Tablet = {coords = vector3(144.509, -1042.416, 29.78), rotate = vector3(0.0, 90.0, -110.0), offset = {x = -0.3, y = 0.1, z = -0.4}},
            HackableComputers = {
                [1] = {model = 'prop_keyboard_01a', coords = vector3(146.7914, -1041.0859, 29.3679)},
                [2] = {model = 'prop_keyboard_01a', coords = vector3(148.1644, -1041.6041, 29.3680)},
                [3] = {model = 'prop_keyboard_01a', coords = vector3(149.6194, -1042.1493, 29.3680)},
                [4] = {model = 'prop_keyboard_01a', coords = vector3(150.9377, -1042.6304, 29.3680)},
            },
            SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(144.379, -1043.3, 29.3679, 250.0)},
            SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(145.151428, -1045.814956, 29.161142, 159.846176)},
            KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(146.9452, -1046.1952, 29.3681)},
            SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(147.720, -1045.3, 29.3765, 250.0)},
            SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(149.134, -1047.2, 29.3463, 159.0), offset = {x = 1.82, y = -0.95, z = -0.04}},
            Stack = {
                -- Chance defines the probability of getting each item in the stack.
                -- Example: {gold = 3, cash = 7} means:
                -- Gold: 30% chance
                -- Cash: 70% chance

                chance = {gold = 3, cash = 7}, coords = vector4(148.753, -1049.2, 29.2000, 160.0)
            },
            Trollys = {
                -- Chance defines the probability of finding each item in the trolley.
                -- The numbers are relative weights. For example:
                -- {diamond = 1, gold = 3, cash = 6} means:
                -- Diamond: 10% chance
                -- Gold:    30% chance
                -- Cash:    60% chance

                {chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(149.926, -1045.0, 28.3463, 160.0)},
                -- you can add more...
            },
            LockBoxs = {
                {coords = vector4(146.7838592529297,-1050.369140625,28.3430004119873,159.84617614746095), model = 'ch_prop_ch_sec_cabinet_01d'},
                {coords = vector4(146.76101684570313, -1048.133056640625, 28.34294509887695, 69.84616088867188), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(150.6094512939453, -1050.397216796875, 28.34300231933593, 249.84620666503907), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(148.66282653808595, -1051.0587158203126, 28.3429946899414, 159.84617614746095), model = 'ch_prop_ch_sec_cabinet_01g'},
            }
        },
        [2] = {
            Tablet = {coords = vector3(308.846, -280.756, 54.6), rotate = vector3(0.0, 90.0, -110.0), offset = {x = -0.3, y = 0.1, z = -0.4}},
            HackableComputers = {
                [1] = {model = 'prop_keyboard_01a', coords = vector3(311.1392, -279.4526, 54.1647)},
                [2] = {model = 'prop_keyboard_01a', coords = vector3(312.5720, -279.9933, 54.1647)},
                [3] = {model = 'prop_keyboard_01a', coords = vector3(313.9478, -280.5051, 54.1647)},
                [4] = {model = 'prop_keyboard_01a', coords = vector3(315.2738, -280.9801, 54.1647)},
            },
            SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(308.803, -282.03, 54.1646, 250.0)},
            SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(309.483337, -284.182235, 53.957855, 159.865952)},
            KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(311.3861, -284.5151, 54.1648)},
            SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(312.182, -283.67, 54.1730, 250.0)},
            SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(314.122, -285.52, 54.1429, 159.0), offset = {x = 1.82, y = -0.95, z = -0.04}}, 
            Stack = {
                -- Chance defines the probability of getting each item in the stack.
                -- Example: {gold = 3, cash = 7} means:
                -- Gold: 30% chance
                -- Cash: 70% chance

                chance = {gold = 3, cash = 7}, coords = vector4(313.156, -287.61, 54.0, 160.0)
            }, 
            Trollys = {
                -- Chance defines the probability of finding each item in the trolley.
                -- The numbers are relative weights. For example:
                -- {diamond = 1, gold = 3, cash = 6} means:
                -- Diamond: 10% chance
                -- Gold:    30% chance
                -- Cash:    60% chance

                {chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(314.211, -283.37, 53.1430, 160.0)},
                -- you can add more...
            },
            LockBoxs = {
                {coords = vector4(311.117340, -288.735840, 53.139713, 159.865952), model = 'ch_prop_ch_sec_cabinet_01d'},
                {coords = vector4(311.093689, -286.499786, 53.139656, 69.865936), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(314.942932, -288.762604, 53.139717, 249.865997), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(312.996521, -289.424774, 53.139709, 159.865952), model = 'ch_prop_ch_sec_cabinet_01g'},
            }
        },
        [3] = {
            Tablet = {coords = vector3(-356.298, -51.717, 49.425), rotate = vector3(0.0, 90.0, -110.0), offset = {x = -0.3, y = 0.1, z = -0.4}},
            HackableComputers = {
                [1] = {model = 'prop_keyboard_01a', coords = vector3(-354.0253, -50.3500, 49.0364)},
                [2] = {model = 'prop_keyboard_01a', coords = vector3(-352.6164, -50.8082, 49.0364)},
                [3] = {model = 'prop_keyboard_01a', coords = vector3(-351.1423, -51.3346, 49.0365)},
                [4] = {model = 'prop_keyboard_01a', coords = vector3(-349.8858, -51.7900, 49.0365)},
            },
            SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(-356.48, -52.703, 49.0364, 250.0)},
            SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(-355.585297, -55.074245, 48.829643, 160.859818)},
            KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(-353.6870, -55.4339, 49.0366)},
            SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(-353.02, -54.810, 49.0450, 250.0)},
            SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(-351.66, -56.329,  49.0148, 159.0), offset = {x = 1.82, y = -0.95, z = -0.04}},
            Stack = {
                -- Chance defines the probability of getting each item in the stack.
                -- Example: {gold = 3, cash = 7} means:
                -- Gold: 30% chance
                -- Cash: 70% chance

                chance = {gold = 3, cash = 7}, coords = vector4(-351.85, -58.389, 48.8548, 160.0)
            }, 
            Trollys = {
                -- Chance defines the probability of finding each item in the trolley.
                -- The numbers are relative weights. For example:
                -- {diamond = 1, gold = 3, cash = 6} means:
                -- Diamond: 10% chance
                -- Gold:    30% chance
                -- Cash:    60% chance

                {chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(-350.87, -54.180, 48.0148, 160.0)},
                -- you can add more...
            },
            LockBoxs = {
                {coords = vector4(-353.872803, -59.598843, 48.011501, 160.859818), model = 'ch_prop_ch_sec_cabinet_01d'},
                {coords = vector4(-353.935211, -57.363514, 48.011444, 70.859795), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(-350.047333, -59.559238, 48.011505, 250.859848), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(-351.981934, -60.255074, 48.011497, 160.859818), model = 'ch_prop_ch_sec_cabinet_01g'},
            }
        },
        [4] = {
            Tablet = {coords = vector3(-1215.073, -335.835, 38.217), rotate = vector3(0.0, 90.0, 297.0), offset = {x = -0.3, y = -0.15, z = -0.5}},
            HackableComputers = {
                [1] = {model = 'prop_keyboard_01a', coords = vector3(-1214.4938, -333.2347, 37.7809)},
                [2] = {model = 'prop_keyboard_01a', coords = vector3(-1213.1909, -332.5580, 37.7809)},
                [3] = {model = 'prop_keyboard_01a', coords = vector3(-1211.8444, -331.9097, 37.7809)},
                [4] = {model = 'prop_keyboard_01a', coords = vector3(-1210.5729, -331.2396, 37.7809)},
            },
            SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(-1214.3, -336.60, 37.7809, 297.0)},
            SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(-1212.148560, -337.647567, 37.574100, 206.863739)},
            KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(-1210.5978, -336.5136, 37.7811)},
            SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(-1210.6, -335.50, 37.7895, 297.0)},
            SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(-1208.2, -335.60, 37.7592, 207.0), offset = {x = 1.0, y = -0.85, z = -0.04}}, 
            Stack = {
                -- Chance defines the probability of getting each item in the stack.
                -- Example: {gold = 3, cash = 7} means:
                -- Gold: 30% chance
                -- Cash: 70% chance

                chance = {gold = 3, cash = 7}, coords = vector4(-1207.20, -337.22, 37.6092, 207.0)
            }, 
            Trollys = {
                -- Chance defines the probability of finding each item in the trolley.
                -- The numbers are relative weights. For example:
                -- {diamond = 1, gold = 3, cash = 6} means:
                -- Diamond: 10% chance
                -- Gold:    30% chance
                -- Cash:    60% chance

                {chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(-1209.5, -333.62, 36.7592, 207.0)},
                -- you can add more...
            },
            LockBoxs = {
                {coords = vector4(-1207.714966, -339.563049, 36.755959, 206.863739), model = 'ch_prop_ch_sec_cabinet_01d'},
                {coords = vector4(-1209.366455, -338.055237, 36.755905, 116.863708), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(-1205.086304, -336.783539, 36.755959, 296.863770), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(-1205.929565, -338.658600, 36.755955, 206.863739), model = 'ch_prop_ch_sec_cabinet_01g'},
            }
        },
        [5] = {
            Tablet = {coords = vector3(1179.516, 2710.263, 38.500), rotate = vector3(0.0, 90.0, 90.0), offset = {x = 0.3, y = 0.03, z = -0.4}},
            HackableComputers = {
                [1] = {model = 'prop_keyboard_01a', coords = vector3(1177.8151, 2708.2319, 38.0879)},
                [2] = {model = 'prop_keyboard_01a', coords = vector3(1176.3805, 2708.2031, 38.0879)},
                [3] = {model = 'prop_keyboard_01a', coords = vector3(1174.8105, 2708.2390, 38.0879)},
                [4] = {model = 'prop_keyboard_01a', coords = vector3(1173.4064, 2708.2036, 38.0879)},
            },
            SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(1179.28, 2711.31, 38.0878, 90.0)},
            SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(1177.736084, 2713.213271, 37.881099, 360.000000)},
            KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(1175.8223, 2712.9443, 38.0881)},
            SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(1175.63, 2712.23, 38.0880, 90.0)},
            SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(1173.48, 2713.31, 38.0662, 0.0), offset = {x = 1.45, y = 1.0, z = -0.04}}, 
            Stack = {
                -- Chance defines the probability of getting each item in the stack.
                -- Example: {gold = 3, cash = 7} means:
                -- Gold: 30% chance
                -- Cash: 70% chance

                chance = {gold = 3, cash = 7}, coords = vector4(1173.17, 2715.1, 37.91363, 0.0)
            },
            Trollys = {
                -- Chance defines the probability of finding each item in the trolley.
                -- The numbers are relative weights. For example:
                -- {diamond = 1, gold = 3, cash = 6} means:
                -- Diamond: 10% chance
                -- Gold:    30% chance
                -- Cash:    60% chance

                {chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(1173.63, 2710.79, 37.0662, 0.0)},
                -- you can add more...
            },
            LockBoxs = {
                {coords = vector4(1174.639648, 2716.927002, 37.062958, 0.000000), model = 'ch_prop_ch_sec_cabinet_01d'},
                {coords = vector4(1175.431519, 2714.835693, 37.062904, 270.000000), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(1171.038696, 2715.635498, 37.062958, 90.000015), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(1172.638184, 2716.927002, 37.062954, 0.000000), model = 'ch_prop_ch_sec_cabinet_01g'},
            }
        },
        [6] = {
            Tablet = {coords = vector3(-2959.334, 478.325, 16.1), rotate = vector3(0.0, 90.0, -2.0), offset = {x = 0.0, y = -0.3, z = -0.4}},
            HackableComputers = {
                [1] = {model = 'prop_keyboard_01a', coords = vector3(-2961.2690, 480.1206, 15.6969)},
                [2] = {model = 'prop_keyboard_01a', coords = vector3(-2961.2136, 481.5522, 15.6970)},
                [3] = {model = 'prop_keyboard_01a', coords = vector3(-2961.1602, 483.0985, 15.6970)},
                [4] = {model = 'prop_keyboard_01a', coords = vector3(-2961.1035, 484.5002, 15.6970)},
            },
            SecurityDoor = {model = 'k4mb1_genbank_door2', coords = vector4(-2958.18, 477.94, 15.7, -2.0)},
            SmallSafe = {model = 'ch_prop_ch_arcade_safe_door', coords = vector4(-2956.290, 479.976, 15.489, 267.542053)},
            KeyPad = {model = 'k4mb1_genbank_keypad', coords = vector3(-2956.4929, 481.8984, 15.6971)},
            SafeDoor = {model = 'k4mb1_genbank_framedoor', coords = vector4(-2956.66, 481.92, 15.7, -2.0)},
            SlattedDoor = {model = 'v_ilev_gb_vaubar', coords = vector4(-2956.77, 484.27, 15.7, -92.0), offset = {x = 0.45, y = -0.04, z = -0.04}}, 
            Stack = {
                -- Chance defines the probability of getting each item in the stack.
                -- Example: {gold = 3, cash = 7} means:
                -- Gold: 30% chance
                -- Cash: 70% chance

                chance = {gold = 3, cash = 7}, coords = vector4(-2954.16, 484.5, 15.52, -90.0)
            }, 
            Trollys = {
                -- Chance defines the probability of finding each item in the trolley.
                -- The numbers are relative weights. For example:
                -- {diamond = 1, gold = 3, cash = 6} means:
                -- Diamond: 10% chance
                -- Gold:    30% chance
                -- Cash:    60% chance

                {chance = {diamond = 1, gold = 3, cash = 6}, coords = vector4(-2958.5, 484.24, 14.7, -90.0)},
                -- you can add more...
            },
            LockBoxs = {
                {coords = vector4(-2952.439209, 482.911987, 14.672007, 267.542053), model = 'ch_prop_ch_sec_cabinet_01d'},
                {coords = vector4(-2954.562500, 482.210510, 14.671951, 177.542023), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(-2953.575439, 486.565094, 14.672009, 357.542053), model = 'ch_prop_ch_sec_cabinet_01a'},
                {coords = vector4(-2952.353516, 484.911652, 14.672001, 267.542053), model = 'ch_prop_ch_sec_cabinet_01g'},
            }
        },
    },

    -----------------------------------------------------------
    -----------------------| TRANSLATE |-----------------------
    -----------------------------------------------------------

    NUILanguage = "en", -- "en", "es", "fr", "de", "pt", "it", "pl", "nl", "ru", "tr", "hu", "ro", "cs", "sv", "ar"

    MoneyForm = '$', -- Money form

    Locales = {
        OverTimeTitle = "Robbery End",
        OverTimeDescription = "Leave the robbery area quickly.",
        SellTimerTitle = "Sell Loot",
        SellTimerDescription = "Deliver your loot to the buyer before it's too late.",
        Minutes = "minutes.",
        SoldItems = "Sold Items"
    },

    Texts = {
        [1] = {'[E] - Door Kick', 38, 'Door Kick', 'fa-solid fa-door-closed'},
        [2] = {'[E] - Computer Hack', 38, 'Computer Hack', 'fa-solid fa-keyboard'},
        [3] = {'[E] - Door Hack', 38, 'Door Hack', 'fa-solid fa-vault'},
        [4] = {'[E] - Door Breach', 38, 'Door Breach', 'fa-solid fa-bomb'},
        [5] = {'[E] - Safe Crack', 38, 'Safe Crack', 'fa-solid fa-vault'},
        [6] = {'[E] - Grab Trolly', 38, 'Grab Trolly', 'fa-solid fa-hand'},
        [7] = {'[E] - Plant Thermite', 38, 'Plant Thermite', 'fa-solid fa-bomb'},
        [8] = {'[E] - Grab Stack', 38, 'Grab Stack', 'fa-solid fa-hand'},
        [9] = {'[E] - Drill The Boxes', 38, 'Drill The Boxes', 'fa-solid fa-vault'},
        [10] = {'[E] - Open Menu', 38, 'Open Menu', 'fa-solid fa-tablet'},
        [11] = {'[E] - Sell the items', 38, 'Sell the items', 'fa-solid fa-user-secret'},
    },
    
    -- Notify function EDITABLE >> cl_utils.lua
    Notify = { 
        [1] = {"Bank Robbery", "The hack was successful.", 5000, "success"},
        [2] = {"Bank Robbery", "The hack failed.", 5000, "error"},
        [3] = {"Bank Robbery", "Put the gun away!", 5000, 'error'},
        [4] = {"Bank Robbery", "You don't have the required item:", 5000, 'error'},
        [5] = {"Bank Robbery", "You got:", 5000, 'success'},
        [6] = {"Bank Robbery", "Not enough cops in the City!", 5000, 'error'},
        [7] = {"Bank Robbery", "This player is already in the list.", 5000, 'error'},
        [8] = {"Bank Robbery", "Leave the robbery area! The door will close soon.", 8000, 'info'},
        [9] = {"Bank Robbery", "There are not enough robbers to start.", 5000, 'error'},
        [10] = {"Bank Robbery", "One or more robbers you added haven't confirmed yet.", 5000, 'error'},
        [11] = {"Bank Robbery", "A robbery is currently taking place here. Please check back later.", 5000, 'error'},
        [12] = {"Bank Robbery", "There are already the maximum number of robberies in progress. Try again later.", 5000, 'error'},
        [13] = {"Bank Robbery", "Player is already in another robbery!", 5000, 'error'},
        [14] = {"Bank Robbery", "You can't invite more players!", 5000, 'error'},
        [15] = {"Bank Robbery", "The robbery time is over!", 5000, 'error'},
        [16] = {"Bank Robbery", "You are already in a robbery! Finish it before starting another.", 5000, 'error'},
        [17] = {"Bank Robbery", "Bank already robbed. Available again at:", 5000, 'error'},
        [18] = {"Bank Robbery", "The robbery is nearing its end! You can no longer loot items.", 5000, 'error'},
        [19] = {"Bank Robbery", "You can not do this in a vehicle!", 5000, 'error'},
        [20] = {"Bank Robbery", "Sell the items in the designated place!", 10000, 'info'},
        [21] = {"Bank Robbery", "Time's up! The Trader has left!", 5000, 'error'},
        [22] = {"Bank Robbery", "You sold:", 5000, 'success'},
        [23] = {"Bank Robbery", "You have nothing useful!", 5000, 'error'},
        [24] = {"Bank Robbery", "You have accepted the invitation!", 5000, "success"},
        [25] = {"Bank Robbery", "You have declined the invitation!", 5000, "error"},
        [26] = {"Bank Robbery", "There are too many robbers.", 5000, 'error'},
        [27] = {"Bank Robbery", "The robbery has started!", 5000, 'success'},
        [28] = {"Bank Robbery", "You are too far from the bank door.", 5000, 'error'},
        [29] = {"Bank Robbery", "Only police officers can use this.", 5000, 'error'},
        [30] = {"Bank Robbery", "Bank door has opened!", 5000, 'info'},
        [31] = {"Bank Robbery", "Bank door has closed!", 5000, 'info'},
        [32] = {"Bank Robbery", "Bank door is already open!", 5000, 'error'},
        [33] = {"Bank Robbery", "The menu is already being used by someone else.", 5000, 'error'},
    },

    Webhooks = {
        DateFormat = '%d/%m/%Y - %X',

        Locale = {
            ['robberyStarted'] = '⌛ Robbery started...',
            ['robberyFinished'] = '✅ Robbery finished.',
            ['robberySold'] = '💰 Sold loot.',

            ['HasStarted'] = 'started the robbery!',
            ['HasFinished'] = 'finished the robbery!',
            ['HasSoldLoot'] = 'has sold all loot items.',

            ['Identifier'] = 'Identifier',

            ['Time'] = 'Time ⏲️'
        },

        -- To change a webhook color you need to set the decimal value of a color, you can use this website to do that - https://www.mathsisfun.com/hexadecimal-decimal-colors.html
        Colors = {
            ['robberyStarted'] = 16753920,  
            ['robberyFinished'] = 3145631,
            ['robberySold'] = 3145631,  
        }
    },
}
client-utils.lua
ESX = Core
QBCore = Core

-- Buy here: (4€+VAT) https://store.brutalscripts.com
function notification(title, text, time, type)
    if Config.BrutalNotify then
        exports['brutal_notify']:SendAlert(title, text, time, type)
    else
        -- Put here your own notify and set the Config.BrutalNotify to false

        -- Default ESX Notify:
        --TriggerEvent('esx:showNotification', text)

        -- Default QB Notify:
        --TriggerEvent('QBCore:Notify', text, 'info', 5000)

        -- OKOK Notify:
        -- exports['okokNotify']:Alert('BANK ROBBERY', text, time, type, false)

    end
end

function TextUIFunction(type, text)
    if type == 'open' then
        if Config.TextUI:lower() == 'ox_lib' then
            lib.showTextUI(text)
        elseif Config.TextUI:lower() == 'okoktextui' then
            exports['okokTextUI']:Open(text, 'darkblue', 'right')
        elseif Config.TextUI:lower() == 'esxtextui' then
            ESX.TextUI(text)
        elseif Config.TextUI:lower() == 'qbdrawtext' then
            exports['qb-core']:DrawText(text,'left')
        elseif Config.TextUI:lower() == 'brutal_textui' then
            exports['brutal_textui']:Open(text, "blue")
        end
    elseif type == 'hide' then
        if Config.TextUI:lower() == 'ox_lib' then
            lib.hideTextUI()
        elseif Config.TextUI:lower() == 'okoktextui' then
            exports['okokTextUI']:Close()
        elseif Config.TextUI:lower() == 'esxtextui' then
            ESX.HideUI()
        elseif Config.TextUI:lower() == 'qbdrawtext' then
            exports['qb-core']:HideText()
        elseif Config.TextUI:lower() == 'brutal_textui' then
            exports['brutal_textui']:Close()
        end
    end
end

function NoCarryWeapon()
    if GetSelectedPedWeapon(PlayerPedId()) == GetHashKey('WEAPON_UNARMED') then
        return true
    else
        SendNotify(3)
        return false
    end
end

function PlayerDied()
    if GetResourceState("brutal_ambulancejob") == "started" then
        return exports.brutal_ambulancejob:IsDead()
    elseif GetResourceState("wasabi_ambulance") == "started" then
        return exports.wasabi_ambulance:isPlayerDead()
    else
        if IsEntityDead(PlayerPedId()) then
            return true
        else
            return false
        end
    end
end

RegisterNetEvent('brutal_bank_robbery:client:PoliceAlert')
AddEventHandler('brutal_bank_robbery:client:PoliceAlert', function(type, index, coords)
    if type == 'create' then
        if GetResourceState("brutal_policejob") == "started" then
            local streetLabel = GetStreetNameFromHashKey(GetStreetNameAtCoord(coords.x, coords.y, coords.z))
            TriggerServerEvent('brutal_policejob:server:citizencall', 'create', 'Bank Robbery in progress', {coords.x, coords.y, coords.z}, streetLabel)
        end

        notification('Bank Robbery', 'A robbery is in progress at Bank #'..index..'. Location marked on your map!', 10000, 'info')

        local BigAlert = AddBlipForCoord(coords.x, coords.y, coords.z)
        SetBlipSprite(BigAlert, Config.Blips.big_alert.sprite)
        SetBlipScale(BigAlert, Config.Blips.big_alert.size)
        SetBlipColour(BigAlert, Config.Blips.big_alert.color)

        local SmallAlert = AddBlipForCoord(coords.x, coords.y, coords.z)
        SetBlipSprite(SmallAlert, Config.Blips.small_alert.sprite)
        SetBlipScale(SmallAlert, Config.Blips.small_alert.size)
        SetBlipColour(SmallAlert, Config.Blips.small_alert.color)
        BeginTextCommandSetBlipName('STRING')
        AddTextComponentSubstringPlayerName(Config.Blips.small_alert.label..' #'..index)
        EndTextCommandSetBlipName(SmallAlert)

        AlertBlips[index] = {
            big = BigAlert,
            small = SmallAlert
        }
    else    
        if AlertBlips[index] then
            if AlertBlips[index].big then
                RemoveBlip(AlertBlips[index].big)
            end

            if AlertBlips[index].small then
                RemoveBlip(AlertBlips[index].small)
            end

            AlertBlips[index] = nil
        end
    end    
end)

function DisableMinimap()
    DisplayRadar(false)
    -- Here you can add a trigger to hide your HUD system
end

function EnableMinimap()
    DisplayRadar(true)
    -- Here you can add a trigger to enable your HUD system
end
server-utils.lua
local YourWebhook = 'WEBHOOK-HERE'  -- help: https://docs.brutalscripts.com/site/others/discord-webhook

function GetWebhook()
    return YourWebhook
end

RegisterServerEvent('brutal_bank_robbery:server:PoliceAlert')
AddEventHandler('brutal_bank_robbery:server:PoliceAlert', function(type, index, coords)
    local Players = GetPlayersFunction()
	for i = 1, #Players do
        for ii=1, #Config.CopJobs do
            if GetPlayerJob(Players[i]) == Config.CopJobs[ii] then
                TriggerClientEvent('brutal_bank_robbery:client:PoliceAlert', Players[i], type, index, coords)
            end
        end
	end
end)

function GiveGangRewards(source, job)
    if Config.BrutalGangs and GetResourceState("brutal_gangs") == "started" then 
        local gangname = exports["brutal_gangs"]:GetPlayerGangName(source)

        if gangname then
            exports['brutal_gangs']:AddGangReputation(gangname, 5000)
            exports['brutal_gangs']:AddGangMoney(gangname, 5000)
        end
    end    
end
client-core.lua
Core = nil

if GetResourceState("es_extended") == "started" then
    local _esx_ = 'new' -- 'new' / 'old'

    if _esx_ then
        Core = exports['es_extended']:getSharedObject()
    else
        while Core == nil do
            TriggerEvent('esx:getSharedObject', function(obj) Core = obj end)
            Citizen.Wait(0)
        end
    end

    LoadedEvent = 'esx:playerLoaded'
    TSCB = Core.TriggerServerCallback

    function GetPlayerJobDatas()
        return Core.GetPlayerData().job
    end

    function GetPlayersFunction()
        return Core.Game.GetPlayers()
    end

    function GetVehiclePropertiesFunction(vehicle)
        return Core.Game.GetVehicleProperties(vehicle)
    end

    function SetVehiclePropertiesFunction(vehicle, properties)
        return Core.Game.SetVehicleProperties(vehicle, properties)
    end

    function GetClosestVehicleFunction(coords, modelFilter)
        return Core.Game.GetClosestVehicle(coords, modelFilter)
    end

elseif GetResourceState("qb-core") == "started" or GetResourceState("qbx_core") == "started" then
    Core = exports['qb-core']:GetCoreObject()

    LoadedEvent = 'QBCore:Client:OnPlayerLoaded'
    TSCB = Core.Functions.TriggerCallback

    function GetPlayerJobDatas()
        return Core.Functions.GetPlayerData().job
    end

    function GetPlayersFunction()
        return Core.Functions.GetPlayers()
    end

    function GetVehiclePropertiesFunction(vehicle)
        return Core.Functions.GetVehicleProperties(vehicle)
    end

    function SetVehiclePropertiesFunction(vehicle, properties)
        return Core.Functions.SetVehicleProperties(vehicle, properties)
    end

    function GetClosestVehicleFunction(coords, modelFilter)
        return Core.Functions.GetClosestVehicle(coords, modelFilter)
    end

end
server-core.lua
Core = nil

if GetResourceState("es_extended") == "started" then
    local _esx_ = 'new' -- 'new' / 'old'
    
    if _esx_ == 'new' then
        Core = exports['es_extended']:getSharedObject()
    else
        Core = nil
        TriggerEvent('esx:getSharedObject', function(obj) Core = obj end)
        while Core == nil do
            Citizen.Wait(0)
        end
    end

    RESCB = Core.RegisterServerCallback
    GETPFI = Core.GetPlayerFromId
    RUI = Core.RegisterUsableItem

    function GetIdentifier(source)
        local xPlayer = GETPFI(source)
        while xPlayer == nil do
            Citizen.Wait(1000)
            xPlayer = GETPFI(source) 
        end
        return xPlayer.identifier
    end

    function GetPlayerByIdentifier(identifier)
        return Core.GetPlayerFromIdentifier(identifier)
    end

    function AddMoneyFunction(source, amount, type)
        local xPlayer = GETPFI(source)
        if type ~= nil then
            xPlayer.addAccountMoney(type, amount)
        else
            xPlayer.addAccountMoney('money', amount)    
        end
    end

    function GetItemCount(source, item)
        local xPlayer = GETPFI(source)

        if _esx_ == 'new' then
            if xPlayer.getInventoryItem(item) == nil then
                print("^1PROBLEM!^7 The ^3" ..item.. "^7 item is not created.")
                return 0
            end

            return xPlayer.getInventoryItem(item).count
        else
            if string.sub(item, 0, 6):lower() == 'weapon' then
                local loadoutNum, weapon = xPlayer.getWeapon(item:upper())

                if weapon then
                    return true
                else
                    return false
                end
            else
                return xPlayer.getInventoryItem(item).count
            end
        end
    end
    
    function RemoveItem(source, item, amount)
        local xPlayer = GETPFI(source)
        if _esx_ == 'new' then
            xPlayer.removeInventoryItem(item, amount)
        else
            if string.sub(item, 0, 6):lower() == 'weapon' then
                xPlayer.removeWeapon(item)
            else
                xPlayer.removeInventoryItem(item, amount)
            end
        end
    end

    function AddItem(source, item, count, info)
        local xPlayer = GETPFI(source)
        if _esx_ == 'new' then
            xPlayer.addInventoryItem(item, count, info)
        else
            if string.sub(item, 0, 6):lower() == 'weapon' then
                xPlayer.addWeapon(item, 90)
            else
                xPlayer.addInventoryItem(item, count)
            end
        end
    end

    function GetPlayerNameFunction(source)
        local name
        if Config.SteamName then
            name = GetPlayerName(source) or 'No Data'
        else
            local xPlayer = GETPFI(source)
            name = xPlayer.getName() or 'No Data'
        end
        return name
    end

    function GetPlayerJob(source)
        local xPlayer = GETPFI(source)
        if xPlayer ~= nil then
            PlayerJob = xPlayer.job.name
        else
            PlayerJob = ''
        end
        return PlayerJob
    end

    function GetPlayersFunction()
        return Core.GetPlayers()
    end

    function GetItemLabel(itemname)
        return Core.GetItemLabel(itemname)
    end

elseif GetResourceState("qb-core") == "started" or GetResourceState("qbx_core") == "started" then

    Core = exports['qb-core']:GetCoreObject()
    
    RESCB = Core.Functions.CreateCallback
    GETPFI = Core.Functions.GetPlayer
    RUI = Core.Functions.CreateUseableItem

    function GetIdentifier(source)
        local xPlayer = GETPFI(source)
        while xPlayer == nil do
            Citizen.Wait(1000)
            xPlayer = GETPFI(source) 
        end
        return xPlayer.PlayerData.citizenid
    end

    function GetPlayerByIdentifier(identifier)
        return Core.Functions.GetPlayerByCitizenId(identifier)
    end

    function AddMoneyFunction(source, amount, type)
        local xPlayer = GETPFI(source)
        if type ~= nil then
            xPlayer.Functions.AddMoney(type, amount)
        else
            xPlayer.Functions.AddMoney('cash', amount)   
        end
    end

    function GetItemCount(source, item)
        local xPlayer = GETPFI(source)
        local items = xPlayer.Functions.GetItemByName(item)
        local item_count = 0
        if items ~= nil then
            item_count = items.amount
        else
            item_count = 0
        end
        return item_count
    end

    function RemoveItem(source, item, amount)
        local xPlayer = GETPFI(source)
        xPlayer.Functions.RemoveItem(item, amount)
    end

    function AddItem(source, item, count, info)
        local xPlayer = GETPFI(source)
        xPlayer.Functions.AddItem(item, count, nil, info)
    end

    function GetPlayerNameFunction(source)
        local name
        if Config.SteamName then
            name = GetPlayerName(source)
        else
            local xPlayer = GETPFI(source)
            name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname
        end
        return name
    end

    function GetPlayerJob(source)
        local xPlayer = GETPFI(source)
        return xPlayer.PlayerData.job.name
    end

    function GetPlayerGang(source)
        local xPlayer = GETPFI(source)
        return xPlayer.PlayerData.gang.name
    end

    function GetPlayersFunction()
        return Core.Functions.GetPlayers()
    end

    function GetItemLabel(itemname)
        local item = Core.Shared.Items[itemname]
        if item then
            return item.label
        else
            print("^1PROBLEM!^7 The ^3" ..item.. "^7 item is not created.")
        end
    end
end

Last updated

Was this helpful?