Pozycje
distance, flatDistance, headingTo, nearestOf, gridCell i cellKey: matematyka wektorów na zwykłych obiektach { x, y, z }.
Obliczenia na punktach zapisanych jako zwykłe obiekty (Vec3: { x, y, z } w metrach). Nie potrzebują natywek, więc ten sam kod działa na serwerze, na kliencie i na stronie NUI.
import { distance, flatDistance, headingTo, nearestOf, gridCell, cellKey } from "@aicore-fivem/lib/shared";Lua ma wbudowaną matematykę wektorów: #(a - b) to odległość między dwoma vector3, #(a.xy - b.xy) to odległość po ziemi. Tylko headingTo ma odpowiednik w Lua (aiLib.numbers.headingTo).
distance
Odległość w linii prostej między dwoma punktami, w metrach.
Strona: Klient, serwer i NUI · Czeka: nie
distance(a: Vec3, b: Vec3): numberLua: brak odpowiednika; użyj #(a - b) z dwoma vector3.
Parametry
Prop
Type
Zwracana wartość
number: metry, 0 lub więcej.
Przykład
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
Odległość na płaszczyźnie ziemi, z pominięciem wysokości (tylko x i y), w metrach. Używaj jej dla obszarów, w których wysokość nie ma znaczenia (parking na zboczu, promień blipa).
Strona: Klient, serwer i NUI · Czeka: nie
flatDistance(a: { x: number; y: number }, b: { x: number; y: number }): numberLua: brak odpowiednika; użyj #(a.xy - b.xy).
Parametry
Prop
Type
Zwracana wartość
number: metry na płaszczyźnie ziemi.
Przykład
import { flatDistance } from "@aicore-fivem/lib/shared";
flatDistance({ x: 0, y: 0, z: 0 }, { x: 3, y: 4, z: 50 }); // 5headingTo
Kierunek, który patrzy z jednego punktu na drugi, w konwencji GTA: 0-360 stopni, 0 = północ, przeciwnie do ruchu wskazówek zegara. Używaj go, żeby obrócić peda albo kamerę w stronę czegoś.
Strona: Klient, serwer i NUI · Czeka: nie
headingTo(from: { x: number; y: number }, to: { x: number; y: number }): numberlocal heading = aiLib.numbers.headingTo(from, to) -- vector3 albo tabele { x, y }Parametry
Prop
Type
Zwracana wartość
number: kierunek od 0 do 360 (bez 360).
Przykład
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
Element listy najbliższy punktowi (odległość 3D), w opcjonalnym zasięgu. Działa dla każdej listy: mówisz, jak odczytać pozycję elementu.
Strona: Klient, serwer i NUI · Czeka: nie
nearestOf<T>(items: Iterable<T>, point: Vec3, pos: (item: T) => Vec3, max?: number): T | undefinedLua: brak odpowiednika.
Parametry
Prop
Type
Zwracana wartość
Najbliższy element albo undefined, gdy lista jest pusta albo każdy element jest dalej niż max.
Przykład
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
Całkowitoliczbowa komórka siatki, w którą wpada punkt, na siatce kwadratów o boku size metrów. Strumieniowanie obszarów liba (AreaStream na serwerze, AreaFollower na kliencie) jej używa, więc obie strony zgadzają się, w której komórce jest punkt. Komórki są ograniczone do plus minus 16 000.
Strona: Klient, serwer i NUI · Czeka: nie
gridCell(x: number, y: number, size: number): { cx: number; cy: number }Lua: brak odpowiednika.
Parametry
Prop
Type
Zwracana wartość
{ cx, cy }: kolumna i wiersz komórki.
Przykład
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
Jedna liczba dla komórki siatki, na tyle mała, żeby była szybkim kluczem Map (poniżej 2^30).
Strona: Klient, serwer i NUI · Czeka: nie
cellKey(cx: number, cy: number): numberLua: brak odpowiednika.
Parametry
Prop
Type
Zwracana wartość
number: ta sama liczba dla tej samej komórki, po każdej stronie.
Przykład
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]);
}Tekst i liczby
formatText, round, groupDigits, formatWeight, stripGameText, randomInt, pickRandom i rollChance oraz gdzie jest opisany ServerClock.
Pojazdy
plateOf, normalizePlate, vehicleTypeOfClass, toVehicleProps i toVehicleSetup: tablice jako klucze, typy spawnu i wygląd pojazdu z niezaufanych danych.