1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
Nordi98 2025-08-09 11:04:25 +02:00
parent cd17b66985
commit 2ecbbdc6c4
3 changed files with 69 additions and 71 deletions

View file

@ -158,7 +158,7 @@ function spawnRentalVehicle(model, spawnPoint, plate)
local rot = GetEntityRotation(vehicle) local rot = GetEntityRotation(vehicle)
TriggerServerEvent('vehiclerental:server:updatePosition', plate, pos, rot) TriggerServerEvent('vehiclerental:server:updatePosition', plate, pos, rot)
print("Neues Mietfahrzeug erstellt: " .. plate) print("[VehicleRental] Neues Mietfahrzeug erstellt: " .. plate)
end end
-- Fahrzeug zurückgeben -- Fahrzeug zurückgeben
@ -195,6 +195,32 @@ RegisterNetEvent('vehiclerental:client:returnVehicle', function(data)
end) end)
end) end)
-- Fahrzeug löschen (wie DV-Befehl)
function DeleteRentalVehicle(vehicle)
if DoesEntityExist(vehicle) then
-- Standard FiveM-Methode zum Löschen von Fahrzeugen (wie DV-Befehl)
SetEntityAsMissionEntity(vehicle, true, true)
DeleteEntity(vehicle)
if DoesEntityExist(vehicle) then
-- Zweiter Versuch mit DeleteVehicle
DeleteVehicle(vehicle)
end
-- Prüfe, ob das Fahrzeug wirklich gelöscht wurde
if not DoesEntityExist(vehicle) then
return true
else
-- Letzter Versuch mit NetworkFadeOutEntity
NetworkFadeOutEntity(vehicle, true, true)
Wait(500)
DeleteEntity(vehicle)
return not DoesEntityExist(vehicle)
end
end
return true -- Fahrzeug existiert nicht, also gilt es als gelöscht
end
-- Spezifisches Fahrzeug zurückgeben -- Spezifisches Fahrzeug zurückgeben
function returnSpecificVehicle(plate, locationId) function returnSpecificVehicle(plate, locationId)
-- Finde die Location-Daten -- Finde die Location-Daten
@ -249,23 +275,15 @@ function returnSpecificVehicle(plate, locationId)
-- Fahrzeug zurückgeben -- Fahrzeug zurückgeben
QBCore.Functions.TriggerCallback('vehiclerental:server:returnVehicle', function(success) QBCore.Functions.TriggerCallback('vehiclerental:server:returnVehicle', function(success)
if success then if success then
-- Make sure the vehicle is properly deleted -- Fahrzeug mit DV-ähnlicher Methode löschen
if DoesEntityExist(vehicle) then if DeleteRentalVehicle(vehicle) then
-- First try native deletion QBCore.Functions.Notify('Fahrzeug erfolgreich zurückgegeben!', 'success')
SetEntityAsMissionEntity(vehicle, true, true) else
DeleteEntity(vehicle) QBCore.Functions.Notify('Fahrzeug zurückgegeben, aber konnte nicht vollständig gelöscht werden.', 'warning')
DeleteVehicle(vehicle)
-- If AdvancedParking is available, also use its deletion method
if GetResourceState('AdvancedParking') == 'started' then
exports["AdvancedParking"]:DeleteVehicle(vehicle, false)
print("[VehicleRental] Using AdvancedParking to delete vehicle with plate: " .. plate)
end
end end
-- Remove from local tracking -- Aus lokaler Tracking-Liste entfernen
activeRentalVehicles[plate] = nil activeRentalVehicles[plate] = nil
QBCore.Functions.Notify('Fahrzeug erfolgreich zurückgegeben!', 'success')
end end
end, plate) end, plate)
end end
@ -276,7 +294,7 @@ AddEventHandler('vehiclerental:client:loadRentals', function(rentals)
-- Lösche alle vorhandenen Mietfahrzeuge -- Lösche alle vorhandenen Mietfahrzeuge
for plate, vehicle in pairs(activeRentalVehicles) do for plate, vehicle in pairs(activeRentalVehicles) do
if DoesEntityExist(vehicle) then if DoesEntityExist(vehicle) then
DeleteVehicle(vehicle) DeleteRentalVehicle(vehicle)
end end
end end
@ -323,7 +341,7 @@ AddEventHandler('vehiclerental:client:loadRentals', function(rentals)
-- Speichere das Fahrzeug lokal -- Speichere das Fahrzeug lokal
activeRentalVehicles[plate] = vehicle activeRentalVehicles[plate] = vehicle
print("Mietfahrzeug geladen: " .. plate) print("[VehicleRental] Mietfahrzeug geladen: " .. plate)
end) end)
end end
end end
@ -336,31 +354,16 @@ AddEventHandler('vehiclerental:client:vehicleReturned', function(plate)
-- Lösche das Fahrzeug, wenn es existiert -- Lösche das Fahrzeug, wenn es existiert
if activeRentalVehicles[plate] then if activeRentalVehicles[plate] then
local vehicle = activeRentalVehicles[plate] local vehicle = activeRentalVehicles[plate]
DeleteRentalVehicle(vehicle)
if DoesEntityExist(vehicle) then
-- Versuche verschiedene Methoden zum Löschen
SetEntityAsMissionEntity(vehicle, true, true)
DeleteVehicle(vehicle)
-- Wenn AdvancedParking verfügbar ist, nutze auch dessen Löschmethode
if GetResourceState('AdvancedParking') == 'started' then
exports["AdvancedParking"]:DeleteVehicle(vehicle, false)
end
print("[VehicleRental] Mietfahrzeug gelöscht: " .. plate)
else
print("[VehicleRental] Mietfahrzeug nicht gefunden für Löschung: " .. plate)
end
activeRentalVehicles[plate] = nil activeRentalVehicles[plate] = nil
print("[VehicleRental] Mietfahrzeug gelöscht: " .. plate)
end end
-- Suche nach dem Fahrzeug in der Welt anhand des Kennzeichens -- Suche nach dem Fahrzeug in der Welt anhand des Kennzeichens
for veh in EnumerateVehicles() do for veh in EnumerateVehicles() do
local vehPlate = GetVehicleNumberPlateText(veh) local vehPlate = GetVehicleNumberPlateText(veh)
if string.gsub(vehPlate, "%s+", "") == string.gsub(plate, "%s+", "") then if string.gsub(vehPlate, "%s+", "") == string.gsub(plate, "%s+", "") then
SetEntityAsMissionEntity(veh, true, true) DeleteRentalVehicle(veh)
DeleteVehicle(veh)
print("[VehicleRental] Zusätzliches Mietfahrzeug mit Kennzeichen gelöscht: " .. plate) print("[VehicleRental] Zusätzliches Mietfahrzeug mit Kennzeichen gelöscht: " .. plate)
break break
end end
@ -442,12 +445,7 @@ Citizen.CreateThread(function()
-- Wenn es nicht gemietet ist, aber ein RENT-Kennzeichen hat, lösche es -- Wenn es nicht gemietet ist, aber ein RENT-Kennzeichen hat, lösche es
if not isRented and #(playerPos - vehPos) > 100.0 then if not isRented and #(playerPos - vehPos) > 100.0 then
print("[VehicleRental] Lösche Ghost-Mietfahrzeug: " .. vehPlate) print("[VehicleRental] Lösche Ghost-Mietfahrzeug: " .. vehPlate)
SetEntityAsMissionEntity(veh, true, true) DeleteRentalVehicle(veh)
DeleteVehicle(veh)
if GetResourceState('AdvancedParking') == 'started' then
exports["AdvancedParking"]:DeleteVehicle(veh, false)
end
end end
end end
end end
@ -493,7 +491,7 @@ AddEventHandler('onResourceStop', function(resourceName)
for plate, vehicle in pairs(activeRentalVehicles) do for plate, vehicle in pairs(activeRentalVehicles) do
if DoesEntityExist(vehicle) then if DoesEntityExist(vehicle) then
DeleteVehicle(vehicle) DeleteRentalVehicle(vehicle)
end end
end end
end) end)

View file

@ -9,19 +9,21 @@ function AddRentalKey(citizenid, plate, model)
1 1
}, function(rowsChanged) }, function(rowsChanged)
if rowsChanged > 0 then if rowsChanged > 0 then
print("Schlüssel für Mietfahrzeug hinzugefügt: " .. plate .. " für Spieler " .. citizenid) print("[VehicleRental] Schlüssel für Mietfahrzeug hinzugefügt: " .. plate .. " für Spieler " .. citizenid)
end end
end) end)
end end
-- Entferne einen Schlüssel für ein Mietfahrzeug -- Entferne einen Schlüssel für ein Mietfahrzeug (gleiche Struktur wie AddRentalKey)
function RemoveRentalKey(citizenid, plate) function RemoveRentalKey(citizenid, plate, model)
MySQL.Async.execute('DELETE FROM vehicle_keys WHERE owner = ? AND plate = ?', { MySQL.Async.execute('DELETE FROM vehicle_keys WHERE owner = ? AND plate = ?', {
citizenid, citizenid,
plate plate
}, function(rowsChanged) }, function(rowsChanged)
if rowsChanged > 0 then if rowsChanged > 0 then
print("Schlüssel für Mietfahrzeug entfernt: " .. plate .. " für Spieler " .. citizenid) print("[VehicleRental] Schlüssel für Mietfahrzeug entfernt: " .. plate .. " für Spieler " .. citizenid)
else
print("[VehicleRental] Kein Schlüssel zum Entfernen gefunden: " .. plate .. " für Spieler " .. citizenid)
end end
end) end)
end end
@ -32,7 +34,7 @@ Citizen.CreateThread(function()
MySQL.Async.fetchAll('SELECT * FROM vehicle_rentals WHERE returned = FALSE', {}, function(results) MySQL.Async.fetchAll('SELECT * FROM vehicle_rentals WHERE returned = FALSE', {}, function(results)
if results and #results > 0 then if results and #results > 0 then
print("Lade " .. #results .. " aktive Mietfahrzeuge...") print("[VehicleRental] Lade " .. #results .. " aktive Mietfahrzeuge...")
for _, rental in ipairs(results) do for _, rental in ipairs(results) do
activeRentals[rental.vehicle_plate] = rental activeRentals[rental.vehicle_plate] = rental
@ -193,16 +195,8 @@ QBCore.Functions.CreateCallback('vehiclerental:server:returnVehicle', function(s
-- Aus dem aktiven Cache entfernen -- Aus dem aktiven Cache entfernen
activeRentals[plate] = nil activeRentals[plate] = nil
-- Entferne den Schlüssel für das Mietfahrzeug -- Entferne den Schlüssel für das Mietfahrzeug (mit gleicher Struktur wie beim Hinzufügen)
RemoveRentalKey(Player.PlayerData.citizenid, plate) RemoveRentalKey(Player.PlayerData.citizenid, plate, rental.vehicle_model)
-- Check if AdvancedParking is available and delete the vehicle from its system
local advancedParkingSuccess = false
if GetResourceState('AdvancedParking') == 'started' then
-- Try to delete using AdvancedParking exports
advancedParkingSuccess = exports["AdvancedParking"]:DeleteVehicleUsingData(nil, nil, plate, false)
print("[VehicleRental] AdvancedParking vehicle deletion: " .. (advancedParkingSuccess and "successful" or "failed") .. " for plate " .. plate)
end
-- Benachrichtige alle Clients, dass das Fahrzeug zurückgegeben wurde -- Benachrichtige alle Clients, dass das Fahrzeug zurückgegeben wurde
TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, plate) TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, plate)
@ -241,7 +235,7 @@ QBCore.Functions.CreateCallback('vehiclerental:server:getPlayerRentals', functio
end end
end end
cb(result) cb(result)
end) end)
end) end)
@ -295,16 +289,10 @@ Citizen.CreateThread(function()
}) })
-- Entferne den Schlüssel für das Mietfahrzeug -- Entferne den Schlüssel für das Mietfahrzeug
RemoveRentalKey(rental.citizenid, plate) RemoveRentalKey(rental.citizenid, plate, rental.vehicle_model)
-- Füge es zur Liste der zu entfernenden Fahrzeuge hinzu -- Füge es zur Liste der zu entfernenden Fahrzeuge hinzu
table.insert(overdueVehicles, plate) table.insert(overdueVehicles, plate)
-- Versuche, das Fahrzeug mit AdvancedParking zu löschen
if GetResourceState('AdvancedParking') == 'started' then
exports["AdvancedParking"]:DeleteVehicleUsingData(nil, nil, plate, false)
print("[VehicleRental] Auto-deleted overdue vehicle with AdvancedParking: " .. plate)
end
end end
end end
@ -403,16 +391,11 @@ exports('DeleteAllPlayerRentals', function(citizenid)
}) })
-- Entferne den Schlüssel -- Entferne den Schlüssel
RemoveRentalKey(citizenid, rental.vehicle_plate) RemoveRentalKey(citizenid, rental.vehicle_plate, rental.vehicle_model)
-- Entferne aus dem Cache -- Entferne aus dem Cache
activeRentals[rental.vehicle_plate] = nil activeRentals[rental.vehicle_plate] = nil
-- Versuche, das Fahrzeug mit AdvancedParking zu löschen
if GetResourceState('AdvancedParking') == 'started' then
exports["AdvancedParking"]:DeleteVehicleUsingData(nil, nil, rental.vehicle_plate, false)
end
-- Benachrichtige alle Clients -- Benachrichtige alle Clients
TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, rental.vehicle_plate) TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, rental.vehicle_plate)
end end

View file

@ -163,10 +163,27 @@ config.stashes = {
coords = vector3(1930.88, 3723.82, 32.57), coords = vector3(1930.88, 3723.82, 32.57),
textUiLabel = 'öffnen', textUiLabel = 'öffnen',
name = 'spahlager1', -- uniq name name = 'spahlager1', -- uniq name
label = 'Kühlschrank',
slots = 40,
weight = 40000,
},
---- JM Sinister ----
{
coords = vector3(-210.68, -1574.17, 35.05),
textUiLabel = 'öffnen',
name = 'jmlager1', -- uniq name
label = 'Lager', label = 'Lager',
slots = 60, slots = 60,
weight = 60000, weight = 60000,
}, },
{
coords = vvector3(-201.71, -1601.38, 35.05),
textUiLabel = 'öffnen',
name = 'jmfridge', -- uniq name
label = 'Kühlschrank',
slots = 40,
weight = 40000,
},
---- SHERIFF ---- ---- SHERIFF ----
{ {