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
new Zones()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
zones.add(id: string, options: ZoneOptions): voidzones: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
zones.remove(id: string): voidzones: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
zones.clear(): voidzones: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
zones.isInside(id: string): booleanlocal 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
zones.size: number // propriedade somente leituraSem equivalente em Lua.
Retorno
number: a contagem de zonas neste grupo.
Exemplo
console.log(`${zones.size} zones loaded`);Pontos de interação
Points - todo lugar que um jogador usa (balcões, lojas, portas, NPCs, caixas eletrônicos, porta-malas de veículos) como prompt ou opção de target, com peds, blips e pontos construídos a partir de registros do painel.
Peds, blips e props
LocalPed, Blips, createBlip, attachProp, PreviewVehicle e player.holdAnim - NPCs locais, blips no mapa, props seguros na mão, veículos de vitrine e animações mantidas.