Gemeinsame Typen
Jeder Typ, auf den die API-Seiten verlinken, mit jedem Feld, seinem Typ und einem Beispielwert.
Die API-Seiten schreiben Typen beim Namen (Vec3, ActionResult, InventoryRef...). Diese Seite erklärt jeden einmal: seine Felder, was jedes Feld bedeutet, und einen Beispielwert.
Woher ein Typ kommt:
| Paket | Import | Typen |
|---|---|---|
@aicore-fivem/shared | import type { AiPlayerData } from "@aicore-fivem/shared"; | Alles auf dieser Seite, sofern die Überschrift nichts anderes sagt. |
@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 hat zur Laufzeit keine Typen. Eine Lua-Tabelle mit denselben Schlüsseln ist derselbe Wert: { x = 1.0, y = 2.0, z = 3.0 } ist ein Vec3. Arrays sind Lua-Listen ({ 'police', 'sheriff' }), null ist nil. Siehe Lib für Lua für Vektoren.
Positionen
Vec3
Ein Punkt in der Welt, in Metern. GTAs x ist Osten, y ist Norden, z ist oben.
Prop
Type
const counter: Vec3 = { x: 25.7, y: -1347.3, z: 29.5 };local counter = vector3(25.7, -1347.3, 29.5) -- oder { x = 25.7, y = -1347.3, z = 29.5 }Vec4
Ein Punkt mit Ausrichtung: wo ein Ped steht oder ein Fahrzeug spawnt und in welche Richtung es schaut. vec4-Felder des Panels und das Punkt-Werkzeug des Panels speichern diese Form.
Prop
Type
const spawn: Vec4 = { x: -42.1, y: -1098.4, z: 26.4, heading: 158.0 };Ein Lua-vector4 nennt die Ausrichtung w. Die Leser der Lib (readVec4) akzeptieren sowohl heading als auch w.
ZoneShape
Ein Bereich in der Welt. Wird von Client-Zones und von serverseitigen Bereichsprüfungen genutzt (Zonengeometrie). Es ist eine von drei Formen, gewählt über type.
Kugel (eine Kugel um einen Punkt):
Prop
Type
Zylinder (ein Kreis am Boden, der nach oben und unten reicht):
Prop
Type
Polygon (ein Bodenpolygon zwischen zwei Höhen):
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,
};Ergebnisse
ActionResult
Was jede Server-Aktion einem Client antwortet: entweder Erfolg oder einen Sprachschlüssel, den der Client als Grund anzeigt. Zusätzliche Felder können im Erfolgszweig mitfahren (ActionResult<{ id: number }>). Der neue Zustand selbst reist nie in der Antwort: Er kommt als Delta an.
Erfolg:
Prop
Type
Ablehnung:
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' }Baue Ablehnungen mit fail; lies Antworten mit isActionOk und replyError.
Spieler und Charaktere
AiPlayerData
Die Spielerdaten, die ai-core an den eigenen Client eines Spielers schickt: ein vollständiger Snapshot, wenn der Charakter lädt, danach nur der Schlüssel, der sich geändert hat. Wird auch vom Export GetPlayerData auf beiden Seiten zurückgegeben. Andere Seiten nennen es eventuell „Spielerdaten“.
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
Ein Charakter, wie andere Ressourcen ihn sehen (der „Charakter“ von GetCharacter, playerLoaded und 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
Ein Job, den ein Charakter hat.
Prop
Type
const membership: JobMembership = { job: "police", grade: 2 };GangMembership
Eine Gang, in der ein Charakter ist.
Prop
Type
const membership: GangMembership = { gang: "ballas", grade: 0 };SpawnPoint
Wo und wie ein geladener Charakter in der Welt erscheint (die Nutzlast, die ai-core sendet, um den Charakter in die Welt zu setzen).
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
Name und Aussehen des Servers in Vollbildmenüs (Panel-Einstellungen General, Allgemein; Export GetBranding).
Prop
Type
const branding: Branding = { name: "Los Santos RP", subtitle: "Serious roleplay", tagline: "Welcome", taglineSub: "Pick a character", background: "skyline" };PlayerCache
Die oft gelesenen Werte des lokalen Spielers, aktuell gehalten von dem einen Beobachter von ai-core (Lib cache auf dem Client). false bedeutet „keiner“.
Prop
Type
const snapshot: PlayerCache = { ped: 258, playerId: 0, serverId: 7, vehicle: 81922, seat: -1, weapon: false };UnloadReason
Warum ein Charakter losgelassen wurde.
| Wert | Bedeutung |
|---|---|
"dropped" | Der Spieler hat den Server verlassen. |
"switch" | Der Spieler ist zum Charakterbildschirm zurückgekehrt. |
Geld
Kontonamen
Geld liegt in benannten Konten. Die Liste Accounts (Konten) des Panels legt fest, welche existieren; ai-core wird mit diesen ausgeliefert:
| Name | Label | Startbetrag |
|---|---|---|
cash | Cash | 500 |
bank | Bank | 5000 |
black_money | Dirty money | 0 |
crypto | Crypto | 0 |
Ein Serverbesitzer kann im Panel Konten hinzufügen, umbenennen oder entfernen, also lies die Liste mit dem Export GetAccountTypes, statt sie anzunehmen. Wenn die Liste leer ist, behält ai-core ein einzelnes Konto cash.
core.AddMoney(source, "bank", 250, "Paycheck");AccountTypeDefinition
Ein Kontotyp aus der Liste Accounts des Panels (GetAccountTypes gibt Record<string, AccountTypeDefinition> zurück, mit Kontonamen als Schlüssel).
Prop
Type
const bank: AccountTypeDefinition = { label: "Bank", start: 5000, allowNegative: false };MoneyRef
Eine Seite einer Geldüberweisung (TransferMoney): das Konto eines geladenen Spielers oder das gemeinsame Konto eines Jobs oder einer Gang.
Prop
Type
const player: MoneyRef = { source: 7, account: "bank" };
const society: MoneyRef = { owner: "job", id: "mechanic", account: "bank" };Jobs und Gangs
GradeDefinition
Ein Rang eines Jobs oder einer Gang (Panel-Inhalt).
Prop
Type
const grade: GradeDefinition = { label: "Sergeant", salary: 400, boss: false };JobDefinition
Ein Job aus der Liste Jobs des Panels (GetJobDefinition). Rang n einer JobMembership ist 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
Eine Gang aus der Liste Gangs des Panels (GetGangDefinition).
Prop
Type
const ballas: GangDefinition = { label: "Ballas", grades: [ { label: "Recruit", salary: 0, boss: false } ] };AccessRule
Wer einen Ort nutzen darf (einen Shop, ein Lager, eine Garage): einer aus jobs oder einer aus gangs. Beide Listen leer bedeutet alle. Aus @aicore-fivem/lib/shared; lies es mit readAccess.
Prop
Type
const armoury: AccessRule = { jobs: ["police"], gangs: [], grades: { police: 2 }, onDuty: true };Inventar
InventoryRef
Mit welchem Inventar ein Aufruf arbeitet.
| Wert | Bedeutet |
|---|---|
number | Die Server-ID eines Spielers: das eigene Inventar dieses Spielers. |
string | Jedes andere Inventar über seine ID: ein Lagername, eine Kofferraum- oder Handschuhfach-ID. |
inventory.addItem(source, "water", 2); // ein Spieler
inventory.addItem("police_evidence", "phone", 1); // ein LagerItemMetadata
Freie Daten, die auf einem Item-Stapel gespeichert sind (Record<string, unknown>): eine Seriennummer, Haltbarkeit, eine Notiz. Jedes Inventar zeigt einige Schlüssel selbst an (label, description, image bei den meisten).
const metadata: ItemMetadata = { serial: "AB-1029", durability: 100 };Halte Metadaten klein und JSON-sicher (Strings, Zahlen, Booleans, einfache Objekte und Arrays). Zwei Stapel mit unterschiedlichen Metadaten stapeln sich nie zusammen.
InventoryStack
Ein Stapel in einem Inventar (GetItems gibt eine Liste davon zurück).
Prop
Type
const stack: InventoryStack = { name: "water", label: "Water", count: 3, slot: 4, metadata: {} };UsedItem
Der Stapel, den ein Handler für benutzbare Items bekommt, wenn ein Spieler ein Item benutzt.
Prop
Type
const used: UsedItem = { name: "lockpick", slot: 2, count: 1, metadata: { durability: 80 } };UsableItemHandler
(source: number, item: UsedItem) => unknown: läuft, wenn ein Spieler das Item benutzt. Die Rückgabe false behält das Item in Inventaren, die ein benutztes Item selbst nehmen (ai-inventory nimmt die consume-Menge des Items); andere Inventare folgen ihren eigenen Item-Einstellungen.
const onUse: UsableItemHandler = (source, item) => {
if (item.metadata.durability === 0) return false; // behalten
return true;
};ItemDefinition
Ein Item, wie das aktive Inventar es definiert (GetItemDefinition). Andere Seiten nennen es eventuell „Item“ oder „Item-Definition“.
Prop
Type
const water: ItemDefinition = { name: "water", label: "Water", weight: 500, unique: false, close: true, description: "Fresh water" };StashDefinition
Ein Lager, wie ai-core es verwahrt (die Argumente von RegisterStash).
Prop
Type
const evidence: StashDefinition = { name: "police_evidence", label: "Evidence", slots: 50, maxWeight: 100000, jobs: ["police"] };ShopProduct
Ein Produkt eines Skript-Shops.
Prop
Type
const product: ShopProduct = { name: "bandage", price: 50 };ShopDefinition
Ein Shop, den ein Skript registriert. Der Server öffnet ihn für einen Spieler; er hat keinen eigenen Ort.
Prop
Type
const shop: ShopDefinition = { name: "police_armoury", label: "Armoury", items: [{ name: "bandage", price: 50 }] };HeldWeapon
Das Waffen-Item, das der lokale Spieler hält, wie das Inventar es kennt.
Prop
Type
const held: HeldWeapon = { name: "WEAPON_PISTOL", label: "Pistol" };Fahrzeuge
VehicleProps
Aussehen und Tuning eines Fahrzeugs als einfache Daten: Farben, Mods, Extras, Lackierung, Räder, Neon, Tönung, Kennzeichen und Zustand. Aus @aicore-fivem/lib/shared. Gespeichertes JSON trägt v: 1. Prüfe empfangene Daten mit 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
Was ein frisch gespawntes Fahrzeug zusätzlich zu den Standardwerten des Modells bekommt (das setup von Lib spawnVehicle, die in einem Shop gewählte Farbe). Aus @aicore-fivem/lib/shared. Jedes Feld ist optional. Prüfe empfangene Daten mit toVehicleSetup.
Prop
Type
const setup: VehicleSetup = { colors: [27, 27], windowTint: 1, engineOn: true };KeyPurpose
Warum ein Spieler den Schlüssel eines Fahrzeugs bekommt. Schlüssel-Skripte behandeln jeden unterschiedlich. Alles Unbekannte zählt als "temporary".
| Wert | Nutze ihn, wenn |
|---|---|
"purchase" | Dem Spieler gehört jetzt das Fahrzeug (Händler, Admin-Vergabe): ein neuer Schlüssel, ältere Kopien funktionieren nicht mehr. |
"garage" | Ein eigenes Fahrzeug kommt aus der Garage: Der Besitzer hat den Schlüssel bereits. |
"job" | Ein Arbeitsfahrzeug für die Schicht. |
"rental" | Ein gemietetes Fahrzeug für die Mietdauer. |
"temporary" | Alles andere Kurzlebige (Admin-Spawn, Probefahrt, Fahrzeug bei einem Überfall). Der Standard. |
vehicleKeys.give(source, vehicle, "rental");VehicleOwner
Wem ein Fahrzeug von ai-vehicles gehört.
Prop
Type
const owner: VehicleOwner = { type: "character", id: "12" };OwnedVehicle
Ein Fahrzeug mit Besitzer, wie ai-vehicles es führt (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,
};Welt
Weather
Ein Wettertyp-Name des Vertrags von qb-weathersync, exakt in Großbuchstaben: "EXTRASUNNY", "CLEAR", "NEUTRAL", "SMOG", "FOGGY", "OVERCAST", "CLOUDS", "CLEARING", "RAIN", "THUNDER", "SNOW", "BLIZZARD", "SNOWLIGHT", "XMAS", "HALLOWEEN". Die Liste ist die Konstante WEATHERS; isWeather(value) prüft einen Wert.
import { isWeather, type Weather } from "@aicore-fivem/shared";
const next: Weather = "RAIN";
if (isWeather(input)) world.setWeather(input);BlipStyle
Das Aussehen eines Blips, wie das blip-Widget des Panels es speichert. Aus @aicore-fivem/lib/shared; lies es mit readBlipStyle.
Prop
Type
const style: BlipStyle = { sprite: 52, color: 2, scale: 0.8 };PlacePed
Ein NPC, der an einem Ort steht (ein Ladenbesitzer, ein Angestellter). Aus @aicore-fivem/lib/shared; lies es mit 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 } };Spieler-UI
NotificationKind
Farbe und Icon einer Benachrichtigungskarte: "success", "error", "info" oder "warning". Andere Seiten nennen es eventuell „Benachrichtigungsart“.
notify(source, "Vehicle stored", "success"); // Server-Lib notify(source, text, kind?, duration?)Notification
Eine Benachrichtigungskarte. ai-lib zeichnet sie; die Texte sind vom Absender bereits übersetzt.
Prop
Type
const card: Notification = { text: "Vehicle stored", kind: "success", duration: 3000 };ProgressOptions
Was der Client-Fortschrittsbalken (Lib progress auf dem Client) zeigt und wie sich der Spieler bewegen darf, während er läuft. Aus @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
Der Balken, den ein Server-Ablauf im Client eines Spielers laufen lässt (Lib progressFor). Dieselben Felder wie ProgressOptions ohne whileDead. ProgressForOptions (aus @aicore-fivem/lib/server) fügt ein Feld hinzu:
Prop
Type
const bar: ProgressForOptions = { label: "Picking the lock", duration: 6000, scenario: "PROP_HUMAN_PARKING_METER", minRatio: 0.9 };MenuItem
Eine Zeile eines Menüs.
Prop
Type
const row: MenuItem = { id: "water", label: "Water ($5)", icon: "bottle-water" };MenuRequest
Ein anzuzeigendes Menü (Lib menu, Lua aiLib.menu.show).
Prop
Type
const shop: MenuRequest = {
title: "24/7",
items: [ { id: "water", label: "Water ($5)" }, { id: "bread", label: "Bread ($3)" } ],
};InputField
Ein Feld eines Eingabedialogs. Es ist ein Zahlenfeld oder ein Textfeld, gewählt über type.
Zahlenfeld:
Prop
Type
Textfeld:
Prop
Type
InputRequest
Ein anzuzeigender Eingabedialog (Lib input, 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
Wo eine Welt-Aufforderung schwebt: ein fester Punkt oder Stellen an Entities. Entity-Offsets sind im eigenen Raum der Entity, sodass die Aufforderung sich mit ihr bewegt und dreht (eine schwingende Tür). Von mehreren Entity-Stellen wird in jedem Frame die dem Spieler nächste angezeigt.
Punkt:
Prop
Type
Entity-Stellen:
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
Die Item-Auswahl von ai-core für Admin-Werkzeuge: jedes Item des aktiven Inventars mit seinem Bild, einer Suche und einer Menge.
Prop
Type
const request: ItemPickerRequest = { title: "Give items", target: 7 };PickedItem
Eine Zeile, die die Item-Auswahl antwortet.
Prop
Type
SkillDifficulty
Wie schwer eine Stufe einer Geschicklichkeitsprüfung ist: "easy", "medium", "hard" oder die eigene Form von ox_lib { areaSize: number; speedMultiplier: number }. Die benannten Stufen: easy = grüner Bogen von 50 Grad bei 0,6 Umdrehungen pro Sekunde, medium = 40 bei 0,85, hard = 25 bei 1.
const stages: SkillDifficulty[] = ["easy", "medium", { areaSize: 30, speedMultiplier: 1.2 }];LockpickResult
Was der Dietrich antwortet: "opened" (das Schloss hat sich geöffnet), "broken" (der Spieler hat jeden Dietrich zerbrochen) oder "cancelled" (der Spieler hat ihn geschlossen).
RadialItem
Ein Eintrag des Radialrads (Lib radial). Seine Funktionen laufen in der Ressource, die ihn hinzugefügt hat; ai-core verwirft den Eintrag, wenn diese Ressource stoppt.
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
Eine Tasten-Hilfezeile, die ein Skript für eine Weile zeigt (Noclip-Tasten für Admins). Gib keybind oder key an.
Prop
Type
const hint: KeyHintRequest = { label: "Speed up", key: "SHIFT", icon: "gauge-high" };KeyHintWhen
Wann der Hinweis eines Keybinds in HUDs erscheint: "foot" (zu Fuß), "vehicle" (in einem Fahrzeug) oder "always". Der Serverbesitzer kann es im Panel ändern; ein Keybind ohne diesen Wert zeigt nie einen Hinweis.
KeyHintView
Eine Zeile der Tastenhinweise, die ein HUD zeigt (Client-Export GetKeyHints, Event ai-core:client:keyHints): die Taste, wie der Spieler sie belegt hat, und was sie tut.
Prop
Type
const row: KeyHintView = { id: "noclip_speed", key: "SHIFT", label: "Speed up", icon: "gauge-high" };Logs, Alarme, Handy
LogOptions
Zusätzliche Details einer Log-Zeile (Lib aiLog, Export Log).
Prop
Type
aiLog("payments", "Paid a bill", { source, metadata: { amount: 250 } });LogLevel
Schweregrad einer Log-Zeile: "debug", "info", "warn" oder "error".
LogChannel
Wie eine Ressource einen ihrer Log-Kanäle beschreibt (Lib aiLogChannels, Export LogChannels, einmal beim Start aufgerufen). Webhook-URLs stehen nie hier: Der Serverbesitzer legt sie im Panel von ai-core fest.
Prop
Type
aiLogChannels({ payments: { dataset: "my-shop" }, debug: { active: false } });DispatchAlert
Ein Alarm für die Polizei (oder einen anderen Job). Das aktive Alarm-Skript zeigt ihn den Mitgliedern von jobs, die im Dienst sind. Die Texte sind bereits übersetzt.
Prop
Type
const alert: DispatchAlert = { code: "10-71", title: "Shots fired", source, jobs: ["police"], priority: "high" };PhoneMail
Eine Mail, die ein Skript an das Handy eines Spielers sendet.
Prop
Type
const mail: PhoneMail = { sender: "Los Santos Customs", subject: "Your car is ready", message: "Pick it up at the garage." };PhoneNotification
Eine Benachrichtigung auf dem Handy eines Spielers.
Prop
Type
const note: PhoneNotification = { title: "Bank", message: "You received $250", app: "bank" };Rechnungen, MDT, EMS, Garagen
BillRequest
Eine Rechnung, die ein Skript sendet (Lib billing.send): von einem Job (Bußgelder, Servicegebühren) oder von einem Spieler, an einen Spieler. Die Texte sind bereits übersetzt.
Prop
Type
const bill: BillRequest = { to: 7, amount: 250, label: "Speeding", from: source, job: "police" };UnpaidBill
Eine offene Rechnung eines Spielers.
Prop
Type
MdtRecord
Eine Akte, die ein Skript in das Polizei-MDT schreibt (Lib mdt.record). Die Texte sind bereits übersetzt.
Prop
Type
const record: MdtRecord = { kind: "jail", target: 7, by: source, title: "Armed robbery", minutes: 20 };MdtRecordKind
Worum es in einer MDT-Akte geht: "fine", "warrant", "arrest" oder "jail".
DistressCall
Der Ruf eines Spielers am Boden an die Sanitäter (Lib ems.distress).
Prop
Type
const call: DistressCall = { jobs: ["ambulance"], message: "Unconscious" };GaragedVehicle
Eines der Fahrzeuge eines Spielers, das ein Garagen-Skript verwahrt.
Prop
Type
Aussehen
CharacterAppearance
Ein Aussehen, wie die Aussehens-Ebene von ai-core es herausgibt: das Ped-Modell und die eigenen Daten des Kleidungs-Skripts. Behandle data als undurchsichtig: Gib das ganze Objekt unverändert an ApplyAppearance zurück.
Prop
Type
ClothingMenu
Ein Menü eines Kleidungs-Skripts, das andere Skripte öffnen: "clothing" (Kleidungsgeschäft), "barber" (Friseur) oder "outfits" (die gespeicherten Outfits des Spielers).
JobOutfit
Ein Job-Outfit (Uniform) für das Freemode-Modell, das der Spieler trägt. Nur die aufgelisteten Teile ändern sich.
Prop
Type
OutfitPiece
Ein Teil eines Job-Outfits.
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 } ],
};Befehle
CommandInfo
Ein Befehl von Lib addCommand, wie die Ressource ihn bei ai-core ankündigt (der Tab Commands des Panels listet ihn).
Prop
Type
const info: CommandInfo = { names: ["jail", "prison"], help: "Jails a player", params: [{ name: "id", type: "playerId" }], aces: ["ai.admin"] };CommandParam
Ein Argument eines Befehls von Lib addCommand, geparst und geprüft, bevor der Handler läuft.
Prop
Type
const params: CommandParam[] = [
{ name: "id", type: "playerId", help: "Player id" },
{ name: "reason", type: "longString", help: "Reason", optional: true },
];Admin-Panel
PanelSchema
Das Admin-Panel eines Skripts: welche Datendateien es hat und wie das Panel sie anordnet. Eine Ressource übergibt es an AdminPanel der Lib (siehe Admin-Panel). Jedes Textfeld ist ein Sprachschlüssel aus locales/*.json der Ressource.
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
Eine Datendatei eines Panels.
Prop
Type
TabSpec
Ein Tab des Panels, der eine Datei zeigt.
Prop
Type
CardSpec
Eine Karte mit Feldern innerhalb eines Tabs.
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
Eine Werteliste, aus der ein Panel-Feld wählt. Ein lookup auf einem Text- oder Namensfeld lässt den Server alles andere ablehnen und das Panel die Liste anbieten.
| Wert | Die Liste |
|---|---|
"item" | Items des aktiven Inventars. |
"job" | Jobs aus der Liste Jobs des Panels. |
"gang" | Gangs aus der Liste Gangs des Panels. |
"account" | Geldkonten. |
"resource" | Gestartete Ressourcen. |
"player" | Online-Spieler, per Citizen-ID. |
"vehicle" | Jedes Fahrzeugmodell, das das Spiel des Admins hat, Addons eingeschlossen. Wird vom Server nie abgelehnt (er kann keine Modelle auflisten). |
"ped" | Die Ped-Modelle von GTA. Wird vom Server nie abgelehnt. |
AdminDelta
Ein geänderter Datensatz einer Panel-Datei, weitergeleitet an die Admins, die das Panel geöffnet haben (Export AdminPanelChanged).
Prop
Type
const delta: AdminDelta = { resource: "my-shop", file: "shops", key: "legion", value: { label: "Legion" } };UpdateInfo
Ein Skript, dessen GitHub-Release neuer ist als die laufende Version (Update-Prüfung von ai-core, Export GetUpdates).
Prop
Type
const update: UpdateInfo = { resource: "ai-core", label: "ai-core", current: "1.4.0", latest: "1.5.0", url: "https://github.com/..." };vRP-Brücke
VrpConfig
Die vRP-Berechtigungszuordnung des Panels (data/vrp.json), wie die vRP-Brücke von ai-core sie liest (Server-Export GetVrpConfig; das lokale Event ai-core:vrp:config trägt nach einer Änderung dieselbe Form).
Prop
Type
VrpPermissionRule: gewährt permission jedem, der auf irgendein ausgefülltes Ziel passt.
Prop
Type
VrpGroupAlias: ein vRP-Gruppenname, der einen Job- oder Gang-Rang oder Admin bedeutet (Ränge im vRPex-Stil wie "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" },
};