AI Core
Prace i służbyai-police

ai-police dla deweloperów

State bag cuffed z ai-police, jak jego akcje docierają do innych skryptów przez AI Core oraz jego prywatne zdarzenia.

ai-police nie ma eksportów. Jego mandaty, wpisy, wyroki więzienia, alerty, przeszukania i odholowania przechodzą przez warstwy AI Core, więc inny skrypt nigdy nie wywołuje ai-police. Inny skrypt może odczytać stan cuffed.

State bag cuffed

true w state bagu gracza, dopóki ai-police trzyma go skutego; w przeciwnym razie false (lub brak). Zapisuje go serwer; każdy klient może go odczytać. Nazwa klucza to PLAYER_BAGS.cuffed w @aicore-fivem/shared.

Strona: serwer i klient (odczyt) · Czeka: nie

Sygnatura
new PlayerState<boolean>(PLAYER_BAGS.cuffed, stateBoolean).get(serverId: number): boolean | undefined
Lua
local cuffed = Player(source).state.cuffed == true   -- serwer
local cuffed = LocalPlayer.state.cuffed == true      -- klient, lokalny gracz

Zwraca

true, gdy skuty. false po rozkuciu, undefined / nil, gdy gracz nie był skuty w tej sesji.

Przykład

Odmów użycia przedmiotu, gdy gracz jest skuty:

import { inventory, notify, PlayerState, stateBoolean } from "@aicore-fivem/lib/server";
import { PLAYER_BAGS } from "@aicore-fivem/shared";

const cuffed = new PlayerState(PLAYER_BAGS.cuffed, stateBoolean);

inventory.registerUsableItem("radio", (source: number) => {
  if (cuffed.get(source) === true) {
    notify(source, "You cannot use that while cuffed", "error");
    return;
  }
  // ... otwórz radio
});

Nie ustawiaj cuffed sam: ai-police prowadzi na serwerze własną listę skutych graczy i eskort i tylko odwzorowuje ją w state bagu. Wartość zapisana przez inny skrypt nie jest prawdziwym skuciem i zostaje nadpisana przy następnej akcji skuwania.

Co ai-police wysyła przez AI Core

AkcjaUżywana warstwaCo tam trafia
Wystawienie mandatubilling.send z bibliotekiRachunek od pracy funkcjonariusza na służbie, etykieta „Police fine”.
Wystawienie mandatumdt.record z bibliotekiWpis fine z kwotą.
Wysłanie do więzieniaprison.jail z bibliotekiWyrok, z funkcjonariuszem jako by.
Wysłanie do więzieniamdt.record z bibliotekiWpis arrest z liczbą minut.
Strzałydispatch.alert z bibliotekiJeden alert na obszar 150 m co 30 s, do prac policyjnych z panelu.
Przeszukanieinventory.openInventory z bibliotekiEkwipunek celu otwiera się funkcjonariuszowi.
Odholowaniegarages.impound z bibliotekiSkrypt garażu zabiera pojazd; jeśli odmówi, pojazd jest usuwany.

Aby reagować na którąkolwiek z tych akcji, nasłuchuj po stronie warstwy (twojego skryptu rachunków, MDT, więzienia lub alertów), a nie na ai-police.

Prywatne zdarzenia i callbacki

Własny kontrakt klient-serwer skryptu (resource/common/police.ts). Serwer sprawdza służbę, odległość i stan skucia przy każdym wywołaniu. Mogą się zmieniać między wersjami: nie wywołuj ich ani nie nasłuchuj ich z innych zasobów.

NazwaKierunekCo przenosi
ai-police:actcallback klienta(action, target, extra?): funkcjonariusz działa na najbliższym graczu (ID na serwerze) lub pojeździe (ID sieciowe). Odpowiada { ok }.
ai-police:dutycallback klienta(stationId): przełącz służbę na posterunku. Odpowiada { ok, onDuty }.
ai-police:shotklient -> serwer(x, y, z): gracz wystrzelił z broni (z limitem, liczą się tylko osoby spoza policji).
ai-police:client:cuffedserwer -> cel(cuffed: boolean).
ai-police:client:escortserwer -> cel(officerNetId | null): przyczep do funkcjonariusza albo puść.
ai-police:client:seatserwer -> cel(vehicleNetId | null): usiądź z tyłu pojazdu albo wysiądź.

Na tej stronie