ai-smallresources для разработчиков
Клиентские экспорты, событие ремня безопасности, state bags и метаданные ai-smallresources.
Чтобы читать ремень безопасности или жесты из своего скрипта, используйте seatbelt.isOn() / seatbelt.onChange(fn) и gestures.isHandsUp() / gestures.isPointing() из lib (клиент; в Lua aiLib.seatbelt, aiLib.gestures). Они идут через ai-core и работают с любым запущенным скриптом ремня безопасности или эмоций. Экспорты ниже являются тем, что читает ai-core, пока отвечает ai-smallresources.
Все три экспорта клиентские, синхронные и читают локального игрока. GetSeatbelt типизирован как AiSmallResourcesClientExports в @aicore-fivem/shared; IsHandsUp и IsPointing не типизированы (используйте callExport).
import { resourceExport, callExport } from "@aicore-fivem/lib/client";
const small = resourceExport("ai-smallresources");Клиентские экспорты
GetSeatbelt
Пристёгнут ли локальный игрок ремнём безопасности.
Сторона: клиент · Ожидание: нет
GetSeatbelt(): boolean | nulllocal worn = exports['ai-smallresources']:GetSeatbelt() -- true, false или nilВозвращает
true, если пристёгнут, false, если нет. null, если функция Seatbelt выключена в панели или игрок не в транспорте с ремнём безопасности.
Пример
import { seatbelt } from "@aicore-fivem/lib/client";
// Иконка ремня в HUD: прочитать один раз, затем следить за изменениями.
let worn = seatbelt.isOn();
seatbelt.onChange((value) => {
worn = value;
});Читайте его при действии или смене транспорта, никогда не каждый кадр.
IsHandsUp
Поднял ли локальный игрок руки (жест X).
Сторона: клиент · Ожидание: нет
IsHandsUp(): booleanlocal up = exports['ai-smallresources']:IsHandsUp()Возвращает
true, пока руки подняты, иначе false.
IsPointing
Показывает ли локальный игрок пальцем (жест B).
Сторона: клиент · Ожидание: нет
IsPointing(): booleanlocal pointing = exports['ai-smallresources']:IsPointing()Возвращает
true, пока показывает, иначе false.
События
ai-smallresources:seatbelt
Срабатывает на локальном клиенте, когда меняется ремень безопасности. Имя SEATBELT_EVENT в @aicore-fivem/shared. ai-core передаёт его дальше как своё собственное событие ремня безопасности, которое слушает seatbelt.onChange из lib; предпочитайте его.
Сторона: клиент (локальное событие)
Prop
Type
AddEventHandler('ai-smallresources:seatbelt', function(worn)
print('seat belt', worn)
end)Каждое другое событие ai-smallresources внутреннее (его клиент и его сервер).
State bags и метаданные
| Имя | На чём | Тип | Значение |
|---|---|---|---|
aiHold | игрок | string | false | Предмет новостей, который держит игрок (newscam, newsmic, newsboom). |
aiCarrying | игрок | number | Игрок кого-то несёт (его серверный id). |
aiCarriedBy | игрок | number | Игрока кто-то несёт (его серверный id). |
aiDiving | игрок | boolean | На игроке снаряжение для дайвинга. |
aiRealPlate | транспорт | string | Настоящий номер, пока установлен фальшивый. |
aiMoored | транспорт | boolean | Лодка привязана к швартову. |
diveOxygen | метаданные персонажа (ai-core) | number | Секунды воздуха, оставшиеся в баллоне. |
aiPlayerCount / aiMaxPlayers | GlobalState | number | Игроки онлайн и слоты, выставляются, пока включён Discord Rich Presence. |
// Сервер: настоящий номер транспорта, фальшивый он или нет.
export function realPlate(vehicle: number): string {
const real = Entity(vehicle).state.aiRealPlate as string | undefined;
return real ?? GetVehicleNumberPlateText(vehicle);
}Используемые предметы
Регистрируются через слой инвентаря ai-core, поэтому работают с любым запущенным инвентарём: binoculars, firework1-firework4, newscam, newsmic, newsboom, fakeplate, notepad, note (метаданные text и description), diving_gear, diving_fill.