Types partagés
Chaque type vers lequel pointent les pages de l’API, avec chaque champ, son type et une valeur d’exemple.
Les pages de l’API écrivent les types par leur nom (Vec3, ActionResult, InventoryRef...). Cette page explique chacun une seule fois : ses champs, ce que signifie chaque champ, et une valeur d’exemple.
D’où vient un type :
| Package | Import | Types |
|---|---|---|
@aicore-fivem/shared | import type { AiPlayerData } from "@aicore-fivem/shared"; | Tout ce qui est sur cette page, sauf indication contraire dans le titre. |
@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 n’a pas de types à l’exécution. Une table Lua avec les mêmes clés est la même valeur : { x = 1.0, y = 2.0, z = 3.0 } est un Vec3. Les tableaux sont des listes Lua ({ 'police', 'sheriff' }), null est nil. Voir Lib pour Lua pour les vecteurs.
Positions
Vec3
Un point dans le monde, en mètres. Dans GTA, x est l’est, y le nord, z le haut.
Prop
Type
const counter: Vec3 = { x: 25.7, y: -1347.3, z: 29.5 };local counter = vector3(25.7, -1347.3, 29.5) -- ou { x = 25.7, y = -1347.3, z = 29.5 }Vec4
Un point avec une orientation : là où se tient un ped ou apparaît un véhicule, et la direction vers laquelle il regarde. Les champs vec4 du panneau et l’outil de point du panneau stockent cette forme.
Prop
Type
const spawn: Vec4 = { x: -42.1, y: -1098.4, z: 26.4, heading: 158.0 };Un vector4 Lua appelle l’orientation w. Les lecteurs de la lib (readVec4) acceptent à la fois heading et w.
ZoneShape
Une zone dans le monde. Utilisée par les Zones côté client et par les vérifications de zone côté serveur (géométrie des zones). C’est l’une de trois formes, choisie par type.
Sphere (une boule autour d’un point) :
Prop
Type
Cylinder (un cercle au sol, qui s’étend vers le haut et vers le bas) :
Prop
Type
Poly (un polygone au sol entre deux hauteurs) :
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,
};Résultats
ActionResult
Ce que chaque action serveur répond à un client : soit un succès, soit une clé de langue que le client affiche comme raison. Des champs supplémentaires peuvent accompagner la branche de succès (ActionResult<{ id: number }>). Le nouvel état lui-même ne voyage jamais dans la réponse : il arrive sous forme de delta.
Succès :
Prop
Type
Refus :
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' }Construisez les refus avec fail ; lisez les réponses avec isActionOk et replyError.
Joueurs et personnages
AiPlayerData
Les données du joueur qu’ai-core pousse vers le propre client d’un joueur : un instantané complet au chargement du personnage, puis seulement la clé qui a changé. Aussi renvoyées par l’export GetPlayerData des deux côtés. D’autres pages peuvent les appeler « données du joueur ».
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
Un personnage tel que le voient les autres ressources (le « character » de GetCharacter, de playerLoaded et d’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
Un métier d’un personnage.
Prop
Type
const membership: JobMembership = { job: "police", grade: 2 };GangMembership
Un gang dont fait partie un personnage.
Prop
Type
const membership: GangMembership = { gang: "ballas", grade: 0 };SpawnPoint
Où et comment un personnage chargé apparaît dans le monde (les données qu’ai-core envoie pour placer le personnage dans le monde).
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
Le nom et l’apparence du serveur sur les menus plein écran (réglages General du panneau ; export GetBranding).
Prop
Type
const branding: Branding = { name: "Los Santos RP", subtitle: "Serious roleplay", tagline: "Welcome", taglineSub: "Pick a character", background: "skyline" };PlayerCache
Les valeurs souvent lues du joueur local, tenues à jour par l’unique observateur d’ai-core (cache de la lib côté client). false signifie « aucun ».
Prop
Type
const snapshot: PlayerCache = { ped: 258, playerId: 0, serverId: 7, vehicle: 81922, seat: -1, weapon: false };UnloadReason
Pourquoi un personnage a été libéré.
| Valeur | Signification |
|---|---|
"dropped" | Le joueur a quitté le serveur. |
"switch" | Le joueur est revenu à l’écran des personnages. |
Argent
Noms de comptes
L’argent vit dans des comptes nommés. La liste Accounts du panneau fixe ceux qui existent ; ai-core est livré avec ceux-ci :
| Nom | Libellé | Montant de départ |
|---|---|---|
cash | Cash | 500 |
bank | Bank | 5000 |
black_money | Dirty money | 0 |
crypto | Crypto | 0 |
Un propriétaire de serveur peut ajouter, renommer ou supprimer des comptes dans le panneau : lisez donc la liste avec l’export GetAccountTypes au lieu de la supposer. Quand la liste est vide, ai-core garde un seul compte cash.
core.AddMoney(source, "bank", 250, "Paycheck");AccountTypeDefinition
Un type de compte de la liste Accounts du panneau (GetAccountTypes renvoie Record<string, AccountTypeDefinition>, indexé par nom de compte).
Prop
Type
const bank: AccountTypeDefinition = { label: "Bank", start: 5000, allowNegative: false };MoneyRef
Un côté d’un virement d’argent (TransferMoney) : le compte d’un joueur chargé, ou le compte partagé d’un métier ou d’un gang.
Prop
Type
const player: MoneyRef = { source: 7, account: "bank" };
const society: MoneyRef = { owner: "job", id: "mechanic", account: "bank" };Métiers et gangs
GradeDefinition
Un grade d’un métier ou d’un gang (contenu du panneau).
Prop
Type
const grade: GradeDefinition = { label: "Sergeant", salary: 400, boss: false };JobDefinition
Un métier de la liste Jobs du panneau (GetJobDefinition). Le grade n d’un JobMembership est 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
Un gang de la liste Gangs du panneau (GetGangDefinition).
Prop
Type
const ballas: GangDefinition = { label: "Ballas", grades: [ { label: "Recruit", salary: 0, boss: false } ] };AccessRule
Qui peut utiliser un lieu (un magasin, un coffre, un garage) : l’un des jobs ou l’un des gangs. Les deux listes vides signifient tout le monde. Vient de @aicore-fivem/lib/shared ; lisez-le avec readAccess.
Prop
Type
const armoury: AccessRule = { jobs: ["police"], gangs: [], grades: { police: 2 }, onDuty: true };Inventaire
InventoryRef
Sur quel inventaire travaille un appel.
| Valeur | Signification |
|---|---|
number | L’id serveur d’un joueur : le propre inventaire de ce joueur. |
string | N’importe quel autre inventaire par son id : un nom de coffre, un id de coffre de véhicule ou de boîte à gants. |
inventory.addItem(source, "water", 2); // un joueur
inventory.addItem("police_evidence", "phone", 1); // un coffreItemMetadata
Données libres stockées sur une pile d’objets (Record<string, unknown>) : un numéro de série, une durabilité, une note. Chaque inventaire affiche lui-même certaines clés (label, description, image dans la plupart).
const metadata: ItemMetadata = { serial: "AB-1029", durability: 100 };Gardez les métadonnées petites et compatibles JSON (chaînes, nombres, booléens, objets et tableaux simples). Deux piles avec des métadonnées différentes ne s’empilent jamais ensemble.
InventoryStack
Une pile dans un inventaire (GetItems renvoie une liste de celles-ci).
Prop
Type
const stack: InventoryStack = { name: "water", label: "Water", count: 3, slot: 4, metadata: {} };UsedItem
La pile que reçoit un handler d’objet utilisable quand un joueur utilise un objet.
Prop
Type
const used: UsedItem = { name: "lockpick", slot: 2, count: 1, metadata: { durability: 80 } };UsableItemHandler
(source: number, item: UsedItem) => unknown : s’exécute quand un joueur utilise l’objet. Renvoyer false garde l’objet dans les inventaires qui retirent eux-mêmes un objet utilisé (ai-inventory retire la quantité consume de l’objet) ; les autres inventaires suivent leurs propres réglages d’objets.
const onUse: UsableItemHandler = (source, item) => {
if (item.metadata.durability === 0) return false; // le garder
return true;
};ItemDefinition
Un objet tel que le définit l’inventaire actif (GetItemDefinition). D’autres pages peuvent l’appeler « objet » ou « définition d’objet ».
Prop
Type
const water: ItemDefinition = { name: "water", label: "Water", weight: 500, unique: false, close: true, description: "Fresh water" };StashDefinition
Un coffre tel qu’ai-core le garde (les arguments de RegisterStash).
Prop
Type
const evidence: StashDefinition = { name: "police_evidence", label: "Evidence", slots: 50, maxWeight: 100000, jobs: ["police"] };ShopProduct
Un produit d’un magasin de script.
Prop
Type
const product: ShopProduct = { name: "bandage", price: 50 };ShopDefinition
Un magasin qu’enregistre un script. Le serveur l’ouvre pour un joueur ; il n’a pas de lieu à lui.
Prop
Type
const shop: ShopDefinition = { name: "police_armoury", label: "Armoury", items: [{ name: "bandage", price: 50 }] };HeldWeapon
L’objet arme que tient le joueur local, tel que le connaît l’inventaire.
Prop
Type
const held: HeldWeapon = { name: "WEAPON_PISTOL", label: "Pistol" };Véhicules
VehicleProps
L’apparence et le tuning d’un véhicule sous forme de données simples : couleurs, mods, extras, livrée, roues, néons, teinte, plaque et état. Vient de @aicore-fivem/lib/shared. Le JSON stocké porte v: 1. Vérifiez les données reçues avec 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
Ce que reçoit un véhicule tout juste apparu en plus des valeurs par défaut du modèle (le setup de spawnVehicle de la lib, la couleur choisie dans un magasin). Vient de @aicore-fivem/lib/shared. Chaque champ est facultatif. Vérifiez les données reçues avec toVehicleSetup.
Prop
Type
const setup: VehicleSetup = { colors: [27, 27], windowTint: 1, engineOn: true };KeyPurpose
Pourquoi un joueur reçoit la clé d’un véhicule. Les scripts de clés traitent chacun différemment. Toute valeur inconnue compte comme "temporary".
| Valeur | À utiliser quand |
|---|---|
"purchase" | Le joueur possède maintenant le véhicule (concession, don par un admin) : une nouvelle clé, les anciennes copies cessent de fonctionner. |
"garage" | Un véhicule possédé sort du stockage : le propriétaire a déjà la clé. |
"job" | Un véhicule de travail pour le service. |
"rental" | Un véhicule loué pour la durée de location. |
"temporary" | Tout le reste de courte durée (apparition par un admin, essai, véhicule de braquage). La valeur par défaut. |
vehicleKeys.give(source, vehicle, "rental");VehicleOwner
Qui possède un véhicule d’ai-vehicles.
Prop
Type
const owner: VehicleOwner = { type: "character", id: "12" };OwnedVehicle
Un véhicule possédé tel qu’ai-vehicles le garde (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,
};Monde
Weather
Un nom de type de météo du contrat de qb-weathersync, en majuscules exactes : "EXTRASUNNY", "CLEAR", "NEUTRAL", "SMOG", "FOGGY", "OVERCAST", "CLOUDS", "CLEARING", "RAIN", "THUNDER", "SNOW", "BLIZZARD", "SNOWLIGHT", "XMAS", "HALLOWEEN". La liste est la constante WEATHERS ; isWeather(value) vérifie une valeur.
import { isWeather, type Weather } from "@aicore-fivem/shared";
const next: Weather = "RAIN";
if (isWeather(input)) world.setWeather(input);BlipStyle
L’apparence d’un blip telle que la stocke le widget blip du panneau. Vient de @aicore-fivem/lib/shared ; lisez-la avec readBlipStyle.
Prop
Type
const style: BlipStyle = { sprite: 52, color: 2, scale: 0.8 };PlacePed
Un PNJ qui se tient à un lieu (un commerçant, un employé). Vient de @aicore-fivem/lib/shared ; lisez-le avec 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 } };Interface joueur
NotificationKind
La couleur et l’icône d’une carte de notification : "success", "error", "info" ou "warning". D’autres pages peuvent l’appeler « notify kind ».
notify(source, "Vehicle stored", "success"); // notify(source, text, kind?, duration?) de la lib serveurNotification
Une carte de notification. ai-lib la dessine ; les textes sont déjà traduits par l’expéditeur.
Prop
Type
const card: Notification = { text: "Vehicle stored", kind: "success", duration: 3000 };ProgressOptions
Ce qu’affiche la barre de progression client (progress de la lib côté client) et comment le joueur peut bouger pendant qu’elle avance. Vient de @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
La barre qu’un flux serveur lance sur le client d’un joueur (progressFor de la lib). Les mêmes champs que ProgressOptions sans whileDead. ProgressForOptions (de @aicore-fivem/lib/server) ajoute un champ :
Prop
Type
const bar: ProgressForOptions = { label: "Picking the lock", duration: 6000, scenario: "PROP_HUMAN_PARKING_METER", minRatio: 0.9 };MenuItem
Une ligne d’un menu.
Prop
Type
const row: MenuItem = { id: "water", label: "Water ($5)", icon: "bottle-water" };MenuRequest
Un menu à afficher (menu de la lib, aiLib.menu.show en Lua).
Prop
Type
const shop: MenuRequest = {
title: "24/7",
items: [ { id: "water", label: "Water ($5)" }, { id: "bread", label: "Bread ($3)" } ],
};InputField
Un champ d’une boîte de saisie. C’est un champ nombre ou un champ texte, choisi par type.
Champ nombre :
Prop
Type
Champ texte :
Prop
Type
InputRequest
Une boîte de saisie à afficher (input de la lib, aiLib.input en Lua).
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
Où flotte une invite dans le monde : un point fixe, ou des emplacements sur des entités. Les décalages d’entité sont dans l’espace propre de l’entité, si bien que l’invite bouge et tourne avec elle (une porte qui pivote). Parmi plusieurs emplacements d’entité, celui le plus proche du joueur est affiché à chaque frame.
Point :
Prop
Type
Emplacements d’entité :
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
Le sélecteur d’objets d’ai-core pour les outils d’administration : chaque objet de l’inventaire actif avec son image, une recherche et une quantité.
Prop
Type
const request: ItemPickerRequest = { title: "Give items", target: 7 };PickedItem
Une ligne que répond le sélecteur d’objets.
Prop
Type
SkillDifficulty
La difficulté d’une étape de test d’adresse : "easy", "medium", "hard", ou la forme propre d’ox_lib { areaSize: number; speedMultiplier: number }. Les étapes nommées : easy = arc vert de 50 degrés à 0.6 tour par seconde, medium = 40 à 0.85, hard = 25 à 1.
const stages: SkillDifficulty[] = ["easy", "medium", { areaSize: 30, speedMultiplier: 1.2 }];LockpickResult
Ce que répond le crochetage : "opened" (la serrure s’est ouverte), "broken" (le joueur a cassé tous les crochets) ou "cancelled" (le joueur l’a fermé).
RadialItem
Une entrée de la roue radiale (radial de la lib). Ses fonctions s’exécutent dans la ressource qui l’a ajoutée ; ai-core retire l’entrée quand cette ressource s’arrête.
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
Une ligne d’aide de touche qu’un script affiche pendant un moment (touches de noclip d’admin). Donnez keybind ou key.
Prop
Type
const hint: KeyHintRequest = { label: "Speed up", key: "SHIFT", icon: "gauge-high" };KeyHintWhen
Quand l’aide d’un raccourci s’affiche dans les HUD : "foot" (à pied), "vehicle" (en véhicule) ou "always". Le propriétaire du serveur peut le changer dans le panneau ; un raccourci sans cette valeur n’affiche jamais d’aide.
KeyHintView
Une ligne des aides de touches qu’affiche un HUD (export client GetKeyHints, événement ai-core:client:keyHints) : la touche telle que le joueur l’a associée, et ce qu’elle fait.
Prop
Type
const row: KeyHintView = { id: "noclip_speed", key: "SHIFT", label: "Speed up", icon: "gauge-high" };Logs, alertes, téléphone
LogOptions
Détails supplémentaires d’une ligne de log (aiLog de la lib, export Log).
Prop
Type
aiLog("payments", "Paid a bill", { source, metadata: { amount: 250 } });LogLevel
Gravité d’une ligne de log : "debug", "info", "warn" ou "error".
LogChannel
Comment une ressource décrit l’un de ses canaux de log (aiLogChannels de la lib, export LogChannels, appelé une fois au démarrage). Les urls de webhook ne sont jamais ici : le propriétaire du serveur les fixe dans le panneau d’ai-core.
Prop
Type
aiLogChannels({ payments: { dataset: "my-shop" }, debug: { active: false } });DispatchAlert
Une alerte police (ou d’un autre métier). Le script d’alertes actif la montre aux membres en service de jobs. Les textes sont déjà traduits.
Prop
Type
const alert: DispatchAlert = { code: "10-71", title: "Shots fired", source, jobs: ["police"], priority: "high" };PhoneMail
Un mail qu’un script envoie sur le téléphone d’un joueur.
Prop
Type
const mail: PhoneMail = { sender: "Los Santos Customs", subject: "Your car is ready", message: "Pick it up at the garage." };PhoneNotification
Une notification sur le téléphone d’un joueur.
Prop
Type
const note: PhoneNotification = { title: "Bank", message: "You received $250", app: "bank" };Factures, MDT, EMS, garages
BillRequest
Une facture qu’envoie un script (billing.send de la lib) : d’un métier (amendes, frais de service) ou d’un joueur, à un joueur. Les textes sont déjà traduits.
Prop
Type
const bill: BillRequest = { to: 7, amount: 250, label: "Speeding", from: source, job: "police" };UnpaidBill
Une facture ouverte d’un joueur.
Prop
Type
MdtRecord
Un enregistrement qu’un script écrit dans le MDT de police (mdt.record de la lib). Les textes sont déjà traduits.
Prop
Type
const record: MdtRecord = { kind: "jail", target: 7, by: source, title: "Armed robbery", minutes: 20 };MdtRecordKind
Ce que concerne un enregistrement MDT : "fine", "warrant", "arrest" ou "jail".
DistressCall
L’appel aux médecins d’un joueur à terre (ems.distress de la lib).
Prop
Type
const call: DistressCall = { jobs: ["ambulance"], message: "Unconscious" };GaragedVehicle
L’un des véhicules d’un joueur gardés par un script de garages.
Prop
Type
Apparences
CharacterAppearance
Une apparence telle que la distribue la couche d’apparence d’ai-core : le modèle de ped et les données propres du script de vêtements. Traitez data comme opaque : rendez tout l’objet inchangé à ApplyAppearance.
Prop
Type
ClothingMenu
Un menu de script de vêtements qu’ouvrent les autres scripts : "clothing" (magasin de vêtements), "barber" ou "outfits" (les tenues enregistrées du joueur).
JobOutfit
Une tenue de métier (uniforme) pour le modèle freemode que porte le joueur. Seules les pièces listées changent.
Prop
Type
OutfitPiece
Une pièce d’une tenue de métier.
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 } ],
};Commandes
CommandInfo
Une commande d’addCommand de la lib, telle que la ressource l’annonce à ai-core (l’onglet Commands du panneau la liste).
Prop
Type
const info: CommandInfo = { names: ["jail", "prison"], help: "Jails a player", params: [{ name: "id", type: "playerId" }], aces: ["ai.admin"] };CommandParam
Un argument d’une commande addCommand de la lib, analysé et vérifié avant l’exécution du handler.
Prop
Type
const params: CommandParam[] = [
{ name: "id", type: "playerId", help: "Player id" },
{ name: "reason", type: "longString", help: "Reason", optional: true },
];Panneau d’administration
PanelSchema
Le panneau d’administration d’un script : quels fichiers de données il a et comment le panneau les dispose. Une ressource le confie à AdminPanel de la lib (voir Panneau d’administration). Chaque champ texte est une clé de langue des locales/*.json de la 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
Un fichier de données d’un panneau.
Prop
Type
TabSpec
Un onglet du panneau, qui montre un fichier.
Prop
Type
CardSpec
Une carte de champs dans un onglet.
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
Une liste de valeurs dans laquelle choisit un champ du panneau. Un lookup sur un champ texte ou de noms fait refuser par le serveur toute autre valeur et fait proposer la liste par le panneau.
| Valeur | La liste |
|---|---|
"item" | Objets de l’inventaire actif. |
"job" | Métiers de la liste Jobs du panneau. |
"gang" | Gangs de la liste Gangs du panneau. |
"account" | Comptes d’argent. |
"resource" | Ressources démarrées. |
"player" | Joueurs en ligne, par citizen id. |
"vehicle" | Chaque modèle de véhicule que possède le jeu de l’admin, addons compris. Jamais refusé par le serveur (il ne peut pas lister les modèles). |
"ped" | Les modèles de ped de GTA. Jamais refusé par le serveur. |
AdminDelta
Un enregistrement modifié d’un fichier de panneau, transmis aux admins qui ont le panneau ouvert (export AdminPanelChanged).
Prop
Type
const delta: AdminDelta = { resource: "my-shop", file: "shops", key: "legion", value: { label: "Legion" } };UpdateInfo
Un script dont la release GitHub est plus récente que la version en cours (vérification des mises à jour d’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/..." };Pont vRP
VrpConfig
La correspondance des permissions vRP du panneau (data/vrp.json), telle que la lit le pont vRP d’ai-core (export serveur GetVrpConfig ; l’événement local ai-core:vrp:config transporte la même forme après un changement).
Prop
Type
VrpPermissionRule : accorde permission à quiconque correspond à l’une des cibles remplies.
Prop
Type
VrpGroupAlias : un nom de groupe vRP qui signifie un grade de métier ou de gang, ou admin (rangs de style vRPex comme "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" },
};