forked from Simnation/Main
ed
This commit is contained in:
parent
a3cb0050da
commit
a74a0dda77
3 changed files with 475 additions and 68 deletions
|
@ -1,15 +1,33 @@
|
|||
local QBCore = exports['qb-core']:GetCoreObject()
|
||||
|
||||
-- Admin Permission Check
|
||||
local function IsAdmin(source)
|
||||
-- Erlaubte Jobs für das Vehicle Admin System
|
||||
local AllowedJobs = {
|
||||
['police'] = true,
|
||||
['admin'] = true,
|
||||
['mechanic'] = true,
|
||||
['ambulance'] = true,
|
||||
['cardealer'] = true,
|
||||
-- Füge hier weitere Jobs hinzu
|
||||
}
|
||||
|
||||
-- Job Permission Check
|
||||
local function HasPermission(source)
|
||||
local Player = QBCore.Functions.GetPlayer(source)
|
||||
if not Player then return false end
|
||||
return QBCore.Functions.HasPermission(source, 'admin') or Player.PlayerData.job.name == 'admin'
|
||||
|
||||
-- Check if player has admin permission
|
||||
if QBCore.Functions.HasPermission(source, 'admin') then
|
||||
return true
|
||||
end
|
||||
|
||||
-- Check if player has allowed job
|
||||
local playerJob = Player.PlayerData.job.name
|
||||
return AllowedJobs[playerJob] == true
|
||||
end
|
||||
|
||||
-- Get all players from database
|
||||
QBCore.Functions.CreateCallback('vehicleadmin:getPlayers', function(source, cb)
|
||||
if not IsAdmin(source) then
|
||||
if not HasPermission(source) then
|
||||
cb(false)
|
||||
return
|
||||
end
|
||||
|
@ -29,7 +47,7 @@ end)
|
|||
|
||||
-- Get vehicles for specific player
|
||||
QBCore.Functions.CreateCallback('vehicleadmin:getPlayerVehicles', function(source, cb, citizenid)
|
||||
if not IsAdmin(source) then
|
||||
if not HasPermission(source) then
|
||||
cb(false)
|
||||
return
|
||||
end
|
||||
|
@ -38,7 +56,6 @@ QBCore.Functions.CreateCallback('vehicleadmin:getPlayerVehicles', function(sourc
|
|||
local vehicles = {}
|
||||
for i = 1, #result do
|
||||
local vehicle = result[i]
|
||||
local vehicleData = json.decode(vehicle.mods)
|
||||
|
||||
table.insert(vehicles, {
|
||||
plate = vehicle.plate,
|
||||
|
@ -59,7 +76,7 @@ end)
|
|||
|
||||
-- Get all garages
|
||||
QBCore.Functions.CreateCallback('vehicleadmin:getGarages', function(source, cb)
|
||||
if not IsAdmin(source) then
|
||||
if not HasPermission(source) then
|
||||
cb(false)
|
||||
return
|
||||
end
|
||||
|
@ -74,10 +91,36 @@ QBCore.Functions.CreateCallback('vehicleadmin:getGarages', function(source, cb)
|
|||
cb(garages)
|
||||
end)
|
||||
|
||||
-- Check player's job and return permissions
|
||||
QBCore.Functions.CreateCallback('vehicleadmin:getPlayerJob', function(source, cb)
|
||||
local Player = QBCore.Functions.GetPlayer(source)
|
||||
if not Player then
|
||||
cb(false)
|
||||
return
|
||||
end
|
||||
|
||||
local hasPermission = HasPermission(source)
|
||||
local jobName = Player.PlayerData.job.name
|
||||
local jobLabel = Player.PlayerData.job.label
|
||||
|
||||
cb({
|
||||
hasPermission = hasPermission,
|
||||
jobName = jobName,
|
||||
jobLabel = jobLabel
|
||||
})
|
||||
end)
|
||||
|
||||
-- Move vehicle to garage
|
||||
RegisterNetEvent('vehicleadmin:moveToGarage', function(plate, garage)
|
||||
local src = source
|
||||
if not IsAdmin(src) then return end
|
||||
if not HasPermission(src) then
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Keine Berechtigung',
|
||||
description = 'Du hast keine Berechtigung für diese Aktion',
|
||||
type = 'error'
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
-- Delete vehicle from world if it exists
|
||||
local vehicles = GetAllVehicles()
|
||||
|
@ -93,6 +136,15 @@ RegisterNetEvent('vehicleadmin:moveToGarage', function(plate, garage)
|
|||
-- Update database
|
||||
MySQL.Async.execute('UPDATE player_vehicles SET state = ?, garage = ? WHERE plate = ?', {1, garage, plate}, function(affectedRows)
|
||||
if affectedRows > 0 then
|
||||
-- Log the action
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
print(string.format('[VEHICLE ADMIN] %s (%s) moved vehicle %s to garage %s',
|
||||
Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname,
|
||||
Player.PlayerData.job.label,
|
||||
plate,
|
||||
garage
|
||||
))
|
||||
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Fahrzeugverwaltung',
|
||||
description = 'Fahrzeug wurde in Garage ' .. garage .. ' gestellt',
|
||||
|
@ -111,7 +163,14 @@ end)
|
|||
-- Delete vehicle from map
|
||||
RegisterNetEvent('vehicleadmin:deleteFromMap', function(plate)
|
||||
local src = source
|
||||
if not IsAdmin(src) then return end
|
||||
if not HasPermission(src) then
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Keine Berechtigung',
|
||||
description = 'Du hast keine Berechtigung für diese Aktion',
|
||||
type = 'error'
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
local vehicles = GetAllVehicles()
|
||||
local deleted = false
|
||||
|
@ -126,6 +185,14 @@ RegisterNetEvent('vehicleadmin:deleteFromMap', function(plate)
|
|||
end
|
||||
end
|
||||
|
||||
-- Log the action
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
print(string.format('[VEHICLE ADMIN] %s (%s) deleted vehicle %s from map',
|
||||
Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname,
|
||||
Player.PlayerData.job.label,
|
||||
plate
|
||||
))
|
||||
|
||||
if deleted then
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Fahrzeugverwaltung',
|
||||
|
@ -136,7 +203,7 @@ RegisterNetEvent('vehicleadmin:deleteFromMap', function(plate)
|
|||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Fahrzeugverwaltung',
|
||||
description = 'Fahrzeug nicht auf der Map gefunden',
|
||||
type = 'error'
|
||||
type = 'info'
|
||||
})
|
||||
end
|
||||
end)
|
||||
|
@ -144,7 +211,14 @@ end)
|
|||
-- Repair vehicle
|
||||
RegisterNetEvent('vehicleadmin:repairVehicle', function(plate)
|
||||
local src = source
|
||||
if not IsAdmin(src) then return end
|
||||
if not HasPermission(src) then
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Keine Berechtigung',
|
||||
description = 'Du hast keine Berechtigung für diese Aktion',
|
||||
type = 'error'
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
-- Update database
|
||||
MySQL.Async.execute('UPDATE player_vehicles SET engine = ?, body = ? WHERE plate = ?', {1000, 1000, plate}, function(affectedRows)
|
||||
|
@ -162,6 +236,14 @@ RegisterNetEvent('vehicleadmin:repairVehicle', function(plate)
|
|||
end
|
||||
end
|
||||
|
||||
-- Log the action
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
print(string.format('[VEHICLE ADMIN] %s (%s) repaired vehicle %s',
|
||||
Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname,
|
||||
Player.PlayerData.job.label,
|
||||
plate
|
||||
))
|
||||
|
||||
if affectedRows > 0 then
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Fahrzeugverwaltung',
|
||||
|
@ -178,17 +260,177 @@ RegisterNetEvent('vehicleadmin:repairVehicle', function(plate)
|
|||
end)
|
||||
end)
|
||||
|
||||
-- Impound vehicle (Police only)
|
||||
RegisterNetEvent('vehicleadmin:impoundVehicle', function(plate)
|
||||
local src = source
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
|
||||
if not Player or Player.PlayerData.job.name ~= 'police' then
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Keine Berechtigung',
|
||||
description = 'Nur Polizisten können Fahrzeuge beschlagnahmen',
|
||||
type = 'error'
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
-- Delete vehicle from world if it exists
|
||||
local vehicles = GetAllVehicles()
|
||||
for i = 1, #vehicles do
|
||||
local veh = vehicles[i]
|
||||
local vehPlate = GetVehicleNumberPlateText(veh):gsub("%s+", "")
|
||||
if vehPlate == plate:gsub("%s+", "") then
|
||||
DeleteEntity(veh)
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- Set state to impounded (2) and move to impound garage
|
||||
MySQL.Async.execute('UPDATE player_vehicles SET state = ?, garage = ?, depotprice = ? WHERE plate = ?',
|
||||
{2, 'impound', 500, plate}, function(affectedRows)
|
||||
if affectedRows > 0 then
|
||||
print(string.format('[VEHICLE ADMIN] %s (Police) impounded vehicle %s',
|
||||
Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname,
|
||||
plate
|
||||
))
|
||||
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Fahrzeugverwaltung',
|
||||
description = 'Fahrzeug wurde beschlagnahmt (500€ Gebühr)',
|
||||
type = 'success'
|
||||
})
|
||||
else
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Fahrzeugverwaltung',
|
||||
description = 'Fehler beim Beschlagnahmen des Fahrzeugs',
|
||||
type = 'error'
|
||||
})
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
-- Release from impound (Police/Admin only)
|
||||
RegisterNetEvent('vehicleadmin:releaseFromImpound', function(plate, garage)
|
||||
local src = source
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
|
||||
if not Player or (Player.PlayerData.job.name ~= 'police' and not QBCore.Functions.HasPermission(src, 'admin')) then
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Keine Berechtigung',
|
||||
description = 'Nur Polizisten oder Admins können Fahrzeuge freigeben',
|
||||
type = 'error'
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
-- Set state to in garage (1) and move to specified garage
|
||||
MySQL.Async.execute('UPDATE player_vehicles SET state = ?, garage = ?, depotprice = ? WHERE plate = ?',
|
||||
{1, garage, 0, plate}, function(affectedRows)
|
||||
if affectedRows > 0 then
|
||||
print(string.format('[VEHICLE ADMIN] %s (%s) released vehicle %s from impound to garage %s',
|
||||
Player.PlayerData.charinfo.firstname .. ' ' .. Player.PlayerData.charinfo.lastname,
|
||||
Player.PlayerData.job.label,
|
||||
plate,
|
||||
garage
|
||||
))
|
||||
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Fahrzeugverwaltung',
|
||||
description = 'Fahrzeug wurde aus der Beschlagnahme freigegeben',
|
||||
type = 'success'
|
||||
})
|
||||
else
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Fahrzeugverwaltung',
|
||||
description = 'Fehler beim Freigeben des Fahrzeugs',
|
||||
type = 'error'
|
||||
})
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
-- Command to open admin menu
|
||||
QBCore.Commands.Add('vehicleadmin', 'Öffne Fahrzeug Admin Menu', {}, false, function(source, args)
|
||||
local src = source
|
||||
if not IsAdmin(src) then
|
||||
if not HasPermission(src) then
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
local jobName = Player and Player.PlayerData.job.name or 'Unbekannt'
|
||||
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Keine Berechtigung',
|
||||
description = 'Du hast keine Admin-Rechte',
|
||||
description = 'Dein Job (' .. jobName .. ') hat keine Berechtigung für dieses System',
|
||||
type = 'error'
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
TriggerClientEvent('vehicleadmin:openMenu', src)
|
||||
end, 'admin')
|
||||
end)
|
||||
|
||||
-- Alternative command for police
|
||||
QBCore.Commands.Add('policegarage', 'Öffne Polizei Fahrzeug Menu', {}, false, function(source, args)
|
||||
local src = source
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
|
||||
if not Player or Player.PlayerData.job.name ~= 'police' then
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Keine Berechtigung',
|
||||
description = 'Nur Polizisten können diesen Befehl verwenden',
|
||||
type = 'error'
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
TriggerClientEvent('vehicleadmin:openMenu', src)
|
||||
end)
|
||||
|
||||
-- Alternative command for mechanics
|
||||
QBCore.Commands.Add('mechanicadmin', 'Öffne Mechaniker Fahrzeug Menu', {}, false, function(source, args)
|
||||
local src = source
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
|
||||
if not Player or Player.PlayerData.job.name ~= 'mechanic' then
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Keine Berechtigung',
|
||||
description = 'Nur Mechaniker können diesen Befehl verwenden',
|
||||
type = 'error'
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
TriggerClientEvent('vehicleadmin:openMenu', src)
|
||||
end)
|
||||
|
||||
-- Alternative command for ambulance
|
||||
QBCore.Commands.Add('emsadmin', 'Öffne EMS Fahrzeug Menu', {}, false, function(source, args)
|
||||
local src = source
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
|
||||
if not Player or Player.PlayerData.job.name ~= 'ambulance' then
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Keine Berechtigung',
|
||||
description = 'Nur EMS können diesen Befehl verwenden',
|
||||
type = 'error'
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
TriggerClientEvent('vehicleadmin:openMenu', src)
|
||||
end)
|
||||
|
||||
-- Alternative command for cardealer
|
||||
QBCore.Commands.Add('dealeradmin', 'Öffne Autohändler Fahrzeug Menu', {}, false, function(source, args)
|
||||
local src = source
|
||||
local Player = QBCore.Functions.GetPlayer(src)
|
||||
|
||||
if not Player or Player.PlayerData.job.name ~= 'cardealer' then
|
||||
TriggerClientEvent('ox_lib:notify', src, {
|
||||
title = 'Keine Berechtigung',
|
||||
description = 'Nur Autohändler können diesen Befehl verwenden',
|
||||
type = 'error'
|
||||
})
|
||||
return
|
||||
end
|
||||
|
||||
TriggerClientEvent('vehicleadmin:openMenu', src)
|
||||
end)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue