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.
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
num(value: unknown, fallback: number, min?: number, max?: number): numberParametreler
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
int(value: unknown, fallback: number, min?: number, max?: number): numberParametreler
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); // 10bool
Bir boolean, yoksa yedek.
Taraf: Client, server ve NUI · Bekler: hayır
bool(value: unknown, fallback: boolean): booleanParametreler
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
str(value: unknown, fallback: string, max?: number): stringParametreler
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
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
vec4(value: unknown, fallback: Vec4): Vec4Parametreler
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
spec.int(min: number, max: number, optional?: boolean): DataSpec
spec.num(min: number, max: number, optional?: boolean): DataSpecParametreler
Prop
Type
Dönüş değeri
DataSpec: { type: "number", min, max }, artı spec.int için integer: true ve istendiğinde optional: true.
Örnek
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
withoutSchemaKey(value: unknown): unknownParametreler
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
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.
Araçlar
plateOf, normalizePlate, vehicleTypeOfClass, toVehicleProps ve toVehicleSetup: anahtar olarak plakalar, spawn tipleri ve güvenilmeyen veriden araç görünümleri.
Erişim, blip’ler ve yer NPC’leri
readAccess, isPublic, decideAccess, ACCESS_FIELDS, accessFields, readBlipStyle, BLIP_STYLE_FIELDS, PLACE_PED_SPEC, placePedFields ve readPlacePed: her yerin paylaştığı panel parçaları.