ai-exitsleeping para desarrolladores
Los exports de servidor y de cliente, los eventos hook y la forma de los durmientes de ai-exitsleeping.
ai-exitsleeping tiene un export de servidor, tres exports de cliente y cuatro eventos hook locales (los hooks editables del script original). Ninguno está tipado en @aicore-fivem/shared: en TypeScript llámalos con callExport.
Exports de servidor
AddCreateCheck
Añade una comprobación que se ejecuta cuando un jugador cierra sesión. Devuelve false para no dejar cuerpo dormido (un apartamento, una zona de evento, una cárcel). Úsalo cuando tu script conozca lugares donde no debe quedarse un cuerpo.
Lado: Servidor · Espera: no
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)Parámetros
Prop
Type
Devuelve
Nada. La comprobación se quita sola cuando tu recurso se detiene.
Ejemplo
import { callExport } from "@aicore-fivem/lib/server";
// Sin cuerpos dormidos dentro de la arena del evento (200 m alrededor de su centro).
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,
);Para un lugar fijo, una Hidden area del panel hace lo mismo sin código.
Exports de cliente
PlayerLoaded
Despierta el cuerpo del jugador local y empieza a mostrar los cuerpos de alrededor. Llámalo desde un script de aparición después de su propia aparición final, y solo cuando el Wake up on del panel sea PlayerLoaded export (spawn script).
Lado: Cliente · Espera: no
PlayerLoaded(): voidexports['ai-exitsleeping']:PlayerLoaded()Devuelve
Nada. Una segunda llamada antes del siguiente cambio de personaje no hace nada.
SetHidden
Oculta todos los cuerpos dormidos en este cliente mientras haya algún motivo activo. Úsalo mientras el jugador está en un lugar donde los cuerpos se verían mal (el interior de un shell, una cinemática).
Lado: Cliente · Espera: no
SetHidden(reason: string, hidden: boolean): voidexports['ai-exitsleeping']:SetHidden('myshell', true)Parámetros
Prop
Type
Devuelve
Nada. Tus motivos se quitan cuando tu recurso se detiene.
Ejemplo
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
Oculta la opción de cargar en este cliente mientras haya algún motivo activo (tus propias reglas: un minijuego, una cárcel).
Lado: Cliente · Espera: no
SetCarryBlocked(reason: string, blocked: boolean): voidexports['ai-exitsleeping']:SetCarryBlocked('minigame', true)Devuelve
Nada. Las mismas reglas de motivos que SetHidden. Cargar ya está bloqueado en un vehículo, abatido y esposado.
Eventos hook
Eventos locales (no se envían por la red) que puedes escuchar.
ai-exitsleeping:created
Se creó un cuerpo dormido para un personaje que cerró sesión. Lado: Servidor.
Prop
Type
ai-exitsleeping:removed
Un cuerpo dormido ha desaparecido (despertó, caducó, se desactivó). Lado: Servidor. Argumento: charId: number.
ai-exitsleeping:positionChanged
Ha cambiado la posición de un cuerpo (cargado, llevado en vehículo, dejado en el suelo). Lado: Servidor. Argumentos: charId: number, coords: { x, y, z, heading }.
ai-exitsleeping:client:pedSpawned
Se creó un ped dormido en este cliente. Lado: Cliente. Argumentos: ped: number (un ped local, no en red), view: SleeperView.
// Servidor: registra en el log cada cuerpo que aparece y desaparece.
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
Eventos internos
ai-exitsleeping:wake, area, client:area, look, startCarry, stopCarry, putInVehicle, takeOut son entre su propio cliente y su servidor; no los llames.