AI Core
Работы и службыai-prison

ai-prison для разработчиков

Заключение, освобождение и оставшийся срок через слой тюрьмы AI Core, серверные экспорты ai-prison и метаданные персонажа, которые он хранит.

Чтобы посадить в тюрьму из своего скрипта, используйте prison.jail, prison.release и prison.timeLeft из lib (TypeScript) или aiLib.prison.* (Lua). Они идут через слой тюрьмы AI Core и попадают в тот скрипт тюрьмы, который запущен (ai-prison, qb-prison, rcore_prison, xt-prison, tgiann-policejob). Экспорты ниже являются тем, что вызывает этот слой, пока запущен ai-prison.

Функции lib (рекомендуется)

prison.jail

Отправляет загруженного игрока в тюрьму на несколько минут. С ai-prison: игрок попадает в камеру, предметы забираются (переключатель в панели), срок обрезается до Longest sentence, и записывается запись MDT jail.

Сторона: сервер · Ожидание: нет

Сигнатура
prison.jail(source: number, minutes: number, by?: number): boolean
Lua
local ok = aiLib.prison.jail(source, minutes, by)

Параметры

Prop

Type

Возвращает

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

Пример

import { addCommand, notify, prison } from "@aicore-fivem/lib/server";

// /judge <id> <minutes>: для игроков с принципалом judge.
addCommand(
  "judge",
  {
    help: "Sentence a player",
    restricted: "ai.job.judge",
    params: [
      { name: "id", type: "playerId" },
      { name: "minutes", type: "number" },
    ] as const,
  },
  (source, { id, minutes }) => {
    if (!prison.jail(id, minutes, source))
      notify(source, "No prison is running", "error");
  },
);

Заключение игрока, который уже сидит, устанавливает срок в новую длину (а не прибавляет). Если скриптом тюрьмы является tgiann-policejob, минуты вместо этого прибавляются.

prison.release

Выпускает заключённого игрока сейчас. С ai-prison: он попадает в точку освобождения и получает обратно забранные предметы.

Сторона: сервер · Ожидание: нет

Сигнатура
prison.release(source: number): boolean
Lua
local ok = aiLib.prison.release(source)

Параметры

Prop

Type

Возвращает

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

prison.timeLeft

Оставшиеся минуты срока.

Сторона: сервер · Ожидание: нет

Сигнатура
prison.timeLeft(source: number): number
Lua
local minutes = aiLib.prison.timeLeft(source)

Возвращает

Оставшиеся минуты, 0, если игрок свободен или ни один скрипт тюрьмы не запущен.

Пример

import { inventory, notify, prison } from "@aicore-fivem/lib/server";

inventory.registerUsableItem("phone", (source: number) => {
  if (prison.timeLeft(source) > 0) {
    notify(source, "No phones in prison", "error");
    return;
  }
  // ... открыть телефон
});

Серверные экспорты

Слой тюрьмы вызывает их, пока запущен ai-prison. Они не типизированы в @aicore-fivem/shared: в TypeScript вызывайте их через callExport("ai-prison", name, ...args). Каждый экспорт также отвечает под своим двойником в нижнем регистре (jailPlayer).

JailPlayer

Сигнатура
JailPlayer(source: number, minutes: number, by?: number): boolean
Lua
local ok = exports['ai-prison']:JailPlayer(source, minutes, by)

То же поведение и возвращаемое значение, что и у prison.jail. Отвечает false, если source или minutes не число.

ReleasePlayer

Сигнатура
ReleasePlayer(source: number): boolean
Lua
local ok = exports['ai-prison']:ReleasePlayer(source)

true, если игрок сидел и теперь освобождён; иначе false.

GetJailTime

Сигнатура
GetJailTime(source: number): number
Lua
local minutes = exports['ai-prison']:GetJailTime(source)

Оставшиеся минуты, 0, если свободен.

Метаданные персонажа

ai-prison хранит своё состояние в метаданных персонажа ai-core (читайте через GetMeta(source, key) из экспортов ai-core или PlayerData.metadata через мост QB).

КлючТипЧто хранит
injailnumberОставшиеся минуты (ключ QBCore). Запись числа больше 0 из другого скрипта начинает срок; запись 0 освобождает.
jailitems{ name: string; count: number; metadata?: object }[] | nullПредметы, забранные у ворот, возвращаются при освобождении.
ai:jailLeftAtnumber | nullВремя (мс с 1970), когда игрок вышел, находясь в заключении, выставляется только при включённом Count time offline.

Предпочитайте prison.jail записи в injail: он работает с любым скриптом тюрьмы, а injail читают только ai-prison и тюрьмы в стиле QB.

Приватные события и колбэки

Собственный контракт скрипта (resource/common/prison.ts). Они могут меняться между версиями: не вызывайте и не слушайте их из других ресурсов.

ИмяНаправлениеЧто передаёт
ai-prison:client:stateserver -> jailed player(minutes): оставшиеся минуты, 0, если свободен (при загрузке, каждую минуту, при освобождении).
ai-prison:client:moveserver -> jailed player(point): телепорт в камеру, обратно внутрь после побега или наружу при освобождении.
ai-prison:workStartclient callback(taskId): работа на месте; сервер запускает полосу прогресса, затем снимает минуты.
ai-prison:canteenclient callback(): еда из столовой.

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