AI Core
Araçlarai-vehicles

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).

TypeScript
import { resourceExport } from "@aicore-fivem/lib/server";
const vehicles = resourceExport("ai-vehicles");
Lua
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

Signature
CreateVehicle(owner: VehicleOwner, model: string, garage: string | null, props?: VehicleProps): { id: number; plate: string } | null
Lua
local created = exports['ai-vehicles']:CreateVehicle(owner, model, garage, props) -- { id = number, plate = string } ya da nil

Parametreler

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

Signature
GetVehicle(ref: number | string): OwnedVehicle | null
Lua
local vehicle = exports['ai-vehicles']:GetVehicle(ref) -- table ya da nil

Parametreler

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

Signature
GetVehicles(owner: VehicleOwner): OwnedVehicle[]
Lua
local list = exports['ai-vehicles']:GetVehicles(owner) -- dizi

Parametreler

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

Signature
IsOwnedPlate(plate: string): boolean
Lua
local 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

Signature
GetVehicleIdByEntity(entity: number): number | null
Lua
local 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

Signature
GetEntity(id: number): number | null
Lua
local 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

Signature
GetPlateOwners(): Array<[plate: string, type: VehicleOwnerType, id: string]>
Lua
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

Signature
SaveVehicle(id: number, change: { props?: VehicleProps; fuel?: number; engine?: number; body?: number; state?: VehicleState; garage?: string | null }): void
Lua
exports['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

Signature
SaveTuning(id: number, props: VehicleProps): void
Lua
exports['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

Signature
StoreVehicle(id: number, garage: string | null, state?: VehicleState): void
Lua
exports['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

Signature
SetOwner(id: number, owner: VehicleOwner): void
Lua
exports['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

Signature
DeleteVehicle(id: number): void
Lua
exports['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)

Signature
SpawnVehicle(id: number, at: { x: number; y: number; z: number; heading: number }, asker: number, cb: (netId: number | null) => void, purpose?: KeyPurpose, setup?: VehicleSetup): void
Lua
exports['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).

BagTipAnlamı
ai:ownedtrueEntity sahipli bir araçtır.
ai:vidnumberai-vehicles’taki id’si.
ai:propsVehiclePropsKayıtlı görünüş. Entity’nin sahibi olan ai-core client’ı bunu uygular.
ai:setupVehicleSetupProps’u olmayan bir araç için spawn görünüşü, bir kez uygulanır.
fuelnumberYakıt 0-100. Bundan sonra onu yakıt script’i tutar.
Lua (client)
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
if Entity(vehicle).state['ai:owned'] then
  print('owned vehicle', Entity(vehicle).state['ai:vid'])
end

qbx_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.

ExportNe 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.

Bu sayfada