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
prison.jail(source: number, minutes: number, by?: number): booleanlocal 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
prison.release(source: number): booleanlocal 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
prison.timeLeft(source: number): numberlocal 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
JailPlayer(source: number, minutes: number, by?: number): booleanlocal 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
ReleasePlayer(source: number): booleanlocal ok = exports['ai-prison']:ReleasePlayer(source)true quand le joueur était incarcéré et est maintenant libéré ; false sinon.
GetJailTime
GetJailTime(source: number): numberlocal 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é | Type | Ce qu’elle contient |
|---|---|---|
injail | number | Minutes 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 }[] | null | Les objets confisqués à l’entrée, rendus à la libération. |
ai:jailLeftAt | number | null | Le 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.
| Nom | Direction | Ce qu’il transporte |
|---|---|---|
ai-prison:client:state | serveur -> joueur incarcéré | (minutes) : minutes restantes, 0 quand il est libre (au chargement, chaque minute, à la libération). |
ai-prison:client:move | serveur -> 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:workStart | callback client | (taskId) : travailler à un poste ; le serveur exécute la barre de progression, puis retire des minutes. |
ai-prison:canteen | callback client | () : un repas de la cantine. |
ai-prison
Des peines de prison comptées par le serveur, avec objets confisqués à l’entrée, travail en prison, cantine et évasions sanctionnées par du temps supplémentaire.
ai-death
Joueurs à terre, réapparition à l’hôpital le plus proche, réanimation par les médecins avec un medikit, appels aux médecins et soins à l’accueil.