Scripts/resources/[qb]/[qb_jobs]/qb-policejob/client/camera.lua

206 lines
6.8 KiB
Lua
Raw Permalink Normal View History

2024-12-29 20:06:22 +00:00
local currentCameraIndex = 0
local createdCamera = 0
local function GetCurrentTime()
local hours = GetClockHours()
local minutes = GetClockMinutes()
if hours < 10 then
hours = tostring(0 .. GetClockHours())
end
if minutes < 10 then
minutes = tostring(0 .. GetClockMinutes())
end
return tostring(hours .. ":" .. minutes)
end
local function ChangeSecurityCamera(x, y, z, r)
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
end
local function CloseSecurityCamera()
DestroyCam(createdCamera, 0)
RenderScriptCams(0, 0, 1, 1, 1)
createdCamera = 0
ClearTimecycleModifier("scanline_cam_cheap")
SetFocusEntity(GetPlayerPed(PlayerId()))
if Config.SecurityCameras.hideradar then
DisplayRadar(true)
end
FreezeEntityPosition(GetPlayerPed(PlayerId()), false)
end
local function InstructionButton(ControlButton)
ScaleformMovieMethodAddParamPlayerNameString(ControlButton)
end
local function InstructionButtonMessage(text)
BeginTextCommandScaleformString("STRING")
AddTextComponentScaleform(text)
EndTextCommandScaleformString()
end
local function CreateInstuctionScaleform(scaleform)
scaleform = RequestScaleformMovie(scaleform)
while not HasScaleformMovieLoaded(scaleform) do
Wait(0)
end
PushScaleformMovieFunction(scaleform, "CLEAR_ALL")
PopScaleformMovieFunctionVoid()
PushScaleformMovieFunction(scaleform, "SET_CLEAR_SPACE")
PushScaleformMovieFunctionParameterInt(200)
PopScaleformMovieFunctionVoid()
PushScaleformMovieFunction(scaleform, "SET_DATA_SLOT")
PushScaleformMovieFunctionParameterInt(1)
InstructionButton(GetControlInstructionalButton(1, 194, true))
InstructionButtonMessage(Lang:t('info.close_camera'))
PopScaleformMovieFunctionVoid()
PushScaleformMovieFunction(scaleform, "DRAW_INSTRUCTIONAL_BUTTONS")
PopScaleformMovieFunctionVoid()
PushScaleformMovieFunction(scaleform, "SET_BACKGROUND_COLOUR")
PushScaleformMovieFunctionParameterInt(0)
PushScaleformMovieFunctionParameterInt(0)
PushScaleformMovieFunctionParameterInt(0)
PushScaleformMovieFunctionParameterInt(80)
PopScaleformMovieFunctionVoid()
return scaleform
end
-- Events
RegisterNetEvent('police:client:ActiveCamera', function(cameraId)
if Config.SecurityCameras.cameras[cameraId] then
DoScreenFadeOut(250)
while not IsScreenFadedOut() do
Wait(0)
end
SendNUIMessage({
type = "enablecam",
label = Config.SecurityCameras.cameras[cameraId].label,
id = cameraId,
connected = Config.SecurityCameras.cameras[cameraId].isOnline,
time = GetCurrentTime(),
})
local firstCamx = Config.SecurityCameras.cameras[cameraId].coords.x
local firstCamy = Config.SecurityCameras.cameras[cameraId].coords.y
local firstCamz = Config.SecurityCameras.cameras[cameraId].coords.z
local firstCamr = Config.SecurityCameras.cameras[cameraId].r
SetFocusArea(firstCamx, firstCamy, firstCamz, firstCamx, firstCamy, firstCamz)
ChangeSecurityCamera(firstCamx, firstCamy, firstCamz, firstCamr)
currentCameraIndex = cameraId
DoScreenFadeIn(250)
elseif cameraId == 0 then
DoScreenFadeOut(250)
while not IsScreenFadedOut() do
Wait(0)
end
CloseSecurityCamera()
SendNUIMessage({
type = "disablecam",
})
DoScreenFadeIn(250)
else
QBCore.Functions.Notify(Lang:t("error.no_camera"), "error")
end
end)
RegisterNetEvent('police:client:DisableAllCameras', function()
for k, _ in pairs(Config.SecurityCameras.cameras) do
Config.SecurityCameras.cameras[k].isOnline = false
end
end)
RegisterNetEvent('police:client:EnableAllCameras', function()
for k, _ in pairs(Config.SecurityCameras.cameras) do
Config.SecurityCameras.cameras[k].isOnline = true
end
end)
RegisterNetEvent('police:client:SetCamera', function(key, isOnline)
if type(key) == 'table' and table.type(key) == 'array' then
for _, v in pairs(key) do
Config.SecurityCameras.cameras[v].isOnline = isOnline
end
elseif type(key) == 'number' then
Config.SecurityCameras.cameras[key].isOnline = isOnline
else
error('police:client:SetCamera did not receive the right type of key\nreceived type: ' .. type(key) .. '\nreceived value: ' .. key)
end
end)
-- Threads
CreateThread(function()
while true do
local sleep = 2000
if createdCamera ~= 0 then
sleep = 5
local instructions = CreateInstuctionScaleform("instructional_buttons")
DrawScaleformMovieFullscreen(instructions, 255, 255, 255, 255, 0)
SetTimecycleModifier("scanline_cam_cheap")
SetTimecycleModifierStrength(1.0)
if Config.SecurityCameras.hideradar then
DisplayRadar(false)
end
-- CLOSE CAMERAS
if IsControlJustPressed(1, 177) then
DoScreenFadeOut(250)
while not IsScreenFadedOut() do
Wait(0)
end
CloseSecurityCamera()
SendNUIMessage({
type = "disablecam",
})
DoScreenFadeIn(250)
end
---------------------------------------------------------------------------
-- CAMERA ROTATION CONTROLS
---------------------------------------------------------------------------
if Config.SecurityCameras.cameras[currentCameraIndex].canRotate then
local getCameraRot = GetCamRot(createdCamera, 2)
-- ROTATE UP
if IsControlPressed(0, 32) then
if getCameraRot.x <= 0.0 then
SetCamRot(createdCamera, getCameraRot.x + 0.7, 0.0, getCameraRot.z, 2)
end
end
-- ROTATE DOWN
if IsControlPressed(0, 8) then
if getCameraRot.x >= -50.0 then
SetCamRot(createdCamera, getCameraRot.x - 0.7, 0.0, getCameraRot.z, 2)
end
end
-- ROTATE LEFT
if IsControlPressed(0, 34) then
SetCamRot(createdCamera, getCameraRot.x, 0.0, getCameraRot.z + 0.7, 2)
end
-- ROTATE RIGHT
if IsControlPressed(0, 9) then
SetCamRot(createdCamera, getCameraRot.x, 0.0, getCameraRot.z - 0.7, 2)
end
end
end
Wait(sleep)
end
end)