AI Core
Referencia de la APILib: compartido y fivem

Texto y números

formatText, round, groupDigits, formatWeight, stripGameText, randomInt, pickRandom y rollChance, además de dónde se documenta ServerClock.

Pequeñas utilidades para lo que leen los jugadores (dinero, pesos, textos traducidos), tiradas aleatorias y cuentas atrás que coinciden con el reloj del servidor.

TypeScript
import { formatText, round, groupDigits, formatWeight, stripGameText, randomInt, pickRandom, rollChance, ServerClock } from "@aicore-fivem/lib/shared";

Texto

formatText

Rellena los marcadores {0}, {1}... de un texto con valores por posición. Una traducción puede mover o repetir un marcador ("{1} paid {0}"), por eso los valores van por número, no por orden.

Lado: Cliente, servidor y NUI · Espera: no

Firma
formatText(template: string, args: ReadonlyArray<string | number>): string
Lua
local text = aiLib.formatText(template, ...) -- valores como argumentos separados

Parámetros

Prop

Type

Devuelve

string: el texto con cada marcador que tiene valor rellenado. Un marcador sin valor se queda como está ({2}).

Ejemplo

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

formatText("You paid ${0} for {1} items", [250, 3]); // "You paid $250 for 3 items"

Rara vez lo llamas tú mismo: las utilidades de idioma (createLocale, aiLib.locale, LangTexts) ya rellenan los marcadores. Consulta Idioma.

stripGameText

Convierte en texto plano el texto de otro script: quita las etiquetas HTML, los códigos de color y de entrada de GTA (~r~, ~INPUT_PICKUP~) y &nbsp;, junta los espacios repetidos y recorta. Úsalo antes de mostrar el texto de otro script en tu propia interfaz.

Lado: Cliente, servidor y NUI · Espera: no

Firma
stripGameText(text: unknown): string
Lua
local plain = aiLib.stripGameText(text)

Parámetros

Prop

Type

Devuelve

string: el texto plano. "" para null / undefined (Lua: nil).

Ejemplo

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

stripGameText("Press ~INPUT_CONTEXT~ to <b>open</b>  the ~g~shop~s~"); // "Press to open the shop"

Números

round

Redondea un número a una cantidad de decimales.

Lado: Cliente, servidor y NUI · Espera: no

Firma
round(value: number, decimals?: number): number
Lua
local rounded = aiLib.numbers.round(value, decimals)

Parámetros

Prop

Type

Devuelve

number: el valor redondeado.

Ejemplo

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

round(12.345, 1); // 12.3
round(12.5);      // 13

groupDigits

Escribe un número con un separador cada tres dígitos: 1234567 pasa a ser 1,234,567. Conserva el signo y los decimales. Úsalo para cada cantidad de dinero que ven los jugadores.

Lado: Cliente, servidor y NUI · Espera: no

Firma
groupDigits(value: number | string, separator?: string): string
Lua
local text = aiLib.numbers.groupDigits(value, separator)

Parámetros

Prop

Type

Devuelve

string: el número agrupado.

Ejemplo

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

groupDigits(1234567);        // "1,234,567"
groupDigits(-9876.5);        // "-9,876.5"
groupDigits(1500000, ".");   // "1.500.000"

formatWeight

Escribe un peso en gramos como lo leen los jugadores: por debajo de 1 kg en gramos, desde 1 kg en kilogramos con un decimal (kilogramos enteros desde 100 kg), con los dígitos agrupados.

Lado: Cliente, servidor y NUI · Espera: no

Firma
formatWeight(grams: number): string

Lua: sin equivalente.

Parámetros

Prop

Type

Devuelve

string: "750 g", "1.5 kg", "1,250 kg".

Ejemplo

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

formatWeight(750);      // "750 g"
formatWeight(1500);     // "1.5 kg"
formatWeight(1250000);  // "1,250 kg"

Aleatorio

randomInt

Un número entero aleatorio de min a max, ambos incluidos.

Lado: Cliente, servidor y NUI · Espera: no

Firma
randomInt(min: number, max: number): number

Lua: sin equivalente; usa math.random(min, max).

Parámetros

Prop

Type

Devuelve

number: un número entero entre min y max.

Ejemplo

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

const payout = randomInt(150, 300); // 150, 151, ... o 300

pickRandom

Un elemento aleatorio de una lista.

Lado: Cliente, servidor y NUI · Espera: no

Firma
pickRandom<T>(list: readonly T[]): T | undefined

Lua: sin equivalente; usa list[math.random(#list)].

Parámetros

Prop

Type

Devuelve

Un elemento, o undefined cuando la lista está vacía.

Ejemplo

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

const loot = pickRandom(["goldbar", "rolex", "diamond"]) ?? "goldbar";

rollChance

true con una probabilidad de percent sobre 100.

Lado: Cliente, servidor y NUI · Espera: no

Firma
rollChance(percent: number): boolean

Lua: sin equivalente; usa math.random() * 100 < percent.

Parámetros

Prop

Type

Devuelve

true aproximadamente percent veces de cada 100.

Ejemplo

resource/server/index.ts
import { inventory } from "@aicore-fivem/lib/server";
import { rollChance } from "@aicore-fivem/lib/shared";

function useLockpick(source: number, slot: number): void {
  if (rollChance(25)) inventory.removeItem(source, "lockpick", 1, undefined, slot); // se rompe 1 de cada 4 veces
}

Haz la tirada en el servidor para todo lo que dé objetos o dinero. Un tramposo puede forzar una tirada en el cliente.

Tiempo

ServerClock

El reloj del servidor en un cliente, para cuentas atrás que no dependen del propio reloj del cliente. Se exporta desde @aicore-fivem/lib/shared y no tiene equivalente en Lua. Su referencia completa (sync, now, toLocal, ejemplo de cuenta atrás) está en Cámara y temporización: ServerClock.

En esta página