Geliştiriciler için ai-vehicles
ai-vehicles’ın server export’ları, state bag’leri ve event’leri, cevapladığı qbx_vehicles API’si.
ai-vehicles’ın sadece server export’ları vardır. Hepsi senkrondur (Promise yok, Lua’da bekleme yok); tek istisna, cevabını bir callback ile veren SpawnVehicle’dır. Tipler @aicore-fivem/shared içindedir (vehicles.ts).
import { resourceExport } from "@aicore-fivem/lib/server";
const vehicles = resourceExport("ai-vehicles");local vehicles = exports['ai-vehicles']Anahtar vermek, almak ya da kontrol etmek, bir aracı garaja koymak veya yakıtı okumak için lib’in katmanlarını (vehicleKeys, garages, fuel) kullan: server hangi anahtar, garaj ya da yakıt script’ini çalıştırıyorsa onunla çalışırlar. ai-vehicles’ı doğrudan sadece sahipliğin kendisi için çağır.
Tipler
VehicleOwner
Bir aracın sahibi.
Prop
Type
OwnedVehicle
GetVehicle ve GetVehicles’ın döndürdüğü yapı.
Prop
Type
Server export’ları
CreateVehicle
Yeni bir sahipli aracı kaydeder ve park eder. Bir oyuncu araç edindiğinde kullan (satın alma, ödül, admin hediyesi). Arabayı spawn etmez: SpawnVehicle ile çıkar ya da oyuncunun onu bir garajdan almasına izin ver.
Taraf: Server · Bekler: hayır
CreateVehicle(owner: VehicleOwner, model: string, garage: string | null, props?: VehicleProps): { id: number; plate: string } | nulllocal created = exports['ai-vehicles']:CreateVehicle(owner, model, garage, props) -- { id = number, plate = string } ya da nilParametreler
Prop
Type
Dönüş değeri
Yeni aracın { id, plate } değeri. owner geçerli bir sahip değilse ya da model metin değilse null.
Örnek
import { resourceExport } from "@aicore-fivem/lib/server";
const core = resourceExport("ai-core");
const vehicles = resourceExport("ai-vehicles");
// Oyuncuya Motel Parking garajında park halinde bir Sultan verir.
export function giveSultan(source: number): string | null {
const character = core.GetCharacter(source);
if (!character) return null;
const created = vehicles.CreateVehicle(
{ type: "character", id: String(character.id) },
"sultan",
"pillbox",
);
return created?.plate ?? null;
}GetVehicle
Tek bir sahipli aracı id’si ya da plakasıyla bulur.
Taraf: Server · Bekler: hayır
GetVehicle(ref: number | string): OwnedVehicle | nulllocal vehicle = exports['ai-vehicles']:GetVehicle(ref) -- table ya da nilParametreler
Prop
Type
Dönüş değeri
OwnedVehicle; bellekte o id’ye ya da plakaya sahip araç yoksa (çevrim dışı bir karaktere aitse de) null.
Örnek
const vehicle = vehicles.GetVehicle("AI00001A");
if (vehicle) console.log(vehicle.model, vehicle.state, vehicle.fuel);GetVehicles
Tek bir sahibin bütün araçları.
Taraf: Server · Bekler: hayır
GetVehicles(owner: VehicleOwner): OwnedVehicle[]local list = exports['ai-vehicles']:GetVehicles(owner) -- diziParametreler
Prop
Type
Dönüş değeri
OwnedVehicle dizisi. Geçersiz bir sahip, aracı olmayan bir sahip ya da çevrim dışı bir karakter için boştur.
Örnek
const fleet = vehicles.GetVehicles({ type: "job", id: "police" });
const parked = fleet.filter((v) => v.state === "garage").length;
console.log(`police: ${parked} of ${fleet.length} cars parked`);IsOwnedPlate
Bir plakanın bellekteki sahipli bir araca ait olup olmadığı.
Taraf: Server · Bekler: hayır
IsOwnedPlate(plate: string): booleanlocal owned = exports['ai-vehicles']:IsOwnedPlate(plate)Dönüş değeri
Bu plakaya sahip sahipli bir araç varsa true. Bilinmeyen bir plaka, metin olmayan bir değer ya da çevrim dışı bir karakterin aracı için false.
GetVehicleIdByEntity
Spawn edilmiş sahipli bir aracın ai-vehicles id’si.
Taraf: Server · Bekler: hayır
GetVehicleIdByEntity(entity: number): number | nulllocal id = exports['ai-vehicles']:GetVehicleIdByEntity(entity)Parametreler
Prop
Type
Dönüş değeri
Araç id’si; entity ai-vehicles’ın spawn ettiği sahipli bir araç değilse null.
GetEntity
Spawn edilmiş sahipli bir aracın entity’si.
Taraf: Server · Bekler: hayır
GetEntity(id: number): number | nulllocal entity = exports['ai-vehicles']:GetEntity(id)Dönüş değeri
Server entity handle’ı; araç dışarıda değilse ya da entity’si artık yoksa null.
GetPlateOwners
Bellekteki her sahipli araç, [plate, ownerType, ownerId] olarak. Çok sayıda plakayı kontrol etmesi gereken bir script (bir anahtar sistemi) her kontrolde export çağırmak yerine bunu açılışta bir kez okur, sonra ai-vehicles:owners event’ini takip eder.
Taraf: Server · Bekler: hayır
GetPlateOwners(): Array<[plate: string, type: VehicleOwnerType, id: string]>local owners = exports['ai-vehicles']:GetPlateOwners() -- { { plate, type, id }, ... }Dönüş değeri
Üçlülerden oluşan bir dizi. Bellekte araç yoksa boştur.
SaveVehicle
Bir aracın durumunu ve görünüşünü kaydeder: yakıt, hasar, durum, garaj ve props (renkler, ekstralar, kir). Kayıtlı modifiye (mods, neon) burada asla değişmez; böylece bir oyuncunun client’ından okunan görünüş, bir mod menüsünün yaptıklarını kaydedemez. Modifiye için SaveTuning kullan.
Taraf: Server · Bekler: hayır
SaveVehicle(id: number, change: { props?: VehicleProps; fuel?: number; engine?: number; body?: number; state?: VehicleState; garage?: string | null }): voidexports['ai-vehicles']:SaveVehicle(id, change)Parametreler
Prop
Type
change
Prop
Type
Dönüş değeri
Hiçbir şey. Bilinmeyen bir id hiçbir şey yapmaz.
Örnek
// Bir tamir işi bitti: motor ve kaporta tam.
vehicles.SaveVehicle(vehicleId, { engine: 1000, body: 1000 });SaveTuning
Modifiye dahil (mods, neon) tam props’u kaydeder. Sadece modifiye dükkânları içindir: onu çağıran tek ai-* script’i, AI Core’un kendi modifiye dükkânı ai-mechanic’tir.
Taraf: Server · Bekler: hayır
SaveTuning(id: number, props: VehicleProps): voidexports['ai-vehicles']:SaveTuning(id, props)Dönüş değeri
Hiçbir şey. Geçersiz props yok sayılır. Props içindeki plaka her zaman aracın kendi plakasıyla değiştirilir.
Bir oyuncunun client’ından doğrudan gelen props’u server’da kontrol etmeden asla verme: burada ne kaydedersen bundan sonra arabanın modifiyesi o olur.
StoreVehicle
Bir aracı park eder: dışarıdaysa entity’sini siler, durumunu ve garajını ayarlar.
Taraf: Server · Bekler: hayır
StoreVehicle(id: number, garage: string | null, state?: VehicleState): voidexports['ai-vehicles']:StoreVehicle(id, garage, state)Parametreler
Prop
Type
Dönüş değeri
Hiçbir şey. Önce durumu kaydetmez: hasar ve yakıt korunacaksa ondan önce SaveVehicle çağır. Server hangi garaj script’ini çalıştırıyorsa onun üzerinden park etmek için bunun yerine lib’in garages.store fonksiyonunu kullan.
SetOwner
Bir aracı başka bir sahibe verir (oyuncular arası satış, bir meslek filosuna aktarılan araba).
Taraf: Server · Bekler: hayır
SetOwner(id: number, owner: VehicleOwner): voidexports['ai-vehicles']:SetOwner(id, owner)Dönüş değeri
Hiçbir şey. Geçersiz bir sahip ya da bilinmeyen bir id hiçbir şey yapmaz. Eski sahibin anahtarları alınmaz: gerekirse lib’in vehicleKeys.remove fonksiyonuyla kaldır.
Örnek
vehicles.SetOwner(vehicleId, { type: "job", id: "mechanic" });DeleteVehicle
Sahipli bir aracı tamamen siler: dışarıdaysa entity’sini ve veritabanı satırını.
Taraf: Server · Bekler: hayır
DeleteVehicle(id: number): voidexports['ai-vehicles']:DeleteVehicle(id)Dönüş değeri
Hiçbir şey.
Bu geri alınamaz. Araç, görünüşü ve modifiyesi yok olur.
SpawnVehicle
Sahipli bir aracın entity’sini dünyada görünüşü, plakası, yakıtı ve state bag’leriyle oluşturur ve anahtarları aktif anahtar sistemi üzerinden asker’a verir. Aracın durumu out olur.
Taraf: Server · Bekler: hayır (sonuç cb içinde gelir)
SpawnVehicle(id: number, at: { x: number; y: number; z: number; heading: number }, asker: number, cb: (netId: number | null) => void, purpose?: KeyPurpose, setup?: VehicleSetup): voidexports['ai-vehicles']:SpawnVehicle(id, at, asker, function(netId) end, purpose, setup)Parametreler
Prop
Type
Dönüş değeri
Hiçbir şey. cb network id’sini alır; araç yoksa, zaten dışarıdaysa, şu an spawn ediliyorsa ya da oyun onu oluşturamadıysa null alır.
Örnek
import { resourceExport } from "@aicore-fivem/lib/server";
const vehicles = resourceExport("ai-vehicles");
export function bringOut(source: number, vehicleId: number): void {
const ped = GetPlayerPed(String(source));
const [x, y, z] = GetEntityCoords(ped);
const heading = GetEntityHeading(ped);
vehicles.SpawnVehicle(vehicleId, { x: x + 3, y, z, heading }, source, (netId) => {
if (netId === null) console.log(`vehicle ${vehicleId} could not come out`);
});
}Zaten dışarıda olan bir araç reddedilir (cb(null)). Dışarıdayken entity’si sonradan kaybolursa impound durumuna geçer.
Event’ler
ai-vehicles:owners
Araçlar ai-vehicles’ın belleğine girdiğinde ya da sahip değiştirdiğinde ve plakalar bellekten çıktığında tetiklenir. Server tick’i başına bir toplu paket. Açılışta GetPlateOwners’ı bir kez oku, sonra plakadan sahibe bir kopya tutmak için bu paketleri uygula. Adı @aicore-fivem/shared içinde VEHICLES_EVENTS.owners’dır.
Taraf: Server (yerel event, client’lara gönderilmez)
Prop
Type
import { resourceExport } from "@aicore-fivem/lib/server";
import { VEHICLES_EVENTS } from "@aicore-fivem/shared";
const owners = new Map<string, string>();
for (const [plate, type, id] of resourceExport("ai-vehicles").GetPlateOwners())
owners.set(plate, `${type}:${id}`);
on(VEHICLES_EVENTS.owners, (puts: [string, string, string][], removes: string[]) => {
for (const [plate, type, id] of puts) owners.set(plate, `${type}:${id}`);
for (const plate of removes) owners.delete(plate);
});State bag’ler
ai-vehicles bunları spawn ettiği her sahipli araçta ayarlar. Adlar VEHICLE_BAGS içindedir (@aicore-fivem/shared).
| Bag | Tip | Anlamı |
|---|---|---|
ai:owned | true | Entity sahipli bir araçtır. |
ai:vid | number | ai-vehicles’taki id’si. |
ai:props | VehicleProps | Kayıtlı görünüş. Entity’nin sahibi olan ai-core client’ı bunu uygular. |
ai:setup | VehicleSetup | Props’u olmayan bir araç için spawn görünüşü, bir kez uygulanır. |
fuel | number | Yakıt 0-100. Bundan sonra onu yakıt script’i tutar. |
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
if Entity(vehicle).state['ai:owned'] then
print('owned vehicle', Entity(vehicle).state['ai:vid'])
endqbx_vehicles API
ai-vehicles qbx_vehicles adını provide eder, bu yüzden bu çağrılar ona ulaşır. Yapılar Qbox’u izler: state değeri 0 dışarıda, 1 garajda, 2 çekilmiş araç otoparkında demektir.
| Export | Ne yapar |
|---|---|
GetPlayerVehicles(filters: { citizenid?, garage? }) | Çevrim içi bir karakterin araçları, istenirse sadece tek bir garajdakiler. { id, citizenid, modelName, garage, state, depotPrice, props }[] döner. |
GetPlayerVehicle(id: number) | Aynı yapıda tek bir araç ya da nil. |
CreatePlayerVehicle(request: { model, citizenid, garage?, props? }) | Çevrim içi bir karakter için araç oluşturur. Id’yi ya da nil, { code, message } (bad_request, not_found) döner. |
SetPlayerVehicleOwner(id: number, citizenid: string) | Yeni sahip (çevrim içi). İşe yaradıysa true. |
DeletePlayerVehicles(idType: "plate" | "vehicleId", idValue) | Tek bir aracı siler. Bulunduysa true. |
GetVehicleIdByPlate(plate: string) | Id ya da nil. |
DoesPlayerVehiclePlateExist(plate: string) | Plaka sahipliyse true. |
SaveVehicle(entity: number, options: { props?, state?, garage? }) | Spawn edilmiş bir aracı modifiye dahil kaydeder. AI Core’un props’unu ya da ox_lib / qb-core props yapısını kabul eder. Entity’den farklı bir modelin props’u reddedilir (state ve garage yine kaydedilir). |
GetPlayerVehicle props’u ox_lib’in değil, AI Core’un VehicleProps yapısında döner. depotPrice her zaman 0’dır.