Sorgular ve yükleme
raycast, groundZ, locationName, vehicleLabel, waypoint, pedHeadshot, onShot ve request yükleyicileri - oyuna dünya hakkında sormak ve oyun varlıklarını yüklemek.
Oyuna dünya hakkında sorulan sorular (oyuncunun önünde ne var, zemin ne kadar yüksekte, bu sokağın adı ne) ve her modelin, animasyonun ve efektin kullanılmadan önce ihtiyaç duyduğu yükleyiciler.
Sorgular
raycast
Aynı karede cevaplanan bir çizgi sorgusu: from’dan to’ya çizginin ilk çarptığı şey. "Oyuncu neye bakıyor", nesneleri zemine yerleştirmek ya da görüş hattı için kullan.
Taraf: Client · Bekler: hayır (test bitene kadar kareyi bloklar)
raycast(from: Vec3, to: Vec3, options?: RaycastOptions): RayHit | nulllocal hit = aiLib.raycast(from, to, options) -- table ya da nil; from / to vector3’türParametreler
Prop
Type
RaycastOptions
Prop
Type
Dönüş değeri
RayHit | null: ilk çarpma için { coords, normal, entity } ya da çizgi hiçbir şeye çarpmazsa null (nil).
Prop
Type
Örnek
import { raycast } from "@aicore-fivem/lib/client";
/** Kameranın 10 m içinde baktığı şey. */
export function lookedAt(): number {
const [cx = 0, cy = 0, cz = 0] = GetGameplayCamCoord();
const [rx = 0, , rz = 0] = GetGameplayCamRot(2);
const pitch = (rx * Math.PI) / 180;
const yaw = (rz * Math.PI) / 180;
const dir = { x: -Math.sin(yaw) * Math.cos(pitch), y: Math.cos(yaw) * Math.cos(pitch), z: Math.sin(pitch) };
const hit = raycast(
{ x: cx, y: cy, z: cz },
{ x: cx + dir.x * 10, y: cy + dir.y * 10, z: cz + dir.z * 10 },
{ flags: 2 | 4 | 16 },
);
return hit?.entity ?? 0;
}Senkron bir sorgudur: kare başına bir ya da iki tane ile sınırlı tut.
groundZ
Bir noktanın altındaki zemin yüksekliği; z’den aşağı doğru sorgulanır.
Taraf: Client · Bekler: hayır
groundZ(x: number, y: number, z?: number): number | nulllocal ground = aiLib.groundZ(x, y, z) -- number ya da nilParametreler
Prop
Type
Dönüş değeri
number | null: zemin yüksekliği ya da oradaki çarpışma yüklenmemişken (alan oyuncudan uzaktadır) null (nil).
Örnek
import { groundZ, player } from "@aicore-fivem/lib/client";
const { x, y, z } = player.coords();
const ground = groundZ(x, y, z + 2);
if (ground !== null) console.log(`ground is ${(z - ground).toFixed(2)} m below`);Oyuncuyu bilinmeyen bir zemine taşımak için z olmadan player.teleport kullan: her yükseklikte çarpışmayı bekler.
locationName
Bir noktadaki sokak, kesişen sokak ve bölge adları. İhbarlarda, telefon mesajlarında ve HUD’larda kullan.
Taraf: Client · Bekler: hayır
locationName(coords?: Vec3): LocationNamelocal where = aiLib.locationName(coords) -- coords bir vector3, isteğe bağlıParametreler
Prop
Type
Dönüş değeri
LocationName:
Prop
Type
Örnek
import { locationName } from "@aicore-fivem/lib/client";
const { street, crossing, zone } = locationName();
const text = crossing ? `${street} / ${crossing}, ${zone}` : `${street}, ${zone}`;vehicleLabel
Bir model adından, bir model hash’inden ya da bir araç entity’sinden aracın görünen adı (Sultan RS).
Taraf: Client · Bekler: hayır
vehicleLabel(vehicle: string | number): stringlocal name = aiLib.vehicleLabel(vehicle)Parametreler
Prop
Type
Dönüş değeri
string: oyunun model için etiketi; oyunda modelin metni yoksa (metin girdisi olmayan eklenti araçlar) modelin görünen adı; o da yoksa metin olarak model adı ya da hash’i.
Örnek
import { cache, notify, onCache, vehicleLabel } from "@aicore-fivem/lib/client";
onCache("vehicle", (vehicle) => {
if (vehicle !== false && cache.seat === -1) notify(vehicleLabel(vehicle), "info", 2000);
});waypoint
Oyuncunun haritada belirlediği waypoint.
Taraf: Client · Bekler: hayır
waypoint(): { x: number; y: number } | nulllocal target = aiLib.waypoint() -- { x, y } ya da nilDönüş değeri
{ x: number; y: number } | null: waypoint konumu (yükseklik yok: harita waypoint’lerinde yükseklik olmaz) ya da waypoint belirlenmemişse null (nil).
Örnek
Bkz. player.teleport: waypoint’e ışınlanma.
pedHeadshot
Bir ped’in vesikalık fotoğrafını çeker ve oyun onu çizene kadar bekler. Doku adını bir NUI sayfasında https://nui-img/<txd>/<txd> olarak kullan.
Taraf: Client · Bekler: evet (TypeScript’te Promise, Lua’da thread’i yield eder)
pedHeadshot(ped: number, transparent?: boolean, timeoutMs?: number): Promise<{ handle: number; txd: string } | null>local handle, txd = aiLib.pedHeadshot(ped, transparent, timeout) -- bir thread içinde çağırParametreler
Prop
Type
Dönüş değeri
Promise<{ handle: number; txd: string } | null>: vesikalık handle’ı ve doku adı; ped yoksa ya da çizim zaman aşımından uzun sürdüyse null. Lua handle, txd ya da nil döndürür.
Örnek
import { cache, pedHeadshot } from "@aicore-fivem/lib/client";
export async function sendMugshot(): Promise<void> {
const shot = await pedHeadshot(cache.ped, true);
if (!shot) return;
SendNUIMessage({ action: "photo", data: `https://nui-img/${shot.txd}/${shot.txd}` });
setTimeout(() => UnregisterPedheadshot(shot.handle), 10_000);
}Fotoğraf artık gösterilmediğinde UnregisterPedheadshot(handle) çağır.
onShot
Yerel ped’in ateş ettiği karede bir handler çalıştırır (stres, ateş ihbarları, kovanlar). Resource’un için tek bir kare başı kontrol; yalnızca elde silah varken açık.
Taraf: Client · Bekler: hayır
onShot(handler: (weapon: number) => void): () => voidaiLib.onShot(function(weapon) end) -- hiçbir şey döndürmezParametreler
Prop
Type
Dönüş değeri
TypeScript: () => void, handler’ı kaldıran bir fonksiyon. Lua hiçbir şey döndürmez (handler kalır).
Örnek
import { onShot } from "@aicore-fivem/lib/client";
let lastAlert = 0;
onShot(() => {
if (GetGameTimer() - lastAlert < 30_000) return; // 30 sn’de bir ihbar
lastAlert = GetGameTimer();
emitNet("mypolice:shots");
});Oyun varlıklarını yüklemek
Modeller, animasyonlar, efektler ve dokular kullanılmadan önce yüklenmelidir. Her yükleyici varlığı ister ve hazır olana kadar bekler. İşin bitince, her girdinin söylediği gibi onu serbest bırak.
requestModel
Bir modeli (ped, araç, nesne) yükler ve hash’ini verir.
Taraf: Client · Bekler: evet (TypeScript’te Promise, Lua’da thread’i yield eder)
requestModel(model: string | number, timeoutMs?: number): Promise<number>local hash = aiLib.requestModel(model, timeout) -- integer ya da nil, bir thread içinde çağırParametreler
Prop
Type
Dönüş değeri
Promise<number>: yüklendiğinde model hash’i. Model oyun dosyalarında yoksa ya da zamanında yüklenmezse reddedilir. Lua hash’i ya da iki durumda da nil döndürür.
Örnek
import { requestModel } from "@aicore-fivem/lib/client";
export async function placeCone(x: number, y: number, z: number): Promise<number> {
const hash = await requestModel("prop_roadcone02a");
const cone = CreateObject(hash, x, y, z, false, false, false);
SetModelAsNoLongerNeeded(hash);
PlaceObjectOnGroundProperly(cone);
return cone;
}Entity oluşturulduktan sonra SetModelAsNoLongerNeeded(hash) çağır.
requestAnimDict
Bir animasyon sözlüğü yükler.
Taraf: Client · Bekler: evet (TypeScript’te Promise, Lua’da thread’i yield eder)
requestAnimDict(dict: string, timeoutMs?: number): Promise<string>local dict = aiLib.requestAnimDict(dict, timeout) -- string ya da nil, bir thread içinde çağırParametreler
Prop
Type
Dönüş değeri
Promise<string>: yüklendiğinde sözlük adı. Sözlük yoksa ya da zamanında yüklenmezse reddedilir. Lua adı ya da nil döndürür.
Örnek
import { cache, requestAnimDict } from "@aicore-fivem/lib/client";
export async function dance(): Promise<void> {
const dict = await requestAnimDict("anim@amb@nightclub@dancers@crowddance_facedj@");
TaskPlayAnim(cache.ped, dict, "hi_dance_facedj_09_v2_male^1", 8, -8, -1, 1, 0, false, false, false);
RemoveAnimDict(dict);
}Animasyon artık oynatılmadığında RemoveAnimDict(dict) çağır. player.playAnim sözlüğü senin için yükler ve serbest bırakır.
requestAnimSet
Bir hareket clipset’i yükler (çömelerek yürüme, yaralı yürüme).
Taraf: Client · Bekler: evet (TypeScript’te Promise, Lua’da thread’i yield eder)
requestAnimSet(set: string, timeoutMs?: number): Promise<string>local set = aiLib.requestAnimSet(set, timeout) -- string ya da nil, bir thread içinde çağırParametreler
Prop
Type
Dönüş değeri
Promise<string>: yüklendiğinde clipset adı. Zamanında yüklenmezse reddedilir. Lua adı ya da nil döndürür.
Örnek
import { cache, requestAnimSet } from "@aicore-fivem/lib/client";
export async function limp(): Promise<void> {
const set = await requestAnimSet("move_m@injured");
SetPedMovementClipset(cache.ped, set, 0.2);
}Artık kullanılmadığında RemoveAnimSet(set) çağır.
requestPtfxAsset
Bir parçacık efekti varlığı yükler.
Taraf: Client · Bekler: evet (TypeScript’te Promise, Lua’da thread’i yield eder)
requestPtfxAsset(asset: string, timeoutMs?: number): Promise<string>local asset = aiLib.requestPtfxAsset(asset, timeout) -- string ya da nil, bir thread içinde çağırParametreler
Prop
Type
Dönüş değeri
Promise<string>: yüklendiğinde varlık adı. Zamanında yüklenmezse reddedilir. Lua adı ya da nil döndürür.
Örnek
import { player, requestPtfxAsset } from "@aicore-fivem/lib/client";
export async function sparks(): Promise<void> {
const asset = await requestPtfxAsset("core");
const { x, y, z } = player.coords();
UseParticleFxAsset(asset);
StartParticleFxNonLoopedAtCoord("ent_sht_electrical_box", x, y, z, 0, 0, 0, 1, false, false, false);
RemoveNamedPtfxAsset(asset);
}İşin bitince RemoveNamedPtfxAsset(asset) çağır.
requestTextureDict
Stream edilen bir doku sözlüğü yükler (DrawSprite ve benzerleri için).
Taraf: Client · Bekler: evet (TypeScript’te Promise, Lua’da thread’i yield eder)
requestTextureDict(dict: string, timeoutMs?: number): Promise<string>local dict = aiLib.requestTextureDict(dict, timeout) -- string ya da nil, bir thread içinde çağırParametreler
Prop
Type
Dönüş değeri
Promise<string>: yüklendiğinde sözlük adı. Zamanında yüklenmezse reddedilir. Lua adı ya da nil döndürür.
Örnek
import { every, requestTextureDict } from "@aicore-fivem/lib/client";
export async function showCrosshair(): Promise<void> {
const dict = await requestTextureDict("shared");
every(0, () => DrawSprite(dict, "emptydot_32", 0.5, 0.5, 0.01, 0.018, 0, 255, 255, 255, 200));
}İşin bitince SetStreamedTextureDictAsNoLongerNeeded(dict) çağır.
requestWeaponAsset
Bir silahın modelini ve varlıklarını yükler ve hash’ini verir.
Taraf: Client · Bekler: evet (TypeScript’te Promise, Lua’da thread’i yield eder)
requestWeaponAsset(weapon: string | number, timeoutMs?: number): Promise<number>local hash = aiLib.requestWeaponAsset(weapon, timeout) -- integer ya da nil, bir thread içinde çağırParametreler
Prop
Type
Dönüş değeri
Promise<number>: yüklendiğinde silah hash’i. Zamanında yüklenmezse reddedilir. Lua hash’i ya da nil döndürür.
Örnek
import { player, requestWeaponAsset } from "@aicore-fivem/lib/client";
export async function showcasePistol(): Promise<number> {
const hash = await requestWeaponAsset("WEAPON_PISTOL");
const { x, y, z } = player.coords();
const object = CreateWeaponObject(hash, 0, x, y, z + 1, true, 1, 0);
RemoveWeaponAsset(hash);
return object;
}İşin bitince RemoveWeaponAsset(hash) çağır.
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.
Kamera ve zamanlama
ScriptCamera, TickLoop, AreaFollower ve ServerClock - script kameraları, yalnızca gerektiğinde çalışan kare başı görevler, oyuncunun alanını server’a bildirmek ve server’ın saatini client’ta kullanmak.