AI Core
API-ReferenzLib: Shared und fivem

Positionen

distance, flatDistance, headingTo, nearestOf, gridCell und cellKey: Vektor-Mathematik auf einfachen { x, y, z }-Objekten.

Mathematik auf Punkten, die als einfache Objekte geschrieben sind (Vec3: { x, y, z } in Metern). Sie brauchen keine Natives, daher läuft derselbe Code auf dem Server, dem Client und in einer NUI-Seite.

TypeScript
import { distance, flatDistance, headingTo, nearestOf, gridCell, cellKey } from "@aicore-fivem/lib/shared";

Lua hat eingebaute Vektor-Mathematik: #(a - b) ist die Entfernung zwischen zwei vector3, #(a.xy - b.xy) die Entfernung auf dem Boden. Nur headingTo hat einen Lua-Zwilling (aiLib.numbers.headingTo).

distance

Die gerade Entfernung zwischen zwei Punkten, in Metern.

Seite: Client, Server und NUI · Wartet: nein

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

Lua: kein Zwilling; nutze #(a - b) mit zwei vector3.

Parameter

Prop

Type

Rückgabewert

number: Meter, 0 oder mehr.

Beispiel

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

Die Entfernung auf der Bodenebene, ohne Höhe (nur x und y), in Metern. Nutze es für Bereiche, in denen die Höhe keine Rolle spielt (ein Parkplatz am Hang, ein Blip-Radius).

Seite: Client, Server und NUI · Wartet: nein

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

Lua: kein Zwilling; nutze #(a.xy - b.xy).

Parameter

Prop

Type

Rückgabewert

number: Meter auf der Bodenebene.

Beispiel

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

flatDistance({ x: 0, y: 0, z: 0 }, { x: 3, y: 4, z: 50 }); // 5

headingTo

Das Heading, das von einem Punkt zu einem anderen schaut, in der Konvention von GTA: 0-360 Grad, 0 = Norden, gegen den Uhrzeigersinn. Nutze es, um einen Ped oder eine Kamera zu etwas hin zu drehen.

Seite: Client, Server und NUI · Wartet: nein

Signatur
headingTo(from: { x: number; y: number }, to: { x: number; y: number }): number
Lua
local heading = aiLib.numbers.headingTo(from, to) -- vector3 oder { x, y }-Tabellen

Parameter

Prop

Type

Rückgabewert

number: ein Heading von 0 bis (ausschließlich) 360.

Beispiel

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

Das Element einer Liste, das einem Punkt am nächsten ist (3D-Entfernung), innerhalb einer optionalen Reichweite. Funktioniert für jede Liste: Du sagst ihm, wie es die Position eines Elements liest.

Seite: Client, Server und NUI · Wartet: nein

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

Lua: kein Zwilling.

Parameter

Prop

Type

Rückgabewert

Das nächste Element, oder undefined, wenn die Liste leer ist oder jedes Element weiter als max entfernt ist.

Beispiel

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

Die ganzzahlige Rasterzelle, in die ein Punkt fällt, auf einem Raster aus Quadraten mit size Metern. Das Bereichs-Streaming der Lib (AreaStream auf dem Server, AreaFollower auf dem Client) nutzt es, damit beide Seiten sich einig sind, in welcher Zelle ein Punkt liegt. Zellen werden auf plus oder minus 16.000 begrenzt.

Seite: Client, Server und NUI · Wartet: nein

Signatur
gridCell(x: number, y: number, size: number): { cx: number; cy: number }

Lua: kein Zwilling.

Parameter

Prop

Type

Rückgabewert

{ cx, cy }: Spalte und Zeile der Zelle.

Beispiel

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

Eine Zahl für eine Rasterzelle, klein genug für einen schnellen Map-Schlüssel (unter 2^30).

Seite: Client, Server und NUI · Wartet: nein

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

Lua: kein Zwilling.

Parameter

Prop

Type

Rückgabewert

number: dieselbe Zahl für dieselbe Zelle, auf jeder Seite.

Beispiel

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

Auf dieser Seite