ESX = Core QBCore = Core -- Buy here: (4€+VAT) https://store.brutalscripts.com function notification(title, text, time, type) if Config.BrutalNotify then exports['brutal_notify']:SendAlert(title, text, time, type) else -- Put here your own notify and set the Config.BrutalNotify to false SetNotificationTextEntry("STRING") AddTextComponentString(text) DrawNotification(0,1) -- Default ESX Notify: --TriggerEvent('esx:showNotification', text) -- Default QB Notify: --TriggerEvent('QBCore:Notify', text, 'info', 5000) -- OKOK Notify: -- exports['okokNotify']:Alert(title, text, time, type, false) end end function TextUIFunction(type, text) if Config.TextUI ~= false then if type == 'open' then if Config.TextUI:lower() == 'ox_lib' then lib.showTextUI(text) elseif Config.TextUI:lower() == 'okoktextui' then exports['okokTextUI']:Open(text, 'darkblue', 'right') elseif Config.TextUI:lower() == 'esxtextui' then ESX.TextUI(text) elseif Config.TextUI:lower() == 'qbdrawtext' then exports['qb-core']:DrawText(text,'left') elseif Config.TextUI:lower() == 'brutal_textui' then exports['brutal_textui']:Open(text, "blue") end elseif type == 'hide' then if Config.TextUI:lower() == 'ox_lib' then lib.hideTextUI() elseif Config.TextUI:lower() == 'okoktextui' then exports['okokTextUI']:Close() elseif Config.TextUI:lower() == 'esxtextui' then ESX.HideUI() elseif Config.TextUI:lower() == 'qbdrawtext' then exports['qb-core']:HideText() elseif Config.TextUI:lower() == 'brutal_textui' then exports['brutal_textui']:Close() end end end end function InventoryOpenFunction(type, data) if type == 'society' then local job = data local label = job:sub(1, 1):upper() .. job:sub(2):lower().." Stash" if Config.Inventory:lower() == 'ox_inventory' then exports.ox_inventory:openInventory('stash', {id = "stash_"..job}) elseif Config.Inventory:lower() == 'qb_inventory' then if GetResourceState('qb-inventory') == "started" then TriggerServerEvent("qb-inventory:server:OpenInventory", "stash_"..job, {label = label, maxweight = 100000, slots = 100}) else TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..job, {label = label, maxweight = 100000, slots = 100}) TriggerEvent("inventory:client:SetCurrentStash", "stash_"..job) end elseif Config.Inventory:lower() == 'quasar_inventory' then TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..job, {label = label, maxweight = 100000, slots = 100}) TriggerEvent("inventory:client:SetCurrentStash", "stash_"..job) elseif Config.Inventory:lower() == 'chezza_inventory' then TriggerEvent("inventory:openInventory", {type = "stash", id = "stash_"..job, title = label, weight = 100000, delay = 100, save = true}) elseif Config.Inventory:lower() == 'core_inventory' then TriggerServerEvent("core_inventory:server:openInventory", "stash_"..job, "big_storage") elseif Config.Inventory:lower() == 'codem_inventory' then TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..job, {label = label, maxweight = 100000, slots = 100}) elseif Config.Inventory:lower() == 'origen_inventory' then exports.origen_inventory:openInventory("stash", "stash_"..job, {label = label, maxweight = 100000, slots = 100}) elseif Config.Inventory:lower() == 'ps-inventory' then if GetResourceState('ps-inventory') == "started" then TriggerServerEvent("ps-inventory:server:OpenInventory", "stash_"..job, {label = label, maxweight = 100000, slots = 100}) TriggerEvent("ps-inventory:client:SetCurrentStash", "stash_"..job) else TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..job, {label = label, maxweight = 100000, slots = 100}) TriggerEvent("inventory:client:SetCurrentStash", "stash_"..job) end end elseif type == 'search_player' then local target = data if Config.Inventory:lower() == 'ox_inventory' then exports.ox_inventory:openInventory('player', target) elseif Config.Inventory:lower() == 'qb_inventory' then if GetResourceState('qb-inventory') == "started" then TriggerServerEvent("qb-inventory:server:OpenPlayerInventory", target) else TriggerServerEvent("inventory:server:OpenInventory", "otherplayer", target) end elseif Config.Inventory:lower() == 'quasar_inventory' then TriggerServerEvent("inventory:server:OpenInventory", "otherplayer", target) elseif Config.Inventory:lower() == 'chezza_inventory' then TriggerEvent("inventory:openPlayerInventory", target, true) elseif Config.Inventory:lower() == 'core_inventory' then TriggerServerEvent('core_inventory:server:openInventory', target, 'otherplayer', nil, nil, false) elseif Config.Inventory:lower() == 'codem_inventory' then TriggerServerEvent('codem-inventory:server:robplayer', target) elseif Config.Inventory:lower() == 'origen_inventory' then exports.origen_inventory:openInventory('player', target) elseif Config.Inventory:lower() == 'ps-inventory' then if GetResourceState('ps-inventory') == "started" then TriggerServerEvent('ps-inventory:server:OpenInventory', 'otherplayer', target) else TriggerServerEvent('inventory:server:OpenInventory', 'otherplayer', target) end end elseif type == 'search_vehicle_trunk' then local vehicle = data local plate = GetVehicleNumberPlateText(vehicle) if Config.Inventory:lower() == 'ox_inventory' then exports.ox_inventory:openInventory('trunk', {id='trunk'..plate, netid = NetworkGetNetworkIdFromEntity(vehicle)}) elseif Config.Inventory:lower() == 'qb_inventory' then if GetResourceState('qb-inventory') == "started" then TriggerServerEvent("qb-inventory:server:OpenInventory", nil, 'trunk-'..plate) else TriggerServerEvent("inventory:server:OpenInventory", "trunk", plate, {maxweight = 1000000, slots = 50}) end elseif Config.Inventory:lower() == 'quasar_inventory' then TriggerServerEvent("inventory:server:OpenInventory", "trunk", plate, {maxweight = 1000000, slots = 50}) elseif Config.Inventory:lower() == 'chezza_inventory' then TriggerEvent('inventory:openInventory', {type = "trunk", id = plate, title = "Vehicle Trunk", weight = false, delay = 300, save = true}) elseif Config.Inventory:lower() == 'core_inventory' then -- no data elseif Config.Inventory:lower() == 'codem_inventory' then TriggerEvent('codem-inventory:openInventory', 'trunk', plate) elseif Config.Inventory:lower() == 'origen_inventory' then exports.origen_inventory:openInventory('trunk', plate, {maxweight = 1000000, slots = 50}) elseif Config.Inventory:lower() == 'ps-inventory' then if GetResourceState('ps-inventory') == "started" then TriggerServerEvent("ps-inventory:server:OpenInventory", "trunk", plate, {maxweight = 1000000, slots = 50}) else TriggerServerEvent("inventory:server:OpenInventory", "trunk", plate, {maxweight = 1000000, slots = 50}) end end elseif type == 'search_vehicle_glovebox' then local vehicle = data local plate = GetVehicleNumberPlateText(vehicle) if Config.Inventory:lower() == 'ox_inventory' then exports.ox_inventory:openInventory('glovebox', {id='glovebox'..plate, netid = NetworkGetNetworkIdFromEntity(vehicle)}) elseif Config.Inventory:lower() == 'qb_inventory' then if GetResourceState('qb-inventory') == "started" then TriggerServerEvent("qb-inventory:server:OpenInventory", nil, 'glovebox-'..plate) else TriggerServerEvent("inventory:server:OpenInventory", "glovebox", plate) end elseif Config.Inventory:lower() == 'quasar_inventory' then TriggerServerEvent("inventory:server:OpenInventory", "glovebox", plate) elseif Config.Inventory:lower() == 'chezza_inventory' then TriggerEvent('inventory:openInventory', {type = "glovebox", id = plate, title = "Vehicle Glove Box", weight = false, delay = 300, save = true}) elseif Config.Inventory:lower() == 'core_inventory' then -- no data elseif Config.Inventory:lower() == 'codem_inventory' then TriggerEvent('codem-inventory:openInventory', 'glovebox', plate) elseif Config.Inventory:lower() == 'origen_inventory' then exports.origen_inventory:openInventory('glovebox', plate, {maxweight = 1000000, slots = 50}) elseif Config.Inventory:lower() == 'ps-inventory' then if GetResourceState('ps-inventory') == "started" then TriggerServerEvent("ps-inventory:server:OpenInventory", "glovebox", plate) else TriggerServerEvent("inventory:server:OpenInventory", "glovebox", plate) end end end end function ProgressBarFunction(time, text) if Config.ProgressBar:lower() == 'progressbars' then --LINK: https://github.com/EthanPeacock/progressBars/releases/tag/1.0 exports['progressBars']:startUI(time, text) elseif Config.ProgressBar:lower() == 'mythic_progbar' then -- LINK: https://github.com/HarryElSuzio/mythic_progbar TriggerEvent("mythic_progbar:client:progress", {name = "policejobduty", duration = time, label = text, useWhileDead = false, canCancel = false}) elseif Config.ProgressBar:lower() == 'pogressbar' then -- LINK: https://github.com/SWRP-PUBLIC/pogressBar exports['pogressBar']:drawBar(time, text) end end function BossMenuFunction(job) if Config['Core']:upper() == 'ESX' then TriggerEvent('esx_society:openBossMenu', job, function(data) end, { wash = false }) elseif Config['Core']:upper() == 'QBCORE' then TriggerEvent('qb-bossmenu:client:OpenMenu') end end function PlayerReviveFunction() if Config['Core']:upper() == 'ESX' then TriggerEvent('esx_ambulancejob:revive') elseif Config['Core']:upper() == 'QBCORE' then TriggerEvent('hospital:client:Revive') end end function ImpoundDeleteVehicle(vehicle) local plate = GetVehicleNumberPlateText(vehicle) DeleteEntity(vehicle) end function HandCuffedEvent(cuffed) if cuffed then --exports['qs-smartphone']:canUsePhone(false) --exports["lb-phone"]:ToggleDisabled(true) else --exports['qs-smartphone']:canUsePhone(true) --exports["lb-phone"]:ToggleDisabled(false) end end function CustomMDT() -- You can open another MDT here end function BulletProofVest() local playerPed = PlayerPedId() AddArmourToPed(playerPed, 100) SetPedArmour(playerPed, 100) SetPedComponentVariation(playerPed, 9, 27, 9, 2) end function OpenCloakroomMenuEvent() TriggerEvent('qb-clothing:client:openOutfitMenu') end function CitizenWear() if Config['Core']:upper() == 'ESX' then Core.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin) TriggerEvent('skinchanger:loadSkin', skin) end) elseif Config['Core']:upper() == 'QBCORE' then TriggerServerEvent('qb-clothes:loadPlayerSkin') end end function setUniform(uniformTable) if Config['Core']:upper() == 'ESX' then TriggerEvent('skinchanger:getSkin', function(skin) local uniform if skin.sex == 0 then uniform = uniformTable.male else uniform = uniformTable.female end local table = {} for k,v in pairs(uniform) do if k == 't-shirt' then table.tshirt_1 = uniform['t-shirt'].item table.tshirt_2 = uniform['t-shirt'].texture elseif k == 'torso2' then table.torso_1 = uniform['torso2'].item table.torso_2 = uniform['torso2'].texture elseif k == 'decals' then table.decals_1 = uniform['decals'].item table.decals_2 = uniform['decals'].texture elseif k == 'arms' then table.arms = uniform['arms'].item elseif k == 'pants' then table.pants_1 = uniform['pants'].item table.pants_2 = uniform['pants'].texture elseif k == 'shoes' then table.shoes_1 = uniform['shoes'].item table.shoes_2 = uniform['shoes'].texture elseif k == 'hat' then table.helmet_1 = uniform['hat'].item table.helmet_2 = uniform['hat'].texture elseif k == 'accessory' then table.chain_1 = uniform['accessory'].item table.chain_2 = uniform['accessory'].texture elseif k == 'ear' then table.ears_1 = uniform['ear'].item table.ears_2 = uniform['ear'].texture elseif k == 'mask' then table.mask_1 = uniform['mask'].item table.mask_2 = uniform['mask'].texture end end TriggerEvent('skinchanger:loadClothes', skin, table) end) elseif Config['Core']:upper() == 'QBCORE' then local table = {} local gender = QBCore.Functions.GetPlayerData().charinfo.gender if gender == 0 then table.outfitData = uniformTable.male else table.outfitData = uniformTable.female end TriggerEvent('qb-clothing:client:loadOutfit', table) end end function LockPick(vehicle) if Config['Core']:upper() == 'ESX' then local playerPed = PlayerPedId() TaskStartScenarioInPlace(playerPed, 'WORLD_HUMAN_WELDING', 0, true) Wait(1000*10) ClearPedTasksImmediately(playerPed) NetworkRegisterEntityAsNetworked(vehicle) NetworkRequestControlOfEntity(vehicle) SetEntityAsMissionEntity(vehicle) SetVehicleDoorsLocked(vehicle, 1) SetVehicleDoorsLockedForAllPlayers(vehicle, false) elseif Config['Core']:upper() == 'QBCORE' then TriggerEvent('lockpicks:UseLockpick') end end function DisableMinimap() DisplayRadar(false) end function EnableMinimap() DisplayRadar(true) end function OpenMenuUtil() InMenu = true SetNuiFocus(true, true) Citizen.CreateThread(function() while InMenu do N_0xf4f2c0d4ee209e20() -- it's disable the AFK camera zoom Citizen.Wait(15000) end end) DisplayRadar(false) end function CloseMenuUtil() Citizen.CreateThread(function() Citizen.Wait(1000) InMenu = false end) SetNuiFocus(false, false) DisplayRadar(true) end function GeneratePolicePlace() return string.sub(PlayerData.job.label, 1, 4)..''..math.random(0001, 9999) end function IsTargetDead(playerPed) local dead = false if IsEntityPlayingAnim(playerPed, 'dead', 'dead_a', 3) or IsEntityPlayingAnim(playerPed, 'combat@damage@writhe', 'writhe_loop', 3) then dead = true end return dead end -----------------------| UTILS TRIGGERS |----------------------- RegisterNetEvent('brutal_policejob:client:utils:CreateVehicle') AddEventHandler('brutal_policejob:client:utils:CreateVehicle', function(Vehicle) SetVehicleFuelLevel(Vehicle, 100.0) DecorSetFloat(Vehicle, "_FUEL_LEVEL", GetVehicleFuelLevel(Vehicle)) if Config['Core']:upper() == 'QBCORE' then TriggerEvent("vehiclekeys:client:SetOwner", GetVehicleNumberPlateText(Vehicle)) end end) RegisterNetEvent('brutal_policejob:client:utils:DeleteVehicle') AddEventHandler('brutal_policejob:client:utils:DeleteVehicle', function(Vehicle) end)