Scripts/resources/[ps]/ps-mdt/client/cl_mugshot.lua

223 lines
7.4 KiB
Lua
Raw Normal View History

2024-12-29 20:28:24 +00:00
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)