AI Core
Справочник APIКлиентские экспорты ai-core

Жесты и эмоции

Проверить поднятые руки и указание пальцем, проиграть и остановить эмоцию по имени и узнать, какой скрипт эмоций отвечает, какое бы меню эмоций ни использовал сервер.

Поднятые руки, указание пальцем и эмоции даёт скрипт эмоций. ai-core спрашивает тот, который работает, поэтому полицейский обыск («у него руки подняты?») или рабочая анимация работают с любым из них.

Ведутся два отдельных списка, потому что не каждый скрипт умеет и то и другое:

  • Жесты (поднятые руки, указание пальцем): tgiann-emotes, codem-emotemenu, rpemotes (и rpemotes-reborn), 0r-animmenu, ai-smallresources. Отвечает первый запущенный в этом порядке.
  • Эмоции (проиграть по имени, остановить): tgiann-emotes, rpemotes (и rpemotes-reborn), scully_emotemenu, dpemotes. Отвечает первый запущенный в этом порядке.

IsHandsUp

Сообщает, подняты ли руки у локального игрока, в том скрипте эмоций, который отвечает за жесты.

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

Сигнатура
IsHandsUp(): boolean
Lua
local up = exports['ai-core']:IsHandsUp() -- или aiLib.gestures.isHandsUp()

Параметры

Нет.

Возвращает

boolean: true, пока руки подняты. false, когда нет или когда не работает ни один скрипт жестов.

Пример

resource/client/rob.ts
import { gestures, notify } from "@aicore-fivem/lib/client";
import { Locale } from "common";

RegisterCommand(
  "surrender_check",
  () => notify(Locale(gestures.isHandsUp() ? "HANDS_UP" : "HANDS_DOWN")),
  false,
);

Это читает только локального игрока. Чтобы узнать, подняты ли руки у другого игрока (ограбление, обыск), спросите сервер, а он спросит клиент того игрока.

IsPointing

Сообщает, указывает ли локальный игрок пальцем, в том скрипте эмоций, который отвечает за жесты.

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

Сигнатура
IsPointing(): boolean
Lua
local pointing = exports['ai-core']:IsPointing() -- или aiLib.gestures.isPointing()

Параметры

Нет.

Возвращает

boolean: true, пока игрок указывает пальцем. false, когда нет, когда не работает ни один скрипт жестов или когда запущенный не может это определить (в 0r-animmenu нет проверки указания).

Пример

resource/client/index.ts
import { gestures } from "@aicore-fivem/lib/client";

RegisterCommand("ispointing", () => console.log(gestures.isPointing()), false);

GetGestureProvider

Возвращает имя ресурса скрипта эмоций, который отвечает за поднятые руки и указание пальцем.

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

Сигнатура
GetGestureProvider(): string | null
Lua
local provider = exports['ai-core']:GetGestureProvider() -- или aiLib.gestures.provider()

Параметры

Нет.

Возвращает

string: имя ресурса ("tgiann-emotes"). null, когда не работает ни один из поддерживаемых скриптов.

Пример

resource/client/index.ts
import { gestures } from "@aicore-fivem/lib/client";

// Использовать собственную клавишу поднятия рук, только когда ни один скрипт эмоций её не даёт.
if (gestures.provider() === null) console.log("no gesture script, enabling my own hands-up key");

PlayEmote

Проигрывает эмоцию запущенного скрипта эмоций по имени её команды, то есть имени, которое игроки набирают после /e ("sit", "notepad").

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

Сигнатура
PlayEmote(name: string): boolean
Lua
local played = exports['ai-core']:PlayEmote(name) -- или aiLib.gestures.playEmote(name)

Параметры

Prop

Type

Возвращает

boolean: true, когда имя допустимо и скрипт эмоций получил запрос на её проигрывание. false для недопустимого имени или когда не работает ни один скрипт эмоций. true не доказывает, что эмоция есть в этом скрипте: неизвестное имя просто ничего не проиграет.

Пример

resource/client/notes.ts
import { gestures, progress } from "@aicore-fivem/lib/client";
import { Locale } from "common";

// Пишет заметку с эмоцией блокнота, пока идёт полоса прогресса.
export async function writeNote(): Promise<boolean> {
  gestures.playEmote("notepad");
  const done = await progress({ label: Locale("WRITING"), duration: 5000, canCancel: true });
  gestures.cancelEmote();
  return done;
}

CancelEmote

Останавливает эмоцию, которую проигрывает локальный игрок, в запущенном скрипте эмоций. Используйте, когда вашему скрипту нужны руки игрока (наручники, сбивание с ног, мини-игра).

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

Сигнатура
CancelEmote(): boolean
Lua
local stopped = exports['ai-core']:CancelEmote() -- или aiLib.gestures.cancelEmote()

Параметры

Нет.

Возвращает

boolean: true, когда скрипт эмоций получил запрос на остановку (и тогда, когда ничего не проигрывалось), false, когда не работает ни один скрипт эмоций.

Пример

См. пример PlayEmote.

GetEmoteProvider

Возвращает имя ресурса скрипта эмоций, который проигрывает эмоции по имени.

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

Сигнатура
GetEmoteProvider(): string | null
Lua
local provider = exports['ai-core']:GetEmoteProvider() -- или aiLib.gestures.emoteProvider()

Параметры

Нет.

Возвращает

string: имя ресурса ("rpemotes"). null, когда не работает ни один из поддерживаемых скриптов эмоций.

Пример

resource/client/index.ts
import { gestures, player } from "@aicore-fivem/lib/client";

// Предпочесть скрипт эмоций сервера, иначе простая анимация.
export function sitDown(): void {
  if (gestures.emoteProvider() !== null) gestures.playEmote("sit");
  else void player.playAnim("anim@amb@business@bgen@bgen_no_work@", "sit_phone_phoneputdown_idle_nowork");
}

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