diff --git a/resources/[carscripts]/nordi_rental/client.lua b/resources/[carscripts]/nordi_rental/client.lua index 499af83d0..f5e8246cd 100644 --- a/resources/[carscripts]/nordi_rental/client.lua +++ b/resources/[carscripts]/nordi_rental/client.lua @@ -129,8 +129,12 @@ function spawnRentalVehicle(model, spawnPoint, plate) TriggerEvent("vehiclekeys:client:SetOwner", plate) SetModelAsNoLongerNeeded(model) + + -- Registriere das Fahrzeug im Parking-System + TriggerEvent('vehiclerental:client:vehicleRented', vehicle, plate) end + -- Fahrzeug zurückgeben (KORRIGIERT - ohne im Auto zu sitzen) RegisterNetEvent('vehiclerental:client:returnVehicle', function(data) -- Hole alle aktiven Mietverhältnisse des Spielers @@ -255,3 +259,23 @@ AddEventHandler('onResourceStop', function(resourceName) end end end) +-- Integration mit mh_Parking +RegisterNetEvent('vehiclerental:client:vehicleRented') +AddEventHandler('vehiclerental:client:vehicleRented', function(vehicle, plate) + -- Warte kurz, bis das Fahrzeug vollständig gespawnt ist + Citizen.Wait(1000) + + -- Aktualisiere das Fahrzeug im Parking-System + if DoesEntityExist(vehicle) then + TriggerEvent("mh_Parking:updateVehicle", vehicle) + print("Mietfahrzeug im Parking-System registriert: " .. plate) + end +end) + +-- Wenn ein Mietfahrzeug zurückgegeben wird +RegisterNetEvent('vehiclerental:client:vehicleReturned') +AddEventHandler('vehiclerental:client:vehicleReturned', function(plate) + -- Entferne das Fahrzeug aus dem Parking-System + TriggerServerEvent("mh_Parking:deleteVehicle", plate, true) + print("Mietfahrzeug aus dem Parking-System entfernt: " .. plate) +end) diff --git a/resources/[carscripts]/nordi_rental/server.lua b/resources/[carscripts]/nordi_rental/server.lua index 9f1386159..89e0ac5ca 100644 --- a/resources/[carscripts]/nordi_rental/server.lua +++ b/resources/[carscripts]/nordi_rental/server.lua @@ -216,3 +216,83 @@ QBCore.Functions.CreateCallback('vehiclerental:server:getPlayerRentals', functio cb(result) end) end) +-- Funktion zum Entfernen von Mietfahrzeugen aus dem Parking-System +function RemoveRentalFromParking(plate) + -- Entferne das Fahrzeug aus dem mh_Parking System + TriggerEvent("mh_Parking:removeVehicle", plate) + + -- Lösche es auch aus der Datenbank des Parking-Systems + MySQL.Async.execute("DELETE FROM vehicle_parking WHERE plate = @plate", { + ["@plate"] = plate + }) +end + +-- Wenn ein Fahrzeug zurückgegeben wird, entferne es aus dem Parking-System +RegisterNetEvent('vehiclerental:server:vehicleReturned') +AddEventHandler('vehiclerental:server:vehicleReturned', function(plate) + RemoveRentalFromParking(plate) +end) + +-- Modifiziere die bestehende returnVehicle Callback-Funktion +local originalReturnCallback = QBCore.Functions.CreateCallback('vehiclerental:server:returnVehicle') +QBCore.Functions.CreateCallback('vehiclerental:server:returnVehicle', function(source, cb, plate) + -- Wenn das Fahrzeug erfolgreich zurückgegeben wurde + MySQL.Async.fetchAll('SELECT * FROM vehicle_rentals WHERE vehicle_plate = ? AND returned = FALSE', { + plate + }, function(result) + if result[1] then + -- Führe die normale Rückgabe durch + local Player = QBCore.Functions.GetPlayer(source) + local rental = result[1] + local currentTime = os.time() + local penalty = 0 + + -- Strafe berechnen wenn verspätet + if currentTime > rental.end_time then + local hoursLate = math.ceil((currentTime - rental.end_time) / 3600) + penalty = hoursLate * Config.PenaltyPerHour + end + + -- Strafe abziehen falls vorhanden + if penalty > 0 then + local penaltyPaid = false + if Config.UseOkokBanking then + local bankMoney = exports['okokBanking']:GetAccount(Player.PlayerData.citizenid) + if bankMoney and bankMoney >= penalty then + exports['okokBanking']:RemoveMoney(Player.PlayerData.citizenid, penalty) + penaltyPaid = true + end + else + if Player.Functions.RemoveMoney('cash', penalty) then + penaltyPaid = true + end + end + + if penaltyPaid then + TriggerClientEvent('QBCore:Notify', source, 'Verspätungsstrafe von $' .. penalty .. ' wurde abgezogen!', 'error') + else + TriggerClientEvent('QBCore:Notify', source, 'Nicht genug Geld für Verspätungsstrafe!', 'error') + return cb(false) + end + end + + -- Mietverhältnis als zurückgegeben markieren + MySQL.Async.execute('UPDATE vehicle_rentals SET returned = TRUE, penalty_paid = ? WHERE id = ?', { + penalty > 0, + rental.id + }) + + -- Entferne das Fahrzeug aus dem Parking-System + RemoveRentalFromParking(plate) + + -- Benachrichtige alle Clients + TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, plate) + + TriggerClientEvent('QBCore:Notify', source, 'Fahrzeug erfolgreich zurückgegeben!', 'success') + cb(true) + else + TriggerClientEvent('QBCore:Notify', source, 'Kein aktives Mietverhältnis für dieses Fahrzeug gefunden!', 'error') + cb(false) + end + end) +end)