AI Core
Справочник API

Экспорты скриптов

Экспорты каждого скрипта ai-* и API других скриптов, которые они заменяют.

Скрипты ai-* никогда не вызывают друг друга для общей задачи: предметы, ключи, оповещения, тюрьма, медицина, внешность, пункты радиального меню и погода идут через ai-core (библиотеку), который вызывает экспорты ниже. Вызывайте их сами только для того, что относится к конкретному скрипту. Экспорты, типизированные в @aicore-fivem/shared, работают с resourceExport("ai-..."); остальные через callExport(resource, name, ...args) или обычный вызов exports[...].

Если скрипт заменяет другой (provide), имена экспортов того скрипта тоже отвечают, поэтому exports.ox_inventory:AddItem(...) попадает в ai-inventory.

ai-lib

Общий интерфейс игрока. Клиентские экспорты, типизированы AiLibClientExports; notify, progress, showPrompt, menu, input, skillCheck и lockpick библиотеки вызывают их за вас.

ЭкспортЧто
Notify(notification: Notification): voidКарточка уведомления (text, title?, kind, duration?).
ShowProgress(label: string, duration: number): voidПоказывает полосу прогресса на duration мс (действие выполняет вызывающий).
HideProgress(): voidСкрывает её.
ShowPrompt(id: string, text: string, at?: { x, y, z }): voidПоказывает или обновляет подсказку вызывающего; at рисует её над точкой в мире.
HidePrompt(id: string): voidСкрывает подсказку.
OpenMenu(requestId: number, request: MenuRequest): voidМеню; выбор приходит как MENU_EVENTS.menuResult.
OpenInput(requestId: number, request: InputRequest): voidДиалог ввода; значения приходят как MENU_EVENTS.inputResult.
OpenMinigame(requestId: number, request: MinigameRequest): voidПроверка навыка или отмычка; результат приходит как MENU_EVENTS.menuResult.
CloseDialog(): voidЗакрывает открытое меню или диалог ввода вызывающего (ответ null).

Серверное событие ai-lib:client:notify (LIB_UI.notifyEvent) с Notification показывает карточку на экране этого игрока.

ai-inventory

Серверные экспорты (собственные): другие скрипты ai-* доходят до них через слой инвентаря ai-core.

ЭкспортЧто
AddItem(inv: number | string, item: string, count: number, metadata?, slot?): booleanДобавляет предметы.
RemoveItem(inv: number | string, item: string, count: number, metadata?, slot?): booleanУбирает предметы.
GetItemCount(inv: number | string, item: string, metadata?): numberСколько штук.
GetItems(inv: number | string): { name, label, count, slot, metadata }[]Все стаки с названиями.
CanCarryItem(inv: number | string, item: string, count: number, metadata?): booleanПоместится ли.
RegisterUsableItem(name: string, handler: (source, item) => unknown): voidhandler, вернувший false, оставляет предмет; иначе забирается его количество consume.
RegisterStash(name: string, label: string, slots: number, maxWeight: number, jobs?: string[], personal?: boolean): voidХранилище.
OpenInventory(source: number, inv: number | string): booleanОткрывает инвентарь на экране игрока.
ClearInventory(inv: number | string): voidОчищает его.
Items(name?: string): unknownОдно определение предмета (формат ox) или все.
GetWeight(inv: number | string): { weight, maxWeight } | nullПереносимый вес и лимит в граммах.

Клиентские экспорты: OpenInventory(type, data), CloseInventory(), OpenSelf() (собственный инвентарь с землёй, багажником или бардачком рядом), GetItemCount(item), HasItem(items: string \| string[] \| Record<string, number>, amount?), GetPlayerItems().

Локальное событие сервера ai-inventory:usedItem (source, name, slot, metadata, status).

API ox_inventory

ai-inventory делает provide для ox_inventory и отвечает на его экспорты (ox_inventory 2.44). Инвентари называются как в ox: source игрока, имя хранилища, { id, owner } для личных хранилищ, номер для багажников.

  • Сервер: AddItem (возвращает success, response, вызывает cb), RemoveItem, GetItem, GetItemCount, Search (count / slots), CanCarryItem, CanCarryWeight, CanCarryAmount, GetInventory, GetInventoryItems, GetSlot, GetSlotWithItem, GetSlotsWithItem, GetSlotIdWithItem, GetSlotIdsWithItem, GetEmptySlot, SetMetadata, SetDurability, SetMaxWeight, RegisterStash, ClearInventory, Items, ItemList, forceOpenInventory (хранилище, игрок, магазин), CreateTemporaryStash, CustomDrop, RemoveInventory, SwapSlots.
  • Клиент: openInventory, closeInventory, Search, GetItemCount, GetPlayerItems, GetPlayerWeight, GetPlayerMaxWeight, Items, useSlot, getCurrentWeapon / GetCurrentWeapon; displayMetadata, weaponWheel, setStashTarget принимаются и ничего не делают.
  • Без ответа: хуки (registerHook, removeHooks), UpdateVehicle, ConfiscateInventory / ReturnInventory, GetContainerFromSlot, RegisterShop (магазины берутся из панели).

API qb-inventory

ai-inventory делает provide для qb-inventory (API 2.0). Возвращаемые предметы несут оба формата: count / metadata и amount / info.

  • Сервер: AddItem(identifier, item, amount, slot, info), RemoveItem, HasItem (имя, список или { name = amount }), GetItemCount, GetItemByName, GetItemsByName, GetItemBySlot, CanAddItem, GetFreeWeight, GetSlots, ClearInventory, SetItemData, CreateInventory, OpenInventory, OpenInventoryById, RemoveInventory, CloseInventory.
  • Клиент: HasItem, CloseInventory.
  • Без ответа: хуки и слушатели, CreateShop / OpenShop, SetInventory, GetInventory, SaveInventory, LoadInventory, UseItem, GetFirstSlotByItem, GetSlotsByItem, GetTotalWeight.

ai-vehicles

Личный транспорт. Серверные экспорты, типизированы AiVehiclesServerExports. VehicleOwner - это { type: "character" \| "job" \| "gang" \| "resource", id }.

ЭкспортЧто
CreateVehicle(owner: VehicleOwner, model: string, garage: string | null, props?): { id, plate } | nullРегистрирует новый личный транспорт.
GetVehicle(ref: number | string): OwnedVehicle | nullТранспорт по id или номеру.
GetVehicles(owner: VehicleOwner): OwnedVehicle[]Транспорт персонажа онлайн или автопарк работы или банды.
IsOwnedPlate(plate: string): booleanПринадлежит ли номер личному транспорту.
GetVehicleIdByEntity(entity: number): number | nullId заспавненного личного транспорта.
GetPlateOwners(): [plate, type, id][]Весь личный транспорт в памяти (затем следите за ai-vehicles:owners).
GetEntity(id: number): number | nullЗаспавненная сущность транспорта.
SaveVehicle(id: number, change: { props?, fuel?, engine?, body?, state?, garage? }): voidСохраняет состояние и внешний вид; сохранённый тюнинг остаётся.
SaveTuning(id: number, props: unknown): voidСохраняет полные свойства с тюнингом (только тюнинг-мастерские).
StoreVehicle(id: number, garage: string | null, state?: VehicleState): voidСтавит транспорт в гараж (garage, out, impound).
SetOwner(id: number, owner: VehicleOwner): voidМеняет владельца.
DeleteVehicle(id: number): voidУдаляет транспорт.
SpawnVehicle(id: number, at: { x, y, z, heading }, asker: number, cb: (netId: number | null) => void, purpose?: KeyPurpose, setup?): voidСоздаёт сущность; cb получает её net id.

ai-vehicles делает provide для qbx_vehicles: GetPlayerVehicles(filters), GetPlayerVehicle(id), CreatePlayerVehicle(request), SetPlayerVehicleOwner(id, citizenid), DeletePlayerVehicles(idType, idValue), GetVehicleIdByPlate(plate), DoesPlayerVehiclePlateExist(plate), SaveVehicle(entity, options) (фильтры по citizenid требуют, чтобы владелец был онлайн).

ai-vehicleshop

ЭкспортЧто
GetCatalogPrice(model: string): number | nullЦена модели в каталоге (сервер).

ai-vehiclekeys

Серверные экспорты, также под qbx_vehiclekeys. Транспорт - это сущность или номер. Скрипты выдают ключи через ai-core (GiveVehicleKeys, библиотека vehicleKeys), который вызывает эти экспорты, пока ai-vehiclekeys - активная система ключей.

ЭкспортЧто
HasKeys(source: number, vehicle: number | string): booleanЕсть ли у игрока ключи.
GiveKeys(source: number, vehicle: number | string): voidВыдаёт ключи.
RemoveKeys(source: number, vehicle: number | string): voidЗабирает ключи.
SetLockState(vehicle, state)Запирает ("lock", true, 2) или отпирает сущность транспорта.
IsPlayerNearVehicle(source, vehicle)Стоит ли игрок рядом с транспортом.

ai-death

Серверные экспорты, типизированы AiDeathServerExports; Revive и IsDead также под qbx_medical. Скрипты используют вместо них медицинский слой ai-core (библиотека medical).

ЭкспортЧто
Revive(source: number): booleanПоднимает упавшего игрока; false, если он не упал.
IsDead(source: number): booleanУпал ли игрок.
Heal(source: number): voidПолное здоровье для игрока, который не упал.

Клиентское событие hospital:client:Revive с сервера поднимает игрока.

ai-prison

Серверные экспорты; их вызывает слой тюрьмы ai-core (библиотека prison).

ЭкспортЧто
JailPlayer(source, minutes, by?)Сажает игрока в тюрьму; true, если получилось.
ReleasePlayer(source)Освобождает заключённого.
GetJailTime(source)Сколько минут осталось (0, если на свободе).

ai-policealert

ЭкспортЧто
DispatchAlert(alert: DispatchAlert): voidПоказывает карточку оповещения; вызывает его только слой диспетчера ai-core (скрипты используют SendDispatchAlert / библиотеку dispatch).

ai-doorlock

Серверные экспорты, типизированы AiDoorlockServerExports; двери по id из панели. Также отвечает на setDoorState и getDoor из ox_doorlock.

ЭкспортЧто
SetDoorState(id: string, locked: boolean): voidЗапирает или отпирает дверь.
IsLocked(id: string): booleanЗаперта ли дверь.

ai-banking

Деньги организаций для скриптов QB (счёт - это имя работы). Серверные экспорты, также под qb-banking; getAccountMoney, addAccountMoney, removeAccountMoney из Renewed-Banking отвечают так же.

ЭкспортЧто
GetAccountBalance(job)Банковский баланс счёта работы.
AddMoney(job, amount, reason)Пополняет его.
RemoveMoney(job, amount, reason)Списывает с него.

ai-hud

ЭкспортСторонаЧто
OpenSettings()КлиентОткрывает настройки HUD.
SetMinimapAlways(on: boolean)КлиентЛичный переключатель админа: миникарта и пешком, что бы ни стояло в панели.
GetMinimapAlways(): booleanКлиентВключён ли он.
GetNeeds(source)Серверhunger, thirst, stress игрока или null.
SetNeed(source, need, value)СерверУстанавливает одну потребность.
AddNeed(source, need, delta)СерверМеняет одну потребность на delta.

ai-smallresources

Клиентские экспорты.

ЭкспортЧто
GetSeatbelt(): boolean | nullПристёгнут ли игрок; null пешком или при выключенных ремнях. Изменения приходят как ai-smallresources:seatbelt.
IsHandsUp(): booleanРуки подняты (скрипты используют библиотеку gestures).
IsPointing(): booleanУказывает.

ai-sirens

Клиентские экспорты для спецтранспорта; vehicle по умолчанию - транспорт, в котором сидит игрок. Изменения состояния работают на клиенте водителя.

ЭкспортЧто
SetLights(vehicle, on)Включает или выключает огни.
ToggleLights(vehicle)Переключает огни.
SetSirenTone(vehicle, tone)Тон 0-3 (0 = выключено).
ToggleSiren(vehicle)Включает или выключает сирену.
CycleTone(vehicle)Следующий тон.
GetSirenTone(vehicle)Текущий тон.
AreLightsOn(vehicle)Включены ли огни.
GetAirManuState(vehicle)Состояние ручного тона.
GetLightbarModel(vehicle)Модель световой балки или null.

ai-exitsleeping

ЭкспортСторонаЧто
AddCreateCheck(id, fn(source, charId, coords) => boolean)СерверВерните false, чтобы не оставлять спящее тело (квартира, зона ивента); удаляется, когда добавивший ресурс останавливается.
PlayerLoaded()КлиентБудит персонажа, когда режим пробуждения - «export».
SetHidden(reason, hidden)КлиентСкрывает все спящие тела на этом клиенте, пока действует хоть одна причина (интерьеры, шеллы).
SetCarryBlocked(reason, blocked)КлиентСкрывает вариант «нести», пока действует хоть одна причина.

ai-appearance

Клиентские экспорты, типизированы AiAppearanceClientExports; скрипты используют библиотеку appearance.

ЭкспортЧто
ApplyAppearance(ped: number, appearance: unknown): booleanНадевает внешность ai-appearance на педа её модели.
GetPedAppearance(ped: number): unknownВнешность локального игрока, null для других педов.

ai-radialmenu

Собственные клиентские экспорты (типизированы AiRadialClientExports): AddItem(item) (onSelect принимается как onPressed), RemoveItem(id, parent?), Refresh(). Скрипты используют библиотеку radial.

Делает provide для API других колёс:

  • qb-radialmenu: AddOption(data, id?) возвращает id, RemoveOption(id).
  • tgiann-radialmenu-target: AddMenuItem(item | items, parentId?), RemoveMenuItem(id, parentId?), ClearMenuItems(), RegisterSubMenu({ id, items }), RefreshMenu(), DisableMenu(state), IsMenuDisabled(), OpenMenu(), CloseMenu(), IsMenuOpen(), HasMenuItem(id), SetMenuItemHidden(id, state), IsMenuItemHidden(id), UpdateMenuItem(id, { label?, icon? }), ResetMenuItem(id).

ai-target

Отвечает на клиентский API ox_target под ai-target и ox_target: addSphereZone, addBoxZone, addPolyZone, removeZone, zoneExists, addModel, removeModel, addEntity, removeEntity, addLocalEntity, removeLocalEntity, addGlobalPed / Vehicle / Object / Player и их removeGlobal*, disableTargeting, isActive. addGlobalOption не поддерживается (пишет предупреждение). Скрипты используют Points библиотеки, которые выбирают подсказку или таргет по настройке владельца.

ai-voice

Заменяет pma-voice 7.x (делает provide для pma-voice, mumble-voip, tokovoip, toko-voip, tokovoip_script).

  • Сервер, имена pma-voice: setPlayerRadio, setPlayerCall, getPlayersInRadioChannel / GetPlayersInRadioChannel, addChannelCheck, overrideRadioNameGetter, isValidPlayer.
  • Сервер, собственные: getBackend, setPlayerProximityMode(source, index), setPlayerRange(source, metres | null), getPlayerProximity(source), toggleMute(source, seconds?), addProximityCheck(fn(source, index, distance)) (false запрещает), addPlayerRadioListen / removePlayerRadioListen / setPlayerRadioActive(source, channel), getPlayerRadioChannels(source) ({ active, channels }), addCallCheck(fn(source, callId)) (true разрешает), setPlayerCallSpeaker(source, on) / getPlayerCallSpeaker(source), setPlayerSubmix(source, name | null).
  • Клиент: клиентские экспорты pma-voice (setRadioChannel, setCallChannel, setRadioVolume, setCallVolume, setVoiceProperty, overrideProximityRange, toggleMutePlayer, toggleRadioAnim...) плюс addRadioDisableBit / removeRadioDisableBit, registerCustomSubmix, setEffectSubmix; собственные addRadioChannel / removeRadioChannel / setActiveRadioChannel / getRadioChannels, setCallSpeaker / getCallSpeaker, setRadioAnimDisabled, createSubmix(name, spec) / getSubmix / editSubmix / listSubmixes, cycleProximity, getBackend, isRadioTalking.
  • Локальные события: клиент pma-voice:setTalkingMode, pma-voice:radioActive, pma-voice:toggleRadioAnim; сервер pma-voice:playerMuted.

ai-weathersync

Экспорты под ai-weathersync и qb-weathersync (весь его контракт): setWeather, setTime, setBlackout, setTimeFreeze, setDynamicWeather, nextWeatherStage, getWeatherState, getTime, getBlackoutState, getTimeFreezeState, getDynamicWeather. Скрипты используют GetWeather / SetWeather... из ai-core (библиотека world), которые работают с любым скриптом погоды.

ai-chat

Заменяет ресурс chat FiveM.

  • Клиент: экспорты addMessage(message), addSuggestion(name, help, params); события chat:addMessage, chatMessage (author, color, text), chat:addSuggestion(s), chat:removeSuggestion, chat:addMode / chat:removeMode, chat:clear.
  • Сервер: экспорты addMessage(target, message), registerMessageHook(fn), registerMode(data); событие chatMessage (source, author, text) перед доставкой (отмените его, чтобы отбросить сообщение).

ai-mysql

Заменяет oxmysql: экспорты под ai-mysql и oxmysql: query, single, scalar, insert, update, prepare, rawExecute, transaction, startTransaction, store, isReady, awaitConnection, execute, fetch, каждый также как <name>_async / <name>Sync. Также имена ghmattimysql (execute, scalar, transaction, store) и mysql-async (mysql_execute, mysql_insert, mysql_fetch_all, mysql_fetch_scalar, mysql_transaction, mysql_store); события oxmysql:error, oxmysql:transaction-error. См. База данных.

На этой странице