AI Core
Référence de l’APILib : shared et fivem

Texte et nombres

formatText, round, groupDigits, formatWeight, stripGameText, randomInt, pickRandom et rollChance, et l’endroit où ServerClock est documenté.

De petits utilitaires pour ce que lisent les joueurs (argent, poids, textes traduits), les tirages aléatoires et les comptes à rebours alignés sur l’horloge du serveur.

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

Texte

formatText

Remplit les emplacements {0}, {1}... d’un texte avec des valeurs selon leur position. Une traduction peut déplacer ou répéter un emplacement ("{1} paid {0}"), c’est pourquoi les valeurs sont désignées par numéro et non par ordre.

Côté : client, serveur et NUI · Attend : non

Signature
formatText(template: string, args: ReadonlyArray<string | number>): string
Lua
local text = aiLib.formatText(template, ...) -- les valeurs en arguments séparés

Paramètres

Prop

Type

Retour

string : le texte avec chaque emplacement qui a une valeur rempli. Un emplacement sans valeur reste tel quel ({2}).

Exemple

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

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

Vous l’appelez rarement vous-même : les utilitaires de langue (createLocale, aiLib.locale, LangTexts) remplissent déjà les emplacements. Voir Langue.

stripGameText

Rend brut un texte venant d’un autre script : retire les balises HTML, les codes de couleur et de touche de GTA (~r~, ~INPUT_PICKUP~) et &nbsp;, réduit les suites d’espaces et supprime les espaces au début et à la fin. Utilisez-le avant d’afficher le texte d’un autre script dans votre propre interface.

Côté : client, serveur et NUI · Attend : non

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

Paramètres

Prop

Type

Retour

string : le texte brut. "" pour null / undefined (Lua : nil).

Exemple

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

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

Nombres

round

Arrondit un nombre à un nombre de décimales.

Côté : client, serveur et NUI · Attend : non

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

Paramètres

Prop

Type

Retour

number : la valeur arrondie.

Exemple

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

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

groupDigits

Écrit un nombre avec un séparateur tous les trois chiffres : 1234567 devient 1,234,567. Garde le signe et les décimales. Utilisez-le pour chaque montant d’argent que voient les joueurs.

Côté : client, serveur et NUI · Attend : non

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

Paramètres

Prop

Type

Retour

string : le nombre groupé.

Exemple

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

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

formatWeight

Écrit un poids en grammes comme les joueurs le lisent : sous 1 kg en grammes, à partir de 1 kg en kilogrammes avec une décimale (kilogrammes entiers à partir de 100 kg), chiffres groupés.

Côté : client, serveur et NUI · Attend : non

Signature
formatWeight(grams: number): string

Lua : pas d’équivalent.

Paramètres

Prop

Type

Retour

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

Exemple

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

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

Aléatoire

randomInt

Un nombre entier aléatoire de min à max, tous deux inclus.

Côté : client, serveur et NUI · Attend : non

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

Lua : pas d’équivalent ; utilisez math.random(min, max).

Paramètres

Prop

Type

Retour

number : un nombre entier entre min et max.

Exemple

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

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

pickRandom

Un élément aléatoire d’une liste.

Côté : client, serveur et NUI · Attend : non

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

Lua : pas d’équivalent ; utilisez list[math.random(#list)].

Paramètres

Prop

Type

Retour

Un élément, ou undefined quand la liste est vide.

Exemple

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

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

rollChance

true avec une probabilité de percent sur 100.

Côté : client, serveur et NUI · Attend : non

Signature
rollChance(percent: number): boolean

Lua : pas d’équivalent ; utilisez math.random() * 100 < percent.

Paramètres

Prop

Type

Retour

true environ percent fois sur 100.

Exemple

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 casse 1 fois sur 4
}

Faites le tirage sur le serveur pour tout ce qui donne des objets ou de l’argent. Un tirage sur le client peut être forcé par un tricheur.

Temps

ServerClock

L’horloge du serveur sur un client, pour des comptes à rebours qui ne dépendent pas de l’horloge propre du client. Elle est exportée depuis @aicore-fivem/lib/shared et n’a pas d’équivalent Lua. Sa référence complète (sync, now, toLocal, exemple de compte à rebours) se trouve sur Caméra et timing : ServerClock.

Sur cette page