AI Core
API başvurusuLib: client

Ped’ler, blip’ler ve prop’lar

LocalPed, Blips, createBlip, attachProp, PreviewVehicle ve player.holdAnim - yerel NPC’ler, harita blip’leri, elde tutulan prop’lar, galeri araçları ve sürdürülen animasyonlar.

Yalnızca bu client’ın gördüğü şeyler: tezgahın arkasındaki bir NPC, harita blip’leri, oyuncunun elindeki bir prop, bir galeri arabası. Hiçbiri ağa bağlı değildir; bu yüzden entity lockdown ile asla çakışmazlar ve server’a hiçbir maliyetleri yoktur. Bir nokta kendi NPC’sini ve blip’ini zaten oluşturur (points.add’in ped ve blip’i); bu sınıfları noktası olmayanlar için kullan.

Yerel ped’ler

new LocalPed

Yalnızca bu client’ın gördüğü bir ped (bir dükkân sahibi, bir meslek NPC’si). Oyuncu coords’a distance kadar yaklaştığında oluşturulur ve uzaklaştığında silinir; böylece haritadaki bin NPC, biri yanına gelene kadar hiçbir maliyet getirmez. Donmuş halde durur, zarar göremez ve olayları (silah sesleri, itilmek) yok sayar.

Taraf: Client · Bekler: hayır (model, oyuncu yaklaştığında arka planda yüklenir)

Signature
new LocalPed(options: LocalPedOptions)
Lua
local ped = aiLib.LocalPed.new(options)

Parametreler

Prop

Type

LocalPedOptions

Prop

Type

Üyeler

Prop

Type

Örnek

import { LocalPed } from "@aicore-fivem/lib/client";

const guard = new LocalPed({
  model: "s_m_m_security_01",
  coords: { x: -1037.6, y: -2737.8, z: 20.2, heading: 330 },
  scenario: "WORLD_HUMAN_GUARD_STAND",
  distance: 80,
  onSpawn: (ped) => SetPedComponentVariation(ped, 0, 1, 0, 0),
});

// Daha sonra, iş bittiğinde:
guard.remove();

Mesafe bağlı olduğu ebeveynden değil, coords’tan ölçülür. Hareket eden bir entity’yi takip eden bir ped (uzaklaşan bir araçta attach ya da seat) büyük bir distance’a ve kendi menzil kontrolüne ihtiyaç duyar; yoksa oluşturulduğu yerde kalır.

Blip’ler

createBlip

Adlandırılmış tek bir harita blip’i oluşturur ve handle’ını döndürür. Onu RemoveBlip(handle) ile kendin kaldırırsın; panel değiştiğinde yeniden kurduğun blip’ler için bir Blips grubu kullan.

Taraf: Client · Bekler: hayır

Signature
createBlip(options: BlipOptions): number
Lua
local blip = aiLib.Blips.create(options)

Parametreler

Prop

Type

BlipOptions

Prop

Type

Admin panelinde seçilen bir blip stili (readBlipStyle ile okunan blip widget’ı) doğrudan bu seçeneklere yayılır: createBlip({ ...style, coords, label }).

Dönüş değeri

number: blip handle’ı.

Örnek

import { createBlip, createLocale } from "@aicore-fivem/lib/client";

const Locale = createLocale<typeof import("../../locales/en.json")>();

// GPS rotalı bir teslimat hedefi; teslim edilince kaldırılır.
const target = createBlip({
  coords: { x: 1197.4, y: -3253.6, z: 7.1 },
  sprite: 478,
  color: 5,
  label: Locale("DELIVERY"),
  shortRange: false,
  route: true,
});
// ... teslimatta:
RemoveBlip(target);

new Blips

id’ye göre bir blip grubu: add aynı id’ye sahip blip’in yerine geçer ve clear hepsini kaldırır. Özellik başına bir grup kullan.

Taraf: Client · Bekler: hayır

Signature
new Blips()
Lua
local blips = aiLib.Blips.new()

Metotlar

Prop

Type

Lua’da metotları iki nokta üst üste ile çağır: blips:add(id, options).

Örnek

import { Blips, createLocale } from "@aicore-fivem/lib/client";

const Locale = createLocale<typeof import("../../locales/en.json")>();
const blips = new Blips();

const GARAGES = [
  { id: "legion", coords: { x: 215.8, y: -810.1, z: 30.7 } },
  { id: "airport", coords: { x: -796.5, y: -2023.3, z: 9.2 } },
];

for (const garage of GARAGES)
  blips.add(garage.id, { coords: garage.coords, sprite: 357, color: 3, label: Locale("GARAGE") });

// Bir garaj kapatıldı:
blips.remove("airport");

Prop’lar ve sürdürülen animasyonlar

attachProp

Yerel bir prop oluşturur ve onu bir ped kemiğine bağlar (eldeki bir telefon, önde taşınan bir kutu). Sen istemedikçe prop’un çarpışması yoktur.

Taraf: Client · Bekler: evet (Promise: önce modeli yükler)

Signature
attachProp(model: string | number, options: AttachPropOptions): Promise<number>

Lua karşılığı yok: nesneyi oluştur ve AttachEntityToEntity’yi kendin çağır.

Parametreler

Prop

Type

AttachPropOptions

Prop

Type

Dönüş değeri

Promise<number>: prop entity’si ya da model yüklenmezse veya ped artık yoksa 0. Asla reddedilmez.

Örnek

import { attachProp, player } from "@aicore-fivem/lib/client";

export async function readNewspaper(): Promise<void> {
  const paper = await attachProp("prop_cliff_paper", {
    bone: 18905,
    offset: { x: 0.12, y: 0.03, z: 0.02 },
    rotation: { x: 10, y: 0, z: 0 },
  });
  const hold = player.holdAnim("amb@world_human_tourist_map@male@base", "base");
  setTimeout(() => {
    hold.stop();
    if (paper) DeleteEntity(paper);
  }, 10_000);
}

Prop’u DeleteEntity ile kendin silersin. Unuttuğun prop’lar resource’un durduğunda silinir.

player.holdAnim

Bir animasyonu sen durdurana kadar oynatmaya devam eder. Bir düşme, bir çarpma ya da bir ragdoll onu kestiğinde yarım saniye içinde yeniden başlatılır. Taşımak, telefon tutmak ya da bir iş döngüsü için kullan. Resource başına bir hold: yenisi eskisinin yerine geçer.

Taraf: Client · Bekler: hayır

Signature
player.holdAnim(dict: string, clip: string, options?: HoldAnimOptions): { stop(): void }

Lua karşılığı yok: animasyonu aiLib.player.playAnim ile oynat ve bir aiLib.every göreviyle kontrol et.

Parametreler

Prop

Type

HoldAnimOptions

Prop

Type

Dönüş değeri

{ stop(): void }: hold’u bitirmek ve ped’in görevlerini temizlemek için stop() çağır. Yerine başkası geçmiş bir hold’da stop() çağırmak hiçbir şey yapmaz.

Örnek

import { attachProp, cache, player } from "@aicore-fivem/lib/client";

export async function carryBox(): Promise<void> {
  const box = await attachProp("hei_prop_heist_box", {
    bone: 60309,
    offset: { x: 0.025, y: 0.08, z: 0.255 },
    rotation: { x: -145, y: 290, z: 0 },
  });
  // Oyuncu bir araca bindiğinde kendiliğinden biter.
  player.holdAnim("anim@heists@box_carry@", "idle", {
    while: () => cache.vehicle === false,
  });
  setTimeout(() => box && DeleteEntity(box), 60_000);
}

Galeri araçları

new PreviewVehicle

Galeriler ve marketler için yerel bir önizleme aracı: donmuş, hasar alamaz, kilitli ve temiz. Yeni bir model göstermek eskisinin yerine geçer ve her zaman son çağrı kazanır (modelini hâlâ yükleyen daha eski bir çağrı hiçbir şey yapmaz). clear()’da ve resource’un durduğunda silinir. Hiçbir şey ağa bağlı değildir.

Taraf: Client · Bekler: show bekler (Promise)

Signature
new PreviewVehicle()

Lua karşılığı yok.

Üyeler

Prop

Type

Örnek

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

const preview = new PreviewVehicle();
const STAGE = { x: -44.4, y: -1097.1, z: 26.4, heading: 120 };

export async function showCar(model: string, color: number): Promise<void> {
  const vehicle = await preview.show(model, STAGE, (v) => setVehicleSetup(v, { colors: [color, color] }));
  if (vehicle) SetVehicleNumberPlateText(vehicle, "SHOWROOM");
}

export function leaveShowroom(): void {
  preview.clear();
}

Bu sayfada