forked from Simnation/Main
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
|
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',
|
type = 'select',
|
||||||
label = 'Aktion wählen (' .. playerJob.jobLabel .. ')',
|
label = 'Aktion wählen (' .. playerJob.jobLabel .. ')',
|
||||||
|
@ -125,7 +125,7 @@ local function ShowVehicleActions(vehicle, playerJob)
|
||||||
elseif action == 'delete' then
|
elseif action == 'delete' then
|
||||||
local alert = lib.alertDialog({
|
local alert = lib.alertDialog({
|
||||||
header = 'Fahrzeug löschen',
|
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,
|
centered = true,
|
||||||
cancel = true
|
cancel = true
|
||||||
})
|
})
|
||||||
|
@ -135,7 +135,7 @@ local function ShowVehicleActions(vehicle, playerJob)
|
||||||
elseif action == 'repair' then
|
elseif action == 'repair' then
|
||||||
local alert = lib.alertDialog({
|
local alert = lib.alertDialog({
|
||||||
header = 'Fahrzeug reparieren',
|
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,
|
centered = true,
|
||||||
cancel = true
|
cancel = true
|
||||||
})
|
})
|
||||||
|
@ -164,12 +164,11 @@ local function ShowPlayerVehicles(citizenid, playerName, playerJob)
|
||||||
local options = {}
|
local options = {}
|
||||||
for i = 1, #vehicles do
|
for i = 1, #vehicles do
|
||||||
local vehicle = vehicles[i]
|
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
|
-- Color coding based on state
|
||||||
local icon = 'car'
|
local icon = 'car'
|
||||||
local iconColor = '#3b82f6'
|
local iconColor = '#3b82f6'
|
||||||
|
|
||||||
if vehicle.state == 0 then
|
if vehicle.state == 0 then
|
||||||
icon = 'car-side' -- Ausgefahren
|
icon = 'car-side' -- Ausgefahren
|
||||||
iconColor = '#10b981'
|
iconColor = '#10b981'
|
||||||
|
@ -198,7 +197,7 @@ local function ShowPlayerVehicles(citizenid, playerName, playerJob)
|
||||||
'\n' .. GetFuelText(fuelLevel)
|
'\n' .. GetFuelText(fuelLevel)
|
||||||
|
|
||||||
table.insert(options, {
|
table.insert(options, {
|
||||||
title = vehicleLabel .. ' (' .. vehicle.plate .. ')',
|
title = vehicleName .. ' (' .. vehicle.plate .. ')',
|
||||||
description = description,
|
description = description,
|
||||||
icon = icon,
|
icon = icon,
|
||||||
iconColor = iconColor,
|
iconColor = iconColor,
|
||||||
|
@ -275,3 +274,5 @@ end)
|
||||||
exports('OpenVehicleAdmin', function()
|
exports('OpenVehicleAdmin', function()
|
||||||
ShowPlayerMenu()
|
ShowPlayerMenu()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,8 @@ shared_scripts {
|
||||||
}
|
}
|
||||||
|
|
||||||
client_scripts {
|
client_scripts {
|
||||||
'client.lua'
|
'client.lua',
|
||||||
|
'vehicleadmin_integration.lua'
|
||||||
}
|
}
|
||||||
|
|
||||||
server_scripts {
|
server_scripts {
|
||||||
|
|
|
@ -49,12 +49,6 @@ local AdminConfig = {
|
||||||
|
|
||||||
-- Versuche, die Garagen aus dem externen Config zu laden
|
-- Versuche, die Garagen aus dem externen Config zu laden
|
||||||
local ExternalGarages = {}
|
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
|
-- Job Permission Check
|
||||||
local function HasPermission(source)
|
local function HasPermission(source)
|
||||||
|
@ -98,6 +92,49 @@ QBCore.Functions.CreateCallback('vehicleadmin:getPlayers', function(source, cb)
|
||||||
end)
|
end)
|
||||||
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
|
-- Get vehicles for specific player
|
||||||
QBCore.Functions.CreateCallback('vehicleadmin:getPlayerVehicles', function(source, cb, citizenid)
|
QBCore.Functions.CreateCallback('vehicleadmin:getPlayerVehicles', function(source, cb, citizenid)
|
||||||
if not HasPermission(source) then
|
if not HasPermission(source) then
|
||||||
|
@ -114,6 +151,12 @@ QBCore.Functions.CreateCallback('vehicleadmin:getPlayerVehicles', function(sourc
|
||||||
local vehicles = {}
|
local vehicles = {}
|
||||||
for i = 1, #result do
|
for i = 1, #result do
|
||||||
local vehicle = result[i]
|
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, {
|
table.insert(vehicles, {
|
||||||
plate = vehicle.plate or 'UNKNOWN',
|
plate = vehicle.plate or 'UNKNOWN',
|
||||||
|
@ -124,7 +167,7 @@ QBCore.Functions.CreateCallback('vehicleadmin:getPlayerVehicles', function(sourc
|
||||||
engine = vehicle.engine or 1000,
|
engine = vehicle.engine or 1000,
|
||||||
body = vehicle.body or 1000,
|
body = vehicle.body or 1000,
|
||||||
citizenid = vehicle.citizenid,
|
citizenid = vehicle.citizenid,
|
||||||
name = vehicle.name or "Unbekanntes Fahrzeug",
|
name = displayName,
|
||||||
mods = vehicle.mods or "{}"
|
mods = vehicle.mods or "{}"
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
@ -141,7 +184,7 @@ QBCore.Functions.CreateCallback('vehicleadmin:getGarages', function(source, cb)
|
||||||
|
|
||||||
local garages = {}
|
local garages = {}
|
||||||
|
|
||||||
-- Verwende die externen Garagen, wenn verfügbar
|
-- Verwende die externen Garagen aus dem Garagensystem
|
||||||
if next(ExternalGarages) ~= nil then
|
if next(ExternalGarages) ~= nil then
|
||||||
for k, v in pairs(ExternalGarages) do
|
for k, v in pairs(ExternalGarages) do
|
||||||
table.insert(garages, {
|
table.insert(garages, {
|
||||||
|
@ -512,13 +555,29 @@ QBCore.Commands.Add('dealeradmin', 'Öffne Autohändler Fahrzeug Menu', {}, fals
|
||||||
TriggerClientEvent('vehicleadmin:openMenu', src)
|
TriggerClientEvent('vehicleadmin:openMenu', src)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Versuche, die Garagen aus dem externen Config zu laden (erneut)
|
-- Lade die Garagen aus dem Garagensystem
|
||||||
Citizen.CreateThread(function()
|
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
|
-- Versuche, die Garagen aus dem Hauptsystem zu laden
|
||||||
if _G.Config and _G.Config.Zonen then
|
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.")
|
print("[Fahrzeugadmin] Garagen aus dem Hauptsystem nachgeladen: " .. #ExternalGarages .. " Garagen gefunden.")
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue