AI Core
Dokumentacja APILib: serwer

State bagi

Serwerowe wersje EntityState, PlayerState, GlobalKey i GlobalGroup: jedyny sposób, w jaki skrypt ai-* zapisuje replikowany stan.

TypeScript
import { EntityState, PlayerState, GlobalKey, GlobalGroup, stateNumber, stateBoolean } from "@aicore-fivem/lib/server";

State bag to wartość, którą FiveM kopiuje z serwera do klientów: na encji (paliwo pojazdu), na graczu (dead) albo globalna (stan drzwi, który widzą wszyscy). ai-core działa w ścisłym trybie state bagów, więc zapisuje tylko serwer: klient, który chce zmiany, prosi przez callback, a serwer ustawia wartość.

Wejście serwera eksportuje te same cztery klasy co klient, plus metodę set. Konstruktor, get, onChange, EntityState.getByNetId i GlobalGroup.ids są opisane raz na stronie Lib: shared i fivem. Twórz każdą instancję raz na poziomie modułu, jedną na klucz.

Wartość ustawioną przez set można od razu odczytać przez get na serwerze, a listenery onChange działają raz. Ustawienie undefined usuwa wartość.

Brak odpowiedników w Lua: Lua sam czyta Entity(entity).state.key i zapisuje przez Entity(entity).state:set(key, value, true).

EntityState.set

Zapisuje jeden klucz w state bagu encji. Replikuje się do graczy, którzy mają encję w zasięgu.

Strona: Serwer · Czeka: nie

Sygnatura
new EntityState<T>(key: string, parse: StateParse<T>)
set(entity: number, value: T | undefined): void

Prop

Type

Zwraca void.

import { EntityState, stateNumber } from "@aicore-fivem/lib/server";

const odometer = new EntityState("my:km", stateNumber);

odometer.set(vehicle, (odometer.get(vehicle) ?? 0) + 1);

PlayerState.set

Zapisuje jeden klucz w state bagu gracza. Replikuje się do tego gracza i graczy w jego pobliżu.

Strona: Serwer · Czeka: nie

Sygnatura
new PlayerState<T>(key: string, parse: StateParse<T>)
set(source: number, value: T | undefined): void

Prop

Type

Zwraca void.

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

const cuffed = new PlayerState("my:cuffed", stateBoolean);

cuffed.set(target, true);
// później
cuffed.set(target, undefined);

GlobalKey.set

Zapisuje jeden klucz GlobalState. Replikuje się do każdego gracza: używaj go tylko dla stanu, którego potrzebuje każdy gracz.

Strona: Serwer · Czeka: nie

Sygnatura
new GlobalKey<T>(key: string, parse: StateParse<T>)
set(value: T | undefined): void

Prop

Type

Zwraca void.

import { GlobalKey, stateBoolean } from "@aicore-fivem/lib/server";

const stormActive = new GlobalKey("my:storm", stateBoolean);

stormActive.set(true);

GlobalGroup.set

Zapisuje jeden klucz z grupy kluczy GlobalState o wspólnym prefiksie (door:<id>, rob:<id>). Replikuje <prefix><id> do każdego gracza.

Strona: Serwer · Czeka: nie

Sygnatura
new GlobalGroup<T>(prefix: string, parse: StateParse<T>)
set(id: string, value: T | undefined): void

Prop

Type

Zwraca void.

import { GlobalGroup, stateBoolean } from "@aicore-fivem/lib/server";

const robbedStores = new GlobalGroup("my-rob:", stateBoolean);

robbedStores.set("store_12", true); // GlobalState["my-rob:store_12"] = true

State bagi są dla małych wartości, które czyta wielu graczy. Listy, dane jednego gracza albo wszystko, co często się zmienia, idą jako migawka + delta przez zdarzenia (zobacz AreaStream i KeyWatchers na stronie Gracze i postacie). Wspólne nazwy kluczy są w @aicore-fivem/shared (VEHICLE_BAGS, PLAYER_BAGS) albo w common/ twojego zasobu.

Na tej stronie