MenuIsOpen = false CacheId = 0 -- for the fingerprint source FastCache = 0 Gunshot = false PlayerData = {} OpenMenu = function() PlayerData = Framework.GetPlayerData() access = false for k,v in pairs(Config.AccessJobList) do if PlayerData.job.name == v then access = true end end if not access then Notify(Config.Locales['menu_title'], Config.Locales['no_permission'], 'error') return end SetNuiFocus(1, 1) SendNUIMessage({ action = 'open', locales = Config.Locales}) SetCursorLocation(0.87, 0.7) SetNuiFocusKeepInput(1) MenuIsOpen = true DisablePunch() end RegisterNetEvent('alizadev-fingerprint:client:openMenu') AddEventHandler('alizadev-fingerprint:client:openMenu', OpenMenu) if Config.EnableCommand then RegisterCommand(Config.Command, OpenMenu) end if Config.EnableControl then RegisterKeyMapping(Config.Command, Config.Locales['menu_title'], 'keyboard', Config.Key) end RegisterNUICallback('allowShareMyData', function(data, cb) TriggerServerEvent('alizadev-fingerprint:server:allowShareMyData', GetPlayerServerId(PlayerId()), CacheId) end) RegisterNUICallback('scan', function(data, cb) local closestPlayer, closestDistance = Framework.GetClosestPlayer() if closestPlayer ~= -1 and closestDistance <= 2.0 then FastCache = GetPlayerServerId(closestPlayer) TriggerServerEvent('alizadev-fingerprint:server:requestScan', GetPlayerServerId(PlayerId()), FastCache) else Notify(Config.Locales['menu_title'], Config.Locales['no_nearby_players'], 'error') return cb('error') end end) RegisterNetEvent('alizadev-fingerprint:client:scanResult') AddEventHandler('alizadev-fingerprint:client:scanResult', function(data) SendNUIMessage({ action = 'scanResult', result = data}) end) RegisterNetEvent('alizadev-fingerprint:server:requestScan') AddEventHandler('alizadev-fingerprint:server:requestScan', function(source) CacheId = source SetNuiFocus(1, 1) SendNUIMessage({ action = 'fingerprint', locales = Config.Locales}) SetCursorLocation(0.87, 0.7) SetNuiFocusKeepInput(1) MenuIsOpen = true DisablePunch() end) RegisterNUICallback('refuse', function(data, cb) TriggerServerEvent('alizadev-fingerprint:server:refuse', CacheId) end) RegisterNetEvent('alizadev-fingerprint:client:refuse') AddEventHandler('alizadev-fingerprint:client:refuse', function() SendNUIMessage({ action = 'refused'}) Notify(Config.Locales['menu_title'], Config.Locales['scan_refused'], 'error') end) RegisterNUICallback('notify', function(data, cb) Notify(data.title, data.message, data.type) end) RegisterNUICallback('playerList', function(data, cb) Framework.TriggerServerCallback('alizadev-fingerprint:server:getPlayerList', function(players) return cb(players) end) end) RegisterNUICallback('wantedList', function(data, cb) Framework.TriggerServerCallback('alizadev-fingerprint:server:wantedList', function(players) return cb(players) end) end) RegisterNUICallback('disableFullNui', function() SetNuiFocusKeepInput(0) end) RegisterNUICallback('enableNui', function() SetNuiFocusKeepInput(1) end) RegisterNUICallback('addToWanted', function(data, cb) TriggerServerEvent('alizadev-fingerprint:server:addToWanted', data) end) RegisterNUICallback('removeWanted', function(data, cb) TriggerServerEvent('alizadev-fingerprint:server:removeWanted', data) end) RegisterNUICallback('cancelScan', function(data, cb) TriggerServerEvent('alizadev-fingerprint:server:cancelScan', FastCache) end) RegisterNetEvent('alizadev-fingerprint:client:cancelScan') AddEventHandler('alizadev-fingerprint:client:cancelScan', function() SetNuiFocus(0, 0) SetNuiFocusKeepInput(0) SendNUIMessage({ action = 'close'}) Wait(200) MenuIsOpen = false DisablePunch() end) RegisterNUICallback('history', function(data, cb) Framework.TriggerServerCallback('alizadev-fingerprint:server:historyList', function(players) return cb(players) end) end) RegisterNUICallback('close', function() SetNuiFocus(0, 0) SetNuiFocusKeepInput(0) Wait(200) MenuIsOpen = false DisablePunch() end) DisablePunch = function() Citizen.CreateThread(function() while MenuIsOpen do Citizen.Wait(0) DisablePlayerFiring(PlayerId(), true) DisableControlAction(0, 21, true) DisableControlAction(0, 25, true) DisableControlAction(0, 140, true) DisableControlAction(0, 141, true) DisableControlAction(0, 142, true) DisableControlAction(0, 200, true) DisableControlAction(0, 199, true) DisableControlAction(0, 14, true) DisableControlAction(0, 15, true) DisableControlAction(0, 16, true) DisableControlAction(0, 17, true) end end) end Notify = function(title, description, typeX) lib.notify({ title = title, description = description, type = typeX }) end RegisterNetEvent('alizadev-fingerprint:client:notify') AddEventHandler('alizadev-fingerprint:client:notify', Notify) Citizen.CreateThread(function() while true do Citizen.Wait(1) if NetworkIsPlayerActive(PlayerId()) then TriggerServerEvent('alizadev-fingerprint:server:request') break end end end) haveThread = true GunshotThread = function() Citizen.CreateThread(function() while haveThread == true do Citizen.Wait(Config.TimeoutGunshot) Gunshot = false haveThread = false TriggerServerEvent('alizadev-fingerprint:server:gunshot', false) end end) end AddEventHandler('CEventGunShot', function(entities, eventEntity, args) if eventEntity == PlayerPedId() then -- Check if player is holding a paintball gun local currentWeapon = GetSelectedPedWeapon(PlayerPedId()) local paintballHash = GetHashKey(Config.noFingerprintWeapon) -- Only trigger gunshot events if it's NOT a paintball gun if currentWeapon ~= paintballHash then Gunshot = true haveThread = true TriggerServerEvent('alizadev-fingerprint:server:gunshot', true) GunshotThread() end end end) Citizen.CreateThread(function() while true do if Gunshot == true then Citizen.Wait(1000) else Citizen.Wait(10000) end if IsPedSwimming(PlayerPedId()) then TriggerServerEvent('alizadev-fingerprint:server:gunshot', false) end end end) RegisterNetEvent('esx:setJob', function(job) PlayerData.job = job end) RegisterNetEvent('QBCore:Client:OnJobUpdate') AddEventHandler('QBCore:Client:OnJobUpdade', function(job) PlayerData.job = job end)