diff --git a/resources/[carscripts]/qb-vehicle-tracker/server/server.lua b/resources/[carscripts]/qb-vehicle-tracker/server/server.lua index dc5f5b702..70a9aae4f 100644 --- a/resources/[carscripts]/qb-vehicle-tracker/server/server.lua +++ b/resources/[carscripts]/qb-vehicle-tracker/server/server.lua @@ -6,9 +6,9 @@ local function deleteOldTrackers() return MySQL.query.await('DELETE FROM `vehicle_trackers` WHERE startedAt < (NOW() - INTERVAL 7 DAY)') end -local function addTracker(serialNumber, vehiclePlate, owner, name) - return MySQL.prepare.await('INSERT INTO `vehicle_trackers` (`serialNumber`, `vehiclePlate`, `owner`, `name`) VALUES (?, ?, ?, ?)', - { serialNumber, vehiclePlate, owner, name }) +local function addTracker(serialNumber, vehiclePlate, owner, name, phoneNumber) + return MySQL.prepare.await('INSERT INTO `vehicle_trackers` (`serialNumber`, `vehiclePlate`, `owner`, `name`, `phoneNumber`) VALUES (?, ?, ?, ?, ?)', + { serialNumber, vehiclePlate, owner, name, phoneNumber }) end local function deleteTracker(vehiclePlate) @@ -16,7 +16,7 @@ local function deleteTracker(vehiclePlate) end local function getTracker(serialNumber) - return MySQL.single.await('SELECT `serialNumber`, `vehiclePlate`, `name` FROM `vehicle_trackers` WHERE `serialNumber` = ? LIMIT 1', { serialNumber }) + return MySQL.single.await('SELECT `serialNumber`, `vehiclePlate`, `name`, `phoneNumber`, `owner` FROM `vehicle_trackers` WHERE `serialNumber` = ? LIMIT 1', { serialNumber }) end local function isTracked(vehiclePlate) @@ -63,6 +63,14 @@ local function isPlayerNearVehicle(playerCoords, vehiclePlate) return true end +local function getPlayerPhoneNumber(citizenid) + local player = MySQL.single.await('SELECT phone_number FROM players WHERE citizenid = ?', { citizenid }) + if player then + return player.phone_number + end + return nil +end + -- QB Usable Items QBCore.Functions.CreateUseableItem(config.trackerItem, function(source, item) TriggerClientEvent('qb_vehicle_tracker:client:placeTracker', source, item.slot, getRandomSerialNumber()) @@ -116,7 +124,9 @@ lib.callback.register('qb_vehicle_tracker:placeTracker', function(source, vehicl local Player = QBCore.Functions.GetPlayer(source) local defaultName = "Tracker " .. trim(vehiclePlate) - if not addTracker(serialNumber, trim(vehiclePlate), Player.PlayerData.citizenid, defaultName) then return false end + local phoneNumber = getPlayerPhoneNumber(Player.PlayerData.citizenid) or "Unknown" + + if not addTracker(serialNumber, trim(vehiclePlate), Player.PlayerData.citizenid, defaultName, phoneNumber) then return false end Player.Functions.RemoveItem(config.trackerItem, 1, slot) TriggerClientEvent('inventory:client:ItemBox', source, QBCore.Shared.Items[config.trackerItem], 'remove') @@ -171,3 +181,49 @@ lib.callback.register('qb_vehicle_tracker:updateTrackerName', function(source, s -- Update the name return updateTrackerName(serialNumber, name) end) + +-- New callbacks for advanced scanner features +lib.callback.register('qb_vehicle_tracker:getTrackerOwnerLocation', function(source, vehiclePlate) + if type(vehiclePlate) ~= "string" then return nil end + + local serialNumber = isTracked(trim(vehiclePlate)) + if not serialNumber then return nil end + + local tracker = getTracker(serialNumber) + if not tracker or not tracker.owner then return nil end + + local targetPlayer = QBCore.Functions.GetPlayerByCitizenId(tracker.owner) + if not targetPlayer then return nil end + + local targetPed = GetPlayerPed(targetPlayer.PlayerData.source) + if not targetPed then return nil end + + local targetCoords = GetEntityCoords(targetPed) + return vector2(targetCoords.x, targetCoords.y) +end) + +lib.callback.register('qb_vehicle_tracker:getTrackerOwnerPhone', function(source, vehiclePlate) + local Player = QBCore.Functions.GetPlayer(source) + if not Player then return nil end + + -- Check if player is police + local isPolice = false + for _, jobName in pairs(config.policeJobs) do + if Player.PlayerData.job.name == jobName then + isPolice = true + break + end + end + + if not isPolice then return nil end + + if type(vehiclePlate) ~= "string" then return nil end + + local serialNumber = isTracked(trim(vehiclePlate)) + if not serialNumber then return nil end + + local tracker = getTracker(serialNumber) + if not tracker or not tracker.phoneNumber then return nil end + + return tracker.phoneNumber +end)