AI Core
API başvurusuLib: client

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)

Signature
raycast(from: Vec3, to: Vec3, options?: RaycastOptions): RayHit | null
Lua
local hit = aiLib.raycast(from, to, options) -- table ya da nil; from / to vector3’tür

Parametreler

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

Signature
groundZ(x: number, y: number, z?: number): number | null
Lua
local ground = aiLib.groundZ(x, y, z) -- number ya da nil

Parametreler

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

Signature
locationName(coords?: Vec3): LocationName
Lua
local 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

Signature
vehicleLabel(vehicle: string | number): string
Lua
local 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

Signature
waypoint(): { x: number; y: number } | null
Lua
local target = aiLib.waypoint() -- { x, y } ya da nil

Dö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)

Signature
pedHeadshot(ped: number, transparent?: boolean, timeoutMs?: number): Promise<{ handle: number; txd: string } | null>
Lua
local handle, txd = aiLib.pedHeadshot(ped, transparent, timeout) -- bir thread içinde çağır

Parametreler

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

Signature
onShot(handler: (weapon: number) => void): () => void
Lua
aiLib.onShot(function(weapon) end) -- hiçbir şey döndürmez

Parametreler

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)

Signature
requestModel(model: string | number, timeoutMs?: number): Promise<number>
Lua
local hash = aiLib.requestModel(model, timeout) -- integer ya da nil, bir thread içinde çağır

Parametreler

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)

Signature
requestAnimDict(dict: string, timeoutMs?: number): Promise<string>
Lua
local dict = aiLib.requestAnimDict(dict, timeout) -- string ya da nil, bir thread içinde çağır

Parametreler

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)

Signature
requestAnimSet(set: string, timeoutMs?: number): Promise<string>
Lua
local set = aiLib.requestAnimSet(set, timeout) -- string ya da nil, bir thread içinde çağır

Parametreler

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)

Signature
requestPtfxAsset(asset: string, timeoutMs?: number): Promise<string>
Lua
local asset = aiLib.requestPtfxAsset(asset, timeout) -- string ya da nil, bir thread içinde çağır

Parametreler

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)

Signature
requestTextureDict(dict: string, timeoutMs?: number): Promise<string>
Lua
local dict = aiLib.requestTextureDict(dict, timeout) -- string ya da nil, bir thread içinde çağır

Parametreler

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)

Signature
requestWeaponAsset(weapon: string | number, timeoutMs?: number): Promise<number>
Lua
local hash = aiLib.requestWeaponAsset(weapon, timeout) -- integer ya da nil, bir thread içinde çağır

Parametreler

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.

Bu sayfada