AI Core
Empregos e serviçosai-prison

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

Signature
prison.jail(source: number, minutes: number, by?: number): boolean
Lua
local 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

Signature
prison.release(source: number): boolean
Lua
local 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

Signature
prison.timeLeft(source: number): number
Lua
local 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

Signature
JailPlayer(source: number, minutes: number, by?: number): boolean
Lua
local 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

Signature
ReleasePlayer(source: number): boolean
Lua
local ok = exports['ai-prison']:ReleasePlayer(source)

true quando o jogador estava preso e agora foi solto; false caso contrário.

GetJailTime

Signature
GetJailTime(source: number): number
Lua
local 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).

ChaveTipoO que guarda
injailnumberMinutos 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 }[] | nullOs itens retirados no portão, devolvidos na soltura.
ai:jailLeftAtnumber | nullMomento (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.

NomeDireçãoO que carrega
ai-prison:client:stateservidor -> jogador preso(minutes): minutos restantes, 0 quando livre (no carregamento, a cada minuto, na soltura).
ai-prison:client:moveservidor -> jogador preso(point): teleporta para uma cela, de volta para dentro depois de uma fuga, ou para fora na soltura.
ai-prison:workStartcallback do cliente(taskId): trabalha em um ponto; o servidor roda a barra de progresso, depois desconta minutos.
ai-prison:canteencallback do cliente(): uma refeição da cantina.

Nesta página