1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
Nordi98 2025-08-06 13:29:54 +02:00
parent ab111fdebf
commit c50fb7209c
4 changed files with 136 additions and 19 deletions

View file

@ -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

View file

@ -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)

View file

@ -11,7 +11,8 @@ shared_scripts {
}
client_scripts {
'client.lua'
'client.lua',
'vehicleadmin_integration.lua'
}
server_scripts {

View file

@ -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)