Dados do painel
num, int, bool, str, record, vec4, spec, readRecords e withoutSchemaKey: ler os arquivos data/*.json que o painel de administração edita.
As configurações do seu script ficam em arquivos data/*.json que o dono do servidor edita no painel de administração do ai-core (veja Painel de administração). O painel verifica os valores contra o seu schema.ts, mas um arquivo ainda pode estar antigo, editado à mão ou sem um campo. Os leitores desta página nunca recusam: um valor ausente ou errado dá o valor de reserva que você passa, então o script sempre inicia.
Para valores que um cliente envia, use os leitores rígidos de Ações e entrada do cliente: esses recusam um valor inválido.
import { num, int, bool, str, record, vec4, spec, readRecords, withoutSchemaKey } from "@aicore-fivem/lib/shared";Lua: nenhum destes tem equivalente em Lua (o painel de administração e os arquivos de dados dele são só TypeScript).
Leitores de valores
num
Um número finito limitado a [min, max], senão o valor de reserva.
Lado: Cliente, servidor e NUI · Espera: não
num(value: unknown, fallback: number, min?: number, max?: number): numberParâmetros
Prop
Type
Retorno
number: o valor limitado à faixa, ou fallback (sem limitar).
Exemplo
import { num } from "@aicore-fivem/lib/shared";
num(25, 2.5, 1, 20); // 20 (limitado)
num("big", 2.5, 1, 20); // 2.5 (valor de reserva)int
Como num, depois arredondado para um número inteiro.
Lado: Cliente, servidor e NUI · Espera: não
int(value: unknown, fallback: number, min?: number, max?: number): numberParâmetros
Prop
Type
Retorno
number: um número inteiro (o valor de reserva também é arredondado).
Exemplo
import { int } from "@aicore-fivem/lib/shared";
int(12.6, 10, 0, 100); // 13
int(null, 10, 0, 100); // 10bool
Um booleano, senão o valor de reserva.
Lado: Cliente, servidor e NUI · Espera: não
bool(value: unknown, fallback: boolean): booleanParâmetros
Prop
Type
Retorno
boolean.
Exemplo
import { bool } from "@aicore-fivem/lib/shared";
bool(true, false); // true
bool("yes", false); // false (valor de reserva)str
Uma string sem espaços nas pontas, não vazia, cortada em max caracteres, senão o valor de reserva.
Lado: Cliente, servidor e NUI · Espera: não
str(value: unknown, fallback: string, max?: number): stringParâmetros
Prop
Type
Retorno
string.
Exemplo
import { str } from "@aicore-fivem/lib/shared";
str(" City Hall ", "Hall", 48); // "City Hall"
str("", "Hall", 48); // "Hall"record
O valor como objeto simples, ou um objeto vazio {}. Use antes de ler campos de um valor que pode estar ausente.
Lado: Cliente, servidor e NUI · Espera: não
record(value: unknown): Record<string, unknown>Parâmetros
Prop
Type
Retorno
O próprio value quando é um objeto simples, senão um novo {} (também para arrays e null).
Exemplo
import { num, record } from "@aicore-fivem/lib/shared";
function readCoords(raw: unknown) {
const c = record(raw); // {} quando o campo está ausente
return { x: num(c.x, 0), y: num(c.y, 0), z: num(c.z, 0) };
}vec4
Uma posição com heading; cada campo ausente ou errado vem do valor de reserva.
Lado: Cliente, servidor e NUI · Espera: não
vec4(value: unknown, fallback: Vec4): Vec4Parâmetros
Prop
Type
Retorno
Um novo Vec4.
Exemplo
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 }Helpers de schema
spec
Construtores para campos numéricos no schema.ts do seu painel, para que você não escreva o mesmo objeto DataSpec à mão.
Lado: Cliente, servidor e NUI · Espera: não
spec.int(min: number, max: number, optional?: boolean): DataSpec
spec.num(min: number, max: number, optional?: boolean): DataSpecParâmetros
Prop
Type
Retorno
DataSpec: { type: "number", min, max }, mais integer: true para spec.int e optional: true quando pedido.
Exemplo
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: [], // o layout do painel (cards e campos), veja Painel de administração
};withoutSchemaKey
Remove a chave "$schema" do conteúdo de um arquivo de dados. A chave só existe para que os editores de código possam verificar o arquivo; o seu leitor não deveria vê-la.
Lado: Cliente, servidor e NUI · Espera: não
withoutSchemaKey(value: unknown): unknownParâmetros
Prop
Type
Retorno
Uma cópia sem $schema quando o valor é um objeto que a tem; caso contrário value sem mudanças.
Exemplo
import { withoutSchemaKey } from "@aicore-fivem/lib/shared";
withoutSchemaKey({ $schema: "./schemas/shops.schema.json", legion: { label: "Legion" } });
// { legion: { label: "Legion" } }Arquivos de records
Um arquivo records guarda muitas entradas por chave ({ "legion": {...}, "pillbox": {...} }): lojas, garagens, prefeituras. Cada entrada é lida pela sua própria função leitora (RecordReader<T> = (key: string, raw: Record<string, unknown>) => T | null), construída com os leitores de valores acima.
readRecords
Lê um arquivo de records inteiro uma vez para um Map, uma entrada por chave, pelo seu leitor. Entradas que não são objetos, ou para as quais o seu leitor retorna null, ficam de fora.
Lado: Cliente, servidor e NUI · Espera: não
readRecords<T>(raw: unknown, readOne: RecordReader<T>): Map<string, T>Parâmetros
Prop
Type
Retorno
Map<string, T>: as entradas interpretadas por chave.
Exemplo
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 }Para um arquivo do painel, prefira panel.records(file, readOne) (AdminPanel do servidor) ou world.records(file, readOne) (AdminWorld do cliente): eles retornam um mapa que fica atualizado enquanto o dono edita, interpretando só a entrada alterada.
RecordObjects
Mantém os objetos do mundo de um arquivo de records (pontos, blips, peds, zonas) em sincronia com o painel, uma entrada por vez: uma entrada editada reconstrói só os próprios objetos. É exportado de @aicore-fivem/lib/shared e não tem equivalente em Lua. A referência completa (construtor, função build, rebuild, rebuildAll, exemplo) está em Pontos de interação: RecordObjects.
Veículos
plateOf, normalizePlate, vehicleTypeOfClass, toVehicleProps e toVehicleSetup: placas como chaves, tipos de spawn, e visuais de veículo a partir de dados não confiáveis.
Acesso, blips e NPCs de lugares
readAccess, isPublic, decideAccess, ACCESS_FIELDS, accessFields, readBlipStyle, BLIP_STYLE_FIELDS, PLACE_PED_SPEC, placePedFields e readPlacePed: as partes de painel que todo lugar compartilha.