diff --git a/server-data/resources/[bpt_addons]/bpt_policejob/client/main.lua b/server-data/resources/[bpt_addons]/bpt_policejob/client/main.lua index 14251c797..1b67c9e79 100644 --- a/server-data/resources/[bpt_addons]/bpt_policejob/client/main.lua +++ b/server-data/resources/[bpt_addons]/bpt_policejob/client/main.lua @@ -82,7 +82,6 @@ function OpenCloakroomMenu() TriggerServerEvent("esx_service:notifyAllInService", notification, "police") TriggerServerEvent("esx_service:disableService", "police") - TriggerEvent("bpt_policejob:updateBlip") ESX.ShowNotification(TranslateCap("service_out")) end end, "police") @@ -110,7 +109,6 @@ function OpenCloakroomMenu() } TriggerServerEvent("esx_service:notifyAllInService", notification, "police") - TriggerEvent("bpt_policejob:updateBlip") ESX.ShowNotification(TranslateCap("service_in")) end end, "police") @@ -126,7 +124,6 @@ function OpenCloakroomMenu() } TriggerServerEvent("esx_service:notifyAllInService", notification, "police") - TriggerEvent("bpt_policejob:updateBlip") ESX.ShowNotification(TranslateCap("service_in")) end else @@ -197,8 +194,6 @@ function OpenArmoryMenu(station) OpenGetWeaponMenu() elseif data.current.value == "put_weapon" then OpenPutWeaponMenu() - elseif data.current.value == "buy_weapons" then - OpenBuyWeaponsMenu() elseif data.current.value == "put_stock" then OpenPutStocksMenu() elseif data.current.value == "get_stock" then @@ -469,7 +464,7 @@ function OpenBodySearchMenu(player) end ESX.OpenContext("right", elements, function(_, element) - local data = { current = element } + data = { current = element } if data.current.value then TriggerServerEvent("bpt_policejob:confiscatePlayerItem", GetPlayerServerId(player), data.current.itemType, data.current.value, data.current.amount) OpenBodySearchMenu(player) @@ -515,7 +510,7 @@ function OpenFineCategoryMenu(player, category) { unselectable = true, icon = "fas fa-scroll", title = TranslateCap("fine") }, } - for k, fine in ipairs(fineList[category]) do + for _, fine in ipairs(fineList[category]) do elements[#elements + 1] = { icon = "fas fa-scroll", title = ('%s %s'):format(fine.label, TranslateCap("armory_item", ESX.Math.GroupDigits(fine.amount))), @@ -585,7 +580,7 @@ function LookupVehicle(elementF) ESX.ShowNotification(TranslateCap("search_database_error_invalid")) else ESX.TriggerServerCallback("bpt_policejob:getVehicleInfos", function(retrivedInfo) - local elements = { + elements = { { unselectable = true, icon = "fas fa-car", title = element.title }, { unselectable = true, icon = "fas fa-car", title = TranslateCap("plate", retrivedInfo.plate) }, } @@ -596,7 +591,7 @@ function LookupVehicle(elementF) elements[#elements + 1] = { unselectable = true, icon = "fas fa-user", title = TranslateCap("owner", retrivedInfo.owner) } end - ESX.OpenContext("right", elements, nil, function(menu) + ESX.OpenContext("right", elements, nil, function() OpenPoliceActionsMenu() end) end, data.value) @@ -726,116 +721,6 @@ function OpenPutWeaponMenu() end) end -function OpenBuyWeaponsMenu() - local elements = { - { unselectable = true, icon = "fas fa-gun", title = TranslateCap("armory_weapontitle") }, - } - local playerPed = PlayerPedId() - - for k, v in ipairs(Config.AuthorizedWeapons[ESX.PlayerData.job.grade_name]) do - local weaponNum, weapon = ESX.GetWeapon(v.weapon) - local components, label = {}, nil - local hasWeapon = HasPedGotWeapon(playerPed, joaat(v.weapon), false) - - if v.components then - for i = 1, #v.components do - if v.components[i] then - local component = weapon.components[i] - local hasComponent = HasPedGotWeaponComponent(playerPed, joaat(v.weapon), component.hash) - - if hasComponent then - label = ('%s: %s'):format(component.label, TranslateCap("armory_owned")) - else - if v.components[i] > 0 then - label = ('%s: %s'):format(component.label, TranslateCap("armory_item", ESX.Math.GroupDigits(v.components[i]))) - else - label = ('%s: %s'):format(component.label, TranslateCap("armory_free")) - end - end - - components[#components + 1] = { - icon = "fas fa-gun", - title = label, - componentLabel = component.label, - hash = component.hash, - name = component.name, - price = v.components[i], - hasComponent = hasComponent, - componentNum = i, - } - end - end - end - - if hasWeapon and v.components then - label = ('%s: >'):format(weapon.label) - elseif hasWeapon and not v.components then - label = ('%s: %s'):format(weapon.label, TranslateCap("armory_owned")) - else - if v.price > 0 then - label = ('%s: %s'):format(weapon.label, TranslateCap("armory_item", ESX.Math.GroupDigits(v.price))) - else - label = ('%s: %s'):format(weapon.label, TranslateCap("armory_free")) - end - end - - elements[#elements + 1] = { - icon = "fas fa-gun", - title = label, - weaponLabel = weapon.label, - name = weapon.name, - components = components, - price = v.price, - hasWeapon = hasWeapon, - } - end - - ESX.OpenContext("right", elements, function(menu, element) - local data = { current = element } - if data.current.hasWeapon then - if #data.current.components > 0 then - OpenWeaponComponentShop(data.current.components, data.current.name, menu) - end - else - ESX.TriggerServerCallback("bpt_policejob:buyWeapon", function(bought) - if bought then - if data.current.price > 0 then - ESX.ShowNotification(TranslateCap("armory_bought", data.current.weaponLabel, ESX.Math.GroupDigits(data.current.price))) - end - - ESX.CloseContext() - OpenBuyWeaponsMenu() - else - ESX.ShowNotification(TranslateCap("armory_money")) - end - end, data.current.name, 1) - end - end) -end - -function OpenWeaponComponentShop(components, weaponName, parentShop) - ESX.OpenContext("right", components, function(menu, element) - local data = { current = element } - if data.current.hasComponent then - ESX.ShowNotification(TranslateCap("armory_hascomponent")) - else - ESX.TriggerServerCallback("bpt_policejob:buyWeapon", function(bought) - if bought then - if data.current.price > 0 then - ESX.ShowNotification(TranslateCap("armory_bought", data.current.componentLabel, ESX.Math.GroupDigits(data.current.price))) - end - - ESX.CloseContext() - parentShop.close() - OpenBuyWeaponsMenu() - else - ESX.ShowNotification(TranslateCap("armory_money")) - end - end, weaponName, 2, data.current.componentNum) - end - end) -end - function OpenGetStocksMenu() ESX.TriggerServerCallback("bpt_policejob:getStockItems", function(items) local elements = { @@ -939,16 +824,6 @@ function OpenPutStocksMenu() end) end -function OnPlayerData(k, v) - if k ~= "job" then - return - end - if v.name == "police" then - Wait(1000) - TriggerServerEvent("bpt_policejob:forceBlip") - end -end - AddEventHandler("bpt_policejob:hasEnteredMarker", function(station, part, partNum) if part == "Cloakroom" then CurrentAction = "menu_cloakroom" @@ -991,8 +866,8 @@ AddEventHandler("bpt_policejob:hasEnteredEntityZone", function(entity) end if GetEntityModel(entity) == `p_ld_stinger_s` then - local playerPed = PlayerPedId() - local coords = GetEntityCoords(playerPed) + playerPed = PlayerPedId() + local _ = GetEntityCoords(playerPed) if IsPedInAnyVehicle(playerPed, false) then local vehicle = GetVehiclePedIsIn(playerPed) @@ -1210,7 +1085,7 @@ end) -- Create blips CreateThread(function() - for k, v in pairs(Config.PoliceStations) do + for _, v in pairs(Config.PoliceStations) do local blip = AddBlipForCoord(v.Blip.Coords) SetBlipSprite(blip, v.Blip.Sprite) @@ -1475,40 +1350,6 @@ function CreateBlip(id) end end -RegisterNetEvent("bpt_policejob:updateBlip") -AddEventHandler("bpt_policejob:updateBlip", function() - -- Refresh all blips - for k, existingBlip in pairs(blipsCops) do - RemoveBlip(existingBlip) - end - - -- Clean the blip table - blipsCops = {} - - -- Enable blip? - if Config.EnableESXService and not playerInService then - return - end - - if not Config.EnableJobBlip then - return - end - - -- Is the player a cop? In that case show all the blips for other cops - if ESX.PlayerData.job and ESX.PlayerData.job.name == "police" then - ESX.TriggerServerCallback("bpt_society:getOnlinePlayers", function(players) - for i = 1, #players, 1 do - if players[i].job.name == "police" then - local id = GetPlayerFromServerId(players[i].source) - if NetworkIsPlayerActive(id) and GetPlayerPed(id) ~= PlayerPedId() then - CreateBlip(id) - end - end - end - end) - end -end) - AddEventHandler("esx:onPlayerSpawn", function(spawn) isDead = false TriggerEvent("bpt_policejob:unrestrain") @@ -1561,9 +1402,3 @@ function ImpoundVehicle(vehicle) ESX.ShowNotification(TranslateCap("impound_successful")) currentTask.busy = false end - -if ESX.PlayerLoaded and ESX.PlayerData.job == "police" then - SetTimeout(1000, function() - TriggerServerEvent("bpt_policejob:forceBlip") - end) -end diff --git a/server-data/resources/[bpt_addons]/bpt_policejob/client/vehicle.lua b/server-data/resources/[bpt_addons]/bpt_policejob/client/vehicle.lua index f9138322d..0c56abefb 100644 --- a/server-data/resources/[bpt_addons]/bpt_policejob/client/vehicle.lua +++ b/server-data/resources/[bpt_addons]/bpt_policejob/client/vehicle.lua @@ -1,3 +1,5 @@ +---@diagnostic disable: undefined-global + local spawnedVehicles = {} function OpenVehicleSpawnerMenu(type, station, part, partNum) diff --git a/server-data/resources/[bpt_addons]/bpt_policejob/config.lua b/server-data/resources/[bpt_addons]/bpt_policejob/config.lua index 40e662da4..6c14253b0 100644 --- a/server-data/resources/[bpt_addons]/bpt_policejob/config.lua +++ b/server-data/resources/[bpt_addons]/bpt_policejob/config.lua @@ -11,7 +11,6 @@ Config.EnableESXOptionalneeds = false -- Enable if you're using esx_optionalneed Config.EnableLicenses = true -- Enable if you're using esx_license. Config.EnableHandcuffTimer = true -- Enable handcuff timer? will unrestrain player after the time ends. Config.HandcuffTimer = 10 * 60000 -- 10 minutes. -Config.EnableJobBlip = false -- Enable blips for cops on duty, requires bpt_society. Config.EnableESXService = false -- Enable esx service? Config.MaxInService = -1 -- How many people can be in service at once? Set as -1 to have no limit Config.EnableFinePresets = false -- Set to false to use a custom input fields for fines @@ -20,368 +19,368 @@ Config.OxInventory = ESX.GetConfig().OxInventory Config.PoliceStations = { - LSPD = { - - Blip = { - Coords = vector3(425.1, -979.5, 30.7), - Sprite = 60, - Display = 4, - Scale = 1.2, - Colour = 29, - }, - - Cloakrooms = { - vector3(462.145050, -999.468140, 30.678345), - }, - - Armories = { - vector3(487.239563, -996.949463, 30.678345), - }, - - Vehicles = { - { - Spawner = vector3(454.6, -1017.4, 28.4), - InsideShop = vector3(444.553833, -1019.498901, 28.605835), - SpawnPoints = { - { coords = vector3(438.4, -1018.3, 27.7), heading = 90.0, radius = 6.0 }, - { coords = vector3(441.0, -1024.2, 28.3), heading = 90.0, radius = 6.0 }, - { coords = vector3(453.5, -1022.2, 28.0), heading = 90.0, radius = 6.0 }, - { coords = vector3(450.9, -1016.5, 28.1), heading = 90.0, radius = 6.0 }, - }, - }, - - { - Spawner = vector3(473.3, -1018.8, 28.0), - InsideShop = vector3(228.5, -993.5, -99.0), - SpawnPoints = { - { coords = vector3(475.9, -1021.6, 28.0), heading = 276.1, radius = 6.0 }, - { coords = vector3(484.1, -1023.1, 27.5), heading = 302.5, radius = 6.0 }, - }, - }, - }, - - Helicopters = { - { - Spawner = vector3(461.1, -981.5, 43.6), - InsideShop = vector3(477.0, -1106.4, 43.0), - SpawnPoints = { - { coords = vector3(449.5, -981.2, 43.6), heading = 92.6, radius = 10.0 }, - }, - }, - }, - - BossActions = { - vector3(462.052734, -985.582397, 30.712036), - }, - }, + LSPD = { + + Blip = { + Coords = vector3(425.1, -979.5, 30.7), + Sprite = 60, + Display = 4, + Scale = 1.2, + Colour = 29, + }, + + Cloakrooms = { + vector3(462.145050, -999.468140, 30.678345), + }, + + Armories = { + vector3(487.239563, -996.949463, 30.678345), + }, + + Vehicles = { + { + Spawner = vector3(454.6, -1017.4, 28.4), + InsideShop = vector3(444.553833, -1019.498901, 28.605835), + SpawnPoints = { + { coords = vector3(438.4, -1018.3, 27.7), heading = 90.0, radius = 6.0 }, + { coords = vector3(441.0, -1024.2, 28.3), heading = 90.0, radius = 6.0 }, + { coords = vector3(453.5, -1022.2, 28.0), heading = 90.0, radius = 6.0 }, + { coords = vector3(450.9, -1016.5, 28.1), heading = 90.0, radius = 6.0 }, + }, + }, + + { + Spawner = vector3(473.3, -1018.8, 28.0), + InsideShop = vector3(228.5, -993.5, -99.0), + SpawnPoints = { + { coords = vector3(475.9, -1021.6, 28.0), heading = 276.1, radius = 6.0 }, + { coords = vector3(484.1, -1023.1, 27.5), heading = 302.5, radius = 6.0 }, + }, + }, + }, + + Helicopters = { + { + Spawner = vector3(461.1, -981.5, 43.6), + InsideShop = vector3(477.0, -1106.4, 43.0), + SpawnPoints = { + { coords = vector3(449.5, -981.2, 43.6), heading = 92.6, radius = 10.0 }, + }, + }, + }, + + BossActions = { + vector3(462.052734, -985.582397, 30.712036), + }, + }, } Config.AuthorizedWeapons = { - recruit = { - { weapon = "WEAPON_STUNGUN", price = 1500 }, - { weapon = "WEAPON_FLASHLIGHT", price = 80 }, - }, - - officer = { - { weapon = "WEAPON_ADVANCEDRIFLE", components = { 0, 6000, 1000, 4000, 8000, nil }, price = 50000 }, - { weapon = "WEAPON_STUNGUN", price = 500 }, - { weapon = "WEAPON_FLASHLIGHT", price = 0 }, - }, - - sergeant = { - { weapon = "WEAPON_ADVANCEDRIFLE", components = { 0, 6000, 1000, 4000, 8000, nil }, price = 50000 }, - { weapon = "WEAPON_PUMPSHOTGUN", components = { 2000, 6000, nil }, price = 70000 }, - { weapon = "WEAPON_STUNGUN", price = 500 }, - { weapon = "WEAPON_FLASHLIGHT", price = 0 }, - }, - - lieutenant = { - { weapon = "WEAPON_ADVANCEDRIFLE", components = { 0, 6000, 1000, 4000, 8000, nil }, price = 50000 }, - { weapon = "WEAPON_PUMPSHOTGUN", components = { 2000, 6000, nil }, price = 70000 }, - { weapon = "WEAPON_STUNGUN", price = 500 }, - { weapon = "WEAPON_FLASHLIGHT", price = 0 }, - }, - - boss = { - { weapon = "WEAPON_ADVANCEDRIFLE", components = { 0, 6000, 1000, 4000, 8000, nil }, price = 50000 }, - { weapon = "WEAPON_PUMPSHOTGUN", components = { 2000, 6000, nil }, price = 70000 }, - { weapon = "WEAPON_STUNGUN", price = 500 }, - { weapon = "WEAPON_FLASHLIGHT", price = 0 }, - }, + recruit = { + { weapon = "WEAPON_STUNGUN", price = 1500 }, + { weapon = "WEAPON_FLASHLIGHT", price = 80 }, + }, + + officer = { + { weapon = "WEAPON_ADVANCEDRIFLE", components = { 0, 6000, 1000, 4000, 8000, nil }, price = 50000 }, + { weapon = "WEAPON_STUNGUN", price = 500 }, + { weapon = "WEAPON_FLASHLIGHT", price = 0 }, + }, + + sergeant = { + { weapon = "WEAPON_ADVANCEDRIFLE", components = { 0, 6000, 1000, 4000, 8000, nil }, price = 50000 }, + { weapon = "WEAPON_PUMPSHOTGUN", components = { 2000, 6000, nil }, price = 70000 }, + { weapon = "WEAPON_STUNGUN", price = 500 }, + { weapon = "WEAPON_FLASHLIGHT", price = 0 }, + }, + + lieutenant = { + { weapon = "WEAPON_ADVANCEDRIFLE", components = { 0, 6000, 1000, 4000, 8000, nil }, price = 50000 }, + { weapon = "WEAPON_PUMPSHOTGUN", components = { 2000, 6000, nil }, price = 70000 }, + { weapon = "WEAPON_STUNGUN", price = 500 }, + { weapon = "WEAPON_FLASHLIGHT", price = 0 }, + }, + + boss = { + { weapon = "WEAPON_ADVANCEDRIFLE", components = { 0, 6000, 1000, 4000, 8000, nil }, price = 50000 }, + { weapon = "WEAPON_PUMPSHOTGUN", components = { 2000, 6000, nil }, price = 70000 }, + { weapon = "WEAPON_STUNGUN", price = 500 }, + { weapon = "WEAPON_FLASHLIGHT", price = 0 }, + }, } Config.AuthorizedVehicles = { - car = { - recruit = {}, - - officer = { - { model = "police3", price = 20000 }, - }, - - sergeant = { - { model = "policet", price = 18500 }, - { model = "policeb", price = 30500 }, - }, - - lieutenant = { - { model = "riot", price = 70000 }, - { model = "fbi2", price = 60000 }, - }, - - boss = { - { model = "riot", price = 70000 }, - { model = "fbi2", price = 60000 }, - { model = "fbi", price = 60000 }, - { model = "policet", price = 18500 }, - { model = "policeb", price = 30500 }, - { model = "police3", price = 20000 }, - { model = "police3", price = 20000 }, - }, - }, - - helicopter = { - recruit = {}, - - officer = {}, - - sergeant = {}, - - lieutenant = { - { model = "polmav", props = { modLivery = 0 }, price = 200000 }, - }, - - boss = { - { model = "polmav", props = { modLivery = 0 }, price = 100000 }, - }, - }, + car = { + recruit = {}, + + officer = { + { model = "police3", price = 20000 }, + }, + + sergeant = { + { model = "policet", price = 18500 }, + { model = "policeb", price = 30500 }, + }, + + lieutenant = { + { model = "riot", price = 70000 }, + { model = "fbi2", price = 60000 }, + }, + + boss = { + { model = "riot", price = 70000 }, + { model = "fbi2", price = 60000 }, + { model = "fbi", price = 60000 }, + { model = "policet", price = 18500 }, + { model = "policeb", price = 30500 }, + { model = "police3", price = 20000 }, + { model = "police3", price = 20000 }, + }, + }, + + helicopter = { + recruit = {}, + + officer = {}, + + sergeant = {}, + + lieutenant = { + { model = "polmav", props = { modLivery = 0 }, price = 200000 }, + }, + + boss = { + { model = "polmav", props = { modLivery = 0 }, price = 100000 }, + }, + }, } -- CHECK SKINCHANGER CLIENT MAIN.LUA for matching elements Config.Uniforms = { - recruit = { - male = { - tshirt_1 = 58, - tshirt_2 = 0, - torso_1 = 55, - torso_2 = 0, - decals_1 = 8, - decals_2 = 3, - arms = 41, - pants_1 = 25, - pants_2 = 0, - shoes_1 = 25, - shoes_2 = 0, - helmet_1 = -1, - helmet_2 = 0, - chain_1 = 0, - chain_2 = 0, - ears_1 = 2, - ears_2 = 0, - }, - female = { - tshirt_1 = 36, - tshirt_2 = 1, - torso_1 = 48, - torso_2 = 0, - decals_1 = 0, - decals_2 = 0, - arms = 44, - pants_1 = 34, - pants_2 = 0, - shoes_1 = 27, - shoes_2 = 0, - helmet_1 = 45, - helmet_2 = 0, - chain_1 = 0, - chain_2 = 0, - ears_1 = 2, - ears_2 = 0, - }, - }, - - officer = { - male = { - tshirt_1 = 58, - tshirt_2 = 0, - torso_1 = 55, - torso_2 = 0, - decals_1 = 0, - decals_2 = 0, - arms = 41, - pants_1 = 25, - pants_2 = 0, - shoes_1 = 25, - shoes_2 = 0, - helmet_1 = -1, - helmet_2 = 0, - chain_1 = 0, - chain_2 = 0, - ears_1 = 2, - ears_2 = 0, - }, - female = { - tshirt_1 = 35, - tshirt_2 = 0, - torso_1 = 48, - torso_2 = 0, - decals_1 = 0, - decals_2 = 0, - arms = 44, - pants_1 = 34, - pants_2 = 0, - shoes_1 = 27, - shoes_2 = 0, - helmet_1 = -1, - helmet_2 = 0, - chain_1 = 0, - chain_2 = 0, - ears_1 = 2, - ears_2 = 0, - }, - }, - - sergeant = { - male = { - tshirt_1 = 58, - tshirt_2 = 0, - torso_1 = 55, - torso_2 = 0, - decals_1 = 8, - decals_2 = 1, - arms = 41, - pants_1 = 25, - pants_2 = 0, - shoes_1 = 25, - shoes_2 = 0, - helmet_1 = -1, - helmet_2 = 0, - chain_1 = 0, - chain_2 = 0, - ears_1 = 2, - ears_2 = 0, - }, - female = { - tshirt_1 = 35, - tshirt_2 = 0, - torso_1 = 48, - torso_2 = 0, - decals_1 = 7, - decals_2 = 1, - arms = 44, - pants_1 = 34, - pants_2 = 0, - shoes_1 = 27, - shoes_2 = 0, - helmet_1 = -1, - helmet_2 = 0, - chain_1 = 0, - chain_2 = 0, - ears_1 = 2, - ears_2 = 0, - }, - }, - - lieutenant = { - male = { - tshirt_1 = 58, - tshirt_2 = 0, - torso_1 = 55, - torso_2 = 0, - decals_1 = 8, - decals_2 = 2, - arms = 41, - pants_1 = 25, - pants_2 = 0, - shoes_1 = 25, - shoes_2 = 0, - helmet_1 = -1, - helmet_2 = 0, - chain_1 = 0, - chain_2 = 0, - ears_1 = 2, - ears_2 = 0, - }, - female = { - tshirt_1 = 35, - tshirt_2 = 0, - torso_1 = 48, - torso_2 = 0, - decals_1 = 7, - decals_2 = 2, - arms = 44, - pants_1 = 34, - pants_2 = 0, - shoes_1 = 27, - shoes_2 = 0, - helmet_1 = -1, - helmet_2 = 0, - chain_1 = 0, - chain_2 = 0, - ears_1 = 2, - ears_2 = 0, - }, - }, - - boss = { - male = { - tshirt_1 = 58, - tshirt_2 = 0, - torso_1 = 55, - torso_2 = 0, - decals_1 = 8, - decals_2 = 3, - arms = 41, - pants_1 = 25, - pants_2 = 0, - shoes_1 = 25, - shoes_2 = 0, - helmet_1 = -1, - helmet_2 = 0, - chain_1 = 0, - chain_2 = 0, - ears_1 = 2, - ears_2 = 0, - }, - female = { - tshirt_1 = 35, - tshirt_2 = 0, - torso_1 = 48, - torso_2 = 0, - decals_1 = 7, - decals_2 = 3, - arms = 44, - pants_1 = 34, - pants_2 = 0, - shoes_1 = 27, - shoes_2 = 0, - helmet_1 = -1, - helmet_2 = 0, - chain_1 = 0, - chain_2 = 0, - ears_1 = 2, - ears_2 = 0, - }, - }, - - bullet_wear = { - male = { - bproof_1 = 11, - bproof_2 = 1, - }, - female = { - bproof_1 = 13, - bproof_2 = 1, - }, - }, - - gilet_wear = { - male = { - tshirt_1 = 59, - tshirt_2 = 1, - }, - female = { - tshirt_1 = 36, - tshirt_2 = 1, - }, - }, + recruit = { + male = { + tshirt_1 = 58, + tshirt_2 = 0, + torso_1 = 55, + torso_2 = 0, + decals_1 = 8, + decals_2 = 3, + arms = 41, + pants_1 = 25, + pants_2 = 0, + shoes_1 = 25, + shoes_2 = 0, + helmet_1 = -1, + helmet_2 = 0, + chain_1 = 0, + chain_2 = 0, + ears_1 = 2, + ears_2 = 0, + }, + female = { + tshirt_1 = 36, + tshirt_2 = 1, + torso_1 = 48, + torso_2 = 0, + decals_1 = 0, + decals_2 = 0, + arms = 44, + pants_1 = 34, + pants_2 = 0, + shoes_1 = 27, + shoes_2 = 0, + helmet_1 = 45, + helmet_2 = 0, + chain_1 = 0, + chain_2 = 0, + ears_1 = 2, + ears_2 = 0, + }, + }, + + officer = { + male = { + tshirt_1 = 58, + tshirt_2 = 0, + torso_1 = 55, + torso_2 = 0, + decals_1 = 0, + decals_2 = 0, + arms = 41, + pants_1 = 25, + pants_2 = 0, + shoes_1 = 25, + shoes_2 = 0, + helmet_1 = -1, + helmet_2 = 0, + chain_1 = 0, + chain_2 = 0, + ears_1 = 2, + ears_2 = 0, + }, + female = { + tshirt_1 = 35, + tshirt_2 = 0, + torso_1 = 48, + torso_2 = 0, + decals_1 = 0, + decals_2 = 0, + arms = 44, + pants_1 = 34, + pants_2 = 0, + shoes_1 = 27, + shoes_2 = 0, + helmet_1 = -1, + helmet_2 = 0, + chain_1 = 0, + chain_2 = 0, + ears_1 = 2, + ears_2 = 0, + }, + }, + + sergeant = { + male = { + tshirt_1 = 58, + tshirt_2 = 0, + torso_1 = 55, + torso_2 = 0, + decals_1 = 8, + decals_2 = 1, + arms = 41, + pants_1 = 25, + pants_2 = 0, + shoes_1 = 25, + shoes_2 = 0, + helmet_1 = -1, + helmet_2 = 0, + chain_1 = 0, + chain_2 = 0, + ears_1 = 2, + ears_2 = 0, + }, + female = { + tshirt_1 = 35, + tshirt_2 = 0, + torso_1 = 48, + torso_2 = 0, + decals_1 = 7, + decals_2 = 1, + arms = 44, + pants_1 = 34, + pants_2 = 0, + shoes_1 = 27, + shoes_2 = 0, + helmet_1 = -1, + helmet_2 = 0, + chain_1 = 0, + chain_2 = 0, + ears_1 = 2, + ears_2 = 0, + }, + }, + + lieutenant = { + male = { + tshirt_1 = 58, + tshirt_2 = 0, + torso_1 = 55, + torso_2 = 0, + decals_1 = 8, + decals_2 = 2, + arms = 41, + pants_1 = 25, + pants_2 = 0, + shoes_1 = 25, + shoes_2 = 0, + helmet_1 = -1, + helmet_2 = 0, + chain_1 = 0, + chain_2 = 0, + ears_1 = 2, + ears_2 = 0, + }, + female = { + tshirt_1 = 35, + tshirt_2 = 0, + torso_1 = 48, + torso_2 = 0, + decals_1 = 7, + decals_2 = 2, + arms = 44, + pants_1 = 34, + pants_2 = 0, + shoes_1 = 27, + shoes_2 = 0, + helmet_1 = -1, + helmet_2 = 0, + chain_1 = 0, + chain_2 = 0, + ears_1 = 2, + ears_2 = 0, + }, + }, + + boss = { + male = { + tshirt_1 = 58, + tshirt_2 = 0, + torso_1 = 55, + torso_2 = 0, + decals_1 = 8, + decals_2 = 3, + arms = 41, + pants_1 = 25, + pants_2 = 0, + shoes_1 = 25, + shoes_2 = 0, + helmet_1 = -1, + helmet_2 = 0, + chain_1 = 0, + chain_2 = 0, + ears_1 = 2, + ears_2 = 0, + }, + female = { + tshirt_1 = 35, + tshirt_2 = 0, + torso_1 = 48, + torso_2 = 0, + decals_1 = 7, + decals_2 = 3, + arms = 44, + pants_1 = 34, + pants_2 = 0, + shoes_1 = 27, + shoes_2 = 0, + helmet_1 = -1, + helmet_2 = 0, + chain_1 = 0, + chain_2 = 0, + ears_1 = 2, + ears_2 = 0, + }, + }, + + bullet_wear = { + male = { + bproof_1 = 11, + bproof_2 = 1, + }, + female = { + bproof_1 = 13, + bproof_2 = 1, + }, + }, + + gilet_wear = { + male = { + tshirt_1 = 59, + tshirt_2 = 1, + }, + female = { + tshirt_1 = 36, + tshirt_2 = 1, + }, + }, } diff --git a/server-data/resources/[bpt_addons]/bpt_policejob/fxmanifest.lua b/server-data/resources/[bpt_addons]/bpt_policejob/fxmanifest.lua index 30f5842aa..2a8d0ca9b 100644 --- a/server-data/resources/[bpt_addons]/bpt_policejob/fxmanifest.lua +++ b/server-data/resources/[bpt_addons]/bpt_policejob/fxmanifest.lua @@ -4,7 +4,7 @@ game("gta5") description("Allows Players to RP as Police Officers (cars, outfits, handcuffing etc)") lua54("yes") -version("1.0.2") +version("1.0.3") shared_script("@es_extended/imports.lua") diff --git a/server-data/resources/[bpt_addons]/bpt_policejob/locales/en.lua b/server-data/resources/[bpt_addons]/bpt_policejob/locales/en.lua index e4b8c3fdf..0f55a26ec 100644 --- a/server-data/resources/[bpt_addons]/bpt_policejob/locales/en.lua +++ b/server-data/resources/[bpt_addons]/bpt_policejob/locales/en.lua @@ -1,168 +1,168 @@ Locales["en"] = { - -- Cloakroom - ["cloakroom"] = "locker room", - ["citizen_wear"] = "civilian Outfit", - ["police_wear"] = "police Outfit", - ["gilet_wear"] = "orange reflective jacket", - ["bullet_wear"] = "bulletproof vest", - ["no_outfit"] = "there's no uniform that fits you!", - ["open_cloackroom"] = "press [E] to change clothes.", - -- Armory - ["remove_object"] = "withdraw object", - ["deposit_object"] = "deposit object", - ["get_weapon"] = "withdraw weapon from armory", - ["put_weapon"] = "store weapon in armory", - ["buy_weapons"] = "buy weapons", - ["armory"] = "armory", - ["open_armory"] = "press [E] to access the Armory.", - ["armory_owned"] = "owned", - ["armory_free"] = "free", - ["armory_item"] = "$%s", - ["armory_weapontitle"] = "armory - Buy weapon", - ["armory_componenttitle"] = "armory - Weapon attatchments", - ["armory_bought"] = "you bought an %s for $%s", - ["armory_money"] = "you cannot afford that weapon", - ["armory_hascomponent"] = "you have that attatchment equiped!", - ["get_weapon_menu"] = "armory - Withdraw Weapon", - ["put_weapon_menu"] = "armory - Store Weapon", - ["confirm"] = "Confirm", - -- Vehicles - ["vehicle_menu"] = "vehicle", - ["vehicle_blocked"] = "all available spawn points are currently blocked!", - ["garage_prompt"] = "press [E] to access the Vehicle Actions.", - ["garage_title"] = "vehicle Actions", - ["garage_stored"] = "stored", - ["garage_notstored"] = "not in garage", - ["garage_storing"] = "we're attempting to remove the vehicle, make sure no players are around it.", - ["garage_has_stored"] = "the vehicle has been stored in your garage", - ["garage_has_notstored"] = "no nearby owned vehicles were found", - ["garage_notavailable"] = "your vehicle is not stored in the garage.", - ["garage_blocked"] = "there's no available spawn points!", - ["garage_empty"] = "you don't have any vehicles in your garage.", - ["garage_released"] = "your vehicle has been released from the garage.", - ["garage_store_nearby"] = "there is no nearby vehicles.", - ["garage_storeditem"] = "open garage", - ["garage_storeitem"] = "store vehicle in garage", - ["garage_buyitem"] = "vehicle shop", - ["garage_notauthorized"] = "you're not authorized to buy this kind of vehicles.", - ["helicopter_prompt"] = "press [E] to access the Helicopter Actions.", - ["shop_item"] = "$%s", - ["vehicleshop_title"] = "vehicle Shop", - ["vehicleshop_confirm"] = "do you want to buy this vehicle?", - ["vehicleshop_bought"] = "you have bought %s for ~r~$%s", - ["vehicleshop_money"] = "you cannot afford that vehicle", - ["vehicleshop_awaiting_model"] = "the vehicle is currently DOWNLOADING & LOADING please wait", - ["confirm_no"] = "no", - ["confirm_yes"] = "yes", - ["view"] = "View", - ["buy_car"] = "Buy", - ["stop_view"] = "Stop Viewing", - -- Service - ["service_max"] = "you cannot enter service, max officers in service: %s/%s", - ["service_not"] = "you have not entered service! You'll have to get changed first.", - ["service_anonunce"] = "service information", - ["service_in"] = "you've entered service, welcome!", - ["service_in_announce"] = "operator %s has entered service!", - ["service_out"] = "you have left service.", - ["service_out_announce"] = "operator %s has left their service.", - -- Action Menu - ["menu_title"] = "Police", - ["citizen_interaction"] = "citizen Interaction", - ["vehicle_interaction"] = "vehicle Interaction", - ["object_spawner"] = "object Spawner", - ["id_card"] = "ID Card", - ["search"] = "search", - ["handcuff"] = "cuff / Uncuff", - ["drag"] = "escort", - ["put_in_vehicle"] = "put in Vehicle", - ["out_the_vehicle"] = "drag out from vehicle", - ["fine"] = "fine", - ["unpaid_bills"] = "manage unpaid bills", - ["license_check"] = "manage license", - ["license_revoke"] = "revoke license", - ["license_revoked"] = "your %s has been revoked!", - ["licence_you_revoked"] = "you revoked a %s which belonged to %s", - ["no_players_nearby"] = "there is no player(s) nearby!", - ["being_searched"] = "you are being searched by the Police", - -- Vehicle interaction - ["vehicle_info"] = "vehicle Info", - ["pick_lock"] = "lockpick Vehicle", - ["vehicle_unlocked"] = "vehicle Unlocked", - ["no_vehicles_nearby"] = "there is no vehicles nearby", - ["impound"] = "impound vehicle", - ["impound_prompt"] = "press [E] to cancel the impound", - ["impound_canceled"] = "you canceled the impound", - ["impound_canceled_moved"] = "the impound has been canceled because the vehicle moved", - ["impound_successful"] = "you have impounded the vehicle", - ["search_database"] = "vehicle information", - ["search_database_title"] = "vehicle information - search with registration number", - ["search_database_error_invalid"] = "that is ~r~not a valid registration number", - ["search_plate"] = "Enter Plate", - ["lookup_plate"] = "Lookup Plate", - -- Traffic interaction - ["traffic_interaction"] = "interaction Traffic", - ["cone"] = "cone", - ["barrier"] = "barrier", - ["spikestrips"] = "spikestrips", - ["box"] = "box", - ["cash"] = "box of cash", - -- ID Card Menu - ["name"] = "name: %s", - ["job"] = "job: %s", - ["sex"] = "sex: %s", - ["dob"] = "DOB: %s", - ["height"] = "height: %s", - ["bac"] = "BAC: %s", - ["unknown"] = "unknown", - ["male"] = "male", - ["female"] = "female", - -- Body Search Menu - ["guns_label"] = "--- Guns ---", - ["inventory_label"] = "--- Inventory ---", - ["license_label"] = " --- Licenses ---", - ["confiscate"] = "confiscate %s", - ["confiscate_weapon"] = "confiscate %s with %s bullets", - ["confiscate_inv"] = "confiscate %sx %s", - ["confiscate_dirty"] = 'confiscate dirty money: $%s', - ["you_confiscated"] = "you confiscated %sx %s from %s", - ["got_confiscated"] = "%sx %s were confiscated by %s", - ["you_confiscated_account"] = "you confiscated $%s (%s) from %s", - ["got_confiscated_account"] = "$%s (%s) was confiscated by %s", - ["you_confiscated_weapon"] = "you confiscated %s from %s with ~o~%s bullets", - ["got_confiscated_weapon"] = "your %s with ~o~%s bullets was confiscated by %s", - ["traffic_offense"] = "traffic Offense", - ["minor_offense"] = "minor Offense", - ["average_offense"] = "average Offense", - ["major_offense"] = "major Offense", - ["fine_total"] = "fine: %s", - ["fine_enter_amount"] = "Enter the amount of the fine", - ["fine_enter_text"] = "Enter the reason for the fine", - ["invalid_amount"] = "Error: Amount was not a number or invalid", - -- Vehicle Info Menu - ["plate"] = "plate: %s", - ["owner_unknown"] = "owner: Unknown", - ["owner"] = "owner: %s", - -- Boss Menu - ["open_bossmenu"] = "press [E] to open the menu", - ["quantity_invalid"] = "invalid quantity", - ["have_withdrawn"] = "you have withdrawn %sx %s", - ["have_deposited"] = "you have deposited %sx %s", - ["quantity"] = "quantity", - ["quantity_placeholder"] = "Amount to withdraw..", - ["inventory"] = "inventory", - ["police_stock"] = "police Stock", - -- Misc - ["remove_prop"] = "press [E] to delete the object", - ["map_blip"] = "police Station", - ["unrestrained_timer"] = "you feel your handcuffs slowly losing grip and fading away.", - -- Notifications - ["alert_police"] = "police alert", - ["phone_police"] = "police", - -- Keybind - ["interaction"] = "Interact", - ["quick_actions"] = "Quick Actions", - -- Other - ["society_police"] = "Police", - ["received_firearms_license"] = "You have received your firearms license", - ["released_gun_licence"] = "you have issued your gun licence", + -- Cloakroom + ["cloakroom"] = "locker room", + ["citizen_wear"] = "civilian Outfit", + ["police_wear"] = "police Outfit", + ["gilet_wear"] = "orange reflective jacket", + ["bullet_wear"] = "bulletproof vest", + ["no_outfit"] = "there's no uniform that fits you!", + ["open_cloackroom"] = "press [E] to change clothes.", + -- Armory + ["remove_object"] = "withdraw object", + ["deposit_object"] = "deposit object", + ["get_weapon"] = "withdraw weapon from armory", + ["put_weapon"] = "store weapon in armory", + ["buy_weapons"] = "buy weapons", + ["armory"] = "armory", + ["open_armory"] = "press [E] to access the Armory.", + ["armory_owned"] = "owned", + ["armory_free"] = "free", + ["armory_item"] = "$%s", + ["armory_weapontitle"] = "armory - Buy weapon", + ["armory_componenttitle"] = "armory - Weapon attatchments", + ["armory_bought"] = "you bought an %s for $%s", + ["armory_money"] = "you cannot afford that weapon", + ["armory_hascomponent"] = "you have that attatchment equiped!", + ["get_weapon_menu"] = "armory - Withdraw Weapon", + ["put_weapon_menu"] = "armory - Store Weapon", + ["confirm"] = "Confirm", + -- Vehicles + ["vehicle_menu"] = "vehicle", + ["vehicle_blocked"] = "all available spawn points are currently blocked!", + ["garage_prompt"] = "press [E] to access the Vehicle Actions.", + ["garage_title"] = "vehicle Actions", + ["garage_stored"] = "stored", + ["garage_notstored"] = "not in garage", + ["garage_storing"] = "we're attempting to remove the vehicle, make sure no players are around it.", + ["garage_has_stored"] = "the vehicle has been stored in your garage", + ["garage_has_notstored"] = "no nearby owned vehicles were found", + ["garage_notavailable"] = "your vehicle is not stored in the garage.", + ["garage_blocked"] = "there's no available spawn points!", + ["garage_empty"] = "you don't have any vehicles in your garage.", + ["garage_released"] = "your vehicle has been released from the garage.", + ["garage_store_nearby"] = "there is no nearby vehicles.", + ["garage_storeditem"] = "open garage", + ["garage_storeitem"] = "store vehicle in garage", + ["garage_buyitem"] = "vehicle shop", + ["garage_notauthorized"] = "you're not authorized to buy this kind of vehicles.", + ["helicopter_prompt"] = "press [E] to access the Helicopter Actions.", + ["shop_item"] = "$%s", + ["vehicleshop_title"] = "vehicle Shop", + ["vehicleshop_confirm"] = "do you want to buy this vehicle?", + ["vehicleshop_bought"] = "you have bought %s for ~r~$%s", + ["vehicleshop_money"] = "you cannot afford that vehicle", + ["vehicleshop_awaiting_model"] = "the vehicle is currently DOWNLOADING & LOADING please wait", + ["confirm_no"] = "no", + ["confirm_yes"] = "yes", + ["view"] = "View", + ["buy_car"] = "Buy", + ["stop_view"] = "Stop Viewing", + -- Service + ["service_max"] = "you cannot enter service, max officers in service: %s/%s", + ["service_not"] = "you have not entered service! You'll have to get changed first.", + ["service_anonunce"] = "service information", + ["service_in"] = "you've entered service, welcome!", + ["service_in_announce"] = "operator %s has entered service!", + ["service_out"] = "you have left service.", + ["service_out_announce"] = "operator %s has left their service.", + -- Action Menu + ["menu_title"] = "Police", + ["citizen_interaction"] = "citizen Interaction", + ["vehicle_interaction"] = "vehicle Interaction", + ["object_spawner"] = "object Spawner", + ["id_card"] = "ID Card", + ["search"] = "search", + ["handcuff"] = "cuff / Uncuff", + ["drag"] = "escort", + ["put_in_vehicle"] = "put in Vehicle", + ["out_the_vehicle"] = "drag out from vehicle", + ["fine"] = "fine", + ["unpaid_bills"] = "manage unpaid bills", + ["license_check"] = "manage license", + ["license_revoke"] = "revoke license", + ["license_revoked"] = "your %s has been revoked!", + ["licence_you_revoked"] = "you revoked a %s which belonged to %s", + ["no_players_nearby"] = "there is no player(s) nearby!", + ["being_searched"] = "you are being searched by the Police", + -- Vehicle interaction + ["vehicle_info"] = "vehicle Info", + ["pick_lock"] = "lockpick Vehicle", + ["vehicle_unlocked"] = "vehicle Unlocked", + ["no_vehicles_nearby"] = "there is no vehicles nearby", + ["impound"] = "impound vehicle", + ["impound_prompt"] = "press [E] to cancel the impound", + ["impound_canceled"] = "you canceled the impound", + ["impound_canceled_moved"] = "the impound has been canceled because the vehicle moved", + ["impound_successful"] = "you have impounded the vehicle", + ["search_database"] = "vehicle information", + ["search_database_title"] = "vehicle information - search with registration number", + ["search_database_error_invalid"] = "that is ~r~not a valid registration number", + ["search_plate"] = "Enter Plate", + ["lookup_plate"] = "Lookup Plate", + -- Traffic interaction + ["traffic_interaction"] = "interaction Traffic", + ["cone"] = "cone", + ["barrier"] = "barrier", + ["spikestrips"] = "spikestrips", + ["box"] = "box", + ["cash"] = "box of cash", + -- ID Card Menu + ["name"] = "name: %s", + ["job"] = "job: %s", + ["sex"] = "sex: %s", + ["dob"] = "DOB: %s", + ["height"] = "height: %s", + ["bac"] = "BAC: %s", + ["unknown"] = "unknown", + ["male"] = "male", + ["female"] = "female", + -- Body Search Menu + ["guns_label"] = "--- Guns ---", + ["inventory_label"] = "--- Inventory ---", + ["license_label"] = " --- Licenses ---", + ["confiscate"] = "confiscate %s", + ["confiscate_weapon"] = "confiscate %s with %s bullets", + ["confiscate_inv"] = "confiscate %sx %s", + ["confiscate_dirty"] = 'confiscate dirty money: $%s', + ["you_confiscated"] = "you confiscated %sx %s from %s", + ["got_confiscated"] = "%sx %s were confiscated by %s", + ["you_confiscated_account"] = "you confiscated $%s (%s) from %s", + ["got_confiscated_account"] = "$%s (%s) was confiscated by %s", + ["you_confiscated_weapon"] = "you confiscated %s from %s with ~o~%s bullets", + ["got_confiscated_weapon"] = "your %s with ~o~%s bullets was confiscated by %s", + ["traffic_offense"] = "traffic Offense", + ["minor_offense"] = "minor Offense", + ["average_offense"] = "average Offense", + ["major_offense"] = "major Offense", + ["fine_total"] = "fine: %s", + ["fine_enter_amount"] = "Enter the amount of the fine", + ["fine_enter_text"] = "Enter the reason for the fine", + ["invalid_amount"] = "Error: Amount was not a number or invalid", + -- Vehicle Info Menu + ["plate"] = "plate: %s", + ["owner_unknown"] = "owner: Unknown", + ["owner"] = "owner: %s", + -- Boss Menu + ["open_bossmenu"] = "press [E] to open the menu", + ["quantity_invalid"] = "invalid quantity", + ["have_withdrawn"] = "you have withdrawn %sx %s", + ["have_deposited"] = "you have deposited %sx %s", + ["quantity"] = "quantity", + ["quantity_placeholder"] = "Amount to withdraw..", + ["inventory"] = "inventory", + ["police_stock"] = "police Stock", + -- Misc + ["remove_prop"] = "press [E] to delete the object", + ["map_blip"] = "police Station", + ["unrestrained_timer"] = "you feel your handcuffs slowly losing grip and fading away.", + -- Notifications + ["alert_police"] = "police alert", + ["phone_police"] = "police", + -- Keybind + ["interaction"] = "Interact", + ["quick_actions"] = "Quick Actions", + -- Other + ["society_police"] = "Police", + ["received_firearms_license"] = "You have received your firearms license", + ["released_gun_licence"] = "you have issued your gun licence", } diff --git a/server-data/resources/[bpt_addons]/bpt_policejob/server/main.lua b/server-data/resources/[bpt_addons]/bpt_policejob/server/main.lua index 7679ccd2b..aaebdde51 100644 --- a/server-data/resources/[bpt_addons]/bpt_policejob/server/main.lua +++ b/server-data/resources/[bpt_addons]/bpt_policejob/server/main.lua @@ -1,3 +1,5 @@ +---@diagnostic disable: undefined-global + if Config.EnableESXService then if Config.MaxInService ~= -1 then TriggerEvent("esx_service:activateService", "police", Config.MaxInService) @@ -309,55 +311,6 @@ ESX.RegisterServerCallback("bpt_policejob:removeArmoryWeapon", function(source, end) end) -ESX.RegisterServerCallback("bpt_policejob:buyWeapon", function(source, cb, weaponName, type, componentNum) - local xPlayer = ESX.GetPlayerFromId(source) - local authorizedWeapons, selectedWeapon = Config.AuthorizedWeapons[xPlayer.job.grade_name] - - for k, v in ipairs(authorizedWeapons) do - if v.weapon == weaponName then - selectedWeapon = v - break - end - end - - if not selectedWeapon then - print(("[^3WARNING^7] Player ^5%s^7 Attempted To Buy Invalid Weapon - ^5%s^7!"):format(source, weaponName)) - cb(false) - else - -- Weapon - if type == 1 then - if xPlayer.getMoney() >= selectedWeapon.price then - xPlayer.removeMoney(selectedWeapon.price, "Weapon Bought") - xPlayer.addWeapon(weaponName, 100) - - cb(true) - else - cb(false) - end - - -- Weapon Component - elseif type == 2 then - local price = selectedWeapon.components[componentNum] - local weaponNum, weapon = ESX.GetWeapon(weaponName) - local component = weapon.components[componentNum] - - if component then - if xPlayer.getMoney() >= price then - xPlayer.removeMoney(price, "Weapon Component Bought") - xPlayer.addWeaponComponent(weaponName, component.name) - - cb(true) - else - cb(false) - end - else - print(("[^3WARNING^7] Player ^5%s^7 Attempted To Buy Invalid Weapon Component - ^5%s^7!"):format(source, componentNum)) - cb(false) - end - end - end -end) - ESX.RegisterServerCallback("bpt_policejob:buyJobVehicle", function(source, cb, vehicleProps, type) local xPlayer = ESX.GetPlayerFromId(source) local price = GetPriceFromHash(vehicleProps.model, xPlayer.job.grade_name, type) @@ -423,18 +376,6 @@ ESX.RegisterServerCallback("bpt_policejob:getPlayerInventory", function(source, cb({ items = items }) end) -AddEventHandler("playerDropped", function() - local playerId = source - if playerId then - local xPlayer = ESX.GetPlayerFromId(playerId) - - if xPlayer and xPlayer.job.name == "police" then - Wait(5000) - TriggerClientEvent("bpt_policejob:updateBlip", -1) - end - end -end) - RegisterNetEvent("bpt_policejob:spawned") AddEventHandler("bpt_policejob:spawned", function() local playerId = source