ed
This commit is contained in:
		
							parent
							
								
									ab111fdebf
								
							
						
					
					
						commit
						c50fb7209c
					
				
					 4 changed files with 136 additions and 19 deletions
				
			
		| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
-- vehicleadmin_integration.lua
 | 
			
		||||
-- Diese Datei integriert das Fahrzeugadmin-System mit dem Garagensystem
 | 
			
		||||
 | 
			
		||||
-- Füge einen Menüpunkt für das Fahrzeugadmin-System zum NPC-Menü hinzu
 | 
			
		||||
local function AddVehicleAdminOption()
 | 
			
		||||
    -- Prüfe, ob der Spieler die Berechtigung hat
 | 
			
		||||
    QBCore.Functions.TriggerCallback('vehicleadmin:getPlayerJob', function(jobData)
 | 
			
		||||
        if jobData and jobData.hasPermission then
 | 
			
		||||
            -- Füge den Menüpunkt zum NPC hinzu, wenn der Spieler berechtigt ist
 | 
			
		||||
            if npcHandle and DoesEntityExist(npcHandle) then
 | 
			
		||||
                exports['qb-target']:AddTargetEntity(npcHandle, {
 | 
			
		||||
                    options = {
 | 
			
		||||
                        {
 | 
			
		||||
                            type = "client",
 | 
			
		||||
                            event = "vehicleadmin:openMenu",
 | 
			
		||||
                            icon = "fas fa-car-mechanic",
 | 
			
		||||
                            label = "Fahrzeugverwaltung",
 | 
			
		||||
                        }
 | 
			
		||||
                    },
 | 
			
		||||
                    distance = 2.5
 | 
			
		||||
                })
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
    end)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Überschreibe die AddTargetOptions-Funktion, um unsere Option hinzuzufügen
 | 
			
		||||
local originalAddTargetOptions = AddTargetOptions
 | 
			
		||||
if originalAddTargetOptions then
 | 
			
		||||
    AddTargetOptions = function()
 | 
			
		||||
        originalAddTargetOptions()
 | 
			
		||||
        AddVehicleAdminOption()
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Registriere einen Event-Handler für das Hinzufügen der Target-Optionen
 | 
			
		||||
RegisterNetEvent('mh_garage:targetOptionsAdded')
 | 
			
		||||
AddEventHandler('mh_garage:targetOptionsAdded', function()
 | 
			
		||||
    AddVehicleAdminOption()
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
-- Füge einen Event-Handler hinzu, der nach dem Spawnen des NPCs ausgeführt wird
 | 
			
		||||
RegisterNetEvent('mh_garage:npcSpawned')
 | 
			
		||||
AddEventHandler('mh_garage:npcSpawned', function()
 | 
			
		||||
    Wait(500) -- Warte kurz, damit der NPC vollständig gespawnt ist
 | 
			
		||||
    AddVehicleAdminOption()
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
-- Füge einen Hook in die SpawnGuardNPC-Funktion ein, um unseren Event auszulösen
 | 
			
		||||
local originalSpawnGuardNPC = SpawnGuardNPC
 | 
			
		||||
if originalSpawnGuardNPC then
 | 
			
		||||
    SpawnGuardNPC = function(npc)
 | 
			
		||||
        originalSpawnGuardNPC(npc)
 | 
			
		||||
        TriggerEvent('mh_garage:npcSpawned')
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -89,9 +89,9 @@ local function ShowVehicleActions(vehicle, playerJob)
 | 
			
		|||
            }
 | 
			
		||||
        end
 | 
			
		||||
        
 | 
			
		||||
        local vehicleLabel = QBCore.Shared.Vehicles[vehicle.vehicle]?.name or vehicle.vehicle
 | 
			
		||||
        local vehicleName = vehicle.name or "Unbekanntes Fahrzeug"
 | 
			
		||||
        
 | 
			
		||||
        local input = lib.inputDialog('Fahrzeug Aktionen - ' .. (vehicle.name or vehicleLabel) .. ' (' .. vehicle.plate .. ')', {
 | 
			
		||||
        local input = lib.inputDialog('Fahrzeug Aktionen - ' .. vehicleName .. ' (' .. vehicle.plate .. ')', {
 | 
			
		||||
            {
 | 
			
		||||
                type = 'select',
 | 
			
		||||
                label = 'Aktion wählen (' .. playerJob.jobLabel .. ')',
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +125,7 @@ local function ShowVehicleActions(vehicle, playerJob)
 | 
			
		|||
            elseif action == 'delete' then
 | 
			
		||||
                local alert = lib.alertDialog({
 | 
			
		||||
                    header = 'Fahrzeug löschen',
 | 
			
		||||
                    content = 'Bist du sicher, dass du das Fahrzeug ' .. (vehicle.name or vehicleLabel) .. ' (' .. vehicle.plate .. ') von der Map löschen möchtest?',
 | 
			
		||||
                    content = 'Bist du sicher, dass du das Fahrzeug ' .. vehicleName .. ' (' .. vehicle.plate .. ') von der Map löschen möchtest?',
 | 
			
		||||
                    centered = true,
 | 
			
		||||
                    cancel = true
 | 
			
		||||
                })
 | 
			
		||||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ local function ShowVehicleActions(vehicle, playerJob)
 | 
			
		|||
            elseif action == 'repair' then
 | 
			
		||||
                local alert = lib.alertDialog({
 | 
			
		||||
                    header = 'Fahrzeug reparieren',
 | 
			
		||||
                    content = 'Möchtest du das Fahrzeug ' .. (vehicle.name or vehicleLabel) .. ' (' .. vehicle.plate .. ') vollständig reparieren?',
 | 
			
		||||
                    content = 'Möchtest du das Fahrzeug ' .. vehicleName .. ' (' .. vehicle.plate .. ') vollständig reparieren?',
 | 
			
		||||
                    centered = true,
 | 
			
		||||
                    cancel = true
 | 
			
		||||
                })
 | 
			
		||||
| 
						 | 
				
			
			@ -164,12 +164,11 @@ local function ShowPlayerVehicles(citizenid, playerName, playerJob)
 | 
			
		|||
        local options = {}
 | 
			
		||||
        for i = 1, #vehicles do
 | 
			
		||||
            local vehicle = vehicles[i]
 | 
			
		||||
            local vehicleLabel = vehicle.name or QBCore.Shared.Vehicles[vehicle.vehicle]?.name or vehicle.vehicle
 | 
			
		||||
            local vehicleName = vehicle.name or "Unbekanntes Fahrzeug"
 | 
			
		||||
            
 | 
			
		||||
            -- Color coding based on state
 | 
			
		||||
            local icon = 'car'
 | 
			
		||||
            local iconColor = '#3b82f6'
 | 
			
		||||
            
 | 
			
		||||
            if vehicle.state == 0 then
 | 
			
		||||
                icon = 'car-side' -- Ausgefahren
 | 
			
		||||
                iconColor = '#10b981'
 | 
			
		||||
| 
						 | 
				
			
			@ -198,7 +197,7 @@ local function ShowPlayerVehicles(citizenid, playerName, playerJob)
 | 
			
		|||
                               '\n' .. GetFuelText(fuelLevel)
 | 
			
		||||
            
 | 
			
		||||
            table.insert(options, {
 | 
			
		||||
                title = vehicleLabel .. ' (' .. vehicle.plate .. ')',
 | 
			
		||||
                title = vehicleName .. ' (' .. vehicle.plate .. ')',
 | 
			
		||||
                description = description,
 | 
			
		||||
                icon = icon,
 | 
			
		||||
                iconColor = iconColor,
 | 
			
		||||
| 
						 | 
				
			
			@ -275,3 +274,5 @@ end)
 | 
			
		|||
exports('OpenVehicleAdmin', function()
 | 
			
		||||
    ShowPlayerMenu()
 | 
			
		||||
end)
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,8 @@ shared_scripts {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
client_scripts {
 | 
			
		||||
    'client.lua'
 | 
			
		||||
    'client.lua',
 | 
			
		||||
    'vehicleadmin_integration.lua'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
server_scripts {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,12 +49,6 @@ local AdminConfig = {
 | 
			
		|||
 | 
			
		||||
-- Versuche, die Garagen aus dem externen Config zu laden
 | 
			
		||||
local ExternalGarages = {}
 | 
			
		||||
if _G.Config and _G.Config.Zonen then
 | 
			
		||||
    ExternalGarages = _G.Config.Zonen
 | 
			
		||||
    print("[Fahrzeugadmin] Garagen aus dem Hauptsystem geladen: " .. #ExternalGarages .. " Garagen gefunden.")
 | 
			
		||||
else
 | 
			
		||||
    print("[Fahrzeugadmin] Konnte keine Garagen aus dem Hauptsystem laden, verwende Standard-Garagen.")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Job Permission Check
 | 
			
		||||
local function HasPermission(source)
 | 
			
		||||
| 
						 | 
				
			
			@ -98,6 +92,49 @@ QBCore.Functions.CreateCallback('vehicleadmin:getPlayers', function(source, cb)
 | 
			
		|||
    end)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
-- Funktion zum Abrufen des Fahrzeugnamens
 | 
			
		||||
local function GetVehicleDisplayName(model)
 | 
			
		||||
    -- Versuche zuerst, den Namen aus QBCore zu bekommen
 | 
			
		||||
    local vehicleData = QBCore.Shared.Vehicles[model]
 | 
			
		||||
    if vehicleData and vehicleData.name then
 | 
			
		||||
        return vehicleData.name
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    -- Fallback: Versuche, den Namen aus der Fahrzeugklasse zu bekommen
 | 
			
		||||
    local vehicleClass = GetVehicleClassFromName(model)
 | 
			
		||||
    if vehicleClass then
 | 
			
		||||
        local classes = {
 | 
			
		||||
            [0] = "Kompakt",
 | 
			
		||||
            [1] = "Limousine",
 | 
			
		||||
            [2] = "SUV",
 | 
			
		||||
            [3] = "Coupé",
 | 
			
		||||
            [4] = "Muscle",
 | 
			
		||||
            [5] = "Sport Classic",
 | 
			
		||||
            [6] = "Sport",
 | 
			
		||||
            [7] = "Super",
 | 
			
		||||
            [8] = "Motorrad",
 | 
			
		||||
            [9] = "Geländewagen",
 | 
			
		||||
            [10] = "Industrie",
 | 
			
		||||
            [11] = "Nutzfahrzeug",
 | 
			
		||||
            [12] = "Van",
 | 
			
		||||
            [13] = "Fahrrad",
 | 
			
		||||
            [14] = "Boot",
 | 
			
		||||
            [15] = "Hubschrauber",
 | 
			
		||||
            [16] = "Flugzeug",
 | 
			
		||||
            [17] = "Service",
 | 
			
		||||
            [18] = "Notdienst",
 | 
			
		||||
            [19] = "Militär",
 | 
			
		||||
            [20] = "Kommerziell",
 | 
			
		||||
            [21] = "Zug",
 | 
			
		||||
            [22] = "Öffentlich"
 | 
			
		||||
        }
 | 
			
		||||
        return model .. " (" .. (classes[vehicleClass] or "Unbekannt") .. ")"
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    -- Wenn alles fehlschlägt, gib einfach den Modellnamen zurück
 | 
			
		||||
    return model
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Get vehicles for specific player
 | 
			
		||||
QBCore.Functions.CreateCallback('vehicleadmin:getPlayerVehicles', function(source, cb, citizenid)
 | 
			
		||||
    if not HasPermission(source) then
 | 
			
		||||
| 
						 | 
				
			
			@ -114,6 +151,12 @@ QBCore.Functions.CreateCallback('vehicleadmin:getPlayerVehicles', function(sourc
 | 
			
		|||
        local vehicles = {}
 | 
			
		||||
        for i = 1, #result do
 | 
			
		||||
            local vehicle = result[i]
 | 
			
		||||
            local displayName = vehicle.name
 | 
			
		||||
            
 | 
			
		||||
            -- Wenn kein Name gesetzt ist, versuche den Namen aus dem Modell zu bekommen
 | 
			
		||||
            if not displayName or displayName == "" then
 | 
			
		||||
                displayName = GetVehicleDisplayName(vehicle.vehicle)
 | 
			
		||||
            end
 | 
			
		||||
            
 | 
			
		||||
            table.insert(vehicles, {
 | 
			
		||||
                plate = vehicle.plate or 'UNKNOWN',
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +167,7 @@ QBCore.Functions.CreateCallback('vehicleadmin:getPlayerVehicles', function(sourc
 | 
			
		|||
                engine = vehicle.engine or 1000,
 | 
			
		||||
                body = vehicle.body or 1000,
 | 
			
		||||
                citizenid = vehicle.citizenid,
 | 
			
		||||
                name = vehicle.name or "Unbekanntes Fahrzeug",
 | 
			
		||||
                name = displayName,
 | 
			
		||||
                mods = vehicle.mods or "{}"
 | 
			
		||||
            })
 | 
			
		||||
        end
 | 
			
		||||
| 
						 | 
				
			
			@ -141,7 +184,7 @@ QBCore.Functions.CreateCallback('vehicleadmin:getGarages', function(source, cb)
 | 
			
		|||
    
 | 
			
		||||
    local garages = {}
 | 
			
		||||
    
 | 
			
		||||
    -- Verwende die externen Garagen, wenn verfügbar
 | 
			
		||||
    -- Verwende die externen Garagen aus dem Garagensystem
 | 
			
		||||
    if next(ExternalGarages) ~= nil then
 | 
			
		||||
        for k, v in pairs(ExternalGarages) do
 | 
			
		||||
            table.insert(garages, {
 | 
			
		||||
| 
						 | 
				
			
			@ -512,13 +555,29 @@ QBCore.Commands.Add('dealeradmin', 'Öffne Autohändler Fahrzeug Menu', {}, fals
 | 
			
		|||
    TriggerClientEvent('vehicleadmin:openMenu', src)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
-- Versuche, die Garagen aus dem externen Config zu laden (erneut)
 | 
			
		||||
-- Lade die Garagen aus dem Garagensystem
 | 
			
		||||
Citizen.CreateThread(function()
 | 
			
		||||
    Wait(5000) -- Warte länger, damit das Hauptsystem sicher geladen ist
 | 
			
		||||
    Wait(1000) -- Warte kurz, damit das Hauptsystem geladen ist
 | 
			
		||||
    
 | 
			
		||||
    -- Versuche, die Garagen aus dem Hauptsystem zu laden
 | 
			
		||||
    if _G.Config and _G.Config.Zonen then
 | 
			
		||||
        ExternalGarages = _G.Config.Zonen
 | 
			
		||||
        for k, v in pairs(_G.Config.Zonen) do
 | 
			
		||||
            table.insert(ExternalGarages, v)
 | 
			
		||||
        end
 | 
			
		||||
        print("[Fahrzeugadmin] Garagen aus dem Hauptsystem geladen: " .. #ExternalGarages .. " Garagen gefunden.")
 | 
			
		||||
    else
 | 
			
		||||
        print("[Fahrzeugadmin] Konnte keine Garagen aus dem Hauptsystem laden, versuche es später erneut.")
 | 
			
		||||
    end
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
-- Versuche erneut, die Garagen zu laden, falls sie beim ersten Mal nicht verfügbar waren
 | 
			
		||||
Citizen.CreateThread(function()
 | 
			
		||||
    Wait(5000) -- Warte länger, damit das Hauptsystem sicher geladen ist
 | 
			
		||||
    
 | 
			
		||||
    if #ExternalGarages == 0 and _G.Config and _G.Config.Zonen then
 | 
			
		||||
        for k, v in pairs(_G.Config.Zonen) do
 | 
			
		||||
            table.insert(ExternalGarages, v)
 | 
			
		||||
        end
 | 
			
		||||
        print("[Fahrzeugadmin] Garagen aus dem Hauptsystem nachgeladen: " .. #ExternalGarages .. " Garagen gefunden.")
 | 
			
		||||
    end
 | 
			
		||||
end)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue