Brutal Scripts
YouTubeDiscordStore
  • 🙉About Us
  • ↗️Translate
  • Informations
    • 🔒Escrow System
    • 🔥Common Problems
  • Scripts
    • 📄Notify
      • Accessible files
      • Installation guide
    • 🔠Text-UI
      • Installation guide
      • Exports & How to use
      • Integrations
    • 🤟Gangs
      • Accessible files
      • Installation guide
      • exports / triggers
      • Create a new gang
    • 🏡Housing
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔑Keys
      • Accessible files
      • Installation guide
      • exports / triggers
    • 💥Gang Actions
      • Accessible files
      • Installation guide
      • exports / triggers
      • Controlling the menu
    • ⭕Radial
      • Accessible files
      • Installation guide
      • Adding new buttons
    • 🎯Executions
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🐶Pets + K9 V2
      • Accessible files
      • Installation guide
    • 👮Police Job
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🚑Ambulance Job
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔧Mechanic Job
      • Accessible files
      • Installation guide
      • exports / triggers
    • 💪GYM with Skills V2
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔫Paintball
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🥊Boxing
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🔨Crafting
      • Accessible files
      • Installation guide
      • Creating a new crafting table
    • 🏦Banking
      • Accessible files
      • Installation guide
      • Paycheck transactions
      • Registering transactions
    • 🎳Bowling
      • Accessible files
      • Installation guide
      • exports / triggers
    • 🦌Hunting
      • Accessible files
      • Installation guide
    • 🏁Racing Script
      • Accessible files
      • Installation guide
    • 🐛Reports
      • Accessible files
      • Installation guide
    • 🛒Shop Robbery
      • Accessible files
      • Installation guide
    • 🛥️Yacht Heist
      • Accessible files
      • Installation guide
    • 🧾Billing
      • Accessible files
      • Installation guide
      • Triggers
    • 💰Truck Robbery
      • Accessible files
      • Installation guide
    • 🏧Atm Robbery
      • Accessible files
      • Installation guide
    • 👶Baby script
      • Installation guide
      • How to add more babys
  • Others
    • Register Key Mapping
    • Drill Minigame
    • Discord Webhook
Powered by GitBook
On this page

Was this helpful?

  1. Scripts
  2. Police Job

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
PreviousPolice JobNextInstallation guide

Last updated 7 months ago

Was this helpful?

👮
Page cover image