201 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 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)
 | |
|     if ESX then
 | |
|         ESX.ShowNotification(message, 'info', 5000)
 | |
|     elseif QBCore then
 | |
|         QBCore.Functions.Notify(message, 'primary', 5000)
 | |
|     end
 | |
| end
 | |
| 
 | |
| Functions.CanVehicleHaveDartSystem = function(vehicle)
 | |
|     local vehicleModel = GetEntityModel(vehicle)
 | |
|     if not Config.allowedVehicles[vehicleModel] then
 | |
|         return false
 | |
|     end
 | |
| 
 | |
|     return true
 | |
| end
 | |
| 
 | |
| Functions.CanVehicleShootDart = function(vehicle)
 | |
|     return true
 | |
| end
 | |
| 
 | |
| Functions.CanPlayerShootDart = function()
 | |
|     -- For example: Add a job check if you wish
 | |
| 
 | |
|     return true
 | |
| end
 | |
| 
 | |
| -- Called every frame when the vehicle is in 'sight' of the tracker system
 | |
| Functions.OnVehicleHit = function(targetVehicle, hitCoords)
 | |
| 
 | |
| end
 | |
| 
 | |
| Functions.CanOpenOverlay = function()
 | |
|     local playerPed = PlayerPedId()
 | |
|     local vehicle = GetVehiclePedIsIn(playerPed, false)
 | |
| 
 | |
|     if (vehicle == 0) then
 | |
|         return false
 | |
|     end
 | |
| 
 | |
|     -- Check if the ped is the driver
 | |
|     local driverPed = GetPedInVehicleSeat(vehicle, -1)
 | |
|     if (driverPed ~= playerPed) then
 | |
|         return false
 | |
|     end
 | |
| 
 | |
|     if IsPedDeadOrDying(playerPed, true) then
 | |
|         return false
 | |
|     end
 | |
| 
 | |
|     return true
 | |
| end
 | |
| 
 | |
| Functions.HasJob = function()
 | |
|     if not Config.allowedJobs then
 | |
|         return true
 | |
|     end
 | |
| 
 | |
|     local playerJob = 'unemployed'
 | |
|     if ESX then
 | |
|         playerJob = ESX.GetPlayerData()?.job?.name or 'unemployed'
 | |
|     elseif QBCore then
 | |
|         playerJob = QBCore.Functions.GetPlayerData()?.job?.name or 'unemployed'
 | |
|     end
 | |
| 
 | |
|     return (Config.allowedJobs[playerJob] ~= nil)
 | |
| end
 | |
| 
 | |
| Functions.ShouldDisplayBlips = function()
 | |
|     return true
 | |
| end
 | |
| 
 | |
| Functions.RemoveDartMinigame = function()
 | |
|     local areaSize = 40
 | |
|     local speedMultiplier = 1.5
 | |
| 
 | |
|     for i = 1, 5 do
 | |
|         local success = lib.skillCheck({ areaSize = areaSize, speedMultiplier = speedMultiplier }, { 'E' })
 | |
|         if not success then
 | |
|             return false
 | |
|         end
 | |
| 
 | |
|         areaSize -= 2
 | |
|         speedMultiplier += 0.05
 | |
| 
 | |
|         Wait(300)
 | |
|     end
 | |
| 
 | |
|     return true
 | |
| end
 | |
| 
 | |
| Functions.CanInteract = function(entity)
 | |
|     local playerPed = PlayerPedId()
 | |
| 
 | |
|     if IsPedDeadOrDying(playerPed, true) then
 | |
|         return false
 | |
|     end
 | |
| 
 | |
|     if IsPedInAnyVehicle(playerPed, false) then
 | |
|         return false
 | |
|     end
 | |
| 
 | |
|     return true
 | |
| end
 | |
| 
 | |
| Functions.CreateRemoveTarget = function(canInteract, onSelect)
 | |
|     if (GetResourceState('ox_target') == 'started') then
 | |
|         exports.ox_target:addGlobalVehicle({ {
 | |
|             icon = 'fa-solid fa-xmark',
 | |
|             label = Config.Locales['remove_target'],
 | |
|             canInteract = function(entity)
 | |
|                 return canInteract(entity)
 | |
|             end,
 | |
|             onSelect = function(data)
 | |
|                 onSelect(data.entity)
 | |
|             end,
 | |
|             distance = Config.interactDistance,
 | |
|         } })
 | |
|         return
 | |
|     end
 | |
| 
 | |
|     if (GetResourceState('qb-target') == 'started') then
 | |
|         exports['qb-target']:AddGlobalVehicle({
 | |
|             options = {
 | |
|                 {
 | |
|                     icon = 'fa-solid fa-xmark',
 | |
|                     label = Config.Locales['remove_target'],
 | |
|                     action = function(entity)
 | |
|                         onSelect(entity)
 | |
|                     end,
 | |
|                     canInteract = function(entity)
 | |
|                         return canInteract(entity)
 | |
|                     end,
 | |
|                 },
 | |
|             },
 | |
|             distance = Config.interactDistance,
 | |
|         })
 | |
|         return
 | |
|     end
 | |
| 
 | |
|     print('[ERROR] No target interaction defined. Please implement your own target interaction.')
 | |
| end
 | |
| 
 | |
| Functions.InstallingTrackerSystem = function(entity)
 | |
|     -- Called while installing the tracker system.
 | |
|     -- For example: Add an animation or progress bar
 | |
| 
 | |
|     -- Return 'false' to cancel the installation
 | |
|     return true
 | |
| end
 | |
| 
 | |
| Functions.CreateInstallTarget = function(canInteract, onSelect)
 | |
|     if (GetResourceState('ox_target') == 'started') then
 | |
|         exports.ox_target:addGlobalVehicle({ {
 | |
|             icon = 'fa-solid fa-location-crosshairs',
 | |
|             label = Config.Locales['install_target'],
 | |
|             distance = Config.interactDistance,
 | |
|             items = Config.itemName,
 | |
|             canInteract = function(entity)
 | |
|                 return canInteract(entity)
 | |
|             end,
 | |
|             onSelect = function(data)
 | |
|                 onSelect(data.entity)
 | |
|             end,
 | |
|         } })
 | |
|         return
 | |
|     end
 | |
| 
 | |
|     if (GetResourceState('qb-target') == 'started') then
 | |
|         exports['qb-target']:AddGlobalVehicle({
 | |
|             options = {
 | |
|                 {
 | |
|                     icon = 'fa-solid fa-location-crosshairs',
 | |
|                     label = Config.Locales['install_target'],
 | |
|                     item = Config.itemName,
 | |
|                     action = function(entity)
 | |
|                         onSelect(entity)
 | |
|                     end,
 | |
|                     canInteract = function(entity)
 | |
|                         return canInteract(entity)
 | |
|                     end,
 | |
|                 },
 | |
|             },
 | |
|             distance = Config.interactDistance,
 | |
|         })
 | |
|         return
 | |
|     end
 | |
| 
 | |
|     print('[ERROR] No target interaction defined. Please implement your own target interaction.')
 | |
| end
 | 
