ed
This commit is contained in:
parent
7932af55cb
commit
91f2af8b8b
2 changed files with 402 additions and 200 deletions
|
@ -4,6 +4,7 @@ local QBCore = exports['qb-core']:GetCoreObject()
|
|||
local isMenuOpen = false
|
||||
local currentTarget = nil
|
||||
local nearbyPlayers = {}
|
||||
local isLicenseShowing = false
|
||||
|
||||
-- Hilfsfunktionen
|
||||
local function debugPrint(message)
|
||||
|
@ -15,8 +16,10 @@ end
|
|||
local function safeCallback(cb, ...)
|
||||
if cb and type(cb) == "function" then
|
||||
cb(...)
|
||||
return true
|
||||
else
|
||||
debugPrint("^1Callback ist keine Funktion!^7")
|
||||
debugPrint("^1FEHLER: Callback ist keine Funktion! Typ: " .. type(cb) .. "^7")
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -56,6 +59,7 @@ local function getNearbyPlayers(radius)
|
|||
return a.distance < b.distance
|
||||
end)
|
||||
|
||||
debugPrint("Gefundene Spieler in der Nähe: " .. #players)
|
||||
return players
|
||||
end
|
||||
|
||||
|
@ -64,7 +68,9 @@ local function hasPermission()
|
|||
local PlayerData = QBCore.Functions.GetPlayerData()
|
||||
if not PlayerData or not PlayerData.job then return false end
|
||||
|
||||
return Config.AuthorizedJobs[PlayerData.job.name] or false
|
||||
local hasAuth = Config.AuthorizedJobs[PlayerData.job.name] or false
|
||||
debugPrint("Berechtigung für Job " .. PlayerData.job.name .. ": " .. tostring(hasAuth))
|
||||
return hasAuth
|
||||
end
|
||||
|
||||
-- Lizenz anzeigen
|
||||
|
@ -82,7 +88,7 @@ local function showLicense(licenseData)
|
|||
})
|
||||
|
||||
SetNuiFocus(true, true)
|
||||
isMenuOpen = true
|
||||
isLicenseShowing = true
|
||||
end
|
||||
|
||||
-- Lizenz schließen
|
||||
|
@ -92,34 +98,72 @@ local function closeLicense()
|
|||
})
|
||||
|
||||
SetNuiFocus(false, false)
|
||||
isMenuOpen = false
|
||||
isLicenseShowing = false
|
||||
debugPrint("Lizenz geschlossen")
|
||||
end
|
||||
|
||||
-- Spieler-Lizenz anzeigen
|
||||
local function showPlayerLicense(targetId)
|
||||
debugPrint("Rufe Server-Callback auf für Spieler: " .. tostring(targetId))
|
||||
|
||||
QBCore.Functions.TriggerCallback('license-system:server:getLicense', function(licenseData)
|
||||
debugPrint("Callback-Antwort erhalten für Spieler-Lizenz")
|
||||
|
||||
if licenseData then
|
||||
debugPrint("Lizenz-Daten erhalten: " .. licenseData.license.license_type)
|
||||
showLicense(licenseData)
|
||||
else
|
||||
debugPrint("Keine Lizenz-Daten erhalten")
|
||||
showNotification(Config.Notifications.license_not_found.message, Config.Notifications.license_not_found.type)
|
||||
end
|
||||
end, targetId)
|
||||
end
|
||||
|
||||
-- Eigene Lizenz anzeigen
|
||||
local function showMyLicense(licenseType)
|
||||
debugPrint("Rufe Server-Callback auf für eigene Lizenz: " .. tostring(licenseType))
|
||||
|
||||
QBCore.Functions.TriggerCallback('license-system:server:getMyLicense', function(licenseData)
|
||||
debugPrint("Eigene Lizenz Callback-Antwort erhalten")
|
||||
|
||||
if licenseData then
|
||||
debugPrint("Eigene Lizenz-Daten erhalten: " .. licenseData.license.license_type)
|
||||
showLicense(licenseData)
|
||||
else
|
||||
debugPrint("Keine eigene Lizenz gefunden")
|
||||
local config = Config.LicenseTypes[licenseType]
|
||||
local licenseName = config and config.label or licenseType
|
||||
showNotification('Du hast keine ' .. licenseName .. '!', 'error')
|
||||
end
|
||||
end, licenseType)
|
||||
end
|
||||
|
||||
-- Spieler-Lizenz-Menü
|
||||
local function openPlayerLicenseMenu(targetId, targetName)
|
||||
debugPrint("Öffne Lizenz-Menü für Spieler: " .. targetName)
|
||||
debugPrint("Öffne Lizenz-Menü für Spieler: " .. targetName .. " (ID: " .. targetId .. ")")
|
||||
|
||||
QBCore.Functions.TriggerCallback('license-system:server:getPlayerLicenses', function(licenses)
|
||||
debugPrint("Spieler-Lizenzen Callback-Antwort erhalten, Anzahl: " .. (licenses and #licenses or 0))
|
||||
|
||||
local menuOptions = {}
|
||||
|
||||
if licenses and #licenses > 0 then
|
||||
for _, license in ipairs(licenses) do
|
||||
local licenseConfig = Config.LicenseTypes[license.license_type] or {
|
||||
label = license.license_type,
|
||||
icon = 'fas fa-id-card'
|
||||
icon = 'fas fa-id-card',
|
||||
color = '#667eea'
|
||||
}
|
||||
|
||||
local statusIcon = license.is_active and '✅' or '❌'
|
||||
local statusText = license.is_active and 'Gültig' or 'Ungültig'
|
||||
local statusIcon = license.is_active == 1 and '✅' or '❌'
|
||||
local statusText = license.is_active == 1 and 'Gültig' or 'Ungültig'
|
||||
local expireText = license.expire_date or 'Unbegrenzt'
|
||||
|
||||
table.insert(menuOptions, {
|
||||
title = licenseConfig.label,
|
||||
title = licenseConfig.label .. ' ' .. statusIcon,
|
||||
description = 'Status: ' .. statusText .. ' | Gültig bis: ' .. expireText,
|
||||
icon = licenseConfig.icon,
|
||||
onSelect = function()
|
||||
-- Lizenz anzeigen
|
||||
local licenseData = {
|
||||
license = license,
|
||||
config = licenseConfig
|
||||
|
@ -134,24 +178,31 @@ local function openPlayerLicenseMenu(targetId, targetName)
|
|||
}
|
||||
})
|
||||
end
|
||||
|
||||
-- Aktionen hinzufügen
|
||||
else
|
||||
table.insert(menuOptions, {
|
||||
title = '─────────────────',
|
||||
title = 'Keine Lizenzen gefunden',
|
||||
description = 'Dieser Spieler hat keine Lizenzen',
|
||||
icon = 'fas fa-exclamation-triangle',
|
||||
disabled = true
|
||||
})
|
||||
|
||||
-- Neue Lizenz ausstellen
|
||||
table.insert(menuOptions, {
|
||||
title = 'Neue Lizenz ausstellen',
|
||||
description = 'Eine neue Lizenz für diesen Spieler ausstellen',
|
||||
icon = 'fas fa-plus',
|
||||
onSelect = function()
|
||||
openIssueLicenseMenu(targetId, targetName)
|
||||
end
|
||||
})
|
||||
|
||||
-- Lizenz entziehen
|
||||
end
|
||||
|
||||
-- Aktionen hinzufügen
|
||||
table.insert(menuOptions, {
|
||||
title = '─────────────────',
|
||||
disabled = true
|
||||
})
|
||||
|
||||
table.insert(menuOptions, {
|
||||
title = 'Neue Lizenz ausstellen',
|
||||
description = 'Eine neue Lizenz für diesen Spieler ausstellen',
|
||||
icon = 'fas fa-plus',
|
||||
onSelect = function()
|
||||
openIssueLicenseMenu(targetId, targetName)
|
||||
end
|
||||
})
|
||||
|
||||
if licenses and #licenses > 0 then
|
||||
table.insert(menuOptions, {
|
||||
title = 'Lizenz entziehen',
|
||||
description = 'Eine bestehende Lizenz entziehen',
|
||||
|
@ -160,26 +211,8 @@ local function openPlayerLicenseMenu(targetId, targetName)
|
|||
openRevokeLicenseMenu(targetId, targetName, licenses)
|
||||
end
|
||||
})
|
||||
|
||||
else
|
||||
table.insert(menuOptions, {
|
||||
title = 'Keine Lizenzen gefunden',
|
||||
description = 'Dieser Spieler hat keine Lizenzen',
|
||||
icon = 'fas fa-exclamation-triangle',
|
||||
disabled = true
|
||||
})
|
||||
|
||||
table.insert(menuOptions, {
|
||||
title = 'Neue Lizenz ausstellen',
|
||||
description = 'Eine neue Lizenz für diesen Spieler ausstellen',
|
||||
icon = 'fas fa-plus',
|
||||
onSelect = function()
|
||||
openIssueLicenseMenu(targetId, targetName)
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
-- Zurück-Option
|
||||
table.insert(menuOptions, {
|
||||
title = '← Zurück',
|
||||
icon = 'fas fa-arrow-left',
|
||||
|
@ -201,9 +234,14 @@ end
|
|||
|
||||
-- Lizenz ausstellen Menü
|
||||
local function openIssueLicenseMenu(targetId, targetName)
|
||||
debugPrint("Öffne Lizenz-Ausstellungs-Menü für: " .. targetName)
|
||||
|
||||
local menuOptions = {}
|
||||
|
||||
for licenseType, config in pairs(Config.LicenseTypes) do
|
||||
local priceText = config.price and (config.price .. ' $') or 'Kostenlos'
|
||||
local validityText = config.validity_days and (config.validity_days .. ' Tage') or 'Unbegrenzt'
|
||||
|
||||
table.insert(menuOptions, {
|
||||
title = config.label,
|
||||
description = config.description or 'Keine Beschreibung verfügbar',
|
||||
|
@ -216,8 +254,8 @@ local function openIssueLicenseMenu(targetId, targetName)
|
|||
end
|
||||
end,
|
||||
metadata = {
|
||||
{label = 'Preis', value = config.price .. ' $'},
|
||||
{label = 'Gültigkeitsdauer', value = config.validity_days and (config.validity_days .. ' Tage') or 'Unbegrenzt'}
|
||||
{label = 'Preis', value = priceText},
|
||||
{label = 'Gültigkeitsdauer', value = validityText}
|
||||
}
|
||||
})
|
||||
end
|
||||
|
@ -247,47 +285,49 @@ local function openDriversLicenseClassMenu(targetId, targetName, licenseType)
|
|||
local function updateMenu()
|
||||
local menuOptions = {}
|
||||
|
||||
for _, class in ipairs(config.classes) do
|
||||
local isSelected = false
|
||||
for _, selected in ipairs(selectedClasses) do
|
||||
if selected == class then
|
||||
isSelected = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
local classDescriptions = {
|
||||
['A'] = 'Motorräder',
|
||||
['A1'] = 'Leichte Motorräder (bis 125ccm)',
|
||||
['A2'] = 'Mittlere Motorräder (bis 35kW)',
|
||||
['B'] = 'PKW (bis 3,5t)',
|
||||
['BE'] = 'PKW mit Anhänger',
|
||||
['C'] = 'LKW (über 3,5t)',
|
||||
['CE'] = 'LKW mit Anhänger',
|
||||
['D'] = 'Bus (über 8 Personen)',
|
||||
['DE'] = 'Bus mit Anhänger'
|
||||
}
|
||||
|
||||
table.insert(menuOptions, {
|
||||
title = 'Klasse ' .. class .. (isSelected and ' ✅' or ''),
|
||||
description = classDescriptions[class] or 'Keine Beschreibung',
|
||||
icon = isSelected and 'fas fa-check-square' or 'far fa-square',
|
||||
onSelect = function()
|
||||
if isSelected then
|
||||
-- Klasse entfernen
|
||||
for i, selected in ipairs(selectedClasses) do
|
||||
if selected == class then
|
||||
table.remove(selectedClasses, i)
|
||||
break
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Klasse hinzufügen
|
||||
table.insert(selectedClasses, class)
|
||||
if config.classes then
|
||||
for _, class in ipairs(config.classes) do
|
||||
local isSelected = false
|
||||
for _, selected in ipairs(selectedClasses) do
|
||||
if selected == class then
|
||||
isSelected = true
|
||||
break
|
||||
end
|
||||
updateMenu()
|
||||
end
|
||||
})
|
||||
|
||||
local classDescriptions = {
|
||||
['A'] = 'Motorräder',
|
||||
['A1'] = 'Leichte Motorräder (bis 125ccm)',
|
||||
['A2'] = 'Mittlere Motorräder (bis 35kW)',
|
||||
['B'] = 'PKW (bis 3,5t)',
|
||||
['BE'] = 'PKW mit Anhänger',
|
||||
['C'] = 'LKW (über 3,5t)',
|
||||
['CE'] = 'LKW mit Anhänger',
|
||||
['D'] = 'Bus (über 8 Personen)',
|
||||
['DE'] = 'Bus mit Anhänger'
|
||||
}
|
||||
|
||||
table.insert(menuOptions, {
|
||||
title = 'Klasse ' .. class .. (isSelected and ' ✅' or ''),
|
||||
description = classDescriptions[class] or 'Keine Beschreibung',
|
||||
icon = isSelected and 'fas fa-check-square' or 'far fa-square',
|
||||
onSelect = function()
|
||||
if isSelected then
|
||||
-- Klasse entfernen
|
||||
for i, selected in ipairs(selectedClasses) do
|
||||
if selected == class then
|
||||
table.remove(selectedClasses, i)
|
||||
break
|
||||
end
|
||||
end
|
||||
else
|
||||
-- Klasse hinzufügen
|
||||
table.insert(selectedClasses, class)
|
||||
end
|
||||
updateMenu()
|
||||
end
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
table.insert(menuOptions, {
|
||||
|
@ -329,6 +369,9 @@ end
|
|||
local function confirmIssueLicense(targetId, targetName, licenseType, classes)
|
||||
local config = Config.LicenseTypes[licenseType]
|
||||
local classText = classes and table.concat(classes, ', ') or 'Keine'
|
||||
local priceText = config.price and (config.price .. ' $') or 'Kostenlos'
|
||||
|
||||
debugPrint("Bestätige Lizenz-Ausstellung: " .. licenseType .. " für " .. targetName)
|
||||
|
||||
lib.registerContext({
|
||||
id = 'confirm_issue_license',
|
||||
|
@ -336,19 +379,23 @@ local function confirmIssueLicense(targetId, targetName, licenseType, classes)
|
|||
options = {
|
||||
{
|
||||
title = 'Spieler: ' .. targetName,
|
||||
disabled = true
|
||||
disabled = true,
|
||||
icon = 'fas fa-user'
|
||||
},
|
||||
{
|
||||
title = 'Lizenztyp: ' .. config.label,
|
||||
disabled = true
|
||||
disabled = true,
|
||||
icon = config.icon
|
||||
},
|
||||
{
|
||||
title = 'Klassen: ' .. classText,
|
||||
disabled = true
|
||||
disabled = true,
|
||||
icon = 'fas fa-list'
|
||||
},
|
||||
{
|
||||
title = 'Kosten: ' .. config.price .. ' $',
|
||||
disabled = true
|
||||
title = 'Kosten: ' .. priceText,
|
||||
disabled = true,
|
||||
icon = 'fas fa-dollar-sign'
|
||||
},
|
||||
{
|
||||
title = '─────────────────',
|
||||
|
@ -359,6 +406,7 @@ local function confirmIssueLicense(targetId, targetName, licenseType, classes)
|
|||
description = 'Lizenz jetzt ausstellen',
|
||||
icon = 'fas fa-check',
|
||||
onSelect = function()
|
||||
debugPrint("Sende Lizenz-Ausstellung an Server...")
|
||||
TriggerServerEvent('license-system:server:issueLicense', targetId, licenseType, classes)
|
||||
lib.hideContext()
|
||||
end
|
||||
|
@ -379,10 +427,12 @@ end
|
|||
|
||||
-- Lizenz entziehen Menü
|
||||
local function openRevokeLicenseMenu(targetId, targetName, licenses)
|
||||
debugPrint("Öffne Lizenz-Entziehungs-Menü für: " .. targetName)
|
||||
|
||||
local menuOptions = {}
|
||||
|
||||
for _, license in ipairs(licenses) do
|
||||
if license.is_active then
|
||||
if license.is_active == 1 then
|
||||
local config = Config.LicenseTypes[license.license_type] or {
|
||||
label = license.license_type,
|
||||
icon = 'fas fa-id-card'
|
||||
|
@ -399,11 +449,13 @@ local function openRevokeLicenseMenu(targetId, targetName, licenses)
|
|||
options = {
|
||||
{
|
||||
title = 'Spieler: ' .. targetName,
|
||||
disabled = true
|
||||
disabled = true,
|
||||
icon = 'fas fa-user'
|
||||
},
|
||||
{
|
||||
title = 'Lizenztyp: ' .. config.label,
|
||||
disabled = true
|
||||
disabled = true,
|
||||
icon = config.icon
|
||||
},
|
||||
{
|
||||
title = '─────────────────',
|
||||
|
@ -414,6 +466,7 @@ local function openRevokeLicenseMenu(targetId, targetName, licenses)
|
|||
description = 'Lizenz jetzt entziehen',
|
||||
icon = 'fas fa-check',
|
||||
onSelect = function()
|
||||
debugPrint("Sende Lizenz-Entziehung an Server...")
|
||||
TriggerServerEvent('license-system:server:revokeLicense', targetId, license.license_type)
|
||||
lib.hideContext()
|
||||
end
|
||||
|
@ -463,6 +516,8 @@ end
|
|||
|
||||
-- Hauptmenü für Lizenz-System
|
||||
local function openLicenseMenu()
|
||||
debugPrint("Öffne Hauptmenü für Lizenz-System")
|
||||
|
||||
if not hasPermission() then
|
||||
showNotification(Config.Notifications.no_permission.message, Config.Notifications.no_permission.type)
|
||||
return
|
||||
|
@ -499,6 +554,8 @@ end
|
|||
|
||||
-- Eigene Lizenzen anzeigen
|
||||
local function showMyLicenses()
|
||||
debugPrint("Öffne Menü für eigene Lizenzen")
|
||||
|
||||
local menuOptions = {}
|
||||
|
||||
for licenseType, config in pairs(Config.LicenseTypes) do
|
||||
|
@ -507,13 +564,7 @@ local function showMyLicenses()
|
|||
description = 'Deine ' .. config.label .. ' anzeigen',
|
||||
icon = config.icon,
|
||||
onSelect = function()
|
||||
QBCore.Functions.TriggerCallback('license-system:server:getMyLicense', function(licenseData)
|
||||
if licenseData then
|
||||
showLicense(licenseData)
|
||||
else
|
||||
showNotification('Du hast keine ' .. config.label .. '!', 'error')
|
||||
end
|
||||
end, licenseType)
|
||||
showMyLicense(licenseType)
|
||||
end
|
||||
})
|
||||
end
|
||||
|
@ -529,47 +580,100 @@ end
|
|||
|
||||
-- Events
|
||||
RegisterNetEvent('license-system:client:showLicense', function(targetId)
|
||||
QBCore.Functions.TriggerCallback('license-system:server:getLicense', function(licenseData)
|
||||
showLicense(licenseData)
|
||||
end, targetId)
|
||||
debugPrint("Event erhalten: showLicense für ID " .. tostring(targetId))
|
||||
showPlayerLicense(targetId)
|
||||
end)
|
||||
|
||||
RegisterNetEvent('license-system:client:showMyLicense', function(licenseType)
|
||||
QBCore.Functions.TriggerCallback('license-system:server:getMyLicense', function(licenseData)
|
||||
showLicense(licenseData)
|
||||
end, licenseType)
|
||||
debugPrint("Event erhalten: showMyLicense für Typ " .. tostring(licenseType))
|
||||
showMyLicense(licenseType)
|
||||
end)
|
||||
|
||||
RegisterNetEvent('license-system:client:openCamera', function()
|
||||
debugPrint("Event erhalten: openCamera")
|
||||
SendNUIMessage({
|
||||
action = 'openCamera'
|
||||
})
|
||||
end)
|
||||
|
||||
RegisterNetEvent('license-system:client:refreshMenu', function()
|
||||
debugPrint("Event erhalten: refreshMenu")
|
||||
if lib.getOpenContextMenu() then
|
||||
lib.hideContext()
|
||||
Wait(100)
|
||||
openLicenseMenu()
|
||||
end
|
||||
end)
|
||||
|
||||
-- NUI Callbacks
|
||||
RegisterNUICallback('closeLicense', function(data, cb)
|
||||
debugPrint("NUI Callback: closeLicense")
|
||||
closeLicense()
|
||||
safeCallback(cb, 'ok')
|
||||
|
||||
if cb and type(cb) == "function" then
|
||||
cb('ok')
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNUICallback('savePhoto', function(data, cb)
|
||||
debugPrint("NUI Callback: savePhoto")
|
||||
|
||||
if data.photo and data.citizenid then
|
||||
TriggerServerEvent('license-system:server:savePhoto', data.citizenid, data.photo)
|
||||
safeCallback(cb, 'ok')
|
||||
|
||||
if cb and type(cb) == "function" then
|
||||
cb('ok')
|
||||
end
|
||||
else
|
||||
safeCallback(cb, 'error')
|
||||
debugPrint("^1Fehler: Foto-Daten unvollständig^7")
|
||||
|
||||
if cb and type(cb) == "function" then
|
||||
cb('error')
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
RegisterNUICallback('takePicture', function(data, cb)
|
||||
debugPrint("NUI Callback: takePicture")
|
||||
|
||||
-- Hier könnte eine Kamera-Funktion implementiert werden
|
||||
if cb and type(cb) == "function" then
|
||||
cb('ok')
|
||||
end
|
||||
end)
|
||||
|
||||
-- Commands
|
||||
RegisterCommand(Config.Commands.license.name, function()
|
||||
debugPrint("Command ausgeführt: " .. Config.Commands.license.name)
|
||||
openLicenseMenu()
|
||||
end, Config.Commands.license.restricted)
|
||||
|
||||
RegisterCommand(Config.Commands.mylicense.name, function()
|
||||
debugPrint("Command ausgeführt: " .. Config.Commands.mylicense.name)
|
||||
showMyLicenses()
|
||||
end, Config.Commands.mylicense.restricted)
|
||||
|
||||
-- Zusätzliche Commands für schnellen Zugriff
|
||||
RegisterCommand('ausweis', function()
|
||||
debugPrint("Command ausgeführt: ausweis")
|
||||
showMyLicense('id_card')
|
||||
end, false)
|
||||
|
||||
RegisterCommand('führerschein', function()
|
||||
debugPrint("Command ausgeführt: führerschein")
|
||||
showMyLicense('drivers_license')
|
||||
end, false)
|
||||
|
||||
RegisterCommand('waffenschein', function()
|
||||
debugPrint("Command ausgeführt: waffenschein")
|
||||
showMyLicense('weapon_license')
|
||||
end, false)
|
||||
|
||||
RegisterCommand('pass', function()
|
||||
debugPrint("Command ausgeführt: pass")
|
||||
showMyLicense('passport')
|
||||
end, false)
|
||||
|
||||
-- Keybinds
|
||||
if Config.Keybinds.open_license_menu then
|
||||
RegisterKeyMapping(Config.Commands.license.name, Config.Keybinds.open_license_menu.description, 'keyboard', Config.Keybinds.open_license_menu.key)
|
||||
|
@ -579,17 +683,68 @@ if Config.Keybinds.show_my_licenses then
|
|||
RegisterKeyMapping(Config.Commands.mylicense.name, Config.Keybinds.show_my_licenses.description, 'keyboard', Config.Keybinds.show_my_licenses.key)
|
||||
end
|
||||
|
||||
-- Cleanup
|
||||
-- ESC-Taste zum Schließen der Lizenz
|
||||
CreateThread(function()
|
||||
while true do
|
||||
Wait(0)
|
||||
|
||||
if isLicenseShowing then
|
||||
if IsControlJustPressed(0, 322) then -- ESC-Taste
|
||||
closeLicense()
|
||||
end
|
||||
else
|
||||
Wait(500)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Cleanup und Initialisierung
|
||||
AddEventHandler('onResourceStop', function(resourceName)
|
||||
if GetCurrentResourceName() == resourceName then
|
||||
if isMenuOpen then
|
||||
if isLicenseShowing then
|
||||
closeLicense()
|
||||
end
|
||||
|
||||
if lib.getOpenContextMenu() then
|
||||
lib.hideContext()
|
||||
end
|
||||
|
||||
debugPrint("License-System Client gestoppt")
|
||||
end
|
||||
end)
|
||||
|
||||
AddEventHandler('onResourceStart', function(resourceName)
|
||||
if GetCurrentResourceName() == resourceName then
|
||||
debugPrint("License-System Client gestartet")
|
||||
|
||||
-- Warten bis QBCore geladen ist
|
||||
while not QBCore do
|
||||
Wait(100)
|
||||
end
|
||||
|
||||
debugPrint("QBCore erfolgreich geladen")
|
||||
end
|
||||
end)
|
||||
|
||||
-- Player laden Event
|
||||
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
|
||||
debugPrint("Spieler geladen - License-System bereit")
|
||||
end)
|
||||
|
||||
-- Job Update Event
|
||||
RegisterNetEvent('QBCore:Client:OnJobUpdate', function(JobInfo)
|
||||
debugPrint("Job aktualisiert: " .. JobInfo.name)
|
||||
end)
|
||||
|
||||
-- Initialisierung
|
||||
CreateThread(function()
|
||||
debugPrint("License-System Client gestartet")
|
||||
debugPrint("License-System Client Thread gestartet")
|
||||
|
||||
-- Warten bis Spieler gespawnt ist
|
||||
while not NetworkIsPlayerActive(PlayerId()) do
|
||||
Wait(100)
|
||||
end
|
||||
|
||||
debugPrint("Spieler ist aktiv - System bereit")
|
||||
end)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue