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

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.

TypeScript
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

Signature
distance(a: Vec3, b: Vec3): number

Lua : pas d’équivalent ; utilisez #(a - b) avec deux vector3.

Paramètres

Prop

Type

Retour

number : des mètres, 0 ou plus.

Exemple

resource/server/index.ts
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

Signature
flatDistance(a: { x: number; y: number }, b: { x: number; y: number }): number

Lua : 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 }); // 5

headingTo

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

Signature
headingTo(from: { x: number; y: number }, to: { x: number; y: number }): number
Lua
local 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

resource/client/index.ts
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

Signature
nearestOf<T>(items: Iterable<T>, point: Vec3, pos: (item: T) => Vec3, max?: number): T | undefined

Lua : 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

resource/server/index.ts
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

Signature
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

Signature
cellKey(cx: number, cy: number): number

Lua : 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]);
}

Sur cette page