AI Core
API-ReferenzLib: Client

Zonen

Zones - Bereiche mit Betreten- und Verlassen-Callbacks (Kugel, Zylinder, Polygon), in ihrem eigenen Intervall geprüft, nie in jedem Frame.

Eine Zone ist ein Bereich, der Code ausführt, wenn der Spieler ihn betritt oder verlässt: ein Viertel betreten, ein Bereich mit Tempolimit, ein Marker, der nur in der Nähe gezeichnet wird. Wenn der Spieler an dem Ort etwas tun soll (eine Taste drücken, eine Target-Option wählen), nutze stattdessen einen Punkt: Er ist eine Zone, bei der Prompt, Target, Ped und Blip schon verdrahtet sind.

In TypeScript wird jede Zone von dem einen Prüfer von ai-lib für alle Ressourcen geprüft (Zonen liegen in einem 64-m-Raster, daher kostet eine Million Zonen so viel wie ein paar). Deine Ressource prüft ihre eigenen Zonen nur, solange ai-lib nicht läuft. In Lua führt jede Ressource einen Scheduler-Job für ihre Zonen aus.

new Zones

Erstellt eine Gruppe von Zonen. Erstelle eine Gruppe pro Feature am Anfang der Datei.

Seite: Client · Wartet: nein

Signatur
new Zones()
Lua
local zones = aiLib.Zones.new()

Rückgabewert

Eine Zones-Gruppe mit den Methoden unten.

Beispiel

import { Zones } from "@aicore-fivem/lib/client";

const zones = new Zones();

zones.add

Fügt eine Zone hinzu oder ersetzt die Zone mit derselben ID. Wenn der Spieler in der ersetzten Zone war, läuft zuerst ihr onExit.

Seite: Client · Wartet: nein

Signatur
zones.add(id: string, options: ZoneOptions): void
Lua
zones:add(id, options)

Parameter

Prop

Type

ZoneOptions

Prop

Type

ZoneShape

ZoneShape ist eines von drei Objekten, gewählt nach type:

Prop

Type

In Lua darf center ein vector3 sein und die Punkte Tabellen { x = ..., y = ... }.

Rückgabewert

void.

Beispiel

import { createLocale, notify, Zones } from "@aicore-fivem/lib/client";

const Locale = createLocale<typeof import("../../locales/en.json")>();
const zones = new Zones();

zones.add("safezone", {
  shape: { type: "cylinder", center: { x: 298.6, y: -584.5, z: 43.3 }, radius: 60, height: 30 },
  onEnter: () => notify(Locale("SAFEZONE_IN"), "info"),
  onExit: () => notify(Locale("SAFEZONE_OUT"), "info"),
});

zones.add("yard", {
  shape: {
    type: "poly",
    points: [
      { x: 1700.1, y: 2560.4 },
      { x: 1780.6, y: 2560.4 },
      { x: 1780.6, y: 2620.2 },
      { x: 1700.1, y: 2620.2 },
    ],
    minZ: 40,
    maxZ: 60,
  },
  interval: 1000,
  onEnter: () => SetPedMoveRateOverride(PlayerPedId(), 0.8),
});

Eine Zone, die in deinem Admin-Panel mit dem zone-Widget gezeichnet wird, liefert Ecken; mache daraus mit polyFromCorners(corners, height) aus @aicore-fivem/lib/shared ein Polygon. Der Server kann dieselben Formen mit zoneContains(shape, x, y, z) testen.

zones.remove

Entfernt eine Zone. Wenn der Spieler drin war, läuft onExit. Eine unbekannte ID tut nichts.

Seite: Client · Wartet: nein

Signatur
zones.remove(id: string): void
Lua
zones:remove(id)

Parameter

Prop

Type

Rückgabewert

void.

Beispiel

zones.remove("safezone");

zones.clear

Entfernt jede Zone der Gruppe; onExit läuft für die, in denen der Spieler ist.

Seite: Client · Wartet: nein

Signatur
zones.clear(): void
Lua
zones:clear()

Rückgabewert

void.

Beispiel

onServerEvent("myscript:eventOver", () => zones.clear());

zones.isInside

Ob der Spieler in einer Zone ist, Stand ihrer letzten Prüfung.

Seite: Client · Wartet: nein

Signatur
zones.isInside(id: string): boolean
Lua
local inside = zones:isInside(id)

Parameter

Prop

Type

Rückgabewert

boolean: true, solange drin; false draußen oder bei einer unbekannten ID. Es spiegelt die letzte Prüfung wider, kann also bis zu interval ms alt sein.

Beispiel

if (zones.isInside("safezone")) return notify(Locale("NO_WEAPONS_HERE"), "error");

zones.size

Wie viele Zonen die Gruppe enthält.

Seite: Client · Wartet: nein

Signatur
zones.size: number // schreibgeschützte Eigenschaft

Kein Lua-Zwilling.

Rückgabewert

number: die Anzahl der Zonen in dieser Gruppe.

Beispiel

console.log(`${zones.size} zones loaded`);

Auf dieser Seite