Wspólne typy
Każdy typ, do którego linkują strony API, z każdym polem, jego typem i przykładową wartością.
Strony API zapisują typy po nazwie (Vec3, ActionResult, InventoryRef...). Ta strona wyjaśnia każdy z nich raz: jego pola, co znaczy każde pole i przykładową wartość.
Skąd pochodzi typ:
| Pakiet | Import | Typy |
|---|---|---|
@aicore-fivem/shared | import type { AiPlayerData } from "@aicore-fivem/shared"; | Wszystko na tej stronie, chyba że nagłówek mówi inaczej. |
@aicore-fivem/lib/shared | import type { Vec3 } from "@aicore-fivem/lib/shared"; | Vec3, Vec4, AccessRule, BlipStyle, ZoneShape, VehicleProps, VehicleSetup, PlacePed. |
@aicore-fivem/lib/client | import type { ProgressOptions } from "@aicore-fivem/lib/client"; | ProgressOptions. |
@aicore-fivem/lib/server | import type { ProgressForOptions } from "@aicore-fivem/lib/server"; | ProgressForOptions. |
Lua nie ma typów w czasie działania. Tabela Lua z tymi samymi kluczami to ta sama wartość: { x = 1.0, y = 2.0, z = 3.0 } to Vec3. Tablice to listy Lua ({ 'police', 'sheriff' }), null to nil. Wektory opisuje Lib dla Lua.
Pozycje
Vec3
Punkt w świecie, w metrach. W GTA x to wschód, y to północ, z to góra.
Prop
Type
const counter: Vec3 = { x: 25.7, y: -1347.3, z: 29.5 };local counter = vector3(25.7, -1347.3, 29.5) -- albo { x = 25.7, y = -1347.3, z = 29.5 }Vec4
Punkt z kierunkiem: gdzie stoi ped lub pojawia się pojazd i w którą stronę jest zwrócony. Pola vec4 panelu i narzędzie punktu w panelu zapisują ten kształt.
Prop
Type
const spawn: Vec4 = { x: -42.1, y: -1098.4, z: 26.4, heading: 158.0 };vector4 w Lua nazywa kierunek w. Czytniki liba (readVec4) przyjmują zarówno heading, jak i w.
ZoneShape
Obszar w świecie. Używany przez klienckie Zones i przez serwerowe sprawdzanie obszarów (geometria stref). To jeden z trzech kształtów, wybierany przez type.
Sphere (kula wokół punktu):
Prop
Type
Cylinder (okrąg na ziemi, sięgający w górę i w dół):
Prop
Type
Poly (wielokąt na ziemi między dwiema wysokościami):
Prop
Type
const yard: ZoneShape = { type: "sphere", center: { x: 440.1, y: -981.2, z: 30.7 }, radius: 25 };
const lot: ZoneShape = {
type: "poly",
points: [ { x: 210, y: -810 }, { x: 240, y: -800 }, { x: 230, y: -770 }, { x: 200, y: -780 } ],
minZ: 28,
maxZ: 36,
};Wyniki
ActionResult
Odpowiedź każdej akcji serwera dla klienta: albo sukces, albo klucz językowy, który klient pokazuje jako powód. Dodatkowe pola mogą jechać na gałęzi sukcesu (ActionResult<{ id: number }>). Sam nowy stan nigdy nie podróżuje w odpowiedzi: przychodzi jako delta.
Sukces:
Prop
Type
Odmowa:
Prop
Type
const done: ActionResult = { ok: true };
const created: ActionResult<{ id: number }> = { ok: true, id: 42 };
const refused: ActionResult = { ok: false, error: "NOT_ENOUGH_MONEY" };return { ok = true }
return aiLib.fail('NOT_ENOUGH_MONEY') -- { ok = false, error = 'NOT_ENOUGH_MONEY' }Odmowy buduj przez fail; odpowiedzi czytaj przez isActionOk i replyError.
Gracze i postacie
AiPlayerData
Dane gracza, które ai-core wysyła do własnego klienta gracza: jeden pełny snapshot, gdy postać się wczytuje, potem tylko klucz, który się zmienił. Zwraca je też eksport GetPlayerData po obu stronach. Inne strony mogą nazywać to "danymi gracza".
Prop
Type
const data: AiPlayerData = {
character: { id: 12, citizenid: "AB12CD34", slot: 1, firstname: "Jane", lastname: "Doe", birthdate: "1994-05-12", sex: "female", nationality: "American" },
money: { cash: 500, bank: 5000, black_money: 0, crypto: 0 },
jobs: [{ job: "police", grade: 2 }],
duty: "police",
job: { job: "police", grade: 2 },
gangs: [],
activeGang: null,
metadata: { hunger: 80, thirst: 75 },
};CharacterInfo
Postać tak, jak widzą ją inne zasoby ("character" z GetCharacter, playerLoaded i AiPlayerData.character).
Prop
Type
const character: CharacterInfo = {
id: 12, citizenid: "AB12CD34", slot: 1,
firstname: "Jane", lastname: "Doe", birthdate: "1994-05-12",
sex: "female", nationality: "American",
};JobMembership
Jedna praca postaci.
Prop
Type
const membership: JobMembership = { job: "police", grade: 2 };GangMembership
Jeden gang, do którego należy postać.
Prop
Type
const membership: GangMembership = { gang: "ballas", grade: 0 };SpawnPoint
Gdzie i jak wczytana postać pojawia się w świecie (ładunek, który ai-core wysyła, aby umieścić postać w świecie).
Prop
Type
const spawn: SpawnPoint = { x: -1037.6, y: -2737.9, z: 20.2, heading: 330, model: "mp_f_freemode_01", armour: 0, health: 200 };Branding
Nazwa serwera i jego wygląd na pełnoekranowych menu (ustawienia General w panelu; eksport GetBranding).
Prop
Type
const branding: Branding = { name: "Los Santos RP", subtitle: "Serious roleplay", tagline: "Welcome", taglineSub: "Pick a character", background: "skyline" };PlayerCache
Często czytane wartości lokalnego gracza, aktualizowane przez jeden obserwator ai-core (cache liba po stronie klienta). false znaczy "brak".
Prop
Type
const snapshot: PlayerCache = { ped: 258, playerId: 0, serverId: 7, vehicle: 81922, seat: -1, weapon: false };UnloadReason
Dlaczego postać została zwolniona.
| Wartość | Znaczenie |
|---|---|
"dropped" | Gracz opuścił serwer. |
"switch" | Gracz wrócił do ekranu postaci. |
Pieniądze
Nazwy kont
Pieniądze są na nazwanych kontach. Lista Accounts w panelu ustala, które istnieją; ai-core dostarcza te:
| Nazwa | Etykieta | Kwota startowa |
|---|---|---|
cash | Cash (gotówka) | 500 |
bank | Bank | 5000 |
black_money | Dirty money (brudne pieniądze) | 0 |
crypto | Crypto (kryptowaluta) | 0 |
Właściciel serwera może dodawać, zmieniać nazwy lub usuwać konta w panelu, więc czytaj listę eksportem GetAccountTypes zamiast ją zakładać. Gdy lista jest pusta, ai-core trzyma jedno konto cash.
core.AddMoney(source, "bank", 250, "Paycheck");AccountTypeDefinition
Jeden typ konta z listy Accounts w panelu (GetAccountTypes zwraca Record<string, AccountTypeDefinition>, z nazwą konta jako kluczem).
Prop
Type
const bank: AccountTypeDefinition = { label: "Bank", start: 5000, allowNegative: false };MoneyRef
Jedna strona przelewu pieniędzy (TransferMoney): konto wczytanego gracza albo wspólne konto pracy lub gangu.
Prop
Type
const player: MoneyRef = { source: 7, account: "bank" };
const society: MoneyRef = { owner: "job", id: "mechanic", account: "bank" };Prace i gangi
GradeDefinition
Jeden stopień pracy lub gangu (zawartość panelu).
Prop
Type
const grade: GradeDefinition = { label: "Sergeant", salary: 400, boss: false };JobDefinition
Jedna praca z listy Jobs w panelu (GetJobDefinition). Stopień n z JobMembership to grades[n].
Prop
Type
const police: JobDefinition = {
label: "Police", type: "leo", defaultDuty: false, listed: false,
grades: [ { label: "Cadet", salary: 200, boss: false }, { label: "Chief", salary: 900, boss: true } ],
};GangDefinition
Jeden gang z listy Gangs w panelu (GetGangDefinition).
Prop
Type
const ballas: GangDefinition = { label: "Ballas", grades: [ { label: "Recruit", salary: 0, boss: false } ] };AccessRule
Kto może korzystać z miejsca (sklepu, schowka, garażu): jedna z jobs albo jeden z gangs. Obie listy puste znaczą wszystkich. Z @aicore-fivem/lib/shared; czytaj przez readAccess.
Prop
Type
const armoury: AccessRule = { jobs: ["police"], gangs: [], grades: { police: 2 }, onDuty: true };Ekwipunek
InventoryRef
Na którym ekwipunku działa wywołanie.
| Wartość | Znaczy |
|---|---|
number | Id serwera gracza: własny ekwipunek tego gracza. |
string | Dowolny inny ekwipunek według jego id: nazwa schowka, id bagażnika lub schowka w desce rozdzielczej. |
inventory.addItem(source, "water", 2); // gracz
inventory.addItem("police_evidence", "phone", 1); // schowekItemMetadata
Dowolne dane zapisane na jednym stosie przedmiotów (Record<string, unknown>): numer seryjny, wytrzymałość, notatka. Każdy ekwipunek sam pokazuje niektóre klucze (label, description, image w większości z nich).
const metadata: ItemMetadata = { serial: "AB-1029", durability: 100 };Metadane trzymaj małe i bezpieczne dla JSON (stringi, liczby, wartości logiczne, zwykłe obiekty i tablice). Dwa stosy z różnymi metadanymi nigdy się nie łączą.
InventoryStack
Jeden stos w ekwipunku (GetItems zwraca ich listę).
Prop
Type
const stack: InventoryStack = { name: "water", label: "Water", count: 3, slot: 4, metadata: {} };UsedItem
Stos, który dostaje handler używalnego przedmiotu, gdy gracz używa przedmiotu.
Prop
Type
const used: UsedItem = { name: "lockpick", slot: 2, count: 1, metadata: { durability: 80 } };UsableItemHandler
(source: number, item: UsedItem) => unknown: działa, gdy gracz używa przedmiotu. Zwrócenie false zatrzymuje przedmiot w ekwipunkach, które same zabierają użyty przedmiot (ai-inventory zabiera ilość consume przedmiotu); inne ekwipunki działają według własnych ustawień przedmiotu.
const onUse: UsableItemHandler = (source, item) => {
if (item.metadata.durability === 0) return false; // zatrzymaj go
return true;
};ItemDefinition
Jeden przedmiot tak, jak definiuje go aktywny ekwipunek (GetItemDefinition). Inne strony mogą nazywać to "przedmiotem" lub "definicją przedmiotu".
Prop
Type
const water: ItemDefinition = { name: "water", label: "Water", weight: 500, unique: false, close: true, description: "Fresh water" };StashDefinition
Schowek tak, jak trzyma go ai-core (argumenty RegisterStash).
Prop
Type
const evidence: StashDefinition = { name: "police_evidence", label: "Evidence", slots: 50, maxWeight: 100000, jobs: ["police"] };ShopProduct
Jeden produkt sklepu skryptu.
Prop
Type
const product: ShopProduct = { name: "bandage", price: 50 };ShopDefinition
Sklep rejestrowany przez skrypt. Serwer otwiera go dla gracza; sklep nie ma własnego miejsca.
Prop
Type
const shop: ShopDefinition = { name: "police_armoury", label: "Armoury", items: [{ name: "bandage", price: 50 }] };HeldWeapon
Przedmiot broni, który trzyma lokalny gracz, tak jak zna go ekwipunek.
Prop
Type
const held: HeldWeapon = { name: "WEAPON_PISTOL", label: "Pistol" };Pojazdy
VehicleProps
Wygląd i tuning pojazdu jako zwykłe dane: kolory, modyfikacje, dodatki, malowanie, koła, neony, przyciemnienie szyb, tablica i stan. Z @aicore-fivem/lib/shared. Zapisany JSON zawiera v: 1. Otrzymane dane sprawdzaj przez toVehicleProps.
Prop
Type
const props: VehicleProps = {
v: 1, model: 1032823388, plate: "AI 123", plateIndex: 0,
colors: [12, 12], extraColors: [0, 156], customPrimary: null, customSecondary: null,
wheelType: 0, windowTint: -1, livery: -1, mods: { 11: 2, 18: 1 }, xenonColor: 255,
neon: [false, false, false, false], neonColor: [255, 0, 255], tyreSmoke: [255, 255, 255],
extras: { 1: true }, dirt: 0, engineHealth: 1000, bodyHealth: 1000,
};VehicleSetup
Co świeżo stworzony pojazd dostaje ponad domyślne ustawienia modelu (setup funkcji spawnVehicle z liba, kolor wybrany w sklepie). Z @aicore-fivem/lib/shared. Każde pole jest opcjonalne. Otrzymane dane sprawdzaj przez toVehicleSetup.
Prop
Type
const setup: VehicleSetup = { colors: [27, 27], windowTint: 1, engineOn: true };KeyPurpose
Dlaczego gracz dostaje klucz pojazdu. Skrypty kluczy traktują każdy powód inaczej. Wszystko nieznane liczy się jako "temporary".
| Wartość | Używaj, gdy |
|---|---|
"purchase" | Gracz jest teraz właścicielem pojazdu (dealer, nadanie przez admina): nowy klucz, starsze kopie przestają działać. |
"garage" | Posiadany pojazd wyjeżdża z garażu: właściciel ma już klucz. |
"job" | Pojazd służbowy na czas zmiany. |
"rental" | Wypożyczony pojazd na czas wypożyczenia. |
"temporary" | Wszystko inne krótkotrwałe (spawn admina, jazda próbna, pojazd z napadu). Domyślne. |
vehicleKeys.give(source, vehicle, "rental");VehicleOwner
Kto jest właścicielem pojazdu ai-vehicles.
Prop
Type
const owner: VehicleOwner = { type: "character", id: "12" };OwnedVehicle
Posiadany pojazd tak, jak trzyma go ai-vehicles (GetVehicle).
Prop
Type
const car: OwnedVehicle = {
id: 7, plate: "AI 123", owner: { type: "character", id: "12" }, model: "sultan",
props: null, setup: null, state: "garage", garage: "legion", fuel: 100, engine: 1000, body: 1000,
};Świat
Weather
Nazwa typu pogody z kontraktu qb-weathersync, dokładnie wielkimi literami: "EXTRASUNNY", "CLEAR", "NEUTRAL", "SMOG", "FOGGY", "OVERCAST", "CLOUDS", "CLEARING", "RAIN", "THUNDER", "SNOW", "BLIZZARD", "SNOWLIGHT", "XMAS", "HALLOWEEN". Lista to stała WEATHERS; isWeather(value) sprawdza wartość.
import { isWeather, type Weather } from "@aicore-fivem/shared";
const next: Weather = "RAIN";
if (isWeather(input)) world.setWeather(input);BlipStyle
Wygląd blipa tak, jak zapisuje go widżet blip panelu. Z @aicore-fivem/lib/shared; czytaj przez readBlipStyle.
Prop
Type
const style: BlipStyle = { sprite: 52, color: 2, scale: 0.8 };PlacePed
NPC stojący w miejscu (sklepikarz, urzędnik). Z @aicore-fivem/lib/shared; czytaj przez readPlacePed.
Prop
Type
const clerk: PlacePed = { model: "mp_m_shopkeep_01", scenario: "WORLD_HUMAN_STAND_IMPATIENT", coords: { x: 24.5, y: -1346.6, z: 29.5, heading: 270 } };UI gracza
NotificationKind
Kolor i ikona karty powiadomienia: "success", "error", "info" lub "warning". Inne strony mogą nazywać to "rodzajem powiadomienia".
notify(source, "Vehicle stored", "success"); // serwerowy lib notify(source, text, kind?, duration?)Notification
Karta powiadomienia. Rysuje ją ai-lib; teksty są już przetłumaczone przez nadawcę.
Prop
Type
const card: Notification = { text: "Vehicle stored", kind: "success", duration: 3000 };ProgressOptions
Co pokazuje kliencki pasek postępu (progress liba po stronie klienta) i jak gracz może się ruszać, gdy pasek trwa. Z @aicore-fivem/lib/client.
Prop
Type
const repair: ProgressOptions = {
label: "Repairing",
duration: 8000,
anim: { dict: "mini@repair", clip: "fixing_a_player" },
canCancel: true,
disable: { move: true, combat: true },
};ServerProgress
Pasek, który serwerowy proces uruchamia na kliencie gracza (progressFor liba). Te same pola co ProgressOptions bez whileDead. ProgressForOptions (z @aicore-fivem/lib/server) dodaje jedno pole:
Prop
Type
const bar: ProgressForOptions = { label: "Picking the lock", duration: 6000, scenario: "PROP_HUMAN_PARKING_METER", minRatio: 0.9 };MenuItem
Jeden wiersz menu.
Prop
Type
const row: MenuItem = { id: "water", label: "Water ($5)", icon: "bottle-water" };MenuRequest
Menu do pokazania (menu liba, w Lua aiLib.menu.show).
Prop
Type
const shop: MenuRequest = {
title: "24/7",
items: [ { id: "water", label: "Water ($5)" }, { id: "bread", label: "Bread ($3)" } ],
};InputField
Jedno pole okna wprowadzania. To pole liczbowe albo tekstowe, wybierane przez type.
Pole liczbowe:
Prop
Type
Pole tekstowe:
Prop
Type
InputRequest
Okno wprowadzania do pokazania (input liba, w Lua aiLib.input).
Prop
Type
const fine: InputRequest = {
title: "Write a fine",
confirm: "Send",
fields: [
{ name: "amount", label: "Amount", type: "number", min: 1, max: 10000 },
{ name: "reason", label: "Reason", type: "text", maxLength: 80 },
],
};PromptAnchor
Gdzie unosi się podpowiedź w świecie: stały punkt albo miejsca na encjach. Przesunięcia encji są w przestrzeni samej encji, więc podpowiedź porusza się i obraca razem z nią (otwierane drzwi). Z kilku miejsc na encjach w każdej klatce pokazywane jest to najbliżej gracza.
Punkt:
Prop
Type
Miejsca na encjach:
Prop
Type
const atPoint: PromptAnchor = { x: 25.7, y: -1347.3, z: 30.2 };
const onDoor: PromptAnchor = { anchors: [{ entity: door, offset: { x: 0.5, y: 0, z: 0 } }] };ItemPickerRequest
Wybierak przedmiotów ai-core dla narzędzi administratora: każdy przedmiot aktywnego ekwipunku z obrazkiem, wyszukiwaniem i ilością.
Prop
Type
const request: ItemPickerRequest = { title: "Give items", target: 7 };PickedItem
Jeden wiersz, którym odpowiada wybierak przedmiotów.
Prop
Type
SkillDifficulty
Jak trudny jest etap sprawdzianu umiejętności: "easy", "medium", "hard" albo własny kształt ox_lib { areaSize: number; speedMultiplier: number }. Nazwane etapy: easy = zielony łuk 50 stopni przy 0.6 obrotu na sekundę, medium = 40 przy 0.85, hard = 25 przy 1.
const stages: SkillDifficulty[] = ["easy", "medium", { areaSize: 30, speedMultiplier: 1.2 }];LockpickResult
Co odpowiada wytrych: "opened" (zamek się otworzył), "broken" (gracz złamał każdy wytrych) lub "cancelled" (gracz go zamknął).
RadialItem
Jeden element koła radialnego (radial liba). Jego funkcje działają w zasobie, który go dodał; ai-core usuwa element, gdy ten zasób się zatrzymuje.
Prop
Type
const item: RadialItem = {
id: "engine", label: "Engine", icon: "car", parent: "vehicle",
canShow: () => cache.seat === -1,
onPressed: () => SetVehicleEngineOn(cache.vehicle as number, !GetIsVehicleEngineRunning(cache.vehicle as number), false, true),
};KeyHintRequest
Linia pomocy klawiszy, którą skrypt pokazuje przez jakiś czas (klawisze noclipa administratora). Podaj keybind lub key.
Prop
Type
const hint: KeyHintRequest = { label: "Speed up", key: "SHIFT", icon: "gauge-high" };KeyHintWhen
Kiedy podpowiedź skrótu klawiszowego pokazuje się w HUD: "foot" (pieszo), "vehicle" (w pojeździe) lub "always". Właściciel serwera może to zmienić w panelu; skrót bez tej wartości nigdy nie pokazuje podpowiedzi.
KeyHintView
Jeden wiersz podpowiedzi klawiszy pokazywanych przez HUD (kliencki eksport GetKeyHints, zdarzenie ai-core:client:keyHints): klawisz tak, jak gracz go przypisał, i co robi.
Prop
Type
const row: KeyHintView = { id: "noclip_speed", key: "SHIFT", label: "Speed up", icon: "gauge-high" };Logi, alerty, telefon
LogOptions
Dodatkowe szczegóły linii logu (aiLog liba, eksport Log).
Prop
Type
aiLog("payments", "Paid a bill", { source, metadata: { amount: 250 } });LogLevel
Poziom ważności linii logu: "debug", "info", "warn" lub "error".
LogChannel
Jak zasób opisuje jeden ze swoich kanałów logów (aiLogChannels liba, eksport LogChannels, wywoływany raz przy starcie). Url webhooków nigdy tu nie ma: właściciel serwera ustawia je w panelu ai-core.
Prop
Type
aiLogChannels({ payments: { dataset: "my-shop" }, debug: { active: false } });DispatchAlert
Alert policji (lub innej pracy). Aktywny skrypt alertów pokazuje go członkom jobs na służbie. Teksty są już przetłumaczone.
Prop
Type
const alert: DispatchAlert = { code: "10-71", title: "Shots fired", source, jobs: ["police"], priority: "high" };PhoneMail
Mail, który skrypt wysyła na telefon gracza.
Prop
Type
const mail: PhoneMail = { sender: "Los Santos Customs", subject: "Your car is ready", message: "Pick it up at the garage." };PhoneNotification
Powiadomienie na telefonie gracza.
Prop
Type
const note: PhoneNotification = { title: "Bank", message: "You received $250", app: "bank" };Rachunki, MDT, EMS, garaże
BillRequest
Rachunek wysyłany przez skrypt (billing.send liba): od pracy (mandaty, opłaty za usługi) lub od gracza, do gracza. Teksty są już przetłumaczone.
Prop
Type
const bill: BillRequest = { to: 7, amount: 250, label: "Speeding", from: source, job: "police" };UnpaidBill
Jeden otwarty rachunek gracza.
Prop
Type
MdtRecord
Wpis, który skrypt zapisuje w policyjnym MDT (mdt.record liba). Teksty są już przetłumaczone.
Prop
Type
const record: MdtRecord = { kind: "jail", target: 7, by: source, title: "Armed robbery", minutes: 20 };MdtRecordKind
Czego dotyczy wpis MDT: "fine", "warrant", "arrest" lub "jail".
DistressCall
Wezwanie medyków przez powalonego gracza (ems.distress liba).
Prop
Type
const call: DistressCall = { jobs: ["ambulance"], message: "Unconscious" };GaragedVehicle
Jeden z pojazdów gracza trzymany przez skrypt garażu.
Prop
Type
Wygląd
CharacterAppearance
Wygląd tak, jak wydaje go warstwa wyglądu ai-core: model peda i własne dane skryptu ubrań. Traktuj data jako nieprzejrzyste: oddaj cały obiekt do ApplyAppearance bez zmian.
Prop
Type
ClothingMenu
Menu skryptu ubrań, które otwierają inne skrypty: "clothing" (sklep z ubraniami), "barber" lub "outfits" (zapisane stroje gracza).
JobOutfit
Strój pracy (mundur) dla modelu freemode, który nosi gracz. Zmieniają się tylko wymienione części.
Prop
Type
OutfitPiece
Jedna część stroju pracy.
Prop
Type
const uniform: JobOutfit = {
components: [ { id: 11, collection: "", index: 55, texture: 0 }, { id: 4, collection: "", index: 35, texture: 0 } ],
props: [ { id: 0, collection: "", index: 46, texture: 0 } ],
};Komendy
CommandInfo
Komenda addCommand liba tak, jak zasób zgłasza ją do ai-core (karta Commands w panelu ją wyświetla).
Prop
Type
const info: CommandInfo = { names: ["jail", "prison"], help: "Jails a player", params: [{ name: "id", type: "playerId" }], aces: ["ai.admin"] };CommandParam
Jeden argument komendy addCommand liba, parsowany i sprawdzany przed uruchomieniem handlera.
Prop
Type
const params: CommandParam[] = [
{ name: "id", type: "playerId", help: "Player id" },
{ name: "reason", type: "longString", help: "Reason", optional: true },
];Panel administratora
PanelSchema
Panel administratora skryptu: jakie ma pliki danych i jak panel je układa. Zasób przekazuje go do AdminPanel liba (zobacz Panel administratora). Każde pole tekstowe to klucz językowy z locales/*.json zasobu.
Prop
Type
const schema: PanelSchema = {
title: "ADMIN_TITLE",
icon: "store",
files: { shops: { kind: "records", sync: "all", labelPath: "label", sections: { label: { type: "text", min: 1, max: 48 }, coords: { type: "vec3" } } } },
tabs: [{ id: "shops", file: "shops", icon: "store", label: "ADMIN_TAB_SHOPS", desc: "ADMIN_TAB_SHOPS_DESC", cards: [] }],
};FileSpec
Jeden plik danych panelu.
Prop
Type
TabSpec
Jedna karta panelu, pokazująca jeden plik.
Prop
Type
CardSpec
Jedna karta pól wewnątrz karty panelu.
Prop
Type
const card: CardSpec = {
icon: "location-dot",
title: "ADMIN_CARD_PLACE",
fields: [{ widget: "point", path: "coords", label: "ADMIN_F_COORDS", hint: "ADMIN_H_COORDS" }],
};LookupSource
Lista wartości, z której wybiera pole panelu. lookup na polu tekstowym lub polu nazw sprawia, że serwer odrzuca wszystko inne, a panel oferuje listę.
| Wartość | Lista |
|---|---|
"item" | Przedmioty aktywnego ekwipunku. |
"job" | Prace z listy Jobs w panelu. |
"gang" | Gangi z listy Gangs w panelu. |
"account" | Konta pieniężne. |
"resource" | Uruchomione zasoby. |
"player" | Gracze online, według citizen id. |
"vehicle" | Każdy model pojazdu, który ma gra administratora, łącznie z dodatkami. Serwer nigdy go nie odrzuca (nie umie wyświetlić listy modeli). |
"ped" | Modele pedów GTA. Serwer nigdy ich nie odrzuca. |
AdminDelta
Zmieniony rekord pliku panelu, przekazywany administratorom, którzy mają otwarty panel (eksport AdminPanelChanged).
Prop
Type
const delta: AdminDelta = { resource: "my-shop", file: "shops", key: "legion", value: { label: "Legion" } };UpdateInfo
Skrypt, którego wydanie na GitHubie jest nowsze niż uruchomiona wersja (sprawdzanie aktualizacji ai-core, eksport GetUpdates).
Prop
Type
const update: UpdateInfo = { resource: "ai-core", label: "ai-core", current: "1.4.0", latest: "1.5.0", url: "https://github.com/..." };Most vRP
VrpConfig
Mapowanie uprawnień vRP z panelu (data/vrp.json) tak, jak czyta je most vRP ai-core (serwerowy eksport GetVrpConfig; lokalne zdarzenie ai-core:vrp:config niesie ten sam kształt po zmianie).
Prop
Type
VrpPermissionRule: nadaje permission każdemu, kto pasuje do dowolnego wypełnionego celu.
Prop
Type
VrpGroupAlias: nazwa grupy vRP, która oznacza stopień pracy lub gangu albo administratora (rangi w stylu vRPex, takie jak "Coronel").
Prop
Type
const config: VrpConfig = {
defaults: { jobPrefix: true, jobOnDuty: true, adminPrefix: true, playerPrefix: true },
permissions: [{ permission: "police.armory", job: "police", gang: "", group: "", grade: 2, onDuty: true, admin: false, everyone: false }],
groups: { Coronel: { job: "police", gang: "", grade: 4, admin: false } },
items: { "edible|tacos": "tacos" },
};