local QBCore = exports['qb-core']:GetCoreObject() local aktiveMieten = {} RegisterServerEvent("kartverleih:startMiete", function(model, preisProTick, max, methode) local src = source local xPlayer = QBCore.Functions.GetPlayer(src) if not xPlayer then return end local konto = methode == "bank" and "bank" or "cash" if max < preisProTick then TriggerClientEvent('ox_lib:notify', src, { type = 'inform', description = 'Der Mindestpreis liegt bei: '..preisProTick..'$', position = 'top' }) return end if xPlayer.Functions.GetMoney(konto) < max then TriggerClientEvent('ox_lib:notify', src, { type = 'error', description = 'Nicht genug Geld auf deinem ' .. konto .. '-Konto.', position = 'top' }) return end xPlayer.Functions.RemoveMoney(konto, max) aktiveMieten[src] = { preis = preisProTick, geld = max, bezahlt = 0, methode = konto } TriggerClientEvent("kartverleih:spawnVeh", src, model) TriggerClientEvent('ox_lib:notify', src, { type = 'success', description = 'Miete gestartet. Kart wurde bereitgestellt.', position = 'top' }) end) RegisterServerEvent("kartverleih:stopMiete", function() local src = source local data = aktiveMieten[src] if not data then return end local rueckgabe = data.geld - data.bezahlt if rueckgabe > 0 then local xPlayer = QBCore.Functions.GetPlayer(src) if xPlayer then TriggerClientEvent("kartverleih:stopClientMiete", src) xPlayer.Functions.AddMoney(data.methode, rueckgabe, "Kart-Rückgabe") TriggerClientEvent('ox_lib:notify', src, { type = 'info', description = 'Du erhältst $' .. rueckgabe .. ' zurück.', position = 'top' }) end end aktiveMieten[src] = nil end) -- Alle 3 Minuten Preis abziehen CreateThread(function() while true do Wait(180000) for src, data in pairs(aktiveMieten) do local xPlayer = QBCore.Functions.GetPlayer(src) if xPlayer then data.bezahlt = data.bezahlt + data.preis if data.bezahlt >= data.geld then TriggerClientEvent('ox_lib:notify', src, { type = 'error', description = 'Dein Guthaben ist aufgebraucht. Kart wird eingezogen.', position = 'top' }) TriggerClientEvent("kartverleih:despawnVeh", src) aktiveMieten[src] = nil end else -- Spieler offline: bleibt bestehen für Logging end end end end) RegisterNetEvent("kartverleih:versucheRueckgabe", function() local src = source local data = aktiveMieten[src] if not data then return end local xPlayer = QBCore.Functions.GetPlayer(src) if not xPlayer then return end local rest = data.geld - data.bezahlt if rest > 0 then xPlayer.Functions.AddMoney(data.konto, rest, "Kart Rückgabe Erstattung") TriggerClientEvent('ox_lib:notify', src, { type = 'success', description = ("Du hast dein Kart zurückgegeben. Erstattung: $%d"):format(rest), position = 'top' }) else TriggerClientEvent('ox_lib:notify', src, { type = 'inform', description = "Dein Kart wurde ohne Rückerstattung zurückgegeben.", position = 'top' }) end -- Fahrzeug entfernen TriggerClientEvent("kartverleih:stopClientMiete", src) aktiveMieten[src] = nil end) -- MrNewbVehicleKeys Integration - Give keys RegisterNetEvent("kartverleih:giveVehicleKeys", function(netId, plate) local src = source -- Using netId method exports.MrNewbVehicleKeys:GiveKeys(src, netId) -- Alternative: Using plate method -- exports.MrNewbVehicleKeys:GiveKeysByPlate(src, plate) end) -- MrNewbVehicleKeys Integration - Remove keys RegisterNetEvent("kartverleih:removeVehicleKeys", function(plate) local src = source -- Using plate method to remove keys exports.MrNewbVehicleKeys:RemoveKeysByPlate(src, plate) end)