AI Core
API başvurusuai-core client export’ları

Oyuncu

Yerel oyuncunun karakterini, parasını, mesleklerini, mesaisini ve çetelerini oku, bir karakterin yüklü olup olmadığını kontrol et ve meslek ve çete tanımlarını oku.

Bu export’lar ai-core’un bu oyunun başındaki oyuncu hakkında bildiklerini okur: karakteri, parası, meslekleri ve çeteleri. Server bu veriyi karakter yüklendiğinde oyuncunun kendi client’ına bir kez gönderir, sonra yalnızca değişen değerleri. Başka hiçbir oyuncunun verisi asla bu client’a ulaşmaz.

TypeScript’te GetPlayerData’yı tekrar tekrar çağırmak yerine lib’in getPlayerData(key) ve onPlayerData(key, handler)’ını kullan. Lua’da aiLib.playerData.get(key) ve aiLib.playerData.onChange(key, handler) kullan. Export’u bir kez okurlar, sonra ai-core’un gönderdiği her değişikliği izlerler.

GetPlayerData

ai-core’un yerel oyuncunun yüklü karakteri hakkında bildiği her şeyi tek tabloda döndürür: karakter, para, meslekler, mesai, ana meslek, çeteler, aktif çete ve metadata. Resource’un başladığında veriyi bir kez okumak için kullan; değişiklikleri onPlayerData (TS) ya da aiLib.playerData.onChange (Lua) ile izle.

Taraf: Client · Bekler: hayır

İmza
GetPlayerData(): AiPlayerData | null
Lua
local data = exports['ai-core']:GetPlayerData() -- tablo ya da nil

Parametreler

Yok.

Dönüş değeri

Bir karakter dünyada dururken AiPlayerData; karakter ekranında, ilk karakter yüklenmeden önce ve oyuncu karakter ekranına döndükten sonra null (Lua’da nil).

Prop

Type

Örnek

resource/client/index.ts
import { getPlayerData, onPlayerData } from "@aicore-fivem/lib/client";

// Oyuncu polis olarak mesaideyken yalnızca polise özel bir blip gösterir.
let blip = 0;

function updateBlip(duty: string | null): void {
  if (duty === "police" && blip === 0) {
    blip = AddBlipForCoord(441.8, -982.0, 30.7); // Mission Row polis karakolu
    SetBlipSprite(blip, 60);
  } else if (duty !== "police" && blip !== 0) {
    RemoveBlip(blip);
    blip = 0;
  }
}

// Bir kez oku (lib senin için ai-core’un GetPlayerData’sına sorar), sonra her değişikliği izle.
updateBlip(getPlayerData("duty") ?? null);
onPlayerData("duty", (duty) => updateBlip(duty));

Bu, ekranda bir şeyler göstermek için oyuncunun kendi kopyasıdır. Server’ın güvenmesi gereken hiçbir şeye (bir ödeme, bir eşya, bir stash’e erişim) asla buna göre karar verme: server kendi export’larıyla tekrar kontrol eder.

IsPlayerLoaded

Bu client’ta dünyada bir karakterin durup durmadığını söyler. Resource’un oyuncu zaten yüklendikten sonra başlayabilecekken, karakter gerektiren herhangi bir şeyi (bir HUD, bir meslek döngüsü) başlatmadan önce kullan.

Taraf: Client · Bekler: hayır

İmza
IsPlayerLoaded(): boolean
Lua
local loaded = exports['ai-core']:IsPlayerLoaded() -- boolean

Parametreler

Yok.

Dönüş değeri

boolean: karakter dünyaya konduktan sonra true; karakter ekranında, oyuncu bir doğma noktası seçerken ve karakter ekranına döndükten sonra false.

Örnek

resource/client/index.ts
import { resourceExport } from "@aicore-fivem/lib/client";
import { CORE } from "@aicore-fivem/shared";

const core = resourceExport("ai-core");

function start(): void {
  console.log("character ready, starting the job loop");
}

// Oyuncu bu resource başlamadan önce yüklenmiş olabilir (bir restart): önce kontrol et, sonra dinle.
if (core.IsPlayerLoaded()) start();
on(CORE.clientPlayerLoadedEvent, start);

GetDefinitions

Admin panelinin sakladığı haliyle her mesleği ya da her çeteyi döndürür (etiketler, rütbeler ve panelin düzenlediği diğer alanlar). Framework köprüleri ESX / QB meslek tablolarını kurmak için bunu kullanır. Bir kez oku, sonra panelin değiştirdiği her meslek ya da çete için tetiklenen ai-core:client:definitions client event’ini izle.

Taraf: Client · Bekler: hayır

İmza
GetDefinitions(file: "jobs" | "gangs"): Record<string, unknown> | null
Lua
local jobs = exports['ai-core']:GetDefinitions('jobs') -- meslek adına göre anahtarlanmış tablo ya da nil

Parametreler

Prop

Type

Dönüş değeri

Record<string, unknown>: adına göre anahtarlanmış (police, ambulance) meslek ya da çete başına bir kayıt. Kayıtlar panelin kendi verisidir ve kontrol edilmez. file ne "jobs" ne "gangs" ise null.

Örnek

resource/client/index.ts
import { resourceExport } from "@aicore-fivem/lib/client";
import { CORE } from "@aicore-fivem/shared";

const core = resourceExport("ai-core");

// Her mesleğin güncel tutulan yerel bir kopyası.
const jobs: Record<string, unknown> = { ...(core.GetDefinitions("jobs") ?? {}) };

on(CORE.clientDefinitionsEvent, (file: string, name: string, definition: unknown) => {
  if (file !== "jobs") return;
  if (definition === null) delete jobs[name];
  else jobs[name] = definition;
});

Server’da bir mesleğin ya da çetenin rütbe adları ve etiketleri için ai-core’un server export’larını ya da server lib’ini kullan; rütbeleri kontrol eden taraf server’dır.

Bu sayfada