AI Core
Referência da APILib: cliente

Zonas

Zones - áreas com callbacks de entrada e saída (esfera, cilindro, polígono), verificadas no próprio intervalo, nunca a cada frame.

Uma zona é uma área que roda código quando o jogador entra ou sai dela: entrar em um bairro, uma área com limite de velocidade, um marcador que só é desenhado por perto. Quando o jogador deve fazer algo no lugar (apertar uma tecla, escolher uma opção de target), use um ponto: é uma zona com o prompt, o target, o ped e o blip já conectados.

Em TypeScript toda zona é verificada pelo único verificador do ai-lib para todos os recursos (as zonas ficam em uma grade de 64 m, então um milhão de zonas custa o mesmo que algumas). Seu recurso verifica as próprias zonas só enquanto o ai-lib não está rodando. Em Lua cada recurso roda um job do agendador para as suas zonas.

new Zones

Cria um grupo de zonas. Faça um grupo por funcionalidade no topo do arquivo.

Lado: Cliente · Espera: não

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

Retorno

Um grupo Zones com os métodos abaixo.

Exemplo

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

const zones = new Zones();

zones.add

Adiciona uma zona, ou substitui a zona com o mesmo id. Quando a zona substituída tinha o jogador dentro, o onExit dela roda primeiro.

Lado: Cliente · Espera: não

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

Parâmetros

Prop

Type

ZoneOptions

Prop

Type

ZoneShape

ZoneShape é um de três objetos, escolhido por type:

Prop

Type

Em Lua, center pode ser um vector3 e os pontos tabelas { x = ..., y = ... }.

Retorno

void.

Exemplo

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

Uma zona desenhada no seu painel de administração com o widget zone dá cantos; transforme-os em um polígono com polyFromCorners(corners, height) de @aicore-fivem/lib/shared. O servidor pode testar as mesmas formas com zoneContains(shape, x, y, z).

zones.remove

Remove uma zona. Quando o jogador estava dentro, onExit roda. Um id desconhecido não faz nada.

Lado: Cliente · Espera: não

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

Parâmetros

Prop

Type

Retorno

void.

Exemplo

zones.remove("safezone");

zones.clear

Remove todas as zonas do grupo; onExit roda para as que têm o jogador dentro.

Lado: Cliente · Espera: não

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

Retorno

void.

Exemplo

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

zones.isInside

Se o jogador está dentro de uma zona, segundo a última verificação dela.

Lado: Cliente · Espera: não

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

Parâmetros

Prop

Type

Retorno

boolean: true enquanto dentro; false fora ou para um id desconhecido. Reflete a última verificação, então pode ter até interval ms de atraso.

Exemplo

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

zones.size

Quantas zonas o grupo tem.

Lado: Cliente · Espera: não

Signature
zones.size: number // propriedade somente leitura

Sem equivalente em Lua.

Retorno

number: a contagem de zonas neste grupo.

Exemplo

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

Nesta página