ESX = exports['es_extended']:getSharedObject() -- ===================== -- HELPERS -- ===================== local function GetIdentifier(source) local xPlayer = ESX.GetPlayerFromId(source) if not xPlayer then return nil end return xPlayer.getIdentifier() end -- ===================== -- ITEM REGISTRATION -- ===================== for itemName, itemConfig in pairs(Config.Items) do ESX.RegisterUsableItem(itemName, function(playerId) TriggerClientEvent('mercyv-id:useItem', playerId, itemName, itemConfig.type) end) end -- ===================== -- SERVER CALLBACK: SPIELERDATEN + LIZENZEN -- ===================== ESX.RegisterServerCallback('mercyv-id:getPlayerData', function(source, cb, targetIdentifier) local identifier = targetIdentifier if not identifier then identifier = GetIdentifier(source) end if not identifier then print('[mercyv-id] FEHLER: Kein Identifier fuer Source ' .. tostring(source)) return cb(nil) end print('[mercyv-id] Lade Daten fuer: ' .. identifier) -- Spielerdaten abfragen local userData = MySQL.query.await( 'SELECT firstname, lastname, dateofbirth, sex, nationality, ssn, photo, phone_number, job, job_grade FROM users WHERE identifier = ?', { identifier } ) if not userData or #userData == 0 then print('[mercyv-id] FEHLER: Keine Userdaten gefunden fuer: ' .. identifier) return cb(nil) end -- Lizenzen aus user_licenses (ESX Standard: drive, dmv, boat, etc.) local licenses = MySQL.query.await( 'SELECT ul.type, l.label FROM user_licenses ul LEFT JOIN licenses l ON ul.type = l.type WHERE ul.owner = ?', { identifier } ) or {} -- Lizenzen aus mercyv_shop_licenses (Waffenlizenz etc. aus dem Shop) local shopLicenses = MySQL.query.await( 'SELECT license_name FROM mercyv_shop_licenses WHERE identifier = ?', { identifier } ) or {} for _, sl in ipairs(shopLicenses) do -- Pruefen ob nicht schon in der Liste local found = false for _, lic in ipairs(licenses) do if lic.type == sl.license_name then found = true break end end if not found then licenses[#licenses + 1] = { type = sl.license_name, label = sl.license_name, } end end print('[mercyv-id] Gefunden: ' .. #licenses .. ' Lizenzen fuer ' .. identifier) cb({ firstname = userData[1].firstname or '', lastname = userData[1].lastname or '', dateofbirth = userData[1].dateofbirth or '', sex = userData[1].sex or '', nationality = userData[1].nationality or '', ssn = userData[1].ssn or '', photo = userData[1].photo or '', phone_number = userData[1].phone_number or '', job = userData[1].job or '', job_grade = userData[1].job_grade or 0, licenses = licenses or {}, }) end) -- ===================== -- LIZENZ-CHECK: Hat der Spieler die noetige Lizenz? -- ===================== -- Welche Lizenzen fuer welchen Kartentyp benoetigt werden local requiredLicenses = { license = { 'drive', 'drivedmv', 'drive_bike', 'drive_bikedmv', 'drive_truck', 'drive_truckdmv', 'dmv', 'boat' }, weapon = { 'weaponlicense' }, -- id = nil -> Personalausweis braucht keine Lizenz } ESX.RegisterServerCallback('mercyv-id:hasLicense', function(source, cb, cardType) local required = requiredLicenses[cardType] if not required then -- Personalausweis braucht keine Lizenz return cb(true) end local identifier = GetIdentifier(source) if not identifier then return cb(false) end -- user_licenses pruefen local esxLicenses = MySQL.query.await( 'SELECT type FROM user_licenses WHERE owner = ?', { identifier } ) or {} for _, lic in ipairs(esxLicenses) do for _, req in ipairs(required) do if lic.type == req then return cb(true) end end end -- mercyv_shop_licenses pruefen local shopLicenses = MySQL.query.await( 'SELECT license_name FROM mercyv_shop_licenses WHERE identifier = ?', { identifier } ) or {} for _, sl in ipairs(shopLicenses) do for _, req in ipairs(required) do if sl.license_name == req then return cb(true) end end end cb(false) end) -- ===================== -- AUSWEIS AN NAHE SPIELER ZEIGEN -- ===================== RegisterNetEvent('mercyv-id:showToNearby') AddEventHandler('mercyv-id:showToNearby', function(cardData, cardType, nearbyPlayerIds) local source = source local xPlayer = ESX.GetPlayerFromId(source) if not xPlayer then return end local senderName = (cardData.firstname or '') .. ' ' .. (cardData.lastname or '') for _, targetId in ipairs(nearbyPlayerIds) do if targetId ~= source then TriggerClientEvent('mercyv-id:receiveCard', targetId, cardData, cardType, senderName) end end end)