Araç anahtarları
Sunucunun çalıştırdığı anahtar script’i hangisiyse onun üzerinden araç anahtarı ver, al ve kontrol et.
Her anahtar çağrısı ai-core üzerinden gider, asla bir anahtar script’inin kendi export’ları üzerinden değil (ai-vehiclekeys dahil). ai-core onu aktif anahtar sistemine iletir: panelin Key script ayarının seçtiği ya da çalışan ilk sistem. Hiçbir anahtar script’i çalışmıyorken her oyuncu her anahtara sahip sayılır.
Bir araç ya bir server entity handle’ı (CreateVehicleServerSetter’ın ya da spawnVehicle’ın döndürdüğü sayı) ya da bir plaka metni olarak verilir. Plaka önce kırpılır ve büyük harfe çevrilir, bu yüzden " ab12cde " ve "AB12CDE" aynı anahtardır.
Her anahtarın, anahtar sistemine oyuncunun onu neden aldığını söyleyen bir amacı vardır. Bazı anahtar sistemleri bunları farklı ele alır (satın alınan bir araç yeni bir anahtar eşyası, bir iş aracı kontağa sabit bir anahtar alır). Bkz. KeyPurpose.
| Amaç | Ne zaman |
|---|---|
purchase | Oyuncu artık aracın sahibi (galeri, admin verdi): yeni bir anahtar, eski kopyalar çalışmayı bırakır. |
garage | Depodan çıkarılan sahipli bir araç: sahibinde anahtar zaten vardır. |
job | Vardiya için bir iş aracı. |
rental | Kiralama süresi boyunca kiralık bir araç. |
temporary | Kısa ömürlü başka her şey (admin spawn’ı, test sürüşü, soygun aracı). Varsayılan. |
GiveVehicleKeys
Bir oyuncuya bir aracın anahtarlarını verir.
Taraf: Server · Bekler: hayır · Lib: vehicleKeys.give (ve spawnVehicle({ keysTo, purpose }) onları senin için verir)
GiveVehicleKeys(source: number, vehicle: number | string, purpose?: KeyPurpose): voidexports['ai-core']:GiveVehicleKeys(source, vehicle, 'rental')Parametreler
Prop
Type
Dönüş değeri
Hiçbir şey. Araç entity’si yoksa, plaka boşsa, source bir sayı değilse ya da hiçbir anahtar sistemi çalışmıyorsa çağrı hiçbir şey yapmaz. Bir anahtar sisteminin hatası fırlatılmaz, loglanır.
Örnek
import { onClientCallback, resourceExport, spawnVehicle } from "@aicore-fivem/lib/server";
import { fail } from "@aicore-fivem/lib/shared";
const core = resourceExport("ai-core");
const SPAWN = { x: -1023.5, y: -2694.1, z: 13.9, heading: 150 };
onClientCallback("myscript:rentScooter", { lock: true }, async (source) => {
if (!core.RemoveMoney(source, "cash", 100, "scooter_rental")) return fail("NOT_ENOUGH_MONEY");
const vehicle = await spawnVehicle({ model: "faggio", coords: SPAWN, asker: source });
if (!vehicle) {
core.AddMoney(source, "cash", 100, "scooter_rental_refund");
return fail("SPAWN_FAILED");
}
core.GiveVehicleKeys(source, vehicle, "rental");
return { ok: true };
});Yeni oluşturulmuş bir aracın, sahibi olan client onu senkronlayana kadar server’da plakası yoktur. Oluşturduktan hemen sonra okuduğun bir plakayı değil, entity’yi ver; lib’in spawnVehicle’ı plakayı bekler ve anahtarları kendisi verebilir (keysTo, purpose).
RemoveVehicleKeys
Bir oyuncudan bir aracın anahtarlarını alır.
Taraf: Server · Bekler: hayır · Lib: vehicleKeys.remove
RemoveVehicleKeys(source: number, vehicle: number | string): voidexports['ai-core']:RemoveVehicleKeys(source, 'AB12CDE')Parametreler
Prop
Type
Dönüş değeri
Hiçbir şey. GiveVehicleKeys ile aynı sessiz durumlar.
Örnek
import { resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
/** Kiralama bitti: önce anahtarlar gider, sonra scooter. */
export function endRental(source: number, vehicle: number): void {
core.RemoveVehicleKeys(source, vehicle);
if (DoesEntityExist(vehicle)) DeleteEntity(vehicle);
}Aracı silmeden önce anahtarları al. Bazı anahtar sistemleri plakayı entity’den okur, entity gittikten sonra bu başarısız olur.
HasVehicleKeys
Bir oyuncunun bir aracın anahtarlarına sahip olup olmadığı.
Taraf: Server · Bekler: hayır · Lib: vehicleKeys.has
HasVehicleKeys(source: number, vehicle: number | string): booleanlocal has = exports['ai-core']:HasVehicleKeys(source, vehicle)Parametreler
Prop
Type
Dönüş değeri
boolean: oyuncu anahtarlara sahipse true. Hiçbir anahtar sistemi çalışmıyorsa, anahtar sistemi bu soruyu cevaplayamıyorsa ya da başarısız olursa da true; böylece eksik bir anahtar script’i oyuncuları asla dışarıda bırakmaz. Oyuncunun anahtarı yoksa, araç entity’si yoksa, plaka boşsa ya da source bir sayı değilse false.
Örnek
import { onClientCallback, resourceExport, vehicleNearPlayer } from "@aicore-fivem/lib/server";
import { fail, oneArg, readId } from "@aicore-fivem/lib/shared";
const core = resourceExport("ai-core");
// Oyuncunun yanındaki bir arabanın bagajını açmak anahtarlarını gerektirir.
onClientCallback("myscript:openTrunk", { args: oneArg(readId) }, (source, netId) => {
const vehicle = vehicleNearPlayer(source, netId, { metres: 4 });
if (!vehicle) return fail("TOO_FAR");
if (!core.HasVehicleKeys(source, vehicle)) return fail("NO_KEYS");
return { ok: true };
});