diff --git a/resources/[carscripts]/nordi_rental/client.lua b/resources/[carscripts]/nordi_rental/client.lua index 11a7de231..f441a0d97 100644 --- a/resources/[carscripts]/nordi_rental/client.lua +++ b/resources/[carscripts]/nordi_rental/client.lua @@ -406,3 +406,9 @@ AddEventHandler('onResourceStop', function(resourceName) end end end) + +-- Überprüfe Mietfahrzeug-Schlüssel beim Laden des Spielers +RegisterNetEvent('QBCore:Client:OnPlayerLoaded') +AddEventHandler('QBCore:Client:OnPlayerLoaded', function() + TriggerServerEvent('vehiclerental:server:checkRentalKeys') +end) diff --git a/resources/[carscripts]/nordi_rental/server.lua b/resources/[carscripts]/nordi_rental/server.lua index 5549dbea7..c4ef7025b 100644 --- a/resources/[carscripts]/nordi_rental/server.lua +++ b/resources/[carscripts]/nordi_rental/server.lua @@ -1,7 +1,31 @@ - local QBCore = exports['qb-core']:GetCoreObject() local activeRentals = {} +-- Füge einen Schlüssel für ein Mietfahrzeug hinzu +function AddRentalKey(citizenid, plate, model) + MySQL.Async.execute('INSERT INTO vehicle_keys (owner, plate, count) VALUES (?, ?, ?)', { + citizenid, + plate, + 1 + }, function(rowsChanged) + if rowsChanged > 0 then + print("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) + 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) + end + end) +end + -- Lade alle aktiven Mietfahrzeuge beim Serverstart Citizen.CreateThread(function() Wait(5000) -- Warte, bis die Datenbank bereit ist @@ -12,6 +36,17 @@ Citizen.CreateThread(function() for _, rental in ipairs(results) do activeRentals[rental.vehicle_plate] = rental + + -- Stelle sicher, dass für jedes Mietfahrzeug ein Schlüssel existiert + MySQL.Async.fetchAll('SELECT * FROM vehicle_keys WHERE owner = ? AND plate = ?', { + rental.citizenid, + rental.vehicle_plate + }, function(keyResults) + if not keyResults or #keyResults == 0 then + -- Füge einen Schlüssel hinzu, wenn keiner existiert + AddRentalKey(rental.citizenid, rental.vehicle_plate, rental.vehicle_model) + end + end) end -- Benachrichtige alle Clients, dass sie die Fahrzeuge spawnen sollen @@ -94,6 +129,9 @@ QBCore.Functions.CreateCallback('vehiclerental:server:rentVehicle', function(sou returned = false } + -- Füge einen Schlüssel für das Mietfahrzeug hinzu + AddRentalKey(Player.PlayerData.citizenid, data.plate, data.vehicleModel) + TriggerClientEvent('QBCore:Notify', source, 'Fahrzeug erfolgreich gemietet für $' .. totalCost, 'success') cb(true) end) @@ -155,6 +193,9 @@ 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) + -- Benachrichtige alle Clients, dass das Fahrzeug zurückgegeben wurde TriggerClientEvent('vehiclerental:client:vehicleReturned', -1, plate) @@ -245,6 +286,9 @@ Citizen.CreateThread(function() plate }) + -- Entferne den Schlüssel für das Mietfahrzeug + RemoveRentalKey(rental.citizenid, plate) + -- Füge es zur Liste der zu entfernenden Fahrzeuge hinzu table.insert(overdueVehicles, plate) end @@ -271,7 +315,60 @@ AddEventHandler('QBCore:Server:PlayerLoaded', function() Player.PlayerData.citizenid }, function(results) if results and #results > 0 then + -- Stelle sicher, dass für jedes Mietfahrzeug ein Schlüssel existiert + for _, rental in ipairs(results) do + -- Prüfe, ob bereits ein Schlüssel existiert + MySQL.Async.fetchAll('SELECT * FROM vehicle_keys WHERE owner = ? AND plate = ?', { + Player.PlayerData.citizenid, + rental.vehicle_plate + }, function(keyResults) + if not keyResults or #keyResults == 0 then + -- Füge einen Schlüssel hinzu, wenn keiner existiert + AddRentalKey(Player.PlayerData.citizenid, rental.vehicle_plate, rental.vehicle_model) + end + end) + end + TriggerClientEvent('vehiclerental:client:loadRentals', src, results) end end) end) + +-- Exportiere Funktionen für andere Ressourcen +exports('GetActiveRentals', function(citizenid) + local playerRentals = {} + for plate, rental in pairs(activeRentals) do + if rental.citizenid == citizenid then + table.insert(playerRentals, rental) + end + end + return playerRentals +end) + +-- Event für andere Ressourcen +RegisterNetEvent('vehiclerental:server:checkRentalKeys') +AddEventHandler('vehiclerental:server:checkRentalKeys', function() + local src = source + local Player = QBCore.Functions.GetPlayer(src) + if not Player then return end + + -- Hole alle aktiven Mietverhältnisse des Spielers + MySQL.Async.fetchAll('SELECT * FROM vehicle_rentals WHERE citizenid = ? AND returned = FALSE', { + Player.PlayerData.citizenid + }, function(rentals) + if rentals and #rentals > 0 then + for _, rental in ipairs(rentals) do + -- Prüfe, ob ein Schlüssel existiert + MySQL.Async.fetchAll('SELECT * FROM vehicle_keys WHERE owner = ? AND plate = ?', { + Player.PlayerData.citizenid, + rental.vehicle_plate + }, function(keyResults) + if not keyResults or #keyResults == 0 then + -- Füge einen Schlüssel hinzu, wenn keiner existiert + AddRentalKey(Player.PlayerData.citizenid, rental.vehicle_plate, rental.vehicle_model) + end + end) + end + end + end) +end) diff --git a/resources/[carscripts]/sn_vehicleKey/client.lua b/resources/[carscripts]/sn_vehicleKey/client.lua index 726dd09d1..917015bf8 100644 --- a/resources/[carscripts]/sn_vehicleKey/client.lua +++ b/resources/[carscripts]/sn_vehicleKey/client.lua @@ -821,4 +821,28 @@ RegisterCommand("vehicleLock", function() if (DoesEntityExist(vehicle) and IsVehicleOrKeyOwner(vehicle)) then ToggleLock(vehicle, GetVehicleDoorLockStatus(vehicle) ~= LockStatus.Locked) end -end, false) \ No newline at end of file +end, false) + +-- Integration mit dem Mietfahrzeug-System +RegisterNetEvent('vehiclerental:client:checkRentalKeys') +AddEventHandler('vehiclerental:client:checkRentalKeys', function() + TriggerServerEvent('vehiclerental:server:checkRentalKeys') +end) + +-- Überprüfe Mietfahrzeug-Schlüssel beim Öffnen des Schlüssel-Menüs +if Config.useNativeUI then + -- Speichere die ursprüngliche Funktion + local originalGenerateKeyInventoryNativeUI = GenerateKeyInventoryNativeUI + + -- Überschreibe die Funktion + GenerateKeyInventoryNativeUI = function() + -- Überprüfe Mietfahrzeug-Schlüssel + TriggerServerEvent('vehiclerental:server:checkRentalKeys') + + -- Warte kurz, damit die Schlüssel aktualisiert werden können + Citizen.Wait(100) + + -- Rufe die ursprüngliche Funktion auf + originalGenerateKeyInventoryNativeUI() + end +end