diff --git a/resources/[carscripts]/nordi_rental/client.lua b/resources/[carscripts]/nordi_rental/client.lua index e9ba94b98..75df26af8 100644 --- a/resources/[carscripts]/nordi_rental/client.lua +++ b/resources/[carscripts]/nordi_rental/client.lua @@ -158,7 +158,7 @@ function spawnRentalVehicle(model, spawnPoint, plate) local rot = GetEntityRotation(vehicle) TriggerServerEvent('vehiclerental:server:updatePosition', plate, pos, rot) - print("Neues Mietfahrzeug erstellt: " .. plate) + print("[VehicleRental] Neues Mietfahrzeug erstellt: " .. plate) end -- Fahrzeug zurückgeben @@ -195,6 +195,32 @@ RegisterNetEvent('vehiclerental:client:returnVehicle', function(data) 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 function returnSpecificVehicle(plate, locationId) -- Finde die Location-Daten @@ -249,23 +275,15 @@ function returnSpecificVehicle(plate, locationId) -- Fahrzeug zurückgeben QBCore.Functions.TriggerCallback('vehiclerental:server:returnVehicle', function(success) if success then - -- Make sure the vehicle is properly deleted - if DoesEntityExist(vehicle) then - -- First try native deletion - SetEntityAsMissionEntity(vehicle, true, true) - DeleteEntity(vehicle) - 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 + -- Fahrzeug mit DV-ähnlicher Methode löschen + if DeleteRentalVehicle(vehicle) then + QBCore.Functions.Notify('Fahrzeug erfolgreich zurückgegeben!', 'success') + else + QBCore.Functions.Notify('Fahrzeug zurückgegeben, aber konnte nicht vollständig gelöscht werden.', 'warning') end - -- Remove from local tracking + -- Aus lokaler Tracking-Liste entfernen activeRentalVehicles[plate] = nil - QBCore.Functions.Notify('Fahrzeug erfolgreich zurückgegeben!', 'success') end end, plate) end @@ -276,7 +294,7 @@ AddEventHandler('vehiclerental:client:loadRentals', function(rentals) -- Lösche alle vorhandenen Mietfahrzeuge for plate, vehicle in pairs(activeRentalVehicles) do if DoesEntityExist(vehicle) then - DeleteVehicle(vehicle) + DeleteRentalVehicle(vehicle) end end @@ -323,7 +341,7 @@ AddEventHandler('vehiclerental:client:loadRentals', function(rentals) -- Speichere das Fahrzeug lokal activeRentalVehicles[plate] = vehicle - print("Mietfahrzeug geladen: " .. plate) + print("[VehicleRental] Mietfahrzeug geladen: " .. plate) end) end end @@ -336,31 +354,16 @@ AddEventHandler('vehiclerental:client:vehicleReturned', function(plate) -- Lösche das Fahrzeug, wenn es existiert if activeRentalVehicles[plate] then local vehicle = activeRentalVehicles[plate] - - 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 - + DeleteRentalVehicle(vehicle) activeRentalVehicles[plate] = nil + print("[VehicleRental] Mietfahrzeug gelöscht: " .. plate) end -- Suche nach dem Fahrzeug in der Welt anhand des Kennzeichens for veh in EnumerateVehicles() do local vehPlate = GetVehicleNumberPlateText(veh) if string.gsub(vehPlate, "%s+", "") == string.gsub(plate, "%s+", "") then - SetEntityAsMissionEntity(veh, true, true) - DeleteVehicle(veh) + DeleteRentalVehicle(veh) print("[VehicleRental] Zusätzliches Mietfahrzeug mit Kennzeichen gelöscht: " .. plate) break end @@ -442,12 +445,7 @@ Citizen.CreateThread(function() -- Wenn es nicht gemietet ist, aber ein RENT-Kennzeichen hat, lösche es if not isRented and #(playerPos - vehPos) > 100.0 then print("[VehicleRental] Lösche Ghost-Mietfahrzeug: " .. vehPlate) - SetEntityAsMissionEntity(veh, true, true) - DeleteVehicle(veh) - - if GetResourceState('AdvancedParking') == 'started' then - exports["AdvancedParking"]:DeleteVehicle(veh, false) - end + DeleteRentalVehicle(veh) end end end @@ -493,7 +491,7 @@ AddEventHandler('onResourceStop', function(resourceName) for plate, vehicle in pairs(activeRentalVehicles) do if DoesEntityExist(vehicle) then - DeleteVehicle(vehicle) + DeleteRentalVehicle(vehicle) end end end) diff --git a/resources/[carscripts]/nordi_rental/server.lua b/resources/[carscripts]/nordi_rental/server.lua index 0993884dd..779cc61c2 100644 --- a/resources/[carscripts]/nordi_rental/server.lua +++ b/resources/[carscripts]/nordi_rental/server.lua @@ -9,19 +9,21 @@ function AddRentalKey(citizenid, plate, model) 1 }, function(rowsChanged) 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 --- Entferne einen Schlüssel für ein Mietfahrzeug -function RemoveRentalKey(citizenid, plate) +-- Entferne einen Schlüssel für ein Mietfahrzeug (gleiche Struktur wie AddRentalKey) +function RemoveRentalKey(citizenid, plate, model) MySQL.Async.execute('DELETE FROM vehicle_keys WHERE owner = ? AND plate = ?', { citizenid, plate }, function(rowsChanged) 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 @@ -32,7 +34,7 @@ Citizen.CreateThread(function() MySQL.Async.fetchAll('SELECT * FROM vehicle_rentals WHERE returned = FALSE', {}, function(results) if results and #results > 0 then - print("Lade " .. #results .. " aktive Mietfahrzeuge...") + print("[VehicleRental] Lade " .. #results .. " aktive Mietfahrzeuge...") for _, rental in ipairs(results) do activeRentals[rental.vehicle_plate] = rental @@ -193,16 +195,8 @@ QBCore.Functions.CreateCallback('vehiclerental:server:returnVehicle', function(s -- Aus dem aktiven Cache entfernen activeRentals[plate] = nil - -- Entferne den Schlüssel für das Mietfahrzeug - RemoveRentalKey(Player.PlayerData.citizenid, plate) - - -- 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 + -- Entferne den Schlüssel für das Mietfahrzeug (mit gleicher Struktur wie beim Hinzufügen) + RemoveRentalKey(Player.PlayerData.citizenid, plate, rental.vehicle_model) -- Benachrichtige alle Clients, dass das Fahrzeug zurückgegeben wurde TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, plate) @@ -241,7 +235,7 @@ QBCore.Functions.CreateCallback('vehiclerental:server:getPlayerRentals', functio end end - cb(result) + cb(result) end) end) @@ -295,16 +289,10 @@ Citizen.CreateThread(function() }) -- 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 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 @@ -403,16 +391,11 @@ exports('DeleteAllPlayerRentals', function(citizenid) }) -- Entferne den Schlüssel - RemoveRentalKey(citizenid, rental.vehicle_plate) + RemoveRentalKey(citizenid, rental.vehicle_plate, rental.vehicle_model) -- Entferne aus dem Cache 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 TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, rental.vehicle_plate) end diff --git a/resources/[inventory]/tgiann-inventory/configs/configStashes.lua b/resources/[inventory]/tgiann-inventory/configs/configStashes.lua index c1160fcd2..5e9b7e978 100644 --- a/resources/[inventory]/tgiann-inventory/configs/configStashes.lua +++ b/resources/[inventory]/tgiann-inventory/configs/configStashes.lua @@ -163,10 +163,27 @@ config.stashes = { coords = vector3(1930.88, 3723.82, 32.57), textUiLabel = 'öffnen', 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', slots = 60, weight = 60000, }, + { + coords = vvector3(-201.71, -1601.38, 35.05), + textUiLabel = 'öffnen', + name = 'jmfridge', -- uniq name + label = 'Kühlschrank', + slots = 40, + weight = 40000, + }, ---- SHERIFF ---- {