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)
new LocalPed(options: LocalPedOptions)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
createBlip(options: BlipOptions): numberlocal 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
new Blips()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)
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
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)
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();
}