AI Core
Prace i służbyai-prison

ai-prison dla deweloperów

Więzienie, zwolnienie i pozostały czas przez warstwę więzienia AI Core, eksporty serwera ai-prison i metadane postaci, które przechowuje.

Aby zamknąć gracza w więzieniu ze swojego skryptu, używaj prison.jail, prison.release i prison.timeLeft z biblioteki (TypeScript) lub aiLib.prison.* (Lua). Przechodzą przez warstwę więzienia AI Core i docierają do każdego działającego skryptu więzienia (ai-prison, qb-prison, rcore_prison, xt-prison, tgiann-policejob). Eksporty opisane niżej to to, co wywołuje ta warstwa, gdy działa ai-prison.

Funkcje biblioteki (zalecane)

prison.jail

Wysyła wczytanego gracza do więzienia na określoną liczbę minut. Z ai-prison: gracz trafia do celi, przedmioty są zabierane (przełącznik w panelu), wyrok jest skracany do Longest sentence, a w MDT zapisywany jest wpis jail.

Strona: serwer · Czeka: nie

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

Parametry

Prop

Type

Zwraca

true, gdy skrypt więzienia przyjął wyrok. false, gdy nie działa żaden skrypt więzienia albo gracz nie ma wczytanej postaci.

Przykład

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

// /judge <id> <minutes>: dla graczy z principalem sędziego.
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");
  },
);

Zamknięcie gracza, który już jest w więzieniu, ustawia wyrok na nową długość (nie dodaje). Z tgiann-policejob jako skryptem więzienia minuty są zamiast tego dodawane.

prison.release

Wypuszcza uwięzionego gracza od razu. Z ai-prison: trafia do punktu zwolnienia i odzyskuje zabrane przedmioty.

Strona: serwer · Czeka: nie

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

Parametry

Prop

Type

Zwraca

true, gdy gracz był w więzieniu i teraz jest wolny. false, gdy nie był w więzieniu albo nie działa żaden skrypt więzienia.

prison.timeLeft

Minuty pozostałego wyroku.

Strona: serwer · Czeka: nie

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

Zwraca

Pozostałe minuty, 0, gdy gracz jest wolny albo nie działa żaden skrypt więzienia.

Przykład

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;
  }
  // ... otwórz telefon
});

Eksporty serwera

Warstwa więzienia wywołuje je, gdy działa ai-prison. Nie są typowane w @aicore-fivem/shared: w TypeScript wywołuj je przez callExport("ai-prison", name, ...args). Każdy eksport odpowiada też pod swoim odpowiednikiem pisanym małą literą (jailPlayer).

JailPlayer

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

To samo zachowanie i wartość zwracana co prison.jail. Odpowiada false, gdy source lub minutes nie jest liczbą.

ReleasePlayer

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

true, gdy gracz był w więzieniu i teraz jest zwolniony; w przeciwnym razie false.

GetJailTime

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

Pozostałe minuty, 0, gdy wolny.

Metadane postaci

ai-prison przechowuje swój stan w metadanych postaci ai-core (odczyt przez GetMeta(source, key) z eksportów ai-core lub PlayerData.metadata przez most QB).

KluczTypCo przechowuje
injailnumberPozostałe minuty (klucz QBCore). Zapisanie liczby większej od 0 z innego skryptu rozpoczyna wyrok; zapisanie 0 zwalnia.
jailitems{ name: string; count: number; metadata?: object }[] | nullPrzedmioty zabrane przy bramie, oddawane przy zwolnieniu.
ai:jailLeftAtnumber | nullCzas (ms od 1970), w którym gracz wyszedł podczas odsiadki, ustawiany tylko wtedy, gdy Count time offline jest włączone.

Wybieraj prison.jail zamiast zapisywania injail: działa z każdym skryptem więzienia, a injail czytają tylko ai-prison i więzienia w stylu QB.

Prywatne zdarzenia i callbacki

Własny kontrakt skryptu (resource/common/prison.ts). Mogą się zmieniać między wersjami: nie wywołuj ich ani nie nasłuchuj ich z innych zasobów.

NazwaKierunekCo przenosi
ai-prison:client:stateserwer -> uwięziony gracz(minutes): pozostałe minuty, 0, gdy wolny (przy wczytaniu, co minutę, przy zwolnieniu).
ai-prison:client:moveserwer -> uwięziony gracz(point): teleport do celi, z powrotem do środka po ucieczce albo na zewnątrz przy zwolnieniu.
ai-prison:workStartcallback klienta(taskId): praca w punkcie; serwer prowadzi pasek postępu, potem odejmuje minuty.
ai-prison:canteencallback klienta(): posiłek ze stołówki.

Na tej stronie