Жесты и эмоции
Проверить поднятые руки и указание пальцем, проиграть и остановить эмоцию по имени и узнать, какой скрипт эмоций отвечает, какое бы меню эмоций ни использовал сервер.
Поднятые руки, указание пальцем и эмоции даёт скрипт эмоций. ai-core спрашивает тот, который работает, поэтому полицейский обыск («у него руки подняты?») или рабочая анимация работают с любым из них.
Ведутся два отдельных списка, потому что не каждый скрипт умеет и то и другое:
- Жесты (поднятые руки, указание пальцем): tgiann-emotes, codem-emotemenu, rpemotes (и rpemotes-reborn), 0r-animmenu, ai-smallresources. Отвечает первый запущенный в этом порядке.
- Эмоции (проиграть по имени, остановить): tgiann-emotes, rpemotes (и rpemotes-reborn), scully_emotemenu, dpemotes. Отвечает первый запущенный в этом порядке.
IsHandsUp
Сообщает, подняты ли руки у локального игрока, в том скрипте эмоций, который отвечает за жесты.
Сторона: клиент · Ожидание: нет
IsHandsUp(): booleanlocal up = exports['ai-core']:IsHandsUp() -- или aiLib.gestures.isHandsUp()Параметры
Нет.
Возвращает
boolean: true, пока руки подняты. false, когда нет или когда не работает ни один скрипт жестов.
Пример
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(): booleanlocal pointing = exports['ai-core']:IsPointing() -- или aiLib.gestures.isPointing()Параметры
Нет.
Возвращает
boolean: true, пока игрок указывает пальцем. false, когда нет, когда не работает ни один скрипт жестов или когда запущенный не может это определить (в 0r-animmenu нет проверки указания).
Пример
import { gestures } from "@aicore-fivem/lib/client";
RegisterCommand("ispointing", () => console.log(gestures.isPointing()), false);GetGestureProvider
Возвращает имя ресурса скрипта эмоций, который отвечает за поднятые руки и указание пальцем.
Сторона: клиент · Ожидание: нет
GetGestureProvider(): string | nulllocal provider = exports['ai-core']:GetGestureProvider() -- или aiLib.gestures.provider()Параметры
Нет.
Возвращает
string: имя ресурса ("tgiann-emotes"). null, когда не работает ни один из поддерживаемых скриптов.
Пример
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): booleanlocal played = exports['ai-core']:PlayEmote(name) -- или aiLib.gestures.playEmote(name)Параметры
Prop
Type
Возвращает
boolean: true, когда имя допустимо и скрипт эмоций получил запрос на её проигрывание. false для недопустимого имени или когда не работает ни один скрипт эмоций. true не доказывает, что эмоция есть в этом скрипте: неизвестное имя просто ничего не проиграет.
Пример
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(): booleanlocal stopped = exports['ai-core']:CancelEmote() -- или aiLib.gestures.cancelEmote()Параметры
Нет.
Возвращает
boolean: true, когда скрипт эмоций получил запрос на остановку (и тогда, когда ничего не проигрывалось), false, когда не работает ни один скрипт эмоций.
Пример
См. пример PlayEmote.
GetEmoteProvider
Возвращает имя ресурса скрипта эмоций, который проигрывает эмоции по имени.
Сторона: клиент · Ожидание: нет
GetEmoteProvider(): string | nulllocal provider = exports['ai-core']:GetEmoteProvider() -- или aiLib.gestures.emoteProvider()Параметры
Нет.
Возвращает
string: имя ресурса ("rpemotes"). null, когда не работает ни один из поддерживаемых скриптов эмоций.
Пример
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");
}Радиальное меню
Добавлять, удалять и обновлять пункты в том радиальном меню, которое использует сервер, с условиями, подменю и обработчиками нажатия.
Внешность
Надеть внешность персонажа на педа, прочитать внешность, которую носит пед, открыть магазин одежды, парикмахерскую или меню нарядов и одеть игрока в рабочую форму, какой бы скрипт одежды ни работал.