Skip to content

๐Ÿ‘ฎ qb-policejob

Introduction

  • This resource manages police functions and interactions
  • Objects for police to place down via qb-radialmenu.md such as traffic cones and spike strips
  • Police stash, garage and armory
  • Cuffing players functions
  • Evidence system including blood DNA drops and fingerprints
  • Anklet Tracker for police to track players

Configuration

General

Config = {}
Config.LicenseRank = 2 -- minimum rank need to grant weapon licenses to players
Config.HandCuffItem = 'handcuffs' -- item name to check for when cuffing
Config.PoliceHelicopter = "POLMAV" -- helicopter model name to spawn

Locations

Config.Locations = {
    ["duty"] = { -- locations to clock on/off duty
        [1] = vector3(440.085, -974.924, 30.689),
        [2] = vector3(-449.811, 6012.909, 31.815),
    },
    ["vehicle"] = { -- locations to withdraw vehicles
        [1] = vector4(448.159, -1017.41, 28.562, 90.654),
        [2] = vector4(471.13, -1024.05, 28.17, 274.5),
        [3] = vector4(-455.39, 6002.02, 31.34, 87.93),
    },
    ["stash"] = { -- locations to access stash
        [1] = vector3(453.075, -980.124, 30.889),
    },
    ["impound"] = { -- locations to access the police impound
        [1] = vector4(436.68, -1007.42, 27.32, 180.0),
        [2] = vector4(-436.14, 5982.63, 31.34, 136.0),
    },
    ["helicopter"] = { -- locations to withdraw helicopters
        [1] = vector4(449.168, -981.325, 43.691, 87.234),
        [2] = vector4(-475.43, 5988.353, 31.716, 31.34),
    },
    ["armory"] = { -- locations to open the armory
        [1] = vector3(462.23, -981.12, 30.68),
    },
    ["trash"] = { -- locations to add items to the trash
        [1] = vector3(439.0907, -976.746, 30.776),
    },
    ["fingerprint"] = { -- locations to access fingerprint scanner
        [1] = vector3(460.9667, -989.180, 24.92),
    },
    ["evidence"] = { -- locations to access evidence lockers
        [1] = vector3(442.1722, -996.067, 30.689),
        [2] = vector3(451.7031, -973.232, 30.689),
        [3] = vector3(455.1456, -985.462, 30.689),
    },
    ["stations"] = { -- locations for map blips and labels
        [1] = {
            label = "Police Station",
            coords = vector4(428.23, -984.28, 29.76, 3.5)
        },
        [2] = {
            label = "Prison",
            coords = vector4(1845.903, 2585.873, 45.672, 272.249)
        },
        [3] = {
            label = "Police Station Paleto",
            coords = vector4(-451.55, 6014.25, 31.716, 223.81)
        },
    },
}

Armory

Config.Items = {
    label = "Police Armory", -- label that the right-side inventory shows
    slots = 30, -- how many slots total for the armory
    items = {
        [1] = {
            name = "weapon_pistol", -- item name
            price = 0, -- how much the item costs
            amount = 1, -- how many are available in stock
            info = { -- item info
                serie = "", -- placeholder for serial number, don't edit
                attachments = {
                    {
                        component = "COMPONENT_AT_PI_FLSH", -- attachment name
                        label = "Flashlight" -- attachment label
                    },
                }
            },
            type = "weapon", -- item type
            slot = 1, -- slot item shows in inventory
            authorizedJobGrades = {0, 1, 2, 3, 4} -- grades allowed to purchase
        }
    }
}

Vehicles

Config.WhitelistedVehicles = {} -- list of vehicles not locked by rank

Config.AuthorizedVehicles = {
	-- Grade 0
	[0] = {
		["police"] = "Police Car 1", -- vehicle model and label for menu
		["police2"] = "Police Car 2",
		["police3"] = "Police Car 3",
		["police4"] = "Police Car 4",
		["policeb"] = "Police Car 5",
		["policet"] = "Police Car 6",
		["sheriff"] = "Sheriff Car 1",
		["sheriff2"] = "Sheriff Car 2",
	}
}

Vehicle settings

Config.VehicleSettings = {
    ["car1"] = { -- Model name
        ["extras"] = {
            ["1"] = true, -- enable/disable the vehicle extra on spawn
            ["2"] = true,
            ["3"] = true,
            ["4"] = true,
            ["5"] = true,
            ["6"] = true,
            ["7"] = true,
            ["8"] = true,
            ["9"] = true,
            ["10"] = true,
            ["11"] = true,
            ["12"] = true,
            ["13"] = true,
        },
	["livery"] = 1, -- the livery number to be applied on spawn
    }
}

Vehicle trunk items

Config.CarItems = { -- items to add to the trunk when spawning a police vehicle
    [1] = {
        name = "heavyarmor", -- item name
        amount = 2, -- item amount
        info = {}, -- item info
        type = "item", -- type of item
        slot = 1, -- inventory slot item shows in
    },
    [2] = {
        name = "empty_evidence_bag",
        amount = 10,
        info = {},
        type = "item",
        slot = 2,
    },
    [3] = {
        name = "police_stormram",
        amount = 1,
        info = {},
        type = "item",
        slot = 3,
    },
}

Objects

Config.MaxSpikes = 5 -- maximum amount of spikes that can be spawned at once

Config.Objects = { -- availabe items for police to spawn
    ["cone"] = { -- https://gta-objects.xyz/
        model = `prop_roadcone02a`, -- object hash
        freeze = false -- enable/disable freezing the object in place
    },
    ["barrier"] = {
        model = `prop_barrier_work06a`,
        freeze = true
    },
    ["roadsign"] = {
        model = `prop_snow_sign_road_06g`,
        freeze = true
    },
    ["tent"] = {
        model = `prop_gazebo_03`,
        freeze = true
    },
    ["light"] = {
        model = `prop_worklight_03b`,
        freeze = true
    },
}

Security cameras

Config.SecurityCameras = {
    hideradar = false, -- enable/disable hiding the minimap while viewing cam
    cameras = {
        [1] = {
            label = "Pacific Bank CAM#1", -- camera label
            coords = vector3(257.45, 210.07, 109.08), -- location of the camera
            r = {x = -25.0, y = 0.0, z = 28.05}, -- camera rotation
            canRotate = false, -- enable/disable rotating the cam while viewing
            isOnline = true -- enable/disable the camera
        }
    }
}

Police radars

Config.Radars = { -- locations of radars that check for flagged plates
	vector4(-623.44421386719, -823.08361816406, 25.25704574585, 145.0),
	vector4(-652.44421386719, -854.08361816406, 24.55704574585, 325.0),
	vector4(1623.0114746094, 1068.9924316406, 80.903594970703, 84.0),
	vector4(-2604.8994140625, 2996.3391113281, 27.528566360474, 175.0),
	vector4(2136.65234375, -591.81469726563, 94.272926330566, 318.0),
	vector4(2117.5764160156, -558.51013183594, 95.683128356934, 158.0),
	vector4(406.89505004883, -969.06286621094, 29.436267852783, 33.0),
	vector4(657.315, -218.819, 44.06, 320.0),
	vector4(2118.287, 6040.027, 50.928, 172.0),
	vector4(-106.304, -1127.5530, 30.778, 230.0),
	vector4(-823.3688, -1146.980, 8.0, 300.0),
}

Evidence

Config.AmmoLabels = { -- the type of ammo and it's label when dropped
    ["AMMO_PISTOL"] = "9x19mm parabellum bullet",
    ["AMMO_SMG"] = "9x19mm parabellum bullet",
    ["AMMO_RIFLE"] = "7.62x39mm bullet",
    ["AMMO_MG"] = "7.92x57mm mauser bullet",
    ["AMMO_SHOTGUN"] = "12-gauge bullet",
    ["AMMO_SNIPER"] = "Large caliber bullet",
}

Evidence system

  • Random drop chance of bullet casings when player is shooting
  • Random chance of fingerprints left behind when player is not wearing gloves
  • Player statuses set when doing certain actions

Configuration

  • Found in qb-policejob/client/evidence.lua
local StatusList = { -- set a players status using an event
    ['fight'] = Lang:t('evidence.red_hands'),
    ['widepupils'] = Lang:t('evidence.wide_pupils'),
    ['redeyes'] = Lang:t('evidence.red_eyes'),
    ['weedsmell'] = Lang:t('evidence.weed_smell'),
    ['gunpowder'] = Lang:t('evidence.gunpowder'),
    ['chemicals'] = Lang:t('evidence.chemicals'),
    ['heavybreath'] = Lang:t('evidence.heavy_breathing'),
    ['sweat'] = Lang:t('evidence.sweat'),
    ['handbleed'] = Lang:t('evidence.handbleed'),
    ['confused'] = Lang:t('evidence.confused'),
    ['alcohol'] = Lang:t('evidence.alcohol'),
    ["heavyalcohol"] = Lang:t('evidence.heavy_alcohol'),
    ["agitated"] = Lang:t('evidence.agitated')
}

local WhitelistedWeapons = { -- weapons to ignore
    `weapon_unarmed`,
    `weapon_snowball`,
    `weapon_stungun`,
    `weapon_petrolcan`,
    `weapon_hazardcan`,
    `weapon_fireextinguisher`
}

Usage example

Setting statuses

RegisterCommand('setstatus', function(source, args)
    local status = args[1] -- the status type to set
    local time = args[2] -- the status duration
    TriggerClientEvent('evidence:client:SetStatus', source, status, time)
end)

Adding blood drop

RegisterCommand('addblooddrop', function(source, args)
    local ped = GetPlayerPed(source)
    local coords = GetEntityCoords(ped)
    local bloodId = args[1] -- blood id or index of table, can be whatever
    local Player = QBCore.Functions.GetPlayer(source)
    if not Player then return end
    local citizenid = Player.PlayerData.citizenid
    local bloodtype = Player.PlayerData.metadata['bloodtype']
    TriggerClientEvent('evidence:client:AddBlooddrop', source, bloodId, citizenid, bloodtype, coords)
end)

Adding fingerprint drop

RegisterCommand('addfingerprint', function(source, args)
    local ped = GetPlayerPed(source)
    local coords = GetEntityCoords(ped)
    local fingerId = args[1] -- fingerprint id or index of table, can be whatever
    local Player = QBCore.Functions.GetPlayer(source)
    if not Player then return end
    local fingerprint = Player.PlayerData.metadata['fingerprint']
    TriggerClientEvent('evidence:client:AddFingerPrint', source, fingerId, fingerprint, coords)
end)

Commands

/911p [message] - sends an alert to the police

This command sends an alert to all players with the job โ€˜policeโ€™. The alert will contain the given message and a blip is added to the police playerโ€™s map at your current location.

Permission level: user

  • message - (required) The message to send with the alert
/spikestrip - Place a spike strip

Places a Spike Strip object on the ground. The player must have the job of โ€˜policeโ€™ and be on duty to use.

Permission level: user

/grantlicense [id] [license] - give a player a license

Gives a player with the given id the license of the given license type.

This command can only be used by players with the job of โ€˜policeโ€™ above the minimum grade as set by Config.LicenseRank (Default is grade 2 and above).

Permission level: user

  • id - (required) The id of the player
  • license - (required) The license type (E.g. โ€œweaponโ€ or โ€œdriverโ€)
/revokelicense [id] [license] - remove a player's license

Removes a license of the given license type from a player with the given id.

This command can only be used by players with the job of โ€˜policeโ€™ above the minimum grade as set by Config.LicenseRank (Default is grade 2 and above).

Permission level: user

  • id - (required) The id of the player
  • license - (required) The license type (E.g. โ€œweaponโ€ or โ€œdriverโ€)
/pobject [type] - allows officer to spawn an object

Allows a player with the job of โ€˜policeโ€™ to spawn an object

Permission level: user

  • type - (required) The object type. Available types:
    • cone - a traffic cone
    • barrier - a roadblock barrier
    • roadsign - a road sign
    • tent - a gazebo for crime scenes
    • light - a work light
    • delete - delete an object
/cuff - cuff the nearest player

This command will hard cuff the nearest player (prevents movement) .

Can only be used by players with the job of โ€˜policeโ€™

Permission level: user

/sc - soft cuff the nearest player

This command will soft cuff the nearest player (allows movement).

Can only be used by players with the job of โ€˜policeโ€™

Permission level: user

/escort - escort the nearest player

This command will escort the nearest player.

Can only be used by players with the job of โ€˜policeโ€™

Permission level: user

/callsign [name] - allows officer to set a callsign

Allows a player with the job of โ€˜policeโ€™ to set their callsign. The callsign is visible as the name of the playerโ€™s blip on the map.

Permission level: user

  • name - (required) the callsign to be used
/jail - sends nearest player to jail

This command will send the nearest player to jail. A menu will open allowing the officer to set the jail time.

Can only be used by players with the job of โ€˜policeโ€™

Permission level: user

/unjail [id] - unjail a player

Unjail a player with the given id

Can only be used by players with the job of โ€˜policeโ€™

Permission level: user

  • id - (required) the id of the player
/clearcasings - clears bullet casings in the area

Clears any bullet casings with 10.0 units of your current location.

Can only be used by players with the job of โ€˜policeโ€™

Permission level: user

/clearblood - clears blood drops in the area

Clears any blood drops with 10.0 units of your current location.

Can only be used by players with the job of โ€˜policeโ€™

Permission level: user

/seizecash - seize cash from the nearest player

Seize cash from the nearest player.

Can only be used by players with the job of โ€˜policeโ€™

Permission level: user

/cam [id] - allows officer to see cam footage from selected spots

Allows a player with the job of โ€˜policeโ€™ to view security cameras. Security camera locations can be set up in the config file of qb-policejob. See Config.SecurityCameras.

Permission level: user

  • id - (required) the id of the camera
/flagplate [plate] [reason] - allows speed cameras to find a plate flagged

Allows speed cameras that can be set up in the config to find a flagged plate. See Config.Radars

Permission level: user

  • plate - (required) the plate to be flagged
  • reason - (required) the reason for the flag
/unflagplate [plate] - removes the flag from the plate

Removes the flag on the plate so cameras will no longer pick up the plate.

Permission level: user

  • plate - (required) the plate to be unflagged
/plateinfo [plate] - shows the info of the plate

Shows whether a plate is flagged and gives the reason if so.

Permission level: user

  • plate - (required) the plate to check
/depot [price] - allows officer to impound vehicle for a price

Allows a player with the job of โ€˜policeโ€™ to send a vehicle to the impound for the given price

Permission level: user

  • price - (required) the price set for removing vehicle from depot
/impound - impounds a vehicle without a price

impounds a vehicle without a price

Can only be used by a player with the job of โ€˜policeโ€™

Permission level: user

/paytow [id] - pays the tow driver $500

Pays the player with the given id $500. The player being paid must have the job of โ€˜towโ€™.

Permission level: user

  • id - (required) the id of the player being paid
/paylawyer [id] - pays a lawyer $500

Pays the player with the given id $500. The player being paid must have the job of โ€˜lawyerโ€™.

Permission level: user

  • id - (required) the id of the player being paid
/anklet - adds a tracking device to the closest player

Adds a tracking device to the closest player.

Can only be used by players with the job of โ€˜policeโ€™

Permission level: user

/ankletlocation [cid] - shows the location of the player

Shows the location of the player with the given cid

Can only be used by players with the job of โ€˜policeโ€™

Permission level: user

  • cid - (required) the citizen id of the player being checked
/takedrivinglicense - takes the players drivers license

Takes the driving license of the closest player

Can only be used by players with the job of โ€˜policeโ€™

Permission level: user

/takedna [id] - takes the players dna

Takes the dna of a player with a given id. Requires an empty evidence bag.

Permission level: user

  • id - (required) the id of the player

Items

  • handcuffs - Cuffs a player on use