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.
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
formatText(template: string, args: ReadonlyArray<string | number>): stringlocal text = aiLib.formatText(template, ...) -- valores como argumentos separadosPará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 , 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
stripGameText(text: unknown): stringlocal 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
round(value: number, decimals?: number): numberlocal 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); // 13groupDigits
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
groupDigits(value: number | string, separator?: string): stringlocal 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
formatWeight(grams: number): stringLua: 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
randomInt(min: number, max: number): numberLua: 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 300pickRandom
Un elemento aleatorio de una lista.
Lado: Cliente, servidor y NUI · Espera: no
pickRandom<T>(list: readonly T[]): T | undefinedLua: 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
rollChance(percent: number): booleanLua: sin equivalente; usa math.random() * 100 < percent.
Parámetros
Prop
Type
Devuelve
true aproximadamente percent veces de cada 100.
Ejemplo
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.
Acciones y entrada del cliente
fail, isActionOk, replyError y los lectores estrictos readInt, readFinite, readId, readText, readVec3, readVec4, oneArg, asArgs, isRecord.
Posiciones
distance, flatDistance, headingTo, nearestOf, gridCell y cellKey: matemáticas de vectores sobre objetos simples { x, y, z }.