State bagi
Serwerowe wersje EntityState, PlayerState, GlobalKey i GlobalGroup: jedyny sposób, w jaki skrypt ai-* zapisuje replikowany stan.
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
new EntityState<T>(key: string, parse: StateParse<T>)
set(entity: number, value: T | undefined): voidProp
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
new PlayerState<T>(key: string, parse: StateParse<T>)
set(source: number, value: T | undefined): voidProp
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
new GlobalKey<T>(key: string, parse: StateParse<T>)
set(value: T | undefined): voidProp
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
new GlobalGroup<T>(prefix: string, parse: StateParse<T>)
set(id: string, value: T | undefined): voidProp
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"] = trueState 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.
Telefon i wygląd
Telefon gracza przez ai-core (numery, maile, SMS-y, powiadomienia) i zapisany wygląd postaci przez dowolny skrypt ubrań, który działa.
Logi
aiLog i aiLogChannels: wysyłanie logów przez ai-core do konsoli, na Discorda, do Fivemanage albo FiveM Stats, zależnie od tego, co właściciel włączy w panelu.