Zum Inhalt

Licenses

Verwaltet Führerscheine und Lizenzen pro Charakter über die Datenbanktabellen license_types und character_licenses.


Datenbankschema

-- Lizenzdefinitionen
CREATE TABLE license_types (
    id           INT PRIMARY KEY AUTO_INCREMENT,
    license_code VARCHAR(50) UNIQUE,
    label        VARCHAR(100),
    description  TEXT,
    active       TINYINT(1) DEFAULT 1
);

-- Charakter-Lizenzen
CREATE TABLE character_licenses (
    id           INT PRIMARY KEY AUTO_INCREMENT,
    char_id      INT,
    license_type VARCHAR(50),       -- Referenz auf license_types.license_code
    status       ENUM('active','suspended','revoked') DEFAULT 'active',
    issued_by    VARCHAR(100),
    expiry_date  DATE,
    created_at   TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Vordefinierte Lizenz-Codes

Code Bezeichnung
car_license PKW-Führerschein
truck_license LKW-Führerschein
pilot_license Pilotenlizenz
weapon_license Waffenschein
first_aid_license Erste-Hilfe-Schein

Server-API

Lizenztypen abfragen

-- Alle aktiven Typen
cv.licenses.getAllLicenseTypes()        -- → table

-- Einzelner Typ
cv.licenses.getLicenseType(licenseCode) -- → table | nil

-- Nur Bezeichnung
cv.licenses.getLicenseLabel(licenseCode)-- → string | licenseCode

Charakter-Lizenzen

-- Alle Lizenzen eines Charakters
cv.licenses.getCharacterLicenses(charId)       -- → table

-- Einzelne Lizenz
cv.licenses.getCharacterLicense(charId, code)  -- → table | nil

-- Besitz prüfen
cv.licenses.hasLicense(charId, licenseCode)    -- → boolean

Lizenzen verwalten

-- Lizenz vergeben
cv.licenses.addLicense(charId, licenseCode, issuedBy, expiryDate)
-- → boolean (false wenn bereits vorhanden oder Typ unbekannt)

-- Lizenz entziehen (status → 'revoked')
cv.licenses.removeLicense(charId, licenseCode) -- → boolean

-- Lizenz suspendieren
cv.licenses.suspendLicense(charId, licenseCode)-- → boolean

-- Suspendierung aufheben (status → 'active')
cv.licenses.restoreLicense(charId, licenseCode)-- → boolean

Exports (Server)

exports['cv_framework']:HasLicense(charId, 'weapon_license')
exports['cv_framework']:AddLicense(charId, 'car_license', 'DMV', nil)
exports['cv_framework']:RemoveLicense(charId, 'car_license')
exports['cv_framework']:SuspendLicense(charId, 'weapon_license')

Client-API

-- Label einer Lizenz abfragen
cv.licenses.getLabel(licenseCode)       -- → string

-- Alle Typen (via Export)
cv.licenses.getAllLicenseTypes()         -- → table

-- Eigene Lizenz asynchron prüfen
cv.licenses.checkLicense('weapon_license', function(hasLicense)
    if hasLicense then
        -- Spieler hat eine aktive Waffen-Lizenz
    end
end)

Admin Commands

Command Parameter Berechtigung
/addlicense <playerId> <code> Player-ID, Lizenz-Code group.admin
/removelicense <playerId> <code> Player-ID, Lizenz-Code group.admin
/licenses alle (eigene Lizenzen anzeigen)

Beispiel: Lizenzprüfung in Ressource

-- Server-seitig
local player = cv.player.getPlayer(source)
if not player or not player.charId then return end

if not exports['cv_framework']:HasLicense(player.charId, 'weapon_license') then
    cv.notify(source, 'Fehler', 'Du benötigst einen Waffenschein', 'error')
    return
end

-- Weiter...