AI Core
Métiers et servicesai-prison

ai-prison pour les développeurs

Incarcérer, libérer et lire le temps restant à travers la couche prison d’AI Core, les exports serveur d’ai-prison et les métadonnées de personnage qu’il conserve.

Pour incarcérer depuis votre script, utilisez prison.jail, prison.release et prison.timeLeft de la lib (TypeScript) ou aiLib.prison.* (Lua). Ils passent par la couche prison d’AI Core et atteignent le script de prison qui tourne, quel qu’il soit (ai-prison, qb-prison, rcore_prison, xt-prison, tgiann-policejob). Les exports plus bas sont ce qu’appelle cette couche tant qu’ai-prison tourne.

Fonctions de la lib (recommandé)

prison.jail

Envoie un joueur chargé en prison pour un certain nombre de minutes. Avec ai-prison : le joueur va dans une cellule, les objets sont confisqués (interrupteur du panneau), la peine est ramenée à Longest sentence, et une fiche MDT jail est écrite.

Côté : serveur · Attend : non

Signature
prison.jail(source: number, minutes: number, by?: number): boolean
Lua
local ok = aiLib.prison.jail(source, minutes, by)

Paramètres

Prop

Type

Retour

true quand le script de prison a pris la peine. false quand aucun script de prison ne tourne ou que le joueur n’a pas de personnage chargé.

Exemple

import { addCommand, notify, prison } from "@aicore-fivem/lib/server";

// /judge <id> <minutes> : pour les joueurs ayant le principal de juge.
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");
  },
);

Incarcérer un joueur déjà incarcéré règle la peine à la nouvelle durée (elle ne s’ajoute pas). Avec tgiann-policejob comme script de prison, les minutes s’ajoutent au contraire.

prison.release

Libère maintenant un joueur incarcéré. Avec ai-prison : il va au point de libération et récupère ses objets confisqués.

Côté : serveur · Attend : non

Signature
prison.release(source: number): boolean
Lua
local ok = aiLib.prison.release(source)

Paramètres

Prop

Type

Retour

true quand le joueur était incarcéré et est maintenant libre. false quand il n’était pas incarcéré ou qu’aucun script de prison ne tourne.

prison.timeLeft

Minutes de peine restantes.

Côté : serveur · Attend : non

Signature
prison.timeLeft(source: number): number
Lua
local minutes = aiLib.prison.timeLeft(source)

Retour

Les minutes restantes, 0 quand le joueur est libre ou qu’aucun script de prison ne tourne.

Exemple

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;
  }
  // ... ouvrir le téléphone
});

Exports serveur

La couche prison les appelle tant qu’ai-prison tourne. Ils ne sont pas typés dans @aicore-fivem/shared : en TypeScript, appelez-les avec callExport("ai-prison", name, ...args). Chaque export répond aussi sous son jumeau en minuscules (jailPlayer).

JailPlayer

Signature
JailPlayer(source: number, minutes: number, by?: number): boolean
Lua
local ok = exports['ai-prison']:JailPlayer(source, minutes, by)

Même comportement et même valeur de retour que prison.jail. Répond false quand source ou minutes n’est pas un nombre.

ReleasePlayer

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

true quand le joueur était incarcéré et est maintenant libéré ; false sinon.

GetJailTime

Signature
GetJailTime(source: number): number
Lua
local minutes = exports['ai-prison']:GetJailTime(source)

Minutes restantes, 0 quand il est libre.

Métadonnées de personnage

ai-prison garde son état dans les métadonnées de personnage d’ai-core (à lire avec GetMeta(source, key) sur les exports d’ai-core, ou PlayerData.metadata via le pont QB).

CléTypeCe qu’elle contient
injailnumberMinutes restantes (la clé de QBCore). Écrire un nombre supérieur à 0 depuis un autre script démarre une peine ; écrire 0 libère.
jailitems{ name: string; count: number; metadata?: object }[] | nullLes objets confisqués à l’entrée, rendus à la libération.
ai:jailLeftAtnumber | nullLe moment (ms depuis 1970) où le joueur est parti pendant son incarcération, réglé uniquement quand Count time offline est activé.

Préférez prison.jail à l’écriture de injail : il fonctionne avec chaque script de prison, alors que injail n’est lu que par ai-prison et les prisons de style QB.

Events et callbacks privés

Le contrat propre du script (resource/common/prison.ts). Ils peuvent changer d’une version à l’autre : ne les déclenchez pas et ne les écoutez pas depuis d’autres ressources.

NomDirectionCe qu’il transporte
ai-prison:client:stateserveur -> joueur incarcéré(minutes) : minutes restantes, 0 quand il est libre (au chargement, chaque minute, à la libération).
ai-prison:client:moveserveur -> joueur incarcéré(point) : téléportation dans une cellule, retour à l’intérieur après une évasion, ou sortie à la libération.
ai-prison:workStartcallback client(taskId) : travailler à un poste ; le serveur exécute la barre de progression, puis retire des minutes.
ai-prison:canteencallback client() : un repas de la cantine.

Sur cette page