From e0fd82e59bd08c90240e7d136a2f1cdae16cf9ad Mon Sep 17 00:00:00 2001 From: Kakarot <57848836+GhzGarage@users.noreply.github.com> Date: Mon, 20 May 2024 05:30:27 -0500 Subject: [PATCH] Inventory Update --- client/anpr.lua | 7 +- client/heli.lua | 5 +- client/interactions.lua | 21 +--- client/job.lua | 217 +++++++++++----------------------------- client/main.lua | 5 +- config.lua | 171 +++++++++---------------------- server/main.lua | 114 +++++++++++++-------- 7 files changed, 190 insertions(+), 350 deletions(-) diff --git a/client/anpr.lua b/client/anpr.lua index 235f37f9..a81a4807 100644 --- a/client/anpr.lua +++ b/client/anpr.lua @@ -27,7 +27,7 @@ local function HandleSpeedCam(speedCam, radarID) sprite = 488, color = 1, scale = 0.9, - text = Lang:t('info.camera_speed', { radarid = radarID}) + text = Lang:t('info.camera_speed', { radarid = radarID }) } local street1, street2 = table.unpack(GetStreetNameAtCoord(coords.x, coords.y, coords.z)) TriggerServerEvent('police:server:FlaggedPlateTriggered', radarID, plate, street1, street2, blipsettings) @@ -45,8 +45,9 @@ end CreateThread(function() while true do if IsPedInAnyVehicle(PlayerPedId(), false) then - for key, value in pairs(Config.Radars) do - HandleSpeedCam(value, key) + for i = 1, #Config.Radars do + local value = Config.Radars[i] + HandleSpeedCam(value, i) end Wait(200) else diff --git a/client/heli.lua b/client/heli.lua index 2de6f940..c5ce5ed8 100644 --- a/client/heli.lua +++ b/client/heli.lua @@ -9,20 +9,17 @@ local toggle_rappel = 154 -- control id to rappel out of the heli. Default: IN local toggle_spotlight = 74 -- control id to toggle the front spotlight Default: INPUT_VEH_HEADLIGHT (H) local toggle_lock_on = 22 -- control id to lock onto a vehicle with the camera. Default is INPUT_SPRINT (spacebar) local spotlight_state = false - --- Script starts here local helicam = false local fov = (fov_max + fov_min) * 0.5 local vision_state = 0 -- 0 is normal, 1 is nightmode, 2 is thermal vision - local isScanning = false local isScanned = false local scanValue = 0 - local vehicle_detected = nil local locked_on_vehicle = nil -- Functions + local function IsPlayerInPolmav() local lPed = PlayerPedId() local vehicle = GetVehiclePedIsIn(lPed) diff --git a/client/interactions.lua b/client/interactions.lua index 9eb2849d..3910c5dd 100644 --- a/client/interactions.lua +++ b/client/interactions.lua @@ -86,17 +86,6 @@ RegisterNetEvent('police:client:PutInVehicle', function() end end) -RegisterNetEvent('police:client:SearchPlayer', function() - local player, distance = QBCore.Functions.GetClosestPlayer() - if player ~= -1 and distance < 2.5 then - local playerId = GetPlayerServerId(player) - TriggerServerEvent('inventory:server:OpenInventory', 'otherplayer', playerId) - TriggerServerEvent('police:server:SearchPlayer', playerId) - else - QBCore.Functions.Notify(Lang:t('error.none_nearby'), 'error') - end -end) - RegisterNetEvent('police:client:SeizeCash', function() local player, distance = QBCore.Functions.GetClosestPlayer() if player ~= -1 and distance < 2.5 then @@ -117,7 +106,6 @@ RegisterNetEvent('police:client:SeizeDriverLicense', function() end end) - RegisterNetEvent('police:client:RobPlayer', function() local player, distance = QBCore.Functions.GetClosestPlayer() local ped = PlayerPedId() @@ -134,19 +122,14 @@ RegisterNetEvent('police:client:RobPlayer', function() animDict = 'random@shop_robbery', anim = 'robbery_action_b', flags = 16, - }, {}, {}, function() -- Done + }, {}, {}, function() local plyCoords = GetEntityCoords(playerPed) local pos = GetEntityCoords(ped) if #(pos - plyCoords) < 2.5 then - StopAnimTask(ped, 'random@shop_robbery', 'robbery_action_b', 1.0) - TriggerServerEvent('inventory:server:OpenInventory', 'otherplayer', playerId) - TriggerEvent('inventory:server:RobPlayer', playerId) + TriggerServerEvent('police:server:RobPlayer', playerId) else QBCore.Functions.Notify(Lang:t('error.none_nearby'), 'error') end - end, function() -- Cancel - StopAnimTask(ped, 'random@shop_robbery', 'robbery_action_b', 1.0) - QBCore.Functions.Notify(Lang:t('error.canceled'), 'error') end) end else diff --git a/client/job.lua b/client/job.lua index d6e09482..6a5de60a 100644 --- a/client/job.lua +++ b/client/job.lua @@ -152,7 +152,6 @@ function TakeOutVehicle(vehicleInfo) end TaskWarpPedIntoVehicle(PlayerPedId(), veh, -1) TriggerEvent('vehiclekeys:client:SetOwner', QBCore.Functions.GetPlate(veh)) - TriggerServerEvent('inventory:server:addTrunkItems', QBCore.Functions.GetPlate(veh), Config.CarItems) SetVehicleEngineOn(veh, true, true) end, vehicleInfo, coords, true) end @@ -394,9 +393,10 @@ end) RegisterNetEvent('police:client:EvidenceStashDrawer', function() local pos = GetEntityCoords(PlayerPedId()) local currentEvidence = 0 - for k, v in pairs(Config.Locations['evidence']) do - if #(pos - v) < 2 then - currentEvidence = k + for i = 1, #Config.Locations['evidence'] do + local v = Config.Locations['evidence'][i] + if #(pos - vector3(v.x, v.y, v.z)) < 2 then + currentEvidence = i end end local takeLoc = Config.Locations['evidence'][currentEvidence] @@ -418,11 +418,7 @@ RegisterNetEvent('police:client:EvidenceStashDrawer', function() }) if drawer then if not drawer.slot then return end - TriggerServerEvent('inventory:server:OpenInventory', 'stash', Lang:t('info.current_evidence', { value = currentEvidence, value2 = drawer.slot }), { - maxweight = 4000000, - slots = 500, - }) - TriggerEvent('inventory:client:SetCurrentStash', Lang:t('info.current_evidence', { value = currentEvidence, value2 = drawer.slot })) + TriggerServerEvent('qb-policejob:server:evidence', Lang:t('info.current_evidence', { value = currentEvidence, value2 = drawer.slot })) end else exports['qb-menu']:closeMenu() @@ -445,34 +441,6 @@ RegisterNetEvent('qb-police:client:scanFingerPrint', function() end end) -RegisterNetEvent('qb-police:client:openArmoury', function() - local authorizedItemsList = {} - local playerGrade = PlayerJob.grade.level - for grade = 0, playerGrade do - if Config.Items[grade] then - for _, item in ipairs(Config.Items[grade]) do - local itemInfo = QBCore.Shared.Items[item.name] - if itemInfo then - authorizedItemsList[#authorizedItemsList + 1] = { - name = item.name, - price = item.price, - amount = item.amount, - info = item.info or {}, - type = itemInfo.type, - slot = #authorizedItemsList + 1 - } - end - end - end - end - local authorizedItems = { - label = 'Police Armory', - slots = #authorizedItemsList, - items = authorizedItemsList - } - TriggerServerEvent('inventory:server:OpenInventory', 'shop', 'police', authorizedItems) -end) - RegisterNetEvent('qb-police:client:spawnHelicopter', function(k) if IsPedInAnyVehicle(PlayerPedId(), false) then QBCore.Functions.DeleteVehicle(GetVehiclePedIsIn(PlayerPedId())) @@ -494,19 +462,6 @@ RegisterNetEvent('qb-police:client:spawnHelicopter', function(k) end end) -RegisterNetEvent('qb-police:client:openStash', function() - TriggerServerEvent('inventory:server:OpenInventory', 'stash', 'policestash_' .. QBCore.Functions.GetPlayerData().citizenid) - TriggerEvent('inventory:client:SetCurrentStash', 'policestash_' .. QBCore.Functions.GetPlayerData().citizenid) -end) - -RegisterNetEvent('qb-police:client:openTrash', function() - TriggerServerEvent('inventory:server:OpenInventory', 'stash', 'policetrash', { - maxweight = 4000000, - slots = 300, - }) - TriggerEvent('inventory:client:SetCurrentStash', 'policetrash') -end) - --##### Threads #####-- local dutylisten = false @@ -538,8 +493,7 @@ local function stash() if inStash and PlayerJob.type == 'leo' then if PlayerJob.onduty then sleep = 5 end if IsControlJustReleased(0, 38) then - TriggerServerEvent('inventory:server:OpenInventory', 'stash', 'policestash_' .. QBCore.Functions.GetPlayerData().citizenid) - TriggerEvent('inventory:client:SetCurrentStash', 'policestash_' .. QBCore.Functions.GetPlayerData().citizenid) + TriggerServerEvent('qb-policejob:server:stash') break end else @@ -557,11 +511,7 @@ local function trash() if inTrash and PlayerJob.type == 'leo' then if PlayerJob.onduty then sleep = 5 end if IsControlJustReleased(0, 38) then - TriggerServerEvent('inventory:server:OpenInventory', 'stash', 'policetrash', { - maxweight = 4000000, - slots = 300, - }) - TriggerEvent('inventory:client:SetCurrentStash', 'policetrash') + TriggerServerEvent('qb-policejob:server:trash') break end else @@ -589,24 +539,6 @@ local function fingerprint() end) end --- Armoury Thread -local function armoury() - CreateThread(function() - while true do - Wait(0) - if inArmoury and PlayerJob.type == 'leo' then - if PlayerJob.onduty then sleep = 5 end - if IsControlJustReleased(0, 38) then - TriggerEvent('qb-police:client:openArmoury') - break - end - else - break - end - end - end) -end - -- Evidence Thread local function evidence() CreateThread(function() @@ -686,9 +618,10 @@ end if Config.UseTarget then CreateThread(function() -- Toggle Duty - for k, v in pairs(Config.Locations['duty']) do - exports['qb-target']:AddCircleZone('PoliceDuty_' .. k, vector3(v.x, v.y, v.z), 0.5, { - name = 'PoliceDuty_' .. k, + for i = 1, #Config.Locations['duty'] do + local v = Config.Locations['duty'][i] + exports['qb-target']:AddCircleZone('PoliceDuty_' .. i, vector3(v.x, v.y, v.z), 0.5, { + name = 'PoliceDuty_' .. i, useZ = true, debugPoly = false, }, { @@ -706,16 +639,17 @@ if Config.UseTarget then end -- Personal Stash - for k, v in pairs(Config.Locations['stash']) do - exports['qb-target']:AddCircleZone('PoliceStash_' .. k, vector3(v.x, v.y, v.z), 1.0, { - name = 'PoliceStash_' .. k, + for i = 1, #Config.Locations['stash'] do + local v = Config.Locations['stash'][i] + exports['qb-target']:AddCircleZone('PoliceStash_' .. i, vector3(v.x, v.y, v.z), 1.0, { + name = 'PoliceStash_' .. i, useZ = true, debugPoly = false, }, { options = { { - type = 'client', - event = 'qb-police:client:openStash', + type = 'server', + event = 'qb-policejob:server:stash', icon = 'fas fa-dungeon', label = Lang:t('target.open_personal_stash'), jobType = 'leo', @@ -726,16 +660,17 @@ if Config.UseTarget then end -- Police Trash - for k, v in pairs(Config.Locations['trash']) do - exports['qb-target']:AddCircleZone('PoliceTrash_' .. k, vector3(v.x, v.y, v.z), 0.5, { - name = 'PoliceTrash_' .. k, + for i = 1, #Config.Locations['trash'] do + local v = Config.Locations['trash'][i] + exports['qb-target']:AddCircleZone('PoliceTrash_' .. i, vector3(v.x, v.y, v.z), 0.5, { + name = 'PoliceTrash_' .. i, useZ = true, debugPoly = false, }, { options = { { - type = 'client', - event = 'qb-police:client:openTrash', + type = 'server', + event = 'qb-policejob:server:trash', icon = 'fas fa-trash', label = Lang:t('target.open_trash'), jobType = 'leo', @@ -746,9 +681,10 @@ if Config.UseTarget then end -- Fingerprint - for k, v in pairs(Config.Locations['fingerprint']) do - exports['qb-target']:AddCircleZone('PoliceFingerprint_' .. k, vector3(v.x, v.y, v.z), 0.5, { - name = 'PoliceFingerprint_' .. k, + for i = 1, #Config.Locations['fingerprint'] do + local v = Config.Locations['fingerprint'][i] + exports['qb-target']:AddCircleZone('PoliceFingerprint_' .. i, vector3(v.x, v.y, v.z), 0.5, { + name = 'PoliceFingerprint_' .. i, useZ = true, debugPoly = false, }, { @@ -765,30 +701,11 @@ if Config.UseTarget then }) end - -- Armoury - for k, v in pairs(Config.Locations['armory']) do - exports['qb-target']:AddCircleZone('PoliceArmory_' .. k, vector3(v.x, v.y, v.z), 1.0, { - name = 'PoliceArmory_' .. k, - useZ = true, - debugPoly = false, - }, { - options = { - { - type = 'client', - event = 'qb-police:client:openArmoury', - icon = 'fas fa-gun', - label = Lang:t('target.open_armory'), - jobType = 'leo', - }, - }, - distance = 1.5 - }) - end - -- Evidence - for k, v in pairs(Config.Locations['evidence']) do - exports['qb-target']:AddCircleZone('PoliceEvidence_' .. k, vector3(v.x, v.y, v.z), 0.5, { - name = 'PoliceEvidence_' .. k, + for i = 1, #Config.Locations['evidence'] do + local v = Config.Locations['evidence'][i] + exports['qb-target']:AddCircleZone('PoliceEvidence_' .. i, vector3(v.x, v.y, v.z), 0.5, { + name = 'PoliceEvidence_' .. i, useZ = true, debugPoly = false, }, { @@ -808,9 +725,10 @@ if Config.UseTarget then else -- Toggle Duty local dutyZones = {} - for _, v in pairs(Config.Locations['duty']) do + for i = 1, #Config.Locations['duty'] do + local v = Config.Locations['duty'][i] dutyZones[#dutyZones + 1] = BoxZone:Create( - vector3(vector3(v.x, v.y, v.z)), 1.75, 1, { + vector3(v.x, v.y, v.z), 1.75, 1, { name = 'box_zone', debugPoly = false, minZ = v.z - 1, @@ -837,9 +755,10 @@ else -- Personal Stash local stashZones = {} - for _, v in pairs(Config.Locations['stash']) do + for i = 1, #Config.Locations['stash'] do + local v = Config.Locations['stash'][i] stashZones[#stashZones + 1] = BoxZone:Create( - vector3(vector3(v.x, v.y, v.z)), 1.5, 1.5, { + vector3(v.x, v.y, v.z), 1.5, 1.5, { name = 'box_zone', debugPoly = false, minZ = v.z - 1, @@ -863,9 +782,10 @@ else -- Police Trash local trashZones = {} - for _, v in pairs(Config.Locations['trash']) do + for i = 1, #Config.Locations['trash'] do + local v = Config.Locations['trash'][i] trashZones[#trashZones + 1] = BoxZone:Create( - vector3(vector3(v.x, v.y, v.z)), 1, 1.75, { + vector3(v.x, v.y, v.z), 1, 1.75, { name = 'box_zone', debugPoly = false, minZ = v.z - 1, @@ -889,9 +809,10 @@ else -- Fingerprints local fingerprintZones = {} - for _, v in pairs(Config.Locations['fingerprint']) do + for i = 1, #Config.Locations['fingerprint'] do + local v = Config.Locations['fingerprint'][i] fingerprintZones[#fingerprintZones + 1] = BoxZone:Create( - vector3(vector3(v.x, v.y, v.z)), 2, 1, { + vector3(v.x, v.y, v.z), 2, 1, { name = 'box_zone', debugPoly = false, minZ = v.z - 1, @@ -913,37 +834,12 @@ else end end) - -- Armoury - local armouryZones = {} - for _, v in pairs(Config.Locations['armory']) do - armouryZones[#armouryZones + 1] = BoxZone:Create( - vector3(vector3(v.x, v.y, v.z)), 5, 1, { - name = 'box_zone', - debugPoly = false, - minZ = v.z - 1, - maxZ = v.z + 1, - }) - end - - local armouryCombo = ComboZone:Create(armouryZones, { name = 'armouryCombo', debugPoly = false }) - armouryCombo:onPlayerInOut(function(isPointInside) - if isPointInside then - inArmoury = true - if PlayerJob.type == 'leo' and PlayerJob.onduty then - exports['qb-core']:DrawText(Lang:t('info.enter_armory'), 'left') - armoury() - end - else - inArmoury = false - exports['qb-core']:HideText() - end - end) - -- Evidence local evidenceZones = {} - for _, v in pairs(Config.Locations['evidence']) do + for i = 1, #Config.Locations['evidence'] do + local v = Config.Locations['evidence'][i] evidenceZones[#evidenceZones + 1] = BoxZone:Create( - vector3(vector3(v.x, v.y, v.z)), 2, 1, { + vector3(v.x, v.y, v.z), 2, 1, { name = 'box_zone', debugPoly = false, minZ = v.z - 1, @@ -969,9 +865,10 @@ end CreateThread(function() -- Helicopter local helicopterZones = {} - for _, v in pairs(Config.Locations['helicopter']) do + for i = 1, #Config.Locations['helicopter'] do + local v = Config.Locations['helicopter'][i] helicopterZones[#helicopterZones + 1] = BoxZone:Create( - vector3(vector3(v.x, v.y, v.z)), 10, 10, { + vector3(v.x, v.y, v.z), 10, 10, { name = 'box_zone', debugPoly = false, minZ = v.z - 1, @@ -1001,7 +898,8 @@ CreateThread(function() -- Police Impound local impoundZones = {} - for _, v in pairs(Config.Locations['impound']) do + for i = 1, #Config.Locations['impound'] do + local v = Config.Locations['impound'][i] impoundZones[#impoundZones + 1] = BoxZone:Create( vector3(v.x, v.y, v.z), 1, 1, { name = 'box_zone', @@ -1023,9 +921,10 @@ CreateThread(function() else local currentSelection = 0 - for k, v in pairs(Config.Locations['impound']) do + for i = 1, #Config.Locations['impound'] do + local v = Config.Locations['impound'][i] if #(point - vector3(v.x, v.y, v.z)) < 4 then - currentSelection = k + currentSelection = i end end exports['qb-menu']:showHeader({ @@ -1050,7 +949,8 @@ CreateThread(function() -- Police Garage local garageZones = {} - for _, v in pairs(Config.Locations['vehicle']) do + for i = 1, #Config.Locations['vehicle'] do + local v = Config.Locations['vehicle'][i] garageZones[#garageZones + 1] = BoxZone:Create( vector3(v.x, v.y, v.z), 3, 3, { name = 'box_zone', @@ -1071,9 +971,10 @@ CreateThread(function() else local currentSelection = 0 - for k, v in pairs(Config.Locations['vehicle']) do + for i = 1, #Config.Locations['vehicle'] do + local v = Config.Locations['vehicle'][i] if #(point - vector3(v.x, v.y, v.z)) < 4 then - currentSelection = k + currentSelection = i end end exports['qb-menu']:showHeader({ diff --git a/client/main.lua b/client/main.lua index f24724ae..82dd5a9e 100644 --- a/client/main.lua +++ b/client/main.lua @@ -139,7 +139,7 @@ end) RegisterNetEvent('police:client:UpdateBlips', function(players) if PlayerJob and (PlayerJob.type == 'leo' or PlayerJob.type == 'ems') and - PlayerJob.onduty then + PlayerJob.onduty then if DutyBlips then for _, v in pairs(DutyBlips) do RemoveBlip(v) @@ -210,7 +210,8 @@ end) -- Threads CreateThread(function() - for _, station in pairs(Config.Locations['stations']) do + for i = 1, #Config.Locations['stations'] do + local station = Config.Locations['stations'][i] local blip = AddBlipForCoord(station.coords.x, station.coords.y, station.coords.z) SetBlipSprite(blip, 60) SetBlipAsShortRange(blip, true) diff --git a/config.lua b/config.lua index 35c5f4e3..2a63b0d1 100644 --- a/config.lua +++ b/config.lua @@ -9,61 +9,58 @@ Config.PoliceHelicopter = 'POLMAV' Config.FuelResource = 'LegacyFuel' -- supports any that has a GetFuel() and SetFuel() export Config.AmmoLabels = { - ['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', + 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', } Config.Objects = { - ['cone'] = { model = `prop_roadcone02a`, freeze = false }, - ['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 }, + cone = { model = `prop_roadcone02a`, freeze = false }, + 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.Locations = { - ['duty'] = { - [1] = vector3(440.085, -974.924, 30.689), - [2] = vector3(-449.811, 6012.909, 31.815), + duty = { + vector3(440.085, -974.924, 30.689), + vector3(-449.811, 6012.909, 31.815), }, - ['vehicle'] = { - [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), + vehicle = { + vector4(448.159, -1017.41, 28.562, 90.654), + vector4(471.13, -1024.05, 28.17, 274.5), + vector4(-455.39, 6002.02, 31.34, 87.93), }, - ['stash'] = { - [1] = vector3(453.075, -980.124, 30.889), + stash = { + vector3(453.075, -980.124, 30.889), }, - ['impound'] = { - [1] = vector3(436.68, -1007.42, 27.32), - [2] = vector3(-436.14, 5982.63, 31.34), + impound = { + vector3(436.68, -1007.42, 27.32), + vector3(-436.14, 5982.63, 31.34), }, - ['helicopter'] = { - [1] = vector4(449.168, -981.325, 43.691, 87.234), - [2] = vector4(-475.43, 5988.353, 31.716, 31.34), + helicopter = { + vector4(449.168, -981.325, 43.691, 87.234), + vector4(-475.43, 5988.353, 31.716, 31.34), }, - ['armory'] = { - [1] = vector3(462.23, -981.12, 30.68), + trash = { + vector3(439.0907, -976.746, 30.776), }, - ['trash'] = { - [1] = vector3(439.0907, -976.746, 30.776), + fingerprint = { + vector3(460.9667, -989.180, 24.92), }, - ['fingerprint'] = { - [1] = vector3(460.9667, -989.180, 24.92), + evidence = { + vector3(442.1722, -996.067, 30.689), + vector3(451.7031, -973.232, 30.689), + vector3(455.1456, -985.462, 30.689), }, - ['evidence'] = { - [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'] = { - [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) }, + stations = { + { label = 'Police Station', coords = vector4(428.23, -984.28, 29.76, 3.5) }, + { label = 'Prison', coords = vector4(1845.903, 2585.873, 45.672, 272.249) }, + { label = 'Police Station Paleto', coords = vector4(-451.55, 6014.25, 31.716, 223.81) }, }, } @@ -121,96 +118,20 @@ Config.Radars = { vector4(-823.3688, -1146.980, 8.0, 300.0), } -Config.CarItems = { - { name = 'heavyarmor', amount = 2 }, - { name = 'empty_evidence_bag', amount = 10 }, - { name = 'police_stormram', amount = 1 }, -} - Config.AuthorizedVehicles = { -- Grade 0 and higher [0] = { - ['police'] = 'Police Car 1', - ['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', + police = 'Police Car 1', + 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.Items = { - -- Grade 0 and higher - [0] = { - { - name = 'weapon_pistol', - price = 0, - amount = 50, - info = { - attachments = { - { component = 'COMPONENT_AT_PI_FLSH', label = 'Flashlight' }, - } - } - }, - { - name = 'weapon_stungun', - price = 0, - amount = 50, - info = { - attachments = { - { component = 'COMPONENT_AT_AR_FLSH', label = 'Flashlight' }, - } - } - }, - { - name = 'weapon_pumpshotgun', - price = 0, - amount = 50, - info = { - attachments = { - { component = 'COMPONENT_AT_AR_FLSH', label = 'Flashlight' }, - } - } - }, - { - name = 'weapon_smg', - price = 0, - amount = 50, - info = { - attachments = { - { component = 'COMPONENT_AT_SCOPE_MACRO_02', label = '1x Scope' }, - { component = 'COMPONENT_AT_AR_FLSH', label = 'Flashlight' }, - } - } - }, - { - name = 'weapon_carbinerifle', - price = 0, - amount = 50, - info = { - attachments = { - { component = 'COMPONENT_AT_AR_FLSH', label = 'Flashlight' }, - { component = 'COMPONENT_AT_SCOPE_MEDIUM', label = '3x Scope' }, - } - } - }, - { name = 'weapon_nightstick', price = 0, amount = 50 }, - { name = 'weapon_flashlight', price = 0, amount = 50 }, - { name = 'pistol_ammo', price = 0, amount = 50 }, - { name = 'smg_ammo', price = 0, amount = 50 }, - { name = 'shotgun_ammo', price = 0, amount = 50 }, - { name = 'rifle_ammo', price = 0, amount = 50 }, - { name = 'handcuffs', price = 0, amount = 50 }, - { name = 'empty_evidence_bag', price = 0, amount = 50 }, - { name = 'police_stormram', price = 0, amount = 50 }, - { name = 'armor', price = 0, amount = 50 }, - { name = 'radio', price = 0, amount = 50 }, - { name = 'heavyarmor', price = 0, amount = 50 }, - } -} - Config.VehicleSettings = { ['car1'] = { --- Model name ['extras'] = { diff --git a/server/main.lua b/server/main.lua index 3dcfccf7..3f7d75e7 100644 --- a/server/main.lua +++ b/server/main.lua @@ -12,7 +12,8 @@ local updatingCops = false local function UpdateBlips() local dutyPlayers = {} local players = QBCore.Functions.GetQBPlayers() - for _, v in pairs(players) do + for i = 1, #players do + local v = players[i] if v and (v.PlayerData.job.type == 'leo' or v.PlayerData.job.type == 'ems') and v.PlayerData.job.onduty then local coords = GetEntityCoords(GetPlayerPed(v.PlayerData.source)) local heading = GetEntityHeading(GetPlayerPed(v.PlayerData.source)) @@ -472,14 +473,14 @@ QBCore.Commands.Add('takedna', Lang:t('commands.takedna'), { { name = 'id', help local Player = QBCore.Functions.GetPlayer(src) local OtherPlayer = QBCore.Functions.GetPlayer(tonumber(args[1])) if not OtherPlayer or Player.PlayerData.job.type ~= 'leo' or not Player.PlayerData.job.onduty then return end - if Player.Functions.RemoveItem('empty_evidence_bag', 1) then + if exports['qb-inventory']:RemoveItem(src, 'empty_evidence_bag', 1, false, 'qb-policejob:takedna') then local info = { label = Lang:t('info.dna_sample'), type = 'dna', dnalabel = DnaHash(OtherPlayer.PlayerData.citizenid) } - if not Player.Functions.AddItem('filled_evidence_bag', 1, false, info) then return end - TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items['filled_evidence_bag'], 'add') + if not exports['qb-inventory']:AddItem(src, 'filled_evidence_bag', 1, false, info, 'qb-policejob:takedna') then return end + TriggerClientEvent('qb-inventory:client:ItemBox', src, QBCore.Shared.Items['filled_evidence_bag'], 'add') else TriggerClientEvent('QBCore:Notify', src, Lang:t('error.have_evidence_bag'), 'error') end @@ -528,8 +529,11 @@ end) QBCore.Functions.CreateUseableItem('moneybag', function(source, item) local src = source local Player = QBCore.Functions.GetPlayer(src) - if not Player or not Player.Functions.GetItemByName('moneybag') or not item.info or item.info == '' or Player.PlayerData.job.type == 'leo' or not Player.Functions.RemoveItem('moneybag', 1, item.slot) then return end - Player.Functions.AddMoney('cash', tonumber(item.info.cash), 'used-moneybag') + if not Player then return end + if not Player.Functions.GetItemByName('moneybag') or not item.info or item.info == '' then return end + if not Player.PlayerData.job.type == 'leo' then return end + if not exports['qb-inventory']:RemoveItem(src, 'moneybag', 1, item.slot, 'qb-policejob:moneybag') then return end + Player.Functions.AddMoney('cash', tonumber(item.info.cash), 'qb-policejob:moneybag') end) -- Callbacks @@ -629,14 +633,65 @@ QBCore.Functions.CreateCallback('police:server:IsPoliceForcePresent', function(_ end) -- Events + AddEventHandler('onResourceStart', function(resourceName) if resourceName == GetCurrentResourceName() then CreateThread(function() - MySQL.query("DELETE FROM stashitems WHERE stash = 'policetrash'") + MySQL.query("DELETE FROM inventories WHERE identifier = 'policetrash'") end) end end) +RegisterNetEvent('qb-policejob:server:stash', function() + local src = source + local Player = QBCore.Functions.GetPlayer(src) + if not Player then return end + if Player.PlayerData.job.type ~= 'leo' then return end + local citizenId = Player.PlayerData.citizenid + local stashName = 'policestash_' .. citizenId + exports['qb-inventory']:OpenInventory(src, stashName) +end) + +RegisterNetEvent('qb-policejob:server:trash', function() + local src = source + local Player = QBCore.Functions.GetPlayer(src) + if not Player then return end + if Player.PlayerData.job.type ~= 'leo' then return end + exports['qb-inventory']:OpenInventory(src, 'policetrash', { + maxweight = 4000000, + slots = 300, + }) +end) + +RegisterNetEvent('qb-policejob:server:evidence', function(currentEvidence) + local src = source + local Player = QBCore.Functions.GetPlayer(src) + if not Player then return end + if Player.PlayerData.job.type ~= 'leo' then return end + exports['qb-inventory']:OpenInventory(src, currentEvidence, { + maxweight = 4000000, + slots = 500, + }) +end) + +RegisterNetEvent('police:server:SearchPlayer', function() + local src = source + local Player = QBCore.Functions.GetPlayer(src) + if not Player then return end + local PlayerData = Player.PlayerData + if PlayerData.job.type ~= 'leo' then return end + local player, distance = QBCore.Functions.GetClosestPlayer() + if player ~= -1 and distance < 2.5 then + local SearchedPlayer = QBCore.Functions.GetPlayer(player) + if not SearchedPlayer then return end + exports['qb-inventory']:OpenInventoryById(src, playerId) + TriggerClientEvent('QBCore:Notify', src, Lang:t('info.cash_found', { cash = SearchedPlayer.PlayerData.money['cash'] })) + TriggerClientEvent('QBCore:Notify', player, Lang:t('info.being_searched')) + else + TriggerClientEvent('QBCore:Notify', src, Lang:t('error.none_nearby'), 'error') + end +end) + RegisterNetEvent('police:server:policeAlert', function(text) local src = source local ped = GetPlayerPed(src) @@ -831,21 +886,6 @@ end) -- end -- end) -RegisterNetEvent('police:server:SearchPlayer', function(playerId) - local src = source - local playerPed = GetPlayerPed(src) - local targetPed = GetPlayerPed(playerId) - local playerCoords = GetEntityCoords(playerPed) - local targetCoords = GetEntityCoords(targetPed) - if #(playerCoords - targetCoords) > 2.5 then return DropPlayer(src, 'Attempted exploit abuse') end - - local SearchedPlayer = QBCore.Functions.GetPlayer(playerId) - if not QBCore.Functions.GetPlayer(src) or not SearchedPlayer then return end - - TriggerClientEvent('QBCore:Notify', src, Lang:t('info.cash_found', { cash = SearchedPlayer.PlayerData.money['cash'] })) - TriggerClientEvent('QBCore:Notify', SearchedPlayer.PlayerData.source, Lang:t('info.being_searched')) -end) - RegisterNetEvent('police:server:SeizeCash', function(playerId) local src = source local playerPed = GetPlayerPed(src) @@ -853,16 +893,15 @@ RegisterNetEvent('police:server:SeizeCash', function(playerId) local playerCoords = GetEntityCoords(playerPed) local targetCoords = GetEntityCoords(targetPed) if #(playerCoords - targetCoords) > 2.5 then return DropPlayer(src, 'Attempted exploit abuse') end - local Player = QBCore.Functions.GetPlayer(src) local SearchedPlayer = QBCore.Functions.GetPlayer(playerId) if not Player or not SearchedPlayer then return end - + if Player.PlayerData.job.type ~= 'leo' then return end local moneyAmount = SearchedPlayer.PlayerData.money['cash'] local info = { cash = moneyAmount } SearchedPlayer.Functions.RemoveMoney('cash', moneyAmount, 'police-cash-seized') - Player.Functions.AddItem('moneybag', 1, false, info) - TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items['moneybag'], 'add') + exports['qb-inventory']:AddItem(src, 'moneybag', 1, false, info, 'police:server:SeizeCash') + TriggerClientEvent('qb-inventory:client:ItemBox', src, QBCore.Shared.Items['moneybag'], 'add') TriggerClientEvent('QBCore:Notify', SearchedPlayer.PlayerData.source, Lang:t('info.cash_confiscated')) end) @@ -902,14 +941,11 @@ RegisterNetEvent('police:server:RobPlayer', function(playerId) local money = SearchedPlayer.PlayerData.money['cash'] Player.Functions.AddMoney('cash', money, 'police-player-robbed') SearchedPlayer.Functions.RemoveMoney('cash', money, 'police-player-robbed') + exports['qb-inventory']:OpenInventoryById(src, playerId) TriggerClientEvent('QBCore:Notify', SearchedPlayer.PlayerData.source, Lang:t('info.cash_robbed', { money = money })) TriggerClientEvent('QBCore:Notify', Player.PlayerData.source, Lang:t('info.stolen_money', { stolen = money })) end) -RegisterNetEvent('police:server:UpdateBlips', function() - -- KEEP FOR REF BUT NOT NEEDED ANYMORE. -end) - RegisterNetEvent('police:server:spawnObject', function(type) local src = source local objectId = CreateObjectId() @@ -973,9 +1009,9 @@ end) RegisterNetEvent('evidence:server:AddBlooddropToInventory', function(bloodId, bloodInfo) local src = source local Player = QBCore.Functions.GetPlayer(src) - if Player.Functions.RemoveItem('empty_evidence_bag', 1) then - if Player.Functions.AddItem('filled_evidence_bag', 1, false, bloodInfo) then - TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items['filled_evidence_bag'], 'add') + if exports['qb-inventory']:RemoveItem(src, 'empty_evidence_bag', 1, false, 'evidence:server:AddBlooddropToInventory') then + if exports['qb-inventory']:AddItem(src, 'filled_evidence_bag', 1, false, bloodInfo, 'evidence:server:AddBlooddropToInventory') then + TriggerClientEvent('qb-inventory:client:ItemBox', src, QBCore.Shared.Items['filled_evidence_bag'], 'add') TriggerClientEvent('evidence:client:RemoveBlooddrop', -1, bloodId) BloodDrops[bloodId] = nil end @@ -987,9 +1023,9 @@ end) RegisterNetEvent('evidence:server:AddFingerprintToInventory', function(fingerId, fingerInfo) local src = source local Player = QBCore.Functions.GetPlayer(src) - if Player.Functions.RemoveItem('empty_evidence_bag', 1) then - if Player.Functions.AddItem('filled_evidence_bag', 1, false, fingerInfo) then - TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items['filled_evidence_bag'], 'add') + if exports['qb-inventory']:RemoveItem(src, 'empty_evidence_bag', 1, false, 'evidence:server:AddFingerprintToInventory') then + if exports['qb-inventory']:AddItem(src, 'filled_evidence_bag', 1, false, fingerInfo, 'evidence:server:AddFingerprintToInventory') then + TriggerClientEvent('qb-inventory:client:ItemBox', src, QBCore.Shared.Items['filled_evidence_bag'], 'add') TriggerClientEvent('evidence:client:RemoveFingerprint', -1, fingerId) FingerDrops[fingerId] = nil end @@ -1041,9 +1077,9 @@ end) RegisterNetEvent('evidence:server:AddCasingToInventory', function(casingId, casingInfo) local src = source local Player = QBCore.Functions.GetPlayer(src) - if Player.Functions.RemoveItem('empty_evidence_bag', 1) then - if Player.Functions.AddItem('filled_evidence_bag', 1, false, casingInfo) then - TriggerClientEvent('inventory:client:ItemBox', src, QBCore.Shared.Items['filled_evidence_bag'], 'add') + if exports['qb-inventory']:RemoveItem(src, 'empty_evidence_bag', 1, false, 'evidence:server:AddCasingToInventory') then + if exports['qb-inventory']:AddItem(src, 'filled_evidence_bag', 1, false, casingInfo, 'evidence:server:AddCasingToInventory') then + TriggerClientEvent('qb-inventory:client:ItemBox', src, QBCore.Shared.Items['filled_evidence_bag'], 'add') TriggerClientEvent('evidence:client:RemoveCasing', -1, casingId) Casings[casingId] = nil end