Клиентские события
Все клиентские локальные события, которые отправляет ai-core - локальный персонаж загружен или выгружен, состояние «лежит», кэшированные значения, видимость HUD, синхронизация мира, определения работ, подсказки клавиш, ремень безопасности - с аргументами и обработчиками.
Клиент ai-core отправляет эти события через TriggerEvent в игре самого игрока. Их слышит каждый клиентский ресурс этого игрока; другие игроки - никогда. Они описывают только локального игрока.
ai-core:client:playerLoaded
Персонаж локального игрока находится в мире. Начинайте здесь клиентскую работу, привязанную к персонажу (значения HUD, рабочие метки, циклы).
Сторона: клиент · Константа: CORE.clientPlayerLoadedEvent
Аргументы
Prop
Type
Обработчик
import { resourceExport } from "@aicore-fivem/lib/client";
import { CORE, type AiPlayerData } from "@aicore-fivem/shared";
const core = resourceExport("ai-core");
function start(data: AiPlayerData): void {
console.log(`hello ${data.character?.firstname}, cash ${data.money.cash ?? 0}`);
}
// Также покрывает перезапуск ресурса, когда игрок уже в мире.
const now = core.GetPlayerData();
if (now) start(now);
on(CORE.clientPlayerLoadedEvent, start);ai-core:client:playerUnloaded
Локальный персонаж отпущен: игрок вернулся на экран персонажей. Остановите работу, привязанную к персонажу, и очистите то, что хранили для него. (Когда игрок покидает сервер, его игра закрывается; ничего не срабатывает.)
Сторона: клиент · Константа: CORE.clientPlayerUnloadedEvent
Аргументы
Нет.
Обработчик
import { CORE } from "@aicore-fivem/shared";
on(CORE.clientPlayerUnloadedEvent, () => {
SendNUIMessage({ action: "reset" });
});ai-core:client:dead
Локальный игрок упал (мёртв или last stand) или поднялся, в том скрипте смерти, который работает. Срабатывает только при изменении.
Сторона: клиент · Константа: CORE.clientDeadEvent · Библиотека: medical.onChange
Аргументы
Prop
Type
Обработчик
import { medical } from "@aicore-fivem/lib/client";
// То же, что on(CORE.clientDeadEvent, ...).
medical.onChange((dead) => {
if (dead) SendNUIMessage({ action: "close" });
});ai-core:client:cache
Изменилось кэшированное значение локального игрока. Один наблюдатель в ai-core читает педа, транспорт, место и оружие для всех ресурсов и отправляет это событие только при изменении значения, поэтому ни одному ресурсу не нужно их опрашивать. На нём построены cache и onCache из библиотеки (aiLib.cache и aiLib.cache.onChange в Lua); используйте их.
Сторона: клиент · Константа: CORE.clientCacheEvent
Аргументы
Prop
Type
Обработчик
import { onCache } from "@aicore-fivem/lib/client";
onCache("vehicle", (vehicle, old) => {
if (vehicle !== false) console.log(`entered vehicle ${vehicle}`);
else if (old !== false) console.log("left the vehicle");
});ai-core:client:hudVisible
HUD должны показаться или скрыться: открылся полноэкранный интерфейс или закрылся последний. Ресурс HUD слушает его.
Сторона: клиент · Константа: CORE.clientHudVisibleEvent · Библиотека: hud.onChange
Аргументы
Prop
Type
Обработчик
import { hud } from "@aicore-fivem/lib/client";
hud.onChange((visible) => SendNUIMessage({ action: "visible", data: visible }));ai-core:client:worldSync
Синхронизация погоды и времени приостановлена или снова идёт. Скрипт погоды слушает его. См. Синхронизация погоды и времени.
Сторона: клиент · Константа: CORE.clientWorldSyncEvent
Аргументы
Prop
Type
Обработчик
import { CORE } from "@aicore-fivem/shared";
on(CORE.clientWorldSyncEvent, (paused: boolean) => {
console.log(paused ? "weather sync paused" : "weather sync running");
});ai-core:client:definitions
Работа или банда добавлена, изменена или удалена в админ-панели. Срабатывает на каждом клиенте, один раз на каждую изменённую работу или банду. Используйте в паре с экспортом GetDefinitions.
Сторона: клиент · Константа: CORE.clientDefinitionsEvent
Аргументы
Prop
Type
Обработчик
См. пример GetDefinitions.
ai-core:client:characterPortrait
Портрет для карточки персонажа на экране персонажей. Его отправляет скрипт одежды (ai-appearance); экран персонажей ai-core слушает и показывает картинку. Отправляйте его сами, только если пишете скрипт одежды.
Сторона: клиент · Константа: CORE.clientCharacterPortraitEvent · Кто отправляет: скрипт одежды, слушает ai-core
Аргументы
Prop
Type
Обработчик
import { CORE } from "@aicore-fivem/shared";
// Скрипт одежды передаёт портрет экрану персонажей.
export function sendPortrait(charId: number, txd: string): void {
emit(CORE.clientCharacterPortraitEvent, charId, `https://nui-img/${txd}/${txd}`);
}ai-core:client:keyHints
Список подсказок клавиш, которые должны показывать HUD, изменился. Несёт весь новый список. Используйте в паре с экспортом GetKeyHints.
Сторона: клиент · Константа: KEY_HINTS.changedEvent
Аргументы
Prop
Type
Обработчик
См. пример GetKeyHints.
ai-core:client:seatbelt
Ремень безопасности локального игрока изменился, в том скрипте ремня, который читает ai-core. Срабатывает от скриптов, которые сообщают об изменениях (ai-smallresources, qbx_seatbelt); с собственным ремнём HUD читайте GetSeatbelt, когда нужно.
Сторона: клиент · Константа: CORE.clientSeatbeltEvent · Библиотека: seatbelt.onChange
Аргументы
Prop
Type
Обработчик
import { seatbelt } from "@aicore-fivem/lib/client";
seatbelt.onChange((worn) => SendNUIMessage({ action: "belt", data: worn === true }));ai-smallresources:seatbelt
Собственное событие ремня ai-smallresources. Его слушают HUD, которые поддерживают только ai-smallresources. Новый код должен слушать ai-core:client:seatbelt выше, которое работает с каждым поддерживаемым скриптом ремня.
Сторона: клиент · Константа: SEATBELT_EVENT
Аргументы
Prop
Type
Обработчик
import { SEATBELT_EVENT } from "@aicore-fivem/shared";
on(SEATBELT_EVENT, (worn: boolean | null) => console.log(`belt: ${worn}`));Внутренние клиентские события
Keybind из библиотеки общается с клиентом ai-core двумя локальными событиями. Не отправляйте их и не отвечайте на них сами; используйте Keybind (TS) или aiLib.Keybind (Lua).
| Событие | Константа | Направление | Аргументы |
|---|---|---|---|
ai-core:client:keybind | KEYBIND.announceEvent | от библиотеки к ai-core | (info: KeybindInfo) привязка ждёт свою клавишу по умолчанию. |
ai-core:client:keybindKey | KEYBIND.keyEvent | от ai-core к библиотеке | (resource: string, name: string, key: string) клавиша для регистрации: клавиша из панели, иначе собственная клавиша скрипта. |
Серверные события
Все серверные локальные события, которые отправляет ai-core - персонажи, деньги, работы, дежурство, банды, метаданные, определения, предметы, смерти - с аргументами и обработчиками на TypeScript и Lua.
Сетевые события
Сетевые события, которые может слушать клиентский скрипт (канал данных игрока ai-core), и собственный сетевой трафик ai-core, который другие скрипты не должны вызывать.