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.
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
distance(a: Vec3, b: Vec3): numberLua: kein Zwilling; nutze #(a - b) mit zwei vector3.
Parameter
Prop
Type
Rückgabewert
number: Meter, 0 oder mehr.
Beispiel
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
flatDistance(a: { x: number; y: number }, b: { x: number; y: number }): numberLua: 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 }); // 5headingTo
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
headingTo(from: { x: number; y: number }, to: { x: number; y: number }): numberlocal heading = aiLib.numbers.headingTo(from, to) -- vector3 oder { x, y }-TabellenParameter
Prop
Type
Rückgabewert
number: ein Heading von 0 bis (ausschließlich) 360.
Beispiel
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
nearestOf<T>(items: Iterable<T>, point: Vec3, pos: (item: T) => Vec3, max?: number): T | undefinedLua: 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
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
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
cellKey(cx: number, cy: number): numberLua: 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]);
}Text und Zahlen
formatText, round, groupDigits, formatWeight, stripGameText, randomInt, pickRandom und rollChance, plus wo ServerClock dokumentiert ist.
Fahrzeuge
plateOf, normalizePlate, vehicleTypeOfClass, toVehicleProps und toVehicleSetup: Kennzeichen als Schlüssel, Spawn-Typen und Fahrzeug-Aussehen aus nicht vertrauenswürdigen Daten.