223 lines
7.4 KiB
Lua
223 lines
7.4 KiB
Lua
|
QBCore = exports['qb-core']:GetCoreObject()
|
||
|
local PlayerData = {}
|
||
|
local mugshotInProgress, createdCamera, MugshotArray, playerData = false, 0, {}, nil
|
||
|
local handle, board, board_scaleform, overlay, ped, pedcoords, x, y, z, r, suspectheading, suspectx, suspecty, suspectz, board_pos, suspectPrisonX, suspectPrisonY, suspectPrisonZ
|
||
|
local MugShots = {}
|
||
|
|
||
|
-- Mugshot location ( Position is the default QBCore Prison Interior )
|
||
|
x = 483.8424
|
||
|
y = -996.7827
|
||
|
z = 25.4674
|
||
|
r = {x = 0.0, y = 0.0, z = 92.23}
|
||
|
--vector4(483.8424, -996.7827, 25.4674, 180.522),
|
||
|
suspectheading = 0.3623
|
||
|
suspectx = 484.0458
|
||
|
suspecty = -999.5985
|
||
|
suspectz = 25.4674
|
||
|
suspectPrisonX = 1827.63
|
||
|
suspectPrisonY = 2581.7
|
||
|
suspectPrisonZ = 44.89
|
||
|
|
||
|
-- Mugshot functions
|
||
|
|
||
|
local function TakeMugShot()
|
||
|
QBCore.Functions.TriggerCallback('ps-mdt:server:MugShotWebhook', function(MugShotWebhook)
|
||
|
exports['screenshot-basic']:requestScreenshotUpload(MugShotWebhook, 'files[]', {encoding = 'png'}, function(data)
|
||
|
local resp = json.decode(data)
|
||
|
table.insert(MugshotArray, resp.attachments[1].url)
|
||
|
end)
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
local function PhotoProcess(ped)
|
||
|
local rotation = suspectheading
|
||
|
for photo = 1, Config.MugPhotos, 1 do
|
||
|
Wait(1500)
|
||
|
TakeMugShot()
|
||
|
PlaySoundFromCoord(-1, "SHUTTER_FLASH", x, y, z, "CAMERA_FLASH_SOUNDSET", true, 5, 0)
|
||
|
Wait(1500)
|
||
|
rotation = rotation - 90.0
|
||
|
SetEntityHeading(ped, rotation)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local function MugShotCamera()
|
||
|
if createdCamera ~= 0 then
|
||
|
DestroyCam(createdCamera, 0)
|
||
|
createdCamera = 0
|
||
|
end
|
||
|
local cam = CreateCam("DEFAULT_SCRIPTED_CAMERA", 1)
|
||
|
SetCamCoord(cam, x, y, z)
|
||
|
SetCamRot(cam, r.x, r.y, r.z, 2)
|
||
|
RenderScriptCams(1, 0, 0, 1, 1)
|
||
|
Wait(250)
|
||
|
createdCamera = cam
|
||
|
CreateThread(function()
|
||
|
FreezeEntityPosition(ped, true)
|
||
|
SetPauseMenuActive(false)
|
||
|
while mugshotInProgress do
|
||
|
DisableAllControlActions(0)
|
||
|
EnableControlAction(0, 249, true)
|
||
|
EnableControlAction(0, 46, true)
|
||
|
Wait(1)
|
||
|
end
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
local function CreateNamedRenderTargetForModel(name, model)
|
||
|
local handle = 0
|
||
|
if not IsNamedRendertargetRegistered(name) then
|
||
|
RegisterNamedRendertarget(name, 0)
|
||
|
end
|
||
|
if not IsNamedRendertargetLinked(model) then
|
||
|
LinkNamedRendertarget(model)
|
||
|
end
|
||
|
if IsNamedRendertargetRegistered(name) then
|
||
|
handle = GetNamedRendertargetRenderId(name)
|
||
|
end
|
||
|
return handle
|
||
|
end
|
||
|
|
||
|
local function LoadScaleform (scaleform)
|
||
|
local handle = RequestScaleformMovie(scaleform)
|
||
|
if handle ~= 0 then
|
||
|
while not HasScaleformMovieLoaded(handle) do
|
||
|
Wait(0)
|
||
|
end
|
||
|
end
|
||
|
return handle
|
||
|
end
|
||
|
|
||
|
local function CallScaleformMethod (scaleform, method, ...)
|
||
|
local t
|
||
|
local args = { ... }
|
||
|
BeginScaleformMovieMethod(scaleform, method)
|
||
|
for k, v in ipairs(args) do
|
||
|
t = type(v)
|
||
|
if t == 'string' then
|
||
|
PushScaleformMovieMethodParameterString(v)
|
||
|
elseif t == 'number' then
|
||
|
if string.match(tostring(v), "%.") then
|
||
|
PushScaleformMovieFunctionParameterFloat(v)
|
||
|
else
|
||
|
PushScaleformMovieFunctionParameterInt(v)
|
||
|
end
|
||
|
elseif t == 'boolean' then
|
||
|
PushScaleformMovieMethodParameterBool(v)
|
||
|
end
|
||
|
end
|
||
|
EndScaleformMovieMethod()
|
||
|
end
|
||
|
|
||
|
local function PrepBoard()
|
||
|
CreateThread(function()
|
||
|
board_scaleform = LoadScaleform("mugshot_board_01")
|
||
|
handle = CreateNamedRenderTargetForModel("ID_Text", `prop_police_id_text`)
|
||
|
while handle do
|
||
|
HideHudAndRadarThisFrame()
|
||
|
SetTextRenderId(handle)
|
||
|
Set_2dLayer(4)
|
||
|
SetScriptGfxDrawBehindPausemenu(1)
|
||
|
DrawScaleformMovie(board_scaleform, 0.405, 0.37, 0.81, 0.74, 255, 255, 255, 255, 0)
|
||
|
SetScriptGfxDrawBehindPausemenu(0)
|
||
|
SetTextRenderId(GetDefaultScriptRendertargetRenderId())
|
||
|
SetScriptGfxDrawBehindPausemenu(1)
|
||
|
SetScriptGfxDrawBehindPausemenu(0)
|
||
|
Wait(0)
|
||
|
end
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
local function MakeBoard()
|
||
|
title = "Bolingbroke Fængsel"
|
||
|
center = playerData.charinfo.firstname.. " ".. playerData.charinfo.lastname
|
||
|
footer = playerData.citizenid
|
||
|
header = playerData.charinfo.birthdate
|
||
|
CallScaleformMethod(board_scaleform, 'SET_BOARD', title, center, footer, header, 0, 1337, 116)
|
||
|
end
|
||
|
|
||
|
local function PlayerBoard()
|
||
|
RequestModel(`prop_police_id_board`)
|
||
|
RequestModel(`prop_police_id_text`)
|
||
|
while not HasModelLoaded(`prop_police_id_board`) or not HasModelLoaded(`prop_police_id_text`) do
|
||
|
Wait(1)
|
||
|
end
|
||
|
board = CreateObject(`prop_police_id_board`, pedcoords, true, true, false)
|
||
|
overlay = CreateObject(`prop_police_id_text`, pedcoords, true, true, false)
|
||
|
AttachEntityToEntity(overlay, board, -1, 4103, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, false, false, false, false, 2, true)
|
||
|
SetModelAsNoLongerNeeded(`prop_police_id_board`)
|
||
|
SetModelAsNoLongerNeeded(`prop_police_id_text`)
|
||
|
SetCurrentPedWeapon(ped, `weapon_unarmed`, 1)
|
||
|
ClearPedWetness(ped)
|
||
|
ClearPedBloodDamage(ped)
|
||
|
AttachEntityToEntity(board, ped, GetPedBoneIndex(ped, 28422), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 2, 1)
|
||
|
end
|
||
|
|
||
|
local function DestoryCamera()
|
||
|
DestroyCam(createdCamera, 0)
|
||
|
RenderScriptCams(0, 0, 1, 1, 1)
|
||
|
SetFocusEntity(GetPlayerPed(ped))
|
||
|
ClearPedTasksImmediately(ped)
|
||
|
FreezeEntityPosition(ped, false)
|
||
|
DeleteObject(overlay)
|
||
|
DeleteObject(board)
|
||
|
handle = nil
|
||
|
createdCamera = 0
|
||
|
end
|
||
|
|
||
|
RegisterNetEvent('cqc-mugshot:client:trigger', function()
|
||
|
ped = PlayerPedId()
|
||
|
pedcoords = GetEntityCoords(ped)
|
||
|
CreateThread(function()
|
||
|
playerData = QBCore.Functions.GetPlayerData()
|
||
|
MugshotArray, mugshotInProgress = {}, true
|
||
|
local citizenid = playerData.citizenid
|
||
|
local animDict = 'mp_character_creation@lineup@male_a'
|
||
|
QBCore.Functions.RequestAnimDict(animDict)
|
||
|
PrepBoard()
|
||
|
Wait(250)
|
||
|
MakeBoard()
|
||
|
MugShotCamera()
|
||
|
SetEntityCoords(ped, suspectx, suspecty, suspectz)
|
||
|
SetEntityHeading(ped, suspectheading)
|
||
|
PlayerBoard()
|
||
|
TaskPlayAnim(ped, animDict, "loop_raised", 8.0, 8.0, -1, 49, 0, false, false, false)
|
||
|
PhotoProcess(ped)
|
||
|
if createdCamera ~= 0 then
|
||
|
DestoryCamera()
|
||
|
SetEntityHeading(ped, suspectheading)
|
||
|
ClearPedSecondaryTask(GetPlayerPed(ped))
|
||
|
end
|
||
|
TriggerServerEvent('psmdt-mugshot:server:MDTupload', playerData.citizenid, MugshotArray)
|
||
|
mugshotInProgress = false
|
||
|
|
||
|
Wait(5000)
|
||
|
SetEntityCoords(ped, suspectPrisonX, suspectPrisonY, suspectPrisonZ)
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
RegisterNUICallback("sendToJail", function(data, cb)
|
||
|
QBCore.Functions.TriggerCallback('ps-mdt:server:MugShotWebhook', function(MugShotWebhook)
|
||
|
if MugShotWebhook ~= '' then
|
||
|
local citizenId, sentence = data.citizenId, data.sentence
|
||
|
|
||
|
-- Gets the player id from the citizenId
|
||
|
local p = promise.new()
|
||
|
QBCore.Functions.TriggerCallback('mdt:server:GetPlayerSourceId', function(result)
|
||
|
p:resolve(result)
|
||
|
end, citizenId)
|
||
|
|
||
|
local targetSourceId = Citizen.Await(p)
|
||
|
|
||
|
if sentence > 0 then
|
||
|
if Config.UseCQCMugshot then
|
||
|
TriggerServerEvent('cqc-mugshot:server:triggerSuspect', targetSourceId)
|
||
|
end
|
||
|
Citizen.Wait(5000)
|
||
|
-- Uses qb-policejob JailPlayer event
|
||
|
TriggerServerEvent("police:server:JailPlayer", targetSourceId, sentence)
|
||
|
end
|
||
|
end
|
||
|
end)
|
||
|
end)
|