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

Библиотека для Lua

aiLib - библиотека для ресурсов на Lua, загружается из ai-lib как ox_lib.

В ai-lib есть порт библиотеки на Lua. Он работает внутри ресурса, который его загружает, поэтому точки, клавиши, команды и callback принадлежат этому ресурсу и уходят вместе с ним.

fxmanifest.lua
dependency 'ai-lib'
shared_script '@ai-lib/init.lua'

Модули загружаются при первом использовании: aiLib.notify(...), aiLib.Points.new(), aiLib.addCommand(...). Ожидающие вызовы (triggerServerCallback, menu.show, progress, spawnVehicle, progressFor) должны выполняться в потоке. Типы - класс AiLib в init.lua ai-lib.

Ресурсы на JavaScript без сборщика вместо этого загружают @ai-lib/dist/client.js / server.js: та же глобальная aiLib с функциями /shared и /client или /server библиотеки TypeScript.

Обе стороны

ФункцияЧто
aiLib.side'client' или 'server'.
aiLib.every(ms, fn, options?)Периодическая работа в едином потоке-планировщике ресурса (0 = каждый кадр); job:set(active), job:stop(), job.running. Задача никогда не делает Wait.
aiLib.waitFor(check, timeout?, interval?)Ждёт, пока check не вернёт значение.
aiLib.formatText(text, ...)Подстановки {0}.
aiLib.locale(resource?)Возвращает t(key, ...) и объединённую языковую таблицу.
aiLib.fail(error){ ok = false, error = error } для серверных действий.
aiLib.numbers.round(value, decimals?), groupDigits(value, separator?), headingTo(from, to)Числовые функции.
aiLib.stripGameText(text)Убирает HTML-теги и коды GTA.
aiLib.notify(...)Клиент (text, kind?, duration?); сервер (source, text, kind?, duration?).
aiLib.inventory, aiLib.world, aiLib.appearanceЧерез ai-core; поля различаются по сторонам (ниже).

Клиент

ФункцияЧто
aiLib.cacheped, playerId, serverId, vehicle, seat, weapon; cache.onChange(key, handler).
aiLib.playerData.get(key), playerData.onChange(key, handler)Данные игрока из ai-core (character, money, jobs, duty, gangs, activeGang).
aiLib.triggerServerCallback(name, args?, timeout?)Спрашивает сервер; возвращает ответ и ошибку.
aiLib.onServerCallback(name, handler), aiLib.onServerEvent(name, handler)Отвечает серверу, слушает события сервера.
aiLib.callAction(name, args?, { fallback, timeout?, silent? })Выполняет серверное действие, показывает переведённый отказ, возвращает ответ ok или nil.
aiLib.progress(options)Полоса прогресса ai-lib (anim, scenario, canCancel, whileDead, freeze, disable); true, если дошла до конца. progress.cancel(), progress.isRunning().
aiLib.menu.show(request, listeners?)Меню ({ title, items, back? }, слушатели onHover, onToggle); возвращает выбранный id.
aiLib.input(request)Диалог ввода ({ title, confirm, fields }); возвращает значения или nil.
aiLib.itemPicker({ title, target? })Инструменты админа: сетка предметов ai-core.
aiLib.skillCheck(difficulty, keys?)Проверка навыка; true, если пройден каждый этап.
aiLib.lockpick({ difficulty?, pins?, picks? })'opened', 'broken' или 'cancelled'.
aiLib.showPrompt(id, text), hidePrompt(id), onPromptPressed(handler)Подсказка ai-lib.
aiLib.Points.new()Точки взаимодействия: :add(id, options), :addModel(id, options), :addVehicle(id, options), :remove(id), :clear(), :refresh().
aiLib.Zones.new()Зоны: :add(id, options), :remove, :clear, :isInside.
aiLib.LocalPed.new(options)Локальный пед (attach, seat); :remove().
aiLib.Blips.new(), aiLib.Blips.create(options)Метки: :add, :get, :remove, :clear.
aiLib.Keybind.new(options)Переназначаемая клавиша (hint, icon, hintLabel); :disable(state).
aiLib.playercoords, heading, distanceTo, freeze, teleport (ground = 'find' или без z: земля под x / y), playAnim, stopAnim.
aiLib.playerPed(serverId)Пед игрока, 0 вне зоны.
aiLib.nearestPlayer(metres, { from?, filter? })Серверный id ближайшего другого игрока.
aiLib.nearestVehicle(metres, { networked?, notOwn?, filter? })Ближайший транспорт.
aiLib.waitForEntity(netId, timeout?)Сущность, когда она появится здесь, 0 по таймауту.
aiLib.waypoint()Метка маршрута на карте { x, y }.
aiLib.onShot(handler)Кадр, в котором локальный пед стреляет.
aiLib.fadeOut(ms?), aiLib.fadeIn(ms?)Затемнение экрана.
aiLib.controls.disable(reason, controls, group?), disableAll(reason, except?), enable(reason)Отключённое управление.
aiLib.hud.hide(reason), show(reason), visible()Скрытие HUD.
aiLib.keyHints.show(id, { label, keybind?, key?, icon? }), hide(id)Строки подсказок клавиш.
aiLib.gestures.isHandsUp(), isPointing(), provider()Поднятые руки и указание.
aiLib.radial.add(item), remove(id), refresh()Пункты радиального меню через ai-core.
aiLib.inventory.openInventory(), hasItem(item, count?), currentWeapon()Активный инвентарь.
aiLib.world.pauseSync(reason), resumeSync(reason)Пауза синхронизации погоды и времени.
aiLib.appearance.apply(ped, look), read(ped)Внешность через активный скрипт одежды.
aiLib.requestModel, requestAnimDict, requestAnimSet, requestPtfxAsset, requestTextureDict, requestWeaponAsset (name, timeout?)Загрузка игрового ассета.
aiLib.pedHeadshot(ped, transparent?, timeout?)Дескриптор и имя текстуры портрета.
aiLib.locationName(coords?), vehicleLabel(vehicle), groundZ(x, y, z?)Названия и высота земли.
aiLib.raycast(from, to, options?)Луч-проба: { coords, normal, entity } или nil.
Lua
local points = aiLib.Points.new()
points:add('shop', {
  coords = vector3(25.7, -1347.3, 29.5),
  label = 'Open shop',
  icon = 'basket-shopping',
  onPressed = function()
    local pick = aiLib.menu.show({ title = 'Shop', items = { { id = 'water', label = 'Water' } } })
    if pick then aiLib.callAction('myshop:buy', { pick }, { fallback = 'BUY_FAILED' }) end
  end,
})

Сервер

ФункцияЧто
aiLib.onClientCallback(name, handler, { rate?, lock?, ace? })Отвечает на callback клиента через шлюз.
aiLib.onClientEvent(name, handler, options?)Сетевое событие клиента через шлюз.
aiLib.triggerClientCallback(name, source, args?, timeout?)Спрашивает клиента; возвращает ответ и ошибку.
aiLib.isAdmin(source, ace?)Является ли игрок админом ai-core (или есть ли у него ace).
aiLib.RateLimit.new(count, windowMs)Лимит всплесков на игрока: limit:take(source), limit:release(source).
aiLib.progressFor(source, options)Полоса ai-lib на клиенте игрока, время считает сервер (ждёт).
aiLib.minigameFor(source, options)Мини-игра на клиенте игрока: 'won', 'lost' или 'broken' (ждёт).
aiLib.addCommand(name, { help?, params?, restricted? }, handler)Команда; handler(source, args, raw).
aiLib.onCharacter({ loaded?, unloaded? })Загрузка и выгрузка персонажа, с повтором персонажей, загруженных до перезапуска.
aiLib.onlinecharacter, name(src, fallback), jobs, gangs, jobGrade, gangGrade, dutyJob, sources (спрашивает ai-core при каждом вызове).
aiLib.spawnVehicle(options)Серверный транспорт (model, coords, asker, plate, fuel, keysTo, purpose, driver, seats, props, setup, locked, bucket, persistent, bags); ждёт.
aiLib.playersNear(source, radius), playersNearEntity(entity, radius)Игроки рядом.
aiLib.nearestPlayerTo(source, metres, filter?), nearestVehicleTo(source, metres, filter?)Ближайший игрок или транспорт.
aiLib.vehicleFromNet(netId), vehicleNearPlayer(source, netId, { metres?, driver? })Живой транспорт по net id от клиента или 0.
aiLib.aiLog(channel, message, options?)Лог через ai-core.
aiLib.inventoryaddItem, removeItem, getItemCount, hasItem, canCarryItem, getItems, clearInventory, registerStash, openInventory, registerUsableItem, getItemDefinition.
aiLib.vehicleKeys.give(source, vehicle, purpose?), remove, hasКлючи от транспорта через ai-core.
aiLib.phonenumber, sourceOf, hasPhone, mail, message, notify.
aiLib.dispatch.alert(alert)Полицейское оповещение через ai-core.
aiLib.prison.jail(src, minutes, by?), release(src), timeLeft(src)Тюремные сроки.
aiLib.worldgetWeather, setWeather, getTime, setTime, setBlackout, freezeTime.
aiLib.appearance.get(charId), provider()Сохранённая внешность персонажа (ждёт).

Нет на стороне Lua: классов админ-панели, PendingActions, PlayerMap, Cooldowns, строгого чтения ввода, классов state bag (Lua сам читает Entity(e).state) и базы данных (ресурсы на Lua используют API oxmysql из ai-mysql).

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