👮
qb-policejob
Obey & survive!
- This resource manages police functions and interactions
- Police stash, garage and armory
- Cuffing players functions
- Evidence system including blood DNA drops and fingerprints
- Anklet Tracker for police to track players
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
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)
},
},
}
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
}
}
}
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",
}
}
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
}
}
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,
},
}
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
},
}
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
}
}
}
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),
}
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",
}
- 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
- 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`
}
Example code is done on the SERVER side
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)
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)
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)
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
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")
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")
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
- handcuffs - Cuffs a player on use
Last modified 7mo ago