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
new Zones()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
zones.add(id: string, options: ZoneOptions): voidzones: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
zones.remove(id: string): voidzones: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
zones.clear(): voidzones: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
zones.isInside(id: string): booleanlocal 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
zones.size: number // schreibgeschützte EigenschaftKein Lua-Zwilling.
Rückgabewert
number: die Anzahl der Zonen in dieser Gruppe.
Beispiel
console.log(`${zones.size} zones loaded`);Interaktionspunkte
Points - jeder Ort, den ein Spieler nutzt (Theken, Shops, Türen, NPCs, Geldautomaten, Kofferräume), als Prompt oder Target-Option, mit Peds, Blips und Punkten aus Panel-Einträgen.
Peds, Blips und Props
LocalPed, Blips, createBlip, attachProp, PreviewVehicle und player.holdAnim - lokale NPCs, Karten-Blips, gehaltene Props, Ausstellungsfahrzeuge und gehaltene Animationen.