AI Core
Meslekler ve hizmetlerai-police

Geliştiriciler için ai-police

ai-police’in cuffed state bag’i, eylemlerinin AI Core üzerinden diğer script’lere nasıl ulaştığı ve özel event’leri.

ai-police’in hiç export’u yoktur. Cezaları, kayıtları, hapis cezaları, ihbarları, üst aramaları ve araç çekmeleri AI Core’un katmanlarından geçer, bu yüzden başka bir script asla ai-police’i çağırmaz. Başka bir script’in okuyabildiği şey cuffed durumudur.

cuffed state bag’i

ai-police oyuncuyu kelepçeli tuttuğu sürece oyuncunun state bag’inde true; aksi halde false (ya da hiç yok). Server yazar; her client okuyabilir. Anahtar adı @aicore-fivem/shared içindeki PLAYER_BAGS.cuffed.

Taraf: Server ve client (okuma) · Bekler: hayır

Signature
new PlayerState<boolean>(PLAYER_BAGS.cuffed, stateBoolean).get(serverId: number): boolean | undefined
Lua
local cuffed = Player(source).state.cuffed == true   -- server
local cuffed = LocalPlayer.state.cuffed == true      -- client, yerel oyuncu

Dönüş değeri

Kelepçeliyken true. Kelepçesi çözüldükten sonra false; oyuncu bu oturumda hiç kelepçelenmediyse undefined / nil.

Örnek

Oyuncu kelepçeliyken bir eşyayı reddet:

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;
  }
  // ... telsizi aç
});

cuffed değerini kendin ayarlama: ai-police kelepçeli oyuncuların ve eşlik edilenlerin listesini server’da kendisi tutar ve sadece state bag’e yansıtır. Başka bir script’in yazdığı değer gerçek bir kelepçe değildir ve bir sonraki kelepçe eyleminde üzerine yazılır.

ai-police’in AI Core üzerinden gönderdikleri

EylemKullandığı katmanOraya ne düşer
Ceza yazmalib billing.sendMemurun mesaideki mesleğinden "Police fine" etiketli bir fatura.
Ceza yazmalib mdt.recordTutarla birlikte bir fine kaydı.
Hapse göndermelib prison.jailby olarak memurla birlikte ceza.
Hapse göndermelib mdt.recordDakikalarla birlikte bir arrest kaydı.
Ateş açıldılib dispatch.alertPaneldeki polis mesleklerine, her 150 m’lik alan için 30 sn’de bir ihbar.
Üst aramalib inventory.openInventoryHedefin envanteri memur için açılır.
Araç çekmelib garages.impoundGaraj script’i aracı alır; reddederse araç silinir.

Bunlardan birine tepki vermek için ai-police’i değil, katmanın tarafını dinle (fatura, MDT, hapishane ya da ihbar script’in).

Özel event’ler ve callback’ler

Script’in kendi client-server sözleşmesi (resource/common/police.ts). Server her çağrıda mesaiyi, mesafeyi ve kelepçe durumunu kontrol eder. Sürümler arasında değişebilirler: başka resource’lardan tetikleme ya da dinleme.

AdYönNe taşır
ai-police:actclient callback’i(action, target, extra?): bir memur en yakın oyuncu (server id) ya da araç (net id) üzerinde işlem yapar. { ok } ile cevap verir.
ai-police:dutyclient callback’i(stationId): bir karakolda mesaiye girip çıkar. { ok, onDuty } ile cevap verir.
ai-police:shotclient -> server(x, y, z): oyuncu bir silah ateşledi (hız sınırlı, sadece polis olmayanlar sayılır).
ai-police:client:cuffedserver -> hedef(cuffed: boolean).
ai-police:client:escortserver -> hedef(officerNetId | null): memura bağlan ya da bırakıl.
ai-police:client:seatserver -> hedef(vehicleNetId | null): bir aracın arkasına otur ya da in.

Bu sayfada