2025-06-08 16:20:16 +02:00
|
|
|
|
RegisterNetEvent('mh_garage:storeVehicle')
|
2025-06-09 18:14:06 +02:00
|
|
|
|
AddEventHandler('mh_garage:storeVehicle', function()
|
2025-06-09 13:28:19 +02:00
|
|
|
|
local ped = PlayerPedId()
|
|
|
|
|
local coords = GetEntityCoords(ped)
|
2025-06-08 16:20:16 +02:00
|
|
|
|
local vehicles = GetGamePool('CVehicle')
|
2025-06-08 18:14:48 +02:00
|
|
|
|
local random = SelectName()
|
2025-06-08 16:20:16 +02:00
|
|
|
|
|
|
|
|
|
local opt = {}
|
|
|
|
|
for i = 1, #vehicles, 1 do
|
2025-06-08 18:08:49 +02:00
|
|
|
|
local veh_coords = GetEntityCoords(vehicles[i])
|
2025-06-08 16:20:16 +02:00
|
|
|
|
local distance = #(veh_coords - coords)
|
|
|
|
|
if distance < 40.0 then
|
|
|
|
|
local mods = QBCore.Functions.GetVehicleProperties(vehicles[i])
|
|
|
|
|
table.insert(opt, {
|
|
|
|
|
title = "Kennzeichen: "..mods.plate,
|
2025-06-08 18:34:28 +02:00
|
|
|
|
description = GetRandomCarDescription(),
|
2025-06-08 16:20:16 +02:00
|
|
|
|
icon = "car",
|
|
|
|
|
onSelect = function()
|
2025-06-09 18:14:06 +02:00
|
|
|
|
print(CurrentZone.price)
|
|
|
|
|
if CurrentZone.price ~= false then
|
2025-06-08 19:18:00 +02:00
|
|
|
|
lib.hideContext("StoredVehicles")
|
|
|
|
|
|
2025-06-08 19:19:24 +02:00
|
|
|
|
lib.registerContext({
|
2025-06-08 19:18:00 +02:00
|
|
|
|
id = "thisVehicle",
|
|
|
|
|
title = random.name,
|
|
|
|
|
options = {
|
2025-06-09 18:14:06 +02:00
|
|
|
|
{title = "Kosten: "..CurrentZone.price},
|
2025-06-08 19:18:00 +02:00
|
|
|
|
{title = ""},
|
|
|
|
|
{
|
|
|
|
|
title = "Akzeptieren",
|
|
|
|
|
description = "Geld wird vom Bankkonto abgebucht!",
|
|
|
|
|
onSelect = function()
|
2025-06-09 13:28:19 +02:00
|
|
|
|
lib.hideContext("thisVehicle")
|
|
|
|
|
QBCore.Functions.TriggerCallback('mh_garage:storedVehicle', function(cb)
|
|
|
|
|
if cb.status then
|
|
|
|
|
DeleteVehicle(vehicles[i])
|
2025-06-09 18:14:06 +02:00
|
|
|
|
Notification(cb.text, cb.type, CurrentZone.name)
|
2025-06-09 13:28:19 +02:00
|
|
|
|
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
|
2025-06-09 18:14:06 +02:00
|
|
|
|
end, veh, CurrentZone)
|
2025-06-08 19:18:00 +02:00
|
|
|
|
end
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
title = "Abbrechen",
|
|
|
|
|
description = "Das ist sehr Schade,",
|
|
|
|
|
icon = "close",
|
|
|
|
|
onSelect = function()
|
|
|
|
|
lib.hideContext("thisVehicle")
|
|
|
|
|
end
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-06-08 16:20:16 +02:00
|
|
|
|
})
|
2025-06-08 19:18:00 +02:00
|
|
|
|
|
|
|
|
|
lib.showContext("thisVehicle")
|
2025-06-08 19:23:48 +02:00
|
|
|
|
else
|
2025-06-09 18:14:06 +02:00
|
|
|
|
StoredVehicle(vehicles[i], CurrentZone)
|
2025-06-08 16:20:16 +02:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
})
|
2025-06-08 17:50:41 +02:00
|
|
|
|
lib.registerContext({
|
|
|
|
|
id = "StoredVehicles",
|
2025-06-08 18:26:26 +02:00
|
|
|
|
title = random.name.."\n\n"..random.description,
|
2025-06-08 17:58:14 +02:00
|
|
|
|
options = opt
|
2025-06-08 17:50:41 +02:00
|
|
|
|
})
|
2025-06-08 17:56:10 +02:00
|
|
|
|
lib.showContext("StoredVehicles")
|
2025-06-08 16:20:16 +02:00
|
|
|
|
end
|
|
|
|
|
end
|
2025-06-08 17:50:41 +02:00
|
|
|
|
end)
|
|
|
|
|
|
|
|
|
|
function SelectName()
|
|
|
|
|
local names = {
|
2025-06-08 18:14:48 +02:00
|
|
|
|
{name = "Garagen-Guru",
|
|
|
|
|
description = "passt auf, dass keiner falsch parkt, Schranken nicht durchdrehen und Autos nicht fliegen!"},
|
|
|
|
|
{name = "Torflüsterer",
|
|
|
|
|
description = "Redet Schranken gut zu wenn diese wieder nicht funktionieren."},
|
|
|
|
|
{name = "Parkplatz-Papst",
|
|
|
|
|
description = "segnet jedes Auto, das diese heilige Halle betritt. Kein Ölverlust ohne dein Amen!"},
|
|
|
|
|
{name = "Schranken-Schamane",
|
|
|
|
|
description = "Elektronik und Technik? Kein Problem! Ich kontrolliere den Strom der Schranken mit reiner Willenskraft und Kabelbinder!"},
|
|
|
|
|
{name = "Chef vom Schuppen",
|
|
|
|
|
description = "Wer falsch parkt, kriegt nicht den Abschleppdienst, sondern eine Ansprache. Kurz. Hart. Legendär!"}
|
2025-06-08 17:50:41 +02:00
|
|
|
|
}
|
|
|
|
|
|
2025-06-08 18:14:48 +02:00
|
|
|
|
return names[math.random(1, #names)]
|
2025-06-08 18:34:28 +02:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function GetRandomCarDescription()
|
|
|
|
|
local descriptions = {
|
|
|
|
|
"Das Auto für alle, die beim Beschleunigen mehr Spaß haben als beim Ankommen.",
|
|
|
|
|
"Wenn du ein Auto suchst, das schneller fährt als dein WiFi, bist du hier richtig.",
|
|
|
|
|
"Nicht das schnellste Auto, aber hey, es hat vier Räder und eine Hupe!",
|
|
|
|
|
"Das einzig wahre Fahren – keine GPS-Fehler, nur pure Straßenmagie.",
|
|
|
|
|
"Mit diesem Auto wirst du die Straße genauso lieben wie das Benzin in deinem Tank.",
|
|
|
|
|
"Fahr‘ einfach, und schau, wie viele Leute sich fragen, ob du gerade von der Rennstrecke kommst.",
|
|
|
|
|
"Dieses Auto bringt mehr Nervenkitzel als ein Achterbahn-Abenteuer!",
|
|
|
|
|
"Dieses Fahrzeug hat mehr Charakter als deine letzte Beziehung.",
|
|
|
|
|
"Es ist nicht das teuerste Auto, aber es fährt immer noch besser als deine Laune nach dem Montagmorgen!",
|
|
|
|
|
"Mit diesem Wagen wirst du zur Legende – oder zumindest zum König des Parkhauses.",
|
|
|
|
|
"Schneller als dein Chef’s Auto, langsamer als dein Instagram-Feed.",
|
|
|
|
|
"Wenn der Sound des Motors dich mehr motiviert als dein Wecker am Morgen!",
|
|
|
|
|
"Sicheres Fahren ist wichtig. Aber Spaß haben – das ist die wahre Kunst!",
|
|
|
|
|
"Nicht der neueste Sportwagen, aber dafür ein echter Klassiker auf der Straße.",
|
|
|
|
|
"Weniger PS als dein Laptop, aber hey, er fährt!"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
-- Zufällige Beschreibung auswählen
|
|
|
|
|
local randomIndex = math.random(1, #descriptions)
|
|
|
|
|
|
|
|
|
|
-- Beschreibung zurückgeben
|
|
|
|
|
return descriptions[randomIndex]
|
2025-06-08 17:50:41 +02:00
|
|
|
|
end
|