Rent a CarYeniÜcretsiz

Rent a Car: Export ve Event'ler

Başka kaynaklardan araç kirala, oyuncunun kiralamalarını oku, kiralama değişikliklerini dinle ve framework ile modül köprülerini kullan.

v1.0.0Açık kaynakÜcretsizQBox · QBCore · ESX

Kaynak adı

Kaynak adında tire olduğu için export'ları exports.hype-rentacar yerine exports["hype-rentacar"] şeklinde çağır.

ExportTarafAmaç
IsOpenİstemciKiralama menüsünün açık olup olmadığı
CloseİstemciKiralama menüsünü kapatır
GetCatalogSunucuAraçlar, süreler, ofisler, hesaplar ve kiralama kuralları
GetPlayerDataSunucuOyuncunun bakiyesi, ehliyet durumu ve aktif kiralamaları
RentSunucuDaha sonra ofisten teslim alınacak bir kiralama yapar
RespawnSunucuKaybolan kiralık aracı oyuncunun yanında yeniden çıkarır
SendNotifyİkisi deAyarlı bildirim kaynağıyla bildirim gösterir
GetModulesİkisi deScriptin modül tablosunu döndürür
GetFrameworkObjectİkisi deFramework köprüsünü döndürür

İstemci export'ları

IsOpen

Kiralama menüsü açıkken true döndürür. Kendi arayüzünü veya tuş atamalarını engellemek için kullanışlıdır.

client.lua
if exports["hype-rentacar"]:IsOpen() then return end

Close

Kiralama menüsünü kapatır ve kamerayı geri verir.

client.lua
exports["hype-rentacar"]:Close()

Sunucu export'ları

hype-rentacar-app bu export'ların üzerine kuruludur. Ofisle aynı kontrollerden geçerler: bekleme süresi, istek kilidi, ehliyet, kiralama limiti ve bakiye.

GetCatalog

Ofis dışında bir kiralama kataloğu göstermek için gereken her şeyi döndürür.

server.lua
local catalog = exports["hype-rentacar"]:GetCatalog()
print(catalog.company, #catalog.vehicles)
AlanTürİçerik
companystringCompanyName
uitableUI (accent, numberLocale, currency)
vehicles{ model, label, category, price, deposit, image }[]En az bir ofiste sunulan araçlar
durations{ hours, discount }[]Durations
locations{ id, label, coords = { x, y } }[]Ofisler
accountsstring[]PaymentAccounts
requireLicensebooleanLicense.required
maxRentalsnumberMaxActiveRentals
remote{ enabled, fee }Telefondan kiralama kuralları
respawn{ enabled, fee }Sadece Respawn.enabled ve Respawn.remote açıksa true

GetPlayerData

Oyuncunun bilgilerini, ehliyet durumunu ve aktif kiralamalarını döndürür; oyuncu yüklenmemişse nil döner.

server.lua
local data = exports["hype-rentacar"]:GetPlayerData(source)
if data and #data.rentals > 0 then
    print(data.rentals[1].plate, data.rentals[1].remaining)
end

Seçenek

Tür

AlanTürİçerik
player{ id, firstname, lastname, cash, bank }Karakter adı ve bakiyeler
licensebooleanOyuncunun ehliyet kontrolünü geçip geçmediği
rentalstable[]Aktif kiralamalar, en eskisi önce

Her kiralamada id, model, label, plate, hours, deposit, payment, location, locationLabel, image, remaining (saniye), pickedUp, vehicleExists ve coords (araç varken { x, y }) bulunur.

Rent

Bir oyuncu için kiralama yapar. Araç çıkarılmaz; oyuncu aracı o modeli sunan herhangi bir ofisten teslim alır. Remote.fee eklenir ve Remote.enabled false ise çağrı başarısız olur.

server.lua
local success, result = exports["hype-rentacar"]:Rent(source, {
    model = "blista",
    hours = 4,
    payment = "bank",
})

if success then
    print(("Rental #%d, plate %s"):format(result.id, result.plate))
else
    print("Rent failed: " .. result)
end

Seçenek

Tür

Başarılıysa true, { id, plate, label, hours }, değilse false, errorCode döndürür.

Respawn

Teslim alınmış ve aracı artık var olmayan bir kiralamayı verilen noktada yeniden çıkarır ve Respawn.fee tahsil eder. Nokta oyuncuya Respawn.maxDistance mesafesinde olmalı ve üzerinde araç olmamalı.

server.lua
local coords = GetEntityCoords(GetPlayerPed(source))
local success, result = exports["hype-rentacar"]:Respawn(source, rentalId, {
    x = coords.x + 4.0, y = coords.y, z = coords.z, w = 90.0,
})

Seçenek

Tür

Başarılıysa true, { id, plate, label, fee, coords }, değilse false, errorCode döndürür.

Hata kodları

Başarısız olunca result bu kodlardan biridir. Her biri dil dosyalarında ui.errors altındaki bir anahtardır.

KodAnlamı
no_moneySeçili hesapta yeterli para yok
no_licenseEhliyet kontrolü başarısız oldu
max_rentalsMaxActiveRentals sınırına ulaşıldı
too_farOyuncu ofise çok uzak
spawn_blockedTüm spawn noktaları dolu
spawn_failedAraç oluşturulamadı, ödeme iade edildi
vehicle_farAraç ofisin returnRadius mesafesinin dışında
no_rentalKiralama yok veya başkasına ait
no_playerOyuncu yüklenmemiş
busyBu oyuncunun başka bir isteği hâlâ çalışıyor
cooldownSecurity.cooldown süresi henüz dolmadı
remote_disabledRemote.enabled false
respawn_disabledRespawn.enabled veya Respawn.remote false
almost_expiredBir dakikadan az süre kaldı
vehicle_existsAraç hâlâ dışarıda, yeniden çıkarılacak bir şey yok
already_picked_upTelefon kiralaması zaten teslim alındı
not_picked_upTelefon kiralaması önce bir ofisten teslim alınmalı
not_available_hereBu ofis bu modeli sunmuyor
invalidGeçersiz veri, Security.logSuspicious ile konsola bak

Ortak export'lar

SendNotify

Notifications ayarındaki kaynakla (okokNotify, ps-ui veya ox_lib) bildirim gösterir. Sunucuda ilk argüman oyuncudur, -1 herkese gönderir.

client.lua
exports["hype-rentacar"]:SendNotify("Los Santos Rent a Car", "Kiralık aracın hazır.", 5000, "success")
server.lua
exports["hype-rentacar"]:SendNotify(source, "Los Santos Rent a Car", "Kiralık aracın hazır.", 5000, "success")

Seçenek

Tür

GetModules

Çağrıldığı tarafın modül tablosunu döndürür. İsim verilirse sadece o modülü döndürür: istemcide Notify, Target ve Fuel, sunucuda Notify, Inventory, VehicleKeys ve Fuel.

server.lua
local keys = exports["hype-rentacar"]:GetModules("VehicleKeys")
keys.GiveKeys(source, vehicle, "RENT1234", "blista")

Seçenek

Tür

Modül fonksiyonları ayrıca tek tek de export edilir: sunucuda GiveKeys(playerId, vehicle, plate?, model?), SetFuel(playerId, vehicle, level?) ve HasItem / GetItemCount, istemcide SetFuel.

GetFrameworkObject

Çağrıldığı tarafın framework köprüsünü (Framework.Server veya Framework.Client) döndürür.

server.lua
local framework = exports["hype-rentacar"]:GetFrameworkObject()
local bank = framework.GetPlayerMoney(source, "bank")

Framework köprüleri

frameworks/ içindeki framework köprüleri ve modules/ içindeki modüller escrow korumalı değildir. Ekonomin, ehliyet veya araç sistemin özelleştirilmişse onları burada değiştirebilirsin. Her köprü aynı fonksiyonları içerir:

main.lua
FonksiyonAmaç
GetPlayerIdentifier(playerId)Karakter kimliği, QB/QBox'ta citizenid, ESX'te identifier
GetSourceFromIdentifier(identifier)Çevrim içi bir karakterin sunucu ID'si, süre bildirimleri için
GetCharacterName(playerId, split)Menüde görünen ad ve soyad
GetPlayerMoney(playerId, type)"cash" veya "bank" bakiyesi
RemovePlayerMoney(playerId, type, amount, reason)Kira, depozito ve ücretleri çeker, başarılıysa true döndürür
AddPlayerMoney(playerId, type, amount, reason)Depozito iadeleri ve başarısız kiralamalar
HasLicense(playerId, license)QB/QBox'ta metadata.licences, ESX'te user_licenses
IsPlateTaken(plate)Sahipli araçların plakalarını atlar

Dönüş değerlerini koru

Script, RemovePlayerMoney fonksiyonunun sadece para gerçekten hareket ettiğinde true döndürmesine güvenir. Başarısız bir ödemede true döndürmek oyuncuların bedavaya kiralamasına izin verir.

Event'ler

hype-rentacar:client:updated

Oyuncunun kiralamaları her değiştiğinde onun istemcisinde tetiklenir: kiralama, teslim alma, iade, yeniden çıkarma ve süre dolumu. Telefon uygulaması bununla yenilenir. Bir oyuncunun uygulamasını yenilemek için sunucudan kendin tetikle.

client.lua
RegisterNetEvent("hype-rentacar:client:updated", function()
    -- oyuncunun kiralamaları değişti
end)
server.lua
TriggerClientEvent("hype-rentacar:client:updated", source)

Bu sayfada