Dane panelu
num, int, bool, str, record, vec4, spec, readRecords i withoutSchemaKey: odczyt plików data/*.json edytowanych przez panel administratora.
Ustawienia twojego skryptu są w plikach data/*.json, które właściciel serwera edytuje w panelu administratora ai-core (zobacz Panel administratora). Panel sprawdza wartości względem twojego schema.ts, ale plik i tak może być stary, edytowany ręcznie albo nie mieć jakiegoś pola. Czytniki z tej strony nigdy nie odrzucają: brakująca albo zła wartość daje podaną przez ciebie wartość zastępczą, więc skrypt zawsze startuje.
Dla wartości wysyłanych przez klienta użyj zamiast tego ścisłych czytników ze strony Akcje i wejście z klienta: one odrzucają złą wartość.
import { num, int, bool, str, record, vec4, spec, readRecords, withoutSchemaKey } from "@aicore-fivem/lib/shared";Lua: żadna z nich nie ma odpowiednika w Lua (panel administratora i jego pliki danych są tylko dla TypeScript).
Czytniki wartości
num
Skończona liczba ograniczona do [min, max], w przeciwnym razie wartość zastępcza.
Strona: Klient, serwer i NUI · Czeka: nie
num(value: unknown, fallback: number, min?: number, max?: number): numberParametry
Prop
Type
Zwracana wartość
number: wartość ograniczona do zakresu albo fallback (nieograniczony).
Przykład
import { num } from "@aicore-fivem/lib/shared";
num(25, 2.5, 1, 20); // 20 (ograniczone)
num("big", 2.5, 1, 20); // 2.5 (wartość zastępcza)int
Jak num, potem zaokrąglona do liczby całkowitej.
Strona: Klient, serwer i NUI · Czeka: nie
int(value: unknown, fallback: number, min?: number, max?: number): numberParametry
Prop
Type
Zwracana wartość
number: liczba całkowita (wartość zastępcza też jest zaokrąglana).
Przykład
import { int } from "@aicore-fivem/lib/shared";
int(12.6, 10, 0, 100); // 13
int(null, 10, 0, 100); // 10bool
Wartość logiczna, w przeciwnym razie wartość zastępcza.
Strona: Klient, serwer i NUI · Czeka: nie
bool(value: unknown, fallback: boolean): booleanParametry
Prop
Type
Zwracana wartość
boolean.
Przykład
import { bool } from "@aicore-fivem/lib/shared";
bool(true, false); // true
bool("yes", false); // false (wartość zastępcza)str
Przycięty, niepusty string skrócony do max znaków, w przeciwnym razie wartość zastępcza.
Strona: Klient, serwer i NUI · Czeka: nie
str(value: unknown, fallback: string, max?: number): stringParametry
Prop
Type
Zwracana wartość
string.
Przykład
import { str } from "@aicore-fivem/lib/shared";
str(" City Hall ", "Hall", 48); // "City Hall"
str("", "Hall", 48); // "Hall"record
Wartość jako zwykły obiekt albo pusty obiekt {}. Używaj go przed odczytem pól wartości, której może brakować.
Strona: Klient, serwer i NUI · Czeka: nie
record(value: unknown): Record<string, unknown>Parametry
Prop
Type
Zwracana wartość
Sama value, gdy jest zwykłym obiektem, w przeciwnym razie nowy {} (także dla tablic i null).
Przykład
import { num, record } from "@aicore-fivem/lib/shared";
function readCoords(raw: unknown) {
const c = record(raw); // {}, gdy brakuje pola
return { x: num(c.x, 0), y: num(c.y, 0), z: num(c.z, 0) };
}vec4
Pozycja z kierunkiem; każde brakujące albo złe pole pochodzi z wartości zastępczej.
Strona: Klient, serwer i NUI · Czeka: nie
vec4(value: unknown, fallback: Vec4): Vec4Parametry
Prop
Type
Zwracana wartość
Nowy Vec4.
Przykład
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 }Funkcje schematu
spec
Konstruktory pól liczbowych w schema.ts twojego panelu, żebyś nie pisał ręcznie tego samego obiektu DataSpec.
Strona: Klient, serwer i NUI · Czeka: nie
spec.int(min: number, max: number, optional?: boolean): DataSpec
spec.num(min: number, max: number, optional?: boolean): DataSpecParametry
Prop
Type
Zwracana wartość
DataSpec: { type: "number", min, max }, plus integer: true dla spec.int i optional: true na żądanie.
Przykład
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: [], // układ panelu (karty i pola), zobacz Panel administratora
};withoutSchemaKey
Usuwa klucz "$schema" z zawartości pliku danych. Klucz jest tam tylko po to, żeby edytory kodu mogły sprawdzić plik; twój czytnik nie powinien go widzieć.
Strona: Klient, serwer i NUI · Czeka: nie
withoutSchemaKey(value: unknown): unknownParametry
Prop
Type
Zwracana wartość
Kopia bez $schema, gdy wartość jest obiektem, który go ma; w przeciwnym razie value bez zmian.
Przykład
import { withoutSchemaKey } from "@aicore-fivem/lib/shared";
withoutSchemaKey({ $schema: "./schemas/shops.schema.json", legion: { label: "Legion" } });
// { legion: { label: "Legion" } }Pliki rekordów
Plik rekordów trzyma wiele wpisów według klucza ({ "legion": {...}, "pillbox": {...} }): sklepy, garaże, ratusze. Każdy wpis jest czytany przez twoją własną funkcję czytnika (RecordReader<T> = (key: string, raw: Record<string, unknown>) => T | null), zbudowaną z czytników wartości wyżej.
readRecords
Czyta cały plik rekordów raz do Map, jeden wpis na klucz, przez twój czytnik. Wpisy, które nie są obiektami albo dla których twój czytnik zwraca null, są pomijane.
Strona: Klient, serwer i NUI · Czeka: nie
readRecords<T>(raw: unknown, readOne: RecordReader<T>): Map<string, T>Parametry
Prop
Type
Zwracana wartość
Map<string, T>: sparsowane wpisy według klucza.
Przykład
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 }Dla pliku panelu wybieraj raczej panel.records(file, readOne) (serwerowy AdminPanel) albo world.records(file, readOne) (kliencki AdminWorld): zwracają mapę, która pozostaje aktualna podczas edycji przez właściciela i parsuje tylko zmieniony wpis.
RecordObjects
Utrzymuje obiekty świata z pliku rekordów (punkty, blipy, pedy, strefy) zgodne z panelem, po jednym wpisie: edytowany wpis przebudowuje tylko własne obiekty. Jest eksportowany z @aicore-fivem/lib/shared i nie ma odpowiednika w Lua. Jego pełny opis (konstruktor, funkcja build, rebuild, rebuildAll, przykład) jest na stronie Punkty interakcji: RecordObjects.
Pojazdy
plateOf, normalizePlate, vehicleTypeOfClass, toVehicleProps i toVehicleSetup: tablice jako klucze, typy spawnu i wygląd pojazdu z niezaufanych danych.
Dostęp, blipy i NPC miejsc
readAccess, isPublic, decideAccess, ACCESS_FIELDS, accessFields, readBlipStyle, BLIP_STYLE_FIELDS, PLACE_PED_SPEC, placePedFields i readPlacePed: części panelu wspólne dla każdego miejsca.