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.
Kaynak adı
Kaynak adında tire olduğu için export'ları exports.hype-rentacar yerine exports["hype-rentacar"] şeklinde çağır.
| Export | Taraf | Amaç |
|---|---|---|
IsOpen | İstemci | Kiralama menüsünün açık olup olmadığı |
Close | İstemci | Kiralama menüsünü kapatır |
GetCatalog | Sunucu | Araçlar, süreler, ofisler, hesaplar ve kiralama kuralları |
GetPlayerData | Sunucu | Oyuncunun bakiyesi, ehliyet durumu ve aktif kiralamaları |
Rent | Sunucu | Daha sonra ofisten teslim alınacak bir kiralama yapar |
Respawn | Sunucu | Kaybolan kiralık aracı oyuncunun yanında yeniden çıkarır |
SendNotify | İkisi de | Ayarlı bildirim kaynağıyla bildirim gösterir |
GetModules | İkisi de | Scriptin modül tablosunu döndürür |
GetFrameworkObject | İkisi de | Framework 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.
if exports["hype-rentacar"]:IsOpen() then return endClose
Kiralama menüsünü kapatır ve kamerayı geri verir.
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.
local catalog = exports["hype-rentacar"]:GetCatalog()
print(catalog.company, #catalog.vehicles)| Alan | Tür | İçerik |
|---|---|---|
company | string | CompanyName |
ui | table | UI (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 |
accounts | string[] | PaymentAccounts |
requireLicense | boolean | License.required |
maxRentals | number | MaxActiveRentals |
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.
local data = exports["hype-rentacar"]:GetPlayerData(source)
if data and #data.rentals > 0 then
print(data.rentals[1].plate, data.rentals[1].remaining)
endSeçenek
Tür
| Alan | Tür | İçerik |
|---|---|---|
player | { id, firstname, lastname, cash, bank } | Karakter adı ve bakiyeler |
license | boolean | Oyuncunun ehliyet kontrolünü geçip geçmediği |
rentals | table[] | 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.
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)
endSeç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ı.
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.
| Kod | Anlamı |
|---|---|
no_money | Seçili hesapta yeterli para yok |
no_license | Ehliyet kontrolü başarısız oldu |
max_rentals | MaxActiveRentals sınırına ulaşıldı |
too_far | Oyuncu ofise çok uzak |
spawn_blocked | Tüm spawn noktaları dolu |
spawn_failed | Araç oluşturulamadı, ödeme iade edildi |
vehicle_far | Araç ofisin returnRadius mesafesinin dışında |
no_rental | Kiralama yok veya başkasına ait |
no_player | Oyuncu yüklenmemiş |
busy | Bu oyuncunun başka bir isteği hâlâ çalışıyor |
cooldown | Security.cooldown süresi henüz dolmadı |
remote_disabled | Remote.enabled false |
respawn_disabled | Respawn.enabled veya Respawn.remote false |
almost_expired | Bir dakikadan az süre kaldı |
vehicle_exists | Araç hâlâ dışarıda, yeniden çıkarılacak bir şey yok |
already_picked_up | Telefon kiralaması zaten teslim alındı |
not_picked_up | Telefon kiralaması önce bir ofisten teslim alınmalı |
not_available_here | Bu ofis bu modeli sunmuyor |
invalid | Geç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.
exports["hype-rentacar"]:SendNotify("Los Santos Rent a Car", "Kiralık aracın hazır.", 5000, "success")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.
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.
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:
| Fonksiyon | Amaç |
|---|---|
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.
RegisterNetEvent("hype-rentacar:client:updated", function()
-- oyuncunun kiralamaları değişti
end)TriggerClientEvent("hype-rentacar:client:updated", source)