AI Core
API başvurusuEvent’ler ve durum

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

resource/client/menu.ts
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

resource/client/preview.ts
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

resource/client/settings.ts
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

resource/client/rename.ts
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

resource/client/atm.ts
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

resource/client/index.ts
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.

EventSabitArgümanlar
ai-lib:client:zoneLIB_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:modelPointLIB_UI.modelPointEvent(owner: string, key: string, entity: number) bir model noktasının en yakın nesnesi değişti (0 = yakında yok).

Bu sayfada