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.