AI Core
API başvurusuLib: client

Araçlar ve entity’ler

nearestVehicle, drivenVehicle, waitForEntity, entityFromNetId ve araç props yardımcıları - client’ta araç ve entity bulmak ve bir aracın görünümünü okumak ya da uygulamak.

Oyuncunun yakınındaki araçları bulmak, server’dan gelen network id’leri yerel entity’lere çevirmek ve bir aracın görünümünü okumak ya da uygulamak. Araç oluşturmak yalnızca server’dadır (Araçlar sayfasındaki spawnVehicle); yerel bir galeri (showroom) arabası PreviewVehicle’dır.

Araç bulmak

nearestVehicle

Yerel oyuncuya belirli bir mesafe içindeki en yakın araç. notOwn verilmedikçe oyuncunun oturduğu araç önceliklidir. Uymayan araçları atlamak için filter kullan; böylece oyuncunun arkasında durduğu bagaj, yanındaki daha yakın bir arabaya tercih edilir.

Taraf: Client · Bekler: hayır

Signature
nearestVehicle(metres: number, options?: { networked?: boolean; notOwn?: boolean; filter?: (vehicle: number) => boolean }): number
Lua
local vehicle = aiLib.nearestVehicle(metres, options) -- hiç yoksa 0

Parametreler

Prop

Type

Seçenekler

Prop

Type

Dönüş değeri

number: araç handle’ı ya da metres içinde hiç yoksa 0.

Örnek

import { callAction, nearestVehicle, notify } from "@aicore-fivem/lib/client";

export async function impound(): Promise<void> {
  const vehicle = nearestVehicle(5, { notOwn: true, filter: (v) => GetPedInVehicleSeat(v, -1) === 0 });
  if (!vehicle) return notify("No empty vehicle near", "error");
  await callAction("mypolice:impound", [NetworkGetNetworkIdFromEntity(vehicle)], { fallback: "IMPOUND_FAILED" });
}

Client’ın bildiği her aracı dolaşır; bu yüzden onu her karede değil, bir tuşa basıldığında ya da bir aksiyonda çağır. Aracı server’a bir network id olarak gönder; server onu vehicleFromNet ya da vehicleNearPlayer ile geri çevirir ve mesafeyi kontrol eder.

drivenVehicle

Yerel oyuncunun sürdüğü (sürücü koltuğunda oturduğu) araç.

Taraf: Client · Bekler: hayır

Signature
drivenVehicle(): number | false

Lua karşılığı yok: aiLib.cache.seat == -1 and aiLib.cache.vehicle.

Dönüş değeri

number | false: oyuncu sürücüyse araç handle’ı; yayayken ya da yolcuyken false.

Örnek

import { drivenVehicle, notify } from "@aicore-fivem/lib/client";

RegisterCommand(
  "flip",
  () => {
    const vehicle = drivenVehicle();
    if (vehicle === false) return notify("You must drive a vehicle", "error");
    SetVehicleOnGroundProperly(vehicle);
  },
  false,
);

Network id’lerinden entity’ler

Server entity’leri network id olarak gönderir. Bir client’ta entity henüz var olmayabilir (oyuncu uzaktadır ya da entity yeni oluşturulmuştur).

waitForEntity

Bir network id’nin entity’si bu client’ta var olana kadar bekler ve onu döndürür.

Taraf: Client · Bekler: evet (TypeScript’te Promise, Lua’da thread’i yield eder)

Signature
waitForEntity(netId: number, timeoutMs?: number): Promise<number>
Lua
local entity = aiLib.waitForEntity(netId, timeout) -- bir thread içinde çağır

Parametreler

Prop

Type

Dönüş değeri

Promise<number>: yerel entity handle’ı ya da zaman aşımından sonra 0. Asla reddedilmez.

Örnek

import { onServerEvent, waitForEntity } from "@aicore-fivem/lib/client";
import { readId } from "@aicore-fivem/lib/shared";

// Server bir meslek aracı oluşturdu ve net id’sini gönderiyor.
onServerEvent(
  "myjob:vehicle",
  { args: ([id]) => { const netId = readId(id); return netId === null ? null : [netId]; } },
  async (netId) => {
    const vehicle = await waitForEntity(netId);
    if (vehicle) SetVehicleFuelLevel(vehicle, 100);
  },
);

entityFromNetId

Beklemeden, bir network id’nin şu anki yerel entity’si. İsteğe bağlı olarak entity tipini kontrol eder.

Taraf: Client · Bekler: hayır

Signature
entityFromNetId(netId: number, type?: 1 | 2 | 3): number

Lua karşılığı yok: NetworkDoesEntityExistWithNetworkId(netId) and NetToEnt(netId) or 0.

Parametreler

Prop

Type

Dönüş değeri

number: entity handle’ı ya da bu client’ta yoksa veya type tipinde değilse 0.

Örnek

import { entityFromNetId, EntityState, stateBoolean } from "@aicore-fivem/lib/client";

const sirens = new EntityState("sirensMuted", stateBoolean);

sirens.onChange((netId, muted) => {
  const vehicle = entityFromNetId(netId, 2);
  if (vehicle) SetVehicleHasMutedSirens(vehicle, muted === true);
});

Araç görünümü

getVehicleProps

Bu client’ın görebildiği bir aracın tüm özelliklerini okur: plaka, renkler, modlar, ekstralar, neon, hasar. Aynı görünümü daha sonra geri koymak için sonucu sakla.

Taraf: Client · Bekler: hayır

Signature
getVehicleProps(vehicle: number): VehicleProps

Lua karşılığı yok.

Parametreler

Prop

Type

Dönüş değeri

VehicleProps: v (format sürümü 1), model, plate (kırpılmış), plateIndex, colors, extraColors, customPrimary, customSecondary (RGB ya da null), wheelType, windowTint, livery, mods (mod tipine göre 0-49; aç/kapa modları 17-22, 1 ya da 0 olarak), xenonColor, neon (dört boolean), neonColor, tyreSmoke, extras (ekstra id’sine göre), dirt, engineHealth, bodyHealth.

Örnek

import { callAction, drivenVehicle, getVehicleProps } from "@aicore-fivem/lib/client";

export async function saveLook(): Promise<void> {
  const vehicle = drivenVehicle();
  if (vehicle === false) return;
  await callAction("mygarage:saveProps", [NetworkGetNetworkIdFromEntity(vehicle), getVehicleProps(vehicle)], { fallback: "SAVE_FAILED" });
}

Props oyuncunun client’ından gelir: server onları saklamadan önce ayrıştırmalı ve kontrol etmelidir (@aicore-fivem/lib/shared’dan toVehicleProps).

setVehicleProps

Kayıtlı özellikleri bir araca uygular. Yalnızca bu client’ın kontrol ettiği bir araçta çalışır; diğer oyuncular görünümü ağ üzerinden alır.

Taraf: Client · Bekler: hayır

Signature
setVehicleProps(vehicle: number, props: VehicleProps): void

Lua karşılığı yok.

Parametreler

Prop

Type

Dönüş değeri

void.

Örnek

import { onServerEvent, setVehicleProps, waitForEntity } from "@aicore-fivem/lib/client";
import { readId, toVehicleProps } from "@aicore-fivem/lib/shared";

onServerEvent(
  "mygarage:look",
  {
    args: ([id, raw]) => {
      const netId = readId(id);
      const props = toVehicleProps(raw);
      return netId === null || props === null ? null : [netId, props];
    },
  },
  async (netId, props) => {
    const vehicle = await waitForEntity(netId);
    if (vehicle && NetworkHasControlOfEntity(vehicle)) setVehicleProps(vehicle, props);
  },
);

spawnVehicle({ props }) ile oluşturulan bir aracın görünümü sahip client’ta zaten ai-core tarafından uygulanır. setVehicleProps’a yalnızca kendi akışların için ihtiyacın olur.

setVehicleSetup

Yeni bir araca bir spawn kurulumu uygular: maksimum performans, renkler, livery, cam filmi, kir, motor açık. Yalnızca bu client’ın kontrol ettiği bir araçta çalışır.

Taraf: Client · Bekler: hayır

Signature
setVehicleSetup(vehicle: number, setup: VehicleSetup): void

Lua karşılığı yok.

Parametreler

Prop

Type

VehicleSetup

Prop

Type

Tipi VehicleSetup’tır.

Dönüş değeri

void.

Örnek

import { PreviewVehicle, setVehicleSetup } from "@aicore-fivem/lib/client";

const preview = new PreviewVehicle();

export function showMaxed(model: string): Promise<number> {
  return preview.show(model, { x: -44.4, y: -1097.1, z: 26.4, heading: 120 }, (vehicle) =>
    setVehicleSetup(vehicle, { maxed: true, primary: [20, 200, 120], windowTint: 1 }),
  );
}

Bu sayfada