1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
Nordi98 2025-07-02 18:45:20 +02:00
parent 0d4416dbb4
commit d0f50224d7
4 changed files with 82 additions and 19 deletions

View file

@ -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)