forked from Simnation/Main
ed
This commit is contained in:
parent
75b73b9c45
commit
6b4ab46e6c
3 changed files with 229 additions and 2 deletions
44
resources/[carscripts]/mh_garage/client/vehicleadmin.lua
Normal file
44
resources/[carscripts]/mh_garage/client/vehicleadmin.lua
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
-- vehicleadmin.lua - Füge diese Datei in deinen client-Ordner ein
|
||||||
|
|
||||||
|
-- Füge einen Menüpunkt für das Fahrzeugadmin-System zum NPC-Menü hinzu
|
||||||
|
-- Diese Funktion wird aufgerufen, wenn der NPC-Target erstellt wird
|
||||||
|
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
|
||||||
|
exports['qb-target']:AddTargetEntity(npcHandle, {
|
||||||
|
options = {
|
||||||
|
{
|
||||||
|
type = "client",
|
||||||
|
event = "vehicleadmin:openMenu",
|
||||||
|
icon = "fas fa-car-mechanic",
|
||||||
|
label = "Fahrzeugverwaltung",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
distance = 2.5
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Registriere einen Event-Handler, der nach dem Hinzufügen der Standard-Target-Optionen ausgeführt wird
|
||||||
|
RegisterNetEvent('mh_garage:targetOptionsAdded')
|
||||||
|
AddEventHandler('mh_garage:targetOptionsAdded', function()
|
||||||
|
AddVehicleAdminOption()
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Füge einen Hook in die bestehende AddTargetOptions-Funktion ein
|
||||||
|
local originalAddTargetOptions = AddTargetOptions
|
||||||
|
AddTargetOptions = function()
|
||||||
|
originalAddTargetOptions()
|
||||||
|
TriggerEvent('mh_garage:targetOptionsAdded')
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Registriere den Befehl für das Fahrzeugadmin-System
|
||||||
|
RegisterCommand('vehicleadmin', function()
|
||||||
|
TriggerEvent('vehicleadmin:openMenu')
|
||||||
|
end, false)
|
||||||
|
|
||||||
|
-- Registriere die Tastenbelegung (optional)
|
||||||
|
RegisterKeyMapping('vehicleadmin', 'Öffne Fahrzeug Admin Menu', 'keyboard', '')
|
|
@ -7,11 +7,13 @@ lua54 'yes'
|
||||||
client_scripts {
|
client_scripts {
|
||||||
'@ox_lib/init.lua',
|
'@ox_lib/init.lua',
|
||||||
'config/*.lua',
|
'config/*.lua',
|
||||||
'client/*.lua'
|
'client/*.lua',
|
||||||
|
'client/vehicleadmin.lua'
|
||||||
}
|
}
|
||||||
|
|
||||||
server_scripts {
|
server_scripts {
|
||||||
'@oxmysql/lib/MySQL.lua',
|
'@oxmysql/lib/MySQL.lua',
|
||||||
'config/*.lua',
|
'config/*.lua',
|
||||||
'server/*.lua'
|
'server/*.lua',
|
||||||
|
'server/vehicleadmin.lua'
|
||||||
}
|
}
|
181
resources/[carscripts]/mh_garage/server/vehicleadmin.lua
Normal file
181
resources/[carscripts]/mh_garage/server/vehicleadmin.lua
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
-- vehicleadmin.lua - Füge diese Datei in deinen server-Ordner ein
|
||||||
|
|
||||||
|
-- Erweitere die Log-Funktion für das Fahrzeugadmin-System
|
||||||
|
RegisterServerEvent('vehicleadmin:log')
|
||||||
|
AddEventHandler('vehicleadmin:log', function(action, plate, garage)
|
||||||
|
local src = source
|
||||||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||||||
|
|
||||||
|
if not Player then return end
|
||||||
|
|
||||||
|
local playerName = Player.PlayerData.charinfo.firstname .. " " .. Player.PlayerData.charinfo.lastname
|
||||||
|
local citizenid = Player.PlayerData.citizenid
|
||||||
|
local jobName = Player.PlayerData.job.name
|
||||||
|
local jobLabel = Player.PlayerData.job.label
|
||||||
|
|
||||||
|
local logText = ""
|
||||||
|
local logColor = "blue"
|
||||||
|
|
||||||
|
if action == "move" then
|
||||||
|
logText = playerName .. " (" .. jobLabel .. ") hat Fahrzeug " .. plate .. " in Garage " .. garage .. " gestellt."
|
||||||
|
elseif action == "delete" then
|
||||||
|
logText = playerName .. " (" .. jobLabel .. ") hat Fahrzeug " .. plate .. " von der Map gelöscht."
|
||||||
|
logColor = "orange"
|
||||||
|
elseif action == "repair" then
|
||||||
|
logText = playerName .. " (" .. jobLabel .. ") hat Fahrzeug " .. plate .. " repariert."
|
||||||
|
logColor = "green"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Verwende die bestehende Log-Funktion
|
||||||
|
sendToDiscord("Fahrzeugadmin", logText, logColor)
|
||||||
|
|
||||||
|
-- Speichere den Log in der Datenbank (optional)
|
||||||
|
MySQL.Async.execute('INSERT INTO admin_logs (action, player_name, citizenid, job, target_plate, target_garage, timestamp) VALUES (?, ?, ?, ?, ?, ?, NOW())',
|
||||||
|
{action, playerName, citizenid, jobName, plate, garage or "none"})
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Füge zusätzliche Callback-Funktionen für erweiterte Features hinzu
|
||||||
|
QBCore.Functions.CreateCallback('vehicleadmin:getVehicleHistory', function(source, cb, plate)
|
||||||
|
local src = source
|
||||||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||||||
|
|
||||||
|
if not Player then
|
||||||
|
cb(false)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Prüfe, ob der Spieler die Berechtigung hat
|
||||||
|
local hasPermission = false
|
||||||
|
local playerJob = Player.PlayerData.job.name
|
||||||
|
|
||||||
|
if QBCore.Functions.HasPermission(src, 'admin') then
|
||||||
|
hasPermission = true
|
||||||
|
elseif playerJob == 'police' or playerJob == 'mechanic' then
|
||||||
|
hasPermission = true
|
||||||
|
end
|
||||||
|
|
||||||
|
if not hasPermission then
|
||||||
|
cb(false)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Hole den Fahrzeugverlauf aus der Datenbank
|
||||||
|
MySQL.Async.fetchAll('SELECT * FROM admin_logs WHERE target_plate = ? ORDER BY timestamp DESC LIMIT 20', {plate}, function(results)
|
||||||
|
if results and #results > 0 then
|
||||||
|
cb(results)
|
||||||
|
else
|
||||||
|
cb({})
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Füge einen Event-Handler für das Löschen von Fahrzeugen hinzu
|
||||||
|
RegisterServerEvent('vehicleadmin:deleteVehicle')
|
||||||
|
AddEventHandler('vehicleadmin:deleteVehicle', function(plate)
|
||||||
|
local src = source
|
||||||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||||||
|
|
||||||
|
if not Player then return end
|
||||||
|
|
||||||
|
-- Prüfe, ob der Spieler die Berechtigung hat
|
||||||
|
local hasPermission = false
|
||||||
|
local playerJob = Player.PlayerData.job.name
|
||||||
|
|
||||||
|
if QBCore.Functions.HasPermission(src, 'admin') then
|
||||||
|
hasPermission = true
|
||||||
|
elseif playerJob == 'police' or playerJob == 'mechanic' then
|
||||||
|
hasPermission = true
|
||||||
|
end
|
||||||
|
|
||||||
|
if not hasPermission then
|
||||||
|
TriggerClientEvent('ox_lib:notify', src, {
|
||||||
|
title = 'Keine Berechtigung',
|
||||||
|
description = 'Du hast keine Berechtigung für diese Aktion',
|
||||||
|
type = 'error'
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Lösche das Fahrzeug aus der Datenbank
|
||||||
|
MySQL.Async.execute('DELETE FROM player_vehicles WHERE plate = ?', {plate}, function(rowsChanged)
|
||||||
|
if rowsChanged > 0 then
|
||||||
|
-- Lösche auch alle zugehörigen Schlüssel
|
||||||
|
MySQL.Async.execute('DELETE FROM vehicle_keys WHERE plate = ?', {plate})
|
||||||
|
|
||||||
|
-- Lösche das Fahrzeug aus dem Parking-System
|
||||||
|
MySQL.Async.execute('DELETE FROM vehicle_parking WHERE plate = ?', {plate})
|
||||||
|
|
||||||
|
-- Log die Aktion
|
||||||
|
TriggerEvent('vehicleadmin:log', "delete_permanent", plate, nil)
|
||||||
|
|
||||||
|
TriggerClientEvent('ox_lib:notify', src, {
|
||||||
|
title = 'Fahrzeugverwaltung',
|
||||||
|
description = 'Fahrzeug wurde permanent gelöscht',
|
||||||
|
type = 'success'
|
||||||
|
})
|
||||||
|
else
|
||||||
|
TriggerClientEvent('ox_lib:notify', src, {
|
||||||
|
title = 'Fahrzeugverwaltung',
|
||||||
|
description = 'Fahrzeug nicht gefunden',
|
||||||
|
type = 'error'
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Füge einen Event-Handler für das Ändern des Fahrzeugbesitzers hinzu
|
||||||
|
RegisterServerEvent('vehicleadmin:changeOwner')
|
||||||
|
AddEventHandler('vehicleadmin:changeOwner', function(plate, newOwnerCID)
|
||||||
|
local src = source
|
||||||
|
local Player = QBCore.Functions.GetPlayer(src)
|
||||||
|
|
||||||
|
if not Player then return end
|
||||||
|
|
||||||
|
-- Prüfe, ob der Spieler die Berechtigung hat
|
||||||
|
if not QBCore.Functions.HasPermission(src, 'admin') then
|
||||||
|
TriggerClientEvent('ox_lib:notify', src, {
|
||||||
|
title = 'Keine Berechtigung',
|
||||||
|
description = 'Nur Admins können den Besitzer ändern',
|
||||||
|
type = 'error'
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Prüfe, ob der neue Besitzer existiert
|
||||||
|
MySQL.Async.fetchAll('SELECT * FROM players WHERE citizenid = ?', {newOwnerCID}, function(players)
|
||||||
|
if not players or #players == 0 then
|
||||||
|
TriggerClientEvent('ox_lib:notify', src, {
|
||||||
|
title = 'Fehler',
|
||||||
|
description = 'Spieler mit dieser Citizen ID nicht gefunden',
|
||||||
|
type = 'error'
|
||||||
|
})
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Ändere den Besitzer des Fahrzeugs
|
||||||
|
MySQL.Async.execute('UPDATE player_vehicles SET citizenid = ? WHERE plate = ?', {newOwnerCID, plate}, function(rowsChanged)
|
||||||
|
if rowsChanged > 0 then
|
||||||
|
-- Erstelle einen neuen Schlüssel für den neuen Besitzer
|
||||||
|
MySQL.Async.execute('INSERT INTO vehicle_keys (plate, owner, count) VALUES (?, ?, 1) ON DUPLICATE KEY UPDATE count = 1', {plate, newOwnerCID})
|
||||||
|
|
||||||
|
-- Log die Aktion
|
||||||
|
local newOwnerInfo = json.decode(players[1].charinfo)
|
||||||
|
local newOwnerName = newOwnerInfo.firstname .. " " .. newOwnerInfo.lastname
|
||||||
|
|
||||||
|
TriggerEvent('vehicleadmin:log', "change_owner", plate, newOwnerName)
|
||||||
|
|
||||||
|
TriggerClientEvent('ox_lib:notify', src, {
|
||||||
|
title = 'Fahrzeugverwaltung',
|
||||||
|
description = 'Fahrzeugbesitzer wurde geändert',
|
||||||
|
type = 'success'
|
||||||
|
})
|
||||||
|
else
|
||||||
|
TriggerClientEvent('ox_lib:notify', src, {
|
||||||
|
title = 'Fahrzeugverwaltung',
|
||||||
|
description = 'Fahrzeug nicht gefunden',
|
||||||
|
type = 'error'
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
end)
|
Loading…
Add table
Add a link
Reference in a new issue