Positions
distance, flatDistance, headingTo, nearestOf, gridCell et cellKey : calcul vectoriel sur de simples objets { x, y, z }.
Calculs sur des points écrits comme de simples objets (Vec3 : { x, y, z } en mètres). Ils n’ont besoin d’aucune native, donc le même code tourne sur le serveur, sur le client et dans une page NUI.
import { distance, flatDistance, headingTo, nearestOf, gridCell, cellKey } from "@aicore-fivem/lib/shared";Lua intègre le calcul vectoriel : #(a - b) est la distance entre deux vector3, #(a.xy - b.xy) la distance au sol. Seul headingTo a un équivalent Lua (aiLib.numbers.headingTo).
distance
La distance en ligne droite entre deux points, en mètres.
Côté : client, serveur et NUI · Attend : non
distance(a: Vec3, b: Vec3): numberLua : pas d’équivalent ; utilisez #(a - b) avec deux vector3.
Paramètres
Prop
Type
Retour
number : des mètres, 0 ou plus.
Exemple
import { coordsOf } from "@aicore-fivem/lib/server";
import { distance } from "@aicore-fivem/lib/shared";
const counter = { x: 25.7, y: -1347.3, z: 29.5 };
function nearCounter(source: number): boolean {
return distance(coordsOf(source), counter) <= 3;
}flatDistance
La distance sur le plan du sol, sans tenir compte de la hauteur (seulement x et y), en mètres. Utilisez-la pour les zones où la hauteur ne compte pas (un parking en pente, le rayon d’un blip).
Côté : client, serveur et NUI · Attend : non
flatDistance(a: { x: number; y: number }, b: { x: number; y: number }): numberLua : pas d’équivalent ; utilisez #(a.xy - b.xy).
Paramètres
Prop
Type
Retour
number : des mètres sur le plan du sol.
Exemple
import { flatDistance } from "@aicore-fivem/lib/shared";
flatDistance({ x: 0, y: 0, z: 0 }, { x: 3, y: 4, z: 50 }); // 5headingTo
Le cap qui regarde d’un point vers un autre, selon la convention de GTA : 0-360 degrés, 0 = nord, sens antihoraire. Utilisez-le pour tourner un ped ou une caméra vers quelque chose.
Côté : client, serveur et NUI · Attend : non
headingTo(from: { x: number; y: number }, to: { x: number; y: number }): numberlocal heading = aiLib.numbers.headingTo(from, to) -- des vector3 ou des tables { x, y }Paramètres
Prop
Type
Retour
number : un cap de 0 jusqu’à 360 (non compris).
Exemple
import { cache, player } from "@aicore-fivem/lib/client";
import { headingTo } from "@aicore-fivem/lib/shared";
const counter = { x: 25.7, y: -1347.3, z: 29.5 };
SetEntityHeading(cache.ped, headingTo(player.coords(), counter));nearestOf
L’élément d’une liste le plus proche d’un point (distance 3D), dans une portée facultative. Fonctionne pour n’importe quelle liste : vous lui indiquez comment lire la position d’un élément.
Côté : client, serveur et NUI · Attend : non
nearestOf<T>(items: Iterable<T>, point: Vec3, pos: (item: T) => Vec3, max?: number): T | undefinedLua : pas d’équivalent.
Paramètres
Prop
Type
Retour
L’élément le plus proche, ou undefined quand la liste est vide ou que chaque élément est plus loin que max.
Exemple
import { coordsOf } from "@aicore-fivem/lib/server";
import { nearestOf, type Vec3 } from "@aicore-fivem/lib/shared";
const atms: Array<{ id: string; coords: Vec3 }> = [
{ id: "legion", coords: { x: 147.4, y: -1035.8, z: 29.3 } },
{ id: "pillbox", coords: { x: 296.2, y: -591.6, z: 43.3 } },
];
function atmNear(source: number) {
return nearestOf(atms, coordsOf(source), (atm) => atm.coords, 2);
}gridCell
La case entière de la grille dans laquelle tombe un point, sur une grille de carrés de size mètres. Le streaming par zone de la lib (AreaStream sur le serveur, AreaFollower sur le client) l’utilise, pour que les deux côtés s’accordent sur la case d’un point. Les cases sont bornées à plus ou moins 16 000.
Côté : client, serveur et NUI · Attend : non
gridCell(x: number, y: number, size: number): { cx: number; cy: number }Lua : pas d’équivalent.
Paramètres
Prop
Type
Retour
{ cx, cy } : la colonne et la ligne de la case.
Exemple
import { gridCell, cellKey } from "@aicore-fivem/lib/shared";
const { cx, cy } = gridCell(147.4, -1035.8, 100); // { cx: 1, cy: -11 }
const key = cellKey(cx, cy);cellKey
Un seul nombre pour une case de la grille, assez petit pour être une clé de Map rapide (sous 2^30).
Côté : client, serveur et NUI · Attend : non
cellKey(cx: number, cy: number): numberLua : pas d’équivalent.
Paramètres
Prop
Type
Retour
number : le même nombre pour la même case, de chaque côté.
Exemple
import { gridCell, cellKey } from "@aicore-fivem/lib/shared";
const byCell = new Map<number, string[]>();
function addSign(id: string, x: number, y: number): void {
const { cx, cy } = gridCell(x, y, 100);
const key = cellKey(cx, cy);
byCell.set(key, [...(byCell.get(key) ?? []), id]);
}Texte et nombres
formatText, round, groupDigits, formatWeight, stripGameText, randomInt, pickRandom et rollChance, et l’endroit où ServerClock est documenté.
Véhicules
plateOf, normalizePlate, vehicleTypeOfClass, toVehicleProps et toVehicleSetup : les plaques comme clés, les types de spawn et l’apparence des véhicules à partir de données non fiables.