ai-exitsleeping для разработчиков
Серверные и клиентские экспорты, события-хуки и формат спящего тела ai-exitsleeping.
У ai-exitsleeping один серверный экспорт, три клиентских экспорта и четыре локальных события-хука (редактируемые хуки оригинального скрипта). Ни один не типизирован в @aicore-fivem/shared: в TypeScript вызывайте их через callExport.
Серверные экспорты
AddCreateCheck
Добавляет проверку, которая выполняется, когда игрок выходит. Верните false, чтобы не оставлять спящее тело (квартира, зона мероприятия, тюрьма). Используйте, когда ваш скрипт знает места, где тело не должно оставаться.
Сторона: сервер · Ожидание: нет
AddCreateCheck(id: string, check: (source: number, charId: number, coords: { x: number; y: number; z: number; heading: number }) => boolean): voidexports['ai-exitsleeping']:AddCreateCheck(id, function(source, charId, coords) return true end)Параметры
Prop
Type
Возвращает
Ничего. Проверка удаляется сама, когда ваш ресурс останавливается.
Пример
import { callExport } from "@aicore-fivem/lib/server";
// Никаких спящих тел внутри арены мероприятия (200 м вокруг её центра).
const ARENA = { x: -324.0, y: -1968.0, z: 21.6 };
callExport("ai-exitsleeping", "AddCreateCheck", "arena",
(_source: number, _charId: number, c: { x: number; y: number; z: number }) =>
Math.hypot(c.x - ARENA.x, c.y - ARENA.y) > 200,
);Для фиксированного места то же самое без кода делает Hidden area в панели.
Клиентские экспорты
PlayerLoaded
Будит тело локального игрока и начинает показывать тела вокруг. Вызывайте его из скрипта появления после его собственного окончательного появления, и только когда Wake up on в панели установлено в PlayerLoaded export (spawn script).
Сторона: клиент · Ожидание: нет
PlayerLoaded(): voidexports['ai-exitsleeping']:PlayerLoaded()Возвращает
Ничего. Второй вызов до следующей смены персонажа ничего не делает.
SetHidden
Скрывает все спящие тела на этом клиенте, пока действует хотя бы одна причина. Используйте, пока игрок находится там, где тела выглядели бы неуместно (интерьер-шелл, катсцена).
Сторона: клиент · Ожидание: нет
SetHidden(reason: string, hidden: boolean): voidexports['ai-exitsleeping']:SetHidden('myshell', true)Параметры
Prop
Type
Возвращает
Ничего. Ваши причины удаляются, когда ваш ресурс останавливается.
Пример
import { callExport } from "@aicore-fivem/lib/client";
export function enterShell(): void {
callExport("ai-exitsleeping", "SetHidden", "shell", true);
}
export function leaveShell(): void {
callExport("ai-exitsleeping", "SetHidden", "shell", false);
}SetCarryBlocked
Скрывает опцию переноски на этом клиенте, пока действует хотя бы одна причина (ваши собственные правила: мини-игра, тюрьма).
Сторона: клиент · Ожидание: нет
SetCarryBlocked(reason: string, blocked: boolean): voidexports['ai-exitsleeping']:SetCarryBlocked('minigame', true)Возвращает
Ничего. Те же правила причин, что и у SetHidden. Переноска и так заблокирована в транспорте, без сознания и в наручниках.
События-хуки
Локальные события (не отправляются по сети), которые можно слушать.
ai-exitsleeping:created
Для вышедшего персонажа создано спящее тело. Сторона: сервер.
Prop
Type
ai-exitsleeping:removed
Спящее тело исчезло (проснулось, истекло, переключено). Сторона: сервер. Аргумент: charId: number.
ai-exitsleeping:positionChanged
Позиция тела изменилась (несут, везут, положили). Сторона: сервер. Аргументы: charId: number, coords: { x, y, z, heading }.
ai-exitsleeping:client:pedSpawned
На этом клиенте создан спящий пед. Сторона: клиент. Аргументы: ped: number (локальный, не сетевой пед), view: SleeperView.
// Сервер: записывать в лог каждое тело, которое появляется и исчезает.
on("ai-exitsleeping:created", (charId: number, view: { x: number; y: number; z: number }) => {
console.log(`character ${charId} fell asleep at ${view.x}, ${view.y}, ${view.z}`);
});
on("ai-exitsleeping:removed", (charId: number) => {
console.log(`character ${charId} woke up`);
});SleeperView
Prop
Type
Внутренние события
ai-exitsleeping:wake, area, client:area, look, startCarry, stopCarry, putInVehicle, takeOut ходят между его собственным клиентом и сервером; не вызывайте их.