ai-lib для разработчиков
Как загрузить ai-lib в ресурс на Lua или JavaScript, где находится справочник lib, и собственные клиентские экспорты и события ai-lib.
ai-lib несёт @aicore-fivem/lib для ресурсов, которые не включают npm-пакет в сборку. Сами функции описаны один раз, в справочнике lib:
- Lib: обзор
- Lib: клиентские функции
- Lib: серверные функции
- Lib: общие функции
- Lua (
aiLib): двойники на Lua и порядок их аргументов
Как его загрузить
fx_version 'cerulean'
game 'gta5'
lua54 'yes'
dependency 'ai-lib'
shared_script '@ai-lib/init.lua'
client_script 'client.lua'
server_script 'server.lua'local L = aiLib.locale()
aiLib.notify(L('WELCOME'), 'success')Модули загружаются при первом использовании (aiLib.Points, aiLib.progress...) внутри вашего ресурса, поэтому точки, привязки клавиш и колбэки, которые вы создаёте, принадлежат вашему ресурсу и исчезают, когда он останавливается. Функции, которые ждут (triggerServerCallback, menu.show, progress, spawnVehicle, progressFor), должны выполняться внутри потока или обработчика события.
Клиентские экспорты
notify, progress, showPrompt, menu, input, skillCheck и lockpick из lib вызывают их за вас; используйте функции lib. Они типизированы как AiLibClientExports в @aicore-fivem/shared (resourceExport("ai-lib")). Подсказки, меню и зоны принадлежат вызывающему ресурсу и исчезают, когда он останавливается.
Notify
Показывает карточку уведомления на экране этого игрока.
Сторона: клиент · Ожидание: нет
Notify(notification: Notification): voidexports['ai-lib']:Notify({ text = 'Saved', kind = 'success' })
-- то же через lib: aiLib.notify('Saved', 'success')Notification
Prop
Type
Возвращает
Ничего. Уведомление без text отбрасывается. Если владелец выбрал в панели другой скрипт уведомлений, карточка идёт туда; если этот скрипт её не принимает, её рисует ai-lib.
Пример
import { notify } from "@aicore-fivem/lib/client";
notify("Your vehicle was stored", "success", 5000);import { notify, onClientEvent } from "@aicore-fivem/lib/server";
// Та же карточка на экране одного игрока, отправленная с сервера.
onClientEvent("myscript:collectPay", (source) => {
notify(source, "You were paid $500", "info");
});ShowProgress и HideProgress
Показывает полосу прогресса на время или скрывает её. Только полосу: действие, его анимацию и логику отмены выполняет вызывающий скрипт. Используйте вместо этого progress (клиент) или progressFor (сервер) из lib, которые делают всё это.
Сторона: клиент · Ожидание: нет
ShowProgress(label: string, duration: number): void
HideProgress(): voidProp
Type
Пока полоса показывается, клавиша отмены (Backspace) вызывает локальное событие ai-lib:client:cancelProgress.
ShowPrompt и HidePrompt
Показывает или обновляет одну из подсказок вызывающего ресурса или скрывает её. Используйте showPrompt / hidePrompt из lib, а лучше Points из lib, который сам показывает и скрывает подсказки по расстоянию.
Сторона: клиент · Ожидание: нет
ShowPrompt(id: string, text: string, at?: PromptAnchor): void
HidePrompt(id: string): voidProp
Type
Когда игрок нажимает клавишу взаимодействия, пока ваша подсказка сверху, срабатывает локальное событие ai-lib:client:promptPressed (resource, id); onPromptPressed из lib фильтрует его для вашего ресурса.
CloseDialog
Закрывает открытое меню или диалог ввода вызывающего ресурса. Ожидающий вызов menu.show / input отвечает null, как если бы его закрыл игрок. Сторона: клиент · Ожидание: нет.
CloseDialog(): voidСлужебные экспорты
Ими пользуются собственные функции lib. Вы их не вызываете.
| Экспорт | Кем используется |
|---|---|
OpenMenu(requestId, request), OpenInput(requestId, request), OpenMinigame(requestId, request) | menu.show, input, skillCheck, lockpick из lib. Ответы возвращаются как ai-lib:client:menuResult / inputResult с id запроса. |
AddZone(key, shape, interval, inside), RemoveZone(key) | Zones из lib в ресурсах на JavaScript: ai-lib проверяет зоны всех ресурсов одним таймером и отвечает ai-lib:client:zone (owner, key, inside). |
AddModelPoint(key, def, entity), RemoveModelPoint(key) | Points.addModel / addVehicle из lib в режиме подсказок: ai-lib находит ближайший объект и отвечает ai-lib:client:modelPoint (owner, key, entity). |
События
| Событие | Сторона | Аргументы | Что это |
|---|---|---|---|
ai-lib:client:notify | Сервер к клиенту | notification: Notification | Показывает карточку на экране этого игрока. Её отправляет серверная notify(source, text, kind?, duration?) из lib. |
ai-lib:client:promptPressed | Клиент (локальное) | resource: string, id: string | Клавиша взаимодействия нажата, пока подсказка этого ресурса была сверху. |
ai-lib:client:cancelProgress | Клиент (локальное) | нет | Клавиша отмены нажата, пока показывается полоса прогресса. |
// Сервер: уведомление без lib.
emitNet("ai-lib:client:notify", source, { text: "Welcome to the city", kind: "info", duration: 6000 });ai-lib
Общий интерфейс игрока, которым пользуется каждый скрипт (уведомления, полоса прогресса, подсказки, меню, диалоги ввода, мини-игры), и вспомогательные функции AI Core для ресурсов на Lua и JavaScript.
ai-loading
Экран загрузки, который игроки видят, пока загружается игра, с названием вашего сервера, фоном, прогрессом загрузки и советами.