ai-core üzerinden katmanlar
medical, appearance, gestures, seatbelt, fuel, mdt, radial, world ve inventory - sunucu hangi ölüm, kıyafet, emote, kemer, yakıt, MDT, radyal, hava ya da envanter script’ini çalıştırıyorsa ona ulaşan client çağrıları.
Bu nesneler asla belirli bir script ile konuşmaz. ai-core’a sorarlar ve ai-core, sunucunun o iş için çalıştırdığı script hangisiyse ona iletir: ai-death ya da başka bir ölüm script’i, ai-appearance ya da tgiann-clothing, desteklenen herhangi bir emote ya da radyal script’i. Sahip birini değiştirdiğinde script’in çalışmaya devam eder. Katmanların nasıl çalıştığı Katmanlar ve köprü sayfasındadır.
O türden hiçbir script çalışmıyorken çağrılar, her girdinin söylediği gibi false, null ya da oyunun kendi değeriyle cevap verir.
medical
medical.isDead
Hangi ölüm script’i çalışıyorsa, yerel oyuncunun yerde (ölü ya da son nefeste) olup olmadığı. Ölüm script’leri yerdeki bir ped’i canlandırmak için canlı tutar; bu yüzden tek başına IsEntityDead onları kaçırır. İlk çağrıdan sonra bir bellek okuması.
Taraf: Client · Bekler: hayır
medical.isDead(): booleanLua karşılığı yok: exports['ai-core']:IsDead() çağır ve yerel ai-core:client:dead (dead) event’ini dinle.
Dönüş değeri
boolean: ai-core’un medical katmanı oyuncunun yerde olduğunu söylüyorsa ya da ped oyun için ölüyse true.
Örnek
import { medical, notify } from "@aicore-fivem/lib/client";
RegisterCommand(
"phone",
() => {
if (medical.isDead()) return notify("You cannot use the phone now", "error");
SetNuiFocus(true, true);
},
false,
);medical.onChange
Yerel oyuncu yere düştüğünde ya da ayağa kalktığında bir handler çalıştırır.
Taraf: Client · Bekler: hayır
medical.onChange(fn: (dead: boolean) => void): voidLua karşılığı yok: AddEventHandler('ai-core:client:dead', function(dead) end).
Parametreler
Prop
Type
Dönüş değeri
void.
Örnek
import { medical, Points } from "@aicore-fivem/lib/client";
const points = new Points();
medical.onChange(() => points.refresh()); // canShow’u medical.isDead()’i okuyan noktalarappearance
Hangi kıyafet script’i çalışıyorsa, ai-core’un görünüm katmanı üzerinden ped’lerin görünümleri.
appearance.apply
Kayıtlı bir görünümü, görünümün modelindeki bir ped’e giydirir. Görünümü server’da appearance.get(charId) ile al, ped’i look.model ile oluştur, sonra uygula. Oyuncunun kendi ped’inde kıyafetlerini değiştirir.
Taraf: Client · Bekler: hayır
appearance.apply(ped: number, look: CharacterAppearance): booleanlocal ok = aiLib.appearance.apply(ped, look)Parametreler
Prop
Type
Tipi CharacterAppearance’dır.
Dönüş değeri
boolean: ped yok olduysa, model farklıysa ya da hiçbir kıyafet script’i çalışmıyorsa false.
Örnek
import { appearance, LocalPed, triggerServerCallback } from "@aicore-fivem/lib/client";
import type { CharacterAppearance } from "@aicore-fivem/shared";
// Bir karakterin, onun gibi giyinmiş uyuyan bir kopyası.
export async function showSleeper(charId: number): Promise<void> {
const look = (await triggerServerCallback("mysleep:look", [charId]).catch(() => null)) as CharacterAppearance | null;
if (!look) return;
new LocalPed({
model: look.model,
coords: { x: 151.2, y: -1004.6, z: 29.4, heading: 90 },
onSpawn: (ped) => appearance.apply(ped, look),
});
}Server’ın gönderdiğini tip dönüşümü yapmadan önce kontrol et. look.model’den başka bir modelle oluşturulan bir ped görünümü alamaz: apply false cevabını verir.
appearance.read
Bir ped’in şu an giydiği görünüm.
Taraf: Client · Bekler: hayır
appearance.read(ped: number): CharacterAppearance | nulllocal look = aiLib.appearance.read(ped) -- table ya da nilParametreler
Prop
Type
Dönüş değeri
CharacterAppearance | null: görünüm ya da kıyafet script’i bunu söyleyemiyorsa veya hiçbiri çalışmıyorsa null (Lua’da nil).
Örnek
import { appearance, cache } from "@aicore-fivem/lib/client";
const before = appearance.read(cache.ped); // daha sonra appearance.apply ile geri koyappearance.openMenu
Kıyafet script’inin kıyafet mağazasını, berberini ya da kayıtlı kıyafetlerini oyuncu için açar.
Taraf: Client · Bekler: hayır
appearance.openMenu(menu: ClothingMenu): booleanlocal ok = aiLib.appearance.openMenu(menu)Parametreler
Prop
Type
Tipi ClothingMenu’dür.
Dönüş değeri
boolean: kıyafet script’inin böyle bir menüsü yoksa ya da hiçbiri çalışmıyorsa false.
Örnek
import { appearance, Points } from "@aicore-fivem/lib/client";
const points = new Points();
points.add("barber", {
coords: { x: -814.3, y: -183.8, z: 37.6 },
label: "Barber",
onPressed: () => appearance.openMenu("barber"),
});appearance.wearOutfit
Oyuncuya reloadSkin’e kadar bir meslek kıyafeti (bir üniforma) giydirir. Kaydedilmez: yeniden bağlanmak ya da reloadSkin oyuncunun kendi kıyafetlerini geri verir. Yalnızca listelenen parçalar değişir.
Taraf: Client · Bekler: hayır
appearance.wearOutfit(outfit: JobOutfit): booleanlocal ok = aiLib.appearance.wearOutfit(outfit)Parametreler
Prop
Type
Tipler JobOutfit ve OutfitPiece’tir.
Dönüş değeri
boolean: yapamıyorsa (kıyafet script’i yok, desteklemediği bir model) false.
Örnek
import { appearance } from "@aicore-fivem/lib/client";
appearance.wearOutfit({
components: [
{ id: 11, collection: "", index: 55, texture: 0 },
{ id: 4, collection: "", index: 35, texture: 0 },
],
props: [{ id: 0, collection: "", index: -1, texture: 0 }],
});appearance.reloadSkin
Oyuncunun kayıtlı görünümünü geri giydirir (bir meslek kıyafetini çıkarır).
Taraf: Client · Bekler: hayır
appearance.reloadSkin(): booleanlocal ok = aiLib.appearance.reloadSkin()Dönüş değeri
boolean: kıyafet script’i yoksa false.
Örnek
import { appearance } from "@aicore-fivem/lib/client";
RegisterCommand("offduty", () => appearance.reloadSkin(), false);gestures
Hangi emote script’i çalışıyorsa, ai-core üzerinden eller yukarı, işaret etme ve emote’lar.
gestures.isHandsUp
Yerel oyuncunun ellerinin yukarıda olup olmadığı.
Taraf: Client · Bekler: hayır
gestures.isHandsUp(): booleanlocal up = aiLib.gestures.isHandsUp()Dönüş değeri
boolean: çalışan emote script’inde eller yukarıdayken true.
Örnek
import { gestures, onServerCallback } from "@aicore-fivem/lib/client";
// Server bir soygundan önce kurbanın teslim olup olmadığını sorar.
onServerCallback("myrob:surrendered", () => gestures.isHandsUp());gestures.isPointing
Yerel oyuncunun işaret edip etmediği.
Taraf: Client · Bekler: hayır
gestures.isPointing(): booleanlocal pointing = aiLib.gestures.isPointing()Dönüş değeri
boolean: işaret ederken true.
Örnek
if (gestures.isPointing()) return; // işaret etmenin üzerine bir emote başlatmagestures.provider
Eller yukarı ve işaret etmeye cevap veren emote script’i.
Taraf: Client · Bekler: hayır
gestures.provider(): string | nulllocal name = aiLib.gestures.provider()Dönüş değeri
string | null: resource adı ya da hiçbiri çalışmıyorsa null (nil).
Örnek
console.log(`hands up from ${gestures.provider() ?? "nothing"}`);gestures.playEmote
Çalışan emote script’inde bir emote’u komut adıyla (oyuncuların e’den sonra yazdığı) oynatır.
Taraf: Client · Bekler: hayır
gestures.playEmote(name: string): booleanlocal ok = aiLib.gestures.playEmote(name)Parametreler
Prop
Type
Dönüş değeri
boolean: emote script’i yoksa false.
Örnek
import { gestures } from "@aicore-fivem/lib/client";
RegisterCommand("hi", () => gestures.playEmote("wave"), false);gestures.cancelEmote
Oyuncunun oynattığı emote’u durdurur (kelepçelendi, yere düşürüldü).
Taraf: Client · Bekler: hayır
gestures.cancelEmote(): booleanlocal ok = aiLib.gestures.cancelEmote()Dönüş değeri
boolean: emote script’i yoksa false.
Örnek
onServerEvent("mypolice:cuffed", () => gestures.cancelEmote());gestures.emoteProvider
Emote’ları oynatan emote script’i (eller yukarıya cevap verenden farklı olabilir).
Taraf: Client · Bekler: hayır
gestures.emoteProvider(): string | nulllocal name = aiLib.gestures.emoteProvider()Dönüş değeri
string | null: resource adı ya da hiçbiri çalışmıyorsa null (nil).
Örnek
if (gestures.emoteProvider() === null) console.log("no emote script: skipping the emote");seatbelt
Hangi emniyet kemeri script’i çalışıyorsa, ai-core üzerinden yerel oyuncunun emniyet kemeri.
seatbelt.isOn
Kemerin takılı olup olmadığı. Her karede değil, gerektiğinde sor.
Taraf: Client · Bekler: hayır
seatbelt.isOn(): boolean | nulllocal worn = aiLib.seatbelt.isOn() -- boolean ya da nilDönüş değeri
boolean | null: true ya da false; hiçbir emniyet kemeri script’i cevap vermiyorsa null (nil).
Örnek
import { cache, notify, onCache, seatbelt } from "@aicore-fivem/lib/client";
onCache("vehicle", (vehicle) => {
if (vehicle !== false && seatbelt.isOn() === false) notify("Buckle up", "warning");
});seatbelt.onChange
Kemer değiştiğinde bir handler çalıştırır. Yalnızca değişiklikleri bildiren emniyet kemeri script’leri onu tetikler.
Taraf: Client · Bekler: hayır
seatbelt.onChange(fn: (worn: boolean | null) => void): voidaiLib.seatbelt.onChange(function(worn) end)Parametreler
Prop
Type
Dönüş değeri
void.
Örnek
seatbelt.onChange((worn) => SendNUIMessage({ action: "belt", data: worn === true }));seatbelt.provider
Cevap veren emniyet kemeri script’i.
Taraf: Client · Bekler: hayır
seatbelt.provider(): string | nulllocal name = aiLib.seatbelt.provider()Dönüş değeri
string | null: resource adı ya da hiçbiri cevap vermiyorsa null (nil).
Örnek
if (seatbelt.provider() === null) console.log("no seat belt script runs");fuel
fuel.get
Bir aracın yakıt seviyesi. Server, hangi yakıt script’i çalışırsa çalışsın her araç için bir fuel state bag’i tutar; bu yüzden bu bir bellek okumasıdır; o bag yoksa oyunun depo seviyesidir.
Taraf: Client · Bekler: hayır
fuel.get(vehicle: number): numberLua karşılığı yok: Entity(vehicle).state.fuel’i oku. Yakıt ayarlamak yalnızca server’dadır (Araçlar sayfasındaki fuel.set).
Parametreler
Prop
Type
Dönüş değeri
number: 0-100.
Örnek
import { cache, every, fuel } from "@aicore-fivem/lib/client";
every(1000, () => {
if (cache.vehicle !== false) SendNUIMessage({ action: "fuel", data: Math.round(fuel.get(cache.vehicle)) });
});mdt
mdt.open
Aktif polis MDT’sini yerel oyuncu için açar. MDT mesleği kendisi kontrol eder.
Taraf: Client · Bekler: hayır
mdt.open(): booleanlocal ok = aiLib.mdt.open()Dönüş değeri
boolean: hiçbir MDT çalışmıyorsa ya da dışarıdan açılamıyorsa false.
Örnek
import { mdt, notify } from "@aicore-fivem/lib/client";
RegisterCommand("mdt", () => {
if (!mdt.open()) notify("No MDT available", "error");
}, false);radial
Hangi radyal menü çalışıyorsa (ai-radialmenu ya da ai-core’un radyal katmanı üzerinden başka biri) üzerindeki öğeler. ai-core onları radyal yeniden başlatmalarında tutar ve resource’un durduğunda kaldırır: açılışta bir kez ekle.
radial.add
Çarka bir öğe ekler ya da aynı id’ye sahip öğenin yerine geçer.
Taraf: Client · Bekler: hayır
radial.add(item: RadialItem): voidaiLib.radial.add(item)Parametreler
Prop
Type
RadialItem
Prop
Type
Tipi RadialItem’dir.
Dönüş değeri
void.
Örnek
import { cache, createLocale, hasJob, radial } from "@aicore-fivem/lib/client";
import { RADIAL_VEHICLE } from "@aicore-fivem/shared";
const Locale = createLocale<typeof import("../../locales/en.json")>();
radial.add({
id: "myscript:engine",
label: Locale("ENGINE"),
icon: "power-off",
parent: RADIAL_VEHICLE,
keepOpen: true,
canShow: () => cache.seat === -1,
onPressed: () => {
if (cache.vehicle === false) return;
SetVehicleEngineOn(cache.vehicle, !GetIsVehicleEngineRunning(cache.vehicle), false, true);
},
});
radial.add({
id: "myscript:police",
label: Locale("POLICE"),
icon: "shield-halved",
canShow: () => hasJob(["police"]),
items: [
{ id: "myscript:cuff", label: Locale("CUFF"), icon: "handcuffs", onPressed: () => emitNet("mypolice:cuff") },
],
});radial.remove
Öğelerinden birini kaldırır. Bilinmeyen bir id hiçbir şey yapmaz.
Taraf: Client · Bekler: hayır
radial.remove(id: string): voidaiLib.radial.remove(id)Parametreler
Prop
Type
Dönüş değeri
void.
Örnek
radial.remove("myscript:engine");radial.refresh
Açık bir çarkın her canShow’unu yeniden okur. Çark açık olabilirken okudukları bir şey değiştikten sonra çağır.
Taraf: Client · Bekler: hayır
radial.refresh(): voidaiLib.radial.refresh()Dönüş değeri
void.
Örnek
onMembershipChange(() => radial.refresh());world
Hangi hava script’i çalışıyorsa onun hava ve saat senkronu; bir sebep geçerliyken duraklatılır.
world.pauseSync
Hava ve saat senkronunu bir sebeple duraklatır: bir iç mekânın içinde, bir sahne sırasında ya da script’in kendi havasını ayarlarken.
Taraf: Client · Bekler: hayır
world.pauseSync(reason: string): voidaiLib.world.pauseSync(reason)Parametreler
Prop
Type
Dönüş değeri
void.
Örnek
import { world } from "@aicore-fivem/lib/client";
export function enterApartment(): void {
world.pauseSync("apartment");
NetworkOverrideClockTime(12, 0, 0);
SetWeatherTypeNowPersist("EXTRASUNNY");
}
export function leaveApartment(): void {
world.resumeSync("apartment");
}world.resumeSync
Bir duraklatma sebebini kaldırır; hiçbir sebep kalmadığında senkron yeniden çalışır.
Taraf: Client · Bekler: hayır
world.resumeSync(reason: string): voidaiLib.world.resumeSync(reason)Parametreler
Prop
Type
Dönüş değeri
void. world.pauseSync örneğine bak.
inventory
ai-core’un envanter katmanı üzerinden yerel oyuncunun envanteri: server’ın seçtiği envanter cevap verir. Eşya vermek ve almak yalnızca server’dadır (Eşyalar).
inventory.openInventory
Oyuncunun kendi envanter ekranını açar.
Taraf: Client · Bekler: hayır
inventory.openInventory(): voidaiLib.inventory.openInventory()Dönüş değeri
void.
Örnek
import { inventory } from "@aicore-fivem/lib/client";
RegisterCommand("bag", () => inventory.openInventory(), false);inventory.hasItem
Oyuncunun bir eşyadan en az count tane tutup tutmadığı. Oyuncunun yalnızca yapabildiklerini görmesi için canShow içinde kullan; server tekrar kontrol eder.
Taraf: Client · Bekler: hayır
inventory.hasItem(item: string, count?: number): booleanlocal has = aiLib.inventory.hasItem(item, count)Parametreler
Prop
Type
Dönüş değeri
boolean: oyuncunun yeterince varsa true.
Örnek
import { inventory, Points } from "@aicore-fivem/lib/client";
const points = new Points();
points.addVehicle("lockpick", {
label: "Lockpick",
icon: "unlock",
canShow: (vehicle) => GetVehicleDoorLockStatus(vehicle) >= 2 && inventory.hasItem("lockpick"),
onPressed: (vehicle) => emitNet("mykeys:lockpick", NetworkGetNetworkIdFromEntity(vehicle)),
});inventory.currentWeapon
Oyuncunun elindeki silah eşyası: adı, etiketi ve resmi.
Taraf: Client · Bekler: hayır
inventory.currentWeapon(): HeldWeapon | nulllocal weapon = aiLib.inventory.currentWeapon() -- table ya da nilDönüş değeri
HeldWeapon { name: string; label: string; image?: string } (name WEAPON_PISTOL gibi, envanterin bir resmi varsa image bir nui:// url’si) ya da el boşsa null (nil).
Örnek
import { inventory, onCache } from "@aicore-fivem/lib/client";
// Silah değiştiğinde oku, asla her karede değil.
onCache("weapon", () => SendNUIMessage({ action: "weapon", data: inventory.currentWeapon() }));Keybind’ler
Keybind - oyuncunun GTA ayarlarında yeniden atayabildiği, varsayılan tuşunu sunucu sahibinin ai-core admin panelinde değiştirebildiği bir tuş.
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.