local QBCore = exports['qb-core']:GetCoreObject() local rentals = {} -- NPC ID'ye göre kiralama durumu -- NPC oluşturma CreateThread(function() for npcId, npcData in pairs(Config.NPCs) do local model = `a_m_y_business_01` RequestModel(model) while not HasModelLoaded(model) do Wait(10) end local npc = CreatePed(4, model, npcData.coords.x, npcData.coords.y, npcData.coords.z - 1.0, npcData.coords.w, false, true) FreezeEntityPosition(npc, true) SetEntityInvincible(npc, true) SetBlockingOfNonTemporaryEvents(npc, true) -- NPC’ye hedef ekle exports['qb-target']:AddTargetEntity(npc, { options = { { label = "Araç Kirala", icon = "fas fa-car", action = function() OpenRentalMenu(npcId) end, }, }, distance = 2.5 }) rentals[npcId] = {rentalActive = false, rentedVehicle = nil} -- NPC başına durum end end) -- Menü açma function OpenRentalMenu(npcId) if rentals[npcId].rentalActive then QBCore.Functions.Notify("Zaten bu NPC’den kiraladığın bir araç var!", "error") return end local menu = { {header = "🚘 Araç Kiralama", icon = "fas fa-car", isMenuHeader = true} } for _, v in pairs(Config.Vehicles) do table.insert(menu, { header = ("🚗 %s - $%d"):format(v.label, v.price), txt = "Kiralama süresi 30 dakika", params = { event = "rental:tryRent", args = { vehicle = v.model, price = v.price, npcId = npcId } } }) end table.insert(menu, {header = "❌ Kapat", params = { event = "" } }) exports['qb-menu']:openMenu(menu) end -- Kiralama isteği RegisterNetEvent('rental:tryRent', function(data) QBCore.Functions.TriggerCallback('rental:canRent', function(canRent) if canRent then TriggerServerEvent('rental:chargeAndSpawn', data.price, data.vehicle, data.npcId) else QBCore.Functions.Notify("Zaten kiraladığın bir araç var!", "error") end end) end) -- Araç spawn RegisterNetEvent('rental:spawnVehicle', function(vehicleModel, plate, npcId) local playerPed = PlayerPedId() local spawnCoords = vector3( Config.NPCs[npcId].coords.x + 3.0, Config.NPCs[npcId].coords.y, Config.NPCs[npcId].coords.z ) local heading = Config.NPCs[npcId].coords.w QBCore.Functions.SpawnVehicle(vehicleModel, function(veh) SetEntityHeading(veh, heading) TaskWarpPedIntoVehicle(playerPed, veh, -1) SetVehicleNumberPlateText(veh, plate) SetEntityAsMissionEntity(veh, true, true) rentals[npcId].rentalActive = true rentals[npcId].rentedVehicle = veh QBCore.Functions.Notify("Araç kiralandı! 30 dakika süreniz var.", "success") end, spawnCoords, true) end) -- Süre dolunca client güncelle RegisterNetEvent('rental:clearRentalClient', function(npcId) if rentals[npcId] then rentals[npcId].rentalActive = false rentals[npcId].rentedVehicle = nil QBCore.Functions.Notify("Kiralama süreniz doldu. Araç geri alındı ve anahtarınız iptal edildi.", "error") end end) -- Script kapanınca araç varsa temizle AddEventHandler('onResourceStop', function(resource) if resource == GetCurrentResourceName() then for _, data in pairs(rentals) do if data.rentedVehicle and DoesEntityExist(data.rentedVehicle) then DeleteVehicle(data.rentedVehicle) end end end end) -- Araç silme RegisterNetEvent('rental:deleteVehicleClient', function(plate, npcId) if rentals[npcId] and rentals[npcId].rentedVehicle then local vehPlate = GetVehicleNumberPlateText(rentals[npcId].rentedVehicle) if vehPlate == plate then DeleteVehicle(rentals[npcId].rentedVehicle) rentals[npcId].rentedVehicle = nil rentals[npcId].rentalActive = false end end end)