This commit is contained in:
Nordi98 2025-08-04 08:31:45 +02:00
parent 91f2af8b8b
commit 4a1367fb44
2 changed files with 310 additions and 200 deletions

View file

@ -10,16 +10,6 @@ local function debugPrint(message)
end
end
local function safeCallback(cb, ...)
if cb and type(cb) == "function" then
cb(...)
return true
else
debugPrint("^1FEHLER: Callback ist keine Funktion! Typ: " .. type(cb) .. "^7")
return false
end
end
local function formatDate(timestamp)
if not timestamp then return nil end
return os.date("%d.%m.%Y", timestamp)
@ -165,19 +155,16 @@ local function getIssuerName(citizenid, callback)
end)
end
-- Callbacks
QBCore.Functions.CreateCallback('license-system:server:getLicense', function(source, cb, targetId)
debugPrint("getLicense Callback - Source: " .. source .. ", Target: " .. tostring(targetId))
if not cb or type(cb) ~= "function" then
debugPrint("^1FEHLER: Ungültiger Callback in getLicense!^7")
return
end
-- EVENT: Einzelne Lizenz abrufen
RegisterNetEvent('license-system:server:requestLicense', function(targetId)
local src = source
debugPrint("=== Event: requestLicense ===")
debugPrint("Source: " .. src .. ", Target: " .. tostring(targetId))
local TargetPlayer = QBCore.Functions.GetPlayer(targetId)
if not TargetPlayer then
debugPrint("^1Ziel-Spieler nicht gefunden: " .. tostring(targetId) .. "^7")
safeCallback(cb, nil)
TriggerClientEvent('license-system:client:receiveLicense', src, nil)
return
end
@ -209,27 +196,26 @@ QBCore.Functions.CreateCallback('license-system:server:getLicense', function(sou
}
}
safeCallback(cb, licenseData)
debugPrint("Sende Lizenz-Daten an Client")
TriggerClientEvent('license-system:client:receiveLicense', src, licenseData)
end)
else
debugPrint("Keine aktive Lizenz gefunden für: " .. citizenid)
safeCallback(cb, nil)
TriggerClientEvent('license-system:client:receiveLicense', src, nil)
end
end)
end)
QBCore.Functions.CreateCallback('license-system:server:getMyLicense', function(source, cb, licenseType)
debugPrint("getMyLicense Callback - Source: " .. source .. ", Typ: " .. tostring(licenseType))
-- EVENT: Eigene Lizenz abrufen
RegisterNetEvent('license-system:server:requestMyLicense', function(licenseType)
local src = source
debugPrint("=== Event: requestMyLicense ===")
debugPrint("Source: " .. src .. ", LicenseType: " .. tostring(licenseType))
if not cb or type(cb) ~= "function" then
debugPrint("^1FEHLER: Ungültiger Callback in getMyLicense!^7")
return
end
local Player = QBCore.Functions.GetPlayer(source)
local Player = QBCore.Functions.GetPlayer(src)
if not Player then
debugPrint("^1Spieler nicht gefunden: " .. source .. "^7")
safeCallback(cb, nil)
debugPrint("^1Spieler nicht gefunden: " .. src .. "^7")
TriggerClientEvent('license-system:client:receiveMyLicense', src, nil, licenseType)
return
end
@ -262,73 +248,71 @@ QBCore.Functions.CreateCallback('license-system:server:getMyLicense', function(s
}
}
safeCallback(cb, licenseData)
debugPrint("Sende eigene Lizenz-Daten an Client")
TriggerClientEvent('license-system:client:receiveMyLicense', src, licenseData, licenseType)
end)
else
debugPrint("Keine eigene Lizenz vom Typ " .. licenseType .. " gefunden")
safeCallback(cb, nil)
TriggerClientEvent('license-system:client:receiveMyLicense', src, nil, licenseType)
end
end)
end)
QBCore.Functions.CreateCallback('license-system:server:getPlayerLicenses', function(source, cb, targetId)
debugPrint("getPlayerLicenses Callback - Source: " .. source .. ", Target: " .. tostring(targetId))
if not cb or type(cb) ~= "function" then
debugPrint("^1FEHLER: Ungültiger Callback in getPlayerLicenses!^7")
return
end
-- EVENT: Alle Spieler-Lizenzen abrufen
RegisterNetEvent('license-system:server:requestPlayerLicenses', function(targetId)
local src = source
debugPrint("=== Event: requestPlayerLicenses ===")
debugPrint("Source: " .. src .. ", Target: " .. tostring(targetId))
local TargetPlayer = QBCore.Functions.GetPlayer(targetId)
if not TargetPlayer then
debugPrint("^1Ziel-Spieler nicht gefunden: " .. tostring(targetId) .. "^7")
safeCallback(cb, {})
TriggerClientEvent('license-system:client:receivePlayerLicenses', src, {}, targetId, "Unbekannt")
return
end
local citizenid = TargetPlayer.PlayerData.citizenid
local targetName = TargetPlayer.PlayerData.charinfo.firstname .. ' ' .. TargetPlayer.PlayerData.charinfo.lastname
debugPrint("Suche alle Lizenzen für CitizenID: " .. citizenid)
MySQL.Async.fetchAll('SELECT * FROM player_licenses WHERE citizenid = ? ORDER BY created_at DESC', {
citizenid
}, function(result)
if result then
debugPrint("Gefundene Lizenzen: " .. #result)
local licenses = result or {}
debugPrint("Gefundene Lizenzen: " .. #licenses)
-- Spieler-Daten zu jeder Lizenz hinzufügen
for i, license in ipairs(licenses) do
license.name = TargetPlayer.PlayerData.charinfo.firstname .. ' ' .. TargetPlayer.PlayerData.charinfo.lastname
license.birthday = TargetPlayer.PlayerData.charinfo.birthdate
license.gender = TargetPlayer.PlayerData.charinfo.gender
license.issued_by_name = 'System' -- Wird später durch echten Namen ersetzt
-- Spieler-Daten zu jeder Lizenz hinzufügen
for i, license in ipairs(result) do
license.name = TargetPlayer.PlayerData.charinfo.firstname .. ' ' .. TargetPlayer.PlayerData.charinfo.lastname
license.birthday = TargetPlayer.PlayerData.charinfo.birthdate
license.gender = TargetPlayer.PlayerData.charinfo.gender
license.issued_by_name = 'System' -- Wird später durch echten Namen ersetzt
end
safeCallback(cb, result)
else
debugPrint("Keine Lizenzen gefunden")
safeCallback(cb, {})
debugPrint("Lizenz " .. i .. ": " .. license.license_type .. " (Aktiv: " .. tostring(license.is_active) .. ")")
end
debugPrint("Sende " .. #licenses .. " Lizenzen an Client")
TriggerClientEvent('license-system:client:receivePlayerLicenses', src, licenses, targetId, targetName)
end)
end)
QBCore.Functions.CreateCallback('license-system:server:canIssueLicense', function(source, cb, licenseType)
debugPrint("canIssueLicense Callback - Source: " .. source .. ", Typ: " .. tostring(licenseType))
-- EVENT: Berechtigung prüfen
RegisterNetEvent('license-system:server:checkPermission', function(licenseType)
local src = source
debugPrint("=== Event: checkPermission ===")
debugPrint("Source: " .. src .. ", LicenseType: " .. tostring(licenseType))
if not cb or type(cb) ~= "function" then
debugPrint("^1FEHLER: Ungültiger Callback in canIssueLicense!^7")
return
end
local hasAuth = hasPermission(source, licenseType)
local hasAuth = hasPermission(src, licenseType)
debugPrint("Berechtigung für Lizenz " .. licenseType .. ": " .. tostring(hasAuth))
safeCallback(cb, hasAuth)
TriggerClientEvent('license-system:client:receivePermission', src, hasAuth, licenseType)
end)
-- Events
-- EVENT: Lizenz ausstellen
RegisterNetEvent('license-system:server:issueLicense', function(targetId, licenseType, classes)
local src = source
debugPrint("Event: issueLicense - Von: " .. src .. ", Für: " .. targetId .. ", Typ: " .. licenseType)
debugPrint("=== Event: issueLicense ===")
debugPrint("Von: " .. src .. ", Für: " .. targetId .. ", Typ: " .. licenseType)
local Player = QBCore.Functions.GetPlayer(src)
local TargetPlayer = QBCore.Functions.GetPlayer(targetId)
@ -384,6 +368,9 @@ RegisterNetEvent('license-system:server:issueLicense', function(targetId, licens
TriggerClientEvent('QBCore:Notify', src, Config.Notifications.license_granted.message, Config.Notifications.license_granted.type)
TriggerClientEvent('QBCore:Notify', targetId, 'Du hast eine neue ' .. licenseConfig.label .. ' erhalten!', 'success')
-- Client über erfolgreiche Ausstellung informieren
TriggerClientEvent('license-system:client:licenseIssued', src, targetId, licenseType)
-- Log erstellen
debugPrint(Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname .. ' hat ' .. TargetPlayer.PlayerData.charinfo.firstname .. ' ' .. TargetPlayer.PlayerData.charinfo.lastname .. ' eine ' .. licenseConfig.label .. ' ausgestellt')
else
@ -391,9 +378,11 @@ RegisterNetEvent('license-system:server:issueLicense', function(targetId, licens
end
end)
-- EVENT: Lizenz entziehen
RegisterNetEvent('license-system:server:revokeLicense', function(targetId, licenseType)
local src = source
debugPrint("Event: revokeLicense - Von: " .. src .. ", Für: " .. targetId .. ", Typ: " .. licenseType)
debugPrint("=== Event: revokeLicense ===")
debugPrint("Von: " .. src .. ", Für: " .. targetId .. ", Typ: " .. licenseType)
local Player = QBCore.Functions.GetPlayer(src)
local TargetPlayer = QBCore.Functions.GetPlayer(targetId)
@ -423,6 +412,9 @@ RegisterNetEvent('license-system:server:revokeLicense', function(targetId, licen
licenseCache[TargetPlayer.PlayerData.citizenid][licenseType] = nil
end
-- Client über erfolgreiche Entziehung informieren
TriggerClientEvent('license-system:client:licenseRevoked', src, targetId, licenseType)
debugPrint(Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname .. ' hat ' .. TargetPlayer.PlayerData.charinfo.firstname .. ' ' .. TargetPlayer.PlayerData.charinfo.lastname .. ' die ' .. (Config.LicenseTypes[licenseType] and Config.LicenseTypes[licenseType].label or licenseType) .. ' entzogen')
else
TriggerClientEvent('QBCore:Notify', src, 'Keine aktive Lizenz gefunden!', 'error')
@ -430,9 +422,11 @@ RegisterNetEvent('license-system:server:revokeLicense', function(targetId, licen
end)
end)
-- EVENT: Foto speichern
RegisterNetEvent('license-system:server:savePhoto', function(citizenid, photoData)
local src = source
debugPrint("Event: savePhoto für CitizenID: " .. citizenid)
debugPrint("=== Event: savePhoto ===")
debugPrint("CitizenID: " .. citizenid)
local Player = QBCore.Functions.GetPlayer(src)
if not Player then return end
@ -537,7 +531,7 @@ end)
-- Resource Start/Stop Events
AddEventHandler('onResourceStart', function(resourceName)
if GetCurrentResourceName() == resourceName then
debugPrint("License-System Server gestartet")
debugPrint("License-System Server gestartet (Event-basiert)")
-- Datenbank-Tabelle erstellen falls nicht vorhanden
MySQL.Async.execute([[