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
GetPlayerData(): AiPlayerData | nulllocal data = exports['ai-core']:GetPlayerData() -- tablo ya da nilParametreler
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
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
IsPlayerLoaded(): booleanlocal loaded = exports['ai-core']:IsPlayerLoaded() -- booleanParametreler
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
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
GetDefinitions(file: "jobs" | "gangs"): Record<string, unknown> | nulllocal jobs = exports['ai-core']:GetDefinitions('jobs') -- meslek adına göre anahtarlanmış tablo ya da nilParametreler
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
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.