AI Core
API başvurusuLib: shared ve fivem

Bölge geometrisi

zoneContains, zoneBounds, polyFromCorners ve readZoneShape: bir nokta bir alanın içinde mi; server’da, client’ta ya da bir NUI’da.

Dünyadaki bir alan bir ZoneShape’tir: bir küre, bir silindir ya da iki yükseklik arasında bir zemin çokgeni. Client Zones sınıfı (giriş ve çıkış callback’leri, bkz. Bölgeler) bu şekilleri kullanır; bu sayfadaki yardımcılar onun arkasındaki native’siz düz matematiktir; böylece server aynı alanı kontrol edebilir (oyuncu market satış yapmadan önce gerçekten içeride mi?).

TypeScript
import { zoneContains, zoneBounds, polyFromCorners, readZoneShape, type ZoneShape } from "@aicore-fivem/lib/shared";

Lua: bunların hiçbirinin Lua karşılığı yok. Lua bölgeleri client’ta aiLib.Zones.new()’dir (bkz. Bölgeler).

zoneContains

Bir noktanın bir bölge şeklinin içinde olup olmadığı.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
zoneContains(shape: ZoneShape, x: number, y: number, z: number): boolean

Parametreler

Prop

Type

Dönüş değeri

Nokta içerideyse true (küreler ve silindirler için kenar içeride sayılır). Bir silindir için nokta ayrıca merkezin height metre üstünde ya da altında olmalıdır. Bir çokgen için z, minZ ile maxZ arasında olmalıdır.

Örnek

resource/server/index.ts
import { coordsOf, onClientCallback } from "@aicore-fivem/lib/server";
import { fail, zoneContains, type ZoneShape } from "@aicore-fivem/lib/shared";

const shop: ZoneShape = { type: "cylinder", center: { x: 25.7, y: -1347.3, z: 29.5 }, radius: 6, height: 3 };

onClientCallback("my-shop:open", (source) => {
  const { x, y, z } = coordsOf(source);
  if (!zoneContains(shop, x, y, z)) return fail("TOO_FAR");
  return { ok: true };
});

zoneBounds

Bir şeklin zemindeki sınırlayıcı kutusu: onu içine alan en küçük dikdörtgen (x / y). Ucuz bir ilk kontrol için ya da bir bölgeyi ızgara hücrelerine koymak için kullan.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
zoneBounds(shape: ZoneShape): [minX: number, minY: number, maxX: number, maxY: number]

Parametreler

Prop

Type

Dönüş değeri

Metre cinsinden [minX, minY, maxX, maxY]. Bir küre ya da silindir için: merkez artı ve eksi yarıçap.

Örnek

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

zoneBounds({ type: "sphere", center: { x: 100, y: 200, z: 30 }, radius: 10 }); // [90, 190, 110, 210]

polyFromCorners

Panelin zone widget’ının kaydettiği köşeleri bir çokgen şekline çevirir. Yükseklik aralığı köşelerin en düşük ve en yüksek z’sidir, height metre yukarı ve aşağı genişletilir.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
polyFromCorners(corners: readonly Vec3[], height: number): { type: "poly"; points: Array<{ x: number; y: number }>; minZ: number; maxZ: number } | null

Parametreler

Prop

Type

Dönüş değeri

Poly ZoneShape ya da üçten az köşeyle null.

Örnek

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

const lot = polyFromCorners(
  [ { x: 210, y: -810, z: 30 }, { x: 240, y: -800, z: 31 }, { x: 230, y: -770, z: 32 } ],
  3,
);
// { type: "poly", points: [...], minZ: 27, maxZ: 35 }

readZoneShape

Başka bir resource’tan ya da bir dosyadan gelen bir bölge şeklini kontrol eder: her sayı sonlu, bir çokgen en az üç noktalı. Export’larından birine geçirilen bir şekil üzerinde kullan.

Taraf: Client, server ve NUI · Bekler: hayır

Signature
readZoneShape(value: unknown): ZoneShape | null

Parametreler

Prop

Type

Dönüş değeri

Temiz bir ZoneShape (ek alanlar atılır) ya da geçerli bir küre, silindir veya çokgen değilse null.

Örnek

resource/server/index.ts
import { registerExport } from "@aicore-fivem/lib/server";
import { readZoneShape, type ZoneShape } from "@aicore-fivem/lib/shared";

const noParking = new Map<string, ZoneShape>();

registerExport("AddNoParkingZone", (id: unknown, raw: unknown) => {
  const shape = readZoneShape(raw);
  if (typeof id !== "string" || !shape) return false;
  noParking.set(id, shape);
  return true;
});

Bir Lua vector3’ü TypeScript’e bir dizi olarak ulaşır ve readZoneShape bunu bir center olarak kabul etmez. Lua çağıranlar center = { x = 1.0, y = 2.0, z = 3.0 } geçirir.

Bu sayfada