Состояние игры

Инициализация подмодулей mod.game, общие свойства и события игры.

mod.game

tera-game-state — встроенная библиотека состояния игры для сетевых модулей. Доступна как mod.game. Вместо повторного разбора S_LOGIN используйте enter_game, вместо собственного хранения имени персонажа — mod.game.me.name. Это уменьшает количество одинаковых хуков и зависимость модуля от версий пакетов.

Инициализация

me загружается по умолчанию. Остальные подмодули запросите в конструкторе, до входа персонажа:

module.exports = function StateExample(mod) {
    mod.game.initialize(['inventory', 'party', 'me.abnormalities']);
    const onEnter = () => mod.log(`Character: ${mod.game.me.name}`);
    const onInventory = () => mod.log(`Gold: ${mod.game.inventory.money / 10000n}`);
    mod.game.on('enter_game', onEnter);
    mod.game.inventory.on('update', onInventory);

    this.destructor = () => {
        mod.game.removeListener('enter_game', onEnter);
        mod.game.inventory.removeListener('update', onInventory);
    };
};

initialize('inventory') и initialize(['inventory']) эквивалентны. Запрос me.abnormalities включает подмодуль и дополнительную функцию. Повторное обращение использует уже загруженный подмодуль. Позднее включение не восстанавливает автоматически все пакеты, пропущенные до инициализации.

Общие свойства

Свойство Значение
isIngame Персонаж вошел в игру
isInLoadingScreen Активен экран загрузки
state Внутреннее состояние: 0 — INVALID, 1 — CHARACTER_LOBBY, 2 — INGAME
language Язык из C_LOGIN_ARBITER
accountId, accountName Сведения об учетной записи после соответствующих пакетов
serverId ID текущего сервера
isTBA Режим TERA Battle Arena на поддерживающих его патчах
data Справочники клиента

События

enter_character_lobby, leave_character_lobby, enter_game, leave_game, enter_loading_screen, leave_loading_screen не имеют аргументов. События состояния отправляются при его изменении. Например, S_LOGIN включает экран загрузки и состояние игры, S_SPAWN_ME завершает экран загрузки. Вход в игру не означает, что уже получен инвентарь: для него ждите inventory.update.

Подмодули используют EventEmitter (on, once, removeListener). Удаляйте свои обработчики при выгрузке, не вызывайте removeAllListeners на общем объекте: там могут быть подписки других модулей.

Подмодули

me, inventory, party, contract, glyphs, talents, data.

Источники: doc/mod/tera-game-state.md, mods/tera-game-state/README.md, mods/tera-game-state/index.js.