AI Core
Основноеai-lib

ai-lib для разработчиков

Как загрузить ai-lib в ресурс на Lua или JavaScript, где находится справочник lib, и собственные клиентские экспорты и события ai-lib.

ai-lib несёт @aicore-fivem/lib для ресурсов, которые не включают npm-пакет в сборку. Сами функции описаны один раз, в справочнике lib:

Как его загрузить

fxmanifest.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'
client.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): void
Lua
exports['ai-lib']:Notify({ text = 'Saved', kind = 'success' })
-- то же через lib: aiLib.notify('Saved', 'success')

Notification

Prop

Type

Возвращает

Ничего. Уведомление без text отбрасывается. Если владелец выбрал в панели другой скрипт уведомлений, карточка идёт туда; если этот скрипт её не принимает, её рисует ai-lib.

Пример

client.ts
import { notify } from "@aicore-fivem/lib/client";

notify("Your vehicle was stored", "success", 5000);
server.ts
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(): void

Prop

Type

Пока полоса показывается, клавиша отмены (Backspace) вызывает локальное событие ai-lib:client:cancelProgress.

ShowPrompt и HidePrompt

Показывает или обновляет одну из подсказок вызывающего ресурса или скрывает её. Используйте showPrompt / hidePrompt из lib, а лучше Points из lib, который сам показывает и скрывает подсказки по расстоянию.

Сторона: клиент · Ожидание: нет

Сигнатура
ShowPrompt(id: string, text: string, at?: PromptAnchor): void
HidePrompt(id: string): void

Prop

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 });

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