ai-prison für Entwickler
Inhaftieren, Entlassen und Restzeit über den Gefängnis-Layer von AI Core, die Server-Exports von ai-prison und die Charakter-Metadaten, die es führt.
Um aus deinem Skript zu inhaftieren, nutze prison.jail, prison.release und prison.timeLeft der Lib (TypeScript) oder aiLib.prison.* (Lua). Sie laufen über den Gefängnis-Layer von AI Core und erreichen das gerade laufende Gefängnisskript (ai-prison, qb-prison, rcore_prison, xt-prison, tgiann-policejob). Die Exports weiter unten sind das, was dieser Layer aufruft, solange ai-prison läuft.
Lib-Funktionen (empfohlen)
prison.jail
Schickt einen geladenen Spieler für einige Minuten ins Gefängnis. Mit ai-prison: Der Spieler kommt in eine Zelle, die Items werden abgenommen (Panel-Schalter), die Strafe wird auf Longest sentence gekürzt, und ein jail-Eintrag im MDT wird geschrieben.
Seite: Server · Wartet: nein
prison.jail(source: number, minutes: number, by?: number): booleanlocal ok = aiLib.prison.jail(source, minutes, by)Parameter
Prop
Type
Rückgabewert
true, wenn das Gefängnisskript die Strafe angenommen hat. false, wenn kein Gefängnisskript läuft oder der Spieler keinen geladenen Charakter hat.
Beispiel
import { addCommand, notify, prison } from "@aicore-fivem/lib/server";
// /judge <id> <minutes>: für Spieler mit dem Principal judge.
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");
},
);Einen bereits inhaftierten Spieler zu inhaftieren, setzt die Strafe auf die neue Länge (es addiert nicht). Mit tgiann-policejob als Gefängnisskript werden die Minuten stattdessen addiert.
prison.release
Lässt einen inhaftierten Spieler sofort frei. Mit ai-prison: Er kommt zum Entlassungspunkt und bekommt seine abgenommenen Items zurück.
Seite: Server · Wartet: nein
prison.release(source: number): booleanlocal ok = aiLib.prison.release(source)Parameter
Prop
Type
Rückgabewert
true, wenn der Spieler inhaftiert war und jetzt frei ist. false, wenn er nicht inhaftiert war oder kein Gefängnisskript läuft.
prison.timeLeft
Verbleibende Minuten der Strafe.
Seite: Server · Wartet: nein
prison.timeLeft(source: number): numberlocal minutes = aiLib.prison.timeLeft(source)Rückgabewert
Die verbleibenden Minuten, 0, wenn der Spieler frei ist oder kein Gefängnisskript läuft.
Beispiel
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;
}
// ... das Telefon öffnen
});Server-Exports
Der Gefängnis-Layer ruft diese auf, solange ai-prison läuft. Sie sind nicht in @aicore-fivem/shared typisiert: In TypeScript rufst du sie mit callExport("ai-prison", name, ...args) auf. Jeder Export antwortet auch unter seinem kleingeschriebenen Gegenstück (jailPlayer).
JailPlayer
JailPlayer(source: number, minutes: number, by?: number): booleanlocal ok = exports['ai-prison']:JailPlayer(source, minutes, by)Dasselbe Verhalten und derselbe Rückgabewert wie prison.jail. Antwortet mit false, wenn source oder minutes keine Zahl ist.
ReleasePlayer
ReleasePlayer(source: number): booleanlocal ok = exports['ai-prison']:ReleasePlayer(source)true, wenn der Spieler inhaftiert war und jetzt entlassen ist; sonst false.
GetJailTime
GetJailTime(source: number): numberlocal minutes = exports['ai-prison']:GetJailTime(source)Verbleibende Minuten, 0, wenn frei.
Charakter-Metadaten
ai-prison speichert seinen Zustand in Charakter-Metadaten von ai-core (gelesen mit GetMeta(source, key) über die Exports von ai-core oder PlayerData.metadata über die QB-Brücke).
| Schlüssel | Typ | Was er enthält |
|---|---|---|
injail | number | Verbleibende Minuten (der Schlüssel von QBCore). Eine Zahl über 0 aus einem anderen Skript zu schreiben, startet eine Strafe; 0 zu schreiben, entlässt. |
jailitems | { name: string; count: number; metadata?: object }[] | null | Die am Tor abgenommenen Items, bei der Entlassung zurückgegeben. |
ai:jailLeftAt | number | null | Zeitpunkt (ms seit 1970), zu dem der Spieler während der Haft gegangen ist, nur gesetzt, wenn Count time offline an ist. |
Ziehe prison.jail dem Schreiben von injail vor: Es funktioniert mit jedem Gefängnisskript, während injail nur von ai-prison und Gefängnissen im QB-Stil gelesen wird.
Private Events und Callbacks
Der eigene Vertrag des Skripts (resource/common/prison.ts). Sie können sich zwischen Versionen ändern: Löse sie nicht aus anderen Ressourcen aus und höre nicht darauf.
| Name | Richtung | Was es überträgt |
|---|---|---|
ai-prison:client:state | Server -> inhaftierter Spieler | (minutes): verbleibende Minuten, 0, wenn frei (beim Laden, jede Minute, bei der Entlassung). |
ai-prison:client:move | Server -> inhaftierter Spieler | (point): Teleport in eine Zelle, nach einem Ausbruch zurück nach innen oder bei der Entlassung hinaus. |
ai-prison:workStart | Client-Callback | (taskId): an einer Stelle arbeiten; der Server lässt den Fortschrittsbalken laufen und zieht dann Minuten ab. |
ai-prison:canteen | Client-Callback | (): eine Mahlzeit aus der Kantine. |