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): booleanlocal 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): booleanlocal ok = aiLib.prison.release(source)Параметры
Prop
Type
Возвращает
true, если игрок сидел и теперь свободен. false, если он не сидел или ни один скрипт тюрьмы не запущен.
prison.timeLeft
Оставшиеся минуты срока.
Сторона: сервер · Ожидание: нет
prison.timeLeft(source: number): numberlocal 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): booleanlocal ok = exports['ai-prison']:JailPlayer(source, minutes, by)То же поведение и возвращаемое значение, что и у prison.jail. Отвечает false, если source или minutes не число.
ReleasePlayer
ReleasePlayer(source: number): booleanlocal ok = exports['ai-prison']:ReleasePlayer(source)true, если игрок сидел и теперь освобождён; иначе false.
GetJailTime
GetJailTime(source: number): numberlocal minutes = exports['ai-prison']:GetJailTime(source)Оставшиеся минуты, 0, если свободен.
Метаданные персонажа
ai-prison хранит своё состояние в метаданных персонажа ai-core (читайте через GetMeta(source, key) из экспортов ai-core или PlayerData.metadata через мост QB).
| Ключ | Тип | Что хранит |
|---|---|---|
injail | number | Оставшиеся минуты (ключ QBCore). Запись числа больше 0 из другого скрипта начинает срок; запись 0 освобождает. |
jailitems | { name: string; count: number; metadata?: object }[] | null | Предметы, забранные у ворот, возвращаются при освобождении. |
ai:jailLeftAt | number | null | Время (мс с 1970), когда игрок вышел, находясь в заключении, выставляется только при включённом Count time offline. |
Предпочитайте prison.jail записи в injail: он работает с любым скриптом тюрьмы, а injail читают только ai-prison и тюрьмы в стиле QB.
Приватные события и колбэки
Собственный контракт скрипта (resource/common/prison.ts). Они могут меняться между версиями: не вызывайте и не слушайте их из других ресурсов.
| Имя | Направление | Что передаёт |
|---|---|---|
ai-prison:client:state | server -> jailed player | (minutes): оставшиеся минуты, 0, если свободен (при загрузке, каждую минуту, при освобождении). |
ai-prison:client:move | server -> jailed player | (point): телепорт в камеру, обратно внутрь после побега или наружу при освобождении. |
ai-prison:workStart | client callback | (taskId): работа на месте; сервер запускает полосу прогресса, затем снимает минуты. |
ai-prison:canteen | client callback | (): еда из столовой. |