AI Core
API başvurusuLib: client

Yerel oyuncu

Önbellekteki ped, araç, koltuk ve silah, player nesnesi (konum, ışınlanma, animasyonlar), ekran kararmaları, diğer oyuncuların ped’leri ve en yakın oyuncu.

Bu bilgisayarın başında oturan oyuncuyla ilgili her şey. Döngülerde PlayerPedId() çağırmak yerine değerleri cache’ten oku: ai-core her resource için tek bir izleyici tutar ve değişiklikleri gönderir; bu yüzden hiçbir script onları yoklamaz.

cache

Yerel oyuncunun en çok okunan değerleri; ai-core’un tek izleyicisi tarafından güncel tutulur. ox_lib’in cache’i gibi: PlayerPedId() çağırmak yerine cache.ped’i, her karede GetVehiclePedIsIn yerine cache.vehicle’ı oku. Bir anahtarı okumak düz bir bellek okumasıdır; döngülerde ve kare başı kodda güvenlidir.

Taraf: Client · Bekler: hayır

Signature
const cache: PlayerCache // salt okunur
Lua
local ped = aiLib.cache.ped

Anahtarlar

Prop

Type

Tipi PlayerCache’tir.

Örnek

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

// Sürerken gösterilen hız, 200 ms’de bir önbellekten okunur.
every(200, () => {
  if (cache.vehicle === false || cache.seat !== -1) return;
  const kmh = GetEntitySpeed(cache.vehicle) * 3.6;
  SendNUIMessage({ action: "speed", data: Math.round(kmh) });
});

cache.ped bir model değişikliğinin en fazla 100 ms gerisinden gelir. Modeli değiştirdikten hemen sonra (SetPlayerModel) bir kez PlayerPedId() çağır. Aşağıdaki player aksiyonları ped’i zaten taze okur.

onCache

Önbellekteki bir değer her değiştiğinde bir handler çalıştırır: oyuncu bir araca bindi ya da indi, koltuk değiştirdi, silah çekti ya da kaldırdı veya yeni bir ped aldı. Değeri bir zamanlayıcıyla kontrol etmek yerine bunu kullan.

Taraf: Client · Bekler: hayır

Signature
onCache<K extends keyof PlayerCache>(key: K, handler: (value: PlayerCache[K], old: PlayerCache[K]) => void): void
Lua
aiLib.cache.onChange(key, function(value, old) end)

Parametreler

Prop

Type

Dönüş değeri

void. Handler’ı kaldırmanın bir yolu yoktur; dosyanın en üstünde özellik başına bir tane tut.

Örnek

import { onCache, inventory, Points } from "@aicore-fivem/lib/client";

const points = new Points();

// canShow’u cache.vehicle’ı okuyan noktalar yeniden kontrol edilir.
onCache("vehicle", () => points.refresh());

// Eldeki silah eşyası, yalnızca silah değiştiğinde okunur.
onCache("weapon", (weapon) => {
  const item = weapon === false ? null : inventory.currentWeapon();
  SendNUIMessage({ action: "weapon", data: item });
});

readPlayerState

Önbellek olmadan, bir ped’in şu anki aracını, koltuğunu ve silahını okur. ai-core’un izleyicisi bunu kullanır; sana yalnızca yerel olmayan bir ped için ya da önbellekle elle karşılaştırmak için gerekir.

Taraf: Client · Bekler: hayır

Signature
readPlayerState(ped: number): { vehicle: number | false; seat: number | false; weapon: number | false }

Lua karşılığı yok.

Parametreler

Prop

Type

Dönüş değeri

vehicle (araç handle’ı, yayayken false), seat (-1 sürücü ve üstü, yayayken false) ve weapon (eldeki hash, silahsızken false) içeren bir nesne.

Örnek

import { playerPed, readPlayerState } from "@aicore-fivem/lib/client";

const ped = playerPed(12);
if (ped !== 0 && readPlayerState(ped).seat === -1) console.log("player 12 is driving");

readWeapon

Bir ped’in şu an elindeki silah; silahsızken false.

Taraf: Client · Bekler: hayır

Signature
readWeapon(ped: number): number | false

Lua karşılığı yok.

Parametreler

Prop

Type

Dönüş değeri

number | false: silah hash’i ya da ped WEAPON_UNARMED tutuyorsa false.

Örnek

import { nearestPlayer, playerPed, readWeapon } from "@aicore-fivem/lib/client";

const id = nearestPlayer(5);
if (id !== null && readWeapon(playerPed(id)) !== false) console.log("the player next to you is armed");

player

Yerel ped için tek bir nesne: nerede olduğu, onu hareket ettirmek, animasyonlar. Okumalar cache.ped’i kullanır; aksiyonlar ped’i taze okur, böylece bir model değişikliğinden hemen sonra da çalışırlar.

player.ped

Yerel ped handle’ı (cache.ped ile aynı değer).

Taraf: Client · Bekler: hayır

Signature
player.ped: number // salt okunur özellik

Lua karşılığı yok: aiLib.cache.ped kullan.

Dönüş değeri

number: ped handle’ı.

Örnek

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

SetPedArmour(player.ped, 100);

player.coords

Ped’in şu anki konumu.

Taraf: Client · Bekler: hayır

Signature
player.coords(): Vec3
Lua
local coords = aiLib.player.coords() -- vector3

Dönüş değeri

TypeScript’te bir Vec3 { x, y, z } (z ped’in kök noktasıdır, zeminden yaklaşık 1 m yukarıda). Lua bir vector3 döndürür.

Örnek

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

const here = player.coords();
console.log(`${locationName(here).street} at ${here.x.toFixed(1)}, ${here.y.toFixed(1)}`);

player.heading

Ped’in baktığı yön, derece cinsinden (0-360, 0 = kuzey).

Taraf: Client · Bekler: hayır

Signature
player.heading(): number
Lua
local heading = aiLib.player.heading()

Dönüş değeri

number: derece cinsinden heading.

Örnek

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

// Bir panel kaydı için noktayı ve yönü kaydet.
const spot = { ...player.coords(), heading: player.heading() };

player.distanceTo

Ped’den bir noktaya düz mesafe, metre cinsinden.

Taraf: Client · Bekler: hayır

Signature
player.distanceTo(point: Vec3): number
Lua
local metres = aiLib.player.distanceTo(point) -- vector3 ya da { x, y, z }

Parametreler

Prop

Type

Dönüş değeri

number: 3D olarak ölçülen metre.

Örnek

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

const counter = { x: 25.7, y: -1347.3, z: 29.5 };
if (player.distanceTo(counter) > 3) notify("Walk to the counter first", "error");

player.freeze

Ped’i yerinde dondurur ya da yeniden hareket etmesine izin verir.

Taraf: Client · Bekler: hayır

Signature
player.freeze(state: boolean): void
Lua
aiLib.player.freeze(frozen)

Parametreler

Prop

Type

Dönüş değeri

void.

Örnek

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

player.freeze(true);
setTimeout(() => player.freeze(false), 5000);

player.teleport

Oyuncuyu taşır ve siyah bir ekran kararması arkasında yeni noktanın etrafındaki dünya yüklenene kadar bekler. z olmadan (ya da ground: "find" ile) x ve y altındaki zemini arar: harita waypoint’i için bunu kullan.

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

Signature
player.teleport(to: { x: number; y: number; z?: number }, options?: TeleportOptions): Promise<void>
Lua
aiLib.player.teleport(to, options) -- bir thread içinde çağır

Parametreler

Prop

Type

TeleportOptions

Prop

Type

Dönüş değeri

Oyuncu yeni noktada durduğunda ve oradaki çarpışma yüklendiğinde (ya da yüklenmeden 5 saniye sonra) çözülen Promise<void>. Lua hiçbir şey döndürmez.

Örnek

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

RegisterCommand(
  "tpm",
  async () => {
    const target = waypoint();
    if (!target) return notify("Set a waypoint first", "error");
    await player.teleport(target, { keepVehicle: true }); // z yok: zemine iner
  },
  false,
);

TypeScript zemin araması, donmuş ped’i artan yüksekliklerde durdurur, her birinde çarpışmayı bekler ve MLO ya da IPL iç mekânlarındaki yüzeyleri atlar; böylece asla bir çatıya ya da sokağın üstündeki bir binanın içine inmez. Lua sürümü bulduğu ilk zemini alır ve çarpışma için en fazla 3 saniye bekler.

player.playAnim

Ped üzerinde bir animasyon oynatır. Önce animasyon sözlüğünü yükler.

Taraf: Client · Bekler: TypeScript’te evet (animasyon başladığında çözülür); Lua’da sözlük yüklenirken yield eder

Signature
player.playAnim(dict: string, clip: string, options?: AnimOptions): Promise<void>
Lua
aiLib.player.playAnim(dict, clip, options) -- bir thread içinde çağır

Parametreler

Prop

Type

AnimOptions

Prop

Type

Dönüş değeri

Animasyon başladığında çözülen Promise<void>. Sözlük yoksa ya da 10 saniyede yüklenmezse reddedilir. Lua hiçbir şey döndürmez ve sözlük yüklenmezse hiçbir şey yapmaz.

Örnek

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

export async function handOver(): Promise<void> {
  await player.playAnim("mp_common", "givetake1_a", { flag: 48, duration: 1500 });
}

player.stopAnim

Ped ne yapıyorsa onu durdurur (ClearPedTasks): animasyonlar ve senaryolar.

Taraf: Client · Bekler: hayır

Signature
player.stopAnim(): void
Lua
aiLib.player.stopAnim()

Dönüş değeri

void.

Örnek

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

export async function readClipboard(): Promise<void> {
  await player.playAnim("amb@world_human_clipboard@male@idle_a", "idle_c");
  setTimeout(() => player.stopAnim(), 4000);
}

player.holdAnim

Bir animasyonu sen durdurana kadar oynatmaya devam eder; bir düşme ya da çarpma onu kestiğinde yeniden başlatır. Prop’larla birlikte Ped’ler, blip’ler ve prop’lar sayfasında belgelenir.

Kararmalar ve diğer oyuncular

fadeOut

Ekranı siyaha karartır ve tamamen siyah olana kadar bekler. Bir ışınlanmayı, bir model değişimini ya da bir sahne değişikliğini gizlemek için kullan.

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

Signature
fadeOut(ms?: number): Promise<void>
Lua
aiLib.fadeOut(ms) -- bir thread içinde çağır

Parametreler

Prop

Type

Dönüş değeri

Ekran siyah olduğunda ya da en geç ms + 2 saniye sonra çözülen Promise<void>. Asla reddedilmez.

Örnek

import { fadeIn, fadeOut } from "@aicore-fivem/lib/client";

export async function moveToSquare(): Promise<void> {
  await fadeOut();
  SetEntityCoords(PlayerPedId(), -269.4, -955.3, 31.2, false, false, false, false);
  await fadeIn();
}

fadeIn

Ekranı yeniden açar ve netleşene kadar bekler. fadeOut’un eşi.

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

Signature
fadeIn(ms?: number): Promise<void>
Lua
aiLib.fadeIn(ms) -- bir thread içinde çağır

Parametreler

Prop

Type

Dönüş değeri

Ekran netleştiğinde ya da en geç ms + 2 saniye sonra çözülen Promise<void>. Asla reddedilmez.

Örnek

Bkz. fadeOut: ikisi her zaman birlikte kullanılır.

playerPed

Server id’ye göre bir oyuncunun ped’i. Yerel oyuncu için cache.ped döndürür; başka bir oyuncu için, o oyuncu bu client’a stream edilecek kadar yakın değilse 0 döndürür.

Taraf: Client · Bekler: hayır

Signature
playerPed(serverId: number): number
Lua
local ped = aiLib.playerPed(serverId)

Parametreler

Prop

Type

Dönüş değeri

number: ped handle’ı ya da oyuncu bu client’ta menzilde değilse 0.

Örnek

import { onServerEvent, playerPed } from "@aicore-fivem/lib/client";

// Server yakındaki herkese bir oyuncunun kelepçelendiğini söyler.
onServerEvent(
  "myscript:cuffed",
  { args: ([id]) => (typeof id === "number" ? [id] : null) },
  (id) => {
    const ped = playerPed(id);
    if (ped !== 0) SetEnableHandcuffs(ped, true);
  },
);

GetPlayerPed(-1) ya da GetPlayerPed(GetPlayerFromServerId(id))’yi asla elle kullanma: bilinmeyen bir id -1 verir ve GetPlayerPed(-1) yerel ped’dir; böylece aksiyon yanlış oyuncuya uygulanır.

nearestPlayer

Belirli bir mesafe içindeki en yakın diğer oyuncu, server id olarak. Yalnızca bu client’a stream edilen oyuncuları dolaşır. Verme, arama, kelepçeleme ya da yere yatırma aksiyonlarının hedefini seçmek için kullan, sonra o id’yi mesafeyi tekrar kontrol eden server’a gönder.

Taraf: Client · Bekler: hayır

Signature
nearestPlayer(metres: number, options?: { from?: Vec3; filter?: (serverId: number, ped: number) => boolean }): number | null
Lua
local serverId = aiLib.nearestPlayer(metres, options) -- integer ya da nil

Parametreler

Prop

Type

Seçenekler

Prop

Type

Dönüş değeri

number | null: filter’dan geçen en yakın oyuncunun server id’si ya da metres içinde kimse yoksa null (Lua’da nil). Yerel oyuncu asla döndürülmez.

Örnek

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

RegisterCommand(
  "givecash",
  async (_src: number, args: string[]) => {
    const target = nearestPlayer(3, { filter: (_id, ped) => !IsPedInAnyVehicle(ped, false) });
    if (target === null) return notify("Nobody is close enough", "error");
    await callAction("myscript:give", [target, Number(args[0])], { fallback: "GIVE_FAILED" });
  },
  false,
);

Bu sayfada