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
prison.jail(source: number, minutes: number, by?: number): booleanlocal 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
prison.release(source: number): booleanlocal 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
prison.timeLeft(source: number): numberlocal 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
JailPlayer(source: number, minutes: number, by?: number): booleanlocal 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
ReleasePlayer(source: number): booleanlocal ok = exports['ai-prison']:ReleasePlayer(source)true, gdy gracz był w więzieniu i teraz jest zwolniony; w przeciwnym razie false.
GetJailTime
GetJailTime(source: number): numberlocal 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).
| Klucz | Typ | Co przechowuje |
|---|---|---|
injail | number | Pozostał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 }[] | null | Przedmioty zabrane przy bramie, oddawane przy zwolnieniu. |
ai:jailLeftAt | number | null | Czas (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.
| Nazwa | Kierunek | Co przenosi |
|---|---|---|
ai-prison:client:state | serwer -> uwięziony gracz | (minutes): pozostałe minuty, 0, gdy wolny (przy wczytaniu, co minutę, przy zwolnieniu). |
ai-prison:client:move | serwer -> uwięziony gracz | (point): teleport do celi, z powrotem do środka po ucieczce albo na zewnątrz przy zwolnieniu. |
ai-prison:workStart | callback klienta | (taskId): praca w punkcie; serwer prowadzi pasek postępu, potem odejmuje minuty. |
ai-prison:canteen | callback klienta | (): posiłek ze stołówki. |