This commit is contained in:
Nordi98 2025-06-09 13:28:55 +02:00
commit a6d4c6b688
6 changed files with 303 additions and 18 deletions

View file

@ -94,8 +94,51 @@ function AddTargetOptions(zone)
icon = "fas fa-car", icon = "fas fa-car",
label = "Fahrzeug ausparken", label = "Fahrzeug ausparken",
args = zone args = zone
} },
if Config.Verwaltung then
{
type = "client",
event = "mh_garage:verwaltungVeh",
icon = "",
label = "Fahrzeuge Verwalten",
}
end
}, },
distance = 2.5 distance = 2.5
}) })
end
function Notification(text, type, zone)
lib.notify({
title = "Garage - "..zone,
description = text,
type = type,
position = 'top',
})
end
---------------------------- NetEvents
RegisterNetEvent('mh_jobgarage:notify')
AddEventHandler('mh_jobgarage:notify', function(title, text, type)
Notification(text, type)
end)
function GetVehicleDamagePercentage(vehicle)
if not vehicle then return 0 end
-- Hole die verschiedenen Gesundheitswerte
local engineHealth = GetVehicleEngineHealth(vehicle)
local bodyHealth = GetVehicleBodyHealth(vehicle)
local tankHealth = GetVehiclePetrolTankHealth(vehicle)
-- Normalisiere die Werte (Standard-Maximalwerte: 1000.0)
local enginePercent = (engineHealth / 1000.0) * 100
local bodyPercent = (bodyHealth / 1000.0) * 100
local tankPercent = (tankHealth / 1000.0) * 100
-- Berechne Durchschnitt als Gesamtzustand
local totalHealth = (enginePercent + bodyPercent + tankPercent) / 3
-- Runde auf ganze Zahlen
return math.floor(totalHealth)
end end

View file

@ -1,3 +1,29 @@
RegisterNetEvent('mh_garage:retrieveVehicle') RegisterNetEvent('mh_garage:retrieveVehicle')
AddEventHandler('mh_garage:retrieveVehicle', function() AddEventHandler('mh_garage:retrieveVehicle', function(zone)
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
local random = SelectName()
local opt = {}
QBCore.Functions.TriggerCallback('mh_garage:CallVehicles', function(cb)
for i = 1, #cb, 1 do
table.insert(opt, {
title = cb[i].name
description = "Kennzeichen: "..cb[i].plate.."\nTankinhalt: "..cb[i].mods.fuelLevel.."%",
icon = "car",
onSelect = function()
SpawnThisVehicle(cb[i])
end
})
end
lib.registerContext({
id = "retrieveVehicle",
title = random.name,
options = opt
})
lib.showContext("retrieveVehicle")
end, zone.name)
end) end)

View file

@ -1,8 +1,7 @@
RegisterNetEvent('mh_garage:storeVehicle') RegisterNetEvent('mh_garage:storeVehicle')
AddEventHandler('mh_garage:storeVehicle', function(zone) AddEventHandler('mh_garage:storeVehicle', function(zone)
print("Trigger Stored Vehicle...") local ped = PlayerPedId()
print(json.encode(zone)) local coords = GetEntityCoords(ped)
local coords = GetEntityCoords(PlayerPedId())
local vehicles = GetGamePool('CVehicle') local vehicles = GetGamePool('CVehicle')
local random = SelectName() local random = SelectName()
@ -17,7 +16,8 @@ AddEventHandler('mh_garage:storeVehicle', function(zone)
description = GetRandomCarDescription(), description = GetRandomCarDescription(),
icon = "car", icon = "car",
onSelect = function() onSelect = function()
if zone.price ~= nil then print(zone.price)
if zone.price ~= false then
lib.hideContext("StoredVehicles") lib.hideContext("StoredVehicles")
lib.registerContext({ lib.registerContext({
@ -30,8 +30,18 @@ AddEventHandler('mh_garage:storeVehicle', function(zone)
title = "Akzeptieren", title = "Akzeptieren",
description = "Geld wird vom Bankkonto abgebucht!", description = "Geld wird vom Bankkonto abgebucht!",
onSelect = function() onSelect = function()
lib.hideContext("thisVehicle") lib.hideContext("thisVehicle")
StoredVehicle(vehicles[i], zone) QBCore.Functions.TriggerCallback('mh_garage:storedVehicle', function(cb)
if cb.status then
DeleteVehicle(vehicles[i])
Notification(cb.text, cb.type, zone.name)
else
if cb.police and Config.EnabledPolice then
exports["roadphone"]:sendDispatch("Hier hat grade jemand versucht, ein Fahrzeug einzuparken.\nDas Zündschloss sah Beschädigt aus.\nKennzeichen: "..veh.plate, 'police', nil)
end
Notification(cb.text, cb.type)
end
end, veh, zone)
end end
}, },
{ {
@ -61,10 +71,6 @@ AddEventHandler('mh_garage:storeVehicle', function(zone)
end end
end) end)
function StoredVehicle(veh, zone)
end
function SelectName() function SelectName()
local names = { local names = {
{name = "Garagen-Guru", {name = "Garagen-Guru",

View file

@ -0,0 +1,74 @@
RegisterNetEvent('mh_garage:verwaltungVeh')
AddEventHandler('mh_garage:verwaltungVeh', function()
QBCore.TriggerCallback('mh_garage:verwaltung', function(cb)
if cb[1] ~= nil then
local opt = {}
for i = 1, #cb, 1 do
local isingarage = cb[i].current_in_garage
local des = ""
if isingarage then
des = "Bearbeite das Fahrzeug\nKennzeichen: "..cb[i].current_plate.."\nGarage: "..cb[i].current_garage,
else
des = "Bearbeite das Fahrzeug\nKennzeichen: "..cb[i].current_plate.."\nLetzte bekannte Garage: "..cb[i].current_garage,
end
table.insert(opt, {
title = cb[i].current_name
description = des,
icon = "car",
onSelect = function()
OpenVerwaltung(cb[i])
end
})
end
else
lib.notify({
title = "Fahrzeug Verwaltung",
description = "Du bist nicht im Besitz eines Fahrzeuges!",
type = "inform"
})
end
end)
end)
function OpenVerwaltung(vehicleInfos)
local garages = {}
for k, v in pairs(Config.Zonen) do
table.insert(garages, v.name)
end
lib.registerMenu({
id = 'some_menu_id',
title = 'Menu title',
position = 'top-right',
onSideScroll = function(selected, scrollIndex, args)
print("Scroll: ", selected, scrollIndex, args)
end,
onSelected = function(selected, secondary, args)
if not secondary then
print("Normal button")
else
if args.isCheck then
print("Check button")
end
if args.isScroll then
print("Scroll button")
end
end
print(selected, secondary, json.encode(args, {indent=true}))
end,
options = {
{label = "Name ändern", icon = "paper", }
{label = 'Transport to:', icon = 'arrows-up-down-left-right', values=garages},
}
}, function(selected, scrollIndex, args)
print(selected, scrollIndex, args)
end)
RegisterCommand('testmenu', function()
lib.showMenu('some_menu_id')
end)
end

View file

@ -1,7 +1,25 @@
Config = {} Config = {}
Config.Debug = true Config.Debug = true
Config.PriceModel = false Config.PriceModel = false
Config.CallKeyVehicles = true
Config.Verwaltung = {
garage = true,
garage_change = 1000 -- Kosten um das Fahrzeug in einer anderen Garage zu versetzen.
garage_time = 10 -- Zeit in Minuten bis das Fahrzeug in der neuen Garage ist!
repair = false
repair_car = 600 -- Kosten wenn das Fahrzeug Repariert werden soll
repair_time = 10 --Zeit in Minuten bis das Fahrzeug Repariert ist!
tank = false
tank_car = 300 -- Kosten wenn das Fahrzeug getankt werden soll
tank_time = 3 -- Zeit in Minuten bis das Fahrzeug voll getankt ist
}
Config.Zonen = { Config.Zonen = {
{ {
name = "Meetingpoint", name = "Meetingpoint",
@ -23,12 +41,12 @@ Config.Zonen = {
Config.Log = { Config.Log = {
Webhook = "https://discord.com/api/webhooks/1366812966049288192/9ZjJC9_gLX6Fk-acf0YSW_haGWpCqG9zRGWaj0wCKLZefp8FX-GwNZBP77H6K93KfIw3", Webhook = "https://discord.com/api/webhooks/1366812966049288192/9ZjJC9_gLX6Fk-acf0YSW_haGWpCqG9zRGWaj0wCKLZefp8FX-GwNZBP77H6K93KfIw3",
Color = { Color = {
green = 56108, green = 56108,
grey = 8421504, grey = 8421504,
red = 16711680, red = 16711680,
orange = 16744192, orange = 16744192,
blue = 2061822, blue = 2061822,
purple = 11750815, purple = 11750815,
}, },
SystemName = "Evolution_State_life Log [Garage]", SystemName = "Evolution_State_life Log [Garage]",

View file

@ -0,0 +1,118 @@
QBCore = exports['qb-core']:GetCoreObject()
QBCore.Functions.CreateCallback('mh_garage:storedVehicle', function(source, cb, veh, zone)
local Player = QBCore.Functions.GetPlayer(source)
if Player ~= nil then
if Player.Functions.GetMoney('bank', zone.price) then
MySQL.query("SELECT * FROM player_vehicles WHERE citizenid = ? AND plate = ?", {Player.PlayerData.citizenid, veh.plate}, function(rs)
if rs[1] ~= nil then
MySQL.query("UPDATE player_vehicles SET garage = ? AND parking = ? WHERE plate = ?", {zone.name, true, veh.plate})
DelVehParking(veh.plate)
cb({
status = true,
text = "Fahrzeug erfolgreich eingeparkt!",
type = "success",
other = false,
police = false
})
else
MySQL.query("SELECT * FROM vehicle_keys WHERE owner = ? AND plate = ?", {Player.PlayerData.citizenid, veh.plate}, function(rs)
if rs[1] ~= nil then
MySQL.query("UPDATE player_vehicles SET garage = ? AND parking = ? WHERE plate = ?", {zone.name, true, veh.plate})
DelVehParking(veh.plate)
cb({
status = true,
text = "Fahrzeug erfolgreich eingeparkt!",
type = "success",
other = true,
police = false
})
else
cb({
status = false,
text = "Du besitzt kein Schlüssel für dieses Fahrzeug.",
type = "warning",
other = false,
police = true
})
end
end)
end
end)
end
end
end)
function DelVehParking(plate)
MySQL.query("SELECT * FROM vehicle_parking WHERE plate = ?", {plate}, function(rs)
if rs[1] ~= nil then
MySQL.query("DELETE FROM vehicle_parking WHERE plate = ?", {plate})
end
end)
end
QBCore.Functions.CreateCallback('mh_garage:CallVehicles', function(source, cb, zone)
local _source = source
local Player = QBCore.Functions.GetPlayer(_source)
local vehicles = {}
local vehicle_keys = {}
if Config.CallKeyVehicles then
MySQL.query("SELECT plate FROM vehicle_keys WHERE owner = ?", {Player.PlayerData.citizenid}, function(rs)
if rs[1] ~= nil then
for k, v in pairs(rs) do
table.insert(vehicle_keys, {v})
end
end
end)
Wait(100)
if vehicle_keys[1] ~= nil then
for k, v in pairs(vehicle_keys) do
MySQL.query("SELECT vehicle, plate, mods, name FROM player_vehicles WHERE plate = ?", {v}, function(rs)
table.insert(vehicles, {
vehicle = rs[1].vehicle,
mods = rs[1].mods,
plate = rs[1].plate,
name = rs[1].name
})
end)
end
end
end
MySQL.query("SELECT vehicle, plate, mods FROM player_vehicles WHERE citizenid = ? AND garage = ?", {Player.PlayerData.citizenid, zone}, function(rs)
if rs[1] ~= nil then
for k, v in pairs(rs) do
table.insert(vehicles, {
vehicle = v.vehicle,
mods = v.mods,
plate = v.plate,
name = v.name
})
end
end
end)
Wait(100)
cb(vehicles)
end)
QBCore.Functions.CreateCallback('mh_garage:verwaltung', function(source, cb)
local Player = QBCore.Functions.GetPlayer(source)
local vehicles = {}
MySQL.query("SELECT * FROM player_vehicles WHERE citizenid = ?", {Player.PlayerData.citizenid}, function(rs)
if rs[1] ~= nil then
for k, v in pairs(rs) do
table.insert(vehicles, {
current_garage = v.garage,
current_in_garage = v.parking,
current_name = v.name,
current_plate = v.plate,
})
end
end
end)
return vehicles
end)