ai-lib arayüz event’leri
Bir oyuncu bir menüyü, girdi diyaloğunu, eşya seçiciyi, mini oyunu ya da istemi cevapladığında veya bir ilerleme çubuğunu iptal ettiğinde ai-lib’in tetiklediği client event’leri - ai-lib’in export’larını kendileri çağıran script’ler için.
ai-lib ortak oyuncu arayüzünü çizer: menüler, girdi diyalogları, istemler, ilerleme çubuğu, mini oyunlar, bildirimler. Oyuncu cevap verdiğinde ai-lib bu client local event’lerinden birini tetikler.
Çoğu script onları asla dinlemez. Lib’in menu, input, itemPicker, skillCheck, lockpick, onPromptPressed ve progress’i (ve aiLib üzerindeki aynı adlar) arayüzü açar, cevabı dinler ve sana dönüş değeri olarak verir. Yalnızca ai-lib’in export’larını (OpenMenu, OpenInput, OpenMinigame) ya da ai-core’un OpenItemPicker’ını doğrudan çağırdığında kendin dinle.
Her cevap arayüzü açan resource’u ve onun seçtiği istek id’sini taşır. İkisini de kontrol et: client’taki her resource her cevabı duyar.
ai-lib:client:menuResult
Oyuncu bir menü öğesi seçti ya da menüyü kapattı. Aynı event ai-core’un eşya seçicisini ve ai-lib’in mini oyunlarını da cevaplar.
Taraf: Client · Sabit: MENU_EVENTS.menuResult
Argümanlar
Prop
Type
Dinleyici
import { resourceExport } from "@aicore-fivem/lib/client";
import { MENU_EVENTS } from "@aicore-fivem/shared";
const ui = resourceExport("ai-lib");
const me = GetCurrentResourceName();
let nextId = 0;
const waiting = new Map<number, (value: unknown) => void>();
on(MENU_EVENTS.menuResult, (resource: string, requestId: number, value: unknown) => {
if (resource !== me) return;
waiting.get(requestId)?.(value);
waiting.delete(requestId);
});
// Lib’in menu()’sü tam olarak bunu yapar; event’i açıklamak için burada gösterilmiştir.
export function pickColor(): Promise<string | null> {
const id = ++nextId;
return new Promise((resolve) => {
waiting.set(id, (value) => resolve(typeof value === "string" ? value : null));
ui.OpenMenu(id, {
title: "Color",
items: [
{ id: "red", label: "Red" },
{ id: "blue", label: "Blue" },
],
});
});
}ai-lib:client:menuHover
İşaretçi ya da klavye odağı bir menü öğesinin üstüne geldi. Önizlemeler için kullan (oyuncu üstüne geldiğinde bir araç rengini göstermek). Menü açık kalır.
Taraf: Client · Sabit: MENU_EVENTS.menuHover · Lib: menu(request, { onHover })
Argümanlar
Prop
Type
Dinleyici
import { menu } from "@aicore-fivem/lib/client";
// Lib kendi menüsünün hover’larını onHover’a verir.
export async function chooseColor(): Promise<string | null> {
return menu(
{ title: "Color", items: [{ id: "red", label: "Red" }, { id: "blue", label: "Blue" }] },
{ onHover: (item) => console.log(`previewing ${item}`) },
);
}ai-lib:client:menuToggle
Oyuncu bir anahtar satırını (checked olan bir öğe) çevirdi. Anahtar yerinde çevrilir ve menü açık kalır.
Taraf: Client · Sabit: MENU_EVENTS.menuToggle · Lib: menu(request, { onToggle })
Argümanlar
Prop
Type
Dinleyici
import { menu } from "@aicore-fivem/lib/client";
let sounds = true;
export async function openSettings(): Promise<void> {
await menu(
{ title: "Settings", items: [{ id: "sounds", label: "Sounds", checked: sounds }] },
{ onToggle: (item, checked) => { if (item === "sounds") sounds = checked; } },
);
}ai-lib:client:inputResult
Oyuncu bir girdi diyaloğunu onayladı ya da kapattı.
Taraf: Client · Sabit: MENU_EVENTS.inputResult · Lib: input(request)
Argümanlar
Prop
Type
Dinleyici
import { input } from "@aicore-fivem/lib/client";
// Lib’in input()’u ai-lib:client:inputResult’u senin için dinler.
export async function askName(): Promise<string | null> {
const values = await input({
title: "Rename",
confirm: "Save",
fields: [{ name: "name", label: "Name", type: "text", maxLength: 32 }],
});
return values && typeof values.name === "string" ? values.name : null;
}ai-lib:client:promptPressed
Listenin en üstünde bir istem varken oyuncu etkileşim tuşuna bastı. Yalnızca o istemi gösteren resource tepki vermelidir.
Taraf: Client · Sabit: LIB_UI.promptPressedEvent · Lib: onPromptPressed(handler)
Argümanlar
Prop
Type
Dinleyici
import { onPromptPressed, showPrompt } from "@aicore-fivem/lib/client";
showPrompt("atm", "Use ATM");
// onPromptPressed senin için resource’una göre süzer.
onPromptPressed((id) => {
if (id === "atm") console.log("open the ATM");
});ai-lib:client:cancelProgress
İlerleme çubuğu görünürken oyuncu ai-lib’in iptal tuşuna bastı. Lib’in canCancel: true ile progress’i dinler ve çubuğu false ile bitirir.
Taraf: Client · Sabit: LIB_UI.cancelProgressEvent
Argümanlar
Yok.
Dinleyici
import { LIB_UI } from "@aicore-fivem/shared";
// Yalnızca lib’in progress()’i yerine ai-lib’in ShowProgress’ini kendin çalıştırıyorsan gerekir.
on(LIB_UI.cancelProgressEvent, () => console.log("player cancelled the bar"));Dahili ai-lib event’leri
Lib’in Zones ve Points’i kontrollerini ai-lib’e verir ve bunlar üzerinden cevap duyar. Onları tetikleme; Zones ve Points kullan.
| Event | Sabit | Argümanlar |
|---|---|---|
ai-lib:client:zone | LIB_UI.zoneEvent | (owner: string, key: string, inside: boolean) oyuncu ai-lib’in owner için kontrol ettiği bir bölgeye girdi ya da çıktı. |
ai-lib:client:modelPoint | LIB_UI.modelPointEvent | (owner: string, key: string, entity: number) bir model noktasının en yakın nesnesi değişti (0 = yakında yok). |
Net event’ler
Bir client script’inin dinleyebileceği net event’ler (ai-core’un oyuncu verisi kanalı) ve diğer script’lerin tetiklememesi gereken ai-core’un kendi ağ trafiği.
State bag’ler
ai-core’un ve ai-* script’lerinin yayımladığı ortak durum değerleri - oyuncu bag’leri, araç bag’leri ve GlobalState anahtarları - her birinin ne tuttuğu, kimin yazdığı ve nasıl okunup izleneceği.