Экспорты скриптов
Экспорты каждого скрипта 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): void | handler, вернувший 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 | null | Id заспавненного личного транспорта. |
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. См. База данных.