224 lines
7.2 KiB
Lua
224 lines
7.2 KiB
Lua
-- Variables
|
|
QBCore = exports['qb-core']:GetCoreObject()
|
|
isHandcuffed = false
|
|
cuffType = 1
|
|
isEscorted = false
|
|
PlayerJob = {}
|
|
local DutyBlips = {}
|
|
|
|
-- Functions
|
|
local function CreateDutyBlips(playerId, playerLabel, playerJob, playerLocation)
|
|
local ped = GetPlayerPed(playerId)
|
|
local blip = GetBlipFromEntity(ped)
|
|
local pedinvehicle = IsPedInAnyVehicle(ped)
|
|
if not DoesBlipExist(blip) then
|
|
if NetworkIsPlayerActive(playerId) then
|
|
blip = AddBlipForEntity(ped)
|
|
else
|
|
blip = AddBlipForCoord(playerLocation.x, playerLocation.y, playerLocation.z)
|
|
end
|
|
if pedinvehicle then
|
|
SetBlipSprite(blip, 812)
|
|
ShowHeadingIndicatorOnBlip(blip, false)
|
|
else
|
|
SetBlipSprite(blip, 409)
|
|
ShowHeadingIndicatorOnBlip(blip, true)
|
|
end
|
|
SetBlipRotation(blip, math.ceil(playerLocation.w))
|
|
SetBlipScale(blip, 1.0)
|
|
if playerJob == "police" then
|
|
SetBlipColour(blip, 38)
|
|
else
|
|
SetBlipColour(blip, 5)
|
|
end
|
|
SetBlipAsShortRange(blip, true)
|
|
BeginTextCommandSetBlipName('STRING')
|
|
AddTextComponentString(playerLabel)
|
|
EndTextCommandSetBlipName(blip)
|
|
DutyBlips[#DutyBlips+1] = blip
|
|
end
|
|
|
|
if GetBlipFromEntity(PlayerPedId()) == blip then
|
|
-- Ensure we remove our own blip.
|
|
RemoveBlip(blip)
|
|
end
|
|
end
|
|
|
|
-- Events
|
|
AddEventHandler('QBCore:Client:OnPlayerLoaded', function()
|
|
local player = QBCore.Functions.GetPlayerData()
|
|
PlayerJob = player.job
|
|
isHandcuffed = false
|
|
TriggerServerEvent("police:server:SetHandcuffStatus", false)
|
|
TriggerServerEvent("police:server:UpdateBlips")
|
|
TriggerServerEvent("police:server:UpdateCurrentCops")
|
|
|
|
if player.metadata.tracker then
|
|
local trackerClothingData = {
|
|
outfitData = {
|
|
["accessory"] = {
|
|
item = 13,
|
|
texture = 0
|
|
}
|
|
}
|
|
}
|
|
TriggerEvent('qb-clothing:client:loadOutfit', trackerClothingData)
|
|
else
|
|
local trackerClothingData = {
|
|
outfitData = {
|
|
["accessory"] = {
|
|
item = -1,
|
|
texture = 0
|
|
}
|
|
}
|
|
}
|
|
TriggerEvent('qb-clothing:client:loadOutfit', trackerClothingData)
|
|
end
|
|
|
|
if PlayerJob and PlayerJob.name ~= "police" then
|
|
if DutyBlips then
|
|
for _, v in pairs(DutyBlips) do
|
|
RemoveBlip(v)
|
|
end
|
|
end
|
|
DutyBlips = {}
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('QBCore:Client:OnPlayerUnload', function()
|
|
TriggerServerEvent('police:server:UpdateBlips')
|
|
TriggerServerEvent("police:server:SetHandcuffStatus", false)
|
|
TriggerServerEvent("police:server:UpdateCurrentCops")
|
|
isHandcuffed = false
|
|
isEscorted = false
|
|
PlayerJob = {}
|
|
ClearPedTasks(PlayerPedId())
|
|
DetachEntity(PlayerPedId(), true, false)
|
|
if DutyBlips then
|
|
for _, v in pairs(DutyBlips) do
|
|
RemoveBlip(v)
|
|
end
|
|
DutyBlips = {}
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent("QBCore:Client:SetDuty", function(newDuty)
|
|
PlayerJob.onduty = newDuty
|
|
end)
|
|
|
|
RegisterNetEvent('QBCore:Client:OnJobUpdate', function(JobInfo)
|
|
if JobInfo.name ~= "police" then
|
|
if DutyBlips then
|
|
for _, v in pairs(DutyBlips) do
|
|
RemoveBlip(v)
|
|
end
|
|
end
|
|
DutyBlips = {}
|
|
end
|
|
PlayerJob = JobInfo
|
|
TriggerServerEvent("police:server:UpdateBlips")
|
|
end)
|
|
|
|
RegisterNetEvent('police:client:sendBillingMail', function(amount)
|
|
SetTimeout(math.random(2500, 4000), function()
|
|
local gender = Lang:t('info.mr')
|
|
if QBCore.Functions.GetPlayerData().charinfo.gender == 1 then
|
|
gender = Lang:t('info.mrs')
|
|
end
|
|
local charinfo = QBCore.Functions.GetPlayerData().charinfo
|
|
TriggerServerEvent('qb-phone:server:sendNewMail', {
|
|
sender = Lang:t('email.sender'),
|
|
subject = Lang:t('email.subject'),
|
|
message = Lang:t('email.message', {value = gender, value2 = charinfo.lastname, value3 = amount}),
|
|
button = {}
|
|
})
|
|
end)
|
|
end)
|
|
|
|
RegisterNetEvent('police:client:UpdateBlips', function(players)
|
|
if PlayerJob and (PlayerJob.name == 'police' or PlayerJob.name == 'ambulance') and
|
|
PlayerJob.onduty then
|
|
if DutyBlips then
|
|
for _, v in pairs(DutyBlips) do
|
|
RemoveBlip(v)
|
|
end
|
|
end
|
|
DutyBlips = {}
|
|
if players then
|
|
for _, data in pairs(players) do
|
|
local id = GetPlayerFromServerId(data.source)
|
|
CreateDutyBlips(id, data.label, data.job, data.location)
|
|
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('police:client:policeAlert', function(coords, text)
|
|
local street1, street2 = GetStreetNameAtCoord(coords.x, coords.y, coords.z)
|
|
local street1name = GetStreetNameFromHashKey(street1)
|
|
local street2name = GetStreetNameFromHashKey(street2)
|
|
local newText = text .. ' ' .. street1name .. ' ' .. street2name
|
|
QBCore.Functions.Notify(newText, 'info')
|
|
PlaySound(-1, "Lose_1st", "GTAO_FM_Events_Soundset", 0, 0, 1)
|
|
local transG = 250
|
|
local blip = AddBlipForCoord(coords.x, coords.y, coords.z)
|
|
local blip2 = AddBlipForCoord(coords.x, coords.y, coords.z)
|
|
local blipText = Lang:t('info.blip_text', {value = text})
|
|
SetBlipSprite(blip, 60)
|
|
SetBlipSprite(blip2, 161)
|
|
SetBlipColour(blip, 1)
|
|
SetBlipColour(blip2, 1)
|
|
SetBlipDisplay(blip, 4)
|
|
SetBlipDisplay(blip2, 8)
|
|
SetBlipAlpha(blip, transG)
|
|
SetBlipAlpha(blip2, transG)
|
|
SetBlipScale(blip, 0.8)
|
|
SetBlipScale(blip2, 2.0)
|
|
SetBlipAsShortRange(blip, false)
|
|
SetBlipAsShortRange(blip2, false)
|
|
PulseBlip(blip2)
|
|
BeginTextCommandSetBlipName('STRING')
|
|
AddTextComponentString(blipText)
|
|
EndTextCommandSetBlipName(blip)
|
|
while transG ~= 0 do
|
|
Wait(180 * 4)
|
|
transG = transG - 1
|
|
SetBlipAlpha(blip, transG)
|
|
SetBlipAlpha(blip2, transG)
|
|
if transG == 0 then
|
|
RemoveBlip(blip)
|
|
return
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterNetEvent('police:client:SendToJail', function(time)
|
|
TriggerServerEvent("police:server:SetHandcuffStatus", false)
|
|
isHandcuffed = false
|
|
isEscorted = false
|
|
ClearPedTasks(PlayerPedId())
|
|
DetachEntity(PlayerPedId(), true, false)
|
|
TriggerEvent("prison:client:Enter", time)
|
|
end)
|
|
|
|
RegisterNetEvent('police:client:SendPoliceEmergencyAlert', function()
|
|
local Player = QBCore.Functions.GetPlayerData()
|
|
TriggerServerEvent('police:server:policeAlert', Lang:t('info.officer_down', {lastname = Player.charinfo.lastname, callsign = Player.metadata.callsign}))
|
|
TriggerServerEvent('hospital:server:ambulanceAlert', Lang:t('info.officer_down', {lastname = Player.charinfo.lastname, callsign = Player.metadata.callsign}))
|
|
end)
|
|
|
|
-- Threads
|
|
CreateThread(function()
|
|
for _, station in pairs(Config.Locations["stations"]) do
|
|
local blip = AddBlipForCoord(station.coords.x, station.coords.y, station.coords.z)
|
|
SetBlipSprite(blip, 60)
|
|
SetBlipAsShortRange(blip, true)
|
|
SetBlipScale(blip, 0.8)
|
|
SetBlipColour(blip, 29)
|
|
BeginTextCommandSetBlipName("STRING")
|
|
AddTextComponentString(station.label)
|
|
EndTextCommandSetBlipName(blip)
|
|
end
|
|
end)
|