Другие возможности API

Доступ к зависимостям, системные сообщения и горячая перезагрузка.

Зависимости и RequireInterface

mod.require['module-name'] получает интерфейс другого модуля через менеджер Toolbox. Это не то же самое, что Node.js require() файла. Объявляйте распространяемые зависимости в module.json; отсутствие требуемого модуля может вызвать исключение.

Для модуля с именованными экспортами интерфейс по умолчанию — { globalMod, clientMod, networkMod }. Собственный RequireInterface(globalMod, clientMod, networkMod, requiredBy) может вернуть удобный публичный API. Например, library возвращает сетевой экземпляр напрямую, поэтому доступ выглядит как mod.require.library.player.

Доступность экземпляров зависит от контекста вызова: общая часть не может предполагать наличие игрового подключения. Свойства mod.globalMod и mod.clientMod используются для собственных частей модуля при соответствующих экспортах. Не обращайтесь к ним, если часть не определена.

Информация о модуле и соединении

mod.info содержит метаданные и путь модуля. Сетевой интерфейс предоставляет serverId, serverList, serverIp, connection, а также сведения о клиенте и патче. Поля соединения имеют смысл, пока оно активно. Для состояния персонажа используйте mod.game.me, а не сведения TCP-соединения.

Системные сообщения

mod.parseSystemMessage(message) разбирает строку системного сообщения в { id, tokens }; mod.buildSystemMessage(message, data) выполняет обратное преобразование. buildSystemMessage принимает объект { id, tokens } или имя сообщения и объект токенов отдельно. Имена разрешаются по карте системных сообщений клиента.

// Within a handler whose event has a system-message string:
const parsed = mod.parseSystemMessage(event.message);
mod.log(parsed.id, parsed.tokens);
const rebuilt = mod.buildSystemMessage(parsed);

Строка начинается с @, токены разделяются вертикальной табуляцией (\v). Не формируйте числовые ID вручную, если доступно символическое имя. Неизвестное имя или неверный формат могут вызвать исключение.

Горячая перезагрузка

Необязательные saveState() и loadState(state) экземпляра позволяют переносить временное состояние через перезагрузку модуля. Менеджер сохраняет состояние, выгружает модуль, создает экземпляры заново и восстанавливает данные. Это не постоянное хранение: при закрытии Toolbox используйте настройки.

module.exports.NetworkMod = class Counter {
    constructor(mod) {
        this.count = 0;
        mod.command.add('count-example', () => mod.command.message(String(++this.count)));
    }
    saveState() { return { count: this.count }; }
    loadState(state) { this.count = state?.count ?? 0; }
};

Источник: bin/mod.js, node_modules/tera-network-proxy/lib/connection/dispatch.js.