forked from Simnation/Main
ed
This commit is contained in:
parent
0d4416dbb4
commit
d0f50224d7
4 changed files with 82 additions and 19 deletions
|
@ -3,7 +3,7 @@ local config = require 'config'
|
|||
|
||||
-- Database functions
|
||||
local function deleteOldTrackers()
|
||||
return MySQL.query.await('DELETE FROM `vehicle_trackers` WHERE startedAt < (NOW() - INTERVAL 7 DAY)')
|
||||
return true
|
||||
end
|
||||
|
||||
local function addTracker(serialNumber, vehiclePlate, owner, name, phoneNumber)
|
||||
|
@ -16,7 +16,7 @@ local function deleteTracker(vehiclePlate)
|
|||
end
|
||||
|
||||
local function getTracker(serialNumber)
|
||||
return MySQL.single.await('SELECT `serialNumber`, `vehiclePlate`, `name`, `phoneNumber`, `owner` FROM `vehicle_trackers` WHERE `serialNumber` = ? LIMIT 1', { serialNumber })
|
||||
return MySQL.single.await('SELECT `serialNumber`, `vehiclePlate`, `name`, `phoneNumber`, `owner`, `lastKnownX`, `lastKnownY`, `lastKnownZ`, `lastUpdated` FROM `vehicle_trackers` WHERE `serialNumber` = ? LIMIT 1', { serialNumber })
|
||||
end
|
||||
|
||||
local function isTracked(vehiclePlate)
|
||||
|
@ -32,6 +32,12 @@ local function updateTrackerName(serialNumber, name)
|
|||
{ name, serialNumber })
|
||||
end
|
||||
|
||||
-- New function to update tracker position
|
||||
local function updateTrackerPosition(serialNumber, coords)
|
||||
return MySQL.prepare.await('UPDATE `vehicle_trackers` SET `lastKnownX` = ?, `lastKnownY` = ?, `lastKnownZ` = ? WHERE `serialNumber` = ?',
|
||||
{ coords.x, coords.y, coords.z, serialNumber })
|
||||
end
|
||||
|
||||
-- Utility functions
|
||||
local function getRandomSerialNumber()
|
||||
return lib.string.random('...........')
|
||||
|
@ -88,7 +94,7 @@ end)
|
|||
-- Event Handler
|
||||
AddEventHandler('onResourceStart', function(resourceName)
|
||||
if GetCurrentResourceName() == resourceName then
|
||||
deleteOldTrackers()
|
||||
-- deleteOldTrackers() -- Comment out to prevent deletion after 7 days
|
||||
end
|
||||
end)
|
||||
|
||||
|
@ -99,15 +105,30 @@ lib.callback.register('qb_vehicle_tracker:getTrackedVehicleBySerial', function(_
|
|||
local tracker = getTracker(serialNumber)
|
||||
if not tracker then return end
|
||||
|
||||
-- Try to find the vehicle in the world
|
||||
local vehicleNetworkID = 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), tracker.name
|
||||
|
||||
-- If vehicle is found in the world
|
||||
if vehicleNetworkID then
|
||||
local vehicleEntity = NetworkGetEntityFromNetworkId(vehicleNetworkID)
|
||||
if DoesEntityExist(vehicleEntity) then
|
||||
local vehCoords = GetEntityCoords(vehicleEntity)
|
||||
|
||||
-- Update the last known position in the database
|
||||
updateTrackerPosition(serialNumber, vehCoords)
|
||||
|
||||
return tracker.vehiclePlate, vector2(vehCoords.x, vehCoords.y), tracker.name
|
||||
end
|
||||
end
|
||||
|
||||
-- If vehicle is not found in the world, check if we have a last known position
|
||||
if tracker.lastKnownX and tracker.lastKnownY then
|
||||
-- Return the last known position
|
||||
return tracker.vehiclePlate, vector2(tracker.lastKnownX, tracker.lastKnownY), tracker.name, true -- true indicates this is a last known position
|
||||
end
|
||||
|
||||
-- No current or last known position available
|
||||
return nil
|
||||
end)
|
||||
|
||||
lib.callback.register('qb_vehicle_tracker:isVehicleTracked', function(source, vehiclePlate)
|
||||
|
@ -128,6 +149,13 @@ lib.callback.register('qb_vehicle_tracker:placeTracker', function(source, vehicl
|
|||
|
||||
if not addTracker(serialNumber, trim(vehiclePlate), Player.PlayerData.citizenid, defaultName, phoneNumber) then return false end
|
||||
|
||||
-- Try to get initial position
|
||||
local vehicle = lib.getClosestVehicle(GetEntityCoords(GetPlayerPed(source)), 3.0, true)
|
||||
if vehicle and DoesEntityExist(vehicle) then
|
||||
local vehCoords = GetEntityCoords(vehicle)
|
||||
updateTrackerPosition(serialNumber, vehCoords)
|
||||
end
|
||||
|
||||
Player.Functions.RemoveItem(config.trackerItem, 1, slot)
|
||||
TriggerClientEvent('inventory:client:ItemBox', source, QBCore.Shared.Items[config.trackerItem], 'remove')
|
||||
|
||||
|
@ -182,7 +210,7 @@ lib.callback.register('qb_vehicle_tracker:updateTrackerName', function(source, s
|
|||
return updateTrackerName(serialNumber, name)
|
||||
end)
|
||||
|
||||
-- New callbacks for advanced scanner features
|
||||
-- Callbacks for advanced scanner features
|
||||
lib.callback.register('qb_vehicle_tracker:getTrackerOwnerLocation', function(source, vehiclePlate)
|
||||
if type(vehiclePlate) ~= "string" then return nil end
|
||||
|
||||
|
@ -227,3 +255,24 @@ lib.callback.register('qb_vehicle_tracker:getTrackerOwnerPhone', function(source
|
|||
|
||||
return tracker.phoneNumber
|
||||
end)
|
||||
|
||||
-- Add this thread to periodically update positions of all tracked vehicles
|
||||
CreateThread(function()
|
||||
while true do
|
||||
Wait(300000) -- Update every 5 minutes
|
||||
|
||||
-- Get all tracked vehicles
|
||||
local trackers = MySQL.query.await('SELECT `serialNumber`, `vehiclePlate` FROM `vehicle_trackers`')
|
||||
|
||||
for _, tracker in ipairs(trackers) do
|
||||
local vehicleNetworkID = getVehicleNetworkIdByPlate(tracker.vehiclePlate)
|
||||
if vehicleNetworkID then
|
||||
local vehicleEntity = NetworkGetEntityFromNetworkId(vehicleNetworkID)
|
||||
if DoesEntityExist(vehicleEntity) then
|
||||
local vehCoords = GetEntityCoords(vehicleEntity)
|
||||
updateTrackerPosition(tracker.serialNumber, vehCoords)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue