Общие типы
Все типы, на которые ссылаются страницы API, с каждым полем, его типом и примером значения.
Страницы API пишут типы по имени (Vec3, ActionResult, InventoryRef...). Эта страница объясняет каждый из них один раз: его поля, что означает каждое поле, и пример значения.
Откуда берётся тип:
| Пакет | Импорт | Типы |
|---|---|---|
@aicore-fivem/shared | import type { AiPlayerData } from "@aicore-fivem/shared"; | Всё на этой странице, если заголовок не говорит иное. |
@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 нет типов во время выполнения. Таблица Lua с теми же ключами - это то же значение: { x = 1.0, y = 2.0, z = 3.0 } - это Vec3. Массивы - это списки Lua ({ 'police', 'sheriff' }), null - это nil. О векторах см. Библиотека для Lua.
Позиции
Vec3
Точка в мире, в метрах. В GTA x - восток, y - север, z - вверх.
Prop
Type
const counter: Vec3 = { x: 25.7, y: -1347.3, z: 29.5 };local counter = vector3(25.7, -1347.3, 29.5) -- или { x = 25.7, y = -1347.3, z = 29.5 }Vec4
Точка с направлением: где стоит пед или появляется транспорт и куда он обращён. Поля панели vec4 и инструмент точки в панели хранят именно эту форму.
Prop
Type
const spawn: Vec4 = { x: -42.1, y: -1098.4, z: 26.4, heading: 158.0 };В Lua vector4 называет направление w. Функции чтения библиотеки (readVec4) принимают и heading, и w.
ZoneShape
Область в мире. Используется клиентскими Zones и серверными проверками областей (геометрия зон). Это одна из трёх форм, выбираемая по type.
Sphere (шар вокруг точки):
Prop
Type
Cylinder (круг на земле, уходящий вверх и вниз):
Prop
Type
Poly (многоугольник на земле между двумя высотами):
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,
};Результаты
ActionResult
Что каждое серверное действие отвечает клиенту: либо успех, либо языковой ключ, который клиент показывает как причину. В ветке успеха могут идти дополнительные поля (ActionResult<{ id: number }>). Само новое состояние никогда не передаётся в ответе: оно приходит дельтой.
Успех:
Prop
Type
Отказ:
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' }Собирайте отказы через fail; читайте ответы через isActionOk и replyError.
Игроки и персонажи
AiPlayerData
Данные игрока, которые ai-core отправляет на клиент самого игрока: один полный снимок при загрузке персонажа, затем только изменившийся ключ. Также возвращаются экспортом GetPlayerData на обеих сторонах. Другие страницы могут называть это «данными игрока».
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
Персонаж так, как его видят другие ресурсы («character» из GetCharacter, playerLoaded и 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
Одна работа персонажа.
Prop
Type
const membership: JobMembership = { job: "police", grade: 2 };GangMembership
Одна банда, в которой состоит персонаж.
Prop
Type
const membership: GangMembership = { gang: "ballas", grade: 0 };SpawnPoint
Где и как загруженный персонаж появляется в мире (данные, которые ai-core отправляет, чтобы поместить персонажа в мир).
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
Название и оформление сервера в полноэкранных меню (настройки General в панели; экспорт GetBranding).
Prop
Type
const branding: Branding = { name: "Los Santos RP", subtitle: "Serious roleplay", tagline: "Welcome", taglineSub: "Pick a character", background: "skyline" };PlayerCache
Часто читаемые значения локального игрока, которые поддерживает в актуальном виде единый наблюдатель ai-core (cache из библиотеки на клиенте). false означает «нет».
Prop
Type
const snapshot: PlayerCache = { ped: 258, playerId: 0, serverId: 7, vehicle: 81922, seat: -1, weapon: false };UnloadReason
Почему персонаж отпущен.
| Значение | Смысл |
|---|---|
"dropped" | Игрок покинул сервер. |
"switch" | Игрок вернулся на экран персонажей. |
Деньги
Имена счетов
Деньги лежат на именованных счетах. Какие существуют, задаёт список Accounts в панели; ai-core поставляется с такими:
| Имя | Подпись | Начальная сумма |
|---|---|---|
cash | Cash | 500 |
bank | Bank | 5000 |
black_money | Dirty money | 0 |
crypto | Crypto | 0 |
Владелец сервера может добавлять, переименовывать или удалять счета в панели, поэтому читайте список экспортом GetAccountTypes, а не полагайтесь на него. Когда список пуст, ai-core оставляет единственный счёт cash.
core.AddMoney(source, "bank", 250, "Paycheck");AccountTypeDefinition
Один тип счёта из списка Accounts в панели (GetAccountTypes возвращает Record<string, AccountTypeDefinition> с ключами по имени счёта).
Prop
Type
const bank: AccountTypeDefinition = { label: "Bank", start: 5000, allowNegative: false };MoneyRef
Одна сторона денежного перевода (TransferMoney): счёт загруженного игрока или общий счёт работы или банды.
Prop
Type
const player: MoneyRef = { source: 7, account: "bank" };
const society: MoneyRef = { owner: "job", id: "mechanic", account: "bank" };Работы и банды
GradeDefinition
Один ранг работы или банды (содержимое панели).
Prop
Type
const grade: GradeDefinition = { label: "Sergeant", salary: 400, boss: false };JobDefinition
Одна работа из списка Jobs панели (GetJobDefinition). Ранг n в JobMembership - это 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
Одна банда из списка Gangs панели (GetGangDefinition).
Prop
Type
const ballas: GangDefinition = { label: "Ballas", grades: [ { label: "Recruit", salary: 0, boss: false } ] };AccessRule
Кто может пользоваться местом (магазин, тайник, гараж): одна из jobs или одна из gangs. Оба списка пусты - значит, все. Из @aicore-fivem/lib/shared; читайте через readAccess.
Prop
Type
const armoury: AccessRule = { jobs: ["police"], gangs: [], grades: { police: 2 }, onDuty: true };Инвентарь
InventoryRef
С каким инвентарём работает вызов.
| Значение | Означает |
|---|---|
number | Серверный id игрока: собственный инвентарь этого игрока. |
string | Любой другой инвентарь по его id: имя тайника, id багажника или бардачка. |
inventory.addItem(source, "water", 2); // игрок
inventory.addItem("police_evidence", "phone", 1); // тайникItemMetadata
Свободные данные, хранящиеся на одной стопке предметов (Record<string, unknown>): серийный номер, прочность, заметка. Каждый инвентарь сам показывает некоторые ключи (label, description, image в большинстве из них).
const metadata: ItemMetadata = { serial: "AB-1029", durability: 100 };Держите метаданные небольшими и безопасными для JSON (строки, числа, boolean, простые объекты и массивы). Две стопки с разными метаданными никогда не складываются вместе.
InventoryStack
Одна стопка в инвентаре (GetItems возвращает их список).
Prop
Type
const stack: InventoryStack = { name: "water", label: "Water", count: 3, slot: 4, metadata: {} };UsedItem
Стопка, которую получает обработчик используемого предмета, когда игрок использует предмет.
Prop
Type
const used: UsedItem = { name: "lockpick", slot: 2, count: 1, metadata: { durability: 80 } };UsableItemHandler
(source: number, item: UsedItem) => unknown: выполняется, когда игрок использует предмет. Возврат false оставляет предмет в инвентарях, которые сами забирают использованный предмет (ai-inventory забирает количество consume предмета); другие инвентари следуют своим настройкам предметов.
const onUse: UsableItemHandler = (source, item) => {
if (item.metadata.durability === 0) return false; // оставить его
return true;
};ItemDefinition
Один предмет так, как его определяет активный инвентарь (GetItemDefinition). Другие страницы могут называть это «предметом» или «определением предмета».
Prop
Type
const water: ItemDefinition = { name: "water", label: "Water", weight: 500, unique: false, close: true, description: "Fresh water" };StashDefinition
Тайник так, как его хранит ai-core (аргументы RegisterStash).
Prop
Type
const evidence: StashDefinition = { name: "police_evidence", label: "Evidence", slots: 50, maxWeight: 100000, jobs: ["police"] };ShopProduct
Один товар магазина скрипта.
Prop
Type
const product: ShopProduct = { name: "bandage", price: 50 };ShopDefinition
Магазин, который регистрирует скрипт. Сервер открывает его игроку; своего места у него нет.
Prop
Type
const shop: ShopDefinition = { name: "police_armoury", label: "Armoury", items: [{ name: "bandage", price: 50 }] };HeldWeapon
Предмет-оружие, которое держит локальный игрок, как его знает инвентарь.
Prop
Type
const held: HeldWeapon = { name: "WEAPON_PISTOL", label: "Pistol" };Транспорт
VehicleProps
Внешний вид и тюнинг транспорта в виде простых данных: цвета, моды, дополнения, ливрея, колёса, неон, тонировка, номер и состояние. Из @aicore-fivem/lib/shared. Сохранённый JSON несёт v: 1. Проверяйте полученные данные через 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
Что получает только что заспавненный транспорт поверх значений модели по умолчанию (setup у spawnVehicle из библиотеки, цвет, выбранный в магазине). Из @aicore-fivem/lib/shared. Каждое поле необязательно. Проверяйте полученные данные через toVehicleSetup.
Prop
Type
const setup: VehicleSetup = { colors: [27, 27], windowTint: 1, engineOn: true };KeyPurpose
Почему игрок получает ключ от транспорта. Скрипты ключей обрабатывают каждый вариант по-своему. Всё неизвестное считается "temporary".
| Значение | Используйте, когда |
|---|---|
"purchase" | Игрок теперь владеет транспортом (автосалон, выдача админом): новый ключ, старые копии перестают работать. |
"garage" | Личный транспорт выходит со стоянки: у владельца ключ уже есть. |
"job" | Рабочий транспорт на смену. |
"rental" | Арендованный транспорт на время аренды. |
"temporary" | Всё остальное кратковременное (спавн админом, тест-драйв, транспорт для ограбления). По умолчанию. |
vehicleKeys.give(source, vehicle, "rental");VehicleOwner
Кто владеет транспортом ai-vehicles.
Prop
Type
const owner: VehicleOwner = { type: "character", id: "12" };OwnedVehicle
Личный транспорт так, как его хранит 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,
};Мир
Weather
Имя типа погоды из контракта qb-weathersync, точно в верхнем регистре: "EXTRASUNNY", "CLEAR", "NEUTRAL", "SMOG", "FOGGY", "OVERCAST", "CLOUDS", "CLEARING", "RAIN", "THUNDER", "SNOW", "BLIZZARD", "SNOWLIGHT", "XMAS", "HALLOWEEN". Список - это константа WEATHERS; isWeather(value) проверяет значение.
import { isWeather, type Weather } from "@aicore-fivem/shared";
const next: Weather = "RAIN";
if (isWeather(input)) world.setWeather(input);BlipStyle
Внешний вид метки так, как его хранит виджет панели blip. Из @aicore-fivem/lib/shared; читайте через readBlipStyle.
Prop
Type
const style: BlipStyle = { sprite: 52, color: 2, scale: 0.8 };PlacePed
NPC, стоящий в месте (продавец, клерк). Из @aicore-fivem/lib/shared; читайте через 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 } };Интерфейс игрока
NotificationKind
Цвет и иконка карточки уведомления: "success", "error", "info" или "warning". Другие страницы могут называть это «видом уведомления».
notify(source, "Vehicle stored", "success"); // серверная библиотека notify(source, text, kind?, duration?)Notification
Карточка уведомления. Её рисует ai-lib; тексты уже переведены отправителем.
Prop
Type
const card: Notification = { text: "Vehicle stored", kind: "success", duration: 3000 };ProgressOptions
Что показывает клиентская полоса прогресса (progress из библиотеки на клиенте) и как игрок может двигаться, пока она идёт. Из @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
Полоса, которую серверный сценарий запускает на клиенте игрока (progressFor из библиотеки). Те же поля, что у ProgressOptions, без whileDead. ProgressForOptions (из @aicore-fivem/lib/server) добавляет одно поле:
Prop
Type
const bar: ProgressForOptions = { label: "Picking the lock", duration: 6000, scenario: "PROP_HUMAN_PARKING_METER", minRatio: 0.9 };MenuItem
Одна строка меню.
Prop
Type
const row: MenuItem = { id: "water", label: "Water ($5)", icon: "bottle-water" };MenuRequest
Меню для показа (menu из библиотеки, aiLib.menu.show в Lua).
Prop
Type
const shop: MenuRequest = {
title: "24/7",
items: [ { id: "water", label: "Water ($5)" }, { id: "bread", label: "Bread ($3)" } ],
};InputField
Одно поле диалога ввода. Это числовое поле или текстовое поле, выбираемое по type.
Числовое поле:
Prop
Type
Текстовое поле:
Prop
Type
InputRequest
Диалог ввода для показа (input из библиотеки, aiLib.input в 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
Где парит подсказка в мире: фиксированная точка или места на сущностях. Смещения на сущностях задаются в собственном пространстве сущности, поэтому подсказка двигается и поворачивается вместе с ней (распахивающаяся дверь). Из нескольких мест на сущностях каждый кадр показывается ближайшее к игроку.
Точка:
Prop
Type
Места на сущностях:
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
Выбор предметов ai-core для админских инструментов: каждый предмет активного инвентаря с картинкой, поиском и количеством.
Prop
Type
const request: ItemPickerRequest = { title: "Give items", target: 7 };PickedItem
Одна строка, которую отвечает выбор предметов.
Prop
Type
SkillDifficulty
Насколько сложен этап skill check: "easy", "medium", "hard" или собственная форма ox_lib { areaSize: number; speedMultiplier: number }. Именованные этапы: easy = зелёная дуга 50 градусов при 0.6 оборота в секунду, medium = 40 при 0.85, hard = 25 при 1.
const stages: SkillDifficulty[] = ["easy", "medium", { areaSize: 30, speedMultiplier: 1.2 }];LockpickResult
Что отвечает взлом замка: "opened" (замок открылся), "broken" (игрок сломал все отмычки) или "cancelled" (игрок закрыл его).
RadialItem
Один пункт радиального колеса (radial из библиотеки). Его функции выполняются в ресурсе, который его добавил; ai-core удаляет пункт, когда этот ресурс останавливается.
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
Строка справки по клавише, которую скрипт показывает какое-то время (клавиши noclip у админа). Укажите keybind или key.
Prop
Type
const hint: KeyHintRequest = { label: "Speed up", key: "SHIFT", icon: "gauge-high" };KeyHintWhen
Когда подсказка привязки показывается в HUD: "foot" (пешком), "vehicle" (в транспорте) или "always". Владелец сервера может изменить это в панели; привязка без этого значения никогда не показывает подсказку.
KeyHintView
Одна строка подсказок клавиш, которую показывает HUD (клиентский экспорт GetKeyHints, событие ai-core:client:keyHints): клавиша так, как её назначил игрок, и что она делает.
Prop
Type
const row: KeyHintView = { id: "noclip_speed", key: "SHIFT", label: "Speed up", icon: "gauge-high" };Логи, оповещения, телефон
LogOptions
Дополнительные подробности строки лога (aiLog из библиотеки, экспорт Log).
Prop
Type
aiLog("payments", "Paid a bill", { source, metadata: { amount: 250 } });LogLevel
Важность строки лога: "debug", "info", "warn" или "error".
LogChannel
Как ресурс описывает один из своих каналов логов (aiLogChannels из библиотеки, экспорт LogChannels, вызывается один раз при старте). Url вебхуков здесь никогда нет: их задаёт владелец сервера в панели ai-core.
Prop
Type
aiLogChannels({ payments: { dataset: "my-shop" }, debug: { active: false } });DispatchAlert
Оповещение полиции (или другой работы). Активный скрипт оповещений показывает его сотрудникам jobs на дежурстве. Тексты уже переведены.
Prop
Type
const alert: DispatchAlert = { code: "10-71", title: "Shots fired", source, jobs: ["police"], priority: "high" };PhoneMail
Письмо, которое скрипт отправляет на телефон игрока.
Prop
Type
const mail: PhoneMail = { sender: "Los Santos Customs", subject: "Your car is ready", message: "Pick it up at the garage." };PhoneNotification
Уведомление на телефоне игрока.
Prop
Type
const note: PhoneNotification = { title: "Bank", message: "You received $250", app: "bank" };Счета, MDT, EMS, гаражи
BillRequest
Счёт, который отправляет скрипт (billing.send из библиотеки): от работы (штрафы, оплата услуг) или от игрока, игроку. Тексты уже переведены.
Prop
Type
const bill: BillRequest = { to: 7, amount: 250, label: "Speeding", from: source, job: "police" };UnpaidBill
Один открытый счёт игрока.
Prop
Type
MdtRecord
Запись, которую скрипт пишет в полицейский MDT (mdt.record из библиотеки). Тексты уже переведены.
Prop
Type
const record: MdtRecord = { kind: "jail", target: 7, by: source, title: "Armed robbery", minutes: 20 };MdtRecordKind
О чём запись MDT: "fine", "warrant", "arrest" или "jail".
DistressCall
Вызов медиков лежащим игроком (ems.distress из библиотеки).
Prop
Type
const call: DistressCall = { jobs: ["ambulance"], message: "Unconscious" };GaragedVehicle
Один из транспортов игрока, который хранит скрипт гаражей.
Prop
Type
Внешность
CharacterAppearance
Внешность в том виде, в каком её выдаёт слой внешности ai-core: модель педа и собственные данные скрипта одежды. Считайте data непрозрачными: возвращайте весь объект в ApplyAppearance без изменений.
Prop
Type
ClothingMenu
Меню скрипта одежды, которое открывают другие скрипты: "clothing" (магазин одежды), "barber" или "outfits" (сохранённые наряды игрока).
JobOutfit
Рабочая форма для модели freemode, которую носит игрок. Меняются только перечисленные части.
Prop
Type
OutfitPiece
Одна часть рабочей формы.
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 } ],
};Команды
CommandInfo
Команда из addCommand библиотеки в том виде, в каком ресурс сообщает её ai-core (её показывает вкладка Commands панели).
Prop
Type
const info: CommandInfo = { names: ["jail", "prison"], help: "Jails a player", params: [{ name: "id", type: "playerId" }], aces: ["ai.admin"] };CommandParam
Один аргумент команды addCommand из библиотеки, разобранный и проверенный до запуска обработчика.
Prop
Type
const params: CommandParam[] = [
{ name: "id", type: "playerId", help: "Player id" },
{ name: "reason", type: "longString", help: "Reason", optional: true },
];Админ-панель
PanelSchema
Админ-панель скрипта: какие у неё файлы данных и как панель их раскладывает. Ресурс передаёт её в AdminPanel из библиотеки (см. Админ-панель). Каждое текстовое поле - языковой ключ из locales/*.json ресурса.
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
Один файл данных панели.
Prop
Type
TabSpec
Одна вкладка панели, показывающая один файл.
Prop
Type
CardSpec
Одна карточка полей внутри вкладки.
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
Список значений, из которого выбирает поле панели. lookup на текстовом поле или поле имён заставляет сервер отклонять всё остальное, а панель предлагать этот список.
| Значение | Список |
|---|---|
"item" | Предметы активного инвентаря. |
"job" | Работы из списка Jobs панели. |
"gang" | Банды из списка Gangs панели. |
"account" | Денежные счета. |
"resource" | Запущенные ресурсы. |
"player" | Игроки в сети, по citizen id. |
"vehicle" | Все модели транспорта, которые есть в игре админа, включая аддоны. Сервер никогда не отклоняет (он не может перечислить модели). |
"ped" | Модели педов GTA. Сервер никогда не отклоняет. |
AdminDelta
Изменённая запись файла панели, которая передаётся админам с открытой панелью (экспорт AdminPanelChanged).
Prop
Type
const delta: AdminDelta = { resource: "my-shop", file: "shops", key: "legion", value: { label: "Legion" } };UpdateInfo
Скрипт, чей релиз на GitHub новее запущенной версии (проверка обновлений ai-core, экспорт 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
VrpConfig
Сопоставление прав vRP из панели (data/vrp.json) в том виде, в каком его читает мост vRP в ai-core (серверный экспорт GetVrpConfig; локальное событие ai-core:vrp:config несёт ту же форму после изменения).
Prop
Type
VrpPermissionRule: выдаёт permission всем, кто подходит под любую заполненную цель.
Prop
Type
VrpGroupAlias: имя группы vRP, которое означает ранг работы или банды или админа (звания в стиле vRPex, такие как "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" },
};