forked from Simnation/Main
80 lines
No EOL
3.3 KiB
Lua
80 lines
No EOL
3.3 KiB
Lua
local QBCore = exports['qb-core']:GetCoreObject()
|
|
local config = require 'config'
|
|
local utils = require 'server.utils'
|
|
local db = require 'server.db'
|
|
|
|
-- QB Usable Items
|
|
QBCore.Functions.CreateUseableItem(config.trackerItem, function(source, item)
|
|
TriggerClientEvent('qb_vehicle_tracker:client:placeTracker', source, item.slot, utils.getRandomSerialNumber())
|
|
end)
|
|
|
|
QBCore.Functions.CreateUseableItem(config.trackerTabletItem, function(source, item)
|
|
local serialNumber = item.info and item.info.serialNumber or item.metadata.serialNumber
|
|
TriggerClientEvent('qb_vehicle_tracker:client:manageTracker', source, serialNumber)
|
|
end)
|
|
|
|
QBCore.Functions.CreateUseableItem(config.trackerScannerItem, function(source, item)
|
|
TriggerClientEvent('qb_vehicle_tracker:client:scanTracker', source, item.slot)
|
|
end)
|
|
|
|
-- Event Handler
|
|
AddEventHandler('onResourceStart', function(resourceName)
|
|
if cache.resource == resourceName then
|
|
db.deleteOldTrackers()
|
|
end
|
|
end)
|
|
|
|
-- Callbacks
|
|
lib.callback.register('qb_vehicle_tracker:getTrackedVehicleBySerial', function(_, serialNumber)
|
|
if type(serialNumber) ~= "string" or string.len(serialNumber) < 11 then return end
|
|
|
|
local tracker = db.getTracker(serialNumber)
|
|
if not tracker then return end
|
|
|
|
local vehicleNetworkID = utils.getVehicleNetworkIdByPlate(tracker.vehiclePlate)
|
|
if not vehicleNetworkID then return end
|
|
|
|
local vehicleEntity = NetworkGetEntityFromNetworkId(vehicleNetworkID)
|
|
if not DoesEntityExist(vehicleEntity) then return end
|
|
|
|
local vehCoords = GetEntityCoords(vehicleEntity)
|
|
|
|
return tracker.vehiclePlate, vector2(vehCoords.x, vehCoords.y)
|
|
end)
|
|
|
|
lib.callback.register('qb_vehicle_tracker:isVehicleTracked', function(source, vehiclePlate)
|
|
if type(vehiclePlate) ~= "string" or not utils.isPlayerNearVehicle(GetEntityCoords(GetPlayerPed(source)), vehiclePlate) then
|
|
return false
|
|
end
|
|
|
|
return db.isTracked(utils.trim(vehiclePlate))
|
|
end)
|
|
|
|
lib.callback.register('qb_vehicle_tracker:placeTracker', function(source, vehiclePlate, slot, serialNumber)
|
|
if type(vehiclePlate) ~= "string" or type(serialNumber) ~= "string" or string.len(serialNumber) < 11 then return false end
|
|
if not utils.isPlayerNearVehicle(GetEntityCoords(GetPlayerPed(source)), vehiclePlate) then return false end
|
|
if not db.addTracker(serialNumber, utils.trim(vehiclePlate)) then return false end
|
|
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
if Player.Functions.AddItem(config.trackerTabletItem, 1, false, { plate = utils.trim(vehiclePlate), serialNumber = serialNumber }) then
|
|
Player.Functions.RemoveItem(config.trackerItem, 1, slot)
|
|
TriggerClientEvent('inventory:client:ItemBox', source, QBCore.Shared.Items[config.trackerTabletItem], 'add')
|
|
end
|
|
|
|
return true
|
|
end)
|
|
|
|
lib.callback.register('qb_vehicle_tracker:removeTracker', function(source, vehiclePlate, slot)
|
|
if type(vehiclePlate) ~= "string" or not utils.isPlayerNearVehicle(GetEntityCoords(GetPlayerPed(source)), vehiclePlate) then
|
|
return false
|
|
end
|
|
|
|
if not db.deleteTracker(utils.trim(vehiclePlate)) then return false end
|
|
|
|
local Player = QBCore.Functions.GetPlayer(source)
|
|
if Player.Functions.RemoveItem(config.trackerScannerItem, 1, slot) then
|
|
TriggerClientEvent('inventory:client:ItemBox', source, QBCore.Shared.Items[config.trackerScannerItem], 'remove')
|
|
end
|
|
|
|
return true
|
|
end) |