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
new Zones()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
zones.add(id: string, options: ZoneOptions): voidzones: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
zones.remove(id: string): voidzones: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
zones.clear(): voidzones: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
zones.isInside(id: string): booleanlocal 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
zones.size: number // propiedad de solo lecturaSin equivalente en Lua.
Devuelve
number: el número de zonas de este grupo.
Ejemplo
console.log(`${zones.size} zones loaded`);Puntos de interacción
Points - cada lugar que usa un jugador (mostradores, tiendas, puertas, NPC, cajeros, maleteros de vehículos) como prompt o como opción de target, con peds, blips y puntos construidos a partir de registros del panel.
Peds, blips y props
LocalPed, Blips, createBlip, attachProp, PreviewVehicle y player.holdAnim - NPC locales, blips del mapa, props en la mano, vehículos de exposición y animaciones mantenidas.