AI Core
Справочник APILib: клиент

Зоны

Zones - области с колбэками входа и выхода (сфера, цилиндр, полигон), которые проверяются со своим интервалом и никогда не каждый кадр.

Зона это область, которая выполняет код, когда игрок входит в неё или выходит из неё: вход в район, область ограничения скорости, маркер, который рисуется только поблизости. Когда игрок должен что-то сделать в этом месте (нажать клавишу, выбрать опцию target), используйте точку: это зона с уже подключёнными подсказкой, target, педом и блипом.

В TypeScript каждую зону проверяет единая проверка ai-lib для всех ресурсов (зоны лежат в сетке по 64 м, поэтому миллион зон стоит столько же, сколько несколько). Ваш ресурс проверяет свои зоны сам, только пока ai-lib не запущен. В Lua каждый ресурс запускает одну задачу планировщика для своих зон.

new Zones

Создаёт группу зон. Создайте одну группу на функцию в начале файла.

Сторона: Клиент · Ждёт: нет

Сигнатура
new Zones()
Lua
local zones = aiLib.Zones.new()

Возвращает

Группа Zones с методами ниже.

Пример

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

const zones = new Zones();

zones.add

Добавляет зону или заменяет зону с тем же id. Если в заменяемой зоне был игрок, сначала выполняется её onExit.

Сторона: Клиент · Ждёт: нет

Сигнатура
zones.add(id: string, options: ZoneOptions): void
Lua
zones:add(id, options)

Параметры

Prop

Type

ZoneOptions

Prop

Type

ZoneShape

ZoneShape это один из трёх объектов, выбираемый по type:

Prop

Type

В Lua center может быть vector3, а точки таблицами { x = ..., y = ... }.

Возвращает

void.

Пример

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

Зона, нарисованная в вашей админ-панели виджетом zone, даёт углы; превратите их в полигон через polyFromCorners(corners, height) из @aicore-fivem/lib/shared. Сервер может проверить те же формы через zoneContains(shape, x, y, z).

zones.remove

Удаляет одну зону. Если игрок был внутри, выполняется onExit. Неизвестный id ничего не делает.

Сторона: Клиент · Ждёт: нет

Сигнатура
zones.remove(id: string): void
Lua
zones:remove(id)

Параметры

Prop

Type

Возвращает

void.

Пример

zones.remove("safezone");

zones.clear

Удаляет все зоны группы; onExit выполняется для тех, в которых находится игрок.

Сторона: Клиент · Ждёт: нет

Сигнатура
zones.clear(): void
Lua
zones:clear()

Возвращает

void.

Пример

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

zones.isInside

Находится ли игрок внутри зоны, по результату её последней проверки.

Сторона: Клиент · Ждёт: нет

Сигнатура
zones.isInside(id: string): boolean
Lua
local inside = zones:isInside(id)

Параметры

Prop

Type

Возвращает

boolean: true, пока внутри; false снаружи или для неизвестного id. Отражает последнюю проверку, поэтому может устареть до interval мс.

Пример

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

zones.size

Сколько зон содержит группа.

Сторона: Клиент · Ждёт: нет

Сигнатура
zones.size: number // свойство только для чтения

Lua-аналога нет.

Возвращает

number: количество зон в этой группе.

Пример

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

На этой странице