ESX = nil QBCore = nil local CurrentActionMsg = '' local isInFixedSpot = false local currentMessage = nil local SystemIsOpen = false local tabletObject = nil local NuiIsReady = false local NotifyOnNuiReady = false CreateThread(function() while ESX == nil and QBCore == nil do if Config.Framework == "ESX" then ESX = exports["es_extended"]:getSharedObject() elseif Config.Framework == "QB" then QBCore = exports['qb-core']:GetCoreObject() end Wait(1) end end) function isTabletOpen() return SystemIsOpen end -- draw markers Citizen.CreateThread(function() if Config.UseFixedZones then while true do Citizen.Wait(1) local executeSleep = true local playerCoords = GetEntityCoords(PlayerPedId()) currentMessage = nil isInFixedSpot = false if not SystemIsOpen then for key, spot in pairs(Config.FixedZones) do local distance = #(playerCoords - spot) if distance < Config.DrawMarkerDistance then DrawMarker( Config.FixesZonesMarkerCfg.type , spot , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , Config.FixesZonesMarkerCfg.x , Config.FixesZonesMarkerCfg.y , Config.FixesZonesMarkerCfg.z , Config.FixesZonesMarkerCfg.r , Config.FixesZonesMarkerCfg.g , Config.FixesZonesMarkerCfg.b , Config.FixesZonesMarkerCfg.a , false , false , 2 , Config.FixesZonesMarkerCfg.rotate , nil , nil , false ) executeSleep = false end if distance <= Config.EnteredMarkerDistance then isInFixedSpot = true notify(Config.FixedZonesText[Config.Locale]) executeSleep = false end end end if executeSleep then Citizen.Wait(1000) end end end end) Citizen.CreateThread(function() if Config.UseFixedZones then while true do Citizen.Wait(1) if isInFixedSpot then if not IsPedInAnyVehicle(PlayerPedId()) then if IsControlJustPressed(0, 51) then TriggerServerEvent('myEmergency:openSystem') end end end end end end) function notify(message) if Config.Framework == "ESX" then ESX.ShowHelpNotification(message) else SetTextComponentFormat('STRING') AddTextComponentString(message) DisplayHelpTextFromStringLabel(0, 0, 1, -1) end end RegisterNetEvent("myEmergency:openViaClient") AddEventHandler("myEmergency:openViaClient", function() TriggerServerEvent('myEmergency:openSystem') end) RegisterNetEvent("myEmergency:notify") AddEventHandler("myEmergency:notify", function(notificationtext) SetNotificationTextEntry('STRING') AddTextComponentString(notificationtext) DrawNotification(false, false) end) --nui callbacks... RegisterNUICallback('overview', function(uidata, uicb) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:loadOverview', function(selectedData, cnt, limitDisabled, extraData) local retdata = {data = selectedData, count=cnt, pageNum=uidata.pageNum, noLimit=limitDisabled, xtraData = extraData} uicb(retdata) end, uidata.pageNum, uidata.quicksearch, uidata.load_info) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:loadOverview', function(selectedData, cnt, limitDisabled, extraData) local retdata = {data = selectedData, count=cnt, pageNum=uidata.pageNum, noLimit=limitDisabled, xtraData = extraData} uicb(retdata) end, uidata.pageNum, uidata.quicksearch, uidata.load_info) end end) RegisterNUICallback('loadDetails', function(uidata, uicb) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:loadDetails', function(selectedData) local retdata = {data = selectedData} uicb(retdata) end, uidata.id, uidata.load_info) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:loadDetails', function(selectedData) local retdata = {data = selectedData} uicb(retdata) end, uidata.id, uidata.load_info) end end) RegisterNUICallback('custom', function(uidata, uiCallback) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:loadCustom', function(selectedData) local retdata = {data = selectedData} uiCallback(retdata) end, uidata.load_info, uidata.id) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:loadCustom', function(selectedData) local retdata = {data = selectedData} uiCallback(retdata) end, uidata.load_info, uidata.id) end end) RegisterNUICallback('save-data', function(uidata, uicb) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:save-data', function() uicb({success = true}) end, uidata.id, uidata.formData, uidata.source) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:save-data', function() uicb({success = true}) end, uidata.id, uidata.formData, uidata.source) end end) RegisterNUICallback('delete-data', function(uidata, uicb) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:delete-data', function() uicb({success = true}) end, uidata.id, uidata.source) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:delete-data', function() uicb({success = true}) end, uidata.id, uidata.source) end end) RegisterNUICallback('finish-manhunt', function(uidata, uicb) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:finish-manhunt', function() uicb({success = true}) end, uidata.id, uidata.source) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:finish-manhunt', function() uicb({success = true}) end, uidata.id, uidata.source) end end) RegisterNUICallback('takeControlCentre', function(uidata, uicb) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:takeControlCentre', function() uicb({success = true}) end, uidata.isReset) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:takeControlCentre', function() uicb({success = true}) end, uidata.isReset) end end) RegisterNUICallback('SetRadioState', function(uidata, uicb) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:SetRadioState', function() uicb({success = true}) end, uidata.new_state) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:SetRadioState', function() uicb({success = true}) end, uidata.new_state) end end) RegisterNUICallback('SetVehicle', function(uidata, uicb) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:SetVehicle', function() uicb({success = true}) end, uidata.new_state) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:SetVehicle', function() uicb({success = true}) end, uidata.new_state) end end) RegisterNUICallback('filterFilesDropdown', function(uidata, uicb) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:filterFileDropdown', function(filedata) uicb({data = filedata}) end, uidata.id, uidata.search) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:filterFileDropdown', function(filedata) uicb({data = filedata}) end, uidata.id, uidata.search) end end) RegisterNUICallback('resetVehicle', function(uidata, uicb) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:resetVehicle', function() uicb({success = true}) end, uidata.id) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:resetVehicle', function() uicb({success = true}) end, uidata.id) end end) RegisterNUICallback('resetEmployeeRadio', function(uidata, uicb) if Config.Framework == "ESX" then ESX.TriggerServerCallback('myEmergency:resetEmployeeRadio', function() uicb({success = true}) end, uidata.id) elseif Config.Framework == "QB" then QBCore.Functions.TriggerCallback('myEmergency:resetEmployeeRadio', function() uicb({success = true}) end, uidata.id) end end) RegisterNetEvent("myEmergency:open") AddEventHandler("myEmergency:open",function(userName, rights, jobname, jobgrade, systemtoshow, job_grades, theme, syncData, syncDataLicenses) if NuiIsReady then local SyncData = {LicensesSync = syncDataLicenses.sync, MainSync = {active = syncData.active, types = syncData.Types}} SendNUIMessage({ message = "show", username = userName, rights = rights, job = jobname, jobgrade = jobgrade, currentsystem = systemtoshow, job_grades = job_grades, locale = Config.Locale, Sync=SyncData ,useWeaponRegister=Config.UseWeaponRegister ,useMyImpound=Config.UseMyImpound ,useMySpeedcam=Config.UseMySpeedcam ,theme=theme ,HandleParagraphsAsNumber=Config.HandleParagraphsAsNumber ,UseMotDateFromMyMechanicMDT=Config.UseMotDateFromMyMechanicMDT ,showLastMotDetailFromMyMechanicMDT=Config.showLastMotDetailFromMyMechanicMDT ,showPartAcceptanceFromMyMechanicMDT=Config.showPartAcceptanceFromMyMechanicMDT ,UseMyPrison=Config.UseMyPrison }); SetNuiFocus(true, true) SystemIsOpen = true startAnim() else NotifyOnNuiReady = true TriggerEvent("myEmergency:notify", Config.NuiNotReadyText[Config.Locale]) end end) RegisterNetEvent("myEmergency:openRadio") AddEventHandler("myEmergency:openRadio",function(data, curstate, theme) if NuiIsReady then SendNUIMessage({ message = "show-radio-states",locale=Config.Locale, data = data, curstate = curstate, config = Config.RadioHUD, theme=theme}); SetNuiFocus(true, true) else NotifyOnNuiReady = true TriggerEvent("myEmergency:notify", Config.NuiNotReadyText[Config.Locale]) end end) RegisterNetEvent("myEmergency:openSystem") AddEventHandler('myEmergency:openSystem',function() TriggerServerEvent('myEmergency:openSystem') end) RegisterNUICallback('NuiReady', function(uidata, uicb) SystemIsOpen = false NuiIsReady = true if NotifyOnNuiReady then TriggerEvent("myEmergency:notify", Config.NuiNowReadyText[Config.Locale]) end uicb({success = true}) end) RegisterNUICallback('closeWindow', function(uidata, uicb) SetNuiFocus(false, false) stopAnim() SystemIsOpen = false uicb({success = true}) end) RegisterNUICallback('GenerateRoute', function(uidata, uicb) SetNuiFocus(false, false) stopAnim() SystemIsOpen = false uicb({success = true}) SetNewWaypoint(uidata.x, uidata.y) end) AddEventHandler('onResourceStop', function(resource) if resource == GetCurrentResourceName() then if SystemIsOpen then SetNuiFocus(false, false) stopAnim() SystemIsOpen = false end end end) --functions function startAnim() Citizen.CreateThread(function() RequestAnimDict("amb@world_human_seat_wall_tablet@female@base") while not HasAnimDictLoaded("amb@world_human_seat_wall_tablet@female@base") do Citizen.Wait(0) end attachObject() TaskPlayAnim(GetPlayerPed(-1), "amb@world_human_seat_wall_tablet@female@base", "base" ,8.0, -8.0, -1, 50, 0, false, false, false) end) end function attachObject() if tabletObject ~= nil then -- delete tablet object DeleteObject(tabletObject) end --create model of tablet tabletObject = CreateObject(GetHashKey("prop_cs_tablet"), 0, 0, 0, true, true, true) AttachEntityToEntity(tabletObject, GetPlayerPed(-1), GetPedBoneIndex(GetPlayerPed(-1), 57005), 0.17, 0.10, -0.13, 20.0, 180.0, 180.0, true, true, false, true, 1, true) end function stopAnim() StopAnimTask(GetPlayerPed(-1), "amb@world_human_seat_wall_tablet@female@base", "base" ,8.0, -8.0, -1, 50, 0, false, false, false) DeleteEntity(tabletObject) end