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

Мир

Время и погода через тот скрипт погоды, который запущен, routing buckets из распределителя ai-core, замки дверей и точки появления сохранённых персонажей.

TypeScript
import { world, buckets, doors, characters } from "@aicore-fivem/lib/server";

world

Время и погода через ai-core, какой бы скрипт погоды ни был запущен (Renewed-Weathersync, av_weather, cd_easytime, qb-weathersync). Пока никакой не запущен, чтение отвечает null, а изменения отвечают false.

world.getWeather

Сторона: Сервер · Ждёт: нет

Сигнатура
world.getWeather(): string | null
Lua
local weather = aiLib.world.getWeather()

Возвращает текущий тип погоды так, как его сообщает скрипт погоды (CLEAR, RAIN...), или null, пока никакой не запущен.

const raining = ["RAIN", "THUNDER"].includes(world.getWeather() ?? "");

world.setWeather

Задаёт погоду.

Сторона: Сервер · Ждёт: нет

Сигнатура
world.setWeather(type: Weather): boolean
Lua
local ok = aiLib.world.setWeather(weather)

Prop

Type

Возвращает true, если задано, false, пока не запущен скрипт погоды или значение не является строкой.

import { addCommand, world } from "@aicore-fivem/lib/server";
import { isWeather } from "@aicore-fivem/shared";

addCommand("weather", { restricted: true, params: [{ name: "type", type: "string" }] }, (_source, { type }) => {
  const upper = type.toUpperCase();
  if (isWeather(upper)) world.setWeather(upper);
});

world.getTime

Сторона: Сервер · Ждёт: нет

Сигнатура
world.getTime(): { hour: number; minute: number } | null
Lua
local time = aiLib.world.getTime() -- { hour, minute } или nil

Возвращает игровое время или null, пока не запущен скрипт погоды.

const time = world.getTime();
const night = time !== null && (time.hour >= 22 || time.hour < 6);

world.setTime

Задаёт игровое время.

Сторона: Сервер · Ждёт: нет

Сигнатура
world.setTime(hour: number, minute?: number): boolean
Lua
local ok = aiLib.world.setTime(hour, minute)

Prop

Type

Возвращает true, если задано, false, пока не запущен скрипт погоды.

world.setTime(12, 30);

world.setBlackout

Включает или выключает блэкаут в городе.

Сторона: Сервер · Ждёт: нет

Сигнатура
world.setBlackout(on: boolean): boolean
Lua
local ok = aiLib.world.setBlackout(on)

Возвращает true, если применено, false, пока не запущен скрипт погоды или в нём нет блэкаута.

world.setBlackout(true); // электростанцию вывели из строя

world.freezeTime

Останавливает или снова запускает игровые часы.

Сторона: Сервер · Ждёт: нет

Сигнатура
world.freezeTime(on: boolean): boolean
Lua
local ok = aiLib.world.freezeTime(on)

Возвращает true, если применено, false, пока не запущен скрипт погоды или он не умеет замораживать время.

world.setTime(20, 0);
world.freezeTime(true);

buckets

Routing buckets (отдельные миры: интерьер квартиры, инстанс) из распределителя ai-core, поэтому два скрипта никогда не получат один и тот же. Никогда не выбирайте номера buckets сами (1000 + n). Lua-аналога нет: вызывайте экспорты ai-core AcquireBucket(tag) / ReleaseBucket(id).

buckets.acquire

Берёт свободный bucket для этого ресурса. В нём нет населения (ни фоновых педов, ни машин) и действует строгая блокировка сущностей.

Сторона: Сервер · Ждёт: нет

Сигнатура
buckets.acquire(tag: string): number

Prop

Type

Возвращает id bucket.

import { buckets } from "@aicore-fivem/lib/server";

const bucket = buckets.acquire(`property:${propertyId}`);
SetPlayerRoutingBucket(String(source), bucket);

buckets.release

Возвращает bucket, когда из него вышли игроки.

Сторона: Сервер · Ждёт: нет

Сигнатура
buckets.release(id: number): boolean

Возвращает true, если освобождён. Каждый bucket остановленного ресурса возвращается сам.

SetPlayerRoutingBucket(String(source), 0);
buckets.release(bucket);

doors

Замки дверей через слой замков ai-core, по собственному id двери в скрипте замков. Lua-аналога нет: вызывайте экспорты ai-core SetDoorLocked, IsDoorLocked.

doors.setLocked

Запирает или отпирает дверь.

Сторона: Сервер · Ждёт: нет

Сигнатура
doors.setLocked(id: string, locked: boolean, by?: number): boolean

Prop

Type

Возвращает true, если скрипт дверей принял вызов, иначе false.

if (outcome === "won") doors.setLocked("bank_vault", false, source);

doors.isLocked

Сторона: Сервер · Ждёт: нет

Сигнатура
doors.isLocked(id: string): boolean | null

Возвращает true или false либо null, если неизвестно (нет скрипта замков, нет такой двери или скрипт не может сказать это на сервере).

if (doors.isLocked("bank_vault") === false) return fail("ALREADY_OPEN");

doors.provider

Сторона: Сервер · Ждёт: нет

Сигнатура
doors.provider(): string | null

Возвращает скрипт замков, который отвечает, или null, если никакой не запущен.

console.log(`doors through ${doors.provider() ?? "nothing"}`);

characters

Сохранённые персонажи через ai-core. Загруженные персонажи идут через online и экспорты игроков ai-core.

characters.setOfflinePosition

Перемещает точку появления сохранённого (не загруженного) персонажа, например спящего тела, которое унесли. ai-core записывает её, как только персонажа не удерживает сохранение при загрузке или выгрузке.

Сторона: Сервер · Ждёт: нет

Сигнатура
characters.setOfflinePosition(charId: number, position: { x: number; y: number; z: number; heading?: number }): boolean

Lua-аналога нет: вызывайте экспорт ai-core SetOfflinePosition(charId, position).

Prop

Type

Возвращает true, если принято. false, если персонаж загружен или значения неверные.

characters.setOfflinePosition(sleeperCharId, { x: 340.2, y: -1396.7, z: 32.5, heading: 50 });

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