Page cover image

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 = 'ESX',  -- 'ESX' / 'QBCORE' | Other core setting on the 'core' folder.
    Billing = false, -- 'esx_billing' / 'okokBilling' / 'jaksam_billing' / 'codem_billing' / 'quasar_billing' | false = immediate deduction from the player's bank account
    TextUI = 'ox_lib', -- 'ox_lib' / 'okokTextUI' / 'ESXTextUI' / 'QBDrawText' // Custom can be add in the cl_utils.lua!!!
    ProgressBar = '', -- 'progressBars' / 'pogressBar' / 'mythic_progbar' // Custom can be add in the cl_utils.lua!!!
    Inventory = 'ox_inventory', -- 'ox_inventory' / 'qb_inventory' / 'quasar_inventory' / 'chezza_inventory' / 'codem_inventory' /'core_inventory' // Custom can be add in the cl_utils.lua!!!
    Metric = 'kmh', -- 'kmh' / 'mph'
    BrutalNotify = true, -- Buy here: (4€+VAT) https://store.brutalscripts.com | Or set up your own notify >> cl_utils.lua
    SteamName = false, -- true = Steam name | false = character name
    DateFormat = '%d/%m/%Y', -- Date format
    CustomOutfitMenu = false, -- If it's true, it will open a custom outfit menu, what you can edit in the cl_utils.lua line 103.

    PoliceStations = {
        
        ['Police Department'] = {
            Job = 'police', -- Job name
            MenuColors = {'rgb(15, 100, 210)', 'rgb(9, 43, 88)'}, -- Job panel color

            Blip = {color = 38, sprite = 60, size = 1.0}, -- Job blip
            Marker = {use = true, marker = 20, rgb = {15, 100, 210}, bobUpAndDown = true, rotate = false},
            
            Duty = vector3(441.0716, -981.8419, 30.6896), -- Duty ON / OFF coords
            DutyBlips = true, -- With this the cops can see the other cops in the map.

            Cloakrooms = {
                vector3(461.5562, -999.0427, 30.6896),
                -- You can add more...
            },

            Armorys = {
                vector3(482.4561, -995.7322, 30.6898),
                -- You can add more...
            },

            BossMenu = {
                grades = {4},
                coords = {
                    vector3(460.0505, -985.0408, 30.6899),
                    -- You can add more...
                }
            },

            Garages = {
                {
                    Label = 'Garage I.', -- Gargae Label
                    menu = vector3(457.7184, -1023.5260, 28.4095), -- Garage menu open coords
                    spawn = vector4(450.4629, -1020.8453, 28.4015, 92.8738), -- Vehicle spawn coords
                    deposit = vector3(452.9732, -1022.0786, 28.4158), -- Vehicle deposit place

                    vehicles = {
                        --['MODEL'] = {
                        --    Label = 'VEHICLE-LABEL',
                        --    minRank = MINIMUM-GRADE
                        --},

                        ['police'] = {
                            Label = 'Police Vehicle',
                            minRank = 1
                        },
        
                        ['police2'] = {
                            Label = 'Police2 Vehicle',
                            minRank = 2
                        },
                    }
                },

                {
                    Label = 'Helicopter Garage',
                    menu = vector3(455.3739, -984.1644, 43.6913),
                    spawn = vector4(450.4059, -981.5190, 43.6914, 87.9343),
                    deposit = vector3(450.4059, -981.5190, 43.6914),

                    vehicles = {
                        ['polmav'] = {
                            Label = 'Police Helicopter',
                            minRank = 3
                        },
                    }
                },

                -- You can add more...
            },

            Shop = {
                -- minGrade = The minimum grade to access to buy the item.
                {item = 'radio', label = 'Radio', price = 500, minGrade = 0},
                {item = 'police_bulletproof', label = 'Bullet Proof', price = 500, minGrade = 0},
                {item = 'weapon_flashlight', label = 'Flash Light', price = 10, minGrade = 0},
                {item = 'weapon_nightstick', label = 'Nightstick', price = 10, minGrade = 0},
                {item = 'weapon_stungun', label = 'Tazer', price = 500, minGrade = 0},
                {item = 'weapon_pistol', label = 'Pistol', price = 500, minGrade = 1},
                {item = 'weapon_smg', label = 'SMG', price = 500, minGrade = 2},
                {item = 'weapon_carbinerifle', label = 'Carbinerifle', price = 500, minGrade = 2},
                {item = 'weapon_pumpshotgun', label = 'Pumpshotgun', price = 500, minGrade = 3},

                -- ESX Basic Items --
                {item = 'ammo-9', label = 'Ammo-9', price = 10, minGrade = 1},
                {item = 'ammo-shotgun', label = 'Ammo-Shotgun', price = 20, minGrade = 3},
                {item = 'ammo-rifle', label = 'Ammo-Rifle', price = 20, minGrade = 2},

                -- QB Basic Items --
                --{item = 'pistol_ammo', label = 'Pistol Ammo', price = 10, minGrade = 1},
                --{item = 'smg_ammo', label = 'SMG Ammo', price = 15, minGrade = 2},
                --{item = 'rifle_ammo', label = 'Rifle Ammo', price = 20, minGrade = 2},
                --{item = 'shotgun_ammo', label = 'Shotgun Ammo', price = 20, minGrade = 3},
            },
        },

        -----------------------------------------------------------
        -------------------| Sheriff Department |------------------
        -----------------------------------------------------------

        ['Sheriff Department'] = {
            Job = 'sheriff', -- Job name
            MenuColors = {'rgb(235, 164, 52)', 'rgb(181, 116, 13)'}, -- Job panel color

            Blip = {color = 22, sprite = 60, size = 1.0}, -- Job blip
            Marker = {use = true, marker = 20, rgb = {15, 100, 210}, bobUpAndDown = true, rotate = false},
            
            Duty = vector3(-446.5832, 6012.8979, 32.2887), -- Duty ON / OFF coords
            DutyBlips = true, -- With this the cops can see the other cops in the map.

            Cloakrooms = {
                vector3(-440.2871, 6010.4814, 36.9957),
                -- You can add more...
            },

            Armorys = {
                vector3(-449.4388, 6015.1021, 36.9956),
                -- You can add more...
            },

            BossMenu = {
                grades = {3},
                coords = {
                    vector3(-432.8335, 6005.9185, 36.9957),
                    -- You can add more...
                }
            },

            Garages = {
                {
                    Label = 'Garage I.', -- Gargae Label
                    menu = vector3(-464.5174, 6025.8784, 31.3404), -- Garage menu open coords
                    spawn = vector4(-472.4534, 6035.4565, 31.3404, 228.1378), -- Vehicle spawn coords
                    deposit = vector3(-472.4534, 6035.4565, 31.3404), -- Vehicle deposit place

                    vehicles = {
                        --['MODEL'] = {
                        --    Label = 'VEHICLE-LABEL',
                        --    minRank = MINIMUM-GRADE
                        --},

                        ['sheriff'] = {
                            Label = 'Sheriff Vehicle',
                            minRank = 1
                        },
        
                        ['sheriff2'] = {
                            Label = 'Sheriff2 Vehicle',
                            minRank = 2
                        },
                    }
                },

                {
                    Label = 'Helicopter Garage',
                    menu = vector3(-467.3760, 5997.3281, 31.2556),
                    spawn = vector4(-475.5866, 5988.2788, 31.3365, 315.5201),
                    deposit = vector3(-475.5866, 5988.2788, 31.3365),

                    vehicles = {
                        ['polmav'] = {
                            Label = 'Sheriff Helicopter',
                            minRank = 3
                        },
                    }
                },

                -- You can add more...
            },

            Shop = {
                -- minGrade = The minimum grade to access to buy the item.
                {item = 'radio', label = 'Radio', price = 500, minGrade = 0},
                {item = 'sheriff_bulletproof', label = 'Bullet Proof', price = 500, minGrade = 0},
                {item = 'weapon_flashlight', label = 'Flash Light', price = 10, minGrade = 0},
                {item = 'weapon_nightstick', label = 'Nightstick', price = 10, minGrade = 0},
                {item = 'weapon_stungun', label = 'Tazer', price = 500, minGrade = 0},
                {item = 'weapon_pistol', label = 'Pistol', price = 500, minGrade = 1},
                {item = 'weapon_smg', label = 'SMG', price = 500, minGrade = 2},
                {item = 'weapon_carbinerifle', label = 'Carbinerifle', price = 500, minGrade = 2},
                {item = 'weapon_pumpshotgun', label = 'Pumpshotgun', price = 500, minGrade = 3},

                -- ESX Basic Items --
                {item = 'ammo-9', label = 'Ammo-9', price = 10, minGrade = 1},
                {item = 'ammo-shotgun', label = 'Ammo-Shotgun', price = 20, minGrade = 3},
                {item = 'ammo-rifle', label = 'Ammo-Rifle', price = 20, minGrade = 2},

                -- QB Basic Items --
                --{item = 'pistol_ammo', label = 'Pistol Ammo', price = 10, minGrade = 1},
                --{item = 'smg_ammo', label = 'SMG Ammo', price = 15, minGrade = 2},
                --{item = 'rifle_ammo', label = 'Rifle Ammo', price = 20, minGrade = 2},
                --{item = 'shotgun_ammo', label = 'Shotgun Ammo', price = 20, minGrade = 3},
            },
        },
    },

    Commands = {
        -- For cops

        Duty = {
            Use = true,
            Command = 'pduty', 
            Suggestion = 'Entering/Exiting duty'
        },

        JobMenu = {
            Command = 'jobmenu', 
            Control = '',  -- Controls list:  https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
            Suggestion = 'Open Job Menu'
        },

        MDT = {
            Use = true, -- if false here you can add your custom MDT >> cl_utils
            Command = 'mdt', 
            Control = '',  -- Controls list:  https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
            Suggestion = 'Open MDT Menu'
        },

        VehiclePanel = {
            Command = 'vehiclepanel',
            Control = '',  -- Controls list:  https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
            Suggestion = 'Vehicle Panel Position edit'
        },

        PlateReader = {
            WhitelistedVehicles = {'police', 'police2', 'police3', 'police4', 'fbi', 'fbi2', 'sheriff', 'sheriff2'}, -- false =  not in use
            Command = 'platereader', 
            Control = '',  -- Controls list:  https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
            Suggestion = 'Plate Reader Menu'
        },

        AreaLock = {
            Command = 'arealock',
            Control = '',  -- Controls list:  https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
            Suggestion = 'Area Lock Menu'
        },

        CameraRepair = {
            Command = 'camera_repair', 
            Suggestion = 'Repair the Camera'
        },

        Drag = {
            Command = 'drag', 
            Suggestion = 'Drag Animation'
        },

        RemoveObjects = {
            Command = 'removeobjects', 
            Suggestion = 'Remove Objects'
        },

        RobPlayer = {
            Command = 'rob', 
            Suggestion = 'Rob Player'
        },

        -- For Civils

        CitizenCall = {
            Command = 'citizencall', 
            Control = '',  -- Controls list:  https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
            Suggestion = 'Citizen Call Menu'
        },

        -- ONLY IN QBCORE

        GrantLicense = {
            Command = 'grantlicense', 
            LicenseRank = 2,
            Locales = {
                license_grant = 'Grant a license to someone',
                player_id = 'ID of Player',
                license_type = 'License Type (driver/weapon)',
                license_already = 'Player already has a license',
                granted_license = 'You have been granted a license',
                grant_license = 'You granted a license',
                error_license_type = 'Invalid license type',
                rank_license = 'You are not a high enough rank to grant a license',
            }
        },
    },

    HandCuff = {
        Freeze = false, -- Do you want to freeze the player while he is cuffed? true / false
        CuffObject = true, -- Do you want to use Cuff Object on the player's hand? true / false
        FastCuff = {Command = 'cuff', Control = '', Suggestion = 'To cuff a player faster'},
        -- More controls: https://docs.fivem.net/docs/game-references/controls/
        DisableControls = {24,257,25,263,32,34,31,30,45,22,44,37,23,288,289,170,167,73,199,59,71,72,36,47,264,257,140,141,142,143,75}, -- Disabled controls while the player is cuffed.

        HandcuffItem = 'handcuff', -- Usable item, what everyone can use to cuff someone.
        HandcuffKeyItem = 'handcuff_key', -- Usable item, what everyone can use to open the handcuff.
        DragBlacklistedVehicles = {'bf400', 'sanchez'},
    },

    BulletProofs = {
        Use = true, -- true = false
        Items = {
            -- Job = who can use, onlyjob = Only the job members can use? true / fase, item = ITEM
            {job = 'police', onlyjob = true, item = 'police_bulletproof'},
            {job = 'sheriff', onlyjob = true, item = 'sheriff_bulletproof'},
        }
    },

    SpeedCameras = {
        Use = true, -- true / false
        Blips = {sprite = 184, color = 82, size = 0.5}, -- Speedcameras blips
        OtherWhitelistedJobs = {'ambulance', 'sheriff', ''}, -- Other Whitelisted jobs
        Positions = {
            -- Coords, job = which job will get the money from the speedcameras, limit = speed limit, price = price (Proportional fine value), radius = radius, blip = true / false
            {coords = vector3(2076.3738, 2718.7109, 47.6280), job = 'police', limit = 50, price = 1000, radius = 5.0, blip = true},
            {coords = vector3(1320.0201, 610.4359, 80.1452), job = 'police', limit = 130, price = 3000, radius = 15.0, blip = true},
            {coords = vector3(-2686.5913, 2442.6104, 16.6781), job = 'police', limit = 130, price = 3000, radius = 15.0, blip = true},
            {coords = vector3(-1057.4922, -607.0911, 17.9110), job = 'police', limit = 110, price = 2000, radius = 25.0, blip = true},
            {coords = vector3(229.3872, -662.6493, 38.2247), job = 'police', limit = 50, price = 1000, radius = 15.0, blip = true},
            {coords = vector3(120.5341, -1378.1332, 28.8197), job = 'police', limit = 50, price = 1000, radius = 25.0, blip = true},
        }
    },

    Prison = {
        ClearInventory = true, -- true / false
        SaveFrequency = 5,
        Blip = {label = 'Prison', color = 3, sprite = 188, size = 1.25},
        Marker = {use = true, marker = 20, rgb = {15, 100, 210}, bobUpAndDown = true, rotate = false},
        Coords = vector3(1765.2253, 2560.2373, 45.5651),
        SendPlayerToJail = vector3(1840.3468, 2579.6252, 46.0143),
        FinishCoords = vector4(1847.0192, 2585.8787, 45.6726, 267.4373),

        Hospital = {
            Blip = {label = 'Prison Hospital', coords = vector3(1767.7861, 2570.3118, 45.7299), color = 2, sprite = 61, size = 0.8}, 
            ReviveTime = 15, -- in sec
            ClearInventory = true, -- true / false
            Beds = {
                {coords = vector3(1772.00, 2597.9272, 45.6585), heading = 90.0, prop = 'v_med_bed2'},
                {coords = vector3(1772.00, 2594.9656, 45.6586), heading = 90.0, prop = 'v_med_bed2'},
                {coords = vector3(1772.00, 2591.8428, 45.6586), heading = 90.0, prop = 'v_med_bed2'},
            },
        },

        Escape = {
            CanEscape = false, -- Do you want to let the players to escape from the Prison? true / false
            EscapeDistance = 500.0, -- Escape Distance

            EscapeByTunnel = {
                Use = false, -- If it's true, you have to have this required mlo: https://ed-johnsonscripts.tebex.io/package/5303552
                Price = 5000, -- Price to can use
                TimeToEscape = 30000, -- Escaping time

                Model = 's_m_y_prismuscl_01',
                Coords = vector4(1628.2682, 2584.9957, 44.5652, 1.0618),
                DoorCoords = vector4(1628.185, 2584.76, 45.5583, 1.0618),
                WalkCoords = vector4(1626.5833, 2585.4402, 45.5648, 2.9932),
                DoorObject = -904036698,
            },
        },

        Shop = {
            Blip = {label = 'Prison Shop', color = 69, sprite = 59, size = 0.8}, 
            Coords = vector3(1779.9288, 2559.0132, 45.6731),
            Items = {
                -- In ESX
                {item = 'burger', label = 'Burger', price = 1},
                {item = 'water', label = 'Water', price = 1},

                -- In QB
                --{item = 'sandwich', label = 'Sandwich', price = 1},
                --{item = 'water_bottle', label = 'Water', price = 1},
            }
        },

        Jobs = {
            Use = true,
            Blip = {label = 'Prison Job', color = 17, sprite = 66, size = 0.7},
            StartJob = vector3(1616.6893, 2576.9800, 45.8556),

            Works = {
                -- Welding
                {
                    Time = 10, -- Time in sec
                    Money = {min = 100, max = 200}, -- Mimimum, Maximum random money amount
                    Blip = {label = 'Work Possition', color = 26, sprite = 354, size = 0.8},
                    Animation = 'WORLD_HUMAN_WELDING',
                    RemoveProp = 'prop_weld_torch',
                    Positions = {
                        {Coords = vector3(1624.7623, 2575.7261, 45.5649), Heading = 270.0},
                        {Coords = vector3(1610.1010, 2568.1750, 45.5649), Heading = 45.0},
                    },
                },

                -- Hammering
                {
                    Time = 10,
                    Money = {min = 100, max = 200},
                    Blip = {label = 'Work Possition', color = 26, sprite = 402, size = 1.0},
                    Animation = 'WORLD_HUMAN_HAMMERING',
                    RemoveProp = 'prop_tool_hammer',
                    Positions = {
                        {Coords = vector3(1630.2081, 2527.3784, 45.5649), Heading = 235.0},
                        {Coords = vector3(1624.8821, 2513.2861, 45.5648), Heading = 100.0},
                    },
                },

                -- Planting
                {
                    Time = 10,
                    Money = {min = 100, max = 200},
                    Blip = {label = 'Work Possition', color = 2, sprite = 1, size = 0.75},
                    Animation = 'WORLD_HUMAN_GARDENER_PLANT',
                    RemoveProp = 'prop_cs_trowel',
                    Positions = {
                        {Coords = vector3(1771.3270, 2546.0410, 45.5871), Heading = 275.0},
                        {Coords = vector3(1757.6355, 2550.0220, 45.5651), Heading = 130.0},
                        {Coords = vector3(1700.1659, 2536.5183, 45.5595), Heading = 150.0},
                    },
                },

                -- Cleaning
                {
                    Time = 10,
                    Money = {min = 100, max = 200},
                    Blip = {label = 'Work Possition', color = 5, sprite = 1, size = 0.75},
                    Animation = 'WORLD_HUMAN_MAID_CLEAN',
                    RemoveProp = 'prop_rag_01',
                    Positions = {
                        {Coords = vector3(1781.9982, 2558.9646, 45.6732), Heading = 0.0},
                        {Coords = vector3(1784.3669, 2563.7920, 45.6731), Heading = 0.0},
                        {Coords = vector3(1784.2422, 2552.7314, 45.6731), Heading = 0.0},
                    },
                },

                -- You can add more...
            },
        },

        PrisonGuards = {
            {Model = 'mp_m_securoguard_01', Coords = vector4(1759.9581, 2413.7534, 45.3684, 28.3456), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1820.5490, 2477.2603, 45.3775, 58.4353), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1659.2534, 2398.5969, 45.4038, 1.3208), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1544.2542, 2470.9983, 45.3487, 291.0606), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1538.5869, 2585.3689, 45.3398, 276.2064), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1572.9132, 2678.1006, 45.3943, 241.9367), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1650.8765, 2754.4700, 45.4991, 204.2366), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1772.0437, 2758.9846, 45.5022, 158.1188), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1844.9613, 2699.1370, 45.5318, 91.8540), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1819.9763, 2621.6011, 45.5227, 84.6645), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1796.1647, 2620.0349, 45.5651, 357.4224), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1797.2832, 2590.6509, 45.6206, 190.7684), Distance = 10.0},
            {Model = 'mp_m_securoguard_01', Coords = vector4(1822.2632, 2608.7876, 45.5931, 92.6341), Distance = 20.0},
        },
    },

    SecurityCameras = {
        hack = {
            enable = true, -- Camera Hacking | true = false
            time = 30, -- Hacking time
            removeItem = false, -- Remove the item? | true = false
            item = 'cam_hacking', -- Camera Hacking item
            distance = 15.0 -- The player should be at this distance from camera object
        },

        cameras = {
            [1] = {label = "Prison CAM#1", coords = vector3(1768.84, 2530.96, 50.06), r = {x = -15.0, y = 0.0, z = 42.78}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123279267539730493/1.png'},
            [2] = {label = "Prison CAM#2", coords = vector3(1616.35, 2522.01, 50.12), r = {x = -15.0, y = 0.0, z = 300.78}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123279278671417486/2.png'},
            [3] = {label = "Prison CAM#3", coords = vector3(1694.99, 2529.18, 59.00), r = {x = -15.0, y = 0.0, z = 300.78}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123279288834195577/3.png'},
            [4] = {label = "Pacific Bank CAM#1", coords = vector3(235.35, 227.76, 113.83), r = {x = -35.0, y = 0.0, z = 220.05}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123279610604425327/4.png'},
            [5] = {label = "Pacific Bank CAM#2", coords = vector3(232.64, 221.82, 108.47), r = {x = -25.0, y = 0.0, z = -140.91}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123279622096818266/5.png'},
            [6] = {label = "Pacific Bank CAM#3", coords = vector3(251.83, 225.38, 104.50), r = {x = -35.0, y = 0.0, z = -74.87}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123279633509535854/6.png'},
            [7] = {label = "Jewelery CAM#1", coords = vector3(-620.28, -224.15, 40.32), r = {x = -25.0, y = 0.0, z = 165.78}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123280883814764574/7.png'},
            [8] = {label = "Jewelery CAM#2", coords = vector3(-627.47, -239.98, 40.30), r = {x = -25.0, y = 0.0, z = -10.78}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123281525883031552/8.png'},
            [9] = {label = "Paleto Bank #1", coords = vector3(-115.40, 6472.91, 33.00), r = {x = -25.0, y = 0.0, z = 200.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123289550551261344/11.png'},
            [10] = {label = "Paleto Bank #2", coords = vector3(-108.02, 6462.61, 33.40), r = {x = -25.0, y = 0.0, z = 360.00}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123289558289760396/12.png'},
            [11] = {label = "Paleto Bank #3", coords = vector3(-104.62, 6479.42, 33.38), r = {x = -25.0, y = 0.0, z = 182.00}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123289568263807019/13.png'},
            [12] = {label = "Paleto Bank #4", coords = vector3(-107.89, 6468.54, 33.90), r = {x = -25.0, y = 0.0, z = 216.00}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123289575872286790/14.png'},
            [13] = {label = "Fleeca Bank #1", coords = vector3(146.52, -1038.20, 30.72), r = {x = -25.0, y = 0.0, z = 250.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283944394211389/9.png'},
            [14] = {label = "Fleeca Bank #1", coords = vector3(150.01, -1051.31, 31.10), r = {x = -25.0, y = 0.0, z = 25.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283959363682304/10.png'},
            [15] = {label = "Fleeca Bank #2", coords = vector3(1179.08, 2705.60, 39.40), r = {x = -25.0, y = 0.0, z = 90.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283944394211389/9.png'},
            [16] = {label = "Fleeca Bank #2", coords = vector3(1171.28, 2716.70, 39.82), r = {x = -25.0, y = 0.0, z = 225.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283959363682304/10.png'},
            [17] = {label = "Fleeca Bank #3", coords = vector3(-1216.80, -331.46, 39.0), r = {x = -25.0, y = 0.0, z = 290.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283944394211389/9.png'},
            [18] = {label = "Fleeca Bank #3", coords = vector3(-1204.83, -337.83, 39.51), r = {x = -25.0, y = 0.0, z = 80.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283959363682304/10.png'},
            [19] = {label = "Fleeca Bank #4", coords = vector3(-2963.95, 478.96, 17.06), r = {x = -25.0, y = 0.0, z = 350.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283944394211389/9.png'},
            [20] = {label = "Fleeca Bank #4", coords = vector3(-2952.67, 486.13, 17.47), r = {x = -25.0, y = 0.0, z = 140.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283959363682304/10.png'},
            [21] = {label = "Fleeca Bank #5", coords = vector3(310.85, -276.56, 55.47), r = {x = -25.0, y = 0.0, z = 250.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283944394211389/9.png'},
            [22] = {label = "Fleeca Bank #5", coords = vector3(314.34, -289.67, 56.23), r = {x = -25.0, y = 0.0, z = 25.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283959363682304/10.png'},
            [23] = {label = "Fleeca Bank #6", coords = vector3(-354.35, -47.43, 50.69), r = {x = -25.0, y = 0.0, z = 250.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283944394211389/9.png'},
            [24] = {label = "Fleeca Bank #6", coords = vector3(-350.62, -60.48, 50.76), r = {x = -25.0, y = 0.0, z = 25.1595}, img = 'https://cdn.discordapp.com/attachments/907358524907081798/1123283959363682304/10.png'},
        },
    },

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

    MoneyForm = '$', -- Money form

    -- All Licences Label
    Licences = {
        ['weapon'] = 'Weapon Licence',
        ['dmv'] = 'DMV Licence',
        ['drive'] = 'Drive Licence',
        ['driver'] = 'Drive Licence',
        ['bike'] = 'Bike Licence',
        ['hunting'] = 'Hunting Licence',
        ['business'] = 'Business Licence',
    },

    Locales = {
        CameraLabel = 'Left ~INPUT_CELLPHONE_LEFT~ Right ~INPUT_CELLPHONE_RIGHT~\nUp  ~INPUT_CELLPHONE_UP~ Down ~INPUT_CELLPHONE_DOWN~\n~r~Cancel ~INPUT_CELLPHONE_CANCEL~',
        ObjectLabel = 'Rotate Object ~INPUT_CELLPHONE_LEFT~ & ~INPUT_CELLPHONE_RIGHT~\n~b~Place Object~w~ ~INPUT_FRONTEND_RDOWN~',
        Male = 'Male',
        Female = 'Female',
        SpeedCameraFine = 'Speed Camera - Speed:',
        SpeedCameraBlipLabel = 'Speed Camera',
        None = 'None',
        Jail = 'Jail',
        Reason = 'Reason',
        Time = 'Time',

        -- Job Menu Locales

        CitizenInteractions = 'Citizen Interactions',
        Search = 'Search',
        Cuff = 'Cuff',
        Uncuff = 'Uncuff',
        Drag = 'Drag',
        InOutOfVehicle = 'In/out of vehicle',

        VehicleInteractions = 'Vehicle Interactions',
        Lockpick = 'Lockpick',
        WheelClamp = 'Wheel clamp',
        Impound = 'Impound',
        VehicleSearch = 'Search',

        Objects = 'Objects',
        Cone = 'Cone',
        Barrier = 'Barrier',
        Spikestrips = 'Spikestrips',
        Tent = 'Tent',
        Light = 'Light',

        MDT = 'MDT',
        Colleague = 'Colleague',
    },

    Texts = {
        [1] = {'[E] - To open the dress menu', 38},
        [2] = {'[E] - To open the armory menu', 38},
        [3] = {'[E] - To open the garage menu', 38},
        [4] = {'[E] - To deposit the vehicle', 38},
        [5] = {'[E] - To Duty ON', '[E] - To Duty OFF', 38},
        [6] = {'[E] - Search Vehicle Trunk', 38},
        [7] = {'[E] - Search Vehicle Glovebox', 38},
        [8] = {'[E] - Remove Object', 38},
        [9] = {'[E] - Start Job', 38},
        [10] = {'[E] - Finish Job', 38},
        [11] = {'[E] - Start Work', 38},
        [12] = {'[E] - Escape By Tunnel', 38},
        [13] = {'[E] - Shop', 38},
        [14] = {'[E] - Send Player To Jail', 38},
        [15] = {'[E] - To open the Boss Menu', 38},
    },
    
    -- Notify function EDITABLE >> cl_utils.lua
    Notify = { 
        [1] = {"POLICE JOB", "No vehicle available for your rank.", 5000, "error"},
        [2] = {"POLICE JOB", "You can't deposit this Vehicle.", 5000, "error"},
        [3] = {"POLICE JOB", "Duty status: <b>ON", 5000, "info"},
        [4] = {"POLICE JOB", "Duty status: <b>OFF", 5000, "info"},
        [5] = {"POLICE JOB", "Something is in the way!", 5000, "error"},
        [6] = {"POLICE JOB", "There isn't free seat in the Vehicle!", 5000, "error"},
        [7] = {"POLICE JOB", "You got:", 5000, "info"},
        [8] = {"POLICE JOB", "<br>You spent:<b>", 5000, "info"},
        [9] = {"POLICE JOB", "You can't use it.", 5000, "error"},
        [10] = {"POLICE JOB", "You don't have enough money!", 5000, "error"},
        [11] = {"POLICE JOB", "<b>You have started Work!</b> Go to the Point, marked on the map! You will receive Money when you finish the Job.", 10000, "info"},
        [12] = {"POLICE JOB", "Go to the Next Point, marked on the map!", 5000, "info"},
        [13] = {"POLICE JOB", "The Prison Guard bringed you back!", 5000, "info"},
        [14] = {"POLICE JOB", "You do not have enough cash:", 5000, "error"},
        [15] = {"POLICE JOB", "The door is opening, escape!", 5000, "success"},
        [16] = {"POLICE JOB", "Please DO NOT SPAM!", 8000, "error"},
        [17] = {"POLICE JOB", "You aren't near to a Camera Object!", 5000, "error"},
        [18] = {"POLICE JOB", "Hack FAILED!", 5000, "error"},
        [19] = {"POLICE JOB", "Hack SUCCESS! The camera has been deactivated.", 5000, "success"},
        [20] = {"POLICE JOB", "You have successfully repaired the Camera!", 6000, "success"},
        [21] = {"POLICE JOB", "You have successfully submitted!", 6000, "success"},
        [22] = {"POLICE JOB", "You have successfully created a fine!", 6000, "success"},
        [23] = {"POLICE JOB", "There are no player near you!", 6000, "error"},
        [24] = {"POLICE JOB", "Jail time is over!", 6000, "success"},
        [25] = {"POLICE JOB", "You have successfully escaped!", 6000, "success"},
        [26] = {"POLICE JOB", "You can't escape!", 6000, "error"},
        [27] = {"POLICE JOB", "Citizen Call <br>Street: ", 6000, "info"},
        [28] = {"POLICE JOB", "No one nearby to drag!", 6000, "error"},
        [29] = {"POLICE JOB", "Someone is in the Vehicle!", 6000, "error"},
        [30] = {"POLICE JOB", "You have to put a Wheel Clamp to the Wheel first.", 6000, "error"},
        [31] = {"Ambulance Job", "You paid a police fine:", 5000, "info"},
        [32] = {"Ambulance Job", "The player isn't available!", 5000, "info"},
        [33] = {"Ambulance Job", "The player have to put up their hands!", 5000, "error"},
    },

    Progressbar = {
        DutyOFF = 'Duty OFF...',
        DutyON = 'Duty ON...',
        Working = 'Working...',
        WheelClampPlacing = 'Placing Wheel Clamp...',
        Impound = 'Impound...'
    },
    
    Webhooks = {
        Use = true, -- Use webhooks? true / false
        Locale = {
            ['ItemBought'] = 'Item Bought',
            ['CitizenCallOpen'] = 'Citizen Call - Open',
            ['CitizenCallClose'] = 'Citizen Call - Close',
            ['FineCreated'] = 'Fine Created',
            ['Jail'] = 'Jail',
            ['Unjail'] = 'Unjail',

            ['PlayerName'] = 'Player Name',
            ['Identifier'] = 'Identifier',
            ['Items'] = 'Items',
            ['Text'] = 'Text',
            ['Callid'] = 'Call ID',
            ['Coords'] = 'Coords',
            ['Assistant'] = 'Assistant',
            ['CloseReason'] = 'Close Reason',
            ['Receiver'] = 'Receiver',
            ['Amount'] = 'Amount',
            ['Job'] = 'Job',
            ['Reason'] = 'Reason',

            ['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 = {
            ['SubAccountCreated'] = 3145631, 
            ['SubAccountDeleted'] = 16711680,
            ['PermissionTableRefreshed'] = 10155240
        }
    },

    -----------------------------------------------------------
    -----------------------| UNIFORMS |------------------------
    -----------------------------------------------------------

    CitizenWear = {label = "Citizen Wear"},

    Uniforms = {
        {
            label = 'Police Dress', -- Uniform Label
            jobs = {
                -- Job = job name, grades = grades
                {job = 'police', grades = {0,1,2,3}},
                -- More jobs
            },
            male = {
                ['t-shirt'] = {item = 58, texture = 0},
                ['torso2'] = {item = 55, texture = 0},
                ['arms'] = {item = 41, texture = 0},
                ['pants'] = {item = 25, texture = 0},
                ['shoes'] = {item = 25, texture = 0},
                ['hat'] = {item = -1, texture = 0},
                ['accessory'] = {item = 0, texture = 0},
                ['ear'] = {item = 2, texture = 0},
                ['decals'] = {item = 0, texture = 0},
                ['mask'] = {item = 0, texture = 0}
            },
            female = {
                ['t-shirt'] = {item = 35, texture = 0},
                ['torso2'] = {item = 48, texture = 0},
                ['arms'] = {item = 44, texture = 0},
                ['pants'] = {item = 34, texture = 0},
                ['shoes'] = {item = 27, texture = 0},
                ['hat'] = {item = -1, texture = 0},
                ['accessory'] = {item = 0, texture = 0},
                ['ear'] = {item = 2, texture = 0},
                ['decals'] = {item = 0, texture = 0},
                ['mask'] = {item = 0, texture = 0}
            },
        },
        {
            label = 'Visibility Vest',
            jobs = {
                {job = 'police', grades = {0,1,2,3,4}},
            },
            male = {
                ['t-shirt'] = {item = 59, texture = 1},
            },
            female = {
                ['t-shirt'] = {item = 36, texture = 1},
            }
        },
        {
            label = 'Boss Dress',
            jobs = {
                {job = 'police', grades = {4}},
            },
            male = {
                ['t-shirt'] = {item = 58, texture = 0},
                ['torso2'] = {item = 55, texture = 0},
                ['arms'] = {item = 41, texture = 0},
                ['pants'] = {item = 25, texture = 0},
                ['shoes'] = {item = 25, texture = 0},
                ['hat'] = {item = -1, texture = 0},
                ['accessory'] = {item = 0, texture = 0},
                ['ear'] = {item = 2, texture = 0},
                ['decals'] = {item = 8, texture = 3},
                ['mask'] = {item = 0, texture = 0}
            },
            female = {
                ['t-shirt'] = {item = 35, texture = 0},
                ['torso2'] = {item = 48, texture = 0},
                ['arms'] = {item = 44, texture = 0},
                ['pants'] = {item = 34, texture = 0},
                ['shoes'] = {item = 27, texture = 0},
                ['hat'] = {item = -1, texture = 0},
                ['accessory'] = {item = 0, texture = 0},
                ['ear'] = {item = 2, texture = 0},
                ['decals'] = {item = 7, texture = 3},
                ['mask'] = {item = 0, texture = 0}
            }
        },
    },

    PrisonUniform = {
        male = {
            ['t-shirt'] = {item = 15, texture = 0},
            ['torso2'] = {item = 146, texture = 0},
            ['arms'] = {item = 0, texture = 0},
            ['pants'] = {item = 3, texture = 7},
            ['shoes'] = {item = 12, texture = 12},
            ['hat'] = {item = -1, texture = 0},
            ['accessory'] = {item = 0, texture = 0},
            ['ear'] = {item = -1, texture = 0},
            ['decals'] = {item = 0, texture = 0},
            ['mask'] = {item = 0, texture = 0}
        },
        female = {
            ['t-shirt'] = {item = 3, texture = 0},
            ['torso2'] = {item = 38, texture = 3},
            ['arms'] = {item = 2, texture = 0},
            ['pants'] = {item = 3, texture = 15},
            ['shoes'] = {item = 66, texture = 5},
            ['hat'] = {item = -1, texture = 0},
            ['accessory'] = {item = 0, texture = 0},
            ['ear'] = {item = -1, texture = 0},
            ['decals'] = {item = 0, texture = 0},
            ['mask'] = {item = 0, texture = 0}
        }
    },
}
client-utils.lua
-- 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
        SetNotificationTextEntry("STRING")
        AddTextComponentString(text)
        DrawNotification(0,1)

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

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

        -- OKOK Notify:
        -- exports['okokNotify']:Alert(title, 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')
        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()
        end
    end
end

function ProgressBarFunction(time, text)
    if Config.ProgressBar:lower() == 'progressbars' then --LINK: https://github.com/EthanPeacock/progressBars/releases/tag/1.0
        exports['progressBars']:startUI(time, text)
    elseif Config.ProgressBar:lower() == 'mythic_progbar' then -- LINK: https://github.com/HarryElSuzio/mythic_progbar
        TriggerEvent("mythic_progbar:client:progress", {name = "policejobduty", duration = time, label = text, useWhileDead = false, canCancel = false})
    elseif Config.ProgressBar:lower() == 'pogressbar' then -- LINK: https://github.com/SWRP-PUBLIC/pogressBar
        exports['pogressBar']:drawBar(time, text)
    end
end

function InventoryOpenFunction(type, data)
    if type == 'society' then
        local job = data
        if Config.Inventory:lower() == 'ox_inventory' then
            exports.ox_inventory:openInventory('stash', 'society_'..data)
        elseif Config.Inventory:lower() == 'qb_inventory' then
            TriggerServerEvent("inventory:server:OpenInventory", "stash", "policestash_"..QBCore.Functions.GetPlayerData().citizenid)
            TriggerEvent("inventory:client:SetCurrentStash", "policestash_"..QBCore.Functions.GetPlayerData().citizenid)
        elseif Config.Inventory:lower() == 'quasar_inventory' then
            TriggerServerEvent("inventory:server:OpenInventory", "stash", "policestash_"..job)
            TriggerEvent("inventory:client:SetCurrentStash", "policestash_"..job)
        elseif Config.Inventory:lower() == 'chezza_inventory' then
            TriggerEvent('inventory:openStorage', "Locker", job.."_locker", 1000, 1000, {job})
        elseif Config.Inventory:lower() == 'core_inventory' then
            TriggerServerEvent('core_inventory:server:openInventory', job.."_locker", "big_storage", nil, nil)  
        elseif Config.Inventory:lower() == 'codem_inventory' then
            exports["codem-inventory"]:OpenStash("stash", 64000, 100)
        end
    elseif type == 'search_player' then
        local target = data
        if Config.Inventory:lower() == 'ox_inventory' then
            exports.ox_inventory:openInventory('player', target)
        elseif Config.Inventory:lower() == 'qb_inventory' then
            TriggerServerEvent("inventory:server:OpenInventory", "otherplayer", target)
        elseif Config.Inventory:lower() == 'quasar_inventory' then
            TriggerServerEvent("inventory:server:OpenInventory", "otherplayer", target)
        elseif Config.Inventory:lower() == 'chezza_inventory' then
            TriggerEvent("inventory:openPlayerInventory", target, true)
        elseif Config.Inventory:lower() == 'core_inventory' then
            TriggerServerEvent('core_inventory:server:openInventory', target, 'otherplayer', nil, nil, false)
        elseif Config.Inventory:lower() == 'codem_inventory' then
            TriggerServerEvent("codem-inventory:OpenInventory", "player", GetPlayerServerId(target))
        end
    elseif type == 'search_vehicle_trunk' then
        local vehicle = data
        local plate = GetVehicleNumberPlateText(vehicle)

        if Config.Inventory:lower() == 'ox_inventory' then
            exports.ox_inventory:openInventory('trunk', {id='trunk'..plate, netid = NetworkGetNetworkIdFromEntity(vehicle)})
        elseif Config.Inventory:lower() == 'qb_inventory' then
            TriggerServerEvent("inventory:server:OpenInventory", "trunk", plate, {maxweight = 1000000, slots = 50})
        elseif Config.Inventory:lower() == 'quasar_inventory' then
            TriggerServerEvent("inventory:server:OpenInventory", "trunk", plate, {maxweight = 1000000, slots = 50})
        elseif Config.Inventory:lower() == 'chezza_inventory' then
            TriggerEvent('inventory:openInventory', {type = "trunk", id = plate, title = "Vehicle Trunk", weight = false, delay = 300, save = true})
        elseif Config.Inventory:lower() == 'core_inventory' then
            
        elseif Config.Inventory:lower() == 'codem_inventory' then

        end
    elseif type == 'search_vehicle_glovebox' then
        local vehicle = data
        local plate = GetVehicleNumberPlateText(vehicle)

        if Config.Inventory:lower() == 'ox_inventory' then
            exports.ox_inventory:openInventory('glovebox', {id='glovebox'..plate, netid = NetworkGetNetworkIdFromEntity(vehicle)})
        elseif Config.Inventory:lower() == 'qb_inventory' then
            TriggerServerEvent("inventory:server:OpenInventory", "glovebox", plate)
        elseif Config.Inventory:lower() == 'quasar_inventory' then
            TriggerServerEvent("inventory:server:OpenInventory", "glovebox", plate)
        elseif Config.Inventory:lower() == 'chezza_inventory' then
            TriggerEvent('inventory:openInventory', {type = "glovebox", id = plate, title = "Vehicle Glove Box", weight = false, delay = 300, save = true})
        elseif Config.Inventory:lower() == 'core_inventory' then
            
        elseif Config.Inventory:lower() == 'codem_inventory' then
            
        end
    end
end

function PlayerReviveFunction()
    if Config['Core']:upper() == 'ESX' then
        TriggerEvent('esx_ambulancejob:revive')
    elseif Config['Core']:upper() == 'QBCORE' then
        TriggerEvent('hospital:client:Revive')
    end
end

function ImpoundDeleteVehicle(vehicle)
    local plate = GetVehicleNumberPlateText(vehicle)
    DeleteEntity(vehicle)
end

function HandCuffedEvent(cuffed)
    if cuffed then
        --exports['qs-smartphone']:canUsePhone(false)
        --exports["lb-phone"]:ToggleDisabled(false)
    else
        --exports['qs-smartphone']:canUsePhone(true)
        --exports["lb-phone"]:ToggleDisabled(true)
    end
end

function CustomMDT()
    -- You can open another MDT here
end

function BulletProofVest()
    local playerPed = PlayerPedId()

    AddArmourToPed(playerPed, 100)
    SetPedArmour(playerPed, 100)
    SetPedComponentVariation(playerPed, 9, 27, 9, 2)
end

function OpenCloakroomMenuEvent()
    TriggerEvent('qb-clothing:client:openOutfitMenu')
end

function CitizenWear()
    if Config['Core']:upper() == 'ESX' then
        Core.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin)
            TriggerEvent('skinchanger:loadSkin', skin)
        end)
    elseif Config['Core']:upper() == 'QBCORE' then
       TriggerEvent('qb-clothing:client:openOutfitMenu')
    end
end

function setUniform(uniformTable)
    if Config['Core']:upper() == 'ESX' then
        TriggerEvent('skinchanger:getSkin', function(skin)
            local uniform
            if skin.sex == 0 then
                uniform = uniformTable.male
            else
                uniform = uniformTable.female
            end

            local table = {}

            for k,v in pairs(uniform) do
                if k == 't-shirt' then
                    table.tshirt_1 = uniform['t-shirt'].item
                    table.tshirt_2 = uniform['t-shirt'].texture
                elseif k == 'torso2' then
                    table.torso_1 = uniform['torso2'].item
                    table.torso_2 = uniform['torso2'].texture
                elseif k == 'decals' then
                    table.decals_1 = uniform['decals'].item
                    table.decals_2 = uniform['decals'].texture
                elseif k == 'arms' then
                    table.arms = uniform['arms'].item
                elseif k == 'pants' then
                    table.pants_1 = uniform['pants'].item
                    table.pants_2 = uniform['pants'].texture
                elseif k == 'shoes' then
                    table.shoes_1 = uniform['shoes'].item
                    table.shoes_2 = uniform['shoes'].texture
                elseif k == 'hat' then
                    table.helmet_1 = uniform['hat'].item
                    table.helmet_2 = uniform['hat'].texture
                elseif k == 'accessory' then
                    table.chain_1 = uniform['accessory'].item
                    table.chain_2 = uniform['accessory'].texture
                elseif k == 'ear' then
                    table.ears_1 = uniform['ear'].item
                    table.ears_2 = uniform['ear'].texture
                elseif k == 'mask' then
                    table.mask_1 = uniform['mask'].item
                    table.mask_2 = uniform['mask'].texture
                end
            end

            TriggerEvent('skinchanger:loadClothes', skin, table)
        end)
    elseif Config['Core']:upper() == 'QBCORE' then
        local table = {}
        local gender = QBCore.Functions.GetPlayerData().charinfo.gender
        if gender == 0 then
            table.outfitData = uniformTable.male
        else
            table.outfitData = uniformTable.female
        end

        TriggerEvent('qb-clothing:client:loadOutfit', table)
    end
end

function LockPick(vehicle)
    if Config['Core']:upper() == 'ESX' then
        local playerPed = PlayerPedId()
        TaskStartScenarioInPlace(playerPed, 'WORLD_HUMAN_WELDING', 0, true)
        Wait(1000*10)
        ClearPedTasksImmediately(playerPed)

        NetworkRegisterEntityAsNetworked(vehicle)
        NetworkRequestControlOfEntity(vehicle)
        SetEntityAsMissionEntity(vehicle)

        SetVehicleDoorsLocked(vehicle, 1)
        SetVehicleDoorsLockedForAllPlayers(vehicle, false)
    elseif Config['Core']:upper() == 'QBCORE' then
        TriggerEvent('lockpicks:UseLockpick')
    end
end

function DisableMinimap()
    DisplayRadar(false)
end

function EnableMinimap()
    DisplayRadar(true)
end

function OpenMenuUtil()
    InMenu = true
    SetNuiFocus(true, true)

    Citizen.CreateThread(function()
        while InMenu do
            N_0xf4f2c0d4ee209e20() -- it's disable the AFK camera zoom
            Citizen.Wait(15000)
        end 
    end)

    DisplayRadar(false)
end

function CloseMenuUtil()
    Citizen.CreateThread(function()
        Citizen.Wait(1000)
        InMenu = false
    end)

    SetNuiFocus(false, false)

    DisplayRadar(true)
end

function GeneratePolicePlace()
    return string.sub(PlayerData.job.label, 1, 4)..''..math.random(0001, 9999)
end

function IsTargetDead(playerId)
    local retval = false
    local hasReturned = false
    TSCB('brutal_policejob:server:isPlayerDead', function(result)
        retval = result
        hasReturned = true
    end, playerId)
    while not hasReturned do
        Wait(10)
    end
    return retval
end

-----------------------| UTILS TRIGGERS |-----------------------

RegisterNetEvent('brutal_policejob:client:utils:CreateVehicle')
AddEventHandler('brutal_policejob:client:utils:CreateVehicle', function(Vehicle)
    SetVehicleFuelLevel(Vehicle, 100.0)
    DecorSetFloat(Vehicle, "_FUEL_LEVEL", GetVehicleFuelLevel(Vehicle))

    if Config['Core']:upper() == 'QBCORE' then
        TriggerEvent("vehiclekeys:client:SetOwner", GetVehicleNumberPlateText(Vehicle))
    end
end)

RegisterNetEvent('brutal_policejob:client:utils:DeleteVehicle')
AddEventHandler('brutal_policejob:client:utils:DeleteVehicle', function(Vehicle)

end)
server-utils.lua
local YourWebhook = 'WEBHOOK-HERE'  -- help: https://docs.brutalscripts.com/site/others/discord-webhook

function GetWebhook()
    return YourWebhook
end

-- Buy here: (4€+VAT) https://store.brutalscripts.com
function notification(source, title, text, time, type)
    if Config.BrutalNotify then
        TriggerClientEvent('brutal_notify:SendAlert', source, title, text, time, type)
    else
        TriggerClientEvent('brutal_policejob:client:DefaultNotify', text)
    end
end

function ClearPlayerInventory(source)
    if Config.Inventory:lower() == 'ox_inventory' then
        exports.ox_inventory:ClearInventory(source)
    elseif Config.Inventory:lower() == 'quasar_inventory' then
        local saveItems = {
            'id_card', -- Add here the items that you do NOT want to be deleted
            'phone',
        }
        exports['qs-inventory']:ClearInventory(source, saveItems)
        local weapons = exports['qs-inventory']:GetWeaponList()
        for k,v in pairs(weapons) do
            RemoveItem(source, v.name, 1)
        end
    elseif Config.Inventory:lower() == 'qb_inventory' then
        exports['qb-inventory']:ClearInventory(source)
    elseif Config['Core']:upper() == 'ESX' then
        local ESX = Core
        local xPlayer = ESX.GetPlayerFromId(source)
        for i=1, #xPlayer.inventory, 1 do
            if xPlayer.inventory[i].count > 0 then
                xPlayer.setInventoryItem(xPlayer.inventory[i].name, 0)
            end
        end
    elseif Config['Core']:upper() == 'codem_inventory' then
        exports["codem-inventory"]:ClearInventory(source)
    end
end

RESCB('brutal_policejob:server:isPlayerDead', function(source, cb, player)
    if Config['Core']:upper() == 'ESX' then
        MySQL.Async.fetchAll('SELECT * FROM users WHERE identifier = @identifier', { ['@identifier'] = GetIdentifier(player)}, function(results)
            if results[1].is_dead == true or results[1].is_dead == 1 then
                death = true
            else
                death = false
            end
        end)
    elseif Config['Core']:upper() == 'QBCORE' then
        death = GetPlayerDeathMetaData(source) or false
    end
    cb(death)
end)
client-core.lua
Core = nil

if Config['Core']:upper() == 'ESX' 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'
    onPlayerDeath = 'esx:onPlayerDeath'
    JobUpdateEvent = 'esx:setJob'
    TSCB = Core.TriggerServerCallback

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

    function GetClosestPlayerFunction()
        return Core.Game.GetClosestPlayer()
    end

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

elseif Config['Core']:upper() == 'QBCORE' then
    Core = exports['qb-core']:GetCoreObject()

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

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

    function GetClosestPlayerFunction()
        return Core.Functions.GetClosestPlayer()
    end

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

end
server-core.lua
Core = nil

if Config['Core']:upper() == 'ESX' 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)
        return xPlayer.identifier
    end

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

    function GetAccountMoney(source,account)
        local xPlayer = GETPFI(source)
        if account == 'bank' then
            return xPlayer.getAccount(account).money
        elseif account == 'money' then
            return xPlayer.getMoney()
        end
    end

    function AddMoneyFunction(source, account, amount)
        local xPlayer = GETPFI(source)
        if account == 'bank' then
            xPlayer.addAccountMoney('bank', amount)
        elseif account == 'money' then
            xPlayer.addMoney(amount)
        end
    end

    function RemoveAccountMoney(source, account, amount)
        local xPlayer = GETPFI(source)
        if account == 'bank' then
            xPlayer.removeAccountMoney('bank', amount)
        elseif account == 'money' then
            xPlayer.removeMoney(amount)
        end
    end

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

        if _esx_ == 'new' then
            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)
        local xPlayer = GETPFI(source)
        if _esx_ == 'new' then
            xPlayer.addInventoryItem(item, count)
        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)
        else
            local xPlayer = GETPFI(source)
            name = xPlayer.getName() or 'No Data'
        end
        return name
    end

    function GetPlayerSex(source)
        local xPlayer = GETPFI(source)
        return xPlayer.get("sex")
    end

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

elseif Config['Core']:upper() == 'QBCORE' 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)
        return xPlayer.PlayerData.citizenid
    end

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

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

    function GetAccountMoney(source, account)
        local xPlayer = GETPFI(source)
        if account == 'bank' then
            return xPlayer.PlayerData.money.bank
        elseif account == 'money' then
            return xPlayer.PlayerData.money.cash
        end
    end

    function AddMoneyFunction(source, account, amount)
        local xPlayer = GETPFI(source)
        if account == 'bank' then
            xPlayer.Functions.AddMoney('bank', amount)
        elseif account == 'money' then
            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 RemoveAccountMoney(source, account, amount)
        local xPlayer = GETPFI(source)
        if account == 'bank' then
            xPlayer.Functions.RemoveMoney('bank', amount)
        elseif account == 'money' then
            xPlayer.Functions.RemoveMoney('cash', amount)
        end
    end

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

    function AddItem(source, item, count)
        local xPlayer = GETPFI(source)
        xPlayer.Functions.AddItem(item, count)
    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 GetPlayerSex(source)
        local xPlayer = GETPFI(source)
        local sex = xPlayer.PlayerData.charinfo.gender

        if sex == 0 then
            sex = 'm'
        else
            sex = 'f'
        end

        return sex
    end

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

    function SetHandCuffMetadata(source, isHandcuffed)
        local xPlayer = GETPFI(source)
        xPlayer.Functions.SetMetaData('ishandcuffed', isHandcuffed)
    end

    function GetPlayerDeathMetaData(source)
        local xPlayer = GETPFI(source)
        return xPlayer.PlayerData.metadata['isdead']
    end

end

Last updated

Was this helpful?