This commit is contained in:
Nordi98 2025-08-04 09:35:37 +02:00
parent 4f8d916728
commit 4d24104e50
6 changed files with 3089 additions and 2383 deletions

View file

@ -1,347 +1,317 @@
Config = {}
-- Debug-Modus
-- Allgemeine Einstellungen
Config.Debug = true
Config.UseBackgroundImages = true
Config.MaxLicenseAge = 365 -- Tage bis Ablauf
Config.RenewalDays = 30 -- Tage vor Ablauf für Verlängerung
-- Berechtigte Jobs
Config.AuthorizedJobs = {
['police'] = true,
['sheriff'] = true,
['government'] = true,
['doj'] = true,
['ambulance'] = true,
['mechanic'] = true
['judge'] = true,
['lawyer'] = true,
['ambulance'] = true, -- Für medizinische Lizenzen
['mechanic'] = true -- Für Fahrzeug-Lizenzen
}
-- Benachrichtigungen
Config.Notifications = {
no_permission = {
message = "Du hast keine Berechtigung dafür!",
type = "error"
},
license_issued = {
message = "Lizenz erfolgreich ausgestellt!",
type = "success"
},
license_revoked = {
message = "Lizenz erfolgreich entzogen!",
type = "success"
}
-- Jobs that can reactivate specific license types
Config.ReactivationPermissions = {
['police'] = {'weapon_license', 'drivers_license'},
['admin'] = {'id_card', 'passport', 'business_license'},
['ambulance'] = {'medical_license'},
['driving_school'] = {'drivers_license'},
['harbor'] = {'boat_license'},
['airport'] = {'pilot_license'}
}
-- Lizenz-Typen (ERWEITERT mit benutzerdefinierten Feldern)
-- Lizenz-Typen
Config.LicenseTypes = {
['id_card'] = {
label = 'Personalausweis',
description = 'Offizieller Personalausweis',
price = 50,
validity_days = nil, -- Unbegrenzt gültig
color = '#2E86AB',
icon = 'fas fa-id-card',
template = 'id_card',
custom_fields = {
{
name = 'birth_date',
label = 'Geburtsdatum',
type = 'date',
required = true,
placeholder = 'TT.MM.JJJJ'
},
{
name = 'birth_place',
label = 'Geburtsort',
type = 'text',
required = true,
placeholder = 'z.B. Los Santos'
},
{
name = 'nationality',
label = 'Staatsangehörigkeit',
type = 'select',
required = true,
options = {
{value = 'usa', label = 'USA'},
{value = 'germany', label = 'Deutschland'},
{value = 'uk', label = 'Vereinigtes Königreich'},
{value = 'france', label = 'Frankreich'},
{value = 'other', label = 'Andere'}
}
},
{
name = 'address',
label = 'Adresse',
type = 'textarea',
required = true,
placeholder = 'Vollständige Adresse'
},
{
name = 'height',
label = 'Größe (cm)',
type = 'number',
required = false,
placeholder = 'z.B. 180'
},
{
name = 'eye_color',
label = 'Augenfarbe',
type = 'select',
required = false,
options = {
{value = 'brown', label = 'Braun'},
{value = 'blue', label = 'Blau'},
{value = 'green', label = 'Grün'},
{value = 'gray', label = 'Grau'},
{value = 'hazel', label = 'Haselnuss'}
}
},
{
name = 'photo_url',
label = 'Foto-URL',
type = 'url',
required = false,
placeholder = 'https://example.com/photo.jpg'
}
}
color = '#667eea',
price = 50,
required_items = {},
can_expire = true,
validity_days = 3650, -- 10 Jahre
required_job = nil,
description = 'Offizieller Personalausweis'
},
['driver_license'] = {
['drivers_license'] = {
label = 'Führerschein',
description = 'Führerschein für Kraftfahrzeuge',
price = 150,
validity_days = 1825, -- 5 Jahre
color = '#F18F01',
icon = 'fas fa-car',
template = 'driver_license',
color = '#f093fb',
price = 500,
required_items = {'driving_test_certificate'},
can_expire = true,
validity_days = 5475, -- 15 Jahre
required_job = 'driving_school',
description = 'Berechtigung zum Führen von Kraftfahrzeugen',
classes = {
['A'] = 'Motorräder',
['B'] = 'PKW',
['C'] = 'LKW',
['D'] = 'Busse'
},
custom_fields = {
{
name = 'birth_date',
label = 'Geburtsdatum',
type = 'date',
required = true,
placeholder = 'TT.MM.JJJJ'
},
{
name = 'address',
label = 'Adresse',
type = 'textarea',
required = true,
placeholder = 'Vollständige Adresse'
},
{
name = 'restrictions',
label = 'Beschränkungen',
type = 'textarea',
required = false,
placeholder = 'z.B. Brille erforderlich'
},
{
name = 'photo_url',
label = 'Foto-URL',
type = 'url',
required = false,
placeholder = 'https://example.com/photo.jpg'
}
'A', 'A1', 'A2', 'B', 'BE', 'C', 'CE', 'D', 'DE'
}
},
['weapon_license'] = {
label = 'Waffenschein',
description = 'Berechtigung zum Führen von Waffen',
price = 500,
validity_days = 365, -- 1 Jahr
color = '#C73E1D',
icon = 'fas fa-crosshairs',
template = 'weapon_license',
custom_fields = {
{
name = 'birth_date',
label = 'Geburtsdatum',
type = 'date',
required = true,
placeholder = 'TT.MM.JJJJ'
},
{
name = 'weapon_type',
label = 'Waffentyp',
type = 'select',
required = true,
options = {
{value = 'pistol', label = 'Pistole'},
{value = 'rifle', label = 'Gewehr'},
{value = 'shotgun', label = 'Schrotflinte'},
{value = 'all', label = 'Alle Waffentypen'}
}
},
{
name = 'purpose',
label = 'Verwendungszweck',
type = 'select',
required = true,
options = {
{value = 'self_defense', label = 'Selbstverteidigung'},
{value = 'sport', label = 'Sport'},
{value = 'hunting', label = 'Jagd'},
{value = 'collection', label = 'Sammlung'},
{value = 'security', label = 'Sicherheitsdienst'}
}
},
{
name = 'restrictions',
label = 'Beschränkungen',
type = 'textarea',
required = false,
placeholder = 'Besondere Auflagen oder Beschränkungen'
},
{
name = 'photo_url',
label = 'Foto-URL',
type = 'url',
required = false,
placeholder = 'https://example.com/photo.jpg'
}
color = '#4facfe',
price = 2500,
required_items = {'weapon_course_certificate', 'psychological_evaluation'},
can_expire = true,
validity_days = 1095, -- 3 Jahre
required_job = 'police',
description = 'Berechtigung zum Führen von Schusswaffen',
restrictions = {
'Nur für registrierte Waffen',
'Regelmäßige Überprüfung erforderlich',
'Nicht übertragbar'
}
},
['pilot_license'] = {
label = 'Pilotenlizenz',
description = 'Berechtigung zum Führen von Luftfahrzeugen',
price = 1000,
validity_days = 730, -- 2 Jahre
color = '#6A994E',
icon = 'fas fa-plane',
template = 'pilot_license',
classes = {
['PPL'] = 'Private Pilot License',
['CPL'] = 'Commercial Pilot License',
['ATPL'] = 'Airline Transport Pilot License',
['HELI'] = 'Helicopter License'
},
custom_fields = {
{
name = 'birth_date',
label = 'Geburtsdatum',
type = 'date',
required = true,
placeholder = 'TT.MM.JJJJ'
},
{
name = 'medical_cert',
label = 'Medical Certificate',
type = 'text',
required = true,
placeholder = 'z.B. Class 1, Class 2'
},
{
name = 'flight_hours',
label = 'Flugstunden',
type = 'number',
required = true,
placeholder = 'Gesamte Flugstunden'
},
{
name = 'aircraft_types',
label = 'Luftfahrzeugtypen',
type = 'textarea',
required = false,
placeholder = 'Berechtigte Luftfahrzeugtypen'
},
{
name = 'restrictions',
label = 'Beschränkungen',
type = 'textarea',
required = false,
placeholder = 'z.B. nur bei Tageslicht'
},
{
name = 'photo_url',
label = 'Foto-URL',
type = 'url',
required = false,
placeholder = 'https://example.com/photo.jpg'
}
}
['passport'] = {
label = 'Reisepass',
icon = 'fas fa-passport',
color = '#43e97b',
price = 150,
required_items = {'birth_certificate', 'id_card'},
can_expire = true,
validity_days = 3650, -- 10 Jahre
required_job = 'government',
description = 'Internationales Reisedokument'
},
['business_license'] = {
label = 'Gewerbeschein',
description = 'Berechtigung zur Ausübung eines Gewerbes',
price = 300,
validity_days = 365, -- 1 Jahr
color = '#7209B7',
icon = 'fas fa-briefcase',
template = 'business_license',
custom_fields = {
{
name = 'business_name',
label = 'Firmenname',
type = 'text',
required = true,
placeholder = 'Name des Unternehmens'
},
{
name = 'business_type',
label = 'Gewerbetyp',
type = 'select',
required = true,
options = {
{value = 'retail', label = 'Einzelhandel'},
{value = 'restaurant', label = 'Gastronomie'},
{value = 'service', label = 'Dienstleistung'},
{value = 'manufacturing', label = 'Herstellung'},
{value = 'transport', label = 'Transport'},
{value = 'other', label = 'Sonstiges'}
}
},
{
name = 'business_address',
label = 'Geschäftsadresse',
type = 'textarea',
required = true,
placeholder = 'Vollständige Geschäftsadresse'
},
{
name = 'tax_number',
label = 'Steuernummer',
type = 'text',
required = false,
placeholder = 'z.B. 123/456/78901'
},
{
name = 'employees',
label = 'Anzahl Mitarbeiter',
type = 'number',
required = false,
placeholder = 'Geplante Mitarbeiterzahl'
},
{
name = 'logo_url',
label = 'Firmenlogo-URL',
type = 'url',
required = false,
placeholder = 'https://example.com/logo.jpg'
}
color = '#fa709a',
price = 1000,
required_items = {'business_plan', 'tax_certificate'},
can_expire = true,
validity_days = 1825, -- 5 Jahre
required_job = 'government',
description = 'Berechtigung zur Ausübung eines Gewerbes'
},
['pilot_license'] = {
label = 'Pilotenlizenz',
icon = 'fas fa-plane',
color = '#667eea',
price = 5000,
required_items = {'flight_hours_log', 'medical_certificate'},
can_expire = true,
validity_days = 730, -- 2 Jahre
required_job = 'airport',
description = 'Berechtigung zum Führen von Luftfahrzeugen'
},
['boat_license'] = {
label = 'Bootsführerschein',
icon = 'fas fa-ship',
color = '#00f2fe',
price = 800,
required_items = {'boat_course_certificate'},
can_expire = true,
validity_days = 1825, -- 5 Jahre
required_job = 'harbor',
description = 'Berechtigung zum Führen von Wasserfahrzeugen'
},
['medical_license'] = {
label = 'Approbation',
icon = 'fas fa-user-md',
color = '#ff6b6b',
price = 0, -- Kostenlos für Ärzte
required_items = {'medical_degree', 'medical_exam'},
can_expire = false,
validity_days = nil,
required_job = 'ambulance',
description = 'Berechtigung zur Ausübung der Heilkunde'
},
['hunting_license'] = {
label = 'Jagdschein',
icon = 'fas fa-crosshairs',
color = '#8b5a3c',
price = 300,
required_items = {'hunting_course_certificate'},
can_expire = true,
validity_days = 1095, -- 3 Jahre
required_job = 'police',
description = 'Berechtigung zur Ausübung der Jagd'
},
['fishing_license'] = {
label = 'Angelschein',
icon = 'fas fa-fish',
color = '#4ecdc4',
price = 50,
required_items = {},
can_expire = true,
validity_days = 365, -- 1 Jahr
required_job = 'police',
description = 'Berechtigung zum Angeln in öffentlichen Gewässern'
}
}
-- Standorte für Lizenz-Ausgabe
Config.LicenseLocations = {
['city_hall'] = {
label = 'Rathaus',
coords = vector3(-544.85, -204.13, 38.22),
blip = {
sprite = 419,
color = 2,
scale = 0.8
},
available_licenses = {
'id_card', 'passport', 'business_license'
},
ped = {
model = 'a_m_m_business_01',
coords = vector4(-544.9543, -204.8450, 37.2151, 219.1676)
}
},
['driving_school'] = {
label = 'Fahrschule',
coords = vector3(-829.22, -1209.58, 7.33),
blip = {
sprite = 225,
color = 46,
scale = 0.8
},
available_licenses = {
'drivers_license'
},
ped = {
model = 'a_m_y_business_02',
coords = vector4(-829.22, -1209.58, 6.33, 90.0)
}
},
['police_station'] = {
label = 'Polizeiwache',
coords = vector3(441.07, -979.76, 30.69),
blip = {
sprite = 60,
color = 29,
scale = 0.8
},
available_licenses = {
'weapon_license'
},
ped = {
model = 's_m_y_cop_01',
coords = vector4(441.07, -979.76, 29.69, 270.0)
}
},
['hospital'] = {
label = 'Krankenhaus',
coords = vector3(307.7, -1433.4, 29.9),
blip = {
sprite = 61,
color = 1,
scale = 0.8
},
available_licenses = {
'medical_license'
},
ped = {
model = 's_m_m_doctor_01',
coords = vector4(307.7, -1433.4, 28.9, 180.0)
}
}
}
-- UI-Einstellungen
Config.UI = {
position = 'center', -- 'center', 'top-left', 'top-right', 'bottom-left', 'bottom-right'
animation = 'fade', -- 'fade', 'slide', 'zoom'
theme = 'dark', -- 'dark', 'light'
blur_background = true,
max_image_size = 5 * 1024 * 1024, -- 5MB
allowed_image_formats = {'jpg', 'jpeg', 'png', 'gif', 'webp'},
default_avatar = 'https://via.placeholder.com/150x200/cccccc/666666?text=Kein+Foto'
-- Kommandos
Config.Commands = {
['license'] = {
name = 'lizenz',
help = 'Lizenz-System öffnen',
restricted = true -- Nur für berechtigte Jobs
},
['mylicense'] = {
name = 'meinelizenz',
help = 'Eigene Lizenzen anzeigen',
restricted = false -- Für alle Spieler
},
['givelicense'] = {
name = 'givelicense',
help = 'Lizenz an Spieler vergeben',
restricted = true,
admin_only = true
},
['revokelicense'] = {
name = 'revokelicense',
help = 'Lizenz entziehen',
restricted = true,
admin_only = false
}
}
-- Validierung
Config.Validation = {
name_min_length = 2,
name_max_length = 50,
url_pattern = '^https?://.+',
date_pattern = '^%d%d%.%d%d%.%d%d%d%d$', -- DD.MM.YYYY
phone_pattern = '^%+?[%d%s%-%(%)]+$'
-- Keybinds
Config.Keybinds = {
['open_license_menu'] = {
key = 'F6',
command = 'lizenz',
description = 'Lizenz-System öffnen'
},
['show_my_licenses'] = {
key = 'F7',
command = 'meinelizenz',
description = 'Meine Lizenzen anzeigen'
}
}
-- Benachrichtigungen
Config.Notifications = {
['no_permission'] = {
message = 'Du hast keine Berechtigung!',
type = 'error'
},
['no_players_nearby'] = {
message = 'Keine Spieler in der Nähe!',
type = 'error'
},
['license_not_found'] = {
message = 'Keine Lizenz gefunden!',
type = 'error'
},
['license_expired'] = {
message = 'Diese Lizenz ist abgelaufen!',
type = 'warning'
},
['license_expires_soon'] = {
message = 'Diese Lizenz läuft bald ab!',
type = 'warning'
},
['license_granted'] = {
message = 'Lizenz erfolgreich ausgestellt!',
type = 'success'
},
['license_revoked'] = {
message = 'Lizenz wurde entzogen!',
type = 'info'
},
['photo_saved'] = {
message = 'Foto gespeichert!',
type = 'success'
},
['insufficient_funds'] = {
message = 'Nicht genügend Geld!',
type = 'error'
},
['missing_items'] = {
message = 'Benötigte Gegenstände fehlen!',
type = 'error'
}
}
-- Sounds
Config.Sounds = {
['card_flip'] = 'sounds/card_flip.mp3',
['camera_shutter'] = 'sounds/camera_shutter.mp3',
['notification'] = 'sounds/notification.mp3'
}
-- Datenbank-Einstellungen
Config.Database = {
['table_name'] = 'player_licenses',
['auto_cleanup'] = true, -- Alte Lizenzen automatisch löschen
['cleanup_days'] = 365 -- Nach wie vielen Tagen löschen
}