AI Core
API başvurusuLib: shared ve fivem

Panel verisi

num, int, bool, str, record, vec4, spec, readRecords ve withoutSchemaKey: admin panelinin düzenlediği data/*.json dosyalarını okumak.

Script’inin ayarları, sunucu sahibinin ai-core’un admin panelinde düzenlediği data/*.json dosyalarında durur (bkz. Admin paneli). Panel değerleri schema.ts’ine göre kontrol eder, ama bir dosya yine de eski, elle düzenlenmiş ya da bir alanı eksik olabilir. Bu sayfadaki okuyucular asla reddetmez: eksik ya da yanlış bir değer verdiğin yedeği verir; böylece script her zaman başlar.

Bir client’ın gönderdiği değerler için bunun yerine Aksiyonlar ve client girdisi sayfasındaki katı okuyucuları kullan: onlar hatalı bir değeri reddeder.

TypeScript
import { num, int, bool, str, record, vec4, spec, readRecords, withoutSchemaKey } from "@aicore-fivem/lib/shared";

Lua: bunların hiçbirinin Lua karşılığı yok (admin paneli ve veri dosyaları yalnızca TypeScript’tir).

Değer okuyucular

num

[min, max] aralığına sıkıştırılmış sonlu bir sayı, yoksa yedek.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
num(value: unknown, fallback: number, min?: number, max?: number): number

Parametreler

Prop

Type

Dönüş değeri

number: aralığa sıkıştırılmış değer ya da fallback (sıkıştırılmaz).

Örnek

import { num } from "@aicore-fivem/lib/shared";

num(25, 2.5, 1, 20);      // 20 (sıkıştırıldı)
num("big", 2.5, 1, 20);   // 2.5 (yedek)

int

num gibi, sonra bir tam sayıya yuvarlanır.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
int(value: unknown, fallback: number, min?: number, max?: number): number

Parametreler

Prop

Type

Dönüş değeri

number: bir tam sayı (yedek de yuvarlanır).

Örnek

import { int } from "@aicore-fivem/lib/shared";

int(12.6, 10, 0, 100); // 13
int(null, 10, 0, 100); // 10

bool

Bir boolean, yoksa yedek.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
bool(value: unknown, fallback: boolean): boolean

Parametreler

Prop

Type

Dönüş değeri

boolean.

Örnek

import { bool } from "@aicore-fivem/lib/shared";

bool(true, false);   // true
bool("yes", false);  // false (yedek)

str

max karaktere kesilmiş, kırpılmış, boş olmayan bir string, yoksa yedek.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
str(value: unknown, fallback: string, max?: number): string

Parametreler

Prop

Type

Dönüş değeri

string.

Örnek

import { str } from "@aicore-fivem/lib/shared";

str("  City Hall ", "Hall", 48); // "City Hall"
str("", "Hall", 48);             // "Hall"

record

Düz bir nesne olarak değer ya da boş bir nesne {}. Eksik olabilecek bir değerin alanlarını okumadan önce kullan.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
record(value: unknown): Record<string, unknown>

Parametreler

Prop

Type

Dönüş değeri

Düz bir nesneyse value’nun kendisi, aksi halde yeni bir {} (diziler ve null için de).

Örnek

import { num, record } from "@aicore-fivem/lib/shared";

function readCoords(raw: unknown) {
  const c = record(raw); // alan eksikse {}
  return { x: num(c.x, 0), y: num(c.y, 0), z: num(c.z, 0) };
}

vec4

Heading’li bir konum; eksik ya da yanlış her alan yedekten gelir.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
vec4(value: unknown, fallback: Vec4): Vec4

Parametreler

Prop

Type

Dönüş değeri

Yeni bir Vec4.

Örnek

import { vec4 } from "@aicore-fivem/lib/shared";

vec4({ x: 10, y: 20, z: 30 }, { x: 0, y: 0, z: 0, heading: 90 }); // { x: 10, y: 20, z: 30, heading: 90 }

Şema yardımcıları

spec

Panel schema.ts’indeki sayı alanları için kurucular; böylece aynı DataSpec nesnesini elle yazmazsın.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
spec.int(min: number, max: number, optional?: boolean): DataSpec
spec.num(min: number, max: number, optional?: boolean): DataSpec

Parametreler

Prop

Type

Dönüş değeri

DataSpec: { type: "number", min, max }, artı spec.int için integer: true ve istendiğinde optional: true.

Örnek

resource/server/schema.ts
import { spec } from "@aicore-fivem/lib/shared";
import type { PanelSchema } from "@aicore-fivem/shared";

export const schema: PanelSchema = {
  title: "ADMIN_TITLE",
  icon: "store",
  files: {
    settings: {
      kind: "settings",
      sync: "admin",
      sections: {
        prices: { type: "object", fields: { water: spec.int(0, 1_000_000), tax: spec.num(0, 0.5) } },
      },
    },
  },
  tabs: [], // panel düzeni (kartlar ve alanlar), bkz. Admin paneli
};

withoutSchemaKey

Bir veri dosyasının içeriğinden "$schema" anahtarını kaldırır. Anahtar yalnızca kod editörlerinin dosyayı kontrol edebilmesi için oradadır; okuyucun onu görmemelidir.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
withoutSchemaKey(value: unknown): unknown

Parametreler

Prop

Type

Dönüş değeri

Değer onu içeren bir nesneyse $schema olmadan bir kopya; aksi halde value değişmeden.

Örnek

import { withoutSchemaKey } from "@aicore-fivem/lib/shared";

withoutSchemaKey({ $schema: "./schemas/shops.schema.json", legion: { label: "Legion" } });
// { legion: { label: "Legion" } }

Records dosyaları

Bir records dosyası anahtara göre çok sayıda girdi tutar ({ "legion": {...}, "pillbox": {...} }): marketler, garajlar, belediye binaları. Her girdi, yukarıdaki değer okuyucularıyla kurulan kendi okuyucu fonksiyonunla okunur (RecordReader<T> = (key: string, raw: Record<string, unknown>) => T | null).

readRecords

Bütün bir records dosyasını okuyucun aracılığıyla bir kez, anahtar başına bir girdi olacak şekilde bir Map’e okur. Nesne olmayan ya da okuyucunun null döndürdüğü girdiler dışarıda bırakılır.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
readRecords<T>(raw: unknown, readOne: RecordReader<T>): Map<string, T>

Parametreler

Prop

Type

Dönüş değeri

Map<string, T>: anahtara göre ayrıştırılmış girdiler.

Örnek

import { readRecords, str, num, record } from "@aicore-fivem/lib/shared";

type Shop = { label: string; x: number; y: number; z: number };

const readShop = (key: string, v: Record<string, unknown>): Shop => {
  const c = record(v.coords);
  return { label: str(v.label, key, 48), x: num(c.x, 0), y: num(c.y, 0), z: num(c.z, 0) };
};

const shops = readRecords({ legion: { label: "Legion", coords: { x: 25.7, y: -1347.3, z: 29.5 } } }, readShop);
shops.get("legion"); // { label: "Legion", x: 25.7, y: -1347.3, z: 29.5 }

Bir panel dosyası için panel.records(file, readOne) (server AdminPanel) ya da world.records(file, readOne) (client AdminWorld) tercih et: sahip düzenlerken güncel kalan ve yalnızca değişen girdiyi ayrıştıran bir map döndürürler.

RecordObjects

Bir records dosyasının dünya nesnelerini (noktalar, blip’ler, ped’ler, bölgeler) her seferinde bir girdi olacak şekilde panelle uyumlu tutar: düzenlenen bir girdi yalnızca kendi nesnelerini yeniden kurar. @aicore-fivem/lib/shared’dan export edilir ve Lua karşılığı yoktur. Tam başvurusu (constructor, build fonksiyonu, rebuild, rebuildAll, örnek) Etkileşim noktaları: RecordObjects sayfasındadır.

Bu sayfada