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
const cache: PlayerCache // salt okunurlocal ped = aiLib.cache.pedAnahtarlar
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
onCache<K extends keyof PlayerCache>(key: K, handler: (value: PlayerCache[K], old: PlayerCache[K]) => void): voidaiLib.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
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
readWeapon(ped: number): number | falseLua 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
player.ped: number // salt okunur özellikLua 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
player.coords(): Vec3local coords = aiLib.player.coords() -- vector3Dö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
player.heading(): numberlocal 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
player.distanceTo(point: Vec3): numberlocal 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
player.freeze(state: boolean): voidaiLib.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)
player.teleport(to: { x: number; y: number; z?: number }, options?: TeleportOptions): Promise<void>aiLib.player.teleport(to, options) -- bir thread içinde çağırParametreler
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
player.playAnim(dict: string, clip: string, options?: AnimOptions): Promise<void>aiLib.player.playAnim(dict, clip, options) -- bir thread içinde çağırParametreler
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
player.stopAnim(): voidaiLib.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)
fadeOut(ms?: number): Promise<void>aiLib.fadeOut(ms) -- bir thread içinde çağırParametreler
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)
fadeIn(ms?: number): Promise<void>aiLib.fadeIn(ms) -- bir thread içinde çağırParametreler
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
playerPed(serverId: number): numberlocal 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
nearestPlayer(metres: number, options?: { from?: Vec3; filter?: (serverId: number, ped: number) => boolean }): number | nulllocal serverId = aiLib.nearestPlayer(metres, options) -- integer ya da nilParametreler
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,
);Server ile konuşmak
Server’a sor ve cevabını bekle, çevrilmiş reddetmelerle server aksiyonları çalıştır, server event’lerini dinle ve server callback’lerine cevap ver.
Etkileşim noktaları
Points - oyuncunun kullandığı her yer (tezgahlar, marketler, kapılar, NPC’ler, ATM’ler, araç bagajları), bir prompt ya da target seçeneği olarak; ped’ler, blip’ler ve panel kayıtlarından kurulan noktalarla.