ai-prison para desenvolvedores
Prender, soltar e o tempo restante pela camada de prisão do AI Core, os exports do servidor do ai-prison, e a metadata de personagem que ele mantém.
Para prender a partir do seu script, use prison.jail, prison.release e prison.timeLeft da lib (TypeScript) ou aiLib.prison.* (Lua). Eles passam pela camada de prisão do AI Core e chegam a qualquer script de prisão que estiver rodando (ai-prison, qb-prison, rcore_prison, xt-prison, tgiann-policejob). Os exports mais abaixo são o que essa camada chama enquanto o ai-prison roda.
Funções da lib (recomendado)
prison.jail
Manda um jogador carregado para a prisão por alguns minutos. Com o ai-prison: o jogador vai para uma cela, os itens são retirados (interruptor no painel), a pena é cortada para Longest sentence, e um registro jail é escrito no MDT.
Lado: Servidor · Espera: não
prison.jail(source: number, minutes: number, by?: number): booleanlocal ok = aiLib.prison.jail(source, minutes, by)Parâmetros
Prop
Type
Retorno
true quando o script de prisão aceitou a pena. false quando nenhum script de prisão está rodando ou o jogador não tem um personagem carregado.
Exemplo
import { addCommand, notify, prison } from "@aicore-fivem/lib/server";
// /judge <id> <minutes>: para jogadores com o principal de juiz.
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");
},
);Prender um jogador que já está preso define a pena com a nova duração (não soma). Com o tgiann-policejob como script de prisão, os minutos são somados.
prison.release
Solta um jogador preso agora. Com o ai-prison: ele vai para o ponto de soltura e recebe de volta os itens retirados.
Lado: Servidor · Espera: não
prison.release(source: number): booleanlocal ok = aiLib.prison.release(source)Parâmetros
Prop
Type
Retorno
true quando o jogador estava preso e agora está livre. false quando ele não estava preso ou nenhum script de prisão está rodando.
prison.timeLeft
Minutos de pena restantes.
Lado: Servidor · Espera: não
prison.timeLeft(source: number): numberlocal minutes = aiLib.prison.timeLeft(source)Retorno
Os minutos restantes, 0 quando o jogador está livre ou nenhum script de prisão está rodando.
Exemplo
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;
}
// ... abre o celular
});Exports do servidor
A camada de prisão chama estes enquanto o ai-prison roda. Eles não são tipados em @aicore-fivem/shared: em TypeScript chame-os com callExport("ai-prison", name, ...args). Cada export também responde com seu equivalente em minúsculas (jailPlayer).
JailPlayer
JailPlayer(source: number, minutes: number, by?: number): booleanlocal ok = exports['ai-prison']:JailPlayer(source, minutes, by)Mesmo comportamento e valor de retorno que prison.jail. Responde false quando source ou minutes não é um número.
ReleasePlayer
ReleasePlayer(source: number): booleanlocal ok = exports['ai-prison']:ReleasePlayer(source)true quando o jogador estava preso e agora foi solto; false caso contrário.
GetJailTime
GetJailTime(source: number): numberlocal minutes = exports['ai-prison']:GetJailTime(source)Minutos restantes, 0 quando livre.
Metadata de personagem
O ai-prison mantém seu estado na metadata de personagem do ai-core (leia com GetMeta(source, key) nos exports do ai-core, ou PlayerData.metadata pela ponte QB).
| Chave | Tipo | O que guarda |
|---|---|---|
injail | number | Minutos restantes (a chave do QBCore). Escrever um número acima de 0 a partir de outro script começa uma pena; escrever 0 solta. |
jailitems | { name: string; count: number; metadata?: object }[] | null | Os itens retirados no portão, devolvidos na soltura. |
ai:jailLeftAt | number | null | Momento (ms desde 1970) em que o jogador saiu enquanto preso, definido só quando Count time offline está ligado. |
Prefira prison.jail a escrever injail: ele funciona com todo script de prisão, enquanto injail só é lido pelo ai-prison e por prisões no estilo QB.
Eventos e callbacks privados
O contrato próprio do script (resource/common/prison.ts). Eles podem mudar entre versões: não os dispare nem os escute a partir de outros recursos.
| Nome | Direção | O que carrega |
|---|---|---|
ai-prison:client:state | servidor -> jogador preso | (minutes): minutos restantes, 0 quando livre (no carregamento, a cada minuto, na soltura). |
ai-prison:client:move | servidor -> jogador preso | (point): teleporta para uma cela, de volta para dentro depois de uma fuga, ou para fora na soltura. |
ai-prison:workStart | callback do cliente | (taskId): trabalha em um ponto; o servidor roda a barra de progresso, depois desconta minutos. |
ai-prison:canteen | callback do cliente | (): uma refeição da cantina. |