ESX = nil QBCore = nil if (GetResourceState('es_extended') == 'started') then ESX = exports['es_extended']:getSharedObject() elseif (GetResourceState('qb-core') == 'started') then QBCore = exports['qb-core']:GetCoreObject() end Functions = {} Functions.Notify = function(message, isError) if ESX then messageType = isError and 'error' or 'info' ESX.ShowNotification(message, messageType, 5000) elseif QBCore then messageType = isError and 'error' or 'primary' QBCore.Functions.Notify(message, messageType, 5000) end end Functions.CopyToClipboard = function(text) emitNui('copyToClipboard', text) end Functions.ShowDialog = function(title, description) if GetResourceState('ox_lib') ~= 'started' then return true end local result = lib.alertDialog({ header = title, content = description, cancel = true, }) local success = (result ~= 'cancel') return success end Functions.TakeImage = function(data) -- local droneEntity = data.droneEntity local imageData = exports.fmsdk:takeImage() local imageUrl = imageData?.data?.url if imageUrl then Functions.CopyToClipboard(imageUrl) Functions.Notify(Config.Locales['screenshot_copied'], false) else Functions.Notify(Config.Locales['screenshot_failed'], true) end end Functions.CanUseDrone = function() local ped = PlayerPedId() -- Vehicle check if IsPedInAnyVehicle(ped, true) then return false end -- Interior check local curInterior = GetInteriorFromEntity(ped) if curInterior ~= 0 then return false end return true end -- Useful if you want to force delete the drone, for example when a player dies RegisterNetEvent('gs_drone:deleteDrone', function(isCrashed, doBlackout) deleteDrone(isCrashed, doBlackout) end) AddEventHandler('gs_drone:onDroneSpawn', function(data) local droneEntity = data.droneEntity local droneIndex = data.droneIndex end) AddEventHandler('gs_drone:onDroneDelete', function(data) local isCrashed = data.isCrashed end)