AI Core
Jobs und Diensteai-prison

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

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

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

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

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

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

true, wenn der Spieler inhaftiert war und jetzt entlassen ist; sonst false.

GetJailTime

Signatur
GetJailTime(source: number): number
Lua
local 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üsselTypWas er enthält
injailnumberVerbleibende 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 }[] | nullDie am Tor abgenommenen Items, bei der Entlassung zurückgegeben.
ai:jailLeftAtnumber | nullZeitpunkt (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.

NameRichtungWas es überträgt
ai-prison:client:stateServer -> inhaftierter Spieler(minutes): verbleibende Minuten, 0, wenn frei (beim Laden, jede Minute, bei der Entlassung).
ai-prison:client:moveServer -> inhaftierter Spieler(point): Teleport in eine Zelle, nach einem Ausbruch zurück nach innen oder bei der Entlassung hinaus.
ai-prison:workStartClient-Callback(taskId): an einer Stelle arbeiten; der Server lässt den Fortschrittsbalken laufen und zieht dann Minuten ab.
ai-prison:canteenClient-Callback(): eine Mahlzeit aus der Kantine.

Auf dieser Seite