AI Core
Referencia de la APILib: cliente

Zonas

Zones - áreas con callbacks de entrada y salida (esfera, cilindro, polígono), comprobadas a su propio intervalo, nunca en cada frame.

Una zona es un área que ejecuta código cuando el jugador entra o sale de ella: entrar en un distrito, un área con límite de velocidad, un marcador que solo se dibuja de cerca. Cuando el jugador debe hacer algo en el lugar (pulsar una tecla, elegir una opción de target), usa un punto en su lugar: es una zona con el prompt, el target, el ped y el blip ya conectados.

En TypeScript, cada zona la comprueba el único comprobador de ai-lib para todos los recursos (las zonas se colocan en una cuadrícula de 64 m, así que un millón de zonas cuesta lo mismo que unas pocas). Tu recurso comprueba sus propias zonas solo mientras ai-lib no está en marcha. En Lua, cada recurso ejecuta una tarea del planificador para sus zonas.

new Zones

Crea un grupo de zonas. Crea un grupo por funcionalidad, al principio del archivo.

Lado: Cliente · Espera: no

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

Devuelve

Un grupo Zones con los métodos de abajo.

Ejemplo

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

const zones = new Zones();

zones.add

Añade una zona, o reemplaza la zona con el mismo id. Cuando el jugador estaba dentro de la zona reemplazada, primero se ejecuta su onExit.

Lado: Cliente · Espera: no

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

Parámetros

Prop

Type

ZoneOptions

Prop

Type

ZoneShape

ZoneShape es uno de tres objetos, elegido por type:

Prop

Type

En Lua, center puede ser un vector3 y los puntos tablas { x = ..., y = ... }.

Devuelve

void.

Ejemplo

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),
});

Una zona dibujada en tu panel de administración con el widget zone da esquinas; conviértelas en un polígono con polyFromCorners(corners, height) de @aicore-fivem/lib/shared. El servidor puede probar las mismas formas con zoneContains(shape, x, y, z).

zones.remove

Elimina una zona. Cuando el jugador estaba dentro, se ejecuta onExit. Un id desconocido no hace nada.

Lado: Cliente · Espera: no

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

Parámetros

Prop

Type

Devuelve

void.

Ejemplo

zones.remove("safezone");

zones.clear

Elimina todas las zonas del grupo; onExit se ejecuta para aquellas en las que está el jugador.

Lado: Cliente · Espera: no

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

Devuelve

void.

Ejemplo

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

zones.isInside

Si el jugador está dentro de una zona, según su última comprobación.

Lado: Cliente · Espera: no

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

Parámetros

Prop

Type

Devuelve

boolean: true mientras está dentro; false fuera o para un id desconocido. Refleja la última comprobación, así que puede tener hasta interval ms de antigüedad.

Ejemplo

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

zones.size

Cuántas zonas tiene el grupo.

Lado: Cliente · Espera: no

Firma
zones.size: number // propiedad de solo lectura

Sin equivalente en Lua.

Devuelve

number: el número de zonas de este grupo.

Ejemplo

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

En esta página